26 августа 2011 в 16:14

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

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

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

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

Ситуация


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

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

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


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

Пишем письмо, получаем ответ:
  • Regarding newlines after the \x00 — that is not part of the spec. It is *permitted* in 1.1, but not even mentioned in 1.0. Since this isn't something the spec requires, I think the Zend client is in error here expecting servers to send a newline that isn't required by the spec.
  • Regarding trimming of header values, this is explicitly banned in 1.1, so we don't support it all. Technically, we could support it for 1.0, but we don't know the version the client is using until *after* the CONNECT frame has been processed. Ideally though, the Zend client would update to 1.1.

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

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

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

Итоги

  • Мне сделали два патча, которые подстраивают RabbitMQ под баги Zend`а, хотя я даже не просил.
  • Команда RabbitMQ попросила хозяев старого сайта поставить ссылки на новый.
  • В английскую Википедию добавлена ссылка на новый сайт в статью о протоколе STOMP.
  • На Zend было добавлено 3 новых тикета и ещё один проапдейчен.

Послесловие


Во всей этой истории нет ничего сверхъестественного. Я просто лишь хотел показать, что помогать развивать продукты сообщества может каждый. Это доступно и работает. Возможно, вы сможете привести более эпический пример.
Так давайте же по случаю пятницы поделимся с друг другом подобными историями.
Андрей Нехайчик @gnomeby
карма
46,2
рейтинг 23,3
Самое читаемое Разработка

Комментарии (36)

  • +26
    Более эпический пример… Хм, не очень эпично, но из моего личного опыта:
    Использовал я в своё время один не очень известный и распространённый дистрибьютив Linux-а. Тогда у меня безлимитом и не пахло, тариф был с платным трафиком. Обновляться выходило дороговато. И тогда я выцепил разработчика в чате и предложил реализовать delta-обновления. Ах, да, дело было в 3 часа утра =) Некоторое время мы совместно обсуждали вопросы реализации, занимались гуглением, в итоге был откопан bdiff, для которого я сваял 3-х строчный патч, чтобы он не сегфолтился на больших файлах. Таким образом примерно через 24 часа в svn-е лежала версия пакетного менеджера с поддержкой дельта-обновлений и был создан специальный репозитарий с дельта-пакетами.
    • 0
      О, спасибо что напомнили! Настроил и у себя delta-обновления. Не ради экономии трафика, но идеи для!
  • +1
    какое-то сообщество хабрачеловек?
  • НЛО прилетело и опубликовало эту надпись здесь
  • +1
    «казнить нельзя помиловать» (с)
  • +2
    В самом начале жизни nginx помогал в его дебаженье и отладке. :) Недавно скинул багфикс разработчикам компоненты Indy для Delphi и Lazarus. Не эпично, но тем не менее. :)
  • +4
    Как-то беседовали с коллегой об open-source проектах, которые ведем и он сказал фразу, которая мне запомнилась:
    — Мы, просто, понемногу отдаем долг…
  • +2
    как-то помню три дня убеждал разработчиков pthread-win32 в том что у них есть баг и что прога отжирает хэндлы. Пишу пример, они придираются к какой-то фигне и просят переписать. Переписываю и заново. В конце концев таки мне поверили, проверили и нашли багу.

    Но наверное суть в том что без этого стояла моя тогдашняя работа — по работе проще убедить себя заниматься подобными вещами, а не плюнуть и пройти мимо ( читай взять более стабильную библиотеку )
  • +7
    ну как, как. Я вот взял и написал рабочий опенсорсный видеостриминговый сервер =)
  • –9
    я на Убунтовском сайте перевёл несколько хороших программ на русский, после того, как заметил, что отсутствие русефекаторов мешает друзьям и знакомым пользоваться линупсом
    • +13
      Вы «русефецировали» хорошие программы? Вот, наверное, почему многие предпочитают английский интерфейс.
      • –4
        я перевёл
        пе-ре-вёл
        ПЕЕЕЕ-РЕЕЕЕ-ВЁЁЁЛ

        читайте внимательно

        вы хотели подъебнуть, а получилось только продемонстрировать вашу собственную некомпетентность

        в линупсах «русефекацея» не возможна в принципе:

        1) все приложения открыты, локализация и интернационализация продуманы и стандартизированы
        2) используется вся мощь распределённой модели разработки — централизованый сервер, простые и удобные инструменты
        3) контроль сообщества — мои варианты были либо приняты, либо исправлены (в большинстве случаев доведены почти до идеала) — за это я и люблю open source
        • –5
          школота минусуе

          ;-D

          вот интересный обзор, полный примеров того, как осуществляется интернационализация и локализация в мире проприетарного ПО: russo.ag.ru/reviews/79/ РУСЕФЕКАЦИИ: ОБЗОР
    • НЛО прилетело и опубликовало эту надпись здесь
      • –1
        русефекаторы в линупсах невозможны в принципе

        за это я и люблю open source
        • +2
          Вам всего лишь тонко намекают на то, что это слово пишется иначе. Ваш КО.
          • 0
            Результатов: примерно 53 500

            миллионы пользователей Windoze не могут ошибаться
  • НЛО прилетело и опубликовало эту надпись здесь
  • +22
    Это топик, чтобы хвастаться? :)

    Ну, поехали:
    доводка Linux-драйвера (sane) для сканера HP ScanJet 2400 до статуса «complete».
    доводка Linux-драйвера TV тюнера BeholdTV M6 до состояния поддержки аппаратного кодирования в MPEG2 с поддержкой режима захвата «Streaming IO».
    benchmark mode, репозиторий и перевод на русский язык для 3D видеоплеера Bino.
    плагин для биллинга Stargazer для работы напрямую с линуксовым pppd; а также патчи и упаковка в репозиторий.
    переработка GUI для WinFF (скриншоты на сайте почему-то старые остались) — надеюсь, мне больше не придется работать с Lazarus.
    небольшой патч в самый шустрый NetFlow коллектор под Linux ipt-netflow, а также его упаковка в DEB-пакет.
    SSE2 оптимизация плагина стабилизации видеоряда для проекта transcode; очень жаль кстати, что transcode потихоньку умирает… но есть шанс, что этот плагин переедет в ffmpeg; правда разработчик плагина очень занятой человек.
    PHP-класс для отсылки SMS через Mail.Ru транспорт для Jabber'а. О.о
    пачка патчей в проект miniupnpd — простой UPnP сервер для домашнего фаервола.
    небольшая утилитка в подарок для бывшей подруги.
    — небольшая утилитка reink для собственных нужд.
    — ну и так, по мелочи, багрепорты, багрепорты, багрепорты
    • +8
      О! Ну а плохое, что нибудь плохое в жизни вам приходилось делать?
      • +2
        Мне приходилось! Я как-то решил спереть кусок кода из проекта sqlitestudio для своей утилиты «для собственных нужд». Когда же прогнал тесты, обнаружил ошибку. Исправил. Не пропадать же добру — отправил патч автору.
    • 0
      Зачем нужен этот transcode, если есть ffmpeg?
      • 0
        В ffmpeg нету возможности стабилизировать трясущееся изображение, снятое, например, с велошлема.

        Ну а так — мне понравилась структура кода в transcode, всё чисто и аккуратно. Что представляет собой ffmpeg изнутри — не знаю, не доводилось ковырять.

        Но доводилось пользоваться его библиотеками libavformat и libavcodec. Заметил, что в основном все примеры в инете показывают, как на их основе написать плеер, а вот как написать рекордер — нигде ничего не сказано. Пришлось самому разбираться, в результате чего возник собственный example.

        ЗЫ. Ну вот, снова о хорошем приходится говорить. :)
        • 0
          Надо всё таки понимать, что стабилизатор (кстати, работает действительно шикарно), это всё таки не фишка transcode, а именно плагин. Который можно с тем же успехом вставить и в ffmpeg.

          Примеры в инете — это, конечно мило и классно, но сырцы открыты и рекордер вполне себе пишется.
          • 0
            Да, можно, и автор нацелен на интеграцию своего плагина в ffmpeg. Однако, пока этого не сделано, у transcode есть хотя бы одно неоспоримое преимущество для тех, кому нужно стабилизировать изображение. Поэтому он нужен.

            О да, чтобы воспользоваться API ffmpeg, я должен ковыряться в исходниках и пытаться понять, как работает каждая API функция, вместо того, чтобы прочесть в нормальной документации, что она делает и просто воспользоваться.
            • 0
              Естественное состояние для любого развивающегося опенсорсного проекта — документация в исходниках.

              Если есть документация трехлетней давности и она работает, скорее всего этот кусок кода стагнировал и не развивается.

              Странно вам это рассказывать, возникают серьезные сомнения в послужном списке и в вашей квалификации, если вы привыкли работать с опенсорсным кодом по документации, которую, как вы считаете, обязаны для вас писать другие люди. Очень большие сомнения.
              • 0
                Если есть документация трехлетней давности и она работает, скорее всего этот кусок кода стагнировал и не развивается.
                Либо: этот кусок кода достиг того состояния, когда он хорошо решает возложенную на него задачу, и стабилизировался.

                если вы привыкли работать с опенсорсным кодом по документации, которую, как вы считаете, обязаны для вас писать другие люди
                В мире свободного ПО никто ничего не обязан. Но:
                1. Если у меня будет выбор между двух в остальном идентичных проектов, я выберу тот, у которого лучше документация. Просто потому, что это сэкономит мое время.
                2. Если для разработки с использованием некоторого инструментария мне необходимо читать его исходники — у меня должна быть веская причина для использования именно этого инструментария (например, какие-нибудь эксклюзивные плюшки).
                3. Разработчик свободного ПО, как правило, заинтересован в том, чтобы его ПО использовалось другими разработчиками. А один из естественных способов понизить входную планку для других разработчиков — написать вменяемую документацию.
                4. Мне кажется это хорошим тоном: сделал продукт, будь добр напиши как его использовать.

                А сомневаться — ваше право.
                • 0
                  спасибо, Кэп, но это всё нытье какое-то.

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

                  Вы не создаете впечатления программиста.
                  • 0
                    Ни по одному продукту документация не заменить рабочих исходников.
                    А я и не говорил, что она может их заменить. Я говорил, что хорошая документация может существенно упростить их понимание. А в некоторых случаях и вовсе избавить от необходимости разбираться в реализации.

                    Посмотрел интерфейс, прочёл документацию — воспользовался. Profit.
    • +2
      Что вы наделали !? Теперь остальным будет стыдно хвастаться :-)
  • 0
    Помогать сообществу, это естественно. Мы же сделали эту работу, как правильно говорили выше, не пропадать же добру.
    Мы используем open source продукты, и только мы можем сделать их лучше.

    Предлагаю не останавливаться только на баг-репортах, мы знаем некоторую open source систему.
    мы много чего знаем о том, как должно строиться приложение.

    что нам мешает предлагать(добавлять) новый функционал, новые идеи, если они реально нужны?
    А если есть время, то можно и самому по участвовать.

    PS: хорошая идея в нужное время тоже дорого стоит. За нее тоже скажут спасибо.
  • НЛО прилетело и опубликовало эту надпись здесь
  • +1
    Выше уже говорили — «отдавать долг» — это наш с вами долг, как пользователей open source'а. Разве может быть иначе? На мой взгляд, это так естественно, что я даже не фиксирую и не запоминаю, куда именно и какие патчи посылал… Когда больше работал сис.админом — слал много связанного с FreeBSD: апдейты версий портов в основном, даже в ipfw что-то… Сейчас большей частью в модули Друпала… В общем, возвращать свои патчи в основные ветки опенсорса — это нормально и ничего эпичного тут по-моему нет.
  • +1
    Составляю баг репорты и фичереквесты, провожу тестирование патчей и оставляю фидбэк, иногда занимаюсь локализацией или выступаю в роли переводчика. Делаю это практически для каждого открытого (а иногда и закрытого) софта, которым я пользуюсь: начиная от QTTabBar, Media Player Classic — Home Cinema, AnVir Task Manager (жаль, что проект умер), Miranda (и отдельные плагины для неё), Mozilla Firefox (+десятки дополнений, тем, скриптов и стилей для него), пишу CSS стили для всякого (от морды браузера, до изменения облика сайтов).
    Если честно — делаю это больше из личной выгоды: этим софтом я пользуюсь и часто выявляются какие-то баги, недоделки и хотелки, которых пока нет.
  • +1
    в свое время плотно работал с libevent под php. вернее с ее екстеншеном для php. писали демонов для MMORPG игры. в процессе работы были найдены ошибки екстеншена. связался с автором (Тони). в течении дня он аккуратно правил баги, а я ему слал на почту отчеты наших тестов, которые не проходили.

    на следующий день был выложен новый релиз.

    все довольны.
  • 0
    Постоянно юзаю бета версии программ и ОСей и честно сабмичу фичереквесты и багрепорты.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.