вторник, 2 февраля 2016 г.

Memcache и expiration time

Сегодня пришлось столкнуться со странной багой, связанной с Мемкешом.
При установке какого-либо короткого периода жизни ключа, ключ почему-то существовал гораздо дольше положенного времени.

После различных поисков и сравнений версий на серверах бага была обнаружена. Время в Мемкеше отличалось от системного, аж на 14 часов. Неясно почему, но отличалось. Бага решается перезапуском Мемкеша:

>  /etc/init.d/memcached restart

Небольшой скриптец как проверить системное время и время Мемкеша:
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211);
$stats = $memcache->getStats();
$mct = $stats['time'];
$curt = time();
echo'<pre>DIFF: ',($mct - $curt),'</pre>';

В идеале должно выводить 0 или -1.

Update: причиной отставания времени считаю уход в спящий режим. После восстановления системы из спящего режима системное время и время сервера Мемкеша различаются (Ubuntu 14.04)

четверг, 8 октября 2015 г.

Mercurial tips

Буквально по крупицам собранные команды, которые часто пригождаются на уровне джуниор:

получим свежие изменения с ремоут репозитория:
> hg pull
перейдем в голову ведущей ветки (пусть это будет master)
> hg up master
создадим веточку для работы
> hg branch MY-BRANCH

четверг, 23 июля 2015 г.

Каноничные SEO-грабли

В процессе длительной поддержки проекта рано или поздно приходится встречаться с доработками по SEO. И если вещи типа "тут нам такой тайтл, тут нам кейворды поменять" еще можно исправить костылями (хотя это тоже не самый лучший вариант), то некоторые запросы от СЕОшников стоило бы продумать заранее.
Ниже небольшая подборочка встречаемых запросов.

пятница, 10 июля 2015 г.

Монтирование с помощью sshfs

В своей обычной работе я использую Geany. Можете плеваться, смотреть свысока и т.д., но пока меня в нем всё устраивает. Даже тот факт, что в Geany никак нельзя открыть файл с ftp или ssh. Это легко решается с помощью sshfs. sshfs позволяет подмонтировать сторонний ресурс как файловую систему и открывать с него файлы из Geany. Краткий алгоритм как все это сделать:

воскресенье, 3 мая 2015 г.

Развертывание проекта на Go в Heroku

В каком-то древнем году я зачем-то зарегистрировался на Heroku.
И с тех пор даже не представлял что там происходит и зачем это мне вообще. Но вот недавно в связи с изучением языка Go (golang) пришлось поискать платформы на которых можно развернуть проект на Go. Помимо Google Application Engine, оказалось, что Heroku тоже поддерживает Go.
И развертывание проекта в инфраструктуру Heroku осуществляется довольно быстро и удобно.

За основу поста взят материал книги Building Web Apps with Go, thanks Jeremy Saenz.

Я опускаю подробности по разработке на Go, ибо это достаточно популярно описано в вышеупомянутой книге, остановлюсь лишь на развертывании проекта, ибо это у меня получилось не сразу.

вторник, 24 февраля 2015 г.

Модификация капчи

В битриксе описание работы с капчей довольно краткое. Есть метод получения капчи, есть метод проверки, есть несколько методов по установке различных параметров капчи. Но если залезть в код класса капчи, то можно обнаружить, что большинство параметров можно указать с помощью соответствующих настроек модуля main. Причем в открытом доступе (на странице настроек главного модуля) я эти настройки не нашел. В этот раз меня интересовали две из них:

1. CAPTCHA_letters - настройка опредеделяет алфавит символов, которые будут использованы при генерации проверочного кода. Таким образом, можно например сделать вашу капчу на кириллице:
COption::SetOptionString('main', 'CAPTCHA_letters', 'АБВГДЕЖЗИК');
Естественно, шрифт должен быть с поддержкой кириллицы, шрифт битрикса по умолчанию, по-моему, ее не имеет.

2. CAPTCHA_arTTFFiles - настройка определяет шрифты, с помощью которых будет сгенерена картинка капчи. Шрифты ищутся в папке /bitrix/modules/main/fonts/:
COption::SetOptionString('main', 'CAPTCHA_arTTFFiles', 'my_custom_font.ttf');

Ну и чтобы не засорять модуль своими шрифтами можно сделать так:
COption::SetOptionString('main', 'CAPTCHA_arTTFFiles', '../../../templates/my_tpl/fonts/my_custom_font.ttf');
и разместить файл шрифта в шаблоне my_tpl вашего сайта.

суббота, 15 ноября 2014 г.

Расширение почтовых шаблонов

Вообще невозможность сделать это является камнем преткновения в шаблонах почтовых сообщений Битрикс.
В шаблонах нельзя задавать циклы! Циклы в почтовых шаблонах задавать нельзя!
Если, например, в письме рассылать список товаров, то приходится либо захардкодить все html-оформление, либо вынести шаблон товара например в языковой файл.
В любом случае требуется какое-то взаимодействие с кодом.

Однажды я решил понять, как же засунуть в шаблоны циклы. Как оказалось - это возможно и я даже реализовал простейший модуль, в котором сторонний шаблонизатор обрабатывает свой блок разметок и отдает контент обратно в шаблон Битрикс.

Тем кому не терпится скачать - ссылка на github. Краткое README там имеется, но я еще его тут повторю.