<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3499432214026171677</id><updated>2025-12-29T01:52:21.899+06:00</updated><category term="PHP"/><category term="Yii"/><category term="BDD"/><category term="Behavior Driven Development"/><category term="Fantom"/><category term="extensions"/><category term="git"/><category term="links"/><category term="Fabulous"/><category term="MVC"/><category term="codefest"/><category term="мероприятия"/><category term="Behat"/><category term="FindPresent"/><category term="GTD"/><category term="LiveStreet"/><category term="PEAR"/><category term="PHPStorm"/><category term="Ruby on Rails"/><category term="facebook"/><category term="lighttpd"/><category term="node.js"/><category term="ubuntu"/><category term="vagrant"/><category term="блог"/><category term="перевод"/><title type='text'>Блог программиста</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-3230315375909961210</id><published>2014-04-15T18:56:00.006+07:00</published><updated>2014-04-15T18:56:57.539+07:00</updated><title type='text'>Блог переехал</title><content type='html'>Спустя пару лет блог возродился на новом месте&amp;nbsp;&lt;a href=&quot;http://ekaragodin.com/&quot;&gt;http://ekaragodin.com/&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/3230315375909961210/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2014/04/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/3230315375909961210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/3230315375909961210'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2014/04/blog-post.html' title='Блог переехал'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-7339050716498121127</id><published>2012-04-01T21:15:00.000+07:00</published><updated>2012-04-01T21:15:38.469+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="codefest"/><category scheme="http://www.blogger.com/atom/ns#" term="мероприятия"/><title type='text'>codefest 2012</title><content type='html'>Вот и прошел год с прошлого &lt;a href=&quot;http://ekaragodin.blogspot.com/2011/03/codefest-2011.html&quot;&gt;кодфеста&lt;/a&gt;, в этот раз все было ещё более улётно! 1400 участников, два дня, десятки докладов, крупнейший за уралом экспо-центр и т.д. В этом году нельзя было заплатить только за один день, поэтому на этот раз я сходил на оба дня и очень этому рад.&lt;br /&gt;
&lt;br /&gt;
В первый день было три секции - Web, QA, Enterprise. Я практически весь день был на секции web. Первые два доклада были не очень интересные, за то потом было что послушать. Сначала Сергей Аверин из badoo &lt;a href=&quot;http://codefest.ru/program/2012-03/not-all-databases-are-created-equal/&quot;&gt;тролил про базы данных&lt;/a&gt;. Потом Александр Титов из skype рассказал об интересном и популярном на западе &lt;a href=&quot;http://codefest.ru/program/2012-03/engineering-dzen/&quot;&gt;подходе devops&lt;/a&gt;, про который я раньше не слышал, возможно позже еще напишу об этом. Потом Андрей Аксёнов из sphinx, как всегда, жёг напалмом. На этот раз на тему того, как они &lt;a href=&quot;http://codefest.ru/program/2012-03/engineering-dzen/&quot;&gt;разрабатывают sphinx&lt;/a&gt;. Злой марсианин Иван Евтухович рассказал как &lt;a href=&quot;http://codefest.ru/program/2012-03/groupon/&quot;&gt;они разрабатывали групон&lt;/a&gt;. И хотя делали они это на рельсах, тем не менее, было интересно его слушать, узнать об их подходах и ошибках. Закончился первый день вискарём и гигантским тортом.&lt;br /&gt;
&lt;br /&gt;
На второй день не ожидал для себя ничего интересного и пошел скорее потому что уплочёно. Как же сильно я ошибался! Как в рамблере делали &lt;a href=&quot;http://codefest.ru/program/2012-03/learned-how-to-fly-a-person/&quot;&gt;авиа&lt;/a&gt;, основная идея - смотрите на привычные вещи по новому, всегда задавайте себе вопрос, почему люди сделали что-то так, а не иначе? Максим Ткачук интересно &lt;a href=&quot;http://codefest.ru/program/2012-03/hard-rock-design/&quot;&gt;рассказал&lt;/a&gt; о том как должен работать современный дизайнер. Но первое что вспоминается из его доклада - это анекдот про user experience гопников)). Ну и три лучших, по моему мнению, доклада: Никата Филипов о &lt;a href=&quot;http://codefest.ru/program/2012-03/typical-errors-of-the-introduction-of-lean-and-agile/&quot;&gt;типичных ошибках&lt;/a&gt; внедрения agile, Александр Орлов и Слава Панкратов &lt;a href=&quot;http://codefest.ru/program/2012-03/why-does-not-he-hear/&quot;&gt;о проблемах общения&lt;/a&gt; и &amp;nbsp;Александр Лысковский &lt;a href=&quot;http://codefest.ru/program/2012-03/how-to-create-a-team-alawar/&quot;&gt;о внутреннем устройстве&lt;/a&gt; алавара.Последний был не таким веселым и заводным как первые два, но весьма познавательным.&lt;br /&gt;
&lt;br /&gt;
Организаторы обещали выложить все презентации и наверно будет видео докладов, т.к. всё вроде бы снимали.&lt;br /&gt;
&lt;br /&gt;
Эти два дня просто переполнили новой информацией и зарядили позитивом на весь следующий год. Спасибо 2гис за отличную конференцию!</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/7339050716498121127/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2012/04/codefest-2012.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/7339050716498121127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/7339050716498121127'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2012/04/codefest-2012.html' title='codefest 2012'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-8285148867974513672</id><published>2012-03-09T22:24:00.000+07:00</published><updated>2012-03-09T22:24:24.300+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>Phabricator</title><content type='html'>&lt;a href=&quot;http://phabricator.org/&quot;&gt;Phabricator&lt;/a&gt; - это набор open source приложений для разработчиков помогающих писать, ревьюить и делиться кодом, родом из facebook. Статус у фабрикатора пока unstable, тем не менее возможностей у него уже более чем достаточно.&lt;br /&gt;
&lt;br /&gt;
Приложений довольно много, все они имеют единый интерфейс и многие из них интегрированы друг с другом. Основные приложения это:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Diffusion - просмотрщик репозиториев с кодом, поддерживаются subversion, mercurial и конечно git;&lt;/li&gt;
&lt;li&gt;Differential - инструмент для ревью кода;&lt;/li&gt;
&lt;li&gt;Maniphest - аскетичный, но довольно интересный issue tracker;&lt;/li&gt;
&lt;li&gt;Herald - позволяет выполнять некоторые действия по определенным условиям. Например присылать письмо на почту когда кто-то коммит совершил указанный в условии разработчик и т.д. Очень интересный инструмент.&lt;/li&gt;
&lt;li&gt;Phriction - вики-движок;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Плюс к этому есть еще несколько более простых приложений - приложение для загрузки файлов, в котором стореджем может выступать файловая система, mysql или распределенное хранилище от Амазона; создание головалок, таймеров обратного отсчета, аналог гиста от github и т.д.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Поиграться с рабочей версией можно здесь&amp;nbsp;&lt;a href=&quot;https://secure.phabricator.com/&quot;&gt;https://secure.phabricator.com/&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Проект довольно молодой, и пока не хватает пользовательской документации, зато неплохо документирован код. В целом дизайн аскетичный, но иногда довольно трудно найти нужные настройки. Надеюсь со временем это пройде, а в целом фабрикатор производит вполне достойное впечатление.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/8285148867974513672/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2012/03/phabricator.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/8285148867974513672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/8285148867974513672'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2012/03/phabricator.html' title='Phabricator'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-4080800241385353090</id><published>2012-02-01T16:13:00.002+07:00</published><updated>2012-02-01T16:13:47.688+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="links"/><title type='text'>Интересное в январе</title><content type='html'>&lt;br /&gt;
Использование существующих фреймворков в работе имеет много неоспоримых плюсов, но есть и несколько минусов - зачастую фреймворки тащат с собой слишком много функционала который мне может быть совершенно не нужен в текущем проекте; часто приходится писать слишком много ненужного кода, так как фреймворки навязывают свой подход и ограничивают свободу выбора решения.&amp;nbsp;Ed Finkler&#39;у это надоело и он написал &lt;a href=&quot;http://funkatron.com/posts/the-microphp-manifesto.html&quot;&gt;манифест&lt;/a&gt;&amp;nbsp;MicroPHP. На &lt;a href=&quot;http://microphp.org/&quot;&gt;сайте&lt;/a&gt; манифеста, кроме него самого, можно найти список легковесных библиотек которые можно использовать для разработки.&lt;br /&gt;
&lt;br /&gt;
Автоматизация рутинных задач - это правильный подход к работе и одним из самых подходящих средств для этого является &lt;a href=&quot;http://www.phing.info/&quot;&gt;phing&lt;/a&gt;&amp;nbsp;- порт джававского ant&#39;а на php. Неплохое введение в работу с phing &lt;a href=&quot;http://phpmaster.com/using-phing/&quot;&gt;здесь&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Релиз &lt;a href=&quot;http://www.php.net/index.php#id2012-01-11-1&quot;&gt;PHP 5.3.9&lt;/a&gt; и очередные&amp;nbsp;&lt;a href=&quot;http://www.php.net/index.php#id2012-01-07-2&quot;&gt;релиз&lt;/a&gt; &lt;a href=&quot;http://www.php.net/archive/2012.php#id2012-01-24-1&quot;&gt;кандидаты&lt;/a&gt; php 5.4.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://vremenno.net/js/collection-of-small-and-useful-js-libs/&quot;&gt;Подборка&lt;/a&gt; небольших, но полезных js-плагинов.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis&quot;&gt;Сравнение&lt;/a&gt; популярных NoSQL баз данных.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://designmodo.com/online-html5-tools/&quot;&gt;Подборка&lt;/a&gt; разных полезных on-line инструментов связанных с html5.&lt;br /&gt;
&lt;br /&gt;
Довольно &lt;a href=&quot;http://www.justincarmony.com/blog/2012/01/10/php-workers-with-redis-solo/&quot;&gt;подробная статья&lt;/a&gt; о том как написать обработку задач в очереди с помощью PHP и Redis.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/4080800241385353090/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2012/02/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/4080800241385353090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/4080800241385353090'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2012/02/blog-post.html' title='Интересное в январе'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-4049857813501042766</id><published>2011-12-29T00:02:00.000+07:00</published><updated>2011-12-29T00:02:33.650+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="links"/><title type='text'>Интересное за декабрь</title><content type='html'>&lt;br /&gt;
Пожалуй главный герой месяца - это &lt;a href=&quot;http://phpadvent.org/&quot;&gt;PHP Advent&lt;/a&gt;, где уже не первый раз, под конец кода публикуется множество интересных статей по самым разным темам. А если вы хотели написать свой фреймворк на PHP, но не знали как, то вот вам &lt;a href=&quot;http://www.wokay.com/technology/12-tutorials-for-creating-php5-mvc-framework-56936.html&quot;&gt;подборка из 12 статей&lt;/a&gt; о том как это сделать.&amp;nbsp;Старому доброму PEAR&#39;у пора подвинуться - появился новый менеджер пакетов с новым подходом к установке пакетов. Пора узнать что такое &lt;a href=&quot;https://github.com/composer/composer&quot;&gt;Composer&lt;/a&gt;: &lt;a href=&quot;http://nelm.io/blog/2011/12/composer-part-1-what-why/&quot;&gt;раз &lt;/a&gt;и &lt;a href=&quot;http://nelm.io/blog/2011/12/composer-part-2-impact/&quot;&gt;два&lt;/a&gt;.&amp;nbsp;Вышел пара релиз кандидатов&amp;nbsp;&lt;a href=&quot;http://www.php.net/index.php#id2011-12-25-1&quot;&gt;PHP&lt;/a&gt;.&amp;nbsp;Хорошее &lt;a href=&quot;http://blog.mayflower.de/archives/792-05.12.-Doctrine-2.html&quot;&gt;введение&lt;/a&gt; в работу с Doctrine и её &lt;a href=&quot;http://blog.mayflower.de/archives/799-06.12.-Doctrine-2-Zend-Framework-Integration.html&quot;&gt;интеграции&lt;/a&gt; с Zend Framework.&lt;br /&gt;
&lt;br /&gt;
Всё ещё используете CSS? Тогда мы идём к вам - &lt;a href=&quot;http://blog.mayflower.de/archives/802-09.12.-10-good-reasons-why-to-learn-a-css-meta-language-like-sass-or-less.html&quot;&gt;обзор возможностей&lt;/a&gt; &lt;a href=&quot;http://sass-lang.com/&quot;&gt;SASS &lt;/a&gt;и &lt;a href=&quot;https://github.com/cloudhead/less&quot;&gt;LESS&lt;/a&gt;. Отличная &lt;a href=&quot;http://coding.smashingmagazine.com/2011/10/27/lessons-from-a-review-of-javascript-code/&quot;&gt;статья&lt;/a&gt; о code review. Хотя упор там сделан на ревью JavaScript, первая половина статьи будет интересна и полезна всем.&lt;br /&gt;
&lt;br /&gt;
Приходиться работать в windows и скучаете по линуксу? Появилась хорошая и легковесная замена для cygwin - &amp;nbsp;&lt;a href=&quot;https://github.com/bmatzelle/gow/wiki&quot;&gt;gow&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Самые &lt;a href=&quot;http://net.tutsplus.com/articles/news/recently-in-web-development-december-edition/&quot;&gt;свежие события&lt;/a&gt; в веб-индустрии по версии tuts+.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/4049857813501042766/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/12/blog-post_29.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/4049857813501042766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/4049857813501042766'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/12/blog-post_29.html' title='Интересное за декабрь'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-5056083297029758919</id><published>2011-12-25T10:34:00.000+07:00</published><updated>2011-12-25T10:34:06.286+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Fantom"/><title type='text'>Веб-приложение на языке Fantom</title><content type='html'>Меня, как веб-программиста, в первую очередь интересует насколько легко писать веб-приложения на каком либо языке. Поэтому не удивительно, что для того чтобы изучить fantom я решил&amp;nbsp;поэкспериментировать&amp;nbsp;именно в этом направлении.&lt;br /&gt;
&lt;br /&gt;
Вся документация связанная с веб-программированием умещается на &lt;a href=&quot;http://fantom.org/doc/web/index.html&quot;&gt;одной страничке&lt;/a&gt;. Ещё я нашел пару веб-фреймворков - &lt;a href=&quot;http://www.talesframework.org/&quot;&gt;Tales&lt;/a&gt; и &lt;a href=&quot;http://spectreframework.org/&quot;&gt;Spectre&lt;/a&gt;. Но начать всё же решил с азов.&lt;br /&gt;
&lt;br /&gt;
Как написать консольное приложение я уже &lt;a href=&quot;http://ekaragodin.blogspot.com/2011/12/fantom.html&quot;&gt;писал&lt;/a&gt;, сегодня узнаем как из него сделать простейшее веб-приложение. Для этого мы используем веб-сервер &lt;a href=&quot;http://fantom.org/doc/wisp/index.html&quot;&gt;wisp&lt;/a&gt; который идет в стандартной поставке фантома. Кроме него нам понадобятся классы &lt;a href=&quot;http://fantom.org/doc/web/WebReq.html&quot;&gt;WebReq&lt;/a&gt; - инкапсулирует в себе веб-запрос (request), &lt;a href=&quot;http://fantom.org/doc/web/WebRes.html&quot;&gt;WebRes&lt;/a&gt; - ответ (response), &lt;a href=&quot;http://fantom.org/doc/web/Weblet.html&quot;&gt;Weblet&lt;/a&gt; - занимается непосредственной обработкой запроса и &lt;a href=&quot;http://fantom.org/doc/web/WebMod.html&quot;&gt;WebMod&lt;/a&gt; содержит в себе эти и другие классы для обработки веб-запросов.&lt;br /&gt;
&lt;br /&gt;
Пример взят с официального сайта фантома:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1518677.js?file=WebApp.fan&quot;&gt;
&lt;/script&gt;
&lt;br /&gt;
Как видите ничего сложного нет. Метод&amp;nbsp;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;runServices&lt;/span&gt; из класса&amp;nbsp;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;AbstractMain&lt;/span&gt; предусмотрен как раз на такой случай, когда приложение должно работать как сервис, то есть не завершаться, а постоянно висеть в фоне и ожидать запросов.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/5056083297029758919/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/12/fantom_25.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/5056083297029758919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/5056083297029758919'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/12/fantom_25.html' title='Веб-приложение на языке Fantom'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-3784026724012993647</id><published>2011-12-23T22:27:00.000+07:00</published><updated>2011-12-23T22:27:47.768+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Fantom"/><title type='text'>Консольное приложение на языке Fantom</title><content type='html'>Написать консольное приложение на фантоме очень легко. В пакете &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;util&lt;/span&gt; есть класс&amp;nbsp;&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;AbstractMain&lt;/span&gt;, который реализует базовый функционал для запуска приложения и обработки входных параметров и некоторые другие вспомогательные методы.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1514354.js?file=gistfile1.fan&quot;&gt;
&lt;/script&gt;
&lt;br /&gt;
Теперь, если вы наберете в консоли&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;fan ConsoleHello.fan -name Ivan&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
то увидите &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Hello, Ivan&lt;/span&gt;. А если наберете&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;fan ConsoleHello.fan -help&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
то увидите небольшую справку, которую приложение автоматически сгенерирует. С помощью аннотации &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Opt&lt;/span&gt; объявляются именованные параметры (опции), есть не именованные параметры (аргументы). Для них используется аннотация &lt;span style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;Arg&lt;/span&gt;. При этом если не задать дефолтное значение для опции, то он будет обязательным при запуске приложения. Аргументы обязательны всегда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/3784026724012993647/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/12/fantom.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/3784026724012993647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/3784026724012993647'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/12/fantom.html' title='Консольное приложение на языке Fantom'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-2461034048673313280</id><published>2011-12-19T06:41:00.000+07:00</published><updated>2011-12-19T06:41:03.757+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Fantom"/><title type='text'>Знакомство с Фантомом</title><content type='html'>Не так давно меня заинтересовал новый язык программирования под названием &lt;a href=&quot;http://fantom.org/&quot;&gt;Fantom&lt;/a&gt;. На русском языке о нем информации практически нет, поэтому решил добавить свои пять копеек. Итак, Fantom - это довольно молодой высокоуровневый язык программирования. Изначально он был разработан как язык работающий на JVM, но сейчас есть реализации для .Net и JavaScript.&lt;br /&gt;
&lt;br /&gt;
Его синтаксис во много похож на Java и C#. Вот пример простейшей программы на Fantom:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1492223.js?file=gistfile1.java&quot;&gt;
&lt;/script&gt;
&lt;br /&gt;
Язык пока не очень известен, поэтому для него пока нет IDE уровня &lt;a href=&quot;http://www.jetbrains.com/idea/&quot;&gt;IDEA&lt;/a&gt;&amp;nbsp;для Java, но прогресс уже есть. Например, российская компания Xored разрабатывает &lt;a href=&quot;http://www.xored.com/products/f4/&quot;&gt;F4&lt;/a&gt;&amp;nbsp;на базе Eclipse.&lt;br /&gt;
&lt;br /&gt;
Для того чтобы немного поиграться с языком даже не нужно устанавливать его к себе на компьютер. Есть замечательный сайт &lt;a href=&quot;http://www.fanzy.net/&quot;&gt;fanzy&lt;/a&gt;, на котором можно пройти небольшой курс обучения.&lt;br /&gt;
&lt;br /&gt;
В конце строк не нужно ставить точку с запятой.&amp;nbsp;Нет примитивных типов, всё является объектами. Удобная работа с лямбдами. Есть встроенная библиотека для юнит-тестов. И ещё много других вкусностей, которые делают этот язык весьма интересным.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/2461034048673313280/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/12/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/2461034048673313280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/2461034048673313280'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/12/blog-post.html' title='Знакомство с Фантомом'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-2089063132683263744</id><published>2011-11-30T09:00:00.000+07:00</published><updated>2011-11-30T09:00:05.685+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="links"/><title type='text'>Интересное за ноябрь</title><content type='html'>Вышел &lt;a href=&quot;http://www.php.net/archive/2011.php#id2011-11-11-1&quot;&gt;PHP 5.4 RC1&lt;/a&gt;, так что пора уже знакомиться с &lt;a href=&quot;http://php.webtutor.pl/en/2011/09/27/whats-new-in-php-5-4-a-huge-list-of-major-changes/&quot;&gt;новшествами&lt;/a&gt; и готовиться к переходу на него. Очень кстати будет узнать, как работать с &lt;a href=&quot;http://derickrethans.nl/multiple-php-version-setup.html&quot;&gt;несколькими конфигурациями PHP&lt;/a&gt; на одной машине. К тому же, в этом году на &lt;a href=&quot;http://php.net/&quot;&gt;php.net&lt;/a&gt; вернулся &lt;a href=&quot;http://habrahabr.ru/blogs/php/132499/&quot;&gt;русский перевод&lt;/a&gt; документации.&lt;br /&gt;
&lt;br /&gt;
Если вы разрабатываете проект и ожидаете большую нагрузку, то стоит заранее подумать о том &lt;a href=&quot;http://schlueters.de/blog/archives/164-High-Performance-PHP-Session-Storage-on-Scale.html&quot;&gt;как хранить сессии&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Нужно отправить POST-методом данные в виде json? Узнайте как это &lt;a href=&quot;http://www.lornajane.net/posts/2011/posting-json-data-with-php-curl&quot;&gt;сделать&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
И на закуску - &lt;a href=&quot;http://www.andismith.com/blog/2011/11/25-dev-tool-secrets/&quot;&gt;25 возможностей средств разработки в браузерах&lt;/a&gt;, о которых вы, возможно, не знали.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/2089063132683263744/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/11/blog-post_30.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/2089063132683263744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/2089063132683263744'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/11/blog-post_30.html' title='Интересное за ноябрь'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-8775548565976121626</id><published>2011-11-19T21:40:00.000+07:00</published><updated>2011-11-19T22:35:25.235+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>Использование OpenSSL в PHP</title><content type='html'>К моему большому удивлению, openssl-функции оказались одними из самых плохо документированных из тех что мне приходилось использовать в PHP. Это тем более удивительно учитывая огромное количество возможностей самой библиотеки &lt;a href=&quot;http://www.openssl.org/&quot;&gt;OpenSSL&lt;/a&gt;. Поэтому решил записать несколько основых моментов. Рассмотрим пример ассиметричного шифрования с помощью OpenSSL.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Создание пары приватного и публичного ключей&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Генерация приватного 1024-битного ключа:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;openssl genrsa -out private.pem 1024&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Создание парного публичного ключа:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;openssl rsa -pubout -in private.pem -out public.pem&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Шифрование&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Процесс ассимитричного шифрования предпологает что исходное сообщение шифруется с помощью буличного ключа, а расшифровано может быть только приватным ключом. Соответственно, для шифрования используется функция&amp;nbsp;&lt;a href=&quot;http://www.php.net/manual/en/function.openssl-public-encrypt.php&quot;&gt;openssl_public_encrypt&lt;/a&gt;, а для расшифровки &lt;a href=&quot;http://www.php.net/manual/en/function.openssl-private-decrypt.php&quot;&gt;openssl_private_decrypt&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Подпись&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Для подтверждения того что зашифрованное сообщение пришло из даверенного источника используется подпись. Но в этом случае ключи используются наоборот - приватным ключом создаётся подпись, а публичным эта подпись проверяется. Таким образом для защищённого обмена сообщениями обе стороны должны обменяться своими публичными ключами. Для создания подписи используется функция&amp;nbsp;&lt;a href=&quot;http://www.php.net/manual/en/function.openssl-sign.php&quot;&gt;openssl_sign&lt;/a&gt;, а для проверки&amp;nbsp;&lt;a href=&quot;http://www.php.net/manual/en/function.openssl-verify.php&quot;&gt;openssl_verify&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/8775548565976121626/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/11/openssl-php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/8775548565976121626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/8775548565976121626'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/11/openssl-php.html' title='Использование OpenSSL в PHP'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-7059726584894276526</id><published>2011-11-17T21:25:00.001+07:00</published><updated>2011-11-17T21:38:37.969+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>Вызов приватного метода</title><content type='html'>Недавно узнал что в PHP 5.3.2 в рефлекшене ввели новый метод благодаря которому без труда можно вызвать приватный метод:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1373271.js?file=gistfile1.aw&quot;&gt;
&lt;/script&gt;
&lt;br /&gt;
Вообще механизм Reflection очень мощный, через него можно очень много всего узнать о классах и его методах, вплоть до пхпдоков к методам. И даже шифрование с помощью чего-то типа &lt;a href=&quot;http://www.ioncube.com/&quot;&gt;IonCube&lt;/a&gt; не поможет.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/7059726584894276526/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/11/php-5.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/7059726584894276526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/7059726584894276526'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/11/php-5.html' title='Вызов приватного метода'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-2204021964198876450</id><published>2011-11-02T12:10:00.000+07:00</published><updated>2011-11-02T12:10:52.015+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="мероприятия"/><title type='text'>Я.Субботник в Новосибирске</title><content type='html'>В Новосибирске 19 ноября пройдет Я.Субботник. Будет много интересных докладов:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Про автоматизацию тестирования веб-форм.&lt;/li&gt;
&lt;li&gt;Про фреймворк для клиентской валидации SVARX.&lt;/li&gt;
&lt;li&gt;Как верстальщики Яндекса пытаются справиться с CSS3.&lt;/li&gt;
&lt;li&gt;Как выглядит веб для незрячих.&lt;/li&gt;
&lt;li&gt;Какова архитектура фронтенда Яндекс.Почты.&lt;/li&gt;
&lt;li&gt;Как правильно приручать сайты.&lt;/li&gt;
&lt;li&gt;Что представляет из себя Yandex Map Kit для iOS.&lt;/li&gt;
&lt;li&gt;Как создаются Яндекс.Карты для Windows Phone 7.&lt;/li&gt;
&lt;li&gt;Как мы храним и показываем Яндекс.Карты.&lt;/li&gt;
&lt;li&gt;Как мы делаем Панорамы улиц.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Подробнее о докладах &lt;a href=&quot;http://company.yandex.ru/public/subbotnik/theses.xml&quot;&gt;здесь&lt;/a&gt;. Участие бесплатное, но по предварительной регистрации &lt;a href=&quot;http://company.yandex.ru/public/subbotnik/reg.xml&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/2204021964198876450/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/11/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/2204021964198876450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/2204021964198876450'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/11/blog-post.html' title='Я.Субботник в Новосибирске'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-3171823826437009454</id><published>2011-07-20T22:08:00.000+07:00</published><updated>2011-07-20T22:08:44.344+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BDD"/><category scheme="http://www.blogger.com/atom/ns#" term="Behavior Driven Development"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>ArrBDD</title><content type='html'>В полку пхпешных &lt;a href=&quot;http://www.ibm.com/developerworks/ru/library/j-cq09187/index.html&quot;&gt;bdd&lt;/a&gt;-библиотек прибавление - &lt;a href=&quot;http://code.google.com/p/arr-bdd/&quot;&gt;ArrBDD&lt;/a&gt;. Это очень легковесная библиотека для тестирования. Пример простого теста:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;!--?php&lt;/p--&gt;&lt;br /&gt;
&lt;br /&gt;
$specs[&quot;The &#39;Hello world&#39; string&quot;] = array(&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &#39;subject&#39; =&amp;gt; function(){&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &#39;Hello world&#39;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;SHOULD be 11 characters long&quot; =&amp;gt; function($hello){&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return (strlen($hello)===11);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; },&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &quot;AND start with &#39;Hello&#39;&quot; =&amp;gt; function($hello){&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return (strpos($hello, &#39;Hello&#39;)===0);&lt;br /&gt;
&amp;nbsp; &amp;nbsp; }&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
Библиотека совсем новая и возможностей у неё пока не очень много, но тем не менее она даёт свежий взгляд на то, как можно писать тесты на PHP. Кроме того в комплекте идёт класс для создания моков.&lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/3171823826437009454/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/07/arrbdd.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/3171823826437009454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/3171823826437009454'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/07/arrbdd.html' title='ArrBDD'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-2579991709966215678</id><published>2011-07-12T21:37:00.001+07:00</published><updated>2011-07-12T21:37:04.105+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vagrant"/><title type='text'>Vagrant</title><content type='html'>Отличное средство для автоматизации создания и управления виртуальными машинами - &lt;a href=&quot;http://vagrantup.com/&quot;&gt;Vagrant&lt;/a&gt;. Это консольная утилита написанная на ruby с помощью которой можно быстро развернуть виртуальную машину с необходимой операционной системой.&lt;br /&gt;
&lt;br /&gt;
Для своей работы vagrant использует VirtualBox. Последняя версия vagrant работает с VirtualBox версии 4 и выше. А если добавить &lt;a href=&quot;http://www.opscode.com/chef/&quot;&gt;chef&lt;/a&gt;, то получится очень мощный и гибкий инструмент.&lt;br /&gt;
&lt;br /&gt;
Сайт со списком доступных готовых боксов -&amp;nbsp;&lt;a href=&quot;http://www.vagrantbox.es/&quot;&gt;http://www.vagrantbox.es&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
На офф сайте есть хорошая &lt;a href=&quot;http://vagrantup.com/docs/getting-started/&quot;&gt;документация&lt;/a&gt;, в которой все доступно описано.&lt;br /&gt;
&lt;br /&gt;
Отличное &lt;a href=&quot;http://vimeo.com/9976342&quot;&gt;видео&lt;/a&gt; в котором показан пример создания виртуальной машины с Apache и PHP.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/2579991709966215678/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/07/vagrant.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/2579991709966215678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/2579991709966215678'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/07/vagrant.html' title='Vagrant'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-5892704365737594616</id><published>2011-07-03T13:33:00.001+07:00</published><updated>2011-07-03T13:34:16.832+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHPStorm"/><title type='text'>solarized</title><content type='html'>Не так давно на один хороший человек создал цветовую схему &lt;a href=&quot;http://solarized/&quot;&gt;solarized&lt;/a&gt; для подсветки синтаксиса. И вот сегодня нашел реализацию этой схемы для IntelliJ IDEA, а значит её можно использовать и в PHPStorm. Отличная схема, можно выбрать светлую или темную тему. Качать отсюда&amp;nbsp;&lt;a href=&quot;https://github.com/jkaving/intellij-colors-solarized&quot;&gt;https://github.com/jkaving/intellij-colors-solarized&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBwSIG2SKmWJOgfy4qZiwDSQBqwyqobakSVImAlkPC0SzUhSpT5ggUFO5Sf4prLZ10zoHq_iIyzGcMJVOOrxbNeDxEemtgE9QcVHV2toORTZ0-UktP4rWOh5nHVHe2eCjq7R4nQt43SCbp/s1600/solarized-yinyang.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBwSIG2SKmWJOgfy4qZiwDSQBqwyqobakSVImAlkPC0SzUhSpT5ggUFO5Sf4prLZ10zoHq_iIyzGcMJVOOrxbNeDxEemtgE9QcVHV2toORTZ0-UktP4rWOh5nHVHe2eCjq7R4nQt43SCbp/s320/solarized-yinyang.png&quot; width=&quot;319&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/5892704365737594616/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/07/solarized.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/5892704365737594616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/5892704365737594616'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/07/solarized.html' title='solarized'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBwSIG2SKmWJOgfy4qZiwDSQBqwyqobakSVImAlkPC0SzUhSpT5ggUFO5Sf4prLZ10zoHq_iIyzGcMJVOOrxbNeDxEemtgE9QcVHV2toORTZ0-UktP4rWOh5nHVHe2eCjq7R4nQt43SCbp/s72-c/solarized-yinyang.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-1801196612679106461</id><published>2011-06-30T23:01:00.000+07:00</published><updated>2011-06-30T23:01:07.026+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Yii"/><title type='text'>Автодополнение для консольных команд Yii</title><content type='html'>Yii предоставляет мощные стредства для создания консольных приложений, пожалуй единственное чего мне не хватало, так это автодополнения имен этих команд и их параметров в консоли. И вот сегодня почти случайно наткнулся на решение и этой проблемы.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://habr-sandbox.livejournal.com/230319.html&quot;&gt;http://habr-sandbox.livejournal.com/230319.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Поддерживает автодополнение имен команд, экшенов и именнованных параметров. Отлично работает. Спасибо хорошему человеку за проделанную работу.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/1801196612679106461/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/06/yii.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/1801196612679106461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/1801196612679106461'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/06/yii.html' title='Автодополнение для консольных команд Yii'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-7692744280520633676</id><published>2011-05-22T22:27:00.000+07:00</published><updated>2011-05-22T22:27:46.854+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ruby on Rails"/><title type='text'>Ruby on Rails</title><content type='html'>Прочитал руководство по Ruby on Rails&amp;nbsp;&lt;a href=&quot;http://railstutorial.ru/&quot;&gt;http://railstutorial.ru&lt;/a&gt;&amp;nbsp;и поразился насколько он ушел вперед по сравнению с &lt;b&gt;любым&lt;/b&gt; PHP-фреймворком (да и наверно, вообще любым web-фреймворком). Чего только стоит, что одной из первых тем учебника является использования &lt;a href=&quot;http://git-scm.com/&quot;&gt;git&lt;/a&gt;. А простота использования &lt;a href=&quot;http://api.heroku.com/&quot;&gt;Heroku&lt;/a&gt; просто сносит голову, когда в один коммит разворачиваешь свое приложение на production-сервере.&lt;br /&gt;
&lt;br /&gt;
Я вижу несколько преимуществ Rails которые делают его одним из лучших инструментов разработки в мире:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Язык Ruby&lt;/li&gt;
&lt;li&gt;Инфраструктура (gems, RVM и т.д.)&lt;/li&gt;
&lt;li&gt;Внедрение самых новых технологий и инструментов&lt;/li&gt;
&lt;/ol&gt;Главные недостатки Ruby (о которых я слышал) - это излишняя &quot;магичность&quot; и медленная скорость работы. Оба этих недостатка вытекают из того, что на руби удобно программировать. А это очень серьёзное преимущество. При этом первый недостаток можно победить потратив на изучение чуть больше времени, ну и со вторым видимо можно как-то бороться, так как существуют сайты на Rails работающие под очень большой нагрузкой.&lt;br /&gt;
&lt;br /&gt;
Но не менее, а возможно и более важным, является инфраструктура построенная вокруг Ruby. Это очень удобно когда все устанавливается единообразно и в одну команду. Безусловно, в PHP есть PEAR, но он используется отнюдь не так же. Например, даже мой любимый Yii не распространяется официально через PEAR. И было бы гораздо лучше если бы через PEAR можно было ставить расширения, которые сейчас все пишут кто во что горазд. А установка нескольких версий PHP на одну машину? О таком не смеем и мечтать. Конечно, под Windows можно накачать XAMPP с нужными версиями PHP и запихать в разные папки, но это уже не так удобно, а про *nix системы, где всё ставится из пакетов я вообще молчу, проще поднять виртуальную машину и настроить все там.&lt;br /&gt;
&lt;br /&gt;
И последнее - это использование самых новых технологий. Например, сейчас идут разговоры чтобы в следующей версии Rails включить по умолчанию &lt;a href=&quot;http://jashkenas.github.com/coffee-script/&quot;&gt;CoffeeScript&lt;/a&gt;, комментарии излишни;)&amp;nbsp;Конечно, использование огромного количества различных технологий повышает порог входа к использование Rails, но в конечном итоге приводит к тому что средний программист знает и умеет больше чем средний программист на PHP, может работать более эффективно и быстрее решать свои задачи, при этом получая больше удовольствия от работы))&lt;br /&gt;
&lt;br /&gt;
Все это приводит к грустным выводам если не о смене своего основного рабочего инструмента, то о серьезном поводе получше присмотреться к Rails.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/7692744280520633676/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/05/ruby-on-rails.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/7692744280520633676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/7692744280520633676'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/05/ruby-on-rails.html' title='Ruby on Rails'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-8850343145523241064</id><published>2011-05-01T15:44:00.000+07:00</published><updated>2011-05-01T15:44:06.456+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="node.js"/><title type='text'>Node.js</title><content type='html'>Решил узнать что за зверь &lt;a href=&quot;http://nodejs.org/&quot;&gt;node.js&lt;/a&gt;. Если в кратце, то это js-фреймворк предназначенный для выполнения на стороне сервера. Работает на гугловом движке &lt;a href=&quot;http://ru.wikipedia.org/wiki/V8_(%D0%B4%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA_JavaScript)&quot;&gt;V8&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Основные фишки:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;создание масштабируемых веб-серверов&lt;/li&gt;
&lt;li&gt;асинхронное программирование&lt;/li&gt;
&lt;li&gt;весь проект (клиентскую и серверную часть) теперь можно написать на одном языке программирования :)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Эксперементировал на ubuntu 11.04. В репах ubuntu сейчас старая версия, поэтому ставил как написано в &lt;a href=&quot;https://github.com/joyent/node/wiki/Installation&quot;&gt;официальной вики&lt;/a&gt;.&amp;nbsp;Правда npm не установился как написано в пункте 4, пришлось сначала скачать скрипт установки и потом выполнить его. Больше проблем с установкой не было.&lt;br /&gt;
&lt;br /&gt;
Пример простейшего веб-вервера:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/950264.js?file=gistfile1.js&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
Запускать из консоли так:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;node test.js&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Писать приложения на чистом node не очень удобно, но к счастью для него существует множество модулей с различным функционалом. В вике на &lt;a href=&quot;https://github.com/joyent/node/wiki/modules&quot;&gt;странице модулей&lt;/a&gt; можно найти их список. Установить большинство из них можно с помощью npm.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/8850343145523241064/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/05/nodejs.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/8850343145523241064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/8850343145523241064'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/05/nodejs.html' title='Node.js'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-5055243468458805005</id><published>2011-03-19T23:40:00.000+06:00</published><updated>2011-03-19T23:40:23.731+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="codefest"/><title type='text'>codefest 2011</title><content type='html'>Сегодня был на конференции &lt;a href=&quot;http://codefest.ru/&quot;&gt;codefest&lt;/a&gt; 2011. Завтра будет второй день, но я на него не пойду. Зато сегодня получил массу положительных впечатлений (и это несмотря на то, что пришлось пропустить два интереснейших события - квартирник и виски-пати))). Сегодня было три секции: web, QA и Enterprise. На QA зайти не удалось, в основном был на web и на паре докладов в enterprise.&lt;br /&gt;
&lt;br /&gt;
Веб-секция началась с отличного доклада Олега Токарева &quot;Думай верно!&quot;. В нем было озвучено 5 правильных убеждений для написания хорошего кода. &quot;Прикрывай жопу&quot;, &quot;Скаут друг природы&quot; и другие прекрасные вещи)&lt;br /&gt;
&lt;br /&gt;
Доклад про Yii был обзорным, ничего нового для себя не узнал. Было бы более интересно что-нибудь типа мастер-класса по работе с фреймворком.&lt;br /&gt;
&lt;br /&gt;
Так же на веб-секции была пара интересных докладов про разработку проектов под высокие нагрузки.&lt;br /&gt;
&lt;br /&gt;
Пожалуй самым интересным для был доклад &quot;Language Oriented Programming (LOP) в действии. Как мы это делаем в JetBrains&quot;. Вернее не столько сам доклад (который был обзорным о DSL и MPS), сколько демонстрация Максимом Мазиным исходников проекта YouTrack написанного в MPS и как он за 15 минут написал простенький DSL. Впечатление производит сильное.&lt;br /&gt;
&lt;br /&gt;
Единственный недостаток, доклады были длительностью от 20 до 40 минут, поэтому многим просто не хватало времени, но это неизбежная плата &amp;nbsp;за такое количество докладов в день.&lt;br /&gt;
&lt;br /&gt;
Вообще, конференция была отлична организована ребятами из &lt;a href=&quot;http://2gis.ru/&quot;&gt;2gis&lt;/a&gt;, я очень доволен что сходил.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/5055243468458805005/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/03/codefest-2011.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/5055243468458805005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/5055243468458805005'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/03/codefest-2011.html' title='codefest 2011'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-4916296461280636168</id><published>2011-03-08T23:52:00.000+06:00</published><updated>2011-03-08T23:52:05.066+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><title type='text'>git и svn</title><content type='html'>Клонировать svn-репозиторий из git:&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;git svn clone --tags=&amp;lt;путь к tags&amp;gt; --trunk=&amp;lt;путь к trunk&amp;gt; --branches=&amp;lt;путь к branches&amp;gt; http://example.com/svn/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Если у вас стандартное расположение trunk, branches, tags, можно заменить на одну опцию &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;--stdlayout&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Обновить локальную копию:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;git svn rebase&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Локально можно использовать все возможности git на полную катушку, как с обычным гитовским репозиторием. Закоммитить на сервер:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;git svn dcommit&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/4916296461280636168/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/03/git-svn.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/4916296461280636168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/4916296461280636168'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/03/git-svn.html' title='git и svn'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-369609844398283025</id><published>2011-03-04T23:02:00.000+06:00</published><updated>2011-03-04T23:02:59.322+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="lighttpd"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>ubuntu, lighttpd и php</title><content type='html'>На новой работе впервые столкнулся с веб-сервером &lt;a href=&quot;http://www.lighttpd.net/&quot;&gt;lighttpd&lt;/a&gt;. Это быстрый веб-сервер разрабатываемый с целью работать под большими нагрузками. С PHP (и многими другими языками) он работает через интерфейс FastCGI (поддерживаются также CGI и SCGI).&lt;br /&gt;
&lt;br /&gt;
Так как в качестве рабочей платформы я полностью перехожу на ubuntu с которой уже давно не работал, то решил задокументировать процесс установки необходимого для работы софта.&lt;br /&gt;
&lt;br /&gt;
Ставим лайти:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo apt-get install lighttpd&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Заходим на &lt;a href=&quot;http://localhost/&quot;&gt;http://localhost&lt;/a&gt; и проверяем что сервер заработал.&lt;br /&gt;
&lt;br /&gt;
Теперь ставим MySQL:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo apt-get install mysql-server mysql-client&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
и php с кучей модулей:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo apt-get install php5-cgi php5-dev php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ps php5-pspell php5-recode php5-snmp php5-tidy php5-xmlrpc php5-xsl php5-common php5-mysql&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Теперь нужно поправить одно значение в файле&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;/etc/php5/cgi/php.ini&lt;/span&gt; чтобы php корректно работал в режиме cgi.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;cgi.fix_pathinfo=1&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Осталось включить fastcgi в лайти:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo lighty-enable-mod fastcgi&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo lighty-enable-mod fastcgi-php&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;sudo service lighttpd force-reload&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;После этого кидаем в папку &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;/var/www&lt;/span&gt; файл &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;i.php&lt;/span&gt; с вызовом &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;phpinfo()&lt;/span&gt; и убеждаемся что все работает: &lt;a href=&quot;http://localhost/i.php&quot;&gt;http://localhost/i.php&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/369609844398283025/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/03/ubuntu-lighttpd-php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/369609844398283025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/369609844398283025'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/03/ubuntu-lighttpd-php.html' title='ubuntu, lighttpd и php'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-9038542395176157924</id><published>2011-02-23T13:18:00.001+06:00</published><updated>2011-02-23T13:20:05.193+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="git"/><title type='text'>git и dropbox</title><content type='html'>С распространением дропбокса набирает популярность и необычный способ его использования в качестве сервера git (или любой другой распределенной систему версионирования).&lt;br /&gt;
&lt;br /&gt;
В связи с переездами в последнее время, тоже на него подсел. Очень удобно когда все твои репозитории всегда с тобой на любом компютере и на любой ос (по крайней мере из тех что я использую)).&lt;br /&gt;
&lt;br /&gt;
Кроме того при необходимости можно расшарить папку с репозиторием, что тоже удобно.&lt;br /&gt;
&lt;br /&gt;
Кстати, если в репозитории веб-проект, то нужно кинуть симлинк в папку веб-сервера. Если в *nix системах все знают про команду &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;ln -s&lt;/span&gt;, то в windows нужно использовать команду &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;mklink&lt;/span&gt;. Раньше как-то даже не задумывался что в windows тоже можно симлинки делать).&lt;br /&gt;
&lt;br /&gt;
Синтаксис команды &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;mklink&lt;/span&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;MKLINK [[/D] | [/H] | [/J]] Link Target&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /D &amp;nbsp; &amp;nbsp; &amp;nbsp;Creates a directory symbolic link. &amp;nbsp;Default is a file&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;symbolic link.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /H &amp;nbsp; &amp;nbsp; &amp;nbsp;Creates a hard link instead of a symbolic link.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; /J &amp;nbsp; &amp;nbsp; &amp;nbsp;Creates a Directory Junction.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Link &amp;nbsp; &amp;nbsp;specifies the new symbolic link name.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Target &amp;nbsp;specifies the path (relative or absolute) that the new link&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;refers to.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/9038542395176157924/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/02/git-dropbox.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/9038542395176157924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/9038542395176157924'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/02/git-dropbox.html' title='git и dropbox'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-285817638949830830</id><published>2011-02-13T21:52:00.000+06:00</published><updated>2011-02-13T21:52:52.681+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="GTD"/><title type='text'>Трехсписочный GTD</title><content type='html'>Только что прочитал заметку про &lt;a href=&quot;http://ailev.livejournal.com/908399.html&quot;&gt;трехсписочный GTD&lt;/a&gt;, сам придерживаюсь примерно такого же способа, но использую для этого не заметки в evernote, а задачи в gmail. Там их удобно отмечать выполненными и перетаскивать по списку в другое место. Кроме того gmail это, наверно, самый часто используемый мною сервис, который всегда под рукой.&lt;br /&gt;
&lt;br /&gt;
Правда я не сохранял выполненные и просроченные дела, о чем теперь жалею. По примеру из заметки решил завести отдельный список для их сохранения.&lt;br /&gt;
&lt;br /&gt;
Перепробовал кучу программ для ведения дел, от самых простых до огромных монстров, но так и не ушел с задач gmail. Хотя из последних понравилась &lt;a href=&quot;http://www.6wunderkinder.com/wunderlist/&quot;&gt;wunderlist&lt;/a&gt;, очень симпатичная программа.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/285817638949830830/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/02/gtd.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/285817638949830830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/285817638949830830'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/02/gtd.html' title='Трехсписочный GTD'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-4556178550613074335</id><published>2011-02-13T21:06:00.000+06:00</published><updated>2011-02-13T21:06:18.184+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="extensions"/><category scheme="http://www.blogger.com/atom/ns#" term="Yii"/><title type='text'>Обзор расширений Yii за январь</title><content type='html'>В продолжение &lt;a href=&quot;http://ekaragodin.blogspot.com/2011/01/yii.html&quot;&gt;обзора новых расширений&lt;/a&gt; для Yii, рассмотрим январские расширения. В обзоре участвуют только впервые опубликованные в январе расширения.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;clef&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Для начала рассмотрим консольную команду clef, которая позволяет искать и скачивать экстеншены с официального сайта&amp;nbsp;&lt;a href=&quot;http://www.yiiframework.com/extensions/&quot;&gt;http://www.yiiframework.com/extensions/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Сгенерируем стандартное Yii-приложение. После этого установим расширение &lt;a href=&quot;http://www.yiiframework.com/extension/clef/&quot;&gt;clef&lt;/a&gt;. Для этого нужно распаковать файл&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;clefCommand.php&lt;/span&gt; в папку &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;protected/commands&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;. Теперь мы сможем скачивать расширения для нашего приложения с сайта прямо из командной строки. Откройте в командной строке папку &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;protected&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt; вашего приложения и наберите команду&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;yiic help clef&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Экстеншен довольно простенький, но может превратиться в удобный иструмент для работы с расширениями. Действительно мощным оно станет, если появится взаимодействие с другими расширениями (например, не просто скачивание, а выполнение сценария установки). Сейчас есть неудобство, что нельзя указать куда скачивать расширение, оно автоматически скачивается в папку из которой запускали команду.&lt;br /&gt;
&lt;br /&gt;
В общем, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;clef&lt;/span&gt; одобряем.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;loid&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Очередная вариация на тему OpenID. Страница расширения&amp;nbsp;&lt;a href=&quot;http://www.yiiframework.com/extension/loid/&quot;&gt;loid&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;Для установки используем &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;clef&lt;/span&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;yiic clef download --extension=loid&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
После этого распаковываем скачанный архив в папку&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;extensions&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
Расширение по сути представляет собой простейший загрузчик для класса&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;LightOpenID&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;,&lt;/span&gt;&lt;/div&gt;с одной стороны это удобно если вы уже работали с этим классом, с другой нужно делать дополнительные телодвижения для интеграции OpenID-аутентификации в стандартрное приложение.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;importcsv и csvexport&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
CSV - простой формат хранения табличных данных со временем не теряет своей актуальности и в этом месяце появилось целых два расширения для работы с этим форматом - &lt;a href=&quot;http://www.yiiframework.com/extension/importcsv/&quot;&gt;importcsv&lt;/a&gt; и &lt;a href=&quot;http://www.yiiframework.com/extension/csvexport/&quot;&gt;csvexport&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;yiic clef download --extension=importcsv&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;yiic clef download --extension=csvexport&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;importcsv&lt;/span&gt; - это целый модуль для загрузки данных в бд. &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;csvexport&lt;/span&gt; - напротив, небольшой класс предоставляющий API для выгрузки данных в CSV. Оба расширения полезные, но csvexport удобнее, так как предоставляет собой более готовый для работы модуль.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;simpletree&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Интересный &lt;a href=&quot;http://www.yiiframework.com/extension/simpletree/&quot;&gt;виджет&lt;/a&gt; позволяющий манипулировать моделями с помощью jQuery-плагина &lt;a href=&quot;http://www.jstree.com/&quot;&gt;jsTree&lt;/a&gt;. &amp;nbsp;В общем добавить нечего, простой и удобный способ манипулировать моделями содержащими древовидные данные.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;faceplugs&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Facebook шагает по планете, поэтому очень кстати расширение &lt;a href=&quot;http://www.yiiframework.com/extension/faceplugs/&quot;&gt;faceplugs&lt;/a&gt;, которое является оболочкой для API facebook.&lt;br /&gt;
&lt;br /&gt;
После установки в конфиг добавляем идентификатор вашего facebook-приложения:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&#39;params&#39; =&amp;gt; array(&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&#39;fbAppId&#39; =&amp;gt; &#39;123456789&#39;,&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;....&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;),&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После это можно выводить виджеты:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;$this-&amp;gt;widget(&#39;ext.faceplugs.LikeButton&#39;, array(&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp; &#39;url&#39; =&amp;gt; $this-&amp;gt;createAbsoluteUrl(&#39;/&#39;),&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&amp;nbsp;&amp;nbsp; &#39;og&#39; =&amp;gt; $og&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;));&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Поддерживаются все плагины facebook.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;google-analytics&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
И на закуску &lt;a href=&quot;http://www.yiiframework.com/extension/google-analytics/&quot;&gt;виджет&lt;/a&gt; для вывода кода google analytics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
А так же в январе я опубликовал расширение&amp;nbsp;&lt;a href=&quot;http://ekaragodin.blogspot.com/2011/01/flexible-config.html&quot;&gt;Flexible Config&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Плюс ко всему обновилась куча расширений из проекта &lt;a href=&quot;http://code.google.com/p/yiiext/&quot;&gt;YiiExt&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/4556178550613074335/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/02/yii.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/4556178550613074335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/4556178550613074335'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/02/yii.html' title='Обзор расширений Yii за январь'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3499432214026171677.post-1261970089480415539</id><published>2011-01-26T07:44:00.001+06:00</published><updated>2011-01-26T09:36:02.313+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="extensions"/><category scheme="http://www.blogger.com/atom/ns#" term="Yii"/><title type='text'>Flexible Config</title><content type='html'>Наконец-то нашлось время написать про расширение Flexible Config для Yii,&amp;nbsp;которое&amp;nbsp;я написал на выходных.&lt;br /&gt;
&lt;br /&gt;
Некоторое время для конфигурации приложений пользовался &lt;a href=&quot;http://yiiframework.ru/doc/cookbook/ru/install.many.configs&quot;&gt;этим рецептом&lt;/a&gt;. Он был достаточно удобен, хотя и имел ряд недостатков. Основных недостатков для меня было два:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;При создании нового приложения нужно было по новой настраивать конфигурацию;&lt;/li&gt;
&lt;li&gt;Когда проект разрабатывается несколькими программистами и хранится в какой-либо системе контроля версий, остро встает вопрос синхронизации конфигураций разработчиков;&lt;/li&gt;
&lt;/ol&gt;И я решил раз и навсегда решить эти проблемы. Для этого было написано расширение для Yii, которое добавляет для класса &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;CApplication&lt;/span&gt; один метод &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;loadConfigure()&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Подробнее о настройках расширения можно прочитать в ридми, а я приведу пример оттуда и объясню его работу.&lt;br /&gt;
&lt;br /&gt;
Содержание файла &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;index.php&lt;/span&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/796061.js?file=index.php&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
Содержание файла &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;main.php&lt;/span&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/796062.js?file=main.php&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
Опишу что происходит. С начала &lt;b&gt;инклудится&lt;/b&gt; файл main.php, в котором находится начальная конфигурация. В том же файле находится код который автоматически может определять (в данном случае, по наличию слова &quot;localhost&quot; в адресе сайта) какой режим включать - dev или production. Этот код из &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;index.php&lt;/span&gt; в &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;main.php&lt;/span&gt;, чтобы не было необходимости когда либо редактировать файл &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;index.php&lt;/span&gt;. И поэтому файл &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;main.php&lt;/span&gt; должен инклудится, чтобы константа &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;YII_DEBUG&lt;/span&gt; была определена до загрузки файлов фреймворка.&lt;br /&gt;
&lt;br /&gt;
Затем, как обычно, создается экземпляр класса &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;CWebApplication&lt;/span&gt;. После этого вызывается добавленный с помощью поведения метод &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;loadConfigure()&lt;/span&gt;, который загружает конфигурацию согласно настройкам указанных для поведения в файле &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;main.php&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Каждая конфигурация может иметь одного или нескольких родителей. Это означает, что сначала будут загружены все родительские конфиги (в порядка перечисления в настройках), если у родителя есть свои родители, то они тоже будут загружены (вложенность не ограничена). Метод наследования очень простой: &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;CMap::mergeArray(&#39;parent&#39;, &#39;child&#39;)&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
И есть одна особенность. Например, текущая конфигурация &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;dev&lt;/span&gt;. Тогда после полной загрузки этого конфига, если в той же папке существует файл &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;dev_local.php&lt;/span&gt;, то он будет загружен &lt;b&gt;автоматически&lt;/b&gt;. Т.е. фактически получается &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Courier New&#39;, Courier, monospace;&quot;&gt;&#39;dev_local&#39; = array(&#39;parent&#39; =&amp;gt; &#39;dev&#39;)&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Надеюсь это расширение будет полезно не только для меня.&lt;br /&gt;
&lt;br /&gt;
Скачать расширение можно &lt;a href=&quot;http://www.yiiframework.com/extension/flexibleconfig/&quot;&gt;здесь&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://ekaragodin.blogspot.com/feeds/1261970089480415539/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ekaragodin.blogspot.com/2011/01/flexible-config.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/1261970089480415539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3499432214026171677/posts/default/1261970089480415539'/><link rel='alternate' type='text/html' href='http://ekaragodin.blogspot.com/2011/01/flexible-config.html' title='Flexible Config'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12976284926347952673</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>