<?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>Разноє &#187; php</title>
	<atom:link href="http://blog.xobb.me/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xobb.me</link>
	<description>Ховайтесь в жито!</description>
	<lastBuildDate>Sun, 29 Jan 2012 13:26:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Vkontakte API і Kohana</title>
		<link>http://blog.xobb.me/2011/08/vkontakte-api-and-kohana/</link>
		<comments>http://blog.xobb.me/2011/08/vkontakte-api-and-kohana/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 16:20:49 +0000</pubDate>
		<dc:creator>Paul Chubatyy</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[kohana 3.2]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[vkontakte]]></category>

		<guid isPermaLink="false">http://blog.xobb.me/?p=610</guid>
		<description><![CDATA[Займався недавно oauth2 протоколом. І консюмером, і провайдером і всяким всім. Провайдера намутили на раз-два, якщо ви думаєте чи юзати oauth2 в своїх проектах — однозначно да. Простота реалізації і секурність принципу бере своє. Правда якось невдало дуже в RFC написано. Я раза три перечитав всі флови, поки намалював в голові загальну картину як все [...]]]></description>
			<content:encoded><![CDATA[<p>Займався недавно oauth2 протоколом. І консюмером, і провайдером і всяким всім. Провайдера намутили на раз-два, якщо ви думаєте чи юзати oauth2 в своїх проектах — однозначно да. Простота реалізації і секурність принципу бере своє. Правда якось невдало дуже в RFC написано. Я раза три перечитав всі флови, поки намалював в голові загальну картину як все працює.</p>
<p>Для розминки я намутив собі консюмера, який буде хавати тоукени з вконтактє. Знайшов свого давно-закинутого аккаунта, намутив APP і почав тестувати. Так шоб ви собі орієнтувались на скільки це просто: 20 хв роботи і я вже всьо заработало. Дуже поміг модуль <a title="Дякуємо biakaveron`у" href="https://github.com/biakaveron/oauth">oauth2</a> (<a href="http://brotkin.ru/">блог автора Івана Броткіна</a>), там є всьо шо вам може бути потрібно.</p>
<p>Давайте буду попорядку всьо розказувати і код показувати. До вашої уваги контроллер, який буде приймати <em>authorization_code</em> від Вконтакте, і ходитиме з цим <em>authorization_code</em> по самий справжнісінький <em>access_token</em>.</p>
<script type='text/javascript' src='https://gist.github.com/1171022.js?file=oauth.php'></script>
<p>Модельку вже самі собі можете написати, в мене модельки дуже екзотичні, так шо приводити їх тут нема сенсу. Собі якось збережете, якщо захочете.</p>
<script type='text/javascript' src='https://gist.github.com/1171022.js?file=getprofiles.php'></script>
<p>А отак ми можемо взяти любу інформацію, на яку був виписаний тоукен з вконтактє чи нагадити на стіну. <em>Access_token </em>бібліотека сама підставить, в метод передаєте масив параметрів, які одразу ж будуть передані на <a title="Методи API" href="http://vkontakte.ru/developers.php?o=-1&amp;p=%CE%EF%E8%F1%E0%ED%E8%E5%20%EC%E5%F2%EE%E4%EE%E2%20API">АПІ Вконтакті</a>. Як ви побачите по ссилці, то вконтактє трошки негарно розділяють методи АПІ, а саме через «.» (точку). В випадку сабжової ліби треба замість точки ставити _, він потім сам намутиться в точку.</p>
<p>Бібліотека власне <a title="на гітхаб!" href="https://github.com/Xobb/kohana-vkapi">хоститься тут</a>. Нехай щастить при використанні.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xobb.me/2011/08/vkontakte-api-and-kohana/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Переїхав на ліноду</title>
		<link>http://blog.xobb.me/2011/08/%d0%bf%d0%b5%d1%80%d0%b5%d1%97%d1%85%d0%b0%d0%b2-%d0%bd%d0%b0-%d0%bb%d1%96%d0%bd%d0%be%d0%b4%d1%83/</link>
		<comments>http://blog.xobb.me/2011/08/%d0%bf%d0%b5%d1%80%d0%b5%d1%97%d1%85%d0%b0%d0%b2-%d0%bd%d0%b0-%d0%bb%d1%96%d0%bd%d0%be%d0%b4%d1%83/#comments</comments>
		<pubDate>Sat, 20 Aug 2011 11:48:05 +0000</pubDate>
		<dc:creator>Paul Chubatyy</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.xobb.me/?p=603</guid>
		<description><![CDATA[Пацанчіки, карочє снявся я на свою ліноду. Всьотаки всюда добре, але вдома найкраще. Ще не рішив чи дійсно поміняється урл на поточний, поки чекаю поки на мене перекинуть мого старого домена. Вот. На ліноді в мене тут нема місця жручим пам’ять тоннами апачам, гарненький собі стоїть nginx і всьо хвацько роздає. Так шо нармалди, будемо [...]]]></description>
			<content:encoded><![CDATA[<p>Пацанчіки, карочє снявся я на свою ліноду. Всьотаки всюда добре, але вдома найкраще. Ще не рішив чи дійсно поміняється урл на поточний, поки чекаю поки на мене перекинуть мого старого домена. Вот.</p>
<p>На ліноді в мене тут нема місця жручим пам’ять тоннами апачам, гарненький собі стоїть nginx і всьо хвацько роздає. Так шо нармалди, будемо надіятись шо це все запрацує трошки швидше. Такий позитивний пост хочеться розбативи кусочком музики, яка вот буквально шойно підвернулась в інтернетах. Встрічайте, <strong>Ляпіс Трубєцкой</strong> з пісньою про добро і всяке всьо:</p>
<p><a href="http://blog.xobb.me/2011/08/%d0%bf%d0%b5%d1%80%d0%b5%d1%97%d1%85%d0%b0%d0%b2-%d0%bd%d0%b0-%d0%bb%d1%96%d0%bd%d0%be%d0%b4%d1%83/"><em>Click here to view the embedded video.</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xobb.me/2011/08/%d0%bf%d0%b5%d1%80%d0%b5%d1%97%d1%85%d0%b0%d0%b2-%d0%bd%d0%b0-%d0%bb%d1%96%d0%bd%d0%be%d0%b4%d1%83/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Сортування кирилиці в MongoDB</title>
		<link>http://blog.xobb.me/2011/07/%d1%81%d0%be%d1%80%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%ba%d0%b8%d1%80%d0%b8%d0%bb%d0%b8%d1%86%d1%96-%d0%b2-mongodb/</link>
		<comments>http://blog.xobb.me/2011/07/%d1%81%d0%be%d1%80%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%ba%d0%b8%d1%80%d0%b8%d0%bb%d0%b8%d1%86%d1%96-%d0%b2-mongodb/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 19:26:30 +0000</pubDate>
		<dc:creator>Paul Chubatyy</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[cyrillic]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://xobb.citylance.biz/?p=579</guid>
		<description><![CDATA[Карочє така штука. Якось на днях спиздив таблицю міст і областей України звідси. Не думаю шо комусь буде цікаво як я то парсив, бо це доволі елементарна задача. Вот шо сталось далі це вже буде власне темою статті. Засунув я собі список міст і областей в MongoDB. Тепер хочу час від часу витягувати списки то [...]]]></description>
			<content:encoded><![CDATA[<p>Карочє така штука. Якось на днях спиздив таблицю міст і областей України <a title="Список міст і областей на вікіпедії" href="http://uk.wikipedia.org/wiki/%D0%9C%D1%96%D1%81%D1%82%D0%B0_%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D0%B8_(%D0%B2_%D0%B0%D0%BB%D1%84%D0%B0%D0%B2%D1%96%D1%82%D0%BD%D0%BE%D0%BC%D1%83_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D1%83)">звідси</a>. Не думаю шо комусь буде цікаво як я то парсив, бо це доволі елементарна задача. Вот шо сталось далі це вже буде власне темою статті. Засунув я собі список міст і областей в MongoDB. Тепер хочу час від часу витягувати списки то міст, то областей (такі в мене дурацькі прихоті), але посортовані по алфавіту. Запросєц получається наступним:</p>
<p><code>db.regions.find().sort({'name': 1});</code></p>
<p>де <em>name</em> — відповідно ім’я області. По крайній мірі так пише <a title="Сортування і природній порядок записів в MongoDB" href="http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order">офіційна дока MongoDB на тему сортування</a>. І тут відбуваються чудеса. Виглядає так, шо кириличні символи сказились і я отримую список областей в наступній послідовності:</p>
<ol>
<li>Івано-Франківська область</li>
<li>Автономна Республіка Крим</li>
<li>Волинська область</li>
<li>&#8230;. тут все як положено&#8230;</li>
<li>Чернігівська область</li>
<li>м. Київ, міськрада</li>
<li>м. Севастополь, міськрада</li>
</ol>
<p>Ну тобто всьо вроді правильно, спочатку великі літери, потім маленькі. Але шо Івано-Франківська область робить з самого початку. Ця штука мене харить дуже сильно, ще на телефонах Нокія (по крайній мірі в мене тільки Нокії були, то і про них говорю) теж буква «І» попереду букви «А».</p>
<p>Я підозрюю, що українську «і» замінюють на відповідну букву в латиниці, проте чого ж тобі не замінюють «а», і інші схожі букви? Якщо хтось знає чому така штука відбувається — запрошую в коментарі, напишіть як це рішається і кого за це треба погладити по розумній головці.</p>
<p>А я поки рішатиму задачу наступним чином: зроблю додаткове поле sort_order (це не просто два слова, які стосуються до сортування, а переклад на англійську словосполучення «порядок сортування»), в якому цілими числами розставлю собі порядок, в якому я хочу сортувати сутності. Це буде безмежно круто, бо в майбутньому я зможу собі їх змінювати як захочу.</p>
<p>Такі діла. А взагальному я дуже приємно здивований з MongoDB.</p>
<p>P.S.: не я один такий недовольний. <a title="Server-1920" href="https://jira.mongodb.org/browse/SERVER-1920">Бага в джирі</a> монго.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xobb.me/2011/07/%d1%81%d0%be%d1%80%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%ba%d0%b8%d1%80%d0%b8%d0%bb%d0%b8%d1%86%d1%96-%d0%b2-mongodb/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Запам’ятай собі цей день нахуй</title>
		<link>http://blog.xobb.me/2011/05/%d0%b7%d0%b0%d0%bf%d0%b0%d0%bc%e2%80%99%d1%8f%d1%82%d0%b0%d0%b9-%d1%81%d0%be%d0%b1%d1%96-%d1%86%d0%b5%d0%b9-%d0%b4%d0%b5%d0%bd%d1%8c-%d0%bd%d0%b0%d1%85%d1%83%d0%b9/</link>
		<comments>http://blog.xobb.me/2011/05/%d0%b7%d0%b0%d0%bf%d0%b0%d0%bc%e2%80%99%d1%8f%d1%82%d0%b0%d0%b9-%d1%81%d0%be%d0%b1%d1%96-%d1%86%d0%b5%d0%b9-%d0%b4%d0%b5%d0%bd%d1%8c-%d0%bd%d0%b0%d1%85%d1%83%d0%b9/#comments</comments>
		<pubDate>Tue, 10 May 2011 17:26:58 +0000</pubDate>
		<dc:creator>Paul Chubatyy</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://xobb.citylance.biz/?p=540</guid>
		<description><![CDATA[Нікагда, нікагда, сука, не забувай: git svn fetch Дістане з svn репозиторію нові бранчі. Також, якщо ще колись інтегруватимеш фейсбук на чиїсть блядські сайти — читай це.]]></description>
			<content:encoded><![CDATA[<p>Нікагда, нікагда, сука, не забувай:</p>
<blockquote><p>git svn fetch</p></blockquote>
<p>Дістане з svn репозиторію нові бранчі.</p>
<p>Також, якщо ще колись інтегруватимеш фейсбук на чиїсть блядські сайти — <a title="стаковерфлоу" href="http://stackoverflow.com/questions/4679610/why-fb-getloginstatus-doesnt-work-in-ie7">читай це</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xobb.me/2011/05/%d0%b7%d0%b0%d0%bf%d0%b0%d0%bc%e2%80%99%d1%8f%d1%82%d0%b0%d0%b9-%d1%81%d0%be%d0%b1%d1%96-%d1%86%d0%b5%d0%b9-%d0%b4%d0%b5%d0%bd%d1%8c-%d0%bd%d0%b0%d1%85%d1%83%d0%b9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Знову маджента</title>
		<link>http://blog.xobb.me/2011/04/%d0%b7%d0%bd%d0%be%d0%b2%d1%83-%d0%bc%d0%b0%d0%b4%d0%b6%d0%b5%d0%bd%d1%82%d0%b0/</link>
		<comments>http://blog.xobb.me/2011/04/%d0%b7%d0%bd%d0%be%d0%b2%d1%83-%d0%bc%d0%b0%d0%b4%d0%b6%d0%b5%d0%bd%d1%82%d0%b0/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 18:55:08 +0000</pubDate>
		<dc:creator>Paul Chubatyy</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[magento]]></category>

		<guid isPermaLink="false">http://xobb.citylance.biz/?p=524</guid>
		<description><![CDATA[Вкотре по долгу служби приходиться працювати з мадженто. Переконуюсь в хорошій реалізації неймспейсів срєдствами php5.2, звісно в 5.3 вони вже як то кажуть іскаропкі, але тут. Ну молодці вобщєм. Шо би такого розказати вам за мадженто? А, вот. API в них є. Soap або XML-RPC. Звісно не кошерно, був би REST всьо би було па [...]]]></description>
			<content:encoded><![CDATA[<p>Вкотре по долгу служби приходиться працювати з мадженто. Переконуюсь в хорошій реалізації неймспейсів срєдствами php5.2, звісно в 5.3 вони вже як то кажуть іскаропкі, але тут. Ну молодці вобщєм.</p>
<p>Шо би такого розказати вам за мадженто? А, вот. API в них є. Soap або XML-RPC. Звісно не кошерно, був би REST всьо би було па другому, але тут і це канає. Так ось, є кастомні модулі і їм теж потрібно дати API. Реалізується це напрочуд легко. Добавляєте свою api.xml в etc каталог модуля, переопреділяєте назви методів і вуалля. Мадженто дає вам можливість мапити API calls одразу на методи моделі. Звісно для цього потрібно створити окрему модель, бо якщо ви хочете мапити на реальні моделі, то це буде накладно. Детальніше нема сил розказувати. Хіба якось потім.</p>
<p>Також хочу зауважити, шо працюю з Enterprise версією мадженто (да-да, баблисто і жирно, доступ до самого коду коштує 10кілодоларів в рік). Enterprise фічі не дуже здивували і порадували, при достатній підготовці їх неважко накатати на звичайне Community edition. Потішило сильно тільки ахтоматична генерація CrossSells і подібних продуктів. Ну це таке.</p>
<p>Вобщєм, дякуємо українським розробникам (і мабуть не тільки українським) за хороший продукт.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xobb.me/2011/04/%d0%b7%d0%bd%d0%be%d0%b2%d1%83-%d0%bc%d0%b0%d0%b4%d0%b6%d0%b5%d0%bd%d1%82%d0%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>За програмізм</title>
		<link>http://blog.xobb.me/2011/04/%d0%b7%d0%b0-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d1%96%d0%b7%d0%bc/</link>
		<comments>http://blog.xobb.me/2011/04/%d0%b7%d0%b0-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d1%96%d0%b7%d0%bc/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 20:55:04 +0000</pubDate>
		<dc:creator>Paul Chubatyy</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[web dev]]></category>

		<guid isPermaLink="false">http://xobb.citylance.biz/?p=517</guid>
		<description><![CDATA[Вперше з моменту переїзду до Львова зайнявся програмуванням для душі. Вроді і результати непогані. Привєт гітхаб, я знаю шо ти чекаєш платіж за цей місяць, але дай менудку, в банк забіжу і одразу буде заплачено, абіцяю. А так поки храни в моїх приватних репозиторіях ті коміти, шо я сьогодні відправив, не будь жлобом.]]></description>
			<content:encoded><![CDATA[<p>Вперше з моменту переїзду до Львова зайнявся програмуванням для душі. Вроді і результати непогані. Привєт гітхаб, я знаю шо ти чекаєш платіж за цей місяць, але дай менудку, в банк забіжу і одразу буде заплачено, абіцяю. А так поки храни в моїх приватних репозиторіях ті коміти, шо я сьогодні відправив, не будь жлобом.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xobb.me/2011/04/%d0%b7%d0%b0-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d1%96%d0%b7%d0%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Апдейт Вордпресса</title>
		<link>http://blog.xobb.me/2011/02/%d0%b0%d0%bf%d0%b4%d0%b5%d0%b9%d1%82-%d0%b2%d0%be%d1%80%d0%b4%d0%bf%d1%80%d0%b5%d1%81%d1%81%d0%b0/</link>
		<comments>http://blog.xobb.me/2011/02/%d0%b0%d0%bf%d0%b4%d0%b5%d0%b9%d1%82-%d0%b2%d0%be%d1%80%d0%b4%d0%bf%d1%80%d0%b5%d1%81%d1%81%d0%b0/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 19:51:49 +0000</pubDate>
		<dc:creator>Paul Chubatyy</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://xobb.citylance.biz/?p=472</guid>
		<description><![CDATA[Недавно мав нагоду апдейтити вордпресс. Цей апдейт трішки відрізнявся від звичного для апдейта для користувача вордпрессу. По-перше, мені прийшлось апдейтити декілька інстансів одразу. По-друге, версія вордпресу, яка потребувала оновлення трошки не сходиться з офіційною. Так-так, ми на роботі такі погані хлопці, патчимо своїми злими патчами вордпресс, а шо робити. Але ж обновлятись то хочеться, нє? [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-477" title="Лого ВордПресса" src="http://xobb.citylance.biz/wp-content/uploads/2011/02/WordPress-logo-566x234.jpg" alt="" width="566" height="234" /></p>
<p>Недавно мав нагоду апдейтити вордпресс. Цей апдейт трішки відрізнявся від звичного для апдейта для користувача вордпрессу. По-перше, мені прийшлось апдейтити декілька інстансів одразу. По-друге, версія вордпресу, яка потребувала оновлення трошки не сходиться з офіційною. Так-так, ми на роботі такі погані хлопці, патчимо своїми злими патчами вордпресс, а шо робити. Але ж обновлятись то хочеться, нє? Добре, що патчів небагато. Кому цікаво програмістські будні, то читаєм дальше.</p>
<p><span id="more-472"></span>Перш за все, потрібно відмітити, що якщо ви використовуєте Subversion для контролю версій то ви в сраці, такий фокус провернути буде дуже неможливо, так дуже неможливо, що я навіть не знаю як це зробити. Але так як ми круті пацани і використовуємо давно git, то біди в нас зовсім немає. Вордпресс, як і багато інших популярних продуктів, мають свої git дзеркала svn репозиторіїв, де видно комміти, бранчі і взагалі все-все-все, тільки з зручним для користувача git інтерфейсом доступу. Один з таких знаходиться на <a title="Дзеркало вордпресс на GitHub зі всіма потрохами" href="https://github.com/mattrude/wordpress">GitHub</a> (<a title="Я його люблю!" href="https://github.com/mattrude">чуваче</a>, ти спаситель і сохранитель, дякую тобі безмежно). Отож допустим, що в нас є свій репозиторій з Вордпрессом. Більше того, він взятий розумно з гіт дзеркала наведеного вище. Наш <strong>master </strong>звісно не збігається з master дзеркала, там куча своїх комітів і взагалі свій зовсім мастер. Робимо наступне, а потім вам поясню:</p>
<script type='text/javascript' src='https://gist.github.com/845278.js?file=merge1.sh'></script>
<p>Спочатку ми добавили дзеркало до своїх ремоутів, а потім створили гілочку integration, туда змерджили апдейтнутий ВордПресс з дзеркала, розрезолвили всі конфлікти, які появились (мабуть у вас вони теж появились, проте цей крок пропущено, мерджити конфлікти вміють навіть самі затянуті svnщики, більше того, вони це добре вміють, бо за тиждень до мерджа серйозної гілки моляться і роблять жертвоприношення). Коли все змерджили звісно потрібно потестувати. Потестували? Нє, я останній раз питаю, точно потестували? Тоді далі все просто:</p>
<script type='text/javascript' src='https://gist.github.com/845278.js?file=rebase.sh'></script>
<p>Це прокатає всі комміти, з гілки integration в master. На цьому наш маленький урок закінчився. Такі діла, гарного вечора.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xobb.me/2011/02/%d0%b0%d0%bf%d0%b4%d0%b5%d0%b9%d1%82-%d0%b2%d0%be%d1%80%d0%b4%d0%bf%d1%80%d0%b5%d1%81%d1%81%d0%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EAV</title>
		<link>http://blog.xobb.me/2010/12/eav/</link>
		<comments>http://blog.xobb.me/2010/12/eav/#comments</comments>
		<pubDate>Wed, 29 Dec 2010 22:24:42 +0000</pubDate>
		<dc:creator>Paul Chubatyy</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[data model]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[eav]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[orm]]></category>

		<guid isPermaLink="false">http://xobb.citylance.biz/?p=265</guid>
		<description><![CDATA[Давно хотів написати про EAV, Magento, реалізацію в Doctrine і решта, але всьо якось не вистачало часу, а коли стаття про EAV на techportal підштовхнула до дій попалась до рук MongoDB і я забив. Рекомендую, завісімасті нікакой.]]></description>
			<content:encoded><![CDATA[<p>Давно хотів написати про EAV, Magento, реалізацію в Doctrine і решта, але всьо якось не вистачало часу, а коли <a title="The EAV data model" href="http://techportal.ibuildings.com/2010/10/21/the-eav-data-model">стаття про EAV на techportal</a> підштовхнула до дій попалась до рук MongoDB і я забив. Рекомендую, завісімасті нікакой.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xobb.me/2010/12/eav/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mongodb, ubuntu, php. треба це все поставити.</title>
		<link>http://blog.xobb.me/2010/11/mongodb-ubuntu-php-%d1%82%d1%80%d0%b5%d0%b1%d0%b0-%d1%86%d0%b5-%d0%b2%d1%81%d0%b5-%d0%bf%d0%be%d1%81%d1%82%d0%b0%d0%b2%d0%b8%d1%82%d0%b8/</link>
		<comments>http://blog.xobb.me/2010/11/mongodb-ubuntu-php-%d1%82%d1%80%d0%b5%d0%b1%d0%b0-%d1%86%d0%b5-%d0%b2%d1%81%d0%b5-%d0%bf%d0%be%d1%81%d1%82%d0%b0%d0%b2%d0%b8%d1%82%d0%b8/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 22:30:41 +0000</pubDate>
		<dc:creator>Paul Chubatyy</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[mongodb]]></category>

		<guid isPermaLink="false">http://xobb.citylance.biz/?p=398</guid>
		<description><![CDATA[Прийшов час використовувати щось гнучкіше, чим MySQL і вибір впав на MongoDB. Ставиться на Убунті (та й Дебіані) дуже просто: sudo apt-get install php5-pear libcurl3-ssl-dev php5-dev mongodb Тепер треба поставити pecl extension для підключення mongodb адаптора до php: sudo pecl install -Z mongo Параметр -Z приходиться добавляти з Убунти 10.04 здається. Гіркий досвід роботи з [...]]]></description>
			<content:encoded><![CDATA[<p>Прийшов час використовувати щось гнучкіше, чим MySQL і вибір впав на MongoDB. Ставиться на Убунті (та й Дебіані) дуже просто:</p>
<blockquote>
<pre>sudo apt-get install php5-pear libcurl3-ssl-dev php5-dev mongodb</pre>
</blockquote>
<p>Тепер треба поставити pecl extension для підключення mongodb адаптора до php:</p>
<blockquote>
<pre>sudo pecl install -Z mongo</pre>
</blockquote>
<p>Параметр -Z приходиться добавляти з Убунти 10.04 здається. Гіркий досвід роботи з Magento і його розширеннями. Власне раді цього вся стаття. Ну а тепер стрічку</p>
<blockquote>
<pre>extension=mongo.so</pre>
</blockquote>
<p>Потрібно додати в php.ini. Готовченко.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xobb.me/2010/11/mongodb-ubuntu-php-%d1%82%d1%80%d0%b5%d0%b1%d0%b0-%d1%86%d0%b5-%d0%b2%d1%81%d0%b5-%d0%bf%d0%be%d1%81%d1%82%d0%b0%d0%b2%d0%b8%d1%82%d0%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Горизонтальне масштабування веб додатків з HMVC</title>
		<link>http://blog.xobb.me/2010/11/%d0%b3%d0%be%d1%80%d0%b8%d0%b7%d0%be%d0%bd%d1%82%d0%b0%d0%bb%d1%8c%d0%bd%d0%b5-%d0%bc%d0%b0%d1%81%d1%88%d1%82%d0%b0%d0%b1%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%b2%d0%b5%d0%b1-%d0%b4%d0%be%d0%b4/</link>
		<comments>http://blog.xobb.me/2010/11/%d0%b3%d0%be%d1%80%d0%b8%d0%b7%d0%be%d0%bd%d1%82%d0%b0%d0%bb%d1%8c%d0%bd%d0%b5-%d0%bc%d0%b0%d1%81%d1%88%d1%82%d0%b0%d0%b1%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%b2%d0%b5%d0%b1-%d0%b4%d0%be%d0%b4/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 14:48:24 +0000</pubDate>
		<dc:creator>Paul Chubatyy</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[hmvc]]></category>
		<category><![CDATA[kohana]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[programming pattern]]></category>
		<category><![CDATA[web dev]]></category>

		<guid isPermaLink="false">http://xobb.citylance.biz/?p=354</guid>
		<description><![CDATA[Це переклад статті Scaling Web Applications with HMVC на techportal.ibuildings.com від Sam de Freyssinet. Останню декаду ми були свідками другої ітерації веб розробки і дизайну. Веб сайти перетворились у веб додатки і рідко тепер зустрінеш новий веб проект, який би не включав в себе деякий елемент інтерактивності. Зростаюча складність програмного забезпечення для веб змушує розробників більше [...]]]></description>
			<content:encoded><![CDATA[<p style="padding-left: 30px;">Це переклад статті <a title="Scaling Web Applications with HMVC" href="http://techportal.ibuildings.com/2010/02/22/scaling-web-applications-with-hmvc/">Scaling Web Applications with HMVC на techportal.ibuildings.com</a> від <a title="@ github" href="https://github.com/samsoir">Sam de Freyssinet</a>.</p>
<p>Останню декаду ми були свідками другої ітерації веб розробки і дизайну. Веб сайти перетворились у веб додатки і рідко тепер зустрінеш новий веб проект, який би не включав в себе деякий елемент інтерактивності. Зростаюча складність програмного забезпечення для веб змушує розробників більше часу приділяти структуризації і проектуванню продуктів.</p>
<p>Та ж зростаюча складність стимулює сучасні програмні розробки опиратись на виділені сервіси для виконання завдань, які потребують багато процесорного часу. Більше того, запровадження хмаркових сервісів від Amazon, Google та інших дозволяє розробникам порівнянно зменшити навантаження процесорів на власних серверах. Кожен сервіс зазвичай проектується як окрема частина програмного рішення, що виконується на власному домені з власними ресурсами.</p>
<p>Набагато важче переконати замовника використовувати більше ніж одну частину програмного рішення, особливо коли працюєш з малими бюджетами. В цих ситуаціях я з’ясував, що багато клієнтів не вважають масштабування проблемою. Вони &#8220;очікують&#8221; дня, коли масштабування стане проблемою.<span id="more-354"></span></p>
<p>Щоб зменшити початкові інвестиції, зазвичай вирішується розробляти сайт як єдиний програмний продукт, який включає в себе всю необхідну функціональність. Таке рішення призводить до проблем, якщо продукт стає популярним за короткий проміжок часу (в мене особисто є неприємний досвід рефакторингу існуючого коду, який не масштабувався). Також подібний підхід може погано відбитися в грошовому і часовому еквіваленті, коли доведеться змінювати архітектуру програми, яка не масштабувалась. В ідеальному світі програмні продукти повинні розвиватись органічно і без одноразових вливань великих сум в цьому процесі.</p>
<p>Найпопулярнішим паттерном на даний момент, мабуть, є паттерн MVC , який асоцієються з розробкою веб додатків на усіх платформах.</p>
<h3>Паттерн HMVC</h3>
<div id="attachment_356" class="wp-caption aligncenter" style="width: 732px"><a href="http://xobb.citylance.biz/wp-content/uploads/MVC-HMVC.png"><img class="size-full wp-image-356" title="MVC-HMVC" src="http://xobb.citylance.biz/wp-content/uploads/MVC-HMVC.png" alt="Порівняння MVC та HMVC" width="722" height="486" /></a><p class="wp-caption-text">MVC та HMVC</p></div>
<p>Паттерн HMVC являється прямим розширенням MVC, який вирішує багато проблем з масштабуванням, зазначених вище. Вперше згадка про HMVC паттерн датується липнем 2000 року на сайті JavaWorld в статті <a href="http://www.javaworld.com/javaworld/jw-07-2000/jw-0721-hmvc.html">HMVC: The layered pattern for developing strong client tiers</a>. Велика частина статті зконцентрована на перевагах використання HMVC для графічного інтерфейсу користувача. Також зустрічаються натяки, що автори власне заново інтепретували паттерн Presentaion-Abstraction-Control (PAC), описаний в 1987 році. Стаття на JavaWorld наводить детальні пояснення того, як HMVC може допомогти при проектуванні десктопних програм з графічним користувацьким інтерфейсом. В цій статті ми зосередимось на тому, як HMVC може використовуватись для створення веб додатків, що легко масштабуються.</p>
<p>HMVC складається з колекції традиційних MVC тріад, які оперують як один додаток. Кожна тріада повністю незалежна і може виконуватись без наявності будь-якої іншої тріади. Всі запити до тріад повинні виконуватись через інтерфейс контроллера, ніколи не завантажуючи моделі чи бібліотеки поза власним доменом. Фізичне розташування тріад в хостинговому середовищі не важливе, поки тріада доступна з усіх інших частин системи. Відмінності HMVC заохочують до перевикористання існуючого коду, спрощення тестування відмінних частин системи, а також забезпечують легке вдосконалення і розширення системи.</p>
<p>Для успішного проектування додаку, що реалізовує HMVC паттерн, критичним є поділ функцій на системи. Кожна з систем буде однією MVC тріадою всередині більшої HMVC програми, незалежно управляючи методами презентації і збереження інформації. На данний час небагато фреймворків мають підтримку HMVC без додаткових розширень або використовують для цього непридатний Фронт Контроллер. <a title="Kohana 3.0" href="http://kohanaframework.org/">Kohana PHP версії 3</a> — фреймворк, що спроектований одразу з підтримкою HMVC в ядрі. Я буду використовувати Kohana 3 для усіх прикладів коду в даній статті.</p>
<p>Kohana 3 використовує об’єкт Request для виклику контроллерів. Запити можуть бути як внутрішніми (до контроллерів додаку), так і зовнішніми (до веб сервісів з прозорим використанням одного і того ж класу Request<sup>[<a href="#note1">1</a>])</sup>. При масштабуванні MVC тріади потрібно змінити тільки один параметр запиту.</p>
<p><script src="https://gist.github.com/703325.js?file=default.php"></script> Внутрішній запит потребує правильного маршруту, що вказує на контролер і дію. Створення запиту до зовнішнього ресурсу відрізняється тільки наданням повного URL до нього. Ця функціональність дозволяє швидко змінювати внутрішні на зовнішні запити і навпаки, забезпечуючи легке масштабування.  Використання класу Request в Kohana для отримання інформації з внутрішніх контроллерів може здатись подібним до форвардингу дій в інших фреймворках, таких як Zend. В дійсності ці два методи доволі різні. Request в Kohana має здатність оперувати особливі запити в ізоляції. Форвардинг дій функціонує іншим чином: кожна дія контроллера існує в рамках основного запиту. Наступний приклад демонструє це:  <script src="https://gist.github.com/703325.js?file=default2.php"></script><br />
<script src="https://gist.github.com/703325.js?file=log.php"></script> Наведений приклад демонструє незалежність, що надає об’єкт Request. Початковий HTTP GET запит викликає контроллер <em>Default</em> дію <em>index</em>, який в свою чергу викликає POST запит до контроллера <em>Log</em> дії <em>access</em>. Дія <em>index </em>встановлює три POST змінні, які не доступні в глобальній змінній $_POST першого контроллера. Коли виконується другий запит, $_POST містить в собі змінні, надані попереднім кроком. Зверніть увагу, як після виконання <em>$log-&gt;execute(); </em>зникають $_POST змінні в основному контроллері. Для таких динамічних інтеракцій в інших фреймворках потрібно використовувати новий інструмент для запитів, як наприклад cUrl.</p>
<h3>Gazouillement, сервіс статусів</h3>
<p>Для демонстрації потужностей Ієрархічного MVC давайте подивимось на приклад гіпотетичного сервісу оновлення статусів, який працює подібно до Twitter. <em>Gazouillement </em>спроектовано навколо сервісно орієнтованої архітектури (SOA) для забезпечення відокремленості двигунів повідомлень і відношень від веб інтерфейсу.</p>
<div id="attachment_369" class="wp-caption aligncenter" style="width: 531px"><a href="http://xobb.citylance.biz/wp-content/uploads/gazouillement.png"><img class="size-full wp-image-369" title="Gazouillement" src="http://xobb.citylance.biz/wp-content/uploads/gazouillement.png" alt="Сервіс подібний до Twitter" width="521" height="674" /></a><p class="wp-caption-text">Схема роботи сервісу </p></div>
<p> </p>
<p>Трафік до сервера буде відносно малим спочатку. Сервіс новий і публіка не здогадується про його інсування. Тому зараз безпечно виконувати всю логіку додатку на одному сервері.  Давайте реалізуємо контроллер для відображення домашньої сторінки користувача. На цій сторінці будуть видно останні статусні повідомлення користувача і людей, за якими слідкує користувач.</p>
<p><script src="https://gist.github.com/703325.js?file=index.php"></script></p>
<p>Тепер розглянемо що ж робить <em>Controller_Index::action_index(). </em>Спочатку дія пробує завантажити користувача посилаючись на параметр <em>user, </em>що наданий в URL. Якщо користувача не існує, то відображається 404 сторінка. Новий запит за повідомленнями створюється з використанням імені користувача як значення параметру в URI запиту і просячи про відповідь у xhtml форматі. Інший запит виконується подібним чином, знову ж в xhtml форматі. По закінченню цих запитів об’єкт View створюється з значеннями користувача, повідомлень і зв’язків.</p>
<p>Так як існуючі повідомлення і зв’язки завантажуються через новий запит, цілісна логіка додатку залишається абстрактною не прив’язуючись до веб сайту. Ця архітектура надає дві значних переваги над традиційним виконанням контроллера:</p>
<ol>
<li>Жодна частина логіки сервісу повідомлень не стосується контроллера. Контроллер тільки просить повернути результат виконання в xhtml форматі. Ніяких додаткових бібліотек або розширень не було завантажено під час виконання контроллера.</li>
<li>Кожен контроллер відповідальний за одну конкретну задачу, забезпечуючи значно легше написання unit тестів для контроллера.</li>
</ol>
<p>Через абстракцію прикладу, який ми щойно продемонстрували, неможливо побачити що ж ці сервіси насправді роблять. Тому давайте розглянемо контроллер сервісу повідомлен, починаючи з маршрута, що зазначений в <em>bootstrap.php </em>для внутрішньої обробки запитів до повідомлень. <a title="Підручник по маршрутам" href="http://v3.kohanaphp.com/guide/tutorials.urls">Клас Маршрута в Kohana</a> займається обробкою внутрішніх URI, визначаючи елементи URI згідно з параметрами контролера і дії.</p>
<p><script src="https://gist.github.com/703325.js?file=bootstrap.php"></script> Так встановлюється маршрут до сервісу повідомлень, що в даний час знаходиться в домені головного додатку. URI запиту до <em>messages/find/samsoir.xhtml </em>буде направлене на контроллер <em>Messages, </em>дію <em>Find</em> з параметрами &#8216;<em>user&#8217; =&gt; &#8216;samsoir&#8217;, format =&gt; &#8216;.xhtml&#8217;</em>.  <script src="https://gist.github.com/703325.js?file=messages.php"></script></p>
<p>Детальний процес отримання повідомлень користувача показано в контроллері <em>Controller_Messages</em>. Всі методи і властивості стосуються виключно контексту повідомлень, включаючи зв’язок з користувачем. Давайте покроково проаналізуємо код контроллера повідомлень для розуміння що ж відбувається.</p>
<p>Об’єкт Request викликає метод <em>before()</em> перед зазначеною дією. Це дозволяє вставити код, який буде виконано перед будь-якою дією, нормалізуючи загальні задачі контроллера. Метод <em>before()</em> спочатку перевіряє, чи підтримується наведений формат, після чого валідує дані користувача. Припустимо, що <em>before()</em> виконався без Exceptions, тоді об’єкт Request викликає дію <em>find()</em>. <em>find() </em>завантажує повідомлення користувача з бази даних перетворюючи їх в об’єкт <em>Model_Iterator. </em>Важливо зазначити, що об’єкт ітератора буде порожнім, якщо в користувача не знайшлось жодного повідомлення. Нарешті ітератор повідомлень передано до метода парсингу <em>prepare_response()</em>, що форматує інформацію на вивід і встановлює заголовки згідно до зазначеного формату.</p>
<p>Обидва контроллери <em>Controller_Index</em> і <em>Controller_Messages</em> виконались під час одного запиту до додатку, хоча кожен з контролерів не знав про існування інших. Будь-який розробник міг би прочитати цей код і зрозуміти, що і де виконується. Тут необхідно підкреслити ще одну з якісних відмінностей HMVC — мейнтейнебіліті.</p>
<p>Після завершення написання коду інших сервісів, директори компанії задоволені першою ітерацією розробки і дають зелене світло для розгортання сервісу для обмеженої бети. Через декілька тижнів програма повністю готова до використання. Наступні місяці відбуваються подальші покращення і оптимізації по усій архітектурі, так як клієнтська база неухильно зростає.</p>
<h3>Ефект Стівена Фрая</h3>
<p>Стівен Фрай (<a href="http://twitter.com/stephenfry">@stephenfry</a>) зараз один з найвідоміших користувачів Twitter, за яким слідкують понад 1.3 мілліона людей. В минулому, Стівен міг зносити веб сайти просто відправляючи посилання в повідомленні, що спричиняло DDoS атаку на сервер.</p>
<p><em>Gazouillement </em>ріс останні декілька місяців. Хоча час відклику більшості запитів виріс, він все ще вміщається в прийнятні норми. Потім користувач Twitter з кількістю фолловерів близькою до Стівена Фрая відправляє повідомлення, що містить в собі URL нашого <em>Gazouillement. </em>Наша система потрапляє в серйозні неприємності.</p>
<p>Першою проблемою буде обвал трафіку на сервер. Якщо раніше наша програма обробляла декілька сотень запитів за секунду, то тепер їй доведеться обробляти багато тисяч. Скоріш за все наш <em>Gazouillement </em>перевантажиться, впаде і потягне за собою увесь сервер. Очевидно додаток потребує оптимізації і вдосконалення для обробки такої кількості трафіку.</p>
<p>Аналіз коду для покращення швидкодії &#8211; далеко не просте завдання. Починати його потрібно з замірів і профайлингу. Щоб включити рідний профайлинг Kohana достатньо встановити в <em>bootstrap.php </em>наступну змінну:</p>
<p><script src="https://gist.github.com/703325.js?file=bootstrap2.php"></script> Також до виводу варто зачепити результати роботи профайлера. Це легко зробити в методі <em>after()</em> контроллера, забезпечуючи вивід профайлера на всі дії.  <script src="https://gist.github.com/703325.js?file=profiler.php"></script></p>
<p>Коли профайлинг включено, наступне буде додано до виводу усіх дій контроллера.</p>
<div id="attachment_370" class="wp-caption aligncenter" style="width: 310px"><a href="http://xobb.citylance.biz/wp-content/uploads/benchmark.png"><img class="size-medium wp-image-370" title="Тестування на швидкодію" src="http://xobb.citylance.biz/wp-content/uploads/benchmark-300x98.png" alt="результати" width="300" height="98" /></a><p class="wp-caption-text">Нажміть для деталей</p></div>
<p>Профайлера показує результати тестування по виконанню запиту, групуючи контексти фреймворку разом, включаючи інітіалізацію, запити, запити до бази даних та інші операції співставлені з виділенною пам’яттю і процесорним часом. Так як показується створення кожного запиту, знайти той запит, який більше всього забирає часу на виконання.</p>
<h3>Масштабування Gazouillement</h3>
<p>Аналіз швидкодії всього додатку Gazouillement показує, що отримання повідомлень — вузьке місце. Команда розробки рефакторить і оптимізує код тріади MVC, яка відповідає за повідомлення настільки, наскільки це можливо, але необхідні прибавки в швидкодії так і не досягаються. Після вичерпання опцій вертикального масштабування по збільшенню пам’яті та процесорів на сервері, директори компанії погоджуються масштабувати додаток починаючи з системи повідомлень.</p>
<p>В традиційному MVC додатку новий сервіс проектується, розробляється, проходить тестування і тільки потім розгортаться. Цей процес може зайняти тижні, а то й місяці, що потребує великих інвестицій. Власне це нова частина програмного продукту, яка буде інтегрована в <em>Gazouillement.</em></p>
<p>Ієрархічне MVC дозволяє створити новий сервіс з існуючої бази коду з мінімальними витратами часу. Всі взаємодії з сервісом повідомлень відбувались всередині основного контроллера, тому всі модифікації, що потрібно — запити по повідомлення. Сервіс повідомлень перенесено на окремий сервер і оптимізовано для взаємодії з базою даних. Цей сервер виконує виключно операції з повідомленнями, порівняно збільшуючи при цьому швидкодію всіх операцій.</p>
<p><script src="https://gist.github.com/703325.js?file=index2.php"></script></p>
<p>Код вище показує невелику зміну, що була потрібна <em>Controller_Index::action_index()</em>, що обслуговує публічний веб сайт. Замість відправки запиту на внутрішні контроллер і дію, запит відправляється на інший сервер, який працює на сабдомені http://messages.gazouillement.com/. Те, що б зазвичай виглядало як велика архітектурна перешкода, зараз стає маленькою зміною. Тестування, зв’язане з цією зміною порівняно менше, так як змінилось не багато коду.</p>
<p>Це тільки один з прикладів, як паттерн Ієрархічний MVC дозволяє розробникам проектувати веб рішення, що можуть масштабуватись як вертикально так і горизонтально з самого початку. Ми побачили, як працювати з об’єктом Request для отриманя правильної інформації через простий інтерфейс. Нарешті ми побачили, як традиційні MVC тріади можуть розширюватись і можемо з впевненістю сказати, що об’єкт Request в Kohana робить це масштабування доволі простим завданням. Ціна, закладена в масштабування програмного забезпечення, може бути порівняно малою через мінімальні зміни, що ощасливить директорів вашої компанії.</p>
<p>Для більшої інформації про Kohana PHP відвідайте <a title="Kohana framework" href="http://kohanaframework.org/">офіційний сайт</a>. <a title="Kohana documentation" href="http://kohanaframework.org/documentation">Документація</a> по Kohana. <a href="http://kohanaframework.org/download">Скачати</a> Kohana.</p>
<h3>Зноски</h3>
<ol>
<li>Згаданий клас Request, що використовується в прикладах, є частиною гілки ядра Kohana, що на даний момент знаходиться на стадії розробки. Ви можете знайти його <a title="Samsoir's fork of core" href="http://github.com/samsoir/core">у форці</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.xobb.me/2010/11/%d0%b3%d0%be%d1%80%d0%b8%d0%b7%d0%be%d0%bd%d1%82%d0%b0%d0%bb%d1%8c%d0%bd%d0%b5-%d0%bc%d0%b0%d1%81%d1%88%d1%82%d0%b0%d0%b1%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%b2%d0%b5%d0%b1-%d0%b4%d0%be%d0%b4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

