Увидев вводный пост про AMQP решил поделиться своей практикой использования этого механизма.
Ещё задолго до начала внедрения AMQP у нас был полный зоопарк из различных обработчиков фоновых задач: delayed_job , starling + workling и т.п. Плюс к этому, ещё активно использовался HTTP ping между серверами и juggernaut для пуш-канала на браузер. Ах, ещё забыл брутальное оповещение по IP multicast.
Весь этот перечень страшных слов работает, но уж очень он разнообразен и обширен, решили урезать. Чего же общего между HTTP ping-ом и старлингом? Да то, что это всё сообщения от источника к подписчикам. AMPQ был выбран как общий транспорт для таких сообщений.
Человеческие языки (насколько я это всё понимаю) бывают более или менее контекстно-зависимые. Например, русское слово «смеркается», вырванное из контекста скорее всего будет значить тоже самое, что и в самом контексте. Это удобно тем, что всегда можно его однозначно перевести просто по таблице перевода, а человеку надо меньше напрягать мозг, что бы понять что оно значит. Зато это слово писателю сложнее подогнать под свои нужды и выразить с его помощью что-то новое. Английское слово “do” наоборот: само по себе мало чего значит, зато его можно использовать в окружении других слов в разнообразнейших случаях. Минус понятен: что бы понять, что оно тут значит, надо держать кучу слов в памяти, что создает сильное когнитивное сопротивление.
Если перевести всё сказанное на программирование, то получается что:
Язык конфигурации postfix-а — первый вариант. Assembler — это чуть ли не предел контекстной зависимости. Хорошо бы держать всю память приложения в голове, когда на нем пишешь. Однако вполне понятно, что написать почтовый сервер на ассемблере безумно сложно, но теоретически возможно, а вот на языке конфигурации postfix-а — увы, никак.
В связи со сменой верстки на лукэтми (отказались от единой помойки в /stylesheets, /images, /javascripts и решили разнести всю верстку и картинки на раздельные каталоги), получилась такая проблема, что надо при отдаче CSS cервером, парсить его: ослик не умеет всасывать больше 32 стилевых файлов.
SELECT .. WHERE is_published AND rating > 80, нельзя, потому как он сам не догадается привести это выражение к WHERE is_published = 1, а следовательно использовать т.н. композитный индекс.
В мускле есть хорошая штука: 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, пишу ответ, отправляю письмо и робот добавляет мой комментарий в базу. Вопросы начинаются уже здесь: что именно должно прийти в письме, что бы мне было удобно отвечать прям из почты, не тратить время на загрузку сайта? Полагаю, что резонно включить весь текст статьи с её картинками.
Если правильно выставить заголовки касательно кеширования (а точнее не выставлять параметры No-Cache), то браузер, запрашивая файл, выставит заголовок If-Modified-Since. Если файл не изменился с времени, указанного в этом заголовке, то ничего передаваться не будет, а вернётся ответ HTTP 304 Not
Обычно всякие фишки метапрограммирования решаются через eval и его варианты:
class_eval, instance_eval, module_eval.
Кому приходилось пытаться догадаться в каком именно месте генерируемого из строки кода
случилась ошибка? Этого можно избежать, если указать оставшиеся два параметра у eval-а:
Настроил всё таки сегодня в 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, надо сделать обязательно такое:
1. поставить из портов ghostscript
2. поставить из портов ImageMagick
3. поставить gem RMagick
Если пропустить первый этап, то при сборке RMagick вы увидите тысячу сообщений об ошибках, связанных со шрифтами и сам gem вооб