<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dw="https://www.dreamwidth.org">
  <id>tag:dreamwidth.org,2011-12-22:1181104</id>
  <title>Блокнотик Centaur’а</title>
  <subtitle>Yuri Khan</subtitle>
  <author>
    <name>Yuri Khan</name>
  </author>
  <link rel="alternate" type="text/html" href="https://yurikhan.dreamwidth.org/"/>
  <link rel="self" type="text/xml" href="https://yurikhan.dreamwidth.org/data/atom"/>
  <updated>2015-05-10T11:34:11Z</updated>
  <dw:journal username="yurikhan" type="personal"/>
  <entry>
    <id>tag:dreamwidth.org,2011-12-22:1181104:62100</id>
    <link rel="alternate" type="text/html" href="https://yurikhan.dreamwidth.org/62100.html"/>
    <link rel="self" type="text/xml" href="https://yurikhan.dreamwidth.org/data/atom/?itemid=62100"/>
    <title>Нытья о RSS пост</title>
    <published>2015-05-10T11:34:11Z</published>
    <updated>2015-05-10T11:34:11Z</updated>
    <category term="soft"/>
    <category term="html"/>
    <category term="xml"/>
    <category term="blogs"/>
    <category term="rss"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">&lt;p&gt;До чего же всё плохо с тем, что называется syndication.&lt;/p&gt;

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

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

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

&lt;p&gt;Естественно, при прочих равных софт на стороне производителя генерирует тот формат, к которому проще привести входные данные. А входные данные у большинства&lt;sup&gt;[citation needed]&lt;/sup&gt; блогов — не валидируемый и потому массово невалидный HTML. &lt;code&gt;'&amp;lt;[CDATA[' + post_body + ']]&amp;gt;'&lt;/code&gt; и не волнует, пусть кто-то другой с этим потом мучается.&lt;/p&gt;

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

&lt;p&gt;Пойду засуну свой инстанс Tiny Tiny RSS в контейнер от греха подальше. Тем более что оно, оказывается, перешло с нормальной модели релизов «вот вам полурегулярные orig.tar.gz, собирайте себе пакеты под что хотите» на rolling-модель «текущая стабильная версия — это то, что сейчас в master’е».&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=yurikhan&amp;ditemid=62100" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2011-12-22:1181104:54449</id>
    <link rel="alternate" type="text/html" href="https://yurikhan.dreamwidth.org/54449.html"/>
    <link rel="self" type="text/xml" href="https://yurikhan.dreamwidth.org/data/atom/?itemid=54449"/>
    <title>HTML внутри XML</title>
    <published>2013-03-29T12:45:44Z</published>
    <updated>2013-03-29T12:45:44Z</updated>
    <category term="xml"/>
    <category term="html"/>
    <dw:security>public</dw:security>
    <dw:reply-count>6</dw:reply-count>
    <content type="html">&lt;p&gt;Если вы делаете вот так:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;foo&amp;gt;
    …
    &amp;lt;description&amp;gt;какой-то &amp;amp;lt;b&amp;amp;gt;форматированный&amp;amp;lt;/b&amp;amp;gt; текст&amp;lt;/description&amp;gt;
    …
&amp;lt;/foo&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;или так:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;foo&amp;gt;
    …
    &amp;lt;description&amp;gt;&amp;lt;![CDATA[какой-то &amp;lt;b&amp;gt;форматированный&amp;lt;/b&amp;gt; текст]]&amp;gt;&amp;lt;/description&amp;gt;
    …
&amp;lt;/foo&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;то эти лучи поноса — вам.&lt;/p&gt;

&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;p&gt;Правильно делать так:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;foo&amp;gt;
    …
    &amp;lt;description&amp;gt;какой-то &amp;lt;b xmlns="http://www.w3.org/1999/xhtml"&amp;gt;форматированный&amp;lt;/b&amp;gt; текст&amp;lt;/description&amp;gt;
    …
&amp;lt;/foo&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=yurikhan&amp;ditemid=54449" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2011-12-22:1181104:52001</id>
    <link rel="alternate" type="text/html" href="https://yurikhan.dreamwidth.org/52001.html"/>
    <link rel="self" type="text/xml" href="https://yurikhan.dreamwidth.org/data/atom/?itemid=52001"/>
    <title>Embedded HTML in XML</title>
    <published>2012-05-12T05:54:01Z</published>
    <updated>2012-05-12T05:54:01Z</updated>
    <category term="стандарты"/>
    <category term="html"/>
    <category term="xml"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">&lt;p&gt;Люди, которые проектируют какую-нибудь XML-схему, сначала описывают какой-нибудь элемент как содержащий текст (&lt;code&gt;xsd:string&lt;/code&gt;), а потом говорят «Oops, а нам надо туда форматированный текст… ну пофиг, зафигачим туда кусок HTML, обёрнутый в &lt;code&gt;&amp;lt;![CDATA[…]]&amp;gt;&lt;/code&gt;» — заслуживают выделенного круга ада. Google KML, I’m looking at &lt;em&gt;you&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;(Правильный путь, разумеется, включать xhtml как подсхему.)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=yurikhan&amp;ditemid=52001" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
</feed>
