yurikhan: (Default)

До чего же всё плохо с тем, что называется syndication.

Во-первых, читалки. Подавляющее большинство — на PHP с базой MySQL. В лучшем случае — с PostgreSQL, но всё равно PHP. Есть одна на Go с базой Google App Engine Datastore. What is this I don’t even. (Нет, десктопные читалки рассматривать принципиально не будем, потому что они не дают гарантию непропуска постов.)

Казалось бы, чего сидишь, ниша открыта, напиши RSS-читалку с архитектурой, которая не будет оскорблять твои чувства.

Да только дело в том, что сами форматы данных (RSS 0.9, RSS 1.0, RSS 0.91, RSS 2.0 и Atom вместе с ними) — тяжело больны антипаттерном «само выросло». Сначала у item’ов вообще были только название и ссылка. Потом добавилось описание, предполагаемое коротким и неформатированным. Потом внезапно оказалось, что люди пихают туда HTML! Иногда даже забывая сохранить well-formedness окружающего XML’я. Окей, сняли ограничения на длину, задокументировали, что блин, раз уж вы туда пишете HTML, то эскейпьте его по правилам XML’я. Ну и под конец Atom — «пишите хоть плейн текст, хоть заэскейпленный HTML, хоть валидный XHTML, но явно подпишите, какой именно формат вы используете».

Естественно, при прочих равных софт на стороне производителя генерирует тот формат, к которому проще привести входные данные. А входные данные у большинства[citation needed] блогов — не валидируемый и потому массово невалидный HTML. '<[CDATA[' + post_body + ']]>' и не волнует, пусть кто-то другой с этим потом мучается.

Поэтому всякий, кто решает сейчас писать RSS-читалку, через некоторое время погружается в бочку этого самого… дёгтя.

Пойду засуну свой инстанс Tiny Tiny RSS в контейнер от греха подальше. Тем более что оно, оказывается, перешло с нормальной модели релизов «вот вам полурегулярные orig.tar.gz, собирайте себе пакеты под что хотите» на rolling-модель «текущая стабильная версия — это то, что сейчас в master’е».

yurikhan: (Default)

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

Вот, например, «Эгея» Ильи Бирмана форматирует рассылаемые сообщения так:

Subject: имя комментирует топик
From: blog@ilyabirman.ru

Казалось бы, максимум информации в сабжекте, хорошо. Но к чему это ведёт?

А ведёт это к тому, что в почтовом клиенте комменты к одному посту группируются в треды по ключу (автор, топик). Когда разные комментаторы начинают друг другу отвечать, то следить за дискуссией становится невозможно.

В ЖЖ/DW письмо выглядит так:

From: ник - LJ Comment <lj_notify@livejournal.com>
Subject: Reply to (your entry|(your|a)comment in) "топик"
In-Reply-To: comment-#######-######@livejournal.com>
References: <entry-#######-#####@livejournal.com> <comment-#######-######@livejournal.com>
Message-Id: <comment-#######-######@livejournal.com>
  • Что хорошо: ник комментатора унесён в From, где ему логически и следует быть. И иерархия сообщений явно прописана.
  • Что недостаточно хорошо: вариация сабжектов в пределах одного топика мешает GMail’у поддерживать эту иерархию.
  • Что плохо: к сабжекту добавляется большой хвост в начале.

Как надо делать:

  1. Все комменты в один топик должны иметь по умолчанию один сабжект. (Допустимо, но, вероятно, нежелательно отражать в сабжекте оповещений изменение сабжектов комментов, если движок это позволяет.)
  2. Этот сабжект должен быть насколько возможно коротким и при этом однозначно связываться с постом. Например: «Re: топик». (Если движок допускает неозаглавленные посты, заглавием считать первое предложение.)
  3. Если движок реализует линейные комментарии, то следующий комментарий должен становиться In-Reply-To: к предыдущему. Если древовидные, то дочерний комментарий должен становиться In-Reply-To: к родительскому. (Для этого движок должен сам раздавать Message-Id’ы, а не полагаться на систему доставки почты.)
  4. Текст того, на что отвечают, не должен автоматически цитироваться в оповещении. (Rationale: длинный пост в ЖЖ.)
  5. Ссылки на исходный пост, коммент, родительский коммент, отписаться, отмодерировать — должны быть в «подвале»/подписи. Или, если получатель предпочитает HTML mail, то ссылками в шапке: ник replied to (your|a) comment to “название поста”.

Profile

yurikhan: (Default)
Yuri Khan

June 2017

S M T W T F S
    123
45678910
1112 1314151617
18192021222324
252627282930 

Links

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 2017-07-23 18:44
Powered by Dreamwidth Studios