ХабрПостыНовостиМегапосты?

А как ты помог какому-нибудь сообществу хабрачеловек?

Представьте ситуацию… Решили вы значит прикрутить какую-нибудь новую технологию к вашему проекту. Поставили всё необходимое, подключили библиотеку, и опа… не работает. И вот вы мучаетесь, ковыряете, а оно всё не работает и не работает. И просидев некоторое время над этой библиотекой, вы решаете просто бросить это дело, скачать аналогичную библиотеку от другой команды и попробовать её.

А может быть всё было не так. Может быть вы очень упорный и целеустремлённый человек и решаете во что бы то ни стало довести дело до конца и помочь в развитии продукта.

Продолжение истории для тех, кому не всё-равно…

Ситуация


Хотим научится работать с RabbitMQ через Zend Framework, используя STOMP протокол. Итак, подключаем нужные классы и сразу встаёт вопрос: а как работать? Гуглим — нету ничего. Ну да ладно, лезем в википедию и находим ссылку на официальный сайт, где есть описание протокола с примерами. По примерам, примерно понимаем в каком порядке и что вызывать, чтобы заработало.

Написали — запрос посылается, но при получении ответа зависает. Ну да ладно, дампим запросы — данные приходят. Смотрим в HEX редакторе что приходит, а потом смотрим в коде, что ожидается. Находим ошибку в парсинге запроса в Zend классе.

Правим, запускаем — неверный логин. Снова дампим запросы, но всё верно и соответствует примеру. Пробуем эмулировать протокол через telnet — те же ошибки. Пробуем убрать пробел после двоеточия в заголовках, то есть:
CONNECT
login:<username>
passcode:<passcode>


Заработало! Ага! Радостно потираем руки и решаем поставить ActiveMQ и проверить самый первый вариант на нём. И, он работает. Ну всё, сейчас-то мы сообщим балбесам из RabbitMQ как надо код писать.

Пишем письмо, получаем ответ:

То есть: код у вас зависает, потому что Zend класс ожидает последовательность символов, которая не определена спецификацией, и мы их не обязаны посылать. А концевые пробелы в заголовках могут быть полезной информацией, поэтому мы их не обрезаем. И, вообще, мы пишем сервер совместимый со спецификацией 1.1, а ваш Zend поддерживает только 1.0.

Но позвольте, спрашиваю я, а где на официальном сайте написано про протокол 1.1?
Ответ: А это старый сайт, вот тебе ссылка на новый. А также вот тебе два патча, которые подстраивают RabbitMQ под баги Zend`а.

Мы немного ещё попереписывались, чтобы уточнить некоторые детали, и вот, что мы сделали на выходе.

Итоги


Послесловие


Во всей этой истории нет ничего сверхъестественного. Я просто лишь хотел показать, что помогать развивать продукты сообщества может каждый. Это доступно и работает. Возможно, вы сможете привести более эпический пример.
Так давайте же по случаю пятницы поделимся с друг другом подобными историями.
@gnomeby
26.08.2011 18:14 UTC
Первоисточник