За выходные дописать до рабочего состояния не вышло, устал очень...
Идея состоит в том, чтобы сделать персональный PSHB-хаб, который можно использовать в Джанго-проекте в связке с блогом, форумом и вообще чем угодно, что генерит новые записи. Хочется попробовать повозиться с PSHB в реальности и заодно поймать кайф от мгновенного появления собственных записей в Гуглоридере (хотя я даже не знаю достоверно, поддерживает ли он PSHB :-) ).
Проект окрестил "SubHub".
Название SubHub намекает на то, что это хаб, который работает только с Subscriber'ами, но не с Publisher'ами: единственный его Publisher — это ваш собственный сайт. Это упрощает дело примерно в половину, потому что не нужно реализовывать ту часть, которая отвечает за пинги от Publisher'ов. Уведомление SubHub'а о том, что что-то изменилось, происходит просто вызовом его функции в коде.
Сегодня я успел написать:
- обработку запросов на подписку
- отложенную и прямую верификацию этих запросов
- вычищение протухших подписок
И даже ещё ничего реально не тестировал. Осталось доделать:
- собственно рассылку нового контента подписчикам
- хранение того, что кому ещё не отослано
- подписывание контента HMAC-сигнатурой
Если кто хочет поучаствовать, проект открыт на Launchpad'е. Для тех, кто ни одной DVCS кроме git'а не видел, вот небольшая вводная:
- Регистрируетесь на launchpad, закидываете туда свой публичный ключик.
- Учите локальную машину, какой у вас логин на launchpad:
bzr launchpad-login username
. - Код скачивается командой
bzr branch lp:subhub
. - "hack-hack-hack"™.
- Закачиваете код к себе на launchpad:
bzr push lp:~username/subhub/some_branch_name
. - Идёте на свою страницу с кодом
https://code.launchpad.net/~username
, выбираете бранч и жмёте там "Propose for merging".
Ещё можно вообще пропустить всё связанное с launchpad'ом (у многих на него аллергия), сделать bzr push
куда-нибудь к себе на веб-сервер и опубликовать ссылку тут в комментах.
Комментарии: 13
Вот это здорово. Оно будет нормализовать в атом и отдавать только новое?
В дальнейшем планируется довести дело до полноценного хаба?
Я думаю, он не будет ничего нормализовать, а просто требовать от приложений, чтобы они генерировали именно атомные фиды. Мне это кажется резонным требованием, потому что я не вижу ни одной причины пользоваться конкретно RSS-форматами.
Ну и да, будет выдавать новое и изменённое.
Нет. Я не вижу большого смысла всем, кому не лень, запускать у себя публичные хабы и обслуживать широкую публику. Это общественная нагрузка — дело больших ребят типа Гугла и Яндекса.
В мыслях были скорее не публичные, а приватные, но сразу на несколько своих сервисов. Исключительно исходя из эстетических побуждений (:
Если это сервисы в одном Джанго-проекте, то это и так будет работать. Если в нескольких, то можно просто эту библиотечку во все повесить.
Бегло ознакомился с сутью технологии: я правильно понимаю, что в таком виде (хаб на том же сервере, что и publisher) эта штука имеет смысл только при следующем сценарии:
Ну и плюс, если я хочу вставлять Ваш RSS-фид на свой сайт; опять же, всё будет быстрее.
P.S. Только что наблюдал странный глюк предпросмотра: текст "- Я пользуюсь Google Reader." был отображён шрифтом заголовка. При следующем обвнолении preview всё починилось.
GReader - publisher, но не subscriber (т.е. моментально там не появляется, но если в GReader нажать на share, то это моментально публикуется, например, в friendfeed)
Iakov Davydov:
Да. Но зато Google Reader (а точнее, некий отвлечённый агрегатор) уже может не поллить меня. Если все паблишеры перейдут на push, то это будет существенное снижение нагрузки на сеть в любом случае.
Кстати, это никак не связано именно с тем, что хаб с паблишером завязан, вы описываете отношения только сабскрайбера и хаба.
Это не глюк. Просто иногда недописанный markdown-текст даёт такие эффекты.
artreal:
Хм... Надо будет нашим ребятам из ППБ подкинуть идею, что это можно сделать раньше :-)
ну это как сказать, мои посты в нём появляются моментально, хотя, честно говоря, так было ещё до того, как я добавил pubsubhubbub в свой блог — благодаря web pings
Я тут ещё подумал, и пришёл к выводу, что PSHB не хватает одного очень важного элемента. А именно, XMPP.
Subscriber в представлении PSHB — это не сам пользователь, а некий очередной (лишний?) посредник. В то же время у настоящего читателя есть приложение, которое заинтересовано в получении уведомления; и этому несчастному приложению приходится делать polling того, что называют subscriber'ом.
Что же требуется сделать, чтобы счастье наступило?
Далее всё, почти как в PSHB:
Получаем все плюсы PSHB + моментальное уведомление пользователя. Сообщения hub шлёт только в том случае, если получил presence с определённым ресурсом (чтобы глупые сообщения не приходили в интерактивный im-клиент).
Идея проталкиваемых клиенту апдейтов хорошая, но хорошо бы иметь клиент, способный их получать. Какая-нибудь stand-alone читалка в линуксе это уже умеет? Вообще в PSHB как-то возможно организовать проталкивание на десктопные приложения? (Согласен с Яковом, что XMPP уведомления были бы кстати).
Гуглоридером пользоваться перестал более года назад (из-за непрокручиваемой шапки http://twitpic.com/amm7s и отсутствия синхронизации с оффлайновыми читалками).
Кстати, яндекс-лента про PSHB уже знает?
(прошу прощения, первый раз без OpenID запостил)
Вопрос скорее не к ленте, а к поиску по блогам. Сама Я.Лента маловероятно что станет хабом.
Яков, я не понял, зачем тут XMPP в принципе? Того же самого можно достичь постоянно открытым HTTP-коннектом с конечного клиента к subscriber'у. Перевод потока апдейтов в XMPP, конечно, сама по себе интересная идея, но она не необходима для решения задачи.
Спасибо, утянул к себе в проект. А есть ли к этому коду тесты? А то без них править что-либо боязно.