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

<channel>
	<title>Блог веб-разработчика &#187; Разработка</title>
	<atom:link href="http://tigor.com.ua/blog/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://tigor.com.ua/blog</link>
	<description>О разработке веб-приложений на Symfony</description>
	<lastBuildDate>Fri, 18 Jun 2010 08:27:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Обзор плагинов для загрузки файлов и картинок для TinyMce и CKEditor</title>
		<link>http://tigor.com.ua/blog/2010/05/18/file-and-image-management-plugins-for-tinymce-and-ckeditor/</link>
		<comments>http://tigor.com.ua/blog/2010/05/18/file-and-image-management-plugins-for-tinymce-and-ckeditor/#comments</comments>
		<pubDate>Tue, 18 May 2010 00:06:01 +0000</pubDate>
		<dc:creator>ingvar</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[ckeditor]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[tinymce]]></category>

		<guid isPermaLink="false">http://tigor.com.ua/blog/?p=1628</guid>
		<description><![CDATA[Представляем Вашему вниманию подборку плагинов для WYSIWYG редакторов TinyMce и CKEditor для загрузки файлов, картинок и фотографий, так называемые file and image management plugins.
Кроме двух коммерческих плагинов от разработчиков редакторов в обзоре рассматриваются бесплатные аналоги. Плагины легко интегрируются с редакторами, некоторые даже работают в Standalone режиме.




Plugin
Версия
Демо
Лицензия
Стоимость
Описание




MCImageManager
3.1.2
2010-03-09
Демо
$41 (Site)
Плагин от разработчиков TinyMce. В функционале заявлено &#171;Crop &#38; [...]]]></description>
			<content:encoded><![CDATA[<p>Представляем Вашему вниманию подборку плагинов для WYSIWYG редакторов <strong>TinyMce</strong> и <strong>CKEditor</strong> для загрузки файлов, картинок и фотографий, так называемые <strong>file and image management plugins</strong>.</p>
<p>Кроме двух коммерческих плагинов от разработчиков редакторов в обзоре рассматриваются бесплатные аналоги. Плагины легко интегрируются с редакторами, некоторые даже работают в Standalone режиме.</p>
<p><span id="more-1628"></span></p>
<table class="review">
<thead>
<tr>
<th>Plugin</th>
<th>Версия</th>
<th>Демо</th>
<th>Лицензия<br />
Стоимость</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td class="left"><a href="http://tinymce.moxiecode.com/plugins_imagemanager.php">MCImageManager</a></td>
<td>3.1.2<br />
2010-03-09</td>
<td><a href="http://tinymce.moxiecode.com/examples/full.php">Демо</a></td>
<td>$41 (Site)</td>
<td class="left">Плагин от разработчиков <a href="http://tinymce.moxiecode.com">TinyMce</a>. В функционале заявлено &laquo;Crop &amp; Resize&raquo;, автоматическое создание превьюшек, использование Ajax, поддержка мультиязычности. Второй плагин, который предлагают &#8211; это <a href="http://tinymce.moxiecode.com/plugins_filemanager.php">MCFileManager</a>, отличия в том, что нет функционала для обработки изображений, зато возможна работа с архивами zip.</td>
</tr>
<tr>
<td class="left"><a href="http://ckfinder.com/">CKFinder</a></td>
<td>1.4.3<br />
2010-02-18</td>
<td><a href="http://ckfinder.com/demo">Демо</a></td>
<td>$59 (Site)</td>
<td class="left">Решение от разработчиков <a href="http://ckeditor.com/">CKEditor</a>. Хороший плагин, удобный, поддержка мультиязычности, Ajax, ACL, Standalone режим.</td>
</tr>
<tr>
<td class="left"><a href="http://www.im.cyberapp.ru/ru/index.html">Cyber Image Manager</a></td>
<td>1.1<br />
2010-05-05</td>
<td><a href="http://www.im.cyberapp.ru/ru/wysiwyg/tinymce.html">Демо</a></td>
<td>freeware</td>
<td class="left">Ajax, поддержка тем, хорошая документация. Русскоязычный <a href="http://www.cyberapp.ru/forum/index.php">форум</a>.</td>
</tr>
<tr>
<td class="left"><a href="http://www.imglib.endofinternet.net/">imgLib</a></td>
<td>0.1.1<br />
2010.03.22</td>
<td><a href="http://www.imglib.endofinternet.net/ru/demo.html">Демо</a></td>
<td>MIT или BSD Open Source license.</td>
<td class="left">Хороший набор возможностей, документация на русском.</td>
</tr>
<tr>
<td class="left"><a href="http://www.phpletter.com/Demo/Tinymce-Ajax-File-Manager/">Ajax file/Image manager</a></td>
<td>1.0 RC5<br />
2010-02-07</td>
<td><a href="http://demo.phpletter.com/tinymce_test.php">Демо</a></td>
<td>GPL и MPL</td>
<td class="left">Поддержка Ajax, ACL, встроенный редактор картинок, мультиязычность, поддержка тем. Минусы: превьюшки создаются на лету, когда заходишь в папку.</td>
</tr>
<tr>
<td class="left"><a href="http://dustweb.ru/log/projects/tinymce_images/">TinyMCE Image Manager</a></td>
<td>1.1 beta 2<br />
2009-04-03</td>
<td><a href="http://tiny.dustweb.ru/">Демо</a></td>
<td>Creative Commons Attribution-Share Alike 3.0 Unported License</td>
<td class="left">Разработчик плагина <a href="http://dustweb.ru/log/about/vcard/">Андрей Антонов</a>. На сайте разработчика можно ознакомиться со всеми возможностями, планами, задать вопросы. Как предупредил автор документации и инструкции по установке нет.</td>
</tr>
<tr>
<td class="left"><a href="http://archiv.pwnd.nl/home">Archive</a></td>
<td>1.2.1<br />
2009-10-27</td>
<td><a href="http://archiv.pwnd.nl/example">Демо</a></td>
<td>LGPL license</td>
<td class="left">Ajax, ACL, легкий. Но отображение информации о файлах во всплывающих окнах напрягает.</td>
</tr>
<tr>
<td class="left"><a href="http://www.lunarvis.com/products/tinymcefilebrowserwithupload.php">TinyBrowser Web File Browser</a></td>
<td>1.41<br />
2009-05-05</td>
<td>-</td>
<td>GNU General Public License</td>
<td class="left">Хороший редактор. Ajax, мультиязычность, Standalone, легкий. Страничка на  <a href="http://code.google.com/p/tinybrowser/">google code</a>.</td>
</tr>
<tr>
<td class="left"><a href="http://kfm.verens.com/">KFM &#8211; Kae&#8217;s File Manager</a></td>
<td>1.4.5<br />
2010-01-20</td>
<td><a href="http://kfm.verens.com/">Демо</a></td>
<td>freeware</td>
<td class="left">Этот продукт больше похож на автономное решение для организации хранения файлов, много разных фич плюс интеграция с редакторами. Достаточно тяжеловат.</td>
</tr>
<tr>
<td class="left"><a href="http://p4a2.crealabsfoundation.org/tinymcpuk">TinyMCPUK</a></td>
<td>0.3<br />
2006-10-23</td>
<td>-</td>
<td>GNU LGPL license</td>
<td class="left">Последняя версия плагина работает с TinyMCE 2.0.8.</td>
</tr>
</tbody>
</table>
<p>Плагины практически очень похожи между собой: аякс, флеш-загрузчики, создание превьюшек. Тут уж каждый сам решит, какое решение больше подходит под задачи и насколько оно удобное.</p>
<p>Выделить можно несколько хороших плагинов:</p>
<ul>
<li>CKFinder, но он платный</li>
<li>TinyBrowser Web File Browser, удобный, простой</li>
<li>Ajax file/Image manager &#8211; хорош всем, за исключением работы с превьюшками, т.к. создает их на лету каждый раз, когда просматриваем папку</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tigor.com.ua/blog/2010/05/18/file-and-image-management-plugins-for-tinymce-and-ckeditor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Инструменты обеспечение качества программного продукта для PHP</title>
		<link>http://tigor.com.ua/blog/2010/04/23/quality-assurance-in-php-projects-2/</link>
		<comments>http://tigor.com.ua/blog/2010/04/23/quality-assurance-in-php-projects-2/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 07:38:57 +0000</pubDate>
		<dc:creator>ingvar</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[QA]]></category>

		<guid isPermaLink="false">http://tigor.com.ua/blog/?p=1617</guid>
		<description><![CDATA[В тексте статьи находится  краткий обзор инструментов с помощью которых можно анализировать  различные характиристики в приложениях созданных на PHP. Данный материал появился на свет в  результате некоторых экспериментов в области непрерывной интеграции, и  должен был являться частью статьи про непрерывную интеграцию (спойлерить  пока не буду, боюсь сглазить) все в том [...]]]></description>
			<content:encoded><![CDATA[<p>В тексте статьи находится  краткий обзор инструментов с помощью которых можно анализировать  различные характиристики в приложениях созданных на <a href="http://lurkmore.ru/PHP">PHP</a>. Данный материал появился на свет в  результате некоторых экспериментов в области непрерывной интеграции, и  должен был являться частью статьи про непрерывную интеграцию (спойлерить  пока не буду, боюсь сглазить) все в том же РНР, но я решил все-таки  выделить его в самостоятельный обзор, так как возможно, в последующих  статьях я буду ссылаться на него, а так же надеюсь узнать об аналогичных  инструментах еще не попавших мне на глаза. Некоторые инструменты уже  были рассмотрены достаточно подробно, но тем не менее полного списка  всех доступных еще не было.</p>
<p><span id="more-1617"></span></p>
<h6><strong>PHP_CodeCoverage</strong></h6>
<p>PHP_CodeCoverage это библиотека, которая обеспечивает сбор, обработку и  отображение информации о покрытии кода тестами, требует xdebug, а так  же использует некоторые сторонние библиотеки. Более подробная информация  находится на официальном сайте.</p>
<ul>
<li>Автор: <a href="http://sebastian-bergmann.de/">Sebastian Bergmann</a></li>
<li>Официальный сайт: <a href="http://github.com/sebastianbergmann/php-code-coverage">http://github.com/sebastianbergmann/php-code-coverage</a></li>
<li>Официальный PEAR канал: <a href="http://pear.phpunit.de/">http://pear.phpunit.de/</a></li>
<li>Текущая версия: 0.9.0 (alpha)</li>
</ul>
<h6><strong>PhpDocumentor</strong></h6>
<p>На основании комментариев в исходном коде генерирует соответствующую  документацию, имеет уйму возможностей в числе которых презентабельный и  дружественный к пользователю шаблоны.</p>
<ul>
<li>Автор: <a href="http://blog.joshuaeichorn.com/">Joshua Eichorn</a></li>
<li>Официальный сайт: <a href="http://www.phpdoc.org/">http://www.phpdoc.org/</a></li>
<li>Официальный PEAR канал: <a href="http://pear.php.net/">http://pear.php.net/</a></li>
</ul>
<h6><strong>PHP Copy/Paste Detector</strong> [phpcpd]</h6>
<p>Название говорит само за себя: находит дублированный код и сообщает о  нем.</p>
<ul>
<li>Автор: <a href="http://sebastian-bergmann.de/">Sebastian Bergmann</a></li>
<li>Официальный сайт: <a href="http://github.com/sebastianbergmann/phpcpd">http://github.com/sebastianbergmann/phpcpd</a></li>
<li>Официальный PEAR канал: <a href="http://pear.php.net/">http://pear.php.net/</a></li>
<li>Текущая версия: 1.3.1 (stable)</li>
</ul>
<h6><strong>PHP_Depend</strong></h6>
<p>Собирает и отображает статистическую информацию о проекте.</p>
<ul>
<li>Автор: <a href="http://manuel-pichler.de/">Manuel Pichler</a></li>
<li>Официальный сайт: <a href="http://pdepend.org/">http://pdepend.org/</a></li>
<li>Официальный PEAR канал: <a href="http://pear.pdepend.org/">http://pear.pdepend.org/</a></li>
<li>Текущая версия: 0.9.11 (beta)</li>
</ul>
<h6><strong>PHP_PMD</strong></h6>
<p>Ответвление от PHP_Depend: отображает информацию о размерах кода,  используемых именах, неиспользуемом коде. <a href="http://habrahabr.ru/blogs/php/90400/">Обзор</a> от <a href="http://devman.habrahabr.ru/">DevMan</a></p>
<ul>
<li>Автор: <a href="http://manuel-pichler.de/">Manuel Pichler</a></li>
<li>Официальный сайт: <a href="http://phpmd.org/">http://phpmd.org/</a></li>
<li>Официальный PEAR канал: <a href="http://pear.phpmd.org/">http://pear.phpmd.org/</a></li>
<li>Текущая версия: 0.2.5 (alpha)</li>
</ul>
<h6><strong>PHP_CodeSniffer</strong></h6>
<p>Позволяет наблюдать за состоянием PHP, Javascript и CSS файлов и  определять отклонения от принятых стандартов кодирования. <a href="http://habrahabr.ru/blogs/php/89192/">Обзор</a> от <a href="http://devman.habrahabr.ru/">DevMan</a></p>
<ul>
<li>Автор: <a href="http://gregsherwood.blogspot.com/">Greg Sherwood</a></li>
<li>Официальный сайт: <a href="http://matrix.squiz.net/developer/tools/php_cs">http://matrix.squiz.net/developer/tools/php_cs</a></li>
<li>Официальный PEAR канал: <a href="http://pear.php.net/">http://pear.php.net/</a></li>
<li>Текущая версия: 1.2.2 (stable)</li>
</ul>
<h6><strong>PHPUnit</strong></h6>
<p>Пожалуй самый известный инструмент для модульного тестирования, думаю в  представлении не нуждается.</p>
<ul>
<li>Автор: <a href="http://sebastian-bergmann.de/">Sebastian Bergmann</a></li>
<li>Официальный сайт: <a href="http://www.phpunit.de/">http://www.phpunit.de/</a></li>
<li>Официальный PEAR канал: <a href="http://pear.phpunit.de/">http://pear.phpunit.de/</a></li>
<li>Текущая версия: 3.4.12 (stable)</li>
</ul>
<h6><strong>PHP_CodeBrowser</strong></h6>
<p>Обеспечивает просмотр кода с синтаксической подсветкой, имеет богатые  возможности по визуализации, может использовать отчеты от: phpunit,  phpcpd, padawan, phpcs. Из <a href="http://blog.thinkphp.de/archives/464-PHP_CodeBrowser-Release-version-0.1.0.html">этого  обзора</a> можно понять насколько инструмент перспективный.</p>
<ul>
<li>Автор: <a href="http://www.mayflower.de/">Mayflower GmbH</a></li>
<li>Официальный сайт: <a href="http://github.com/mayflowergmbh/PHP_CodeBrowser">http://github.com/mayflowergmbh/PHP_CodeBrowser</a></li>
<li>Официальный PEAR канал: <a href="http://pear.phpunit.de/">http://pear.phpunit.de/</a></li>
<li>Текущая версия: 0.1.3 (alpha)</li>
</ul>
<h6><strong>phploc</strong></h6>
<p>Еще один инструмент собирающий статистическую информацию о проекте.</p>
<ul>
<li>Автор: <a href="http://sebastian-bergmann.de/">Sebastian Bergmann</a></li>
<li>Официальный сайт: <a href="http://github.com/sebastianbergmann/phploc">http://github.com/sebastianbergmann/phploc</a></li>
<li>Официальный PEAR канал: <a href="http://pear.phpunit.de/">http://pear.phpunit.de/</a></li>
<li>Текущая версия: 1.5.1 (stable)</li>
</ul>
<h6><strong>phpdcd</strong></h6>
<p>Детектор неиспользуемого кода (Dead Code Detector) для PHP. Он  сканирует PHP проект на предмет всех определенных функций и методов и  сообщает о них как о неиспользуемых если из вызов не встречается хотя бы  однажды</p>
<ul>
<li>Автор: <a href="http://sebastian-bergmann.de/">Sebastian Bergmann</a></li>
<li>Официальный сайт: <a href="http://github.com/sebastianbergmann/phpdcd">http://github.com/sebastianbergmann/phpdcd</a></li>
<li>Официальный PEAR канал: <a href="http://pear.phpunit.de/">pear.phpunit.de</a></li>
<li>Текущая версия: 0.9.2 (beta)</li>
</ul>
<h6><strong>Padawan</strong></h6>
<p>Инструмент для обнаружения антипаттернов, обходных путей и прочих  неприятностей.</p>
<ul>
<li>Автор: <a href="http://sebastian-bergmann.de/">Sebastian Bergmann</a></li>
<li>Официальный сайт: <a href="http://github.com/sebastianbergmann/padawan">http://github.com/sebastianbergmann/padawan</a></li>
<li>Официальный PEAR канал: неизвестен</li>
<li>Текущая версия: неизвестна</li>
</ul>
<h6><strong>PHP_CachegrindParser</strong></h6>
<p>Обработчик для cachegrind файлов создающий xml отчеты для последующего  использования в CI.</p>
<ul>
<li>Автор: <a href="http://www.mayflower.de/">Mayflower GmbH</a></li>
<li>Официальный сайт: <a href="http://github.com/mayflowergmbh/PHP_CachegrindParser">http://github.com/mayflowergmbh/PHP_CachegrindParser</a></li>
<li>Официальный PEAR канал: неизвестен</li>
<li>Текущая версия: неизвестна</li>
</ul>
<p><strong>Источник статьи</strong><br />
<a href="http://habrahabr.ru/blogs/php/91777/">Хабрахабр: PHP &#8211; Обеспечение качества программного продукта</a></p>
<p><strong>Что ещё можно почитать:</strong><br />
<a href="http://sebastian-bergmann.de/software/">http://sebastian-bergmann.de/software/</a><br />
<a href="http://manuel-pichler.de/">http://manuel-pichler.de/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tigor.com.ua/blog/2010/04/23/quality-assurance-in-php-projects-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ZfConf 2010 &#8211; первая в России конференция по Zend Framework</title>
		<link>http://tigor.com.ua/blog/2010/02/01/zfconf/</link>
		<comments>http://tigor.com.ua/blog/2010/02/01/zfconf/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 09:19:21 +0000</pubDate>
		<dc:creator>ingvar</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend framework]]></category>
		<category><![CDATA[zfconf]]></category>

		<guid isPermaLink="false">http://tigor.com.ua/blog/?p=1440</guid>
		<description><![CDATA[В конце этого марта в Санкт-Петербурге пройдет первая в России конференция по Zend Framework. На днях закончился прием тезисов по планируемым докладам. В состав докладчиков вошли ведущие участники русскоязычного сообщества ZF, опытнейшие специалисты и лично один из создателей Zend Framework.
На данный момент уже открыта предварительная регистрация на конференцию. Для решения ряда вопросов организаторам очень важно [...]]]></description>
			<content:encoded><![CDATA[<p>В конце этого марта в Санкт-Петербурге пройдет первая в России <a href="http://www.zfconf.ru/"><strong>конференция по Zend Framework</strong></a>. На днях закончился прием тезисов по планируемым докладам. В состав докладчиков вошли ведущие участники русскоязычного сообщества ZF, опытнейшие специалисты и лично один из создателей Zend Framework.</p>
<p>На данный момент уже открыта <a href="http://www.zfconf.ru/pre-registration.php">предварительная регистрация</a> на конференцию. Для решения ряда вопросов организаторам очень важно сейчас понять приблизительное количество человек, которые смогут посетить конференцию или принять участие в ней.</p>
<p>Каждый предстоящий доклад возможно обсудить на форуме ZF-сообщества. Ваше мнение очень важно для авторов!</p>
<p><span id="more-1440"></span></p>
<p>Планируемые <a href="http://zendframework.ru/forum/index.php?board=32.0">доклады</a>:</p>
<ul>
<li> Жизненный цикл предложений (proposals) в проекте Zend Framework (Александр Веремьев, Zend Technologies)</li>
<li>Zend_Search_Lucene в деталях (Александр Веремьев, Zend Technologies)</li>
<li>Zend Framework и производительность (Александр Махомет, ZendFramework.ru)</li>
<li>Zend Framework и MVC, «толстая» модель (Александр Стешенко, Norada Corporation)</li>
<li>ФотоСтрана.ru: Прототипирование с использованием ZF (Леонид Жаворонков, ФотоСтрана.ru)</li>
<li>Использование очередей сообщений в повседневных проектах (Денис Баклыков, Обновление)</li>
<li>Zend Framework и Doctrine (Степан Танасийчук, stfalcon.com)</li>
<li>Zend Framework и мультиязычность (Степан Танасийчук, stfalcon.com)</li>
<li>История проекта e-Штаб (Анатолий Ларин, e-Легион)</li>
<li>Что нового несет нам Zend Framework 2.0? (Надежда Блинова, Георгий Туревич, Wizartech)</li>
<li>Интеграция Zend Framework c Javascript-фрэймворками jQuery и Dojo Toolkit (Георгий Туревич, Wizartech)</li>
</ul>
<p>Смело обсуждайте доклады и регистрируйтесь!</p>
<p>За последними новостями можно следить здесь:<br />
RSS-канал: <a href="http://feeds.feedburner.com/zfconf">feeds.feedburner.com/zfconf</a><br />
Twitter: <a href="http://twitter.com/zfconf">@zfconf</a><br />
Группа Вконтакте: <a href="http://vkontakte.ru/club14951507">vkontakte.ru/club14951507</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tigor.com.ua/blog/2010/02/01/zfconf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XHprof: производительность популярных PHP фреймворков</title>
		<link>http://tigor.com.ua/blog/2009/12/17/xhprof-php-framework-performance-comparision/</link>
		<comments>http://tigor.com.ua/blog/2009/12/17/xhprof-php-framework-performance-comparision/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 21:44:08 +0000</pubDate>
		<dc:creator>ingvar</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[highload]]></category>
		<category><![CDATA[xhprof]]></category>

		<guid isPermaLink="false">http://tigor.com.ua/blog/?p=1363</guid>
		<description><![CDATA[В первом посте про XHProf: XHProf – профайлер PHP от Facebook, рассказывалось, что это за инструмент, как его установить, настроить и использовать. Решил провести небольшой тест производительности популярных фреймворков, используя данные XHProf.
Цель теста &#8211; посмотреть, какие данные получим по таким показателям, как:

Wall Time (a.k.a. Elapsed time or wall clock time)
CPU (CPU time in user space [...]]]></description>
			<content:encoded><![CDATA[<p>В первом посте про XHProf: <a href="http://tigor.com.ua/blog/2009/12/13/profiling-php-with-xhprof/">XHProf – профайлер PHP от Facebook</a>, рассказывалось, что это за инструмент, как его установить, настроить и использовать. Решил провести небольшой тест производительности популярных фреймворков, используя данные XHProf.</p>
<p><strong>Цель теста &#8211; посмотреть, какие данные получим по таким показателям, как:</strong></p>
<ul>
<li>Wall Time (a.k.a. Elapsed time or wall clock time)</li>
<li>CPU (CPU time in user space + CPU time in kernel space)</li>
<li>MemUse (Memory usage)</li>
<li>PeakMemUse (Peak memory usage)</li>
<li>Number of Function Calls</li>
</ul>
<p><span id="more-1363"></span></p>
<h3><strong>Какие фреймворки протестировали?</strong></h3>
<ul>
<li>Yii 1.0.11</li>
<li>Yii 1.1.rc</li>
<li><a href="http://www.yiiframework.com/doc/guide/ru/topics.performance#---------------------------x-9x">Yiilite</a> 1.0.11 / 1.1.rc (Bootstrap файл, где собраны вместе часто используемые классы. Плюс все комментарии и выражения трассировки вырезаются)</li>
<li>Symfony 1.2.11</li>
<li>Symfony 1.4.2</li>
<li>Zend Framework 1.9.6</li>
<li>DooPHP 1.2</li>
<li>Codeigniter 1.7.2</li>
<li>Kohana 2.3.4</li>
<li>Kohana 3.0.3</li>
<li>Cakephp 1.2.5 (тормозил больше всех, видно в 1.3.0 починили)</li>
<li>Cakephp 1.3.0 alpha</li>
<li>Recess 0.20 (был взят ради спортивного интереса, т.к. позиционирует себя как: Easy, Reliable, Fast, Extensible)</li>
</ul>
<p>Почему именно эти PHP фреймворки? Эти проекты интересные, популярные <img src='http://tigor.com.ua/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  и все ещё развиваются.</p>
<h3><strong>Как проводилось тестирование?</strong></h3>
<p>Для получения результатов выполнялось около 10 выборок по каждому фреймворку. И в качестве данных использовались<br />
лучшие результаты с наименьшими задержками времени. </p>
<p><strong>Условия тестирования</strong></p>
<ul>
<li>Операционная система: FreeBSD 8.0</li>
<li>Web сервер: Apache httpd 2.2.13</li>
<li>PHP 5.2.11 + APC + XHProf + много других модулей</li>
<li>CPU: VIA C7 1500MHz</li>
<li>Оперативная память: 1GB</li>
<li>Винчестер: 250 GB 5400 RPM 8MB SATA</li>
</ul>
<p><strong>Режимы тестирования</strong></p>
<ol>
<li>Выключенный APC</li>
<li>С включенным APC (apc.stat = 1)</li>
<li>С включенным APC (apc.stat = 0)</li>
</ol>
<blockquote><p>
<strong>&laquo;apc.stat = 1&#8243;</strong> &#8211; штатный режим APC, проверяется дата модификации файла, и если она изменилась, то кеш для файлов обновляется. В случае, если <strong>&laquo;apc.stat = 0&#8243;</strong>, то проверка не проводится, что положительно влияет на производительность. НО в этом случае, пока не сбросите кеш вручную, данные не обновятся.
</p></blockquote>
<p><strong>Тестируемые приложения</strong></p>
<p>Для каждого фреймворка было написано свое приложение. Каждое приложение выводит строку &laquo;Hello world!&raquo;. Все настройки фреймворков использовались по умолчанию. За основу была взята идея <a href="http://code.google.com/p/phpmark/">phpmark</a>.</p>
<h3><strong>Результат #1. APC выключен</strong></h3>
<p><img src="http://tigor.com.ua/blog/wp-content/uploads/2009/12/1_xhprof_without_apc.png" alt="1_xhprof_without_apc" title="1_xhprof_without_apc" width="725" height="400" class="alignnone size-full wp-image-1405" /></p>
<p>Yiilite не рекомендуется использовать без кеширования байткода (APC, XCache, eAccelerator), что собственно и видно по результатам теста.<br />
<br/></p>
<h3><strong>Результат #2. APC включен (apc.stat = 1)</strong></h3>
<p><img src="http://tigor.com.ua/blog/wp-content/uploads/2009/12/2_xhprof_with_apc.png" alt="2_xhprof_with_apc" title="2_xhprof_with_apc" width="725" height="400" class="alignnone size-full wp-image-1407" /></p>
<p>А тут наоборот, Yiilite отрабатывает быстрее, но потребляет больше памяти.<br />
<br/></p>
<h3><strong>Результат #3. APC включен (apc.stat = 0)</strong></h3>
<p><img src="http://tigor.com.ua/blog/wp-content/uploads/2009/12/3_xhprof_with_apc_stat_eq_0.png" alt="3_xhprof_with_apc_stat_eq_0" title="3_xhprof_with_apc_stat_eq_0" width="725" height="400" class="alignnone size-full wp-image-1408" /></p>
<p>Очень интересные цифры получаются. Например, Wall Time (ms) у Zend Framework 1.9.6 уменьшилось практически на 50%, для других на 5-30 мс. Но режим этот не всем подойдет, и к тому же тут свои нюансы, связанные с очищением кеша.<br />
<br/></p>
<h3><strong>Сравниваем результаты &laquo;Wall Time (ms)&raquo; для всех режимов</strong></h3>
<p><img src="http://tigor.com.ua/blog/wp-content/uploads/2009/12/4_xhprof_wall_time_comparison.png" alt="4_xhprof_wall_time_comparison" title="4_xhprof_wall_time_comparison" width="680" height="400" class="alignnone size-full wp-image-1413" /></p>
<p><img src="http://tigor.com.ua/blog/wp-content/uploads/2009/12/5_xhprof_wall_time_comparison_graph_2.png" alt="5_xhprof_wall_time_comparison_graph_2" title="5_xhprof_wall_time_comparison_graph_2" width="968" height="701" class="alignnone size-full wp-image-1414" /></p>
<p>Как можно убедиться, использование APC очень положительно сказывается на производительсности, время загрузки страницы увеличивается в разы для некоторых фреймворков.<br />
<br/></p>
<h3><strong>Сравниваем результаты &laquo;MemUse (kb)&raquo; для всех режимов</strong></h3>
<p><img src="http://tigor.com.ua/blog/wp-content/uploads/2009/12/6_xhprof_mem_use_comparison_graph.png" alt="6_xhprof_mem_use_comparison_graph" title="6_xhprof_mem_use_comparison_graph" width="952" height="640" class="alignnone size-full wp-image-1415" /></p>
<p>Тут видно положительный эффект от использование APC &#8211; потребления памяти уменьшается в раза 2-3.<br />
<br/></p>
<h3><strong>Update &#8211; Yii with View</strong></h3>
<p>Для Yii было заменено приложение, чтобы задействовать View. Все графики обновлены. Если сравнивать с предыдущими значениями Yii, то новые увеличились на 5-10 мс.</p>
<h3><strong>Выводы</strong></h3>
<p>Вот так с помощью XHProf стало видно, кто у нас тяжеловес из PHP фреймворков <img src='http://tigor.com.ua/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . О чем это свидетельствует? Да ровным счетом ничего &#8211; это всего лишь &laquo;Hello World!&raquo; да и железка слабовата&#8230; <img src='http://tigor.com.ua/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Если взять реальный сайт с БД, его сложной бизнес логикой, то цифры будут совсем другие.</p>
<p>Я в своей работе использую Symfony 1.2.11. Да, он тяжеловат, но его плюсы перекрывают все его минусы, по моему мнению. К тому же, если взять нормальный сервачок (Opteron X2 2.2 GHz, 8 GB + хорошие веники) вместо VIA C7 1500MHz, то тот же самый &laquo;Hello World!&raquo; вместо 177 мс загрузится на Opteron за 23 мс, а реальный сайт &#8211; 146 мс. Вот так! Но это уже другая история.</p>
<p>А вот Yii Framework нахожу очень интересным и серьезным проектом. Осталось его испытать в боевых условиях.</p>
<h3><strong>Ссылке по теме</strong></h3>
<ul>
<li><a href="http://mirror.facebook.net/facebook/xhprof/doc.html">XHProf Documentation</a></li>
<li><a href="http://tigor.com.ua/blog/2009/12/13/profiling-php-with-xhprof/ ">XHProf – профайлер PHP от Facebook</a></li>
<li><a href="http://tigor.com.ua/blog/2009/06/10/php-frameworks/">Список современных PHP-фреймворков – смотрим и выбираем</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tigor.com.ua/blog/2009/12/17/xhprof-php-framework-performance-comparision/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>XHprof &#8211; профайлер PHP от Facebook</title>
		<link>http://tigor.com.ua/blog/2009/12/13/profiling-php-with-xhprof/</link>
		<comments>http://tigor.com.ua/blog/2009/12/13/profiling-php-with-xhprof/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 15:32:05 +0000</pubDate>
		<dc:creator>ingvar</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Отладка]]></category>
		<category><![CDATA[highload]]></category>
		<category><![CDATA[xhprof]]></category>

		<guid isPermaLink="false">http://tigor.com.ua/blog/?p=1325</guid>
		<description><![CDATA[Профилирование кода позволяет выявить медленные участки в коде, что позволит в случае необходимости устранить их.
Новый PHP профайлер XHprof от компании Facebook &#8211; это альтернатива Xdebug (PHP профайлер Xdebug). XHprof был разработан специально для Facebook и начиная с март 2009 года его исходный код стал доступен для скачивания.

Как работает XHprof?
XHProf работает по принципу декомпозиции системы на [...]]]></description>
			<content:encoded><![CDATA[<p>Профилирование кода позволяет выявить медленные участки в коде, что позволит в случае необходимости устранить их.</p>
<p>Новый PHP профайлер XHprof от компании Facebook &#8211; это альтернатива Xdebug (<a href="http://tigor.com.ua/blog/2008/07/21/php-profiler-debugger-xdebug/">PHP профайлер Xdebug</a>). XHprof был разработан специально для Facebook и начиная с март 2009 года его исходный код стал доступен для скачивания.</p>
<p><span id="more-1325"></span></p>
<h3><strong>Как работает XHprof?</strong></h3>
<p>XHProf работает по принципу декомпозиции системы на вызовы функций (методов) и построения статистики в разрезе их ресурсопотребления. В результате получаем информацию: количество выделяемой памяти, количество вызовов функций, время исполнения и т.д.</p>
<h3><strong>Установка XHProf</strong></h3>
<p>С марта 2009 года XHprof доступен как пакет <a href="http://pecl.php.net/package/xhprof">PECL</a>, поэтому его установка не составит особого труда. Для Windows пакет не доступен.</p>
<pre class="brush: bash;">
# pecl search xhprof
Retrieving data...0%
Matched packages, channel pecl.php.net:
=======================================
Package Stable/(Latest) Local
xhprof  0.9.2 (beta)          XHProf: A Hierarchical Profiler for PHP
</pre>
<p>Т.к. пакет xhprof находится в стадии beta, то нужно разрешить его установку:</p>
<pre class="brush: bash;">
# pecl config-get preferred_state
stable

# pecl config-set preferred_state beta
# pecl config-get preferred_state
beta
</pre>
<p>Если попытаться установить пакет через PECL, то получим ошибку:</p>
<pre class="brush: bash;">
# pecl install xhprof

downloading xhprof-0.9.2.tar ...
Starting to download xhprof-0.9.2.tar (Unknown size)
....................................................................done: 1,506,816 bytes
11 source files, building
running: phpize
Cannot find config.m4.
Make sure that you run '/usr/local/bin/phpize' in the top level source directory of the module

ERROR: `phpize' failed
</pre>
<p>Поэтому выполняем следующие шаги:</p>
<pre class="brush: bash;">
# wget http://pecl.php.net/get/xhprof-0.9.2.tgz
# tar xvf xhprof-0.9.2.tgz
# cd ./xhprof-0.9.2/extension/
# phpize
# ./configure --with-php-config=/usr/local/bin/php-config
# make

# make install
Installing shared extensions:     /usr/local/lib/php/20060613/

# make test
</pre>
<p>Удалять папку xhprof-0.9.2 не следует, т.к. там содержатся утилиты GUI для визуального представления информации профайлера.</p>
<p>Подключаем модуль xhprof к PHP &#8211; редактируем файл php.ini (добавляем в конец файла):</p>
<pre class="brush: plain;">
[xhprof]
extension=xhprof.so
xhprof.output_dir=&quot;/var/tmp/xhprof&quot;
</pre>
<p>Для папки <strong>&laquo;/var/tmp/xhprof&raquo;</strong> должен быть доступ на запись, т.к. туда будут сохраняться результаты профайлинга.</p>
<p>Перезагрузите Apache. При вызове phpinfo() появится информация, что подключен модуль xhprof &#8211; значит все работает. </p>
<h3><strong>Настройка XHProf UI (GUI)</strong></h3>
<p>В пакет XHprof входит очень удобный интерфейс для анализа отчетов профилирования. XHprof позволяет строить отчеты, как в текстовом так и графическом ввиде.</p>
<p>В установочной папке xhprof-0.9.2 Вы найдете папку xhprof_html и xhprof_lib, которые нам понадобятся:<br />
&bull; xhprof_html &#8211; доступ к GUI<br />
&bull; xhprof_lib &#8211; библиотека для отображения и анализа кода (computing flat profile info, computing diffs, aggregating data from multiple runs, etc.). </p>
<p>Папку xhprof_lib размещаем в <strong>/usr/local/share/php/</strong> или <strong>/usr/local/lib/php/</strong> в зависимости от ОС. Таким образом будет доступ к библиотеки будет глобальный. В нашем случае получится: <strong>/usr/local/share/php/xhprof_lib/</strong>. Или как вариант папку xhprof_lib можно положить в наш проект.</p>
<p>В зависимости от того как Вы настроете доступ к GUI xhprof, нужно положить xhprof_html в соответствующее место. К примеру, можно создать субдомен http://xhprof.project/ или положить в корень проекта http://xhprof/.</p>
<h3><strong>Небольшой пример использования</strong></h3>
<p>В качестве примера взят пример с сайта highload.com.ua:</p>
<pre class="brush: php;">
function user_array_intersect( $a, $b ) {
  $res = array();

  foreach ( $a as $k =&gt; $v )
  {
    if ( in_array($v, $b) )
    {
      $res[] = $v;
    }
  }

  return $res;
}

function execute()
{
  $a = range(rand(100, 300), rand(700, 900));
  $b = range(rand(100, 300), rand(700, 900));

  $r1 = user_array_intersect($a, $b);
  $r2 = array_intersect($a, $b);
}

# Инициализируем профайлер - будем считать и процессорное время и потребление памяти
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

# Выполняем &quot;программу&quot;
execute();

# Останавливаем профайлер
$xhprof_data = xhprof_disable();

# Сохраняем отчет и генерируем ссылку для его просмотра
include_once &quot;xhprof_lib/utils/xhprof_lib.php&quot;;
include_once &quot;xhprof_lib/utils/xhprof_runs.php&quot;;
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs-&gt;save_run($xhprof_data, &quot;xhprof_test&quot;);
echo &quot;Report: http://xhprof/index.php?run=$run_id&amp;source=xhprof_test&quot;; # Хост, который Вы настроили ранее на GUI профайлера
echo &quot;\n&quot;;
</pre>
<p>В этом скрипте мы сравним отличие в эффективности работы встроенной функции array_intersect и ее самописного клона user_array_intersect. После описания функций мы подключили профайлер для генерации и сохранения отчета. Посмотрим на отчет:</p>
<p><img src="http://tigor.com.ua/blog/wp-content/uploads/2009/12/screenshot-xhprof-hierarchical-profiler-report-mozilla-firefox.png" alt="screenshot-xhprof-hierarchical-profiler-report-mozilla-firefox" title="screenshot-xhprof-hierarchical-profiler-report-mozilla-firefox" width="550" height="218" class="alignnone size-full wp-image-1344" /></p>
<p>Из отчета видно, что эффективность собственной реализации функции array_intersect в два раза меньше встроенной (еще одно напоминание об использовании стандартных средств прежде всего!). Небольшая справка по терминологии отчетов:</p>
<p>&bull; <strong>Incl[usive] Time</strong> &#8211; время, потраченное на функцию и на все функции, вызванные из нее<br />
&bull; <strong>Excl[usive] Time</strong> &#8211; время, потраченное на функцию без учета времени на вложенные функции</p>
<p>На скриншоте показана только часть отчета, кроме этих показателей отчет также содержит статистику по процессорным затратам и использованной памяти.</p>
<h3><strong>Графические отчеты</strong></h3>
<p>XHprof позволяет строить графические отчеты. Для построения он использует внешний инструмент Graphviz, поэтому убедитесь, что он установлен. Графический отчет вышеуказанного скрипта выглядит так:</p>
<p><img src="http://tigor.com.ua/blog/wp-content/uploads/2009/12/callgraphphp.png" alt="callgraphphp" title="callgraphphp" width="500" height="432" class="alignnone size-full wp-image-1346" /></p>
<p>Графический отчет позволяет визуально оценить ресурсоемкость каждой функции (красный должен привлечь внимание!). Как видим, в  примере самой затратной функцией для ресурсов стала in_array(), которая сама по себе не является проблемой но говорит о плохом техническом решении.</p>
<h3><strong>Профилирование production проектов</strong></h3>
<p>XHprof позволяет профилировать не только отдельные участки кода но и production проекты. Т.к. профилирование проектов в среде production процесс ресурсоемкий, то главный тут критерий &#8211; производительность. И XHprof тут прекрасно справляется, т.к. создан он был именно для таких целей. Во-первых XHprof написан на C, во-вторых имеет ряд настроек:</p>
<p>&bull; Таймер CPU на Linux системах имеет большой оверхед, поэтому разработчики рекомендуют использовать профайлер в режиме &laquo;elapsed time + memory&raquo;:</p>
<pre class="brush: php;">
  // elapsed time profiling (default) + memory profiling
  xhprof_enable(XHPROF_FLAGS_MEMORY);
</pre>
<p>&bull; Сбор данных профайлера будет весьма точно отражать реальную картину, если его запускать не каждый раз, а случайно и равнораспределенно, например для запуска каждый сотый раз:</p>
<pre class="brush: php;">
   if (mt_rand(1, 100) == 1) {
     xhprof_enable(XHPROF_FLAGS_MEMORY);
     $xhprof_on = true;
   }
  ...
   if ($xhprof_on) {
     $xhprof_data = xhprof_disable();
   }
</pre>
<p>&bull; Режим Lightweight Sampling &#8211; в этом режиме профилирование выполняется в течении короткого промежутка во времени (сэмплами) &#8211; 0.1 секунды</p>
<h3><strong>Пример профилирования production проекта</strong></h3>
<p>В качестве примера используем проект на Yii &#8211; Hello World!</p>
<p>Наш проект http://project/.<br />
GUI нашего профайлера (содержимое папки xhprof_html) http://xhprof/.<br />
xhprof_lib находится в &laquo;/usr/local/share/php/xhprof_lib&raquo;.</p>
<p>Создаем 2 файла (header.php и footer.php).</p>
<p><strong>header.php</strong></p>
<pre class="brush: php;">
&lt;?php

if (extension_loaded('xhprof')) {
  // Способ 1 - файлы лежат в проекте
  // include_once '/usr/local/share/php/xhprof_lib/utils/xhprof_lib.php';
  // include_once '/usr/local/share/php/xhprof_lib/utils/xhprof_runs.php';

  // Способ 2 - файлы лежат в /usr/local/share/php/xhprof_lib
  include_once dirname(__FILE__) . '/xhprof_lib/utils/xhprof_lib.php';
  include_once dirname(__FILE__) . '/xhprof_lib/utils/xhprof_runs.php';
  xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
</pre>
<p><strong>footer.php</strong></p>
<pre class="brush: php;">
&lt;?php

if (extension_loaded('xhprof')) {
  $profiler_namespace = 'myapp';  // namespace for your application
  $xhprof_data = xhprof_disable();
  $xhprof_runs = new XHProfRuns_Default();
  $run_id = $xhprof_runs-&gt;save_run($xhprof_data, $profiler_namespace);

  // url to the XHProf UI libraries (change the host name and path)
  $profiler_url = sprintf('http://' . $_SERVER['SERVER_NAME'] . '/xhprof/index.php?run=%s&amp;source=%s', $run_id, $profiler_namespace);

  // Можем сделать защиту по айпи, или добавить $_GET параметр
  if (in_array($_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1')))
  {
    // На нашей странице появится ссылка &quot;Profiler output&quot;, которая ведет на GUI XHprof с уникальными идентификатором отчета
    echo '&lt;br/&gt;&lt;br/&gt;&lt;a href=&quot;'. $profiler_url .'&quot; target=&quot;_blank&quot;&gt;Profiler output&lt;/a&gt;';
  }
}
</pre>
<p>Для внедрения профайлера в наш проект есть 2 способа:</p>
<p>1) Создаем файл .htaccess</p>
<pre class="brush: plain;">
php_value auto_prepend_file ../xhprof/header.php
php_value auto_append_file ../xhprof/footer.php
</pre>
<p>2) Добавляем вызов в файла в наш index.php</p>
<pre class="brush: php;">
&lt;?php

include('xhprof/header.php');

// include Yii bootstrap file
require_once(dirname(__FILE__).'/framework/yii.php');

// create a Web application instance and run
Yii::createWebApplication()-&gt;run();

include('xhprof/footer.php');
</pre>
<p>Загружаем страницу сайта. Внизу страницы появляется ссылка &laquo;Profiler output&raquo;, которая ведет на GUI XHprof с уникальными идентификатором отчета. Каждый раз, когда мы обновляем страницу отчет перегенирируется и идентификатор изменится.</p>
<p>Получаем отчет:</p>
<p><img src="http://tigor.com.ua/blog/wp-content/uploads/2009/12/XHProf-Hierarchical-Profiler-Report_12607101.jpg" alt="XHProf- Hierarchical Profiler Report_12607101" title="XHProf- Hierarchical Profiler Report_12607101" width="700" height="320" class="alignnone size-full wp-image-1354" /></p>
<p><strong>Показатели:</strong><br />
&bull; Total Incl. Wall Time (microsec):	18,710 microsecs (время затраченное на выполнение функций с учетом ожидания ответов от сокетов, файловой системы и других ресурсов  )<br />
&bull; Total Incl. CPU (microsecs):	16,309 microsecs (время затраченное на выполнение функций)<br />
&bull; Total Incl. MemUse (bytes):	527,604 bytes (использование памяти)<br />
&bull; Total Incl. PeakMemUse (bytes):	529,428 bytes (пиковое использование памяти)<br />
&bull; Number of Function Calls:	179 (количество вызовов функций)</p>
<p><strong>Что почитать:</strong><br />
&bull; <a href="http://mirror.facebook.net/facebook/xhprof/doc.html">XHProf Documentation</a><br />
&bull; <a href="http://pecl.php.net/package/xhprof">Pecl: xhprof</a><br />
&bull; <a href="http://techportal.ibuildings.com/2009/12/01/profiling-with-xhprof/">Profiling with XHProf</a><br />
&bull; <a href="http://highload.com.ua/index.php/2009/08/21/xhprof-%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-php-%D0%BE%D1%82-facebook/">XHprof &#8211; профилирование PHP от Facebook</a><br />
&bull; <a href="http://www.antonoff.info/php/code-profiling">Профилирование PHP-кода</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tigor.com.ua/blog/2009/12/13/profiling-php-with-xhprof/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ORM в мире PHP</title>
		<link>http://tigor.com.ua/blog/2009/10/21/orm-in-the-php-world/</link>
		<comments>http://tigor.com.ua/blog/2009/10/21/orm-in-the-php-world/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 20:50:38 +0000</pubDate>
		<dc:creator>ingvar</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://tigor.com.ua/blog/?p=1297</guid>
		<description><![CDATA[ORM (англ. Object-relational mapping, русск. Объектно-реляционная проекция) — запись объектов программы в реляционную базу данных, отображение объекта и его представления в виде набора таблиц. &#8211; Википедия: ORM 
В своей работе используем PHP Framework Symfony 1.2.9 и Propel 1.3, но планируем перейти на Symfony 1.3 + Doctrine. У меня возник вопрос: &#171;А какие еще PHP ORM [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>ORM</strong> (англ. Object-relational mapping, русск. Объектно-реляционная проекция) — запись объектов программы в реляционную базу данных, отображение объекта и его представления в виде набора таблиц. &#8211; <a href="http://ru.wikipedia.org/wiki/ORM">Википедия: ORM</a> </p></blockquote>
<p>В своей работе используем PHP Framework Symfony 1.2.9 и Propel 1.3, но планируем перейти на Symfony 1.3 + Doctrine. У меня возник вопрос: &laquo;А какие еще PHP ORM разработаны?&raquo;. Немного погуглив &#8211; получили следующую подборку. Многие проекты новые и ещё альфа/бета версии, но в любом случае уже есть возможность из чего выбрать.</p>
<p>&bull; <a href="http://propel.phpdb.org/trac/">Propel</a><br />
&bull; <a href="http://www.doctrine-project.org/">Doctrine</a><br />
&bull; <a href="http://getdorm.com/">dOrm</a><br />
&bull; <a href="http://www.outlet-orm.org/site/">Outlet PHP ORM</a><br />
&bull; <a href="http://www.redbeanphp.com/">RedBean</a><br />
&bull; <a href="http://code.google.com/p/php-orm/"> phpORM</a><br />
&bull; <a href="http://phpdatamapper.com/">phpDataMapper</a><br />
&bull; <a href="http://www.qcodo.com/">Qcodo</a><br />
&bull; <a href="http://www.coughphp.com/">CoughPHP</a><br />
&bull; <a href="http://phplinq.codeplex.com/">PHPLinq</a><br />
&bull; <a href="http://sourceforge.net/projects/phplightorm/">LightOrm for PHP</a>, <a href="http://freshmeat.net/projects/lightorm">LightOrm on Freshmeat</a><br />
&bull; <a href="http://www.phpactiverecord.org/">PHP ActiveRecord</a>, <a href="http://github.com/kla/php-activerecord/">PHP ActiveRecord on GitHub</a><br />
&bull; <a href="http://www.phpersistence.online.fr/">phpersistence</a><br />
&bull; <a href="http://www.php-rocks.com/">Rocks PHP Library</a><br />
&bull; <a href="http://www.schizofreend.nl/pork.dbobject/">Pork.dbObject</a><br />
&bull; <a href="http://www.repose-php.org/">Repose</a><br />
&bull; <a href="http://www.greaterscope.net/projects/ORMer">ORMer</a><br />
&bull; <a href="http://porte.adaltas.com/">Porte</a><br />
&bull; <a href="http://code.google.com/p/dabase/">DaBase</a>, <a href="http://habrahabr.ru/blogs/php/72731/">DaBase — не очередная ORM для PHP</a></p>
<p><span id="more-1297"></span></p>
<p><strong>ORM в разных PHP Framework:</strong><br />
&bull; <a href="http://framework.zend.com/wiki/display/ZFPROP/Zend_Generator_Orm+-+Thomas+VEQUAUD">Zend Framework Zend_Db_Mapper</a><br />
&bull; <a href="http://code.google.com/p/zend-framework-orm/">Zend Framework Db Table ORM</a><br />
&bull; <a href="http://docs.kohanaphp.com/libraries/orm">Kohana ORM</a><br />
&bull; <a href="http://ciex.levallois.biz/">CIEXtended: based on CodeIgniter</a><br />
&bull; <a href="http://xyster.libreworks.net/">Xyster</a><br />
&bull; <a href="http://solarphp.com/package/Solar_Sql_Model">Solar’s Solar_Sql_Model</a></p>
<p><strong>Active Record (AR) в разных PHP Framework:</strong><br />
&bull; <a href="http://www.yiiframework.com/doc/guide/database.ar">Yii Active Record</a><br />
&bull; <a href="http://book.cakephp.org/view/66/Models">CakePHP</a></p>
<p><strong>Что можно почитать:</strong><br />
&bull; <a href="http://mikhailstadnik.com/few-words-about-orm">ORM и с чем его едят</a><br />
&bull; <a href="http://wiki.agiledev.ru/doku.php?id=ooad:dp:data_mapper">Шаблон DataMapper</a><br />
&bull; <a href="http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software#PHP">List of object-relational mapping software: PHP</a><br />
&bull; <a href="http://www.libhound.com/databases/php-object-relational-mapping-frameworks">Comprehensive list of the object relational mapping tools and frameworks. part one: php</a><br />
&bull; <a href="http://maggienelson.com/2009/05/orm-in-the-php-world/">ORM in the PHP World</a><br />
&bull; <a href="http://nepalphp.org/content/orm-php">ORM in PHP</a><br />
&bull; <a href="http://www.derivante.com/2009/05/14/php-activerecord-with-php-53/">PHP ActiveRecord with PHP 5.3</a><br />
&bull; <a href="http://sourceforge.net/apps/trac/phplightorm/wiki/ruhome">LightOrm: Описание на русском языке</a><br />
&bull; <a href="http://www.derivante.com/2009/05/19/php-activerecord-available-for-beta-testing/">PHP ActiveRecord Available for Beta Testing</a><br />
&bull; <a href="http://trac.symfony-project.org/wiki/ConvertingPropelProjectToDoctrine">Symfony Converting Propel Project To Doctrine</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tigor.com.ua/blog/2009/10/21/orm-in-the-php-world/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>TinyMCE: изменение размера шрифта в редакторе</title>
		<link>http://tigor.com.ua/blog/2009/08/10/tinymce-change-default-font-size/</link>
		<comments>http://tigor.com.ua/blog/2009/08/10/tinymce-change-default-font-size/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 03:29:02 +0000</pubDate>
		<dc:creator>ingvar</dc:creator>
				<category><![CDATA[Разработка]]></category>
		<category><![CDATA[tinymce]]></category>

		<guid isPermaLink="false">http://tigor.com.ua/blog/?p=1285</guid>
		<description><![CDATA[После того, как редакторы сайта стали жаловаться, что маленький размер шрифта в редакторе TinyMCE и устают глаза, то пришлось заняться этим вопросом. Оказалось, что все можно сделать легко и просто и главное не надо лезть в код самого редактора.
Для этого мы подключаем свой файл CSS и меняем нужные нам настройки: размер и тип шрифта и [...]]]></description>
			<content:encoded><![CDATA[<p>После того, как редакторы сайта стали жаловаться, что маленький размер шрифта в редакторе TinyMCE и устают глаза, то пришлось заняться этим вопросом. Оказалось, что все можно сделать легко и просто и главное не надо лезть в код самого редактора.</p>
<p>Для этого мы подключаем свой файл CSS и меняем нужные нам настройки: размер и тип шрифта и т.д.</p>
<p><span id="more-1285"></span></p>
<p><strong>Указываем свой файл tinymce_content.css в настройках TinyMCE:</strong></p>
<pre class="brush: jscript;">
tinyMCE.init({
  content_css : &quot;/css/tinymce_content.css&quot;,
   ....
</pre>
<p>Т.к. я использую тему <strong>advanced</strong>, то за основу был взят следующий файл: &laquo;tinymce/themes/advanced/skins/default/content.css&raquo;.</p>
<p><strong>Пример файла tinymce_content.css (размер шрифта установлен в 14px):</strong></p>
<pre class="brush: css;">
body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px; margin:8px;}

body {background:#FFF;}
body.mceForceColors {background:#FFF; color:#000;}
h1 {font-size: 2em}
h2 {font-size: 1.5em}
h3 {font-size: 1.17em}
h4 {font-size: 1em}
h5 {font-size: .83em}
h6 {font-size: .75em}
...
</pre>
<p><strong>Дополнительная информация:</strong><br />
&bull; <a href="http://wiki.moxiecode.com/index.php/TinyMCE:FAQ#How_do_I_change_the_default_font_size.2Fface_color_of_the_editor.3F">TinyMCE:FAQ &#8211; How do I change the default font size/face color of the editor?</a><br />
&bull; <a href="http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/content_css">TinyMCE:Configuration/content css</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tigor.com.ua/blog/2009/08/10/tinymce-change-default-font-size/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>prettyPrint &#8211; dump javascript объектов</title>
		<link>http://tigor.com.ua/blog/2009/06/28/prettyprint-dump-javascript-object/</link>
		<comments>http://tigor.com.ua/blog/2009/06/28/prettyprint-dump-javascript-object/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 10:08:00 +0000</pubDate>
		<dc:creator>ingvar</dc:creator>
				<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://tigor.com.ua/blog/?p=1270</guid>
		<description><![CDATA[Те из вас кто следит за автором на Github могли заметить, что недавно он добавил новый проект под названием «prettyPrint».
«prettyPrint» — браузерный дампер переменных для Javascript аналогичный cfdump для ColdFusion. Он позволяет выводить на экран объекты любого типа в виде таблиц для просмотра во время отладки.

Посмотреть пример.

Основные моменты:
&#8226; Полностью независим, не требует ни дополнительных CSS [...]]]></description>
			<content:encoded><![CDATA[<p>Те из вас кто следит за автором на <a href="http://github.com/jamespadolsey">Github</a> могли заметить, что недавно он добавил новый проект под названием «prettyPrint».<br />
«prettyPrint» — браузерный дампер переменных для Javascript аналогичный <a href="http://www.petefreitag.com/images/blog/jsdump.gif">cfdump</a> для ColdFusion. Он позволяет выводить на экран объекты любого типа в виде таблиц для просмотра во время отладки.</p>
<p><span id="more-1270"></span></p>
<p><a href="http://james.padolsey.com/demos/prettyprint/">Посмотреть пример</a>.</p>
<p><img src="http://tigor.com.ua/blog/wp-content/uploads/2009/06/prettyprint_javascript_dumper.png" alt="prettyprint_javascript_dumper" title="prettyprint_javascript_dumper" width="500" height="604" class="alignnone size-full wp-image-1273" /></p>
<p><strong>Основные моменты:</strong></p>
<p>&bull; Полностью независим, не требует ни дополнительных CSS ни изображений.<br />
&bull; Поддерживает обьекты с неограниченной вложенностью.<br />
&bull; Поддерживаются все типы данных Javascript, а так же DOM элементы.<br />
&bull; Защищен от рекурсивных ссылок на обьекты.<br />
&bull; Позволяет задавать глубину отображения для объекта.<br />
&bull; Заголовки таблиц с градиентом.<br />
&bull; Позволяет кастомизацию через CSS.<br />
&bull; Проверен через JSLint!</p>
<p><strong>Пример использования:</strong></p>
<pre class="brush: jscript;">
var table = prettyPrint( anyRandomThing, { /*optional options object */ } );

// Making the table viewable is down to you...
// e.g.
document.body.appendChild(table);
</pre>
<p><strong>Дополнительная информация:</strong><br />
&bull; <a href="http://habrahabr.ru/blogs/javascript/63009/">Источник перевода на русском языке</a><br />
&bull; <a href="http://james.padolsey.com/javascript/prettyprint-for-javascript/">Официальная страница разработчика. Видео демонстрации возможностей</a><br />
&bull; <a href="http://github.com/jamespadolsey/prettyPrint.js/tree/master">Страница проекта на Github</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tigor.com.ua/blog/2009/06/28/prettyprint-dump-javascript-object/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Список современных PHP-фреймворков &#8211; смотрим и выбираем</title>
		<link>http://tigor.com.ua/blog/2009/06/10/php-frameworks/</link>
		<comments>http://tigor.com.ua/blog/2009/06/10/php-frameworks/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 13:09:50 +0000</pubDate>
		<dc:creator>ingvar</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[frameworks]]></category>

		<guid isPermaLink="false">http://tigor.com.ua/blog/?p=1252</guid>
		<description><![CDATA[Источник перевода: Современные PHP-фреймворки &#8211; полный список лидеров.
Оригинал на анг. языке: 16 PHP Frameworks To Consider For Your Next Project.
Ребята из phpinside молодцы, т.к. расширили список оригинальной статьи и добавили комментарии. В первоначальной статье не было таких фреймворков, как onPHP, Yii, Pluf и других. В итоге имеем на сегодня 22 фреймворка на языке PHP, что [...]]]></description>
			<content:encoded><![CDATA[<p>Источник перевода: <a href="http://phpinside.ru/?q=node/841">Современные PHP-фреймворки &#8211; полный список лидеров</a>.<br />
Оригинал на анг. языке: <a href="http://www.sitepoint.com/blogs/2009/06/09/16-php-frameworks/">16 PHP Frameworks To Consider For Your Next Project</a>.</p>
<p>Ребята из phpinside молодцы, т.к. расширили список оригинальной статьи и добавили комментарии. В первоначальной статье не было таких фреймворков, как onPHP, Yii, Pluf и других. В итоге имеем на сегодня 22 фреймворка на языке PHP, что впечатляет!</p>
<p><span id="more-1252"></span></p>
<ol>
<li><strong><a href="http://www.agavi.org/" target="_blank">Agavi</a></strong>. PHP5 фреймворк, вариант реализации проекта Mojavi.</li>
<li><strong><a href="http://www.akelos.org/" target="_blank">Akelos</a></strong>. Порт Ruby on Rails для PHP. Особенно подходит для небольших проектов. Вокруг фреймворка сформировалось активное сообщество.</li>
<li><strong><a href="http://www.cakephp.org/" target="_blank">CakePHP</a></strong>. Популярный фреймворк, особенностью которого является стремление к быстрому развёртыванию приложений.</li>
<li><strong><a href="http://www.codeigniter.com/" target="_blank">CodeIgniter</a></strong>. Небольшой по размеру, но очень быстрый фреймворк с отличной документацией и большим сообществом.</li>
<li><strong><a href="http://ez.no/ezcomponents" target="_blank">eZ Components</a></strong>. Набор разноцелевых компонентов. Если вы знакомы с ezPublish CMS, значит знакомы и с этими компонентами.</li>
<li><strong><a href="http://flow3.typo3.org/" target="_blank">FLOW3</a></strong>. Фреймворк от создателей TYPO3. Реализованы различные современные концепции, включая аспектно-ориентированный подход.</li>
<li><strong><a href="http://www.phpfuse.net/" target="_blank">Fuse</a></strong>. Ориентиром для этого фреймворка послужили RoR и CakePHP, но, конечно, с добавлением собственных идей.</li>
<li><strong><a href="http://www.horde.org/horde/" target="_blank">Horde</a></strong>. Проект вырос из набора приложений для работы с Email и Групп. Ориентирован на создание приложений на языках, отличных от английского.</li>
<li><strong><a href="http://kohanaphp.com/" target="_blank">Kohana</a></strong>. Ответвление от проекта CodeIgniter, обладающее дополнительным функционалом и усовершенствованным подходом к безопасности. <strong>Выбор редакции PHP Inside за архитектуру, быстроту и сообщество!</strong></li>
<li><strong><a href="http://www.phpontrax.com/" target="_blank">PHP on TRAX</a></strong>. Ещё одна версия RoR на PHP.</li>
<li><strong><a href="http://www.phpopenbiz.org/jim/" target="_blank">PHPOpenBiz</a></strong>. Авторы фреймворка говорят, что их целевой аудиторией являются «IT профессионалы и консультанты», а сам фреймворк предназначен для построения бизнес-приложений.</li>
<li><strong><a href="http://www.pluf.org/" target="_blank">Pluf</a></strong>. Для тех, кому нравится Django, только на PHP. На официальном сайте есть примеры тестов, утверждающие, что это один из самых быстрых РНР-фреймворков.</li>
<li><strong><a href="http://qcu.be/" target="_blank">Qcubed</a></strong>. Сфокусирован на быстром создании прототипов.</li>
<li><strong><a href="http://onphp.org/" target="_blank">onPHP</a></strong>. При всех достоинствах и возможностях фреймворка, отличается тем, что в качестве документации представлено в основном только API.</li>
<li><strong><a href="http://www.seagullproject.org/" target="_blank">Seagull</a></strong>. Фреймворк ориетирован не только на веб-приложения, но подходит и для построения консольных, а так же GUI приложений.</li>
<li><strong><a href="http://www.solarphp.com/" target="_blank">Solar</a></strong>. Фреймворк реализует множество вариантов шаблонов проектирования.</li>
<li><strong><a href="http://www.symfony-project.com/" target="_blank">Symfony</a></strong>. Позиционируется сообществом как решение уровня предприятия для использования программистами уровня выше среднего. <strong>Выбор редакции блога tigor.com.ua <img src='http://tigor.com.ua/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  за его мощность, удобство, время создания проектов, документацию и сообщество!</strong></li>
<li><strong><a href="http://www.phpwact.org/" target="_blank">WACT</a></strong>. Особенно подходит для тех приложений, в которых периодически нужно рефакторить код и использовать юнит тесты.</li>
<li><strong><a href="http://www.yiiframework.com/" target="_blank">Yii</a></strong>. Позиционируется как фреймворк для проектов с высокой нагрузкой. Специально для него подготовлены образы для использования в рамках Vmware, включающие оптимизированный набор ПО. Последняя версия образа включает: PHP 5.2.3 fastCGI, lighttpd (mod_rewrite и fastCGI), сам фреймворк Yii 1.0.6, PostgreSQL 8.2.4, phpPgAdmin 4.1.3, Linux kernel 2.6.17.7 <strong>Тоже интересный фреймворк!</strong></li>
<li><strong><a href="http://framework.zend.com/" target="_blank">Zend</a></strong>. Фреймворк от компании Zend — одно из самых больших сообществ, мощный функционал.</li>
<li><strong><a href="http://zoopframework.com/" target="_blank">ZooP</a></strong>. Лёгкий в изучении, подойдёт для начинающих разработчиков. Как, впрочем, и для профессионалов.</li>
<li><strong><a href="http://www.fusebox.org/" target="_blank">Fusebox Framework</a></strong>. </li>
</ol>
<p>Ещё несколько фреймворков:</p>
<ol start="23">
<li><strong><a href="http://limb-project.com/ru/" target="_blank">Limb</a></strong></li>
<li><strong><a href="http://www.doophp.com/" target="_blank">Doo PHP</a></strong></li>
<li><strong><a href="http://www.recessframework.org/" target="_blank">Recess</a></strong></li>
<li><strong><a href="http://obullo.com/" target="_blank">Obullo PHP framework</a></strong>, почитать на русском &#8211; <a href="http://allframeworks.ru/blog/obullo/125.html" target="_blank">Obullo framework &#8211; еще один PHP-фреймворк.</a></li>
</ol>
<p>Другие подборки списков фреймворков на PHP:<br />
&bull; <a href="http://www.phpwact.org/php/mvc_frameworks">PHP MVC Frameworks</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tigor.com.ua/blog/2009/06/10/php-frameworks/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>imgAreaSelect — jQuery-плагин для выделения области изображения</title>
		<link>http://tigor.com.ua/blog/2009/04/24/imgareaselect-jquery-plugin/</link>
		<comments>http://tigor.com.ua/blog/2009/04/24/imgareaselect-jquery-plugin/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 19:16:45 +0000</pubDate>
		<dc:creator>ingvar</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Дизайн]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://tigor.com.ua/blog/?p=1115</guid>
		<description><![CDATA[Плагин imgAreaSelect позволяет пользователю выделить прямоугольную область в изображении и получить координаты этой области. Прекрасно подходит для создания аватарок или превьюшек из любых изображений. 

Остается только дописать backend и получается отличный инструмент.
Последняя версия плагина imgAreaSelect v0.8 совместима с jQuery 1.3.x. 
Ссылки:
&#8226; Все примеры использования плагина imgAreaSelect
&#8226; imgAreaSelect on jQuery Plugins
&#8226; ImageCrop с помощью jQuery, плагина [...]]]></description>
			<content:encoded><![CDATA[<p>Плагин <strong><a href="http://odyniec.net/projects/imgareaselect/">imgAreaSelect</a></strong> позволяет пользователю выделить прямоугольную область в изображении и получить координаты этой области. Прекрасно подходит для создания аватарок или превьюшек из любых изображений. </p>
<p><img src="http://tigor.com.ua/blog/wp-content/uploads/2009/04/imgareaselect_jquery_plugin.png" alt="imgareaselect_jquery_plugin" title="imgareaselect_jquery_plugin" width="590" height="313" class="aligncenter size-full wp-image-1116" /></p>
<p>Остается только дописать backend и получается отличный инструмент.</p>
<p>Последняя версия плагина imgAreaSelect v0.8 совместима с jQuery 1.3.x. </p>
<p>Ссылки:<br />
&bull; <a href="http://odyniec.net/projects/imgareaselect/examples.php">Все примеры использования плагина imgAreaSelect</a><br />
&bull; <a href="http://plugins.jquery.com/project/imgAreaSelect">imgAreaSelect on jQuery Plugins</a><br />
&bull; <a href="http://adw0rd.ru/2008/imgcrop/">ImageCrop с помощью jQuery, плагина imgAreaSelect и PHP GD</a><br />
&bull; <a href="http://blog.webmasterschool.ru/php/214/">Создание превьюшек: PHP и плагин imgAreaSelect для jQuery</a><br />
&bull; <a href="http://plugins.jquery.com/project/Jcrop">Другой плагин: JCROP IMAGE CROPPING PLUGIN</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tigor.com.ua/blog/2009/04/24/imgareaselect-jquery-plugin/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
