<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2russianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feed.lobach.info/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Лобач.info</title>
	
	<link>http://lobach.info</link>
	<description>Заметки LAMP-программиста о вебдеве и не только...</description>
	<lastBuildDate>Sat, 21 Apr 2012 22:44:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feed.lobach.info/lobach" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="lobach" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">lobach</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeed.lobach.info%2Flobach" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeed.lobach.info%2Flobach" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeed.lobach.info%2Flobach" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feed.lobach.info/lobach" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeed.lobach.info%2Flobach" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeed.lobach.info%2Flobach" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeed.lobach.info%2Flobach" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeed.lobach.info%2Flobach" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><item>
		<title>ZFConf 2012: впечатления участника</title>
		<link>http://lobach.info/events/zfconf-2012-report/</link>
		<comments>http://lobach.info/events/zfconf-2012-report/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 18:37:08 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[События]]></category>
		<category><![CDATA[zfconf]]></category>
		<category><![CDATA[конференция]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=217</guid>
		<description><![CDATA[Отчет о посещении конференции и собственных впечатлениях от неё. Кратко описал каждый доклад и организацию мероприятия в целом. <a href="http://lobach.info/events/zfconf-2012-report/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/yDIJzSvTpP2AVwvnXX-g1iVCh98/0/da"><img src="http://feedads.g.doubleclick.net/~a/yDIJzSvTpP2AVwvnXX-g1iVCh98/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yDIJzSvTpP2AVwvnXX-g1iVCh98/1/da"><img src="http://feedads.g.doubleclick.net/~a/yDIJzSvTpP2AVwvnXX-g1iVCh98/1/di" border="0" ismap="true"></img></a></p><p>Только что вернулся с конференции ZFConf 2012. Пока свежи воспоминания решил записать их в блоге.</p>
<p>В этом году конференция проходила в Москве, поэтому я бы не простил себе, если бы пропустил её.</p>
<p>В начале опишу впечатления от организации. Я отдаю себе отчет, что возможности организаторов были ограничены. Именно по этому по большому счету крупных претензий не имею. Но что касается мелких&nbsp;&mdash; их есть у меня.</p>
<p>Я раньше не был на ZFConf, но был на других: на PHPConf, на MongoConf, на конференции Mailru и конференции Yandex-а. Мне есть с чем сравнивать.</p>
<p>Во-первых, меня удивило то, что при регистрации не выдавали бейджи. В общем мелочь, но несколько напрягает. Кажется, я был единственный с бейджем&nbsp;&mdash; я хотел, чтобы моим собеседникам не приходилось спрашивать как меня зовут и при желании легко получит мои контакты.</p>
<p>Во-вторых, пауза между докладами оставила неоднозначное впечатление. С одной стороны, это дает возможность пообщаться с докладчиком. С другой стороны, бывает сложно вклиниться со своим вопросом. В итоге, под давлением общественности ;) вернулись к варианту с секцией вопросов после доклада, но и сохранилась и пауза между докладами. на мой взгляд это наилучший вариант: есть возможность задать свой вопрос и есть возможность пообщаться с докладчиком.</p>
<p>С претензиями закончил, теперь впечатления от докладов.</p>
<p>Первым выступал Энрике из ZF Core Team. Рассказал про вторую версию ZF: что нового, с чего начать, как использовать новые компоненты. Нового для себя ничего не услышал, но было интересно. Зачет.</p>
<p>Следом за Энрике зажег Виктор Фараздаги с докладом о кодогенерации: что это, как и зачем. Описал существующие решения, рассказал про свое предложение для ZF2. Доклад был хорош, даже хотя бы по тому, что смог вдохновить меня как минимум на попытку использовать кодогенератоы. Зачет.</p>
<p>Третьим выступил известный в комьюнити Александр Веремьев. Темой доклада было описание использования встраиваемого SQL в проектах на php. Практической пользы никакой, ибо относится к IBM DB2, но раньше я про это не слышал.</p>
<p>За Веремьевым выступил Антон Великанов, рассказав про то, как ZF помог ему быстро прототипировать три свои стартап-проекта. Тема была заявлена гораздо громче, чем получившийся доклад. Антон описал процесс разработки (по сути используя методику waterfall), показал какие UML-диаграммы рисует и похвастался своими проектами. Крайне странный доклад на фоне остальных.</p>
<p>После обеда выступил Роман Лапин с рассказом о том, как использовать Capistrano для деплоймента своих ZF приложений. Было познавательно и интересно. Зачет.</p>
<p>Следующим был Алексей Качаев с рассказом о разработке распределенных приложений с использованием <a href="http://zero.mq">ZeroMQ</a>. Тема для меня животрепещущая и крайне интересная. Докладом остался доволен на все 100. Плюс обсуждение конкретики в кулуарах было отличным. Зачет, без вопросов.</p>
<p>Предпоследним докладчиком был Кирилл Чебунин. Он рассказал об управлении зависимостями в проектах на ZF2 с помощью Composer. Выступление было живым и весьма познавательным. Кирилл не только рассказал о самом продукте, но и поведал о собственной практике его использования, с обнаруженными проблемами и путях их решения. Зачет.</p>
<p>И завершил конференцию Евгений Шпилевский с докладом о компоненте ZF2 Zend\Cache. Первоначально этот доклад должен был читать Никита Грибалев, но за несколько дней до начала конференции докладчик сменился. На фоне предыдущих трех этот доклад выглядел бледновато: видимо, и смена выступающего сказалась, и сама тема была рассмотрена не слишком глубоко. Но в целом неплохо.</p>
<p>Резюмируя, впечатления от конференции остались вполне положительные. Кое-какую полезную информацию я получил. Организаторам и докладчикам большое спасибо за такое мероприятие.</p>
<p>После завершения конференции небольшим контингентом в 30 человек двинулись ближайший кабак и за кружечкой пива приятно и весело пообщались. Отлично посидели, жаль что мне пришлось довольно рано уйти.</p>
<p><strong>PS:</strong> Ребята, кому надо, могу поставить на вас ссылки. Присылайте, сделаю в лучшем виде ;)</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'ZFConf 2012: впечатления участника on Лобач.info',url: 'http://lobach.info/events/zfconf-2012-report/',contentID: 'post-217',suggestTags: 'zfconf,конференция',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/zfconf/" title="zfconf" rel="tag">zfconf</a>, <a href="http://lobach.info/tag/konferenciya/" title="конференция" rel="tag">конференция</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/zf/zfconf2011-registratio/" title="Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework (05.05.2011)">Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework</a> (0)</li>
	<li><a href="http://lobach.info/some/rit2008-second-day/" title="Отчет о втором дне РИТ-2008 (15.04.2008)">Отчет о втором дне РИТ-2008</a> (2)</li>
	<li><a href="http://lobach.info/develop/zf/registration-to-first-zend-framework-conference-open/" title="Открыта регистрация на первую Российскую конференцию посвященную Zend Framework (02.02.2010)">Открыта регистрация на первую Российскую конференцию посвященную Zend Framework</a> (0)</li>
	<li><a href="http://lobach.info/events/zfconf-2012/" title="Конференция для веб-разработчиков «ZFConf 2012» (13.04.2012)">Конференция для веб-разработчиков «ZFConf 2012»</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/zfconf-ukraine-2010/" title="Конференция ZFConf Ukraine &#038; MageConf. 27го ноября 2010, Киев (12.11.2010)">Конференция ZFConf Ukraine &#038; MageConf. 27го ноября 2010, Киев</a> (4)</li>
</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=p2VrNlmiiQY:UxZpFCipnG0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/events/zfconf-2012-report/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Конференция для веб-разработчиков «ZFConf 2012»</title>
		<link>http://lobach.info/events/zfconf-2012/</link>
		<comments>http://lobach.info/events/zfconf-2012/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 13:09:26 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[События]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[конференция]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=214</guid>
		<description><![CDATA[<img src="http://www.zfconf.ru/images/logos/zfconf/logo_habr_friends_20120329.jpg" width="192" height="139" style="float:left">Анонс предстоящей конференции для веб-разработчиков «ZFConf 2012» <a href="http://lobach.info/events/zfconf-2012/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/n6YEccOkFvTo8LRoWnSWu5GZjxw/0/da"><img src="http://feedads.g.doubleclick.net/~a/n6YEccOkFvTo8LRoWnSWu5GZjxw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/n6YEccOkFvTo8LRoWnSWu5GZjxw/1/da"><img src="http://feedads.g.doubleclick.net/~a/n6YEccOkFvTo8LRoWnSWu5GZjxw/1/di" border="0" ismap="true"></img></a></p><p><a href="http://www.zfconf.ru/" target="_blank"><img src="http://www.zfconf.ru/images/logos/zfconf/logo_habr_friends_20120329.jpg" width="192" height="139"></a></p>
<h2>21 апреля, Москва</h2>
<p><iframe width="420" height="315" src="http://www.youtube.com/embed/35RuvtFuOWw" frameborder="0" allowfullscreen></iframe></p>
<p>21 апреля в Москве пройдет очередная ежегодная конференция для веб-разработчиков ZFConf 2012, посвященная популярной платформе Zend Framework.</p>
<p>В этом году с докладом выступит гость из Италии — Enrico Zimuel из Zend Framework Core Team. А также Виктор Фараздаги, Александр Веремьев, Алексей Качаев и многие другие специалисты.</p>
<p>На сайте опубликован полный <a href="http://www.zfconf.ru/2012/talks/" target="_blank">список докладов</a> и открыта <a href="http://www.zfconf.ru/2012/registration/" target="_blank">регистрация</a>.</p>
<p><strong>Доклады</strong></p>
<ul>
<li><strong><a href="http://www.zfconf.ru/2012/talks/zend-framework-2-a-quick-start/" target="_blank">Zend Framework 2, a quick start</a><br />
</strong>Enrico Zimuel (<a href="http://www.zend.com/" target="_blank">Zend Technologies</a>, Zend Framework Core Team)</li>
<li><strong><a href="http://www.zfconf.ru/2012/talks/code-generation-and-scaffolding-in-zend-framework-2/" target="_blank">Code Generation и Scaffolding в Zend Framework 2</a><br />
</strong>Виктор Фараздаги (Simple Square, Senior Developer)</li>
<li><strong><a href="http://www.zfconf.ru/2012/talks/ibm-db2-embedded-sql-for-php-implementation/" target="_blank">Реализация доступа к СУБД IBM DB2 посредством встраиваемого SQL</a><br />
</strong>Александр Веремьев (Zend Framework contributor)</li>
<li><strong><a href="http://www.zfconf.ru/2012/talks/distributed-network-applications-with-zend-framework-2-and-zeromq/" target="_blank">Распределенные сетевые приложения c Zend Framework 2 и ZeroMQ</a><br />
</strong>Алексей Качаев (<a href="http://cogniance.com/" target="_blank">Сogniance</a>, Senior Software Engineer)</li>
<li><strong><a href="http://www.zfconf.ru/2012/talks/dependency-management-in-php-and-zend-framework-2/" target="_blank">Dependency Management в PHP и Zend Framework 2</a><br />
</strong>Кирилл Чебунин (<a href="http://www.creara.ru/" target="_blank">Creara</a>, Senior PHP Developer)</li>
<li><strong><a href="http://www.zfconf.ru/2012/talks/caching-without-misses-with-zend-framework-2/" target="_blank">Кеш без промахов средствами Zend Framework 2</a><br />
</strong>Никита Грибалев (<a href="http://www.nival.com/" target="_blank">Nival</a>, Lead PHP Developer)</li>
<li><strong><a href="http://www.zfconf.ru/2012/talks/architecture-design-implementation-and-organization-of-the-development-process-on-the-example-of-own-zend-framework-project/" target="_blank">Проектирование архитектуры, внедрение и организация процесса разработки на примере собственного проекта на основе ZF</a><br />
</strong>Антон Великанов (<a href="http://sandsign.ru/" target="_blank">Sand Sign</a>, Founder&amp;CEO)</li>
<li><strong><a href="http://www.zfconf.ru/2012/talks/capistrano-for-deployment-php-applications/" target="_blank">Capistrano для деплоймента PHP-приложений</a></strong><br />
Роман Лапин (<a href="http://evercodelab.com/" target="_blank">Evercode Lab</a>, Senior Developer)</li>
</ul>
<p>К участию также приглашаются <a href="http://www.zfconf.ru/2012/sponsors/" target="_blank">спонсоры</a> и инфопартнеры. По всем предложениям и вопросам пишите, пожалуйста, через <a href="http://www.zfconf.ru/contacts/" target="_blank">форму обратной связи</a>.</p>
<p><b>Следите за последними новостями:</b></p>
<ul>
<li><strong>Хабраблог:</strong> <a href="http://habr.ru/company/wizartech/blog/" target="_blank">habr.ru/company/wizartech/blog/</a>
<li><strong>Facebook:</strong> <a href="http://www.facebook.com/groups/143714275748061/" target="_blank">facebook.com/groups/143714275748061/</a>
<li><strong>ВКонтакте:</strong> <a href="http://vk.com/zfconf" target="_blank">vk.com/zfconf</a>
<li><strong>RSS:</strong> <a href="http://feeds.feedburner.com/zfconf" target="_blank">feeds.feedburner.com/zfconf</a>
<li><strong>Twitter:</strong> <a href="http://twitter.com/zfconf" target="_blank">twitter.com/zfconf</a>
</ul>
<p><strong>Организатор:</strong> <a href="http://www.wizartech.ru/" target="_blank">компания Wizartech</a><br />
<strong>Партнеры:</strong> <a href="http://zendframework.ru/" target="_blank">сообщество Zend Framework</a> и <a href="http://frameworksdays.com" target="_blank">конференция Frameworks Days</a></p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Конференция для веб-разработчиков «ZFConf 2012» on Лобач.info',url: 'http://lobach.info/events/zfconf-2012/',contentID: 'post-214',suggestTags: 'zend framework,конференция',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/zend-framework/" title="zend framework" rel="tag">zend framework</a>, <a href="http://lobach.info/tag/konferenciya/" title="конференция" rel="tag">конференция</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/zf/zfconf2011-registratio/" title="Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework (05.05.2011)">Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/registration-to-first-zend-framework-conference-open/" title="Открыта регистрация на первую Российскую конференцию посвященную Zend Framework (02.02.2010)">Открыта регистрация на первую Российскую конференцию посвященную Zend Framework</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/zfconf-ukraine-2010/" title="Конференция ZFConf Ukraine &#038; MageConf. 27го ноября 2010, Киев (12.11.2010)">Конференция ZFConf Ukraine &#038; MageConf. 27го ноября 2010, Киев</a> (4)</li>
	<li><a href="http://lobach.info/develop/zf/tips-zf18/" title="Хитрости ZF1.8 (04.05.2009)">Хитрости ZF1.8</a> (1)</li>
	<li><a href="http://lobach.info/develop/zf/creating-re-usable-zend_application-resource-plugins/" title="Создание повторно используемых плагинов ресурсов Zend_Application (08.02.2010)">Создание повторно используемых плагинов ресурсов Zend_Application</a> (13)</li>
</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=PwSy-pls5pc:mZiwpxeamYM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/events/zfconf-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git: разрешение конфликтов в бинарных файлах</title>
		<link>http://lobach.info/develop/git/resolving-git-conflict-with-binary-files/</link>
		<comments>http://lobach.info/develop/git/resolving-git-conflict-with-binary-files/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 10:23:53 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[контроль версий]]></category>
		<category><![CDATA[советы]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=210</guid>
		<description><![CDATA[Небольшая заметка о том, как разрешить конфликт в бинарных файлах при слиянии нескольких веток <a href="http://lobach.info/develop/git/resolving-git-conflict-with-binary-files/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/IdclxipTYe0emKIg7x34-LlbVFw/0/da"><img src="http://feedads.g.doubleclick.net/~a/IdclxipTYe0emKIg7x34-LlbVFw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/IdclxipTYe0emKIg7x34-LlbVFw/1/da"><img src="http://feedads.g.doubleclick.net/~a/IdclxipTYe0emKIg7x34-LlbVFw/1/di" border="0" ismap="true"></img></a></p><p>Чаще всего в проекте кроме кода есть бинарные файлы. И вполне вероятна ситуация, когда слияние двух веток завершается конфликтом в одном (или нескольких) из них. Есть простой способ разрешить такой конфликт.</p>
<p>Если нам нужно оставить версию из текущей ветки, то следует выполнить такую команду:</p>
<pre><code>git checkout --ours -- path/to/file.bin</code></pre>
<p>А если нужно заменить файл на версию из сливаемой ветки, то такую команду:</p>
<pre><code>git checkout --theirs -- path/to/file.bin</code></pre>
<p>Естественно, замените <code>path/to/file.bin</code> на путь к конфликтному файлу.</p>
<p>Кстати, вместо вышеприведенных команд можно извлечь файл из любой ветки и/или правки, а так же просто скопировав &laquo;поверх&raquo; другую версию файла средствами операционной системы. После этих манипуляций надо добавить файл в индекс, чтобы git включил его в комит:</p>
<pre><code>git add path/to/file.bin</code></pre>
<p>После чего завершаем слияние комитом:</p>
<pre><code>git commit</code></pre>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Git: разрешение конфликтов в бинарных файлах on Лобач.info',url: 'http://lobach.info/develop/git/resolving-git-conflict-with-binary-files/',contentID: 'post-210',suggestTags: 'Git,контроль версий,советы',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/git/" title="Git" rel="tag">Git</a>, <a href="http://lobach.info/tag/%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d1%8c-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b9/" title="контроль версий" rel="tag">контроль версий</a>, <a href="http://lobach.info/tag/%d1%81%d0%be%d0%b2%d0%b5%d1%82%d1%8b/" title="советы" rel="tag">советы</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/git/subtree-import/" title="Git: импорт части репозитория (25.11.2011)">Git: импорт части репозитория</a> (4)</li>
	<li><a href="http://lobach.info/develop/svn/svn-commit-tutorial/" title="Советы по фиксациям в SVN (16.04.2009)">Советы по фиксациям в SVN</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/tips-zf18/" title="Хитрости ZF1.8 (04.05.2009)">Хитрости ZF1.8</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/svn-links/" title="Снова про использование Subversion (29.02.2008)">Снова про использование Subversion</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/custom-zend_application-resources/" title="Пользовательские ресурсы для Zend_Application (13.01.2010)">Пользовательские ресурсы для Zend_Application</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=qbvVJyXLDoY:HuklQxebgoo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/git/resolving-git-conflict-with-binary-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git: импорт части репозитория</title>
		<link>http://lobach.info/develop/git/subtree-import/</link>
		<comments>http://lobach.info/develop/git/subtree-import/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 20:04:11 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[solution]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[контроль версий]]></category>
		<category><![CDATA[советы]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=204</guid>
		<description><![CDATA[Периодически возникает задача включить в свой репозиторий часть из другого репозитория. Чаще всего это нужно для подключения различных библиотек. Например, если хочется воспользоваться одним из компонентов ZendFramework-а, но нет желания включать весь проект. <a href="http://lobach.info/develop/git/subtree-import/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/kTnQNal-Df50nf0HlZHAdk0a-5E/0/da"><img src="http://feedads.g.doubleclick.net/~a/kTnQNal-Df50nf0HlZHAdk0a-5E/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/kTnQNal-Df50nf0HlZHAdk0a-5E/1/da"><img src="http://feedads.g.doubleclick.net/~a/kTnQNal-Df50nf0HlZHAdk0a-5E/1/di" border="0" ismap="true"></img></a></p><p><img src="http://lobach.info/wp-content/uploads/2011/11/git-logo.png" alt="" title="Git Logo" width="217" height="196" class="alignleft size-full wp-image-208" /> <em>Заметка из серии &laquo;чтобы не забыть&raquo; или &laquo;может пригодиться&raquo;.</em></p>
<p>Периодически возникает задача включить в свой репозиторий часть из другого репозитория. Чаще всего это нужно для подключения различных библиотек. Например, если хочется воспользоваться одним из компонентов ZendFramework-а, но нет желания включать весь проект.</p>
<p>Боле-мене рабочий способ требует наличия модуля <a href="https://github.com/apenwarr/git-subtree">git-subtree</a></p>
<h2>Описание метода</h2>
<p>Предположим, наш проект имеет следующую структуру:</p>
<pre><code class="no-highlight">application/
library/
  App/
  ...
tests/
  ...</code></pre>
<p>В каталог <code>library/</code> будем подключать подкаталог <code>Zend/Log</code> из репозитория ZF2. Из всего репозитория нужно взять только <code>Zend/Log</code>. Т.е. в итоге должно получиться так:</p>
<pre><code class="no-highlight">application/
library/
  App/
  Zend/
    Log/
  ...
tests/
  ...</code></pre>
<p>Во-первых, добавим удаленный репозиторий:</p>
<pre><code>&gt; git remote add zf2 http://github.com/zendframework/zf2
&gt; git fetch zf2</code></pre>
<p>Теперь извлечем из него код в отдельную ветку:</p>
<pre><code>&gt; git checkout -b projects/zf2 zf2/master</code></pre>
<p>Теперь выделим нужный нам каталог в собственную ветку:</p>
<pre><code>&gt; git subtree split --prefix=library/Zend/Log --annotate="[zend_log] " --rejoin -b subtrees/zend_log</code></pre>
<p>Следующим шагом сольем эту ветку в наш мастер:</p>
<pre><code>&gt; git checkout master
&gt; git subtree add --prefix=library/Zend/Log --squash subtrees/zend_log
Added dir 'library/Zend/Log'</code></pre>
<p>На этом импорт закончен. Теперь в репозиторий есть подкаталог <code>library/Zend/Log</code>.</p>
<p>Импортировав таким образом часть чужого репозитория мы решили проблему с включением этого кода в проект, но обрели новую проблему&nbsp;&mdash; поддержание импортированного кода в актуальном состоянии.</p>
<h2>Обновление импортированного подкаталога</h2>
<p>Напомню, что в процессе импорта мы создали две ветки: <code>projects/zf2</code> и <code>subtrees/zend_log</code>.</p>
<p>Чтобы обновить код, обновим мастер-ветку репозитория ZF2:</p>
<pre><code>&gt; git checkout projects/zf2
&gt; git fetch zf2
&gt; git rebase zf2/master</code></pre>
<p>Затем снова выделим подкаталог:</p>
<pre><code>&gt; git subtree split --prefix=library/Zend/Log --annotate="[zend_log] " --rejoin -b subtrees/zend_log</code></pre>
<p>После чего сольем его с нашим мастером:</p>
<pre><code>&gt; git checkout master
&gt; git subtree merge --prefix=library/Zend/Log --squash subtrees/zend_log</code></pre>
<h2>Заключение</h2>
<p>Не такой уж и удобный способ, но лучше я пока не нашел. На мой взгляд у него две проблемы:</p>
<ul>
<li>сложность в обновлении импортированного кода</li>
<li>необходимость создавать ветки для каждого нового донора кода и каждого импортируемого подкаталога.</li>
</ul>
<h2>Ссылки по теме:</h2>
<ul>
<li><a href="http://j.mp/sdrK1L">Having Fun With Git Subtree</a></li>
<li><a href="http://j.mp/vMw5F3">Subtree Merge</a></li>
</ul>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Git: импорт части репозитория on Лобач.info',url: 'http://lobach.info/develop/git/subtree-import/',contentID: 'post-204',suggestTags: 'Git,solution,tutorial,контроль версий,советы',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/git/" title="Git" rel="tag">Git</a>, <a href="http://lobach.info/tag/solution/" title="solution" rel="tag">solution</a>, <a href="http://lobach.info/tag/tutorial/" title="tutorial" rel="tag">tutorial</a>, <a href="http://lobach.info/tag/%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d1%8c-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b9/" title="контроль версий" rel="tag">контроль версий</a>, <a href="http://lobach.info/tag/%d1%81%d0%be%d0%b2%d0%b5%d1%82%d1%8b/" title="советы" rel="tag">советы</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/git/resolving-git-conflict-with-binary-files/" title="Git: разрешение конфликтов в бинарных файлах (23.12.2011)">Git: разрешение конфликтов в бинарных файлах</a> (0)</li>
	<li><a href="http://lobach.info/develop/svn/svn-commit-tutorial/" title="Советы по фиксациям в SVN (16.04.2009)">Советы по фиксациям в SVN</a> (0)</li>
	<li><a href="http://lobach.info/some/branch-merging-part2/" title="Как слить изменения между ветками. Часть 2 (27.01.2008)">Как слить изменения между ветками. Часть 2</a> (4)</li>
	<li><a href="http://lobach.info/develop/svn/branch-merging-part1/" title="Как слить изменения между ветками. Часть 1 (22.01.2008)">Как слить изменения между ветками. Часть 1</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/making-branches/" title="Как и Зачем делать ветки? (18.12.2007)">Как и Зачем делать ветки?</a> (3)</li>
</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=5p-2hdWgX5g:KAEeZUZvB-A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/git/subtree-import/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Размышления о логировании</title>
		<link>http://lobach.info/develop/reflections-on-logging/</link>
		<comments>http://lobach.info/develop/reflections-on-logging/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 06:04:20 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Разработка]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=184</guid>
		<description><![CDATA[В этой заметке я попытался описать свои размышления о логировании в приложениях и обрисовал некую идеальную (на мой взгляд) систему логирования. <a href="http://lobach.info/develop/reflections-on-logging/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/wbN9wcKYO0wfm1KnjVG3mTf6S5k/0/da"><img src="http://feedads.g.doubleclick.net/~a/wbN9wcKYO0wfm1KnjVG3mTf6S5k/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wbN9wcKYO0wfm1KnjVG3mTf6S5k/1/da"><img src="http://feedads.g.doubleclick.net/~a/wbN9wcKYO0wfm1KnjVG3mTf6S5k/1/di" border="0" ismap="true"></img></a></p><p><img src="/wp-content/uploads/2011/05/logfile.png" alt="" width="200" height="126" class="alignleft size-full wp-image-195" />Последую призыву Ивана Сагалаева, прозвучащему в его посте &laquo;<a href="http://softwaremaniacs.org/blog/2011/01/24/cross-blog-discussions/">Обсуждения через блоги</a>&raquo;, и выскажу свое мнение о логировании в приложениях. Поводом к этому посту послужила заметка Евгения Сергеева &laquo;<a href="http://www.codeart.ru/2011/02/23/kakim-dolzhen-byt-pravilnyj-log-fajl/">Каким должен быть правильный лог-файл</a>&raquo;.</p>
<p>После прочтения заметки Евгения, хочется с ним поспорить. Основные посылы заметки: лог должен быть один, лог должен быть дружественен к администратору, лог должен содержать максимум информации и лог должен быть текстовым.</p>
<p>Во-первых, я крайне не согласен с тем, что лог должен быть един и для программиста и для администратора. У этих двух ролей разные цели и задачи, и информация им нужна разная. Область администратора&nbsp;&mdash; внешнее окружение приложения: настройки ОС, СУБД / хранилища, файловые системы и прочие системные вещи. Область же программиста&nbsp;&mdash; внутренности приложения: работа и взаимодействие модулей, структура и целостность данных в хранилищах, ошибки приложения и пользователей и т.п.</p>
<p>Для администратора важно видеть ошибки, вызванные внешними (по отношению к приложению) причинами: нехватка места на диске, упал сервер БД, закрыт порт и т.д. Внутренняя кухня приложения администратора не касается. Программисту же наоборот, надо как можно больше информации о произошедшей ошибке: где, почему, что было перед этим, состояние в момент ошибки, как произошла и т.п. Как эти противоположные цели уместить в один лог я не представляю. Ну, можно, конечно, писать все сообщения в текстовый файл добавляя префикс, по которому можно будет фильтровать записи. Но учитывая желание программиста писать в лог как можно больше данных, в любом случае пострадает читаемость:</p>
<ul>
<li>если принять &laquo;одна запись&nbsp;&mdash; одна строка&raquo; (доп. информацию каким-то образом сереализовать и умещать в той-же строке), то отсеивать нужные записи будет легко, но прочитать что-то кроме сообщения об ошибке будет крайне трудно;</li>
<li>если подробности писать в читаемом виде (т.е. &laquo;одна запись&nbsp;&mdash; много строк&raquo;), то разбираться в конкретном сообщении будет значительно проще, но найти это конкретное нужное сообщение в получающейся &laquo;портянке&raquo; станет весьма непросто.</li>
</ul>
<p>Во-вторых, лог в виде одного текстового файла можно реализовать, если приложение небольшое и работает на одном сервере. Для крупного приложения, работающего на двух и более серверах, это уже не приемлемо&nbsp;&mdash; начинается фрагментация лога, когда связанные каким-то образом сообщения (например, одной сессией пользователя) размазываются по нескольким файлам на разных серверах.</p>
<p>Еще одиним моментом, связанным с читаемостью лога, является повторение ошибки. Если вам не повезло и код вызывающий запись в лог выполняется часто, лог будет завален одинаковыми сообщениями. Что еще больше усложняет ручной разбор лога.</p>
<p>Над темой логирования я размышляю уже давно и статья Евгения лишь подтолкнул оформить свои мысли в виде поста блоге. Сразу скажу, что рассматривать буду достаточно крупные приложения на платформе LAMP и акцент буду делать с точки зрения программиста.</p>
<p>Предположим, что у нас несколько физических серверов на которых работают разные части нашего приложения: ядро системы, фронтенды, различные вспомогательные сервисы, и, в дополнение к этому зоопарку, javascript на клиентской стороне. Мне, как разработчику, хочется контролировать работу всех этих систем и в случае возникновения ошибки получить максимум информации о текущем состоянии приложения. Помимо места возникновения и тяжести ошибки, нужны данные о контексте: содержимое запроса, запрашиваемый URL, http-заголовки запроса (реферер, UA и пр.), состояние сессии пользователя, куки и прочие данные, доступные в этом месте и полезные для анализа причин ошибки.</p>
<p>Кроме лога ошибок часто требуется, чтобы приложение информировало о какой-то ситуации. Например, очередь сообщений достигла некой сигнальной величины, или внешний сервис некорректно обратился к нашему приложению (предположим что такая ситуация была предусмотрена и она была корректно обработана, но об этом хорошо бы знать). Часть таких ситуаций можно обработать отдельным сервисом мониторинга (например, <a href="http://zabbix.com">zabbix</a> или <a href="http://nagios.org">nagios</a>), но это не всегда возможно.</p>
<p>Помимо фиксации ошибок и мониторинга еще оной задачей логирования является помощь в контроле работы определенных подсистем (или всего приложения в целом). В этом случае событием, вызвавшим запись в лог, будет являться выполнение определенного кода (например, начало и конец выполнения определенного метода).</p>
<p>Исходя из данных посылов я постараюсь описать идеальную (с моей точки зрения) систему логирования. Система должна:</p>
<ol>
<li>иметь одно (или несколько) хранилище логов для агрегации сообщений</li>
<li>позволять настроить выбор типа хранилища для сохранения сообщения по различным критериям. Например, ошибки соединения с внешними сервисами (база данных, очередь сообщений, кэш и пр.) записывать в текстовый лог, сообщения о неудачной транзакции отправлять по email, а все остальное отправлять в центральное хранилище.</li>
<li>иметь механизмы для изменения детализации сообщений &laquo;на лету&raquo;. Например, сохранять только ссобщения с приоритетом WARNING и выше, или не сохранять контекст сообщения для приоритета INFO</li>
<li>иметь удобный пользовательский интерфейс для доступа к центральному хранилищу. Этот интерфейс должен обеспечивать возможность просмотра в удобной форме поступивших сообщений</li>
<li>иметь возможность разнообразной автоматизации. Например раз в сутки формировать письмо со списком ошибок за прошедшие сутки, или отправлять письмо тимлиду при возникновении новой ошибки (или ошибки определенного типа), или предоставлять возможность из сообщения сформировать тикет в системе багтрекинга, и т.п.</li>
</ol>
<p>Я провел небольшое изыскание и нашел несколько проектов, похожих на то, что я обрисовал выше:</p>
<ul>
<li><a href="http://airbrake.io">Airbrake</a>&nbsp;&mdash; платный сервис, предоставляющий веб-интерфейс к собранным сообщениям. Ориентирован на RoR и iOs приложения.</li>
<li><a href="https://github.com/errbit/errbit">Errbit</a>&nbsp;&mdash; проект с открытым исходным кодом, API-совместимый с Airbrake</li>
<li><a href="http://www.graylog2.org/about">Graylog2</a>&nbsp;&mdash; еще один проект с открытым исходным кодом. Написан на Java, включает в себя сервер для сбора логов и веб-интерфейс для их анализа. В качестве хранилища использует <a href="http://mongodb.org">MongoDB</a></li>
</ul>
<p>Библиотеки:</p>
<ul>
<li><a href="http://code.google.com/p/lagger/">Lagger</a>&nbsp;&mdash; на первый взгляд, интересная библиотека для логирования</li>
</ul>
<p>Ссылки по теме:</p>
<ul>
<li>&laquo;<a href="http://www.skipy.ru/useful/logging.html">Ведение лога приложения</a>&raquo;</li>
</ul>
<p><strong><em>А что вы думаете по этому поводу? Может у вас есть опыт использования подобных систем? Критика, замечания и дополнения приветствуются!</em></strong></p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Размышления о логировании on Лобач.info',url: 'http://lobach.info/develop/reflections-on-logging/',contentID: 'post-184',suggestTags: '',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
Этот пост без меток.
	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li>Нет похожих записей</li>
	</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=zYmBiMXCqb0:rcdrEkigzU0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/reflections-on-logging/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Впечатления от книжки «Integrating PHP Projects with Jenkins»</title>
		<link>http://lobach.info/develop/note-integrating-php-projects-with-jenkins/</link>
		<comments>http://lobach.info/develop/note-integrating-php-projects-with-jenkins/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 07:10:43 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[jenkins]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=200</guid>
		<description><![CDATA[Недавно приобрел книжку "Integrating PHP Projects with Jenkins" за авторством Себастиана Бергмана. Решил описать свои впечатления от неё. <a href="http://lobach.info/develop/note-integrating-php-projects-with-jenkins/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/ml_-HHidbrSBpCTolDNuX1gVCGY/0/da"><img src="http://feedads.g.doubleclick.net/~a/ml_-HHidbrSBpCTolDNuX1gVCGY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ml_-HHidbrSBpCTolDNuX1gVCGY/1/da"><img src="http://feedads.g.doubleclick.net/~a/ml_-HHidbrSBpCTolDNuX1gVCGY/1/di" border="0" ismap="true"></img></a></p><p><img src="http://lobach.info/wp-content/uploads/2011/10/cat.gif" alt="" title="Integrating PHP Projects with Jenkins" width="180" height="236" class="alignleft size-full wp-image-201" />Недавно приобрел книжку &laquo;<a href="http://j.mp/qBPtcm">Integrating PHP Projects with Jenkins</a>&raquo; (издательство <a href="http://oreilly.com/">O&#39;Reilly Media</a>). Книгу написал <a href="http://sebastian-bergmann.de/">Себастиан Бергман</a>&nbsp;&mdash; автор известной библиотеки для разработки модульных тестов <a href="http://www.phpunit.de/">PHPUnit</a>.</p>
<p>В этой книге Себастиан подробно описывает внедрение в проект <em>Continuous Integration</em><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>&nbsp;&mdash; начиная с установки сервера CI и заканчивая генерацией массы различных метрик качества кода. Каждый шаг расписан достаточно подробно и понятно, так что повторить или решить что именно это в вашем проекте не требуется, очень легко.</p>
<p>Несмотря на то, что CI подразумевает автоматизированные тесты (например, модульные или интеграционные), в книге они затрагиваются вскользь. Автор подразумевает что тесты в вашем проекте уже есть и описывает как включить проверку результата выполнения тестов в процесс CI.</p>
<p>В целом, книжка оставила о себе вполне положительное впечатление. Не стоит ждать от неё каких-то откровенней&nbsp;&mdash; все можно найти в интернете. Но прелесть этого издания состоит в том, что весь материал собран в одном месте и подробно &laquo;разжеван&raquo; от начала и до конца.</p>
<p>Книжка не большая&nbsp;&mdash; 60 страниц, но и стоит не дорого&nbsp;&mdash; всего $5. Вполне адекватная цена, на мой взгляд. Денег и времени, потраченных на неё, мне не жаль. Так-что, если задумались о внедрении CI в свой проект, то обратите внимание на это издание.</p>
<p><strong>PS</strong>: В последней главе Себастиан попиарил пару своих проектов: готовый шаблон для jenkins-а и генератор &laquo;скелета&raquo; проекта, подготовленного к интеграции с jenkins. Посыл был простой&nbsp;&mdash; можете сами руками делать описанное ранее в этой книге, или взять вот эти два проекта и все сделается само.</p>
<h2>Ссылки по теме</h2>
<ol>
<li><a href="http://j.mp/pssrfn">Непрерывная интеграция ZF проекта при помощи Hudson &amp; Phing</a></li>
<li><a href="http://j.mp/nVMYev">Setting up continuous integration for PHP using Hudson and Phing</a></li>
<li><a href="http://j.mp/n2TpvY">Building a Continuous Integration Server for PHP with Hudson</a></li>
<li><a href="http://j.mp/rm9YRM">Rusty Robot: Настройка Hudson (Jenkins) + PHP</a></li>
</ol>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
<p>Непрерывная интеграция (англ. Continuous Integration) — это практика разработки программного обеспечения, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем. (<a href="http://j.mp/pRtchh">Wikipedia</a>)&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>
</ol>
</div>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Впечатления от книжки &amp;laquo;Integrating PHP Projects with Jenkins&amp;raquo; on Лобач.info',url: 'http://lobach.info/develop/note-integrating-php-projects-with-jenkins/',contentID: 'post-200',suggestTags: 'CI,Continuous Integration,jenkins',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/ci/" title="CI" rel="tag">CI</a>, <a href="http://lobach.info/tag/continuous-integration/" title="Continuous Integration" rel="tag">Continuous Integration</a>, <a href="http://lobach.info/tag/jenkins/" title="jenkins" rel="tag">jenkins</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li>Нет похожих записей</li>
	</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=TuM8iykYtmE:JGVXlUlfV-o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/note-integrating-php-projects-with-jenkins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сортировка по текстовому полю результатов поиска Sphinx-ом</title>
		<link>http://lobach.info/develop/sphinx-sort-by-text-field/</link>
		<comments>http://lobach.info/develop/sphinx-sort-by-text-field/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 06:14:02 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[solution]]></category>
		<category><![CDATA[sort]]></category>
		<category><![CDATA[Sphinx]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=197</guid>
		<description><![CDATA[Сегодня понадобилось отсортировать выдачу Sphinx по текстовому полю. Казалось бы, какие тут могут быть сложности? Однако самое очевидное решение (добавить к запросу ORDER BY text_attr) работать категорически отказалось. В ответ на такой запрос Sphinx ругался: sort-by attribute 'text_attr' not found. &#8230; <a href="http://lobach.info/develop/sphinx-sort-by-text-field/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/A9t2ZQP8lso-Q31tSz3JhZwm-0U/0/da"><img src="http://feedads.g.doubleclick.net/~a/A9t2ZQP8lso-Q31tSz3JhZwm-0U/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/A9t2ZQP8lso-Q31tSz3JhZwm-0U/1/da"><img src="http://feedads.g.doubleclick.net/~a/A9t2ZQP8lso-Q31tSz3JhZwm-0U/1/di" border="0" ismap="true"></img></a></p><p>Сегодня понадобилось отсортировать выдачу <a href="http://sphinxsearch.com/">Sphinx</a> по текстовому полю. Казалось бы, какие тут могут быть сложности? Однако самое очевидное решение (добавить к запросу <code>ORDER BY text_attr</code>) работать категорически отказалось. В ответ на такой запрос Sphinx ругался: <code>sort-by attribute 'text_attr' not found</code>. Чтение документации и гугление неприятно удивило: прямого способа отсортировать по текстовому полю нет. Оказалось, что <code>ORDER BY</code> работает только с полями, перечисленными в SELECT-е, а там можно перечислить (кроме встроенных) только определенные в конфиге источника атрибуты. При этом текстовых атрибутов не бывает.</p>
<p>Пришлось немного извратиться, чтобы решить эту задачу. Мысль была следующей: так как сортировать по текстовому полю нельзя, надо добавить еще одно числовое поле, сортировка по которому даст идентичный сортировке по текстовому полю результат. Как сгенерировать значения вспомогательного поля? Организовать счетчик! Вот кусок получившегося конфига:</p>
<pre><code># секция source
sql_query_pre       = SET @cnt = 0

sql_query           = \
    SELECT  id, text_attr, @cnt := @cnt + 1 as sort_fld \
    FROM `table` ORDER BY text_attr
sql_attr_uint       = sort_fld</code></pre>
<p>В первой строке инициализируется переменная, в которой будет храниться значение счетчика. Далее идет сам запрос на выборку данных для индексации. Обратите внимание&nbsp;&mdash; результат сортируется по нужному полю и в каждую запись добавляется текущее значение счетчика. Далее указываем тип атрибута, который будем использовать для сортировки.</p>
<p>Теперь запрос</p>
<pre><code>SELECT @id as docid, sort_fld FROM indx ORDER BY sort_fld</code></pre>
<p>выполнится без ошибок и результат будет отсортирован нужным образом.</p>
<p>У этого способа есть минимум один недостаток:<br />
&mdash; он работает только для полностью перестраиваемых индексов. Дельты и онлайн-индексы так работать не будут</p>
<p><strong>UPD:</strong> В комментариях <a href="http://vorozhko.net/">Ярослав Ворожко</a> подсказал &laquo;прямой&raquo; способ:</p>
<pre><code>sql_attr_str2ordinal = text_attr</code></pre>
<p>Этот тип атрибута позволяет проводить сортировку по текстовым полям. Работает, кстати, по тому же принципу, что и мой вариант&nbsp;&mdash; при индексации выполняется сортировка по этому полю и для каждой записи определяется некий числовой индекс, по которому потом и производится сортировка. Так что я переизобрел способ &laquo;из коробки&raquo; :)</p>
<p>Так как принцип тот же, этот способ обладает тем же недостатком&nbsp;&mdash; можно использовать только на полных индексах. Но, в отличии от моего способа, может быть несколько комбинаций полей для сортировки.</p>
<p>За наводку&nbsp;&mdash; спасибо Ярославу.</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Сортировка по текстовому полю результатов поиска Sphinx-ом on Лобач.info',url: 'http://lobach.info/develop/sphinx-sort-by-text-field/',contentID: 'post-197',suggestTags: 'solution,sort,Sphinx',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/solution/" title="solution" rel="tag">solution</a>, <a href="http://lobach.info/tag/sort/" title="sort" rel="tag">sort</a>, <a href="http://lobach.info/tag/sphinx/" title="Sphinx" rel="tag">Sphinx</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/events/mongo-moscow-conference/" title="Конференция Mongo Moscow (19.05.2011)">Конференция Mongo Moscow</a> (3)</li>
	<li><a href="http://lobach.info/some/rit2008-first-day/" title="Впечатления от первого дня РИТ-2008 (14.04.2008)">Впечатления от первого дня РИТ-2008</a> (3)</li>
	<li><a href="http://lobach.info/develop/git/subtree-import/" title="Git: импорт части репозитория (25.11.2011)">Git: импорт части репозитория</a> (4)</li>
</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=qw37DtPmHSw:-sUdZgTTA74:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/sphinx-sort-by-text-field/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Восстановление загрузчика GRUB</title>
		<link>http://lobach.info/some/restore-grub/</link>
		<comments>http://lobach.info/some/restore-grub/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 21:47:12 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[grub]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[recovery]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=196</guid>
		<description><![CDATA[Сегодня, без объявления войны, &#171;слетел&#187; загрузчик на рабочем ноуте. А так как я давно его не перезагружал, я даже не понял в какой момент и почему это произошло. Пришлось гуглить методы восстановления. Опубликую у себя найденный метод, чтобы в следующий &#8230; <a href="http://lobach.info/some/restore-grub/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/73q_dkZbw7v9WvipavleR1TERcQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/73q_dkZbw7v9WvipavleR1TERcQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/73q_dkZbw7v9WvipavleR1TERcQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/73q_dkZbw7v9WvipavleR1TERcQ/1/di" border="0" ismap="true"></img></a></p><p>Сегодня, без объявления войны, &laquo;слетел&raquo; загрузчик на рабочем ноуте. А так как я давно его не перезагружал, я даже не понял в какой момент и почему это произошло. Пришлось гуглить методы восстановления. Опубликую у себя найденный метод, чтобы в следующий раз не искать снова.</p>
<ol>
<li>загружаемся с LiveCD</li>
<li>запускаем терминал</li>
<li><code>sudo fdisk -l</code> # для вывода списка известных разделов</li>
<li>находим нужный диск</li>
<li><code>sudo mount /dev/sda1 /mnt</code> #монтируем корень (нужный раздел определили на предыдущем шаге)</li>
<li><code>sudo mount -t proc none /mnt/proc</code> # монтируем /proc</li>
<li><code>sudo mount -o bind /dev /mnt/dev</code> # монтируем /dev</li>
<li><code>sudo chroot /mnt</code> #делаем /mnt корнем</li>
<li><code>update-grub</code> #обновляем список</li>
<li><code>grub-install /dev/sda</code> #устанавливаем/восстанавливаем загрузчик</li>
<li><code>exit</code> #выходим</li>
<li><code>umount /mnt/dev</code></li>
<li><code>umount /mnt/proc</code></li>
<li><code>umount /mnt</code> # размонтировали корневой раздел</li>
<li><code>reboot</code> # осталось только перзагрузиться</li>
</ol>
<p>Способ был подсмотрен <a href="http://j.mp/n4STqB">тут</a></p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Восстановление загрузчика GRUB on Лобач.info',url: 'http://lobach.info/some/restore-grub/',contentID: 'post-196',suggestTags: 'grub,linux,recovery,ubuntu',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/grub/" title="grub" rel="tag">grub</a>, <a href="http://lobach.info/tag/linux/" title="linux" rel="tag">linux</a>, <a href="http://lobach.info/tag/recovery/" title="recovery" rel="tag">recovery</a>, <a href="http://lobach.info/tag/ubuntu/" title="ubuntu" rel="tag">ubuntu</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li>Нет похожих записей</li>
	</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=UnyMJgXBPV8:9jZP8W7e628:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/some/restore-grub/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Конференция Mongo Moscow</title>
		<link>http://lobach.info/events/mongo-moscow-conference/</link>
		<comments>http://lobach.info/events/mongo-moscow-conference/#comments</comments>
		<pubDate>Thu, 19 May 2011 04:00:23 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[События]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[Sphinx]]></category>
		<category><![CDATA[конференция]]></category>
		<category><![CDATA[отчет]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=193</guid>
		<description><![CDATA[Наконец нашел время изложить свои впечатления от конференции по MongoDB, которая прошла 16 мая в центре Москвы. В целом впечатления остались положительные, хотя и не обошлось без недостатков. <a href="http://lobach.info/events/mongo-moscow-conference/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/RVyAwrb4i1PY32KhVAA_3q5CpmQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/RVyAwrb4i1PY32KhVAA_3q5CpmQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/RVyAwrb4i1PY32KhVAA_3q5CpmQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/RVyAwrb4i1PY32KhVAA_3q5CpmQ/1/di" border="0" ismap="true"></img></a></p><p><a href="http://lobach.info/wp-content/uploads/2011/05/logo-mongodb.png"><img src="http://lobach.info/wp-content/uploads/2011/05/logo-mongodb.png" alt="" title="MongoDB" width="217" height="90" class="alignleft size-full wp-image-194" /></a>В понедельник 16 мая был на конференции Mongo Moscow. Проходила она в Центре <a href="http://digitaloctober.ru/">Digital October</a>.</p>
<p>Впечатления от конференции остались вполне положительные. Каких-то откровений и тайного знания я не получил, но послушать и пообщаться с разработчиками MongoDB было интересно.</p>
<p>Вот список докладов:<br />
&mdash; Знакомство с MongoDB (<em>Ричард Кройтер, 10gen/MongoDB</em>)<br />
&mdash; Масштабирование в MongoDB (<em>Матиас Стерн, 10gen/MongoDB</em>)<br />
&mdash; Оптимизация запросов и индексирование (<em>Ричард Кройтер, 10gen/MongoDB</em>)<br />
&mdash; Администрирование (<em>Матиас Стерн, 10gen/MongoDB</em>)<br />
&mdash; Три кейса по NoSQL в реальном мире (<em>Юджин Сьюрана, технический директор Badoo</em>)<br />
&mdash; MongoDB в облачных сервисах КРОК (<em>Юрий Коновалов, КРОК</em>)<br />
&mdash; Временное хранение информации на сервере ejabberd: переход от Mnesia к MongoDB (<em>Дмитрий Беляев, Yandex</em>)<br />
&mdash; Полнотекстовый поиск в MongoDB при помощи Sphinx (<em>Андрей Аксенов, Sphinx Technologies</em>)</p>
<p>Более подробную информацию о каждом из докладчиков можно узнать на странице с анонсом конференции. Ссылку найдете в конце поста.</p>
<p>Кратко опишу свои впечатления от докладов.</p>
<p>Выступления разработчиков из 10gen лично мне показались достаточно любопытными. Несмотря на то, что практически ничего нового я не узнал, слушать их было интересно. Для тех, кто мало работал с монгой или вообще с ней не имел дел, но хочет попробовать, доклады могут оказаться весьма полезными. Те же, кто долго и плотно общается с монгой вряд ли узнают что-то новое. Но и первым и вторым я бы рекомендовал посмотреть  эти доклады.</p>
<p>Остальные доклады были скушны и неинтересны. Разве что Сьюрана (кажется он итальянец) выступил живо и задорно, но на мой взгляд тема доклада была слишком общей, практической пользы из него вынести маловероятно.</p>
<p>Доклад Коновалова из КРОКа превратился в какой-то эпический фейл: начиная от речи и заканчивая почти провалившейся демонстрацией. Убедиться можете посмотрев видео. Но я бы не рекомендовал тратить на это свое время.</p>
<p>Аксенов в этот раз был далеко не в ударе. Я видел пару других его докладов (один живьем, второй в записи), этот ни в какое сравнение с ними не идет. Андрей попытался похохмить в своей манере, но тема доклада не дала ему развернуться. Вообщем, я посчитал этот доклад тоже &laquo;слитым&raquo;.</p>
<p>Дима Беляев из Яндекса очень нервничал и это прямо таки бросалось в глаза. Периодически он увлекался и немного расслаблялся&nbsp;&mdash; тогда становилось полегче. Доклад же мне показался слишком конкретным&nbsp;&mdash; если я посчитал доклад Сьюрана поверхностным, то в этом напротив ударились глубоко в детали. В некоторых ситуациях это может и не плохо, но если ты не в теме конкретной ситуации, глубоко вникать бессмысленно. В итоге этот доклад&nbsp;&mdash; на троечку.</p>
<p>Теперь пройдусь катком по организаторам.</p>
<p>Во-первых, чтобы попасть в Центр пришлось пройти небольшой квест: во дворе, который нужно было пересечь, рабочие собирали какую-то конструкцию из труб, что-то типа сцены. Пришлось пробираться сквозь этот лес труб, а в это время рабочие продолжали работать. Честно говоря&nbsp;&mdash; было немного ссыкотно находиться в центре стройплощадки. Допускаю, что над рабочими Центр не властен. Но то, что никакой информации о том как попасть в Центр не было&nbsp;&mdash; это точно фейл DO. Хорошо, что я был не один и мой спутник знал куда надо идти, и то пришлось поплутать.</p>
<p>Во-вторых, вместо 11 конференция началась только в 12. Организаторы не расчитывали, что все подойдут во-время. Поэтому пришлось ждать час начала конференции. Слегка скрасило это ожидание необходимость выстоять в довольно приличной очереди за бейджиками.</p>
<p>В сухом остатке: первая часть конференции вполне удачная, доклады рекомендую посмотреть (ссылка в конце), а вторая часть совершенно бесполезна.</p>
<div id='stb-container-8004' class='stb-container'><div id='stb-caption-box-8004' class='stb-info-caption_box stb_caption' >Ссылки<div id="stb-tool-8004" class="stb-tool" style="float:right; padding:0px; margin:0px auto"><img id="stb-toolimg-8004" style="border: none; background-color: transparent; padding: 0px; margin: 0px auto;" src="http://lobach.info/wp-content/plugins/wp-special-textboxes/images/hide.png" title="Скрыть" /></div></div><div id='stb-body-box-8004' class='stb-info-body_box stb_body' >&mdash; <a href="http://digitaloctober.ru/event/Mongo_DB_conference">Анонс конференции и видеозапись докладов</a><br />
&mdash; <a href="http://mongodb.org">Сайт проекта MongoDB</a><br />
</div></div>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Конференция Mongo Moscow on Лобач.info',url: 'http://lobach.info/events/mongo-moscow-conference/',contentID: 'post-193',suggestTags: 'mongodb,Sphinx,конференция,отчет',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/mongodb/" title="mongodb" rel="tag">mongodb</a>, <a href="http://lobach.info/tag/sphinx/" title="Sphinx" rel="tag">Sphinx</a>, <a href="http://lobach.info/tag/konferenciya/" title="конференция" rel="tag">конференция</a>, <a href="http://lobach.info/tag/otchet/" title="отчет" rel="tag">отчет</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/some/rit2008-second-day/" title="Отчет о втором дне РИТ-2008 (15.04.2008)">Отчет о втором дне РИТ-2008</a> (2)</li>
	<li><a href="http://lobach.info/some/phpconf2008-first-day/" title="Впечатления от PHPConf 2008 (день первый) (29.05.2008)">Впечатления от PHPConf 2008 (день первый)</a> (2)</li>
	<li><a href="http://lobach.info/some/phpconf2008-second-day/" title="Впечатления от PHPConf 2008 (день второй) (26.06.2008)">Впечатления от PHPConf 2008 (день второй)</a> (2)</li>
	<li><a href="http://lobach.info/develop/zf/zfconf2011-registratio/" title="Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework (05.05.2011)">Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework</a> (0)</li>
	<li><a href="http://lobach.info/develop/sphinx-sort-by-text-field/" title="Сортировка по текстовому полю результатов поиска Sphinx-ом (30.08.2011)">Сортировка по текстовому полю результатов поиска Sphinx-ом</a> (5)</li>
</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=ZqsGgEu82Hk:3nIPnLrCEa8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/events/mongo-moscow-conference/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework</title>
		<link>http://lobach.info/develop/zf/zfconf2011-registratio/</link>
		<comments>http://lobach.info/develop/zf/zfconf2011-registratio/#comments</comments>
		<pubDate>Thu, 05 May 2011 11:22:34 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[конференция]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=191</guid>
		<description><![CDATA[По просьбе организаторов публикую анонс предстоящей конференции ZFConf 2011. Присутствовать воплоти снова не удастся, так хоть окажу посильную помощь. Список докладов и финальная регистрация ZFConf 2011 Основные подготовительные работы по конференции закончены. Доклады сформированы. Среди спикеров представители KnpLabs, Magento, JetBrains, &#8230; <a href="http://lobach.info/develop/zf/zfconf2011-registratio/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/zpAvDMdbFmjcMZqz92AU_bZFoWM/0/da"><img src="http://feedads.g.doubleclick.net/~a/zpAvDMdbFmjcMZqz92AU_bZFoWM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/zpAvDMdbFmjcMZqz92AU_bZFoWM/1/da"><img src="http://feedads.g.doubleclick.net/~a/zpAvDMdbFmjcMZqz92AU_bZFoWM/1/di" border="0" ismap="true"></img></a></p><p><a href="http://www.zfconf.ru/"><img src="http://lobach.info/wp-content/uploads/2011/05/a_78058dc0.jpg" alt="Логотип ZendFramework Conference" title="ZF Conf" width="192" height="139" class="alignleft size-full wp-image-192" /></a> По просьбе организаторов публикую анонс предстоящей конференции ZFConf 2011. Присутствовать воплоти снова не удастся, так хоть окажу посильную помощь.</p>
<h2>Список докладов и финальная регистрация ZFConf 2011</h2>
<p>Основные подготовительные работы по конференции закончены. Доклады сформированы. Среди спикеров представители KnpLabs, Magento, JetBrains, Sphinx и других известных компаний.</p>
<p>Открыта <a href="http://www.zfconf.ru/registration/" target="_blank"><strong>финальная регистрация</strong></a>!</p>
<p><strong>Если Вы проходили предварительную регистрацию</strong>, то для прохождения финальной регистрации Вам нужно перейти по специальной ссылке, отправленной на e-mail. Введенную ранее информацию нужно будет только подтвердить. Если ссылка не приходила Вам, ее можно запросить через <a href="http://www.zfconf.ru/get-registration-path/" target="_blank">специальную форму</a>.</p>
<p>Пожалуйста, обратите внимание на то, что <strong>изменилось <a href="http://www.zfconf.ru/2011/location/" target="_blank" >место проведения</a></strong>! Мероприятие будет проходить на прошлогодней площадке — в актовом зале ЛГТЦ (Ленгипротранс-Центр), по адресу: Московский пр., 143, ст. м. «Электросила». Кофе-брейки и обсуждения на флипчартах будут проходить в фойе.</p>
<p><strong>Cписок докладов:</strong></p>
<ul>
<li><a href="http://www.zfconf.ru/2011/topics/flexible-architecture-using-dependency-injection/">Гибкая архитектура Zend Framework приложений с использованием Dependency Injection</a><br />
Алексей Качаев (Сogniance, Senior PHP Developer)</li>
<li><a href="http://www.zfconf.ru/2011/topics/performance-increasing-with-phpdaemon-varnish-esi/">Воюем за ресурсы: Повышение производительности Zend Framework приложения с помощью phpDaemon, Varnish и ESI</a><br />
Алексей Качаев (Сogniance, Senior PHP Developer)</li>
<li><a href="http://www.zfconf.ru/2011/topics/behavior-driven-development/">Behavior Driven Development в PHP и Zend Framework</a><br />
Константин Кудряшов (KnpLabs, Senior Web Developer)</li>
<li><a href="http://www.zfconf.ru/2011/topics/multitasking-distributed-system-with-job-queue/">Разделение труда: Организация многозадачной, распределенной системы в Zend Framework с помощью Job Queue</a><br />
Александр Готгельф (Magento, PHP-разработчик)</li>
<li><a href="http://www.zfconf.ru/2011/topics/how-can-help-development-environment/">Как может помочь среда разработки при написании приложения на Zend Framework?</a><br />
Николай Матвеев (JetBrains, разработчик)</li>
<li><a href="http://www.zfconf.ru/2011/topics/creating-rest-api-for-third-party-developers-and-mobile-devices-with-oauth/">Создание REST-API для сторонних разработчиков и мобильных устройств с авторизацией по протоколу OAuth 1.0</a><br />
Дмитрий Чижевский (Дзен-мани, разработчик)</li>
<li><a href="http://www.zfconf.ru/2011/topics/fat-model-through-orm-development-history/">Толстая модель: История разработки собственного ORM</a><br />
Михаил Шамин (Геометрия, ведущий разработчик)</li>
<li><a href="http://www.zfconf.ru/2011/topics/what-is-sphinx-and-how-use-it-with-php/">Что такое Sphinx, зачем он вообще нужен и как его использовать с PHP (от простого индекса до поискового кластера)</a><br />
Владимир Федорков (Sphinx, Director of Professional Services)</li>
</ul>
<p>Стоимость участия в мероприятии составит 1500 руб. В данную сумму входит: участие в самой конференции, кофе-брейки (от внешней кейтеринг-компании), пакет материалов участника и доступ к профессиональным видеозаписям докладов (после мероприятия). Доступно <a href="http://www.zfconf.ru/payment-types/" target="_blank" >множество способов оплаты</a>.</p>
<p>Торопитесь, <strong>количество мест ограничено</strong>!</p>
<p>Обязательно следите за последними новостями:<br />
&mdash; <strong>RSS-канал:</strong> <a href="http://feeds.feedburner.com/zfconf" target="_blank">feeds.feedburner.com/zfconf</a><br />
&mdash; <strong>Twitter:</strong> <a href="http://twitter.com/zfconf" target="_blank">@zfconf</a><br />
&mdash; <strong>Группа ВКонтакте:</strong> <a href="http://vkontakte.ru/club14951507" target="_blank">vkontakte.ru/club14951507</a></p>
<p><strong>Организатор:</strong> <a href="http://www.wizartech.ru/" target="_blank">компания Wizartech</a><br />
<strong>Партнеры:</strong> <a href="http://zendframework.ru/" target="_blank">сообщество zendframework.ru</a> и <a href="http://zfconf.org.ua/" target="_blank">конференция ZFConf Ukraine</a></p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework on Лобач.info',url: 'http://lobach.info/develop/zf/zfconf2011-registratio/',contentID: 'post-191',suggestTags: 'php,zend framework,конференция',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/php/" title="php" rel="tag">php</a>, <a href="http://lobach.info/tag/zend-framework/" title="zend framework" rel="tag">zend framework</a>, <a href="http://lobach.info/tag/konferenciya/" title="конференция" rel="tag">конференция</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/zf/registration-to-first-zend-framework-conference-open/" title="Открыта регистрация на первую Российскую конференцию посвященную Zend Framework (02.02.2010)">Открыта регистрация на первую Российскую конференцию посвященную Zend Framework</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/tips-zf18/" title="Хитрости ZF1.8 (04.05.2009)">Хитрости ZF1.8</a> (1)</li>
	<li><a href="http://lobach.info/develop/zf/creating-re-usable-zend_application-resource-plugins/" title="Создание повторно используемых плагинов ресурсов Zend_Application (08.02.2010)">Создание повторно используемых плагинов ресурсов Zend_Application</a> (13)</li>
	<li><a href="http://lobach.info/develop/zf/custom-zend_application-resources/" title="Пользовательские ресурсы для Zend_Application (13.01.2010)">Пользовательские ресурсы для Zend_Application</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/hooks-in-action-helpers/" title="Перехватчики в помощниках действий (06.11.2008)">Перехватчики в помощниках действий</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=DF-bDbsumck:AP8Usp9mysA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/zf/zfconf2011-registratio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пополнение в библиотеке</title>
		<link>http://lobach.info/some/library-completion/</link>
		<comments>http://lobach.info/some/library-completion/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 09:25:32 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[books]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=186</guid>
		<description><![CDATA[По случаю скидки к дню рождения, приобрел в озоне пару книжек: Роберт Мартин. Чистый код. Создание, анализ и рефакторинг Ремесло программиста. Практика написания хорошего кода Читал о них неплохие отзывы. Первое впечатление от беглого перелистывания книжек было хорошим. &#171;Чистый код&#187; &#8230; <a href="http://lobach.info/some/library-completion/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/gUAu3UZHG1D-4b8nG0hUCaAZLZg/0/da"><img src="http://feedads.g.doubleclick.net/~a/gUAu3UZHG1D-4b8nG0hUCaAZLZg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/gUAu3UZHG1D-4b8nG0hUCaAZLZg/1/da"><img src="http://feedads.g.doubleclick.net/~a/gUAu3UZHG1D-4b8nG0hUCaAZLZg/1/di" border="0" ismap="true"></img></a></p><p>По случаю скидки к <a href="http://life.lobach.info/33">дню рождения</a>, приобрел в озоне пару книжек:</p>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="70" valign="top"><a href="http://j.mp/hVLex3" title="Роберт Мартин. Чистый код. Создание, анализ и рефакторинг"><img style="width: 60px; margin-right: 10px; border: 0;" src="http://ozon.ru//multimedia/books_covers/small/1001563239.gif" alt="Роберт Мартин. Чистый код. Создание, анализ и рефакторинг" /></a></td>
<td style="vertical-align: middle;"><a style="color: black" title="Роберт Мартин. Чистый код. Создание, анализ и рефакторинг" href="http://j.mp/hVLex3">Роберт Мартин. Чистый код. Создание, анализ и рефакторинг</a></td>
</tr>
</table>
<p></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="70" valign="top"><a href="http://j.mp/gRle9C" title="Питер Гудлиф. Ремесло программиста. Практика написания хорошего кода"><img style="width: 60px; margin-right: 10px; border: 0;" src="http://ozon.ru//multimedia/books_covers/small/1001051075.gif" alt="Питер Гудлиф. Ремесло программиста. Практика написания хорошего кода" /></a></td>
<td style="vertical-align: middle;"><a style="color: black" title="Питер Гудлиф. Ремесло программиста. Практика написания хорошего кода" href="http://j.mp/gRle9C">Ремесло программиста. Практика написания хорошего кода</a></td>
</tr>
</table>
<p>Читал о них неплохие отзывы. Первое впечатление от беглого перелистывания книжек было хорошим. &laquo;Чистый код&raquo; мне показался более сухим и академичным, а в &laquo;Ремесле&raquo; много воды, разговоров на около программистские темы. После прочтения, думаю месяца через 3-4, напишу об оставшемся впечатлении.</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Пополнение в библиотеке on Лобач.info',url: 'http://lobach.info/some/library-completion/',contentID: 'post-186',suggestTags: 'books',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/books/" title="books" rel="tag">books</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li>Нет похожих записей</li>
	</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=0ZiYv9IMnWo:9RWRMG1BegE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/some/library-completion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Как набирать меньше $this при использовании PHPUnit</title>
		<link>http://lobach.info/develop/less-this-in-phpunit/</link>
		<comments>http://lobach.info/develop/less-this-in-phpunit/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 07:26:27 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[unit test]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=185</guid>
		<description><![CDATA[Наткнулся на статью о том как избавиться от $this в модульных тестах. Этот пост показался мне интересным и я решил опубликовать выжимку из него в своем блоге. Не так давно Себастьян реализовал возможность использовать asserts не только в виде методов &#8230; <a href="http://lobach.info/develop/less-this-in-phpunit/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/2Od-wTYKMBG84SzYI0N_8ij2mWs/0/da"><img src="http://feedads.g.doubleclick.net/~a/2Od-wTYKMBG84SzYI0N_8ij2mWs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2Od-wTYKMBG84SzYI0N_8ij2mWs/1/da"><img src="http://feedads.g.doubleclick.net/~a/2Od-wTYKMBG84SzYI0N_8ij2mWs/1/di" border="0" ismap="true"></img></a></p><p>Наткнулся на статью о том <a href="http://phpandme.tumblr.com/post/3620995908/how-to-type-less-this-in-phpunit">как избавиться от $this</a> в модульных тестах. Этот пост показался мне интересным и я решил опубликовать выжимку из него в своем блоге.</p>
<p>Не так давно Себастьян <a href="http://sebastian-bergmann.de/archives/896-PHPUnit-3.5-Less-this-Required.html">реализовал возможность</a> использовать asserts не только в виде методов класса, но и в виде глобальных фукций.</p>
<p>Было:</p>
<pre><code class="php">class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        $this-&gt;assertEquals(0, count($stack));

        array_push($stack, 'foo');
        $this-&gt;assertEquals('foo', $stack[count($stack)-1]);
        $this-&gt;assertEquals(1, count($stack));
        $this-&gt;assertEquals('foo', array_pop($stack));
        $this-&gt;assertEquals(0, count($stack));
    }
}</code></pre>
<p>Стало можно:</p>
<pre><code class="php">require_once 'PHPUnit/Framework/Assert/Functions.php';
class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        assertEquals(0, count($stack));

        array_push($stack, 'foo');
        assertEquals('foo', $stack[count($stack)-1]);
        assertEquals(1, count($stack));
        assertEquals('foo', array_pop($stack));
        assertEquals(0, count($stack));
    }
}</code></pre>
<p>Сообществом такое нововведение было встречено скорее негативно, из-за использования глобальных функций. Поэтому Себастьян вынес их в отдельный файл, который нужно самостоятельно подключать в ваших тестах (что и было сделано в этом примере).</p>
<p>Автор упомянутой выше статьи реализовал другой способ. Вместо глобальных функций он использовал статичные методы специального класса Assert:</p>
<pre><code class="php">require_once 'Assert.php';
class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        assert::equals(0, count($stack));

        array_push($stack, 'foo');
        assert::equals('foo', $stack[count($stack)-1])
              -&gt;equals(1, count($stack))
              -&gt;equals('foo', array_pop($stack))
              -&gt;equals(0, count($stack))
              ;
    }
}</code></pre>
<p>Вместо <code>$this</code> можно было и раньше использовать статичные методы, заменив <code>$this-&gt;</code> на <code>self::</code>. Но на мой взгляд большой разницы нет. Предложенный-же класс улучшает читабельность кода. А если воспользоваться алиасом к неймспейсу, то будет еще лучше:</p>
<pre><code class="php">require_once 'Assert.php';
use Assert as is;

class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        is::eq(0, count($stack));

        array_push($stack, 'foo');
        is::eq('foo', $stack[count($stack)-1])
          -&gt;eq(1, count($stack))
          -&gt;eq('foo', array_pop($stack))
          -&gt;eq(0, count($stack))
          ;
    }
}</code></pre>
<p>В этом примере продемонстрирована еще одна &laquo;плюшка&raquo; библиотечки&nbsp;&mdash; алиасы ассертов. Вместо <code>equals</code> используется <code>eq</code>. Список алиасов указывается в свойстве класса.</p>
<p>Через этот класс можно вызвать любой из assert-методов PHPUnit, просто опустив префикс <code>assert</code>.</p>
<p>Лично мне такой вариант упрощения кода тестов нравится больше, чем классический через <code>$this</code> или через глобальные функции. Вот только использование цепочек в данном случае мне кажется лишним. На мой взгляд такой вариант более наглядный:</p>
<pre><code class="php">require_once 'Assert.php';
use Assert as is;

class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        is::equals(0, count($stack));
        array_push($stack, 'foo');
        is::equals('foo', $stack[count($stack)-1]);
        is::equals(1, count($stack));
        is::equals('foo', array_pop($stack));
        is::equals(0, count($stack));
    }
}</code></pre>
<div id='stb-container-9070' class='stb-container'><div id='stb-caption-box-9070' class='stb-download-caption_box stb_caption' >Код класса доступен:<div id="stb-tool-9070" class="stb-tool" style="float:right; padding:0px; margin:0px auto"><img id="stb-toolimg-9070" style="border: none; background-color: transparent; padding: 0px; margin: 0px auto;" src="http://lobach.info/wp-content/plugins/wp-special-textboxes/images/hide.png" title="Скрыть" /></div></div><div id='stb-body-box-9070' class='stb-download-body_box stb_body' ><br />
&mdash; в конце оригинального <a href="http://phpandme.tumblr.com/post/3620995908/how-to-type-less-this-in-phpunit">поста</a><br />
&mdash; на <a href="https://gist.github.com/868430">гитхабе</a> (я на всякий случай скопировал код туда)<br />
</div></div>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Как набирать меньше $this при использовании PHPUnit on Лобач.info',url: 'http://lobach.info/develop/less-this-in-phpunit/',contentID: 'post-185',suggestTags: 'php,phpunit,unit test',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/php/" title="php" rel="tag">php</a>, <a href="http://lobach.info/tag/phpunit/" title="phpunit" rel="tag">phpunit</a>, <a href="http://lobach.info/tag/unit-test/" title="unit test" rel="tag">unit test</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/zf/phpunit-testing-zend-framework-controllers/" title="PHPUnit: Тестирование контроллеров Zend Framework (06.02.2009)">PHPUnit: Тестирование контроллеров Zend Framework</a> (13)</li>
	<li><a href="http://lobach.info/develop/zf/tips-zf18/" title="Хитрости ZF1.8 (04.05.2009)">Хитрости ZF1.8</a> (1)</li>
	<li><a href="http://lobach.info/develop/zf/zfconf2011-registratio/" title="Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework (05.05.2011)">Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/creating-re-usable-zend_application-resource-plugins/" title="Создание повторно используемых плагинов ресурсов Zend_Application (08.02.2010)">Создание повторно используемых плагинов ресурсов Zend_Application</a> (13)</li>
	<li><a href="http://lobach.info/develop/zf/custom-zend_application-resources/" title="Пользовательские ресурсы для Zend_Application (13.01.2010)">Пользовательские ресурсы для Zend_Application</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=Pnr3jyRwuUI:naSJGPT-qcg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/less-this-in-phpunit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Изменение размера загружаемых изображений</title>
		<link>http://lobach.info/develop/zf/resizing-loaded-image/</link>
		<comments>http://lobach.info/develop/zf/resizing-loaded-image/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 07:13:46 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[resize]]></category>
		<category><![CDATA[thumbnail]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[Zend_File_Transfer]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=175</guid>
		<description><![CDATA[Загрузка изображений&#160;&#8212; задача достаточно часто встречающаяся при разработке различных сайтов. Чаще такая потребность встречается в бэкофисе&#160;&#8212; у администратора или контент-менеджера. Но и обычным посетителям иногда нужно дать такую возможность. Реализовать загрузку файлов проблемы не составляет&#160;&#8212; для этого в Zend Framework &#8230; <a href="http://lobach.info/develop/zf/resizing-loaded-image/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/U4AOoIjci687aqXvhMLu8FX_DEk/0/da"><img src="http://feedads.g.doubleclick.net/~a/U4AOoIjci687aqXvhMLu8FX_DEk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/U4AOoIjci687aqXvhMLu8FX_DEk/1/da"><img src="http://feedads.g.doubleclick.net/~a/U4AOoIjci687aqXvhMLu8FX_DEk/1/di" border="0" ismap="true"></img></a></p><p><img src="http://lobach.info/wp-content/uploads/2010/11/zf-logo.png" alt="Zend Framework" title="Zend Framework" width="160" height="85" class="alignleft size-full wp-image-179" />Загрузка изображений&nbsp;&mdash; задача достаточно часто встречающаяся при разработке различных сайтов. Чаще такая потребность встречается в бэкофисе&nbsp;&mdash; у администратора или контент-менеджера. Но и обычным посетителям иногда нужно дать такую возможность.</p>
<p><span id="more-175"></span></p>
<p>Реализовать загрузку файлов проблемы не составляет&nbsp;&mdash; для этого в Zend Framework есть специальный компонент: <a href="http://framework.zend.com/manual/en/zend.file.transfer.introduction.html">Zend_File_Transfer</a>. Подробно его использование я описывать не буду&nbsp;&mdash; в руководстве это описано достаточно хорошо, а хочу остановиться на связанной с загрузкой изображений задаче. А именно на изменении размеров загруженных изображений.</p>
<p>Существует два подхода к изменению размера изображений:</p>
<ul>
<li>подготовить изображение нужного размера при его загрузке пользователем</li>
<li>изменить размер изображения в момент получения запроса на его отображение</li>
</ul>
<p>Каждый из подходов имеет свои плюсы и минусы, останавливаться на этом не буду. Желающие подробнее разобраться достоинствах и недостатках подходов могут спросить у гугла или яндекса&nbsp;&mdash; материала на эту тему достаточно.</p>
<p>В качестве примера, хочу предложить свою реализацию первого подхода. Особенность её заключается в удобной интеграции с компонентом <a href="http://framework.zend.com/manual/en/zend.file.transfer.introduction.html">Zend_File_Transfer</a>. Достигается это за счет того, что ресайзер фактически представляет собой фильтр и может быть легко добавлен в цепочку фильтров/валидаторов транспорта.</p>
<p>Основой моего класса стала статья Ильдара Шайморданова &laquo;<a href="http://debugger.ru/articles/thumbnails">Thumbnails: Теория и практика создания миниатюрных изображений</a>&raquo; (<a href="http://code.google.com/p/php-funs/downloads/list">исходный код библиотеки</a>). Код класса также частично основан на библиотеке Ильдара (с его любезного разрешения). Загрузить фильтр можно с <a href="https://github.com/bladeofsteel/zfImageFilter/blob/master/library/App/Filter/File/ImageResize.php">github-а</a>. Кстати, буду благодарен за помощь в написании английской версии документации.</p>
<h3 id="options">Параметры</h3>
<p>Глупо было бы писать фильтр, создающий изображения только одного размера и только одним способом. Поэтому фильтр позволяет себя настраивать. Для этого нужно в конструктор фильтра передать массив параметров:</p>
<ul>
<li>width&nbsp;&mdash; ширина миниатюры в пикселях (целое положительное число, по умолчанию 800);</li>
<li>height&nbsp;&mdash; высота миниатюры в пикселях (целое положительное число, по умолчанию 600);</li>
<li>method&nbsp;&mdash; метод обработки&nbsp;&mdash; максимальное/минимальное сжатие, вырезание фрагмента целого(целое число, по умолчанию максимальное сжатие);</li>
<li>percent&nbsp;&mdash; масштабирование в процентах от оригинала (положительное вещественное число на интервале от 0 до 1, по умолчанию 0);</li>
<li>halign&nbsp;&mdash; вертикальное выравнивание (допустимые значения 0&nbsp;&mdash; по центру, &lt; 0&nbsp;&mdash; выравнивание по верхнему краю, > 0&nbsp;&mdash; выравнивание по нижнему краю, по умолчанию&nbsp;&mdash; 0);</li>
<li>valign&nbsp;&mdash; горизонтальное выравнивание (допустимые значения 0&nbsp;&mdash; по центру, &lt; 0&nbsp;&mdash; выравнивание влево, > 0&nbsp;&mdash; выравнивание вправо, по умолчанию&nbsp;&mdash; 0);</li>
</ul>
<p>Если указать параметр &laquo;масштаб&raquo;, отличный от 0, то для вычисления размеров будет использован он, а ширина и высота проигнорированы.</p>
<p>В классе определены несколько констант:</p>
<ul>
<li>Методы обработки:
<ul>
<li>METHOD_SCALE_MAX&nbsp;&mdash; максимальное сжатие;</li>
<li>METHOD_SCALE_MIN&nbsp;&mdash; минимальное сжатие;</li>
<li>METHOD_CROP&nbsp;&mdash; вырезание фрагмента;</li>
</ul>
</li>
<li>Методы выравнивания:
<ul>
<li>ALIGN_CENTER&nbsp;&mdash; выравнивать по центру, подходит для горизонтального и вертикального выравнивания;</li>
<li>ALIGN_LEFT&nbsp;&mdash; выравнивать по левому краю;</li>
<li>ALIGN_RIGHT&nbsp;&mdash; выравнивать по правому краю;</li>
<li>ALIGN_TOP&nbsp;&mdash; выравнивать по верхнему краю;</li>
<li>ALIGN_BOTTOM&nbsp;&mdash; выравнивать по нижнему краю;</li>
</ul>
</li>
</ul>
<h3 id="examples">Примеры</h3>
<p><div id='stb-container-9246' class='stb-container'><div id='stb-caption-box-9246' class='stb-warning-caption_box stb_caption' >Предупреждение<div id="stb-tool-9246" class="stb-tool" style="float:right; padding:0px; margin:0px auto"><img id="stb-toolimg-9246" style="border: none; background-color: transparent; padding: 0px; margin: 0px auto;" src="http://lobach.info/wp-content/plugins/wp-special-textboxes/images/hide.png" title="Скрыть" /></div></div><div id='stb-body-box-9246' class='stb-warning-body_box stb_body' >примеры намеренно упрощены для иллюстрации работы фильтра. В реальных приложениях необходимы дополнительные проверки. Примеры использования транспорта смотрите в документации</div></div></p>
<p><em>Пример создания фильтра:</em></p>
<pre><code class="php">$filter = new App_Filter_File_ImageResize(array(
    'width' =&gt; 100,
    'heigth' =&gt; 100
));
$upload = new Zend_File_Transfer_Adapter_Http();
$upload-&gt;addFilter($filter);</code></pre>
<p><em>Создание миниатюры:</em></p>
<pre><code class="php">$options = array('width' =&gt; 100, 'height' =&gt; 100);
&nbsp;
$upload = new Zend_File_Transfer_Adapter_Http();
$upload-&gt;addFilter(new App_Filter_File_ImageResize($options))
       -&gt;setDestination('/path/to/upload/directory');
if (!$upload-&gt;receive()) {
    echo implode("\n", $upload-&gt;getMessages());
    return;
}
$filename = $upload-&gt;getFileName();</code></pre>
<p>В переменной <code>$filename</code> будет имя уже уменьшенного файла.</p>
<p><em>Каскадное уменьшение больших изображений:</em></p>
<pre><code class="php">$bigSize   = array('width' =&gt; 1600, 'height' =&gt; 1200);
$smallSize = array('width' =&gt; 800, 'height' =&gt; 600);
&nbsp;
$upload = new Zend_File_Transfer_Adapter_Http();
$upload-&gt;addFilter(new App_Filter_File_ImageResize($bigSize))
       -&gt;addFilter(new App_Filter_File_ImageResize($smallSize))
       -&gt;setDestination('/path/to/upload/directory');
if (!$upload-&gt;receive()) {
    echo implode("\n", $upload-&gt;getMessages());
    return;
}
$filename = $upload-&gt;getFileName();</code></pre>
<p>В этом примере изображение сначала уменьшается до размеров 1600&times;1200, а за тем до 800&times;600. Такое каскадное уменьшение позволяет в итоге получить качество несколько лучшее, чем уменьшение очень большого изображения до очень маленького за один шаг.</p>
<p>В заключении приведу еще раз ссылку на исходный код класса: <a href="https://github.com/bladeofsteel/zfImageFilter/blob/master/library/App/Filter/File/ImageResize.php">App_Filter_File_ImageResize</a>.</p>
<p>Предложения по улучшению и багрепорты приветствуются. Можете оставлять их как здесь, так и на гитхабе.</p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Изменение размера загружаемых изображений on Лобач.info',url: 'http://lobach.info/develop/zf/resizing-loaded-image/',contentID: 'post-175',suggestTags: 'resize,thumbnail,zend framework,Zend_File_Transfer',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/resize/" title="resize" rel="tag">resize</a>, <a href="http://lobach.info/tag/thumbnail/" title="thumbnail" rel="tag">thumbnail</a>, <a href="http://lobach.info/tag/zend-framework/" title="zend framework" rel="tag">zend framework</a>, <a href="http://lobach.info/tag/zend_file_transfer/" title="Zend_File_Transfer" rel="tag">Zend_File_Transfer</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/zf/tips-zf18/" title="Хитрости ZF1.8 (04.05.2009)">Хитрости ZF1.8</a> (1)</li>
	<li><a href="http://lobach.info/develop/zf/zfconf2011-registratio/" title="Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework (05.05.2011)">Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/creating-re-usable-zend_application-resource-plugins/" title="Создание повторно используемых плагинов ресурсов Zend_Application (08.02.2010)">Создание повторно используемых плагинов ресурсов Zend_Application</a> (13)</li>
	<li><a href="http://lobach.info/develop/zf/custom-zend_application-resources/" title="Пользовательские ресурсы для Zend_Application (13.01.2010)">Пользовательские ресурсы для Zend_Application</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/hooks-in-action-helpers/" title="Перехватчики в помощниках действий (06.11.2008)">Перехватчики в помощниках действий</a> (0)</li>
</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=vIufqAKN8bI:k8lpVRvoV7c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/zf/resizing-loaded-image/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Конференция ZFConf Ukraine &amp; MageConf. 27го ноября 2010, Киев</title>
		<link>http://lobach.info/develop/zf/zfconf-ukraine-2010/</link>
		<comments>http://lobach.info/develop/zf/zfconf-ukraine-2010/#comments</comments>
		<pubDate>Fri, 12 Nov 2010 07:00:38 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[анонс]]></category>
		<category><![CDATA[конференция]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=178</guid>
		<description><![CDATA[По просьбе коллег публикую анонс предстоящей конференции: 27го ноября в в Киеве пройдет бесплатная, международная, совместная конференция ZFConf Ukraine &#38; MageConf. Цель конференции&#160;&#8212; объединить лучших специалистов PHP и Zend Framework Украины, России и других стран СНГ. ZFConf Ukraine &#8211; первая &#8230; <a href="http://lobach.info/develop/zf/zfconf-ukraine-2010/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/7erBoaIFqXo_2CZtCpvXnKyVzGo/0/da"><img src="http://feedads.g.doubleclick.net/~a/7erBoaIFqXo_2CZtCpvXnKyVzGo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/7erBoaIFqXo_2CZtCpvXnKyVzGo/1/da"><img src="http://feedads.g.doubleclick.net/~a/7erBoaIFqXo_2CZtCpvXnKyVzGo/1/di" border="0" ismap="true"></img></a></p><p>По просьбе коллег публикую анонс предстоящей конференции:</p>
<p><img vspace="5" hspace="5" border="0" align="left" src="http://habreffect.ru/files/a10/cbbfacb76/zfconfua_and_mageconf.jpg" alt="image" /><br />
27го ноября в в Киеве пройдет бесплатная, международная, совместная конференция <a href="http://zfconf.org.ua">ZFConf Ukraine</a> &amp; <a href="http://mageconf.com">MageConf</a>. Цель конференции&nbsp;&mdash; объединить лучших специалистов PHP и Zend Framework Украины, России и других стран СНГ.</p>
<p>ZFConf Ukraine &ndash; первая в Украине конференция по Zend Framework, проводится в партнерстве с <a href="http://www.zfconf.ru">ZFConf Russia</a> и сообществом <a href="http://zendframework.ru">zendframework.ru</a>. ZFConf Russia была первой конференцией по Zend Framework и прошла в марте этого года в Санкт-Петербурге, Россия, собрав более 200 участников из России, Беларуси, Украины, Литвы и других стран СНГ</p>
<p>Конференция MageConf впервые прошла в мае 2010 года в Киеве. Это была первая конференция из серии PHP and Zend Framework в Украине. Ее посетили более 150 специалистов.</p>
<p>Конференция пройдет <strong>27 ноября</strong>, в Киеве<br />
Титульный спонсор конференции &ndash; компания <a href="http://www.magentocommerce.com/">Magento</a><br />
Место: КиевЭкспоПлаза, ул. Салютная 2б, 3 павильон<br />
Время: 27 ноября 2010 г. (с 11:00 до 19:00)<br />
Длительность: 1 полный день<br />
Формат: доклады в <strong>три потока</strong> и обсуждения на флипчарте (в перерывах)<br />
Язык докладов: русский<br />
Стоимость участия: <strong>бесплатно</strong><br />
Потоки: Zend Framework, PHP, Magento.</p>
<p>Аудитория: Разработчики ПО и специалисты по Project Management с Украины, России и близлежащих стран СНГ. Ожидаемое количество участников &ndash; 500 человек.</p>
<p><strong><a href="http://zfconf.org.ua/conf-2010/category/topics/">Доклады</a></strong></p>
<p><strong>1. Встречайте Zend Framework 2.0</strong><br />
Александр Веремьев / Zend Framework Core команда (<a href="http://www.zend.com/">Zend Technologies</a>)</p>
<p><strong>2. Эволюция ZF: архитектура, шаблоны, рефакторинг</strong><br />
Виктор Фараздаги / Component Maintainer и Contributor ZF 2.0 (4C)</p>
<p><strong>3. Юнит тестирование в Zend Framework 2.0</strong><br />
Ростислав Михайлив / Chief Developer / Software Architect (Gadu-Gadu)</p>
<p><strong>4. Хранение, обработка и отдача статики с использованием \Zend \File. Опыт социальной сети starlook.ru</strong><br />
Кирилл Мокевнин / Senior developer (undev)</p>
<p><strong>5. Чуть сложнее чем Singleton: аннотации, IOC, АОП</strong><br />
Кирилл Чебунин / Senior PHP Developer (Альпари)</p>
<p><strong>6. Doctrine 2</strong><br />
Валерий Рабиевский / Team leader (<a href="http://stfalcon.com">stfalcon.com</a>)</p>
<p>Список еще будет обновляться, вы также можете подать заявку на доклад, если вам есть чем поделиться поделиться с общественностью.  Также были бы рады услышать ваши комментарии по текущим темам.</p>
<p><strong><a href="http://zfconf.org.ua/registration/">Регистрация</a></strong><br />
Регистрируясь на одну конференцию, вы автоматически получаете доступ и на другую.</p>
<p>Если у вас есть предложения, или вы хотите быть спонсором, для связи с нами используйте <a href="http://zfconf.org.ua/contacts/">контакты</a></p>
<p>Регистрируйтесь и следите за обновлениями на <a href="http://zfconf.org.ua">http://zfconf.org.ua</a></p>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Конференция ZFConf Ukraine &amp; MageConf. 27го ноября 2010, Киев on Лобач.info',url: 'http://lobach.info/develop/zf/zfconf-ukraine-2010/',contentID: 'post-178',suggestTags: 'zend framework,анонс,конференция',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>

	Метки: <a href="http://lobach.info/tag/zend-framework/" title="zend framework" rel="tag">zend framework</a>, <a href="http://lobach.info/tag/%d0%b0%d0%bd%d0%be%d0%bd%d1%81/" title="анонс" rel="tag">анонс</a>, <a href="http://lobach.info/tag/konferenciya/" title="конференция" rel="tag">конференция</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/zf/zfconf2011-registratio/" title="Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework (05.05.2011)">Список докладов и финальная регистрация ZFConf 2011 — второй российской конференции по Zend Framework</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/registration-to-first-zend-framework-conference-open/" title="Открыта регистрация на первую Российскую конференцию посвященную Zend Framework (02.02.2010)">Открыта регистрация на первую Российскую конференцию посвященную Zend Framework</a> (0)</li>
	<li><a href="http://lobach.info/events/zfconf-2012/" title="Конференция для веб-разработчиков «ZFConf 2012» (13.04.2012)">Конференция для веб-разработчиков «ZFConf 2012»</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/tips-zf18/" title="Хитрости ZF1.8 (04.05.2009)">Хитрости ZF1.8</a> (1)</li>
	<li><a href="http://lobach.info/develop/zf/creating-re-usable-zend_application-resource-plugins/" title="Создание повторно используемых плагинов ресурсов Zend_Application (08.02.2010)">Создание повторно используемых плагинов ресурсов Zend_Application</a> (13)</li>
</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=lMcABl-RuoI:_5EXxCIruw0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/zf/zfconf-ukraine-2010/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Вышел ZF 1.11</title>
		<link>http://lobach.info/develop/zf/%d0%b2%d1%8b%d1%88%d0%b5%d0%bb-zf-1-11/</link>
		<comments>http://lobach.info/develop/zf/%d0%b2%d1%8b%d1%88%d0%b5%d0%bb-zf-1-11/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 16:00:03 +0000</pubDate>
		<dc:creator>Олег Лобач</dc:creator>
				<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=176</guid>
		<description><![CDATA[Вчера вышел Zend Framework 1.11. Вероятно, это будет последний релиз в ветке 1.х. Дальнейшее развитие фреймворка продолжится в ветке 2.х. Главной причиной, побудившей меня написать эту заметку, стало включение моего класса для тестирования рассылки почты в этот релиз. Хочу выразить &#8230; <a href="http://lobach.info/develop/zf/%d0%b2%d1%8b%d1%88%d0%b5%d0%bb-zf-1-11/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<p><a href="http://feedads.g.doubleclick.net/~a/K7f5R9dXyWYA7s0JVRXbt3JTb74/0/da"><img src="http://feedads.g.doubleclick.net/~a/K7f5R9dXyWYA7s0JVRXbt3JTb74/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/K7f5R9dXyWYA7s0JVRXbt3JTb74/1/da"><img src="http://feedads.g.doubleclick.net/~a/K7f5R9dXyWYA7s0JVRXbt3JTb74/1/di" border="0" ismap="true"></img></a></p><p>Вчера вышел Zend Framework 1.11. Вероятно, это будет последний релиз в ветке 1.х. Дальнейшее развитие фреймворка продолжится в ветке 2.х.</p>
<p>Главной причиной, побудившей меня написать эту заметку, стало включение моего класса для <a href="/develop/zf/mail-send-testing/">тестирования рассылки почты</a> в этот релиз. Хочу выразить огромную благодарность за работу по внедрению этого компонента в ZF <a href="http://lcf.name/">Александру Стешенко</a>.</p>
<p>Ну, и раз начал, кратко опишу что нового появилось в этом релизе:</p>
<ul>
<li>поддержка мобильных устройств с помощью компонента Zend_Http_UserAgent</li>
<li>поддержка SimpleCloud API (класс Zend_Cloud)</li>
<li>Dojo обновлен до версии 1.5.0</li>
<li>поддержка Amazon SimpleDb</li>
<li>поддержка eBay Findings API</li>
<li>Zend_Db совместима с <a href="http://mariadb.org/">MariaDB</a></li>
<li>добавлены два новых формата конфигурационных файлов&nbsp;&mdash; YAML и JSON</li>
<li>появился сервис для сокращения ссылок. В комплекте идут адаптеры для  http://jdem.cz и http://tinyurl.com</li>
<li>добавлены вью-хелперы:
<ul>
<li>Zend_View_Helper_UserAgent (поддержка мобильных устройств)</li>
<li>Zend_View_Helper_TinySrc (сокращение ссылок)</li>
<li>Zend_View_Helper_Gravatar (подгрузка аватарок из Gravatar-а)</li>
</ul>
</li>
<li>а так же множество багфиксов</li>
</ul>
<div class="evernoteSiteMemory"><a href="javascript:" onclick="Evernote.doClip({title: 'Вышел ZF 1.11 on Лобач.info',url: 'http://lobach.info/develop/zf/%d0%b2%d1%8b%d1%88%d0%b5%d0%bb-zf-1-11/',contentID: 'post-176',suggestTags: '',providerName: 'Лобач.info',styling: 'text' });return false" class="evernoteSiteMemoryLink"><img src="http://static.evernote.com/article-clipper-rus.png" class="evernoteSiteMemoryButton" /><br />
				</a>
<div class="evernoteSiteMemoryClear">&nbsp;</div>
</div>
Этот пост без меток.
	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li>Нет похожих записей</li>
	</ul>

<div class="feedflare">
<a href="http://feed.lobach.info/~ff/lobach?a=Rx_jCVxRcmU:LAIwAzDR-eM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/lobach?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/zf/%d0%b2%d1%8b%d1%88%d0%b5%d0%bb-zf-1-11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

