Нытья о RSS пост

May 10, 2015 16:13


До чего же всё плохо с тем, что называется 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’е».
This entry was originally posted at http://yurikhan.dreamwidth.org/62100.html.

blogs, soft, rss, xml, html

Previous post Next post
Up