XHProf: профилирование PHP

Date April 27th, 2012 Author Vitaly Agapov

Черную кошку в темной комнате искать бесполезно, особенно если ее там нет, а черного бультерьера – небезопасно, особенно если он там есть.

Народная мудрость

Если приходится иметь дело с web-приложениями, написанными на php, то надо быть готовым разбираться с тем, почему приложение работает медленно, откуда растут ноги у тормозов, почему растёт использование системных ресурсов при увеличении нагрузки и так далее. Тут очень пригодятся инструменты, позволяющие собрать кое-какую статистику о различных аспектах работы приложения.

Особую прелесть приобретает этот процесс, если ты не являешься автором приложения, и оно представляет для тебя просто большой закрытый чёрный ящик. Тогда профилирование приложения без тщательного исследования кода позволит проделать в чёрном ящике дырочку для нашего любопытного взгляда.

Читать далее »

Tags: , ,
Категория: Drupal, Nginx, PHP, Web-dev | Нет комментариев »


Отправка сообщений в Jabber через web

Date April 17th, 2012 Author Vitaly Agapov

— Мне сказали — умный человек.
— Ну мало ли что про человека болтают!

— «Тот самый Мюнхгаузен»


Эта краткая заметка посвящена отправке сообщений по протоколу XMPP с помощью Perl. В данном случае это будет не простой Perl-скрипт, а cgi-сценарий под веб-сервером, хотя суть и не меняется. Фактически и не заметка это будет, а просто набор рабочего кода, который может пригодиться в будущем. Если пригодится кому-то кроме меня самого, то вообще прекрасно.

Читать далее »

Tags: , ,
Категория: Perl, Web-dev | Нет комментариев »


Drupal: остаёмся без Apache. Nginx + php_fpm

Date March 16th, 2012 Author Vitaly Agapov

Конечно, лучший индеец – это мёртвый индеец.

— Харуки Мураками «Охота на овец»

No Apache
Связка вида Apache + nginx всегда была для меня чем-то самим собой разумеющимся. Nginx отлично раздаёт статику, но не имеет поддержки php, perl, ajp и ещё многого нужного. Так бы и продолжалось дальше, но в какой-то момент я всё таки решил выкинуть одно звено из этой цепочки. И слабым звеном был признан Apache, не столько потому, что для работы сайта на Drupal он оказался совсем необязательным, а скорее из желания поэкспериментировать.

Целью эксперимента при этом вовсе не является желание ускорить работу сайта. Это всё-таки не Perl, где при переходе на FastCGI появляется изрядная прибавка в скорости выполнения, щедро оплачиваемая необходимостью переписывать код для совместимости с FastCGI. Но зато мы должны получить большую нагрузоустойчивость и меньший расход оперативной памяти сервера.

Читать далее »

Tags: , ,
Категория: Drupal, Nginx, Web-dev | 2 Комментариев »


Замена свечей зажигания на Kia Sportage

Date February 21st, 2012 Author Vitaly Agapov

Сделал небольшую видеоинструкцию по замене свечей зажигания на Kia Sportage. Это оказалось чуть сложнее, чем на других машинах, с которыми я имел дело. Но, как говорится, глаза боятся, а руки делают.

Tags: ,
Категория: Beyond IT | 1 Комментарий »


Оквадрачивание всех картинок внутри директории

Date January 20th, 2012 Author Vitaly Agapov

Взгляни на его форму: квадрат, воплощение коварства!

— м/ф «SpongeBob SquarePants»

Возникла необходимость сделать все изображения в одной директории квадратными, причём таким образом, чтобы не нарушить центровку изображений. В моём случае это была директория с файлами изображений Drupal, поэтому задача разбивается на две части. Первая часть – универсальная – как автоматически отредактировать все изображения. Вторая часть – для Drupal – как обновить данные о новых изображениях в базе данных.

Пользоваться будем нашим любимым Perl и его модулем для работы с библиотекой ImageMagick.

Читать далее »

Tags: ,
Категория: Drupal, Perl | Нет комментариев »


Заметки о Drupal: Breadcrumbs

Date January 19th, 2012 Author Vitaly Agapov


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

– Братья Гримм «Гензель и Гретель»

Сегодняшняя коротенькая заметка касается кастомизации цепочки навигации в Drupal, то есть breadcrumbs. Дело в том, что Drupal всегда по умолчанию вставляет в начало цепочки ссылку на главную страницу, а в конец не вставляет ссылку на текущую ноду. Вполне вероятно, что это где-то можно настроить, но я не нашёл. Ещё более вероятно, что есть модуль, решающий эту проблему,но ставить лишний модуль для такой ерунды совсем не хочется.

Поэтому привожу здесь вот такой вот сниппет для template.php нашей темы.

Читать далее »

Tags:
Категория: Drupal | Нет комментариев »


Drupal: ajax-автодополнение поиска

Date January 3rd, 2012 Author Vitaly Agapov


Правда иной раз гнётся, но никогда не ломается и всплывает поверх лжи, как масло — поверх воды.

– Мигель де Сервантес Сааведра

Как-то раз я уже писал про Ajax-автозаполнение (Ajax-autosuggest) своими силами. Там в комментариях было много возмущения из-за того, что никак не была рассмотрена серверная часть решения. Причины, по которым я о ней не писал, ясны: это абсолютное разнообразие возможных серверных решений. Например, мой Perl’овый cgi-скрипт никак не прояснил бы ситуацию человеку, работающему с PHP. А пример с серверной частью в виде модуля для Drupal совсем не поможет адепту Joomla. Но теперь моя совесть будет совсем чиста, так как я всё-таки опишу, как самостоятельно и с наименьшими трудозатратами сделать автодополнение для стандартного поиска в Drupal 7.

Читать далее »

Tags: , ,
Категория: Drupal | 23 Комментариев »


Nginx: Проксирование cookies

Date November 17th, 2011 Author Vitaly Agapov

— Этот лимонад из настоящих лимонов?
— Да, из настоящих.
— Я попробую его, если вы купите у меня скаутское печенье.
— А это печенье из настоящих скаутов?

– Х/Ф «Моральные ценности семейства Аддамсов»

cookie-monster
При работе web-сервера в качестве фронтэнда к некоторому приложению может возникнуть необходимость изменять на лету содержимое Cookies, отдаваемых приложением пользователю. Это может быть название домена, путь к приложению… да всё, что угодно – ситуации бывают разные. Если мы используем Apache, то всё решается с помощью директив ProxyPassReverseCookieDomain и ProxyPassReverseCookiePath модуля mod_proxy. Если же судьба связала нас с nginx, то решение чуть менее простое. Но зато их как минимум несколько. Один из них – это модуль интерпретатора Lua, который кроме описанной задачи сможет решить нам ещё большое количество других.

Но начнём с самого начала.

Читать далее »

Tags:
Категория: Nginx | Нет комментариев »


Настройка LDAP-клиента под Solaris

Date September 7th, 2011 Author Vitaly Agapov

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

– Станислав Лем «Солярис»

solaris ldap
Рассмотрим, как интегрировать Solaris с директорией каталогов. То есть настроим LDAP-клиента, который позволит нам производить авторизацию пользователей и создавать домашние директории для тех, кто логинится впервые. Всё это осуществляется с помощью модуля PAM_ldap, но с некоторыми особенностями, способными поставить в тупик человека, который уже настраивал LDAP-клиентов под Linux.

Итак, где-то уже стоит OpenLDAP-сервер. Мы знаем uid и пароль пользователя с доступом к нужным веткам каталога. Начнём.

Читать далее »

Tags: ,
Категория: Solaris | 1 Комментарий »


По следам Зимней войны

Date September 4th, 2011 Author Vitaly Agapov

Велопоездка по линии Маннергейма.

Tags:
Категория: Beyond IT | Нет комментариев »