<?xml version='1.0' encoding='utf-8' ?>

<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>Блокнотик Centaur’а</title>
  <link>https://yurikhan.dreamwidth.org/</link>
  <description>Блокнотик Centaur’а - Dreamwidth Studios</description>
  <lastBuildDate>Sun, 10 May 2015 11:34:11 GMT</lastBuildDate>
  <generator>LiveJournal / Dreamwidth Studios</generator>
  <lj:journal>yurikhan</lj:journal>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>https://v2.dreamwidth.org/15796844/1181104</url>
    <title>Блокнотик Centaur’а</title>
    <link>https://yurikhan.dreamwidth.org/</link>
    <width>100</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>https://yurikhan.dreamwidth.org/62100.html</guid>
  <pubDate>Sun, 10 May 2015 11:34:11 GMT</pubDate>
  <title>Нытья о RSS пост</title>
  <link>https://yurikhan.dreamwidth.org/62100.html</link>
  <description>&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;&apos;&amp;lt;[CDATA[&apos; + post_body + &apos;]]&amp;gt;&apos;&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=&quot;https://www.dreamwidth.org/tools/commentcount?user=yurikhan&amp;ditemid=62100&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://yurikhan.dreamwidth.org/62100.html</comments>
  <category>xml</category>
  <category>soft</category>
  <category>rss</category>
  <category>blogs</category>
  <category>html</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://yurikhan.dreamwidth.org/54449.html</guid>
  <pubDate>Fri, 29 Mar 2013 12:45:44 GMT</pubDate>
  <title>HTML внутри XML</title>
  <link>https://yurikhan.dreamwidth.org/54449.html</link>
  <description>&lt;p&gt;Если вы делаете вот так:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&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=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&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=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;p&gt;Правильно делать так:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;foo&amp;gt;
    …
    &amp;lt;description&amp;gt;какой-то &amp;lt;b xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&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=&quot;https://www.dreamwidth.org/tools/commentcount?user=yurikhan&amp;ditemid=54449&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://yurikhan.dreamwidth.org/54449.html</comments>
  <category>xml</category>
  <category>html</category>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>https://yurikhan.dreamwidth.org/52001.html</guid>
  <pubDate>Sat, 12 May 2012 05:54:01 GMT</pubDate>
  <title>Embedded HTML in XML</title>
  <link>https://yurikhan.dreamwidth.org/52001.html</link>
  <description>&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=&quot;https://www.dreamwidth.org/tools/commentcount?user=yurikhan&amp;ditemid=52001&quot; width=&quot;30&quot; height=&quot;12&quot; alt=&quot;comment count unavailable&quot; style=&quot;vertical-align: middle;&quot;/&gt; comments</description>
  <comments>https://yurikhan.dreamwidth.org/52001.html</comments>
  <category>стандарты</category>
  <category>html</category>
  <category>xml</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
