<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>taggi.ru</title>
	<atom:link href="http://www.taggi.ru/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.taggi.ru</link>
	<description>web разработка и другие наркотики</description>
	<lastBuildDate>Tue, 01 Feb 2011 13:44:56 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Шаблоны проектирования: Bridge</title>
		<link>http://www.taggi.ru/2011/02/design-patterns-bridge/</link>
		<comments>http://www.taggi.ru/2011/02/design-patterns-bridge/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 13:28:41 +0000</pubDate>
		<dc:creator>taggi</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[bridge]]></category>
		<category><![CDATA[design patterns]]></category>

		<guid isPermaLink="false">http://www.taggi.ru/?p=85</guid>
		<description><![CDATA[Долго думал о каком бы шаблоне написать, в результате решил остановиться на Bridge, шаблон, который практически никогда не встречал в мануалах по веб-разработке. Итак, сформулируем проблему:  При использовании наследования реализующий код жестко привязан к абстракции, что сильно усложняет независимую модификацию. Необходимо отделить абстракцию от реализации так, чтобы и то и другое можно было изменять независимо. [...]]]></description>
			<content:encoded><![CDATA[<p>Долго думал о каком бы шаблоне написать, в результате решил остановиться на Bridge, шаблон, который практически никогда не встречал в мануалах по веб-разработке.</p>
<p>Итак, сформулируем проблему:  При использовании наследования реализующий код жестко привязан к абстракции, что сильно усложняет независимую модификацию. Необходимо отделить абстракцию от реализации так, чтобы и то и другое можно было  изменять независимо.</p>
<p>Допустим у нас есть задача создания списка статей разного типа, при этом также следует учесть, что формат вывода может иметь несколько вариаций.</p>
<p>Пример реализации:</p>
<pre>
&lt;?php

abstract <strong>class</strong> Articles
{
    protected $_viewType;

    abstract <strong>function</strong> printAll();

    <strong>function</strong> __construct(<strong>$viewType</strong>)
    {
        <strong>$this</strong>-&gt;_viewType = <strong>$viewType</strong>;
    }

    protected <strong>function</strong> printLogic(array <strong>$articles</strong>)
    {
        if(<strong>$this</strong>-&gt;_viewType == &#039;block&#039;)
        {
            <strong>$this</strong>-&gt;blockPrintLogic(<strong>$articles</strong>);
        }
        else
        {
            <strong>$this</strong>-&gt;listPrintLogic(<strong>$articles</strong>);
        }
    }

    protected <strong>function</strong> blockPrintLogic(array <strong>$articles</strong>)
    {
        echo &#039;Вывод блоками: | &#039;.
            implode(&#039; | &#039;,<strong>$articles</strong>)
            .&#039; |&#039;;
    }

    protected <strong>function</strong> listPrintLogic(array <strong>$articles</strong>)
    {
        echo &#039;Вывод списком &lt;br&gt;&lt;ul&gt;&lt;li&gt;&#039;.
            implode(&#039;&lt;/li&gt;&lt;li&gt;&#039;,<strong>$articles</strong>)
            .&#039;&lt;/li&gt;&lt;/ul&gt;&#039;;
    }
}

<strong>class</strong> GameArticles extends Articles
{
    <strong>function</strong> printAll()
    {
        <strong>$articles</strong> = array
        (
            &#039;Статья об игре 1&#039;,
            &#039;Статья об игре 2&#039;,
            &#039;Статья об игре 3&#039;,
        );
        <strong>$this</strong>-&gt;printLogic(<strong>$articles</strong>);
    }
}

<strong>class</strong> VideoArticles extends Articles
{
    <strong>function</strong> printAll()
    {
        <strong>$articles</strong> = array
        (
            &#039;Статья о фильме 1&#039;,
            &#039;Статья о фильме 2&#039;,
            &#039;Статья о фильме 3&#039;,
        );
        <strong>$this</strong>-&gt;printLogic(<strong>$articles</strong>);
    }
}

<strong>$listGameArticles</strong> = new GameArticles(&#039;list&#039;);
<strong>$listGameArticles</strong>-&gt;printAll();

<strong>$blockVideoArticles</strong> = new VideoArticles(&#039;block&#039;);
<strong>$blockVideoArticles</strong>-&gt;printAll();
?&gt;
</pre>
<p>В результате выполнения получим:</p>
<div class="code">
Вывод списком </p>
<ul>
<li>Статья об игре 1</li>
<li>Статья об игре 2</li>
<li>Статья об игре 3</li>
</ul>
<p>Вывод блоками: | Статья о фильме 1 | Статья о фильме 2<br />
| Статья о фильме 3 |
</p></div>
<p>Какие неудобства мы здесь видим? Код абстракции и код реализации связаны друг с другом, мы не можем проводить независимые модификации, хоть для одного разработчика это может и не быть проблемой, для группы программистов это несет негативные последствия. </p>
<p>Путем применения шаблона &laquo;Мост&raquo; мы не только избавляемся от проблем с модификациями в будущем, но и делаем структуру класса более изящной и логичной.</p>
<p>Вот как выглядит оптимизированный вариант:</p>
<pre>
&lt;?php

abstract <strong>class</strong> Articles
{
    protected $_articleView;

    abstract <strong>function</strong> printAll();

    <strong>function</strong> __construct(ArticleView <strong>$articleView</strong>)
    {
        <strong>$this</strong>-&gt;_articleView = <strong>$articleView</strong>;
    }

    protected <strong>function</strong> printLogic(array <strong>$articles</strong>)
    {
        <strong>$this</strong>-&gt;_articleView-&gt;printLogic(<strong>$articles</strong>);
    }
}

<strong>class</strong> GameArticles extends Articles
{
    <strong>function</strong> printAll()
    {
        <strong>$articles</strong> = array
        (
            &#039;Статья об игре 1&#039;,
            &#039;Статья об игре 2&#039;,
            &#039;Статья об игре 3&#039;,
        );
        <strong>$this</strong>-&gt;printLogic(<strong>$articles</strong>);
    }
}

<strong>class</strong> VideoArticles extends Articles
{
    <strong>function</strong> printAll()
    {
        <strong>$articles</strong> = array
        (
            &#039;Статья о фильме 1&#039;,
            &#039;Статья о фильме 2&#039;,
            &#039;Статья о фильме 3&#039;,
        );
        <strong>$this</strong>-&gt;printLogic(<strong>$articles</strong>);
    }
}

<strong>interface</strong> ArticleView
{
    <strong>function</strong> printLogic(array <strong>$articles</strong>);
}

<strong>class</strong> BlockArticleView <strong>implements</strong> ArticleView
{
    <strong>function</strong> printLogic(array <strong>$articles</strong>)
    {
        echo &#039;Вывод блоками: | &#039;.
            implode(&#039; | &#039;,<strong>$articles</strong>)
            .&#039; |&#039;;
    }
}

<strong>class</strong> ListArticleView <strong>implements</strong> ArticleView
{
    <strong>function</strong> printLogic(array <strong>$articles</strong>)
    {
        echo &#039;Вывод списком &lt;br&gt;&lt;ul&gt;&lt;li&gt;&#039;.
            implode(&#039;&lt;/li&gt;&lt;li&gt;&#039;,<strong>$articles</strong>)
            .&#039;&lt;/li&gt;&lt;/ul&gt;&#039;;
    }
}

<strong>$listGameArticles</strong> = new GameArticles(new ListArticleView());
<strong>$listGameArticles</strong>-&gt;printAll();

<strong>$blockVideoArticles</strong> =
new VideoArticles(new BlockArticleView());
<strong>$blockVideoArticles</strong>-&gt;printAll();
?&gt;
</pre>
<p>Реализацию логики отображения мы вынесли в отдельный класс ArticleView, оставив в абстракции только необходимое.</p>
<p>Обратите также внимание на изменения в клиентском коде, код стал более строгим, уточнение типов не даст нам совершить ошибку при создании экземпляра статей. </p>
<p>Для более глубокого восприятия рекомендую <a href="http://habrahabr.ru/blogs/complete_code/85137/">отличную статью</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.taggi.ru/2011/02/design-patterns-bridge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Шаблоны проектирования: Factory Method</title>
		<link>http://www.taggi.ru/2010/12/design-patterns-factory-method/</link>
		<comments>http://www.taggi.ru/2010/12/design-patterns-factory-method/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 09:59:00 +0000</pubDate>
		<dc:creator>taggi</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.taggi.ru/?p=64</guid>
		<description><![CDATA[Коротко говоря Factory Method (Фабричный метод) — предоставляет подклассам некоторого класса фабрики (создателя) возможность создавать свойственные им конкретные продукты. Когда применять? Если класс фабрика начинает обрастать логикой по созданию разного типа объектов (продуктов) и методы начинают содержать дублированные ветвления. Пример: пусть у нас есть класс фабрики статей задача которого предоставлять по запросу коллекции статей заданного [...]]]></description>
			<content:encoded><![CDATA[<p>Коротко говоря  Factory Method (Фабричный метод) — предоставляет подклассам некоторого класса фабрики (создателя) возможность создавать свойственные им конкретные продукты.</p>
<p>Когда применять? Если класс фабрика начинает обрастать логикой по созданию разного типа объектов (продуктов) и методы начинают содержать дублированные ветвления.</p>
<p><strong>Пример</strong>: пусть у нас есть класс фабрики статей задача которого предоставлять по запросу коллекции статей заданного типа.</p>
<pre>&lt;?php

<strong>class</strong> ArticlesFactory
{
    <strong>function</strong> getArticles(<strong>$type</strong>)
    {
        switch(<strong>$type</strong>)
        {
            case 'game':
                <strong>$articles</strong> = new GameArticles(); break;
            case 'video':
                <strong>$articles</strong> = new VideoArticles(); break;
            default:
                throw new Exception('<strong>$type</strong> not defined');
        }

        return <strong>$articles</strong>;
    }

    <strong>function</strong> info(<strong>$type</strong>)
    {
        switch(<strong>$type</strong>)
        {
            case 'game':
                <strong>$info</strong> = 'Статьи о играх'; break;
            case 'video':
                <strong>$info</strong> = 'Статьи о видео'; break;
            default:
                throw new Exception('<strong>$type</strong> not defined');
        }

        return <strong>$info</strong>;
    }
}

<strong>interface</strong> Articles
{
    <strong>function</strong> get(<strong>$articleId</strong>);
}

<strong>class</strong> GameArticles <strong>implements</strong> Articles
{
    <strong>function</strong> get(<strong>$articleId</strong>)
    {
        return 'Статья об играх под #id '.<strong>$articleId</strong>;
    }
}

<strong>class</strong> VideoArticles <strong>implements</strong> Articles
{
    <strong>function</strong> get(<strong>$articleId</strong>)
    {
        return 'Статья о видео под #id '.<strong>$articleId</strong>;
    }
}

<strong>$articlesFactory</strong> = new ArticlesFactory();
echo <strong>$articlesFactory</strong>-&gt;info('video');

<strong>$articles</strong> = <strong>$articlesFactory</strong>-&gt;getArticles('video');
echo '&lt;p&gt;'.<strong>$articles</strong>-&gt;get(rand(1,100)).'&lt;/p&gt;';

?&gt;
</pre>
<p>после выполнения получим вывод примерно следующего содержания</p>
<pre>Статьи о видео
Статья о видео под #id 16
</pre>
<p>В коде намерено опущена проверка на ошибки для простоты примера. Главные участники здесь: <strong>ArticlesFactory</strong> — фабрика статей (в терминологии шаблона &laquo;создатель&raquo;) и <strong>Articles</strong> — наборы статей (продукт).</p>
<p>На лицо несколько проблем:</p>
<ul>
<li>Дублирование кода (Добавление нового метода в фабрику (например подсчета количества статей заданного типа) приведет к очередному дубликату конструкции switch</li>
</ul>
<ul>
<li>Тесная связь (Добавление нового типа статей приведет к правке всех методов фабрики)</li>
</ul>
<p>Шаблон Factory Method предлагает для решения этих проблем создать специфичные фабрики для каждого из продуктов, т.е. фактически свеcти реализацию к полиморфизму.</p>
<pre>&lt;?php

<strong>interface</strong> ArticlesFactory
{
    <strong>function</strong> getArticles();
    <strong>function</strong> info();
}

<strong>class</strong> GameArticlesFactory <strong>implements</strong> ArticlesFactory
{
    <strong>function</strong> getArticles()
    {
        return new GameArticles();
    }

    <strong>function</strong> info()
    {
        return 'Статьи о играх';
    }
}

<strong>class</strong> VideoArticlesFactory <strong>implements</strong> ArticlesFactory
{
    <strong>function</strong> getArticles()
    {
        return new VideoArticles();
    }

    <strong>function</strong> info()
    {
        return 'Статьи о видео';
    }
}

<strong>interface</strong> Articles
{
    <strong>function</strong> get(<strong>$articleId</strong>);
}

<strong>class</strong> GameArticles <strong>implements</strong> Articles
{
    <strong>function</strong> get(<strong>$articleId</strong>)
    {
        return 'Статья об играх под #id '.<strong>$articleId</strong>;
    }
}

<strong>class</strong> VideoArticles <strong>implements</strong> Articles
{
    <strong>function</strong> get(<strong>$articleId</strong>)
    {
        return 'Статья о видео под #id '.<strong>$articleId</strong>;
    }
}

<strong>$videoArticlesFactory</strong> = new GameArticlesFactory();
echo <strong>$videoArticlesFactory</strong>-&gt;info();
<strong>$articles</strong> = <strong>$videoArticlesFactory</strong>-&gt;getArticles();
echo '&lt;p&gt;'.<strong>$articles</strong>-&gt;get(rand(1,100)).'&lt;/p&gt;';

?&gt;
</pre>
<p>Перечислим основные плюсы такого подхода:</p>
<ul>
<li>Клиентский код по созданию объектов стал более универсален и не привязан к конкретному продукту (типу статей), а оперирует общим интерфейсом ArticlesFactory</li>
<li>Однозначная связь между параллельными иерархиям классов</li>
</ul>
<p>Не обошлось и без минусов:</p>
<ul>
<li>Необходимо создавать новую фабрику под каждый новый тип статей</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.taggi.ru/2010/12/design-patterns-factory-method/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kohana: документация</title>
		<link>http://www.taggi.ru/2010/12/kohana-documentation/</link>
		<comments>http://www.taggi.ru/2010/12/kohana-documentation/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 08:46:00 +0000</pubDate>
		<dc:creator>taggi</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[kohana]]></category>

		<guid isPermaLink="false">http://www.taggi.ru/?p=56</guid>
		<description><![CDATA[Как известно, документация &#8211; сердце фреймворка, без нее даже качественный фрейм превращается в мусор, не набирая нужных оборотов для развития. К сожалению, официальная документация не сильно блещет изобилием, так что вот  некий список &#8211; памятка статей о Кохане. Приступим: kupreev.com Отличная статья о Views в Kohana Простейший HMVC  в Kohana HMVC виджет Внутренние роутеры Коханы [...]]]></description>
			<content:encoded><![CDATA[<p>Как известно, документация &#8211; сердце фреймворка, без нее даже качественный фрейм превращается в мусор, не набирая нужных оборотов для развития. К сожалению, официальная документация не сильно блещет изобилием, так что вот  некий список &#8211; памятка статей о Кохане. Приступим:</p>
<h2>kupreev.com</h2>
<p><a href="http://kupreev.com/page/views-kohana3">Отличная статья о Views в Kohana</a></p>
<p><a href="http://kupreev.com/page/simple-hmvc-kohana3">Простейший HMVC  в Kohana</a></p>
<p><a href="http://kupreev.com/page/simple-hmvc-widget-kohana3">HMVC виджет</a></p>
<p><a href="http://kupreev.com/page/kohana3-inner-routes">Внутренние роутеры Коханы</a></p>
<h2>brotkin.ru</h2>
<p><a href="http://brotkin.ru/2009/09/21/ko3-orm-izuchaem-zanovo/">Базовая ORM </a></p>
<p><a href="http://brotkin.ru/2009/10/01/ko3-multiyazychnost/">KO3 мультиязычность</a></p>
<p><a href="http://brotkin.ru/2009/10/26/ko3-pagination/">Пагинация</a></p>
<p><a href="http://brotkin.ru/2010/01/27/ko3-profiler/">Собираем статистику</a></p>
<h2>habrahabr.ru</h2>
<p><a href="http://habrahabr.ru/blogs/kohanaphp/70164/">KO3: HMVC и роутинг</a></p>
<p><a href="http://habrahabr.ru/blogs/kohanaphp/70173/">Интеграция Doctrine в kohana 3 </a></p>
<h2>kerkness.ca</h2>
<p><a href="http://kerkness.ca/wiki/doku.php">Отличная документация</a> на английском, очень много всего, рекомендую</p>
<h2>kohanaframework.org</h2>
<p>Скромная <a href="http://kohanaframework.org/guide">оффициальная документация</a> (<a href="http://drp.ly/7KFe7">скомпилированная в chm</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.taggi.ru/2010/12/kohana-documentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kohana: быстрый старт</title>
		<link>http://www.taggi.ru/2010/12/kohana-quick-start/</link>
		<comments>http://www.taggi.ru/2010/12/kohana-quick-start/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 08:43:24 +0000</pubDate>
		<dc:creator>taggi</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[kohana]]></category>

		<guid isPermaLink="false">http://taggi.local/?p=30</guid>
		<description><![CDATA[Введение Kohana — это открытый, объектно-ориентированный MVC web-фреймворк, построенный на PHP5 на общественных началах, основными целями которого являются скорость, безопасность и небольшой размер. Являясь одним из форков CodeIgniter, Kohana была переписана в целостный монументальный проект, сохраняя при этом легкую расширяемость, обладая 100% поддержкой юникода при этом следуя строгой концепции ООП. Установка Коротко: Скачиваем, распаковываем в [...]]]></description>
			<content:encoded><![CDATA[<h2>Введение</h2>
<p><a href="http://ru.wikipedia.org/wiki/Kohana">Kohana </a>— это открытый, <a href="http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5">объектно-ориентированный</a> <a title="Model View Controller" href="http://ru.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller">MVC</a> web-фреймворк, построенный на <a title="PHP Hypertext Preprocessor" href="http://docs.php.net/manual/ru/intro-whatis.php">PHP5</a> на общественных началах, основными целями которого являются скорость, безопасность и небольшой размер.</p>
<p>Являясь одним из форков CodeIgniter, Kohana была переписана в целостный монументальный проект, сохраняя при этом легкую расширяемость, обладая 100% поддержкой юникода при этом следуя строгой концепции ООП.</p>
<h2><span id="more-30"></span>Установка</h2>
<p>Коротко: <a href="http://kohanaframework.org/download/kohana-latest" target="_blank">Скачиваем</a>, распаковываем в директорию доступную web серверу, открываем в браузере.</p>
<p>Подробно: <a href="http://kohanaframework.org/guide/about.install" target="_blank">http://kohanaframework.org/guide/about.install</a></p>
<h2>Настройка</h2>
<p>Основной конфигурационный файл <strong>bootstrap.php</strong>, каталога applications. Основное моменты:</p>
<ul>
<li>подключение модулей (Kohana::modules($modules), где $modules &#8211; массив подгружаемых модулей расположенных в папке modules корневого каталога.</li>
<li>Route::set() &#8211; подключение роутеров, структура включения не привычная, но достаточно наглядная и приятная.</li>
</ul>
<p>Дополнительно:</p>
<p><a href="http://brotkin.ru/2009/06/15/ko3-starting/">Подробности из Блога Броткина Ивана</a></p>
<p><a href="http://kohanaframework.org/guide/using.configuration">Оффициальная документация</a></p>
<p><a href="http://kerkness.ca/wiki/doku.php">Дополнительная документация</a></p>
<h2>MVC</h2>
<p><strong>Контроллеры </strong>следует располагать в папке <strong>application/classes/controller</strong>, методы должны называться <strong>action_</strong>имяМетода например action_index</p>
<p><strong>Модели</strong> &#8211; по сути обычные статичные классы, если требуется добавить метод фабрику, то можно сделать это наследованием от Model. Рекомендуется располагать в <strong>application/classes/model</strong></p>
<p><strong>Представления </strong>- создаются с помощью вызова метода фабрики, пример:</p>
<p><code>$this-&gt;request-&gt;response = View::factory('main')-&gt;set('areas',$areas);</code></p>
<p>В данном случае, будет вызвано представление по адресу <strong>application/view/main.php, </strong>c передачей переменной $areas. Результат генерации будет передан объекту request для вывода пользователю.</p>
<p>Подробнее:</p>
<p><a href="http://kohanaframework.org/guide/tutorials.helloworld">Офф. документация</a></p>
<h2>Роутинг</h2>
<p>По умолчанию URI роутинг Коханы настроен на прием запросов вида<br />
<code>www.your-site.com/controller/method/id/<br />
</code></p>
<p>С помощью правил роутинга можно расширить данное поведение до практически любого формата URL.</p>
<p>Для примера простое правило для задания рейтинга файлам:</p>
<pre>Route::set('setRating', 'setRating/file&lt;file_num&gt;/&lt;rating&gt;',
    array
    (
        'file_num' =&gt; '[0-9]{1,5}',
        'rating' =&gt; '[1-5]'
    )
)
-&gt;defaults(array(
    'controller' =&gt; 'file',
    'action' =&gt; 'setRating'
));
</pre>
<p>Если что-то не ясно, много отличной документации:</p>
<p><a href="http://kerkness.ca/wiki/doku.php?id=routing:routing_basics">Базовые сведения</a></p>
<p><a href="http://kohanaframework.org/guide/tutorials.urls">Офф. документация</a></p>
<p><a href="http://brotkin.ru/2009/09/27/ko3-routing/">Подробная статья</a></p>
<h2>Итог</h2>
<p>Как видите начать использовать этот фреймворк совсем не сложно, вы можете сами помочь в разработке <a href="http://github.com/kohana">Kohan&#8217;ы</a> или её модулей.</p>
<p>В завершении предлагаю скачать <a href="http://drp.ly/7KFe7">скомпилированную документацию</a> в chm формате, успехов.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.taggi.ru/2010/12/kohana-quick-start/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

