distributed_blog: Уйти, чтобы остаться

Oct 27, 2006 18:52

Развернутое техзадание первой очереди

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

Но не надо забывать что распределенный блог в первую очередь должен быть блогом. Причем блогом в стиле скорее ЖЖ, а не WordPress. Основная особенность ЖЖ, отличающая его от прочих сервисов - ориентация на общение. Здесь и френдлента - возможность агрегации постов интересных тебе людей прямо на блог-сайте, здесь и заточенность под комментирование.

В первую очередь нужно стремиться воспроизвести в распределенной среде именно эти возможности, сохраняя при этом интероперабельность с теми, кто не готов покинуть крупные сервисы вроде ЖЖ или lj.rossja.org.


Т.е. для начала нужна сама возможность ведения блога. В принципе, задачка настолько простая, что любому приличному программисту не интересно - примитивная формочка, куда можно вводить HTML, возможно, какой-нибудь javascript-овый WYSIWYG. Защитить эту формочку от несанкционированного доступа можно хоть HTTP Basic Auth, которая вообще программирования не требует.

Отдавать это дело надо уметь в виде ленты, в виде RSS-фида (та же лента но в другой XML Schemе и урезанная) и в виде отдельных страниц с комментариями. Задачка на денек для студента.

База данных для этого вообще не нужна. Можно хранить посты и ленту в статических файлах, модифицируя ленту и файл RSS только по мере появления новых постов.

Картинки - тоже хранить в файлах, предоставив удобный web-интерфес для закачивания.
ЖЖ делает это только за деньги, но здесь наш собственный движок. По-моему, эта функциональность достаточно важна.

С комментариями - сложнее. Здесь есть во-первых, проблема аутентификации (а то и авторизации) пользователя. К счастью, автор ЖЖ Брэд Фицпатрик о нас позаботился и не просто разработал протокол OpenID, но и опубликовал на CPAN готовые модули, его реализующие.

Поддержка OpenID автоматически включает движок в "большую" блогосферу. Если есть режим OpenID-сервера, то владелец такого блога может постить комментарии в ЖЖ, подписываясь URL своего блога, а если есть режим OpenID-consumer, пользователи ЖЖ - постить в этот блог.

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

Опять же, нужны несколько способов представления множества комментариев - отдельно - в виде деревьев под каждым постом, отдельно - Recent comments. Здесь, пожалуй, совсем без динамики не обойтись. Особенно, если мы раздаем комментарии в виде RSS.

Далее - френдлента. Точнее, встроенный в блог-движок RSS-агрегатор.
На первом этапе достаточно хранить и собирать в ленту то, что сайты друзей раздают в виде RSS. ЖЖ кстати, включает в RSS
  • URL юзерпика
  • Ссылку на комментарии
  • информацию о публичности записи
Для того чтобы прочитать комментарии или покомментировать можно и по ссылке сходить (в ЖЖ, кстати, тоже надо по ссылке идти для этого. Никакого usability hampering)

Отдельный вопрос - в пополнении френдленты. В ЖЖ предполагается что все пользователи локальны, и попав в блог пользователя, можно на его странице работать со своим профайлом.

В распределенном блоге это не так. Поэтому зафрендить блоггера можно двумя способами:
1. Скопировав URL его блога в какую-нибудь формочку (предполагается что у него на главной странице блога есть тэг link c rel="alternate" и type="rss+xml" или "atom+xml"
2. Щелкнув на кнопочку около комментария этого блоггера к одному из своих постов.

Неплохо бы разработать протокол, который позволял бы поставить блог в известность о том, что его зафрендили. Сейчас ЖЖ и другие блог-сайты такого протокола не поддерживают. Поэтому он должен быть таким, чтобы не докучать тем, кто его не поддерживает. Видимо, еще один с каким-нибудь специальным rel, например friendof-update. В случае когда пользователя зафрендили, нам все равно парсить head его блога в поисках ссылки на RSS/ATOM feed. Заодно найдем и такую ссылку и пошлем туда запрос с именем нашего блога в качестве параметра.

Что касается информации о пользователе, то разрабочики FOAF уже всё за нас сделали. Учитывая частоту обновления этой информации, её и хранить-то стоит в виде FOAF-овского XML файла. Затраты ресурсов на то чтобы это дело распарсить в DOM, что-нибудь добавить, и сериализовать обратно - пренебрежимо малы. При отдаче пользователю можно либо преобразовать в более читаемый вид XSLT-шкой, либо не заморачиваться и отдать в виде xml с прописанным stylesheet. Браузеры нынче сами xslt умеют.

ЖЖ использует FOAF далеко не в полном объеме. Можно сразу взять больше.

После реализации этой функциональности у меня уже не возникнет проблем с переездом на свой личный движок. После этого можно будет развиваться дальше - в сторону кэширования, криптографической аутентификации и т.д. Но сначала должен быть блог+агрегатор блогов друзей. Он будет интегрирован с ЖЖ не хуже, чем сейчас интегрирован lj.rossija.org, а меня этот уровень интеграции практически устраивает.

Еще одной полезной возможностью в ЖЖ является создание тематических community. Это по смыслу тот же блог, только писать туда может несколько человек сразу. Т.е. если мы сразу зарекаемся что наш блог-движок поддерживает несколько пользователей (а зарекаться надо, потому что часто в семье компьютер один, а блоггеров несколько)
то реализовать community, куда можно вступать и писать по OpenID - никакой сложности.

Вот чего практически принципиально нельзя реализовать в распределенной среде, так это системы интересов.

Теперь о главном - для чего это всё?

Восве не для борьбы с коварным СУПом или Abuse Team. Эта задача тоже решится, но она побочная. Главная задача - это обеспечение technological excellence. Сейчас у крупных блог-сайтов наблюдается почти полный застой в смысле функциональности. Все крупные ЖЖ-подобные сайты (ЖЖ, GJ, lj.rossja.org) имеют один и тот же интерфейс, одни и те же функциональные возможности. И это понятно - они большие, каждый из них ценен не техническими фишками, а набором пользователей. Растащив пользователей по миллиону мелких (до 10 пользователей) блогов, мы обеспечим почву для конкуренции движков. Благо интероперабельность обеспечивается набором стандартных протоколов. Все из которых уже изобретены и выше перечислены. Значит, движки смогут конкурировать между собой по уровню предоставляемого сервиса, возможностям оформления и т.д.

distributed-blog, компьютерное, open source, privacy, lj

Previous post Next post
Up