AMQP — практика использования

Увидев вводный пост про AMQP решил поделиться своей практикой использования этого механизма.

Ещё задолго до начала внедрения AMQP у нас был полный зоопарк из различных обработчиков фоновых задач: delayed_job , starling + workling и т.п. Плюс к этому, ещё активно использовался HTTP ping между серверами и juggernaut для пуш-канала на браузер. Ах, ещё забыл брутальное оповещение по IP multicast.

Весь этот перечень страшных слов работает, но уж очень он разнообразен и обширен, решили урезать. Чего же общего между HTTP ping-ом и старлингом? Да то, что это всё сообщения от источника к подписчикам. AMPQ был выбран как общий транспорт для таких сообщений.


Читаем дальше

DSL и контексты

Человеческие языки (насколько я это всё понимаю) бывают более или менее контекстно-зависимые. Например, русское слово «смеркается», вырванное из контекста скорее всего будет значить тоже самое, что и в самом контексте. Это удобно тем, что всегда можно его однозначно перевести просто по таблице перевода, а человеку надо меньше напрягать мозг, что бы понять что оно значит. Зато это слово писателю сложнее подогнать под свои нужды и выразить с его помощью что-то новое. Английское слово “do” наоборот: само по себе мало чего значит, зато его можно использовать в окружении других слов в разнообразнейших случаях. Минус понятен: что бы понять, что оно тут значит, надо держать кучу слов в памяти, что создает сильное когнитивное сопротивление.

Если перевести всё сказанное на программирование, то получается что:

Язык конфигурации postfix-а — первый вариант. Assembler — это чуть ли не предел контекстной зависимости. Хорошо бы держать всю память приложения в голове, когда на нем пишешь. Однако вполне понятно, что написать почтовый сервер на ассемблере безумно сложно, но теоретически возможно, а вот на языке конфигурации postfix-а — увы, никак.


Читаем дальше

Как мы лукэтми разгоняли

В связи со сменой верстки на лукэтми (отказались от единой помойки в /stylesheets, /images, /javascripts и решили разнести всю верстку и картинки на раздельные каталоги), получилась такая проблема, что надо при отдаче CSS cервером, парсить его: ослик не умеет всасывать больше 32 стилевых файлов.


Читаем дальше

Продолжение про БД

Вторая статья, в которой надо срочно пересмотреть то, что написано в предыдущей. Как верно подметил товарищ , использовать в мускле запросы вида SELECT .. WHERE is_published AND rating > 80, нельзя, потому как он сам не догадается привести это выражение к WHERE is_published = 1, а следовательно использовать т.н. композитный индекс.
Читаем дальше

group_concat там где его нет

В мускле есть хорошая штука: group_concat.

1
2
3
4
5
6
7

SELECT articles.title, group_concat(tags.name, ', ') AS tag_list 
   FROM articles 
   LEFT JOIN taggings ON (taggings.taggable_id = articles.id AND 
                          taggings.taggable_type = 'Article') 
   INNER JOIN tags ON (taggings.tag_id = tags.id) 
   GROUP BY articles.title;

А в постгресе и в sqlite её нет.


Читаем дальше

Интеграция почты и веб-приложений

Введение

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

Итак, мне приходит письмо «Ура, новая статья», я жму Reply, пишу ответ, отправляю письмо и робот добавляет мой комментарий в базу. Вопросы начинаются уже здесь: что именно должно прийти в письме, что бы мне было удобно отвечать прям из почты, не тратить время на загрузку сайта? Полагаю, что резонно включить весь текст статьи с её картинками.


Читаем дальше

svn asset path

Если правильно выставить заголовки касательно кеширования (а точнее не выставлять параметры No-Cache), то браузер, запрашивая файл, выставит заголовок If-Modified-Since. Если файл не изменился с времени, указанного в этом заголовке, то ничего передаваться не будет, а вернётся ответ HTTP 304 Not


Читаем дальше

eval и номер строки в стектрейсе

Обычно всякие фишки метапрограммирования решаются через eval и его варианты:
class_eval, instance_eval, module_eval.

Кому приходилось пытаться догадаться в каком именно месте генерируемого из строки кода
случилась ошибка? Этого можно избежать, если указать оставшиеся два параметра у eval-а:


Читаем дальше

SPF записи

Настроил всё таки сегодня в DNS зоне для sherstinka.ru (SPF запись)[http://openspf.org/], потому что письма от неё плохо ходили.
Если вкратце, то она должна выглядеть так:


IN TXT "v=spf1 +a include:aspmx.googlemail.com  +mx +ip4:86.110.21.71 -all"

SPF — механизм,


Читаем дальше

RMagick под Mac OS X

Что бы поставить под Макосью RMagick, надо сделать обязательно такое:

1. поставить из портов ghostscript
2. поставить из портов ImageMagick
3. поставить gem RMagick

Если пропустить первый этап, то при сборке RMagick вы увидите тысячу сообщений об ошибках, связанных со шрифтами и сам gem вооб


Читаем дальше
Prev Next

Sidebar