<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>Gorinich 2.0</title>
<link>http://www.gorinich.net/</link>
<language>ru</language>
<copyright>Copyright 2007 Gorinich.net</copyright>
<lastBuildDate>Thu, 11 Mar 2010 20:41:38 GMT</lastBuildDate>
<description>Gorinich 2.0</description>
<item>
<pubDate>Thu, 07 Aug 2008 11:53:49 GMT</pubDate>
<title>RostovOnDon.pm</title>
<link>http://www.gorinich.net/posts/15</link>
<description>
<![CDATA[
2 августа в Ростове-на-Дону прошла вторая (хотя в каком-то смысле и первая ))) ) встреча сообщества RostovOnDon.pm. Организовал все это безобразие <span style="white-space: nowrap;" lj:user="sharifulin" class="ljuser"><a href="http://sharifulin.livejournal.com/profile"><img height="17" width="17" style="border: 0pt none ; vertical-align: bottom; padding-right: 1px;" alt="[info]" src="http://p-stat.livejournal.com/img/userinfo.gif" class="ContextualPopup" /></a><a href="http://sharifulin.livejournal.com/"><b>sharifulin</b></a></span>, за что ему отдельная благодарность.<br />
<br />
<img alt="" src="http://farm4.static.flickr.com/3258/2732926928_f1e8028215.jpg?v=0" /><br />
<br />
Можно посмотреть <a href="http://flickr.com/photos/sharifulin/sets/72157606543063133/show/">фото</a> и <a href="http://vimeo.com/album/25411">видео</a>.<br />
<br />
Встретились, познакомились, померялись письками ))) Пива так и не попили )<br />
Было весело и интересно. Так что ждем продолжения.
]]>
</description>
</item><item>
<pubDate>Thu, 24 Apr 2008 17:27:19 GMT</pubDate>
<title>Променял.ру</title>
<link>http://www.gorinich.net/posts/14</link>
<description>
<![CDATA[
Нашел в сети новый стартап. В основе лежит уже, наверное, всем известная история скрепки. Я такой идеей тоже горел ) Теперь вот есть возможность попробовать на деле. Надеюсь, что-нибудь получится )))
]]>
</description>
</item><item>
<pubDate>Mon, 01 Oct 2007 11:32:35 GMT</pubDate>
<title>Google AdSense Плохие Слова</title>
<link>http://www.gorinich.net/posts/13</link>
<description>
<![CDATA[
Только что в блоге <a href="http://www.arserblog.com/">Хожу на Работу в Интернет</a> обнаружил заметку <a href="http://www.arserblog.com/google-adsense-bad-words-24/">Google AdSense Плохие Слова</a>.
В одном из комментариев была ссылка на список "плохих слов" на которые этот самый Google AdSense ругается.<br />
Я очень долго смеялся с того, почему слово <a href="http://www.urbandictionary.com/define.php?term=johnson">joh<span  style="display: none; "></span>nson</a> такое плохое :)
]]>
</description>
</item><item>
<pubDate>Mon, 24 Sep 2007 01:01:55 GMT</pubDate>
<title>Событийная машина POE и сетевая многозадачность.</title>
<link>http://www.gorinich.net/posts/12</link>
<description>
<![CDATA[
Что такое <a href="http://poe.perl.org/">событийная машина POE</a> я кратко рассказывал в <a href="http://www.gorinich.net/posts/9">одной из предыдущих заметок</a>.<br />
Под сетевой многозадачностью будем понимать параллельную обработку входящих и/или исходящих сетевых соединений системными, либо прикладными приложениями.<br />
<br />
Почему именно POE? Вопрос, конечно, требующий обоснования. Для начала рассмотрим какие вообще бывают способы обеспечения многозадачности. Я знаю три
<br />
<ul>
<li>параллельные процессы</li>
<li>событийные машины</li>
<li>многопоточность</li>
</ul>
<cut title="Рассмотрим эти способы подробнее" />
<strong>Параллельные процессы</strong><br />
Это когда мы запускаем несколько экземпляров одного приложения. Например так делает Apache при обработке параллельных запросов к динамическим страницам. На каждый запрос порождается очередной процесс и обрабатывает его. Т.е. все сводится к последовательной обработке запросов большим количеством экземпляров одного приложения. Плюсы и минусы в такой ситуации очевидны:
<ul>
<li>простота организации (у нас нет проблем с блокировками и синхронизацией);</li>
<li>всю рутину за нас выполняет операционная система;</li>
<li>большое количество процессов требует большого количества ресурсов;</li>
<li>нет возможности динамически управлять процессом.</li>
</ul>
<br />
<strong>Событийные машины</strong><br />
Как устроена событийная машина? Ни для кого не секрет, что операционная система позволяет в пределах одного приложения открыть несколько потоков данных и ожидать ввода/вывода из них. В основе любой событийной машины лежит цикл событий. Этот цикл позволяет отслеживать наличие ввода/вывода на любом из открытых потоков. Как только фиксируется событие ввода/вывода, управление передается участку кода, отвечающему за обработку этого события.
При такой организации есть один важный момент. Обычно событийная машина обеспечивает невытесняющую многозадачность. Поэтому необходимо следить, чтобы какое-нибудь событие не заблокировало всё приложение. А то получится как во времена Windows 9x, когда одно приложение могло заблокировать всю систему.<br />
<br />
<strong>Многопоточность</strong><br />
Здесь подразумевается порождение нескольких параллельных потоков в пределах одного приложения. К плюсам можно отнести использование всеми потоками одного адресного пространства и то, что скорость порождения очередного потока намного выше скорости порождения нового процесса. К минусам можно отнести проблему синхронизации потоков, в отличие от проблемы блокирования в событийных машинах.<br />
<br />
Программировать многопоточные приложения мне не доводилось, но имея некоторое представление о них, мне приятнее будет повозиться с блокировками. Но это уже исключительно субъективный взгляд. А с многопоточностью пусть возятся программисты на java, python и ruby. Тем более, что эти языки прямо так и просят, чтобы на них писали именно многопоточные приложения, а не событийные машины.<br />
<br />
Perl же больше расположен к использованию событийных машин. Одной из таких машин является <a href="http://poe.perl.org/">фреймворк POE</a>, написанный Rocco Caputo.<br />
<strong>Пришло время ответить на вопрос почему именно POE?</strong><br />
POE имеет очень хорошую абстракцию по классам. На <a href="http://cpan.org">CPAN</a> можно найти модули практически под любые задачи. Например если нам надо организовать HTTP клиента, мы просто подключаем модуль <a href="http://search.cpan.org/~rcaputo/POE-Component-Client-HTTP-0.82/lib/POE/Component/Client/HTTP.pm">POE::Component::Client::HTTP</a>. Т.о. мы как из конструктора собираем приложение, которое способно выполнять поставленные задачи и нам остается только описать все необходимые события. Если Вы программируете на Perl, то писать многозадачные приложения на POE будет для Вас сплошным удовольствием. В одной из следующих заметок я обязательно расскажу, как написать простейшего сетевого бота на POE<br />
<br />
Теперь о производительности. Приложение на POE способно обрабатывать 100-1000 запросов в секунду, а это очень не мало. Написание приложения на столь высоком уровне занимает гораздо меньше времени, чем низкоуровневая реализация. В моей практике были высоконагруженные приложения написанные на POE. Паук, написанный на POE::Component::Client::HTTP выжимал 17-20 Мбит/сек, и это в один процесс!<br />
<br />
К моему большому сожалению, в России POE используется крайне мало. Лично я знаю всего две организации, которые использую POE в своих проектах. Это <a href="http://tochkak.ru">Точка Кипения</a> и <a href="http://newmediastars.ru/">New Media Stars</a>. Из фрилансеров могу назвать только <a href="http://pavel-kudinov.livejournal.com/">Павла Кудинова</a>. Кстати, 25 сентября (т.е. уже завтра), <a href="http://highload.ru/guru/223.html">Павел</a> будет выступать с докладом <a href="http://highload.ru/thesis/3595.html">Сетевая многозадачность: событийные машины</a> на конференции <a href="http://highload.ru/">HighLoad – 2007</a>.
]]>
</description>
</item><item>
<pubDate>Thu, 09 Aug 2007 11:53:27 GMT</pubDate>
<title>Perl умер. Да здравствует Perl!</title>
<link>http://www.gorinich.net/posts/10</link>
<description>
<![CDATA[
Совсем недавно натолкнулся на <a href="http://www.oreillynet.com/onlamp/blog/2007/08/perl_is_dead_long_live_perl.html">статью</a>, доказывающую, что Perl не мертвый язык, как многие считают, а очень даже живой.<br />
Мой перевод этой статьи можно найти <a href="http://www.habrahabr.ru/blog/perl/22559.html">здесь</a>.
]]>
</description>
</item><item>
<pubDate>Tue, 31 Jul 2007 12:54:25 GMT</pubDate>
<title>POE - portable multitasking and networking framework for Perl.</title>
<link>http://www.gorinich.net/posts/9</link>
<description>
<![CDATA[
А по-русски, платформонезависимый фреймворк для создания многозадачных и сетевых приложений на Perl.<br />
<br />
POE позволяет достаточно просто и быстро создавать многозадачные приложения, особо не задумываясь об управлении процессами и другими приятными вещами, с которыми приходится сталкиваться при желании написать многозадачное приложение. Всю эту нагрузку на себя берет POE, мы лишь описываем, что мы хотим делать. В большинстве случаев все приложение выполняется одним процессом, но при необходимости, POE умеет порождать дочерние процессы и общаться с ними.<br />
<cut />
<br />
Но при всем при этом есть момент, который нельзя выпускать из виду при разработке приложений на POE. POE обеспечивает невытесняющую многозадачность. Это значит, что активное событие выполняется до тех пор, пока оно само, по собственной инициативе, не отдаст управление ядру для того, чтобы оно выбрало из очереди другое, готовое к выполнению событие. Такой механизм применялся в Windows 9x. Недостатком такого подхода является то, что если некоторое событие зациклится, это приведет к краху всей системы. (Некоторые компоненты POE умеют так делать, но это уже другая история.)<br />
<br />
Основными модулями POE являются ядро POE::Kernel и сессия POE::Session. Ядро контролирует очередь событий и их вызов, собственно ядро и обеспечивает всю многозадачность. Сессия – это абстрактная событийная машина. Каждую сессию можно рассматривать как самостоятельное приложение, которое имеет свой набор методов и свою абстрактную память. Посредством ядра сессии могут общаться между собой.<br />
<br />
Рассмотрим простейший пример из документации:<br />
<pre>
#!/usr/bin/perl -w
use strict;
use POE;

for (1..10) {
	POE::Session->create(
		'inline_states' => {
			'_start'    => sub {
				print "Session ", $_[SESSION]->ID, " has started.\n";
				$_[HEAP]->{'count'} = 0;
				$_[KERNEL]->yield('increment');
			},
			'increment' => sub {
				print "Session ", $_[SESSION]->ID, " counted to ", ++$_[HEAP]->{'count'}, ".\n";
				$_[KERNEL]->yield('increment') if $_[HEAP]->{'count'} < 10;
			},
			'_stop'     => sub {
				print "Session ", $_[SESSION]->ID, " has stopped.\n";
			},
		}
	);
}

POE::Kernel->run;
</pre>
В этом примере сначала создается 10 сессий, после чего происходит запуск ядра. Сессия также может быть создана и во время работы ядра. Также сессия может быть создана внутри другой сессии, такая сессия называется дочерней. Методы сессии описываются в параметре inline_states. Это хеш, в котором в качестве значений используются либо ссылки на функции либо анонимные процедуры. Для каждой сессии «выделяется область памяти», с которой работает только эта сессия. По сути это простая переменная в которой сессия может хранить что угодно. Эта переменная называется HEAP, при создании сессии можно задать ее начальное значение в параметре heap, внутри любого метода сессии к ней можно получить доступ через $_[HEAP]. Как только ядро обнаруживает новую сессию, оно выполняет метод _start. Как только ядро считает, что сессия больше не потребуется и ее никто не будет вызывать, вызывается метод _stop, после чего сессия уничтожается. 
В каждый момент времени выполняется только один метод. Как только выполнение метода заканчивается, управление возвращается ядру и оно выполняет вызов следующего события из очереди. Также любой метод может поставить в очередь ядра любое событие своей или чужой сессии. Обращение к ядру осуществляется через $_[KERNEL]. Чтобы поставить сообщение в очередь существует множество методов ядра. Но наиболее употребительные это yield (постановка в очередь события своей сессии), post (постановка в очередь события любой сессии), call (синхронный вызов события любой сессии), delay (просьба вызвать метод своей сессии через определенный промежуток времени).<br />
<br />
Это был краткий обзор POE. В следующих статьях я постараюсь описать некоторые компоненты POE. А пока с удовольствием отвечу на любые вопросы.<br />
<br />
Полную документацию и примеры использования можно найти на сайте http://poe.perl.org/. Информация на русском языке по POE практически отсутствует.<br />
<br />
PS. POE – единственный фреймворк, который поддерживает графические инструменты Tk и Gtk. Что позволяет писать на Perl многозадачные оконные приложения.
]]>
</description>
</item><item>
<pubDate>Mon, 09 Jul 2007 11:41:30 GMT</pubDate>
<title>Декоративная кнопка Обзор. Делаем невозможное.</title>
<link>http://www.gorinich.net/posts/8</link>
<description>
<![CDATA[
<style type="text/css">
div.fileinputs {
	position: relative;
	left:0;
}

div.faketext {
	position: absolute;
	top: 3px;
	left: 20px;
	z-index: 5;
}

div.fakebtn {
	position: absolute;
	top: 0px;
	left: 10px;
	z-index: 1;
}

input.browsetext {
 background: transparent;
 height: 17px;
 width: 115px;
 font-family: Verdana;
 font-size: 10px;
 border: none;
 color: #000000;
}

input.file {
	position: absolute;
	top: 0px;
	left: 20px;
	z-index: 3;
}

input.fakefile {
	position: relative;
	-moz-opacity:0 ;
	filter:alpha(opacity: 0);
	opacity: 0;
	z-index: 3;
}

</style>

   Никогда бы не подумал, что буду что-то про верстку. Но жизнь штука странная. Да и люди бывают не очень продвинутые в web-технологиях и просят сделать вроде бы простые, но на первый взгляд невозможные вещи.<br />
   Думаю, все знают стандартный элемент формы для загрузки файлов. Вот он<br />
<input type="file" /><br />
   А вот теперь попробуйте сделать его красивым. "Легко, ведь есть CSS!!!" - скажут многие, и многие будут правы. Но попробуйте сделать так<br />
<img src="/direct/imgs/issues/browse_button.gif" alt="" /><br />
   Слабо? Вот и мне сначала было слабо. Ведь заменить этот элемент нечем, этого требует безопасность. Вы же ведь не хотите, чтобы страничка умела сама по себе загрузить Ваш файл? Не найдя у себя в голове и в документации решения этой проблемы я решил спросить у Яндекса. Говорят там найдется все. И правда, нашлось. Ответ был короток: "Никак. <a href="http://www.quirksmode.org/dom/inputfile.html" target="_blank">Или так</a>." Ничего больше Яндекс не нашел. Я изучил эту статью, но сделать как там у меня не получилось, видимо и не особо хотелось. Особо насторожил большой скрипт, который, при ближайшем рассмотрении, как оказалось, делает одну простую и не понятно зачем нужную вещь. Он просто ищет все элементы типа file и оформляет их как положено. Но зачем нам такая радость, если у нас на странице целых 3 таких элемента? Правильно - не надо нам такого. Еще очень не понравился пример работы этой радости (самый последний по той ссылке). Сами попробуйте и поймете. Вот я и решил воспользоваться не самим способом, а только его идеей. За что огромное спасибо <a href="http://michaelmcgrady.com/" target="_blank">Michael McGrady</a>. И у меня получилось. Причем от скрипта не осталось и следа.<br />
   <cut title="А идея по сути проста.">
   А идея по сути проста. Мы размещаем в три слоя следующие элементы. Внизу картинка, над ней поле file, и в самом верху обычное текстовое поле. Зачем нужно текстовое поле, вы скоро поймете. Идея думаю понятна. Теперь задача состоит в другом, сделать чтобы это все заработало и смотрелось как надо. Чтобы заработало, нам надо с помощью тега div разместить над картинкой в нужных местах поле file и текстовое поле. Для этого будем использовать свойство z-index слоя. Поле file нужно разместить так, чтобы кнопка располагалась в том месте, где ее замена нарисована на картинке.
Выглядеть будет примерно так<br />
<div class="fileinputs">
	<input type="file" class="file" />
	<div class="fakebtn">
		<img src="/direct/imgs/issues/browse_button.gif" alt="" />
	</div>
</div>
<br />
<br />
   Вот исходник этого примера
<pre>
div.fileinputs {
	position: relative;
	left:0;
}

div.fakebtn {
	position: absolute;
	top: 0px;
	left: 10px;
	z-index: 1;
}

input.file {
	position: absolute;
	top: 0px;
	left: 20px;
	z-index: 3;
}

&lt;div class="fileinputs">
	&lt;input type="file" class="file" />
	&lt;div class="fakebtn">
		&lt;img src="http://gorinich.net/direct/imgs/issues/browse_button.gif" alt="" />
	&lt;/div>
&lt;/div>
</pre>

   Выглядит ужасно и не так как надо, но это всего лишь заготовка. Теперь нам надо сделать элемент file прозрачным. Не невидимым, а именно прозрачным. Для этого браузер должен поддерживать <a href="http://www.quirksmode.org/css/opacity.html" target="_blank">opacity</a>. Это свойство работает в Explorer 5.5+ и в Mozilla. Так что придется ради красоты пожертвовать несовместимостью с некоторыми браузерами. Итак, делаем. Перепишем стиль input.file. Заодно и переименуем его ;)
<pre>
input.fakefile {
	position: relative;
	-moz-opacity:0 ;
	filter:alpha(opacity: 0);
	opacity: 0;
	z-index: 3;
}

&lt;div class="fileinputs">
	&lt;input type="file" class="fakefile" />
	&lt;div class="fakebtn">
		&lt;img src="http://gorinich.net/direct/imgs/issues/browse_button.gif" alt="" />
	&lt;/div>
&lt;/div>
</pre>

<div class="fileinputs">
	<input type="file" class="fakefile" />
	<div class="fakebtn">
		<img src="/direct/imgs/issues/browse_button.gif" alt="" />
	</div>
</div>
<br />
   Попробуйте нашу новую кнопку в действии. Работает! Вот только имя файла не видно :). Поле-то прозрачное. Для этого нам и понадобится упомянутое ранее текстовое поле. Сделаем это.
Объявим полю новый стиль
<pre>
div.faketext {
	position: absolute;
	top: 0px;
	left: 20px;
	z-index: 5;
}

&lt;div class="fileinputs">
	&lt;input type="file" class="fakefile" />
	&lt;div class="faketext">
		&ltinput name="filename1" type='text' />
	&lt;/div>
	&lt;div class="fakebtn">
		&lt;img src="http://gorinich.net/direct/imgs/issues/browse_button.gif" alt="" />
	&lt;/div>
&lt;/div>
</pre>
<div class="fileinputs">
	<input type="file" class="fakefile" />
	<div class="faketext">
		<input name="filename1" type="text" />
	</div>
	<div class="fakebtn">
		<img src="/direct/imgs/issues/browse_button.gif" alt="">
	</div>
</div>
<br />
   Теперь нам надо сделать так, чтобы и это все смотрелось красиво. Объявим еще один стиль, для этого поля, сделаем ему прозрачный фон, уберем границы и придадим нужные размеры. Еще нам не надо, чтобы пользователь мог ввести в поле что-либо. Ведь от этого никакого толку, а пользователь только растеряется, если введет имя файла руками и ничего не получит. Еще нам надо сделать, чтобы в это поле выводилось имя выбранного файла. Для этого напишем всего одну строчку скрипта. Делаем
<pre>
input.browsetext {
 background: transparent;
 height: 17px;
 width: 120px;
 font-family: Verdana;
 font-size: 9px;
 border: none;
 color: #000000;
}

&lt;form name="uploadfiles">
&lt;div class="fileinputs">
	&lt;input type="file" class="fakefile" onchange='document.forms["uploadfiles"].
elements["filename"].value=this.value' />
	&lt;div class="faketext">
		&lt;input name="filename" type="text" class="browsetext" readonly />
	&lt;/div>
	&lt;div class="fakebtn">
		&lt;img src="http://gorinich.net/direct/imgs/issues/browse_button.gif" alt="" />
	&lt;/div>
&lt;/div>
&lt;/form>
</pre>
<form name="uploadfiles">
<div class="fileinputs">
	<input type="file" class="fakefile" onchange='document.forms["uploadfiles"].elements["filename"].value=this.value' />
	<div class="faketext">
		<input name="filename" type="text" class="browsetext" readonly />
	</div>
	<div class="fakebtn">
		<img src="/direct/imgs/issues/browse_button.gif" alt="" />
	</div>
</div>
</form>
<br />
   Вот и все. Теперь вы можете пользоваться новым элементом как обычным, только теперь нельзя будет ввести имя файла вручную, но так ли часто вы это делаете...<br />
   Удачной разработки.
]]>
</description>
</item><item>
<pubDate>Thu, 10 May 2007 12:58:10 GMT</pubDate>
<title>POE::Component::Client::HTTP</title>
<link>http://www.gorinich.net/posts/7</link>
<description>
<![CDATA[
Вот блин...<br />
Неожиданно наткнулся на одну проблемку.<br />
При написании скрипта на Perl нашел то ли баг, то ли не знаю что в модуле POE::Component::Client::HTTP. Дело в том, что во время выполнения запроса при получении объекта HTTP::Response в заголовке запроса исчезают куки. Вернее не исчезают, а остается только последняя. В версии клиента 0.57 (именно она ставится при помощи модуля ppm) все было нормально, в версиях 0.79 и 0.80 (последняя на сегодня) этот "баг" был мной обнаружен. Сейчас буду изучать код в поисках истины.<br />
<br />
Нашел.<br />
Перебрал весь код POE::Component::Client::HTTP. А дело оказалось даже не в нем<br />
Проблема в POE::Filter::HTTPHead строка 90.<br />
$self->[WORK_RESPONSE]->header($1, $2);<br />
Дело в том, что метод header добавляет заголовок в объект HTTP::Response, но если такой заголовок уже есть, он перезаписывается.<br />
<br />
Рассмотрим след. заголовок:<br />
HTTP/1.1 200 OK<br />
Cache-Control: no-cache, pre-check=0, post-check=0<br />
Connection: Close<br />
Date: Mon, 22 Jan 2007 10:19:49 GMT<br />
Pragma: no-cache<br />
Server: Apache/2.0.53 (ASPLinux)<br />
Content-Type: text/html; charset=WINDOWS-1251<br />
Expires: 0<br />
Set-Cookie: phpbb2mysql_data=a%3A0%3A%7B%7D; expires=Tue, 22 Jan 2008 10:19:49 GMT; path=/;<br />
Set-Cookie: phpbb2mysql_sid=79cd66857632c3e75c16d0b8<br />
4034a95a; path=/;<br />
Set-Cookie: phpbb2mysql___lastvisit=1169461190; expires=Fri, 01 Jan 1971 00:00:00 GMT; path=/;<br />
Set-Cookie: phpbb2mysql___f_all=0; path=/;<br />
Set-Cookie: phpbb2mysql___f=a%3A0%3A%7B%7D; path=/;<br />
Set-Cookie: phpbb2mysql___t=a%3A0%3A%7B%7D; path=/;<br />
Set-Cookie: phpbb2mysql___uf=0; expires=Tue, 22 Jan 2008 10:19:50 GMT; path=/;<br />
Set-Cookie: phpbb2mysql___u=a%3A0%3A%7B%7D; expires=Tue, 22 Jan 2008 10:19:50 GMT; path=/;<br />
<br />
После обработки этим фильтром мы получим:<br />
HTTP/1.1 200 OK<br />
Cache-Control: no-cache, pre-check=0, post-check=0<br />
Connection: Close<br />
Date: Mon, 22 Jan 2007 10:19:49 GMT<br />
Pragma: no-cache<br />
Server: Apache/2.0.53 (ASPLinux)<br />
Content-Type: text/html; charset=WINDOWS-1251<br />
Expires: 0<br />
Set-Cookie: phpbb2mysql___u=a%3A0%3A%7B%7D; expires=Tue, 22 Jan 2008 10:19:50 GMT; path=/;<br />
<br />
Т.о. мы потеряли все куки кроме последней.<br />
Исправляется данная проблема просто. В строке 90 вместо $self->[WORK_RESPONSE]->header($1, $2) пишем $self->[WORK_RESPONSE]->push_header($1, $2).<br />
<br />
от 22.01.2007
]]>
</description>
</item><item>
<pubDate>Thu, 12 Apr 2007 09:30:45 GMT</pubDate>
<title>Поехали</title>
<link>http://www.gorinich.net/posts/6</link>
<description>
<![CDATA[
Сегодня на <a href="http://www.yandex.ru">Яndex</a> прилетело НЛО.<br />
<div style="text-align:right; width: 500px;"><a href="http://gorinich.flamber.ru/photos/1176358141/" title="Фотосайт со вспышкой: ya_ufo"><img src="http://www.flamber.ru/files/photos/1170843537/1176358141_f.jpg" width="500" height="51" style="border: 1px solid #000;" alt="" /></a><br/><span style="float: left;">ya_ufo</span><strong>Flamber.<span style="color:#AACF00">ru</span></strong></div><br />
Кстати. С днем космонавтики!
]]>
</description>
</item><item>
<pubDate>Sat, 07 Apr 2007 12:43:43 GMT</pubDate>
<title>RSS</title>
<link>http://www.gorinich.net/posts/5</link>
<description>
<![CDATA[
<p>Только что сделал себе RSS 2.0</p>
<p><a href="http://www.gorinich.net/feed/rss/"><img src="/direct/imgs/design/rss.gif" alt="" /></a></p>
]]>
</description>
</item>
</channel>
</rss>