<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Токарчук Андрей</title>
	
	<link>http://tokarchuk.ru</link>
	<description>Zend Framework, Doctrine, PHP, Ubuntu и другие интересные штуки. Блог Zend Framework разработчика. Программирование на PHP, вопросы использование memcached, mysql, nosql баз данных, jquery, apache, nginx,mongodb, php и т.д.</description>
	<lastBuildDate>Thu, 09 Feb 2012 06:46:35 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/tokarchuk" /><feedburner:info uri="tokarchuk" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>ZFConf 2012 будет в Москве</title>
		<link>http://feedproxy.google.com/~r/tokarchuk/~3/3_3n0JUuPFU/</link>
		<comments>http://tokarchuk.ru/2012/02/zfconf-2012-moscow/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 06:46:35 +0000</pubDate>
		<dc:creator>Андрей Токарчук</dc:creator>
				<category><![CDATA[IT конференции]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[zfconf]]></category>

		<guid isPermaLink="false">http://tokarchuk.ru/?p=3266</guid>
		<description><![CDATA[Одна из моих любимых конференция &#8212; это ZFConf. Даже не потому, что я работаю с ZF каждый день и хочу быть в курсе всех новых технологий и методов оптимизации. А потому, что у ZF есть сплоченное, дружное коммьюнити. В этот раз конференция пройдёт в Москве, а не в Питере. С одной стороны это хорошо, потому, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftokarchuk.ru%2F2012%2F02%2Fzfconf-2012-moscow%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftokarchuk.ru%2F2012%2F02%2Fzfconf-2012-moscow%2F&amp;source=netandreus&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://tokarchuk.ru/wp-content/uploads/2011/05/zfconf2011.jpg" ><img class="alignleft  wp-image-1827" style="margin: 10px;" title="zfconf2011" src="http://tokarchuk.ru/wp-content/uploads/2011/05/zfconf2011.jpg" alt="" width="69" height="50" /></a>Одна из моих любимых конференция &#8212; это ZFConf. Даже не потому, что я работаю с ZF каждый день и хочу быть в курсе всех новых технологий и методов оптимизации. А потому, что у ZF есть сплоченное, дружное коммьюнити.</p>
<p><span id="more-3266"></span></p>
<p>В этот раз конференция пройдёт в Москве, а не в Питере. С одной стороны это хорошо, потому, что рядом. С другой стороны поездка на конфу было как путешествие, и было приятно посмотреть на Киев и Санкт-Петербург. Вроде и по делу съездить, и немного развеяться. Сейчас открыта <a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.zfconf.ru/2012/registration/"  target="_blank">предварительная регистрация</a>. Окончательная, будет открыта после формирования полного списка докладов. Те, кто прошли предварительную регистрацию, получат уведомления об этом.</p>
<p>Кстати, среди докладчиков возможно будут  из Zend Framework Core Team. Вы тоже можете стать докладчиком, можете заполнить <a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.zfconf.ru/2012/topic-offer/"  target="_blank">специальную форму</a> о предлагаемом докладе. Для иногородних докладчиков обсуждаются условия по компенсации расходов на поездку.</p>
<p><strong>Наиболее актуальные темы для докладов:</strong></p>
<ul>
<li>Проектирование модели в ZF (DDD, бизнес-логика, разделение по слоям, unit testing, &#8230;</li>
<li>Тестирование проектов (Zend_Test, PHPUnit, Selenium, BDD, &#8230;)</li>
<li>Zend Framework 2 — близится релиз! Возможно именно вы обладатель бесценного опыта внедрения, миграции?</li>
<li>Взаимодействие фреймворков Symfony 2 и Zend Framework 2</li>
<li>Истории реальных работающих проектов — архитектура, внедрение, решенные проблемы, организация процесса разработки</li>
<li>Rich UI-приложения (JavaScript, Ajax, Flash, Flex, ActionScript, &#8230;)</li>
<li>Методологии и опыт кэширования данных c помощью Zend_Cache</li>
<li>Оптимизация Zend Framework для работы в нагруженных проектах</li>
<li>Интересный опыт работы с компонентами из Zend_Services, Zend_Tool, Zend_Search_Lucene, &#8230;</li>
<li>Управление облачными инфраструктурами с помощью Zend Framework</li>
<li>Интересные методологии, проблемы, проекты, с которыми вам приходилось работать? Расскажите нам о них!</li>
</ul>
<p>Также риглашаются <a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.zfconf.ru/2012/sponsors/"  target="_blank">спонсоры</a> и инфопартнеры. По всем предложениям и вопросам пишите, пожалуйста, через <a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.zfconf.ru/contacts/"  target="_blank">форму обратной связи</a>.</p>
<p>Кстати с прошлой <a href="http://tokarchuk.ru/2011/05/zfconf-2011" >ZFConf2011</a> стало доступно <a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.zfconf.ru/2011/video/"  target="_blank">видео конференции</a>.</p>
<p><strong>Читайте новости о конференции здесь:</strong></p>
<ul>
<li><strong>Хабраблог:</strong> <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habr.ru/company/wizartech/blog/"  target="_blank">habr.ru/company/wizartech/blog/</a></li>
<li><strong>Facebook:</strong> <a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.facebook.com/groups/143714275748061/"  target="_blank">facebook.com/groups/143714275748061/</a></li>
<li><strong>ВКонтакте:</strong> <a rel="nofollow" href="http://tokarchuk.ru/goto/http://vk.com/zfconf"  target="_blank">vk.com/zfconf</a></li>
<li><strong>RSS:</strong> <a rel="nofollow" href="http://tokarchuk.ru/goto/http://feeds.feedburner.com/zfconf"  target="_blank">feeds.feedburner.com/zfconf</a></li>
<li><strong>Twitter:</strong> <a rel="nofollow" href="http://tokarchuk.ru/goto/http://twitter.com/zfconf"  target="_blank">twitter.com/zfconf</a></li>
</ul>
<p>Организатор: <a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.wizartech.ru/"  target="_blank">Wizartech</a> Партнеры: <a rel="nofollow" href="http://tokarchuk.ru/goto/http://zendframework.ru/"  target="_blank">сообщество Zend Framework</a> и <a rel="nofollow" href="http://tokarchuk.ru/goto/http://frameworksdays.com/"  target="_blank">конференция Frameworks Days</a></p>
<img src="http://feeds.feedburner.com/~r/tokarchuk/~4/3_3n0JUuPFU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tokarchuk.ru/2012/02/zfconf-2012-moscow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tokarchuk.ru/2012/02/zfconf-2012-moscow/</feedburner:origLink></item>
		<item>
		<title>Упаковка Zend Framework 2 в PHAR архив</title>
		<link>http://feedproxy.google.com/~r/tokarchuk/~3/4T8wXDWlgok/</link>
		<comments>http://tokarchuk.ru/2011/12/zend-framework-2-in-phar/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 06:40:20 +0000</pubDate>
		<dc:creator>Андрей Токарчук</dc:creator>
				<category><![CDATA[Highload]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[phar]]></category>
		<category><![CDATA[zend framework 2.0]]></category>

		<guid isPermaLink="false">http://tokarchuk.ru/?p=3092</guid>
		<description><![CDATA[В этой статье я хочу поближе познакомить вас с замечательной фичей &#8212; Phar-архивами. В предыдущем посте я упоминал о ней, а много раньше даже писал обзорную статью по Phar. Целью этого поста будет полная упаковка Zend Framework 2 в один архив, чтобы раз и навсегда исключить проблему инклюдов в ZF веб-приложениях.В последнее время я слышу [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F12%2Fzend-framework-2-in-phar%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F12%2Fzend-framework-2-in-phar%2F&amp;source=netandreus&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://tokarchuk.ru/wp-content/uploads/2011/12/zf-phar.png" ><img class="alignleft size-medium wp-image-3100" style="margin: 10px; background-color: #ffffff;" title="zf-phar" src="http://tokarchuk.ru/wp-content/uploads/2011/12/zf-phar-300x225.png" alt="" width="93" height="71" /></a>В этой статье я хочу поближе познакомить вас с замечательной фичей &#8212; Phar-архивами. В <a href="http://tokarchuk.ru/2011/11/zend-framework-2-materials/" >предыдущем посте</a> я упоминал о ней, а много раньше даже писал <a href="http://tokarchuk.ru/2010/09/phar-%D1%83%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%BA%D0%B0-php-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9/" >обзорную статью по Phar</a>. Целью этого поста будет полная упаковка Zend Framework 2 в один архив, чтобы раз и навсегда исключить проблему инклюдов в ZF веб-приложениях.<span id="more-3092"></span>В последнее время я слышу слишком много флуда, что &#171;PHP уже не торт, вот в Ruby, там да&#8230;&#187;. Или &#171;на PHP кодят только школьники&#187;, &#171;Enterprise приложение на PHP не сделаешь&#187;, &#171;ZF &#8212; тормозной фреймворк&#187; ну и т.д.  А ведь проблемы то растут не из технологий. Хотя PHP имеет груз обратной совместимости, и ZF1 объективно <strong>из коробки</strong> показывает не высокую производительность. Однако, при использовании драйвера &#171;прямые руки&#187; можно спокойно и без нервов переписать тормозящий участок кода, работать через ORM, оптимизировать код и т.д. Но многим людям проще обвинить PHP, чем заняться делом. Это печально <img src='http://tokarchuk.ru/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>В этом посте я хочу рассказать об устранении одной из проблем ZF1 -огромного количество инклюдов (и как следствие файловых операций), а именно компиляция приложения в PHAR архив. Не скажу, что технология компиляции php кода в один файл новая. Раньше были <a rel="nofollow" href="http://tokarchuk.ru/goto/http://zendframework.ru/articles/zend-framework-performance-zf-compiling" >попытки сделать это</a>, но получалось прямо скажем не всегда. Приходилось в полуавтоматическом режиме вырезать require_once() из кода,  а в некоторых местах ZF1 он был нужен, писались исключения. В общем этот подход лично я решил не применять, а ограничился установкой APC байткод-кэшера.</p>
<p>Однако с выходом php 5.3.0 появилась замечательная возможность использовать <a rel="nofollow" href="http://tokarchuk.ru/goto/http://php.net/manual/ru/wrappers.phar.php" >обертку потока phar://</a>. Теперь можно повторить эксперимент на новом уровне.</p>
<p>Сразу оговорюсь, что можно точно также сжать и Zend Framework 1, есть всего-лишь одно небольшое отличие и я расскажу о нём чуть ниже. Для знакомства с теорией рекомендую почитать вот <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/118269/" >эту статью</a> на Хабре. Для упаковки ZF2 в Phar нам понадобится несколько компонентов:</p>
<ol>
<li>Собственно сам ZF2. Скачать последнюю версию можно с <a rel="nofollow" href="http://tokarchuk.ru/goto/http://framework.zend.com/zf2" >офсайта</a> или из <a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/zendframework/zf2/tree/master/library" >Git репозитария</a>.</li>
<li>Файл-загрузчик для Phar-архива (stub.php) &#8212; заглушка. Получает управления сразу после инклюда файла с архивом. Будет ниже.</li>
<li>Упаковщик package.php. Будет ниже.</li>
</ol>
<p><strong>Stub.php для Zend Framework 1.x</strong></p>
<pre class="brush: php">&lt;?php
require_once dirname(__FILE__).'/Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
Zend_Loader_Autoloader::getInstance()-&gt;setFallbackAutoloader(true);
// Finalize stumb
__HALT_COMPILER();</pre>
<p><strong>Stub.php для Zend Framework 2.x</strong></p>
<pre class="brush: php">&lt;?php
require_once dirname(__FILE__) . '/Zend/Loader/AutoloaderFactory.php';
Zend\Loader\AutoloaderFactory::factory(array('Zend\Loader\StandardAutoloader' =&gt; array()));
$moduleLoader = new Zend\Loader\ModuleAutoloader();
$moduleLoader-&gt;register();

// Finalize stumb
__HALT_COMPILER();</pre>
<p><strong>Package.php</strong></p>
<pre class="brush: php">&lt;?php
ini_set('phar.readonly', 0);
/**
* package.php
* Create a Zend Framework phar
*
* @author Cal Evans &lt;cal@calevans.com&gt;
* @author John Douglass &lt;john .douglass@oit.gatech.edu&gt;
*/

$getOptLongArray = array("stub:");
$getOptParams    = "s:p:v";
$options         = getOpt($getOptParams,$getOptLongArray);

if(!isset($options['s'],$options['p']))
{
 echo "You did not specify either a path or a phar file name.\n";
 displayHelp();
 die(1);
}

/*
 * Set up our environment
 */
$sourceLocation = $options['s'];
$basePointer    = strpos($options['s'],'Zend');
$pharFile       = $options['p'];

/*
 * Make sure things are sane before progressing
 */
if ($basePointer&lt;1) {
 echo "It looks like your path is not a Zend Framework path.\nPlease check and try again.\n";
 displayhelp();
 die(1);
}

// At this point, we need to check to see if the file exists. If neither exist, throw exception.
if (isset($options['stub'])) {
 $stubFile = $options['stub'];
} else {
 $stubFile = 'stub.php';
}

if(!file_exists($sourceLocation))
{
 echo "ERROR: Source file location does not exist!\nCheck your source and try again.\n";
 displayhelp();
 die(1);
}

/*
* Let the user know what is going on
*/
echo "Creating PHAR\n";
echo "Source      : {$sourceLocation}\n";
echo "Destination : {$pharFile}\n";
echo "Stub File   : {$stubFile}\n\n";

/*
* Clean up from previous runs
*/
if (file_exists($pharFile)) {
 Phar::unlinkArchive($pharFile);
}

/*
* Setup the phar
*/
$p = new Phar($pharFile, 0, $pharFile);
$p-&gt;compressFiles(Phar::GZ);
$p-&gt;setSignatureAlgorithm (Phar::SHA1);

/*
* Now build the array of files to be in the phar.
* The first file is the stub file. The rest of the files are built from the directory.
*/
$files = array();
$files["stub.php"] = $stubFile;

echo "Building the array of files to include.\n";

$rd = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($sourceLocation));
foreach($rd as $file) {
 if (strpos($file-&gt;getPath(),'.svn')===false &amp;&amp;
 $file-&gt;getFilename() != '..' &amp;&amp;
 $file-&gt;getFilename() != '.')
 {
 $fileIndex = substr($file-&gt;getPath().DIRECTORY_SEPARATOR.$file-&gt;getFilename(),$basePointer);
 $fileName = $file-&gt;getPath().DIRECTORY_SEPARATOR.$file-&gt;getFilename();
 $files[$fileIndex] = $fileName;
 // Coined "phindex" to refer to the included index pointing to the real filename on disk we are creating
 if (isset($options['v'])) {
 echo "   PHIndex[{$fileIndex}] = {$fileName}\n";           
 } // if (isset($options['v']))
 }
} // foreach($rd as $file)

echo "Now building the phar.\n";

/*
* Now build the archive.
*/
$p-&gt;startBuffering();
$p-&gt;buildFromIterator(new ArrayIterator($files));
$p-&gt;stopBuffering();

/*
* finish up.
*/
$p-&gt;setStub($p-&gt;createDefaultStub("stub.php"));
$p = null;

if (isset($options['v'])) {
 echo count($files)." files Added to ".$pharFile."\n";
} // if (isset($options['v']))

echo "Done.\n";
exit;

function displayHelp()
{
 echo "\n\npachage.php\n";
 echo "  Authors: Cal Evans, John Douglass\n\n";
 echo "  -s The directory where Zend Framework is located. Must end in /Zend. \n";
 echo "  -p The name to give your phar file.\n";
 echo "  --stub The name of your stub file. Will default to stub.php if not passed in.\n";
 echo "  -v verbose mode.\n";
}</pre>
<p>Теперь надо правильно расположить файлы. В каталоге вашего проекта создайте папку ./vendor/ZendFramework/library Поместите туда эти файлы (stub.php, package.php) и папку Zend с самим фреймворком. Такое расположение папок характерно для ZF2. Если у вас в проекте другое, то придётся подправить пути. Дальше запускайте следующую команду для компиляции ZF в один файл.</p>
<pre class="brush: bash">andrey@z11:~/sandbox/zf2/vendor/ZendFramework/library$ php ./package.php -s ./Zend -p zf.phar -v
Creating PHAR
Source      : ./vendor/ZendFramework/library/Zend
Destination : zf.phar
Stub File   : stub.php
PHP Fatal error:  Uncaught exception 'UnexpectedValueException' with message 'creating archive "zf.phar" disabled by the php.ini setting phar.readonly' in /home/andrey/zf2.ru/package.php:70
Stack trace:
#0 /home/andrey/zf2.ru/package.php(70): Phar-&gt;__construct('zf.phar', 0, 'zf.phar')
#1 {main}
  thrown in /home/andrey/zf2.ru/package.php on line 70</pre>
<p>Чтобы убрать эту ошибку надо разрешить запись в phar-архивы в php.ini:</p>
<pre class="brush: bash">[Phar]
phar.readonly = 0</pre>
<p>Теперь весь ZF упакован в один файл:</p>
<pre class="brush: bash">...
PHIndex[ZendFramework/library/Zend/Mail/Transport/Exception.php] = ./vendor/ZendFramework/library/Zend/Mail/Transport/Exception.php
   PHIndex[ZendFramework/library/Zend/Mail/Transport/Sendmail.php] = ./vendor/ZendFramework/library/Zend/Mail/Transport/Sendmail.php
   PHIndex[ZendFramework/library/Zend/Mail/Storage.php] = ./vendor/ZendFramework/library/Zend/Mail/Storage.php
Now building the phar.
2836 files Added to zf.phar
Done.</pre>
<p>Отлично, теперь в каталоге ./vendor/ZendFramework/library/ у вас должен появиться файл zf.phar. А значит можно подключать скомпиленный ZF к проекту.</p>
<p><strong>test_phar.php. Подключение для ZF2:</strong></p>
<pre class="brush: php;">&lt;?php
include("phar://".dirname(__FILE__)."/vendor/ZendFramework/library/zf.phar");
$version = new Zend\Version;
print "Compiled ZF version is: \r\n";
print $version::VERSION."\r\n";</pre>
<p><strong>test_phar.php Подключение для ZF1:</strong></p>
<pre class="brush: php">&lt;?php
include("phar://".dirname(__FILE__)."/vendor/ZendFramework/library/zf.phar");
$version = new Zend_Version;
print "Compiled ZF version is: \r\n";
print $version::VERSION."\r\n";</pre>
<p>Однако при запуске test_phar.php отображается пустой экран. При этом в логи PHP ничего не пишет. Прогуглив как следует этот вопрос, я выяснил, что это происходит из-за  Suhosin patch. Для того, чтобы Phar архивы читались нормально, если в системе стоит suhosin patch, вам надо прописать в /etc/php5/conf.d/suhosin.ini (или в php.ini) следующее:</p>
<pre class="brush: bash">suhosin.executor.include.whitelist="phar"</pre>
<p>После этого скрипт должен вывести версию ZF, подключённого через phar архив.</p>
<pre class="brush: bash">andrey@z11:~/sandbox/zf2.ru# php ./test_phar.php
Compiled ZF version is:
2.0.0beta1</pre>
<p>Да, теперь весь ZF можно подключить с помощью одного include! Вы кстати можете модифицировать package.php для своего проекта и вообще залить всё приложение (со всеми библиотеками в один файл). А для хостингов вообще можно красиво сделать. Компилируем php-фреймворки или CMS&#8217;ки в phar, включаем <a href="http://tokarchuk.ru/tag/apc/" >APC</a>, и один экземпляр фреймворка в памяти шарится для всех клиентов.</p>
<h3>Кэширование APC и PHAR</h3>
<p>Самое замечательное в этой ситуации, что когда фреймворк инклюдится по одному файлу (см. рис ниже), то часть из них всё равно вываливается из кэша, а тут один файл, который априори будет всегда лежать в памяти (т.к. будет инклюдится при каждом запросе). Вот что происходит при обычном выполнении запросов.</p>
<div id="attachment_1459" class="wp-caption aligncenter" style="width: 697px"><a href="http://tokarchuk.ru/wp-content/uploads/2011/02/apc-stat.png" ><img class="size-large wp-image-1459" title="apc-stat" src="http://tokarchuk.ru/wp-content/uploads/2011/02/apc-stat-1024x599.png" alt="" width="687" height="402" /></a><p class="wp-caption-text">Без использования PHAR</p></div>
<p style="text-align: left;">Теперь для чистоты экспериментов очистим кэш.</p>
<p style="text-align: left;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/12/apc-phar1.png" ><img class="aligncenter size-large wp-image-3124" title="apc-phar1" src="http://tokarchuk.ru/wp-content/uploads/2011/12/apc-phar1-1024x99.png" alt="" width="518" height="50" /></a></p>
<p style="text-align: left;">Сделаем include PHAR архива и посмотрим кэш.</p>
<p style="text-align: left;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/12/apc-phar2.png" ><img class="aligncenter size-large wp-image-3125" title="apc-phar2" src="http://tokarchuk.ru/wp-content/uploads/2011/12/apc-phar2-1024x234.png" alt="" width="601" height="137" /></a></p>
<p style="text-align: left;">А потом ещё раз include.</p>
<p style="text-align: left;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/12/apc-phar3.png" ><img class="aligncenter size-large wp-image-3126" title="apc-phar3" src="http://tokarchuk.ru/wp-content/uploads/2011/12/apc-phar3-1024x235.png" alt="" width="600" height="138" /></a></p>
<p style="text-align: left;">О чём это говорит? При include конкретного файла класса он сначала берется из кэша, и если его там нет, то из Phar архива, который тоже висит в памяти, т.е. также кэшируется. В итоге дисковых операций не происходит.</p>
<h3>Бонусы</h3>
<p><a href="http://tokarchuk.ru/wp-content/uploads/2011/12/gift.png" ><img class="size-thumbnail wp-image-3111 alignleft" style="margin: 10px;" title="gift" src="http://tokarchuk.ru/wp-content/uploads/2011/12/gift-150x150.png" alt="" width="90" height="90" /></a>В этом посте будет пара бонусов, а именно скомпиленные в PHAR фреймворки Zend Framework 1 и Zend Framework 2.<br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/tokarchuk.ru/wp-content/uploads/2011/12/zf_1_11_0_dev.phar.tar.gz">zf_1_11_0_dev.phar.tar.gz</a> (<a href="http://zalil.ru/32255687" >зеркало</a>)<br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/tokarchuk.ru/wp-content/uploads/2011/12/zf_2_0_0beta1.phar.tar.gz">zf_2_0_0beta1.phar.tar.gz</a> (<a href="http://zalil.ru/upload/32255680" >зеркало</a>)<br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/netandreus/tokarchuk_ru_materials" >Скачать всё с GitHub</a></p>
<p>Подключаются они обычным инклюдом:</p>
<pre class="brush: php">&lt;?php
include("phar://".dirname(__FILE__)."/vendor/ZendFramework/library/zf.phar");</pre>
<p>Не забудьте, что при перекомпилировании фреймворка при работающем APC в памяти остаётся висеть старый архив, и вам надо перезапустить php5-fpm или Apache, чтобы сбросить кэш.</p>
<h3>Ссылки</h3>
<ul>
<li><a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.php.net/manual/en/phar.using.intro.php" >http://www.php.net/manual/en/phar.using.intro.php</a></li>
<li><a rel="nofollow" href="http://tokarchuk.ru/goto/http://blog.calevans.com/2009/07/19/lessons-in-phar/" >http://blog.calevans.com/2009/07/19/lessons-in-phar/</a></li>
<li><a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/118269/" >http://habrahabr.ru/blogs/php/118269/</a></li>
</ul>
<h3>UPD</h3>
<p>Обязательно нужно убрать саму папку library/Zend из проекта, иначе идет передекларирование классов, т.е. ты все классы подключил через phar, а Loader делает include_once например, и он инклудит физический файл, но класс уже был объявлен в phar и выходит ошибка. Или же проверять загружен ли класс или нет перед include_once.</p>
<img src="http://feeds.feedburner.com/~r/tokarchuk/~4/4T8wXDWlgok" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tokarchuk.ru/2011/12/zend-framework-2-in-phar/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://tokarchuk.ru/2011/12/zend-framework-2-in-phar/</feedburner:origLink></item>
		<item>
		<title>Zend Framework 2. Материалы для изучения.</title>
		<link>http://feedproxy.google.com/~r/tokarchuk/~3/lhNmOythKRA/</link>
		<comments>http://tokarchuk.ru/2011/11/zend-framework-2-materials/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 06:17:04 +0000</pubDate>
		<dc:creator>Андрей Токарчук</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[zend framework 2]]></category>

		<guid isPermaLink="false">http://tokarchuk.ru/?p=3059</guid>
		<description><![CDATA[Сейчас ходит много слухов о грядущей версии Zend Fremework 2. В основном слухи касаются увеличенной производительности, новым более гибким подходам, улучшенной по сравнению с 1ой версией стандартизацией и унификацией. В этом посте я хочу разместить подборку материалов для изучающих ZF2. ZF2 &#8212; это абсолютно новый фреймворк. Это значит, что он не совместим с ZF1. Да. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F11%2Fzend-framework-2-materials%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F11%2Fzend-framework-2-materials%2F&amp;source=netandreus&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://tokarchuk.ru/wp-content/uploads/2011/11/zf2.png" ><img class="alignleft size-medium wp-image-3060" style="margin: 10px;" title="zf2" src="http://tokarchuk.ru/wp-content/uploads/2011/11/zf2-300x150.png" alt="" width="86" height="43" /></a>Сейчас ходит много слухов о грядущей версии Zend Fremework 2. В основном слухи касаются увеличенной производительности, новым более гибким подходам, улучшенной по сравнению с 1ой версией стандартизацией и унификацией. В этом посте я хочу разместить подборку материалов для изучающих ZF2.<span id="more-3059"></span></p>
<p>ZF2 &#8212; это абсолютно новый фреймворк. Это значит, что он не совместим с ZF1. Да. Это было сделано с целью полного обновления фреймворка. Все мы знаем на примере php, что такое груз обратной совместимости, и похоже в команде ZF это тоже прекрасно понимают. Именно поэтому было принято такое решение. Почему 2.0? Основной целью при переписывании фреймворка было увеличение его производительности. ZF 1 хорош, однако он имеет ряд узких мест (в частности Zend_Application). Также есть некоторое количество архитектурных недоработок: разные способы инициализации плагинов, разные способы использование хелперов. В 2.0 такие места будут стандартизированы. Принцип &#171;примата соглашения над конфигурацией&#187;, который исповедуется в Ruby On Rails, будет применяться и здесь. Для разработчиков эт о в первую очередь означает, что гораздо реже придётся лазить в мануал.</p>
<h3>PHP 5.2 to PHP 5.3</h3>
<p>Прежде всего надо начать с того, что ZF2 написан полностью на PHP 5.3 с использованием namespaces и других плюшек. Чтобы разобраться в теме миграции на 5.3 рекомендую вам почитать вот этот раздел мануалки на офсайте.</p>
<p><a rel="nofollow" href="http://tokarchuk.ru/goto/http://php.net/manual/en/migration53.php" >Migrating from PHP 5.2.x to PHP 5.3.x</a></p>
<p>На тему нововведений в php 5.3 можно прочитать вот <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/59876/" >эту статью</a> и <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/63926/" >эту</a>. Про namespace есть несколько неплохих статей на хабре: <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/132736/" >PHP Namespaces</a>, <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/132777/" >Внедряем namespaces в существующий php-код</a>. А вот более практические статейки: Как использовать пространства имен в PHP, <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/72033/" >Часть 1: Основы</a>, <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/72097/" >Часть 2: импортирование, псевдонимы и правила разбора имён</a>, <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/72150/" >Часть 3: Ключевые слова и автозагрузка</a>. Также рекомендую пройти <a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.zend.com/en/resources/webinars/php" >вебинары по php 5.3</a>.</p>
<h3>Docblox</h3>
<p>Статьи по Docblox (новой системе документирования php кода):</p>
<p><a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/127804/" >Docblox — система документирования, совместимая с PHP 5.3+</a>, <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/128182/" >Docblox — некоторые нововведения</a>.</p>
<h3>Phar</h3>
<p>В новом PHP всерьез подошли к борьбе с кучей инклюдов, файловых операций. Для этого в частности придумали такую штуку, как phar-архивы. PHAR — это утилита для создания исполняемых архивов в PHP, аналог JAR в Java.<br />
Она позволяет упаковать много файлов в один, в результате чего приложение может работать с целой библиотекой, как с одним файлом.Она умеет создавать, читать, записывать и конвертировать такие форматы, как TAR, ZIP и, собственно, PHAR.Доступ к файлам в архиве осуществляется напрямую, без необходимости  распаковки архива, через PHP Stream Wrapper, то есть с файлами из архива  работают все функции, которые поддерживают PHP Stream Wrapper. Пример работы с phar есть <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/php/118269/" >здесь</a>.</p>
<h3>Введение в Zend Framework 2</h3>
<p><a rel="nofollow" href="http://tokarchuk.ru/goto/http://devzone.zend.com/1851/zendcon-2010-podcast_introducing-zend-framework-20/" >Подкаст + слайды Matthew Weier O&#8217;Phinney</a></p>
<div id="__ss_5673722" style="width: 595px;"><object id="__sse5673722" width="595" height="497"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2010-11-04-zf2talk-101104230157-phpapp01&amp;stripped_title=introducing-zend-framework-20&amp;userName=weierophinney" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><embed type="application/x-shockwave-flash" width="595" height="497" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2010-11-04-zf2talk-101104230157-phpapp01&amp;stripped_title=introducing-zend-framework-20&amp;userName=weierophinney" name="__sse5673722" allowscriptaccess="always" allowfullscreen="true" wmode="transparent"></embed></object></div>
<p>Также на сайте Zend есть другие <a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.zend.com/en/resources/webinars/framework" >вебинары по Zend Framework 2</a>.</p>
<h3>Паттерны проектирования Zend Framework 2</h3>
<div id="__ss_7954215" style="width: 595px;"><object id="__sse7954215" width="595" height="497"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2011-04-21-zf2patterns-110513104015-phpapp01&amp;stripped_title=zend-framework-20-patterns-tutorial&amp;userName=weierophinney" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><embed type="application/x-shockwave-flash" width="595" height="497" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2011-04-21-zf2patterns-110513104015-phpapp01&amp;stripped_title=zend-framework-20-patterns-tutorial&amp;userName=weierophinney" name="__sse7954215" allowscriptaccess="always" allowfullscreen="true" wmode="transparent"></embed></object></div>
<p>Вы можете следить за разработкой отдельных компонентов ZF2: <a rel="nofollow" href="http://tokarchuk.ru/goto/http://zf2.evan.pro" >zf2.evan.pro</a></p>
<h3>Делаем первое приложение на Zend Framework 2</h3>
<p><a rel="nofollow" href="http://tokarchuk.ru/goto/http://akrabat.com/wp-content/uploads/Getting-Started-with-Zend-Framework-2.pdf" >скачать в виде PDF</a>.</p>
<h3>Dependency Injection</h3>
<p>Очень важным для понимания нового ZF является парадигма Dependency Injection. Инверсия управления является распространенным явлением, с которым вы столкнетесь при использовании фреймворков. И действительно, она часто рассматривается как определяющая характеристика фреймворка.</p>
<blockquote><p>Одной важной характеристикой фреймворка является то, что методы, определенные пользователем для адаптации фреймворка под свои нужды, будут чаще всего вызываться внутри самого же фреймворка, а не из кода приложения пользователя. Фреймворк часто играет роль главной программы в координации и последовательности действий приложения. Такая инверсия управления дает фреймворку возможность служить расширяемым скелетом приложения. Методы, предоставляемые пользователем, адаптируют общие алгоритмы, определенные фреймворком, под определенное приложение.<br />
<em>Ральф Джонсон и Брайан Фут.</em></p></blockquote>
<div id="__ss_5671568" style="width: 595px;"><strong style="display: block; margin: 12px 0 4px;"><a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.slideshare.net/fabpot/dependency-injectionzendcon2010" title="Dependency injection-zendcon-2010"  target="_blank">Dependency injection-zendcon-2010</a></strong> <object id="__sse5671568" width="595" height="497"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dependency-injection-zendcon-2010-101104172213-phpapp01&amp;stripped_title=dependency-injectionzendcon2010&amp;userName=fabpot" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="wmode" value="transparent" /><embed type="application/x-shockwave-flash" width="595" height="497" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dependency-injection-zendcon-2010-101104172213-phpapp01&amp;stripped_title=dependency-injectionzendcon2010&amp;userName=fabpot" name="__sse5671568" allowscriptaccess="always" allowfullscreen="true" wmode="transparent"></embed></object></div>
<p>По DI есть руководство и от самого сообщества ZF в их вики <a rel="nofollow" href="http://tokarchuk.ru/goto/http://framework.zend.com/wiki/display/ZFDEV2/Zend+DI+QuickStart" >Zend DI QuickStart</a> + <a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/ralphschindler/ZF2ByExample/tree/master/examples/di" >примеры по DI</a> и пример по работе <a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/adamlundrigan/zf-examples/tree/master/zf2-di-in-zf1" >ZF2 DI в ZF1</a>.</p>
<h3>Event Manager</h3>
<p><a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/ralphschindler/ZF2ByExample/tree/master/examples/event-manager" >Примеры работы ZF2 Event Manager</a><br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/http://robertbasic.com/blog/azend-framework-2-eventmanager-use-case/" >Пример использования ZF2 EventManager</a><br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/robertbasic/zf2phpplaneta" >Порт ZF1 приложения на ZF2</a></p>
<h3>Другие ссылки</h3>
<p><a rel="nofollow" href="http://tokarchuk.ru/goto/http://framework.zend.com/wiki/pages/viewpage.action?pageId=42303506" >How to start with Zend Framework 2? (zf wiki)</a><br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/http://packages.zendframework.com/docs/latest/manual/en/index.html" >Programmer&#8217;s Reference Guide</a><br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/http://dev.ftrrtf.com/zf2/" >Подборка ссылок по ZF2 от Валерия Рабиевского</a></p>
<p>Удачи в изучении, будут вопросы или предложения &#8212; велкам в комменты! <img src='http://tokarchuk.ru/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/tokarchuk/~4/lhNmOythKRA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tokarchuk.ru/2011/11/zend-framework-2-materials/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://tokarchuk.ru/2011/11/zend-framework-2-materials/</feedburner:origLink></item>
		<item>
		<title>Invision power board, кэширование, nginx и редиректы</title>
		<link>http://feedproxy.google.com/~r/tokarchuk/~3/XXd3dXZR28w/</link>
		<comments>http://tokarchuk.ru/2011/11/nginx-redirect-bug/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 06:02:24 +0000</pubDate>
		<dc:creator>Андрей Токарчук</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[ipb]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://tokarchuk.ru/?p=3044</guid>
		<description><![CDATA[В этом посте я расскажу о баге, который недавно правил. Проблема была в том, что nginx выдавал 404 ошибку при обращении к одной из внутренних страниц форума. Баг проявлялся временами, и обладал ещё рядом особенностей. Он проявлялся исключительно на сайте с движком IPB (Invision Power Board). После выключения кэширования в движке или перезапуске memcached работа [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F11%2Fnginx-redirect-bug%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F11%2Fnginx-redirect-bug%2F&amp;source=netandreus&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://tokarchuk.ru/wp-content/uploads/2011/11/301.png" ><img class="alignleft size-full wp-image-3047" style="margin: 10px; background-color: #ffffff;" title="301" src="http://tokarchuk.ru/wp-content/uploads/2011/11/301.png" alt="" width="48" height="48" /></a>В этом посте я расскажу о баге, который недавно правил. Проблема была в том, что <a href="http://tokarchuk.ru/tag/nginx/" >nginx</a> выдавал 404 ошибку при обращении к одной из внутренних страниц форума. Баг проявлялся временами, и обладал ещё рядом особенностей.<span id="more-3044"></span></p>
<ol>
<li>Он проявлялся исключительно на сайте с движком IPB (Invision Power Board).</li>
<li>После выключения кэширования в движке или перезапуске memcached работа была восстановлена.</li>
<li>Баг воспроизводился только для внутренних страниц форума.</li>
<li>Страничное кэширование в nginx было отключено.</li>
</ol>
<p>С одной стороны можно было бы просто выключить кэширование на форуме, да и забыть об этом.</p>
<pre class="brush: php;">$INFO['use_memcache'] = 0; // Выключаем
$INFO['memcache_server_1'] = "127.0.0.1";
$INFO['memcache_port_1'] = "11211";</pre>
<p>Однако, в этом случае сильно возрастает нагрузка на сервер, что в конечном счёте выливается во вполне реальные деньги. Так что  надо бороться с причиной, а не с последствиями.</p>
<p>Подчистив логи nginx я воспроизвёл баг и начал смотреть в файлы журналов. Там, в error.log обнаружилась интересная запись:</p>
<pre class="brush: bash;">2011/11/20 09:39:00 [error] 15907#0: *653303 upstream sent too big header while reading response header from upstream, client: 81.145.110.213, server: site.ru, request: "GET /index.php?showforum=9&amp;s=a27c0252d9c97966ea9d5293f7bbfd47 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9010", host: "forum.ru", referrer: "http://forum.ru/"</pre>
<p>А интересного в ней то, что я обращался к сайту forum.ru, а в записи фигурирует site.ru, который также обслуживается на этом сервере.<br />
Гугление проблемы привело меня в тред <a rel="nofollow" href="http://tokarchuk.ru/goto/http://forum.nginx.org/read.php?2,154025,154036" >Possible bug? Redirect 301 to 1st hostname in server_name list</a> на форуме nginx.  Суть бага заключается вот в чём:</p>
<blockquote><p>When requesting host3/drupal<br />
nginx sends http 301 and the browser is redirected to host1/drupal<br />
(which is on another server).</p></blockquote>
<p>У меня ситуация аналогичная. Сайт <strong>site.ru</strong> стоит первым в списке server_name в конфиге nginx, а запрос идёт на <strong>forum.ru</strong>, который болтается где-то в середине.</p>
<h3>Решение</h3>
<p>Чтобы вылечить данный баг, надо добавить в конфиг nginx строчку</p>
<pre class="brush: bash">server_name_in_redirect off;</pre>
<p>и тогда nginx не будет использовать первое значение server_name для подстановки в адреса при редиректах, а все мы знаем, как IPB любит редиректы <img src='http://tokarchuk.ru/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Ну а можно просто поставить первым в списке нужный server_name.</p>
<h3>Upstream sent too big header</h3>
<p>Но моя радость была бы не полной, если бы не выплыл ещё один баг. В логах теперь отображается правильный server_name, однако сама ошибка никуда не исчезла. Вот она:</p>
<pre class="brush: bash">15907#0: *653303 upstream sent too big header while reading response header from upstream</pre>
<p>Для её исправления надо было увеличить буферы nginx&#8217;у</p>
<pre class="brush: bash">fastcgi_buffers 8 32k;
fastcgi_buffer_size 32k;</pre>
<p>Если nginx проксирует на apache, то нужно добавлять вот эти строки</p>
<pre class="brush: bash">proxy_buffers 8 16k;
proxy_buffer_size 32k</pre>
<p>Удачи вам, коллеги веб-девелоперы!</p>
<h3>Ссылки</h3>
<p><a rel="nofollow" href="http://tokarchuk.ru/goto/http://sklavyvbrauzer.blogspot.com/2011/09/upstream-sent-too-big-header-while.html" >http://sklavyvbrauzer.blogspot.com/2011/09/upstream-sent-too-big-header-while.html</a><br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/http://wiki.nginx.org/HttpCoreModule#server_name_in_redirect" >http://wiki.nginx.org/HttpCoreModule#server_name_in_redirect</a><br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/http://forum.nginx.org/read.php?2,154025,154036" >http://forum.nginx.org/read.php?2,154025,154036</a></p>
<img src="http://feeds.feedburner.com/~r/tokarchuk/~4/XXd3dXZR28w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tokarchuk.ru/2011/11/nginx-redirect-bug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tokarchuk.ru/2011/11/nginx-redirect-bug/</feedburner:origLink></item>
		<item>
		<title>Перевод часов в Ubuntu Server / Desktop</title>
		<link>http://feedproxy.google.com/~r/tokarchuk/~3/s2Bd-ZR4AEg/</link>
		<comments>http://tokarchuk.ru/2011/10/timezones-ubuntu/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 10:43:30 +0000</pubDate>
		<dc:creator>Андрей Токарчук</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[tzdata]]></category>

		<guid isPermaLink="false">http://tokarchuk.ru/?p=3000</guid>
		<description><![CDATA[В воскресенье утром обнаружил, что почему-то техника показывает разное время. На одних часах время ушло на час назад, на других нет. Пытался даже позвонить в службу точного времени (+7(495) 100) но там было занято, а механических часов дома давно уж нет Потом у друзей узнал время, и понял в чём засада. Некоторые железки так и [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2Ftimezones-ubuntu%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2Ftimezones-ubuntu%2F&amp;source=netandreus&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/clock_256.png" ><img class="alignleft size-thumbnail wp-image-3007" style="margin: 10px;" title="clock_256" src="http://tokarchuk.ru/wp-content/uploads/2011/10/clock_256-150x150.png" alt="" width="43" height="43" /></a>В воскресенье утром обнаружил, что почему-то техника показывает разное время. На одних часах время ушло на час назад, на других нет. Пытался даже позвонить в службу точного времени (+7(495) 100) но там было занято, а механических часов дома давно уж нет <img src='http://tokarchuk.ru/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <span id="more-3000"></span>Потом у друзей узнал время, и понял в чём засада. Некоторые железки так и не обновили софт, и поэтому радостно перевели время на час назад. И тут я вспомнил про сервера. На них время тоже перевелось. Дальше напишу, как можно быстро вернуть всё на своё место на серверах/компах на базе Ubuntu.</p>
<h3>Как вернуть время на Ubuntu</h3>
<pre class="brush: bash;">sudo apt-get update
sudo apt-get install tzdata</pre>
<p>Если пакет tzdata у вас уже установлен, то он обновится. Пакет содержит данные о часовых поясах всего мира и правилах перехода на летнее/зимнее время. Он периодически обновляется, чтобы отразить изменения, принимаемые в различных странах. Вот как раз такое обновление нам и нужно подцепить. На одном из моих серверов потребовалась коррекция времени с помощью команды</p>
<pre class="brush: bash">dpkg-reconfigure tzdata</pre>
<div id="attachment_3005" class="wp-caption aligncenter" style="width: 649px"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/tzdata_correct.png" ><img class="size-full wp-image-3005 " title="tzdata_correct" src="http://tokarchuk.ru/wp-content/uploads/2011/10/tzdata_correct.png" alt="Настрйока tzdata" width="639" height="408" /></a><p class="wp-caption-text">Настройка времени tzdata в Ubuntu</p></div>
<p style="text-align: center;">&nbsp;</p>
<p>После этого можно проверить время командой date.</p>
<p>Вот как менялась зона у меня:</p>
<pre class="brush: bash">root@test:/etc/apt# sudo apt-get install tzdata
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Пакеты, которые будут обновлены:
  tzdata
обновлено 1, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 80 пакетов не обновлено.
Необходимо скачать 637kБ архивов.
После данной операции, объём занятого дискового пространства уменьшится на 8 192B.
Получено:1 http://ru.archive.ubuntu.com/ubuntu/ maverick-updates/main tzdata all 2011m-0ubuntu0.10.10 [637kB]
Получено 637kБ за 5с (125kБ/c)
Предварительная настройка пакетов ...
(Чтение базы данных ... на данный момент установлено 87076 файлов и каталогов.)
Подготовка к замене пакета tzdata 2011g-0ubuntu0.10.10 (используется файл .../tzdata_2011m-0ubuntu0.10.10_all.deb) ...
Распаковывается замена для пакета tzdata ...
Настраивается пакет tzdata (2011m-0ubuntu0.10.10) ...

Current default time zone: 'Etc/UTC'
Local time is now:      Mon Oct 31 10:22:00 UTC 2011.
Universal Time is now:  Mon Oct 31 10:22:00 UTC 2011.
Run 'dpkg-reconfigure tzdata' if you wish to change it.

root@test:/etc/apt# dpkg-reconfigure tzdata

Current default time zone: 'Europe/Moscow'
Local time is now:      Mon Oct 31 14:23:26 MSK 2011.
Universal Time is now:  Mon Oct 31 10:23:26 UTC 2011.</pre>
<p>&nbsp;</p>
<h3>Корректировка времени на форуме IPB</h3>
<p>Если в вашем распоряжении есть форум на базе Invision Power Board, знайте &#8212; он может не подцепить системное время. В этом случае его надо откорректировать тут:<br />
Настройки и инструменты &gt; Системные настройки &gt; Система &gt; Формат чисел, времени и дат</p>
<div id="attachment_3003" class="wp-caption aligncenter" style="width: 605px"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/ipb-time.png" ><img class="size-large wp-image-3003" title="ipb-time" src="http://tokarchuk.ru/wp-content/uploads/2011/10/ipb-time-1024x377.png" alt="Корректировка времени в IPB (Invision Power Board)" width="595" height="219" /></a><p class="wp-caption-text">Корректировка времени в IPB (Invision Power Board)</p></div>
<p>Отменяем автоперевод времени и ставим корректировку в +60 минут.</p>
<p>Удачного дня, не теряйте время <img src='http://tokarchuk.ru/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/tokarchuk/~4/s2Bd-ZR4AEg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tokarchuk.ru/2011/10/timezones-ubuntu/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://tokarchuk.ru/2011/10/timezones-ubuntu/</feedburner:origLink></item>
		<item>
		<title>Linux Kernel 3.0.8 with Ubuntu 10.10</title>
		<link>http://feedproxy.google.com/~r/tokarchuk/~3/5xrTDwl_aoU/</link>
		<comments>http://tokarchuk.ru/2011/10/linux-kernel-3-0-8-with-ubuntu-10-10/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 08:31:49 +0000</pubDate>
		<dc:creator>Андрей Токарчук</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Аппаратное обеспечение]]></category>
		<category><![CDATA[Виртуализация]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://tokarchuk.ru/?p=2970</guid>
		<description><![CDATA[В этом посте будет описано обновление ядра для Ubuntu, его причины и результаты. Также расскажу об установке модуля Virtualbox на него. Являясь &#171;счастливым&#187; обладателем ноутбука с процессором Core i7 620М я не устаю удивляться, что до сих пор Linux корректно не поддерживает интегрированное видео. Хотя в последнее время были подвижки на эту тему, однако с [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2Flinux-kernel-3-0-8-with-ubuntu-10-10%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2Flinux-kernel-3-0-8-with-ubuntu-10-10%2F&amp;source=netandreus&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/tux.jpg" ><img class="alignleft size-full wp-image-2975" style="margin: 10px;" title="tux" src="http://tokarchuk.ru/wp-content/uploads/2011/10/tux.jpg" alt="" width="40" height="40" /></a>В этом посте будет описано обновление ядра для Ubuntu, его причины и результаты. Также расскажу об установке модуля Virtualbox на него.<span id="more-2970"></span></p>
<p>Являясь &#171;счастливым&#187; обладателем ноутбука с процессором <a href="http://tokarchuk.ru/2010/12/sony-vaio-vpcz11-vs-ubuntu-10-10/"  title="Ubuntu и ssd">Core i7 620М</a> я не устаю удивляться, что до сих пор Linux корректно не поддерживает интегрированное видео. Хотя в последнее время были <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/ubuntu/125950/" >подвижки на эту тему</a>, однако с  ядром 3.1-rc10, которое я попробовал, загрузиться не удалось.</p>
<p>Итак, что же мы имеем на данный момент. Интегрированная графика не поддерживается на ядрах 2.6.36 &#8212; 2.6.38, есть патченные ядра от адама, с которыми она работает нормально. 2.6.37-vaioz у меня работала стабильно (если не считать вылета сессии Gnome после ввода Enter). Свеженькая Ubuntu 11.10 c ядром 3.0.4, у меня не завелась. А я очень на это надеялся. Ядра 3.1.x еще сыроваты, т.к. находятся в разработке.</p>
<p>На хабре <a href="http://tokarchuk.ru/wp-content/uploads/2011/10/linux-3.0.8.jpg" ><img class="alignleft size-full wp-image-2974" style="margin: 10px;" title="linux-3.0.8" src="http://tokarchuk.ru/wp-content/uploads/2011/10/linux-3.0.8.jpg" alt="" width="122" height="122" /></a>в теме про <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/ubuntu/83503/" >KernelCheck</a> проскочила замечательная <a rel="nofollow" href="http://tokarchuk.ru/goto/http://kernel.ubuntu.com/~kernel-ppa/mainline/" >ссылка</a> на  ppa-репозитарии с ядрами в deb пакетах. Это была для меня хорошая новость, т.к. теперь можно было просто перебрать все ядра и выяснить, какие из них будут работать с моим оборудованием. Начал я с версии <a rel="nofollow" href="http://tokarchuk.ru/goto/http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.1-rc10-oneiric/" >3.1-rc10</a>. Система загрузилась, но потом ушла в kernel panic. Ок, дальше я попробовал <a rel="nofollow" href="http://tokarchuk.ru/goto/http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.0.8-oneiric/" >3.0.8</a>. Система загрузилась, и уже пол-часа работает нормально (тьфу-тьфу-тьфу). Со второй попытки угадал, неплохо. Дальше будет мануалка по установке. Хотя там всё просто в общем-то.</p>
<p>&nbsp;</p>
<h3>Установка ядрышка 3.0.8 + модуля ядра для VirtualBox</h3>
<p>1. Качаем три пакета из репозитария:</p>
<pre class="brush: bash;">wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.0.8-oneiric/linux-headers-3.0.8-030008_3.0.8-030008.201110250135_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.0.8-oneiric/linux-headers-3.0.8-030008-generic_3.0.8-030008.201110250135_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.0.8-oneiric/linux-image-3.0.8-030008-generic_3.0.8-030008.201110250135_amd64.deb</pre>
<p>Если у вас архитектура x86, то ссылки будут другими. Пакеты лежат <a rel="nofollow" href="http://tokarchuk.ru/goto/http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.0.8-oneiric/" >по-соседству</a>.</p>
<p>2. Ставим пакеты.</p>
<pre class="brush: bash;">sudo dpkg -i ./linux-headers-3.0.8-030008_3.0.8-030008.201110250135_all.deb
sudo dpkg -i ./linux-headers-3.0.8-030008-generic_3.0.8-030008.201110250135_amd64.deb
sudo dpkg -i ./linux-image-3.0.8-030008-generic_3.0.8-030008.201110250135_amd64.deb</pre>
<p>Пишу, чтобы во-первых самому не забыть очередность, а во вторых чтобы был чёткий алгоритм.</p>
<p>3. Перезагружаем систему, в grub выбираем новое ядро. Грузимся, скрестив пальцы <img src='http://tokarchuk.ru/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
4. Если загрузились, то ставим модуль для VirtualBox:</p>
<pre class="brush: bash;">sudo /etc/init.d/vboxdrv setup
WARNING: Deprecated config file /etc/modprobe.conf, all config files belong into /etc/modprobe.d/.
 * Stopping VirtualBox kernel modules                            [ OK ]
 * Uninstalling old VirtualBox DKMS kernel modules               [ OK ]
 * Trying to register the VirtualBox kernel modules using DKMS   [ OK ]
 * Starting VirtualBox kernel modules                            [ OK ]</pre>
<p>Теперь виртуалки должны запускаться нормально. Проверяем.</p>
<p>Глюки с падающей при логине сессией исчезли, единственное, что напрягает, так это то, что на ноутбуке не горит светодиод выбранной видеокарты.</p>
<p>Ядро <a rel="nofollow" href="http://tokarchuk.ru/goto/http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.1-oneiric/" >3.1</a> не пробовал. Но может и оно подойдёт.</p>
<h3>Ссылки</h3>
<p><a rel="nofollow" href="http://tokarchuk.ru/goto/http://kernel.ubuntu.com/~kernel-ppa/mainline/" >http://kernel.ubuntu.com/~kernel-ppa/mainline/</a></p>
<img src="http://feeds.feedburner.com/~r/tokarchuk/~4/5xrTDwl_aoU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tokarchuk.ru/2011/10/linux-kernel-3-0-8-with-ubuntu-10-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://tokarchuk.ru/2011/10/linux-kernel-3-0-8-with-ubuntu-10-10/</feedburner:origLink></item>
		<item>
		<title>Ruby 1.9.2 и Ubuntu 11.10</title>
		<link>http://feedproxy.google.com/~r/tokarchuk/~3/KyBGijI8c1k/</link>
		<comments>http://tokarchuk.ru/2011/10/ruby-1-9-2-and-ubuntu-11-10/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 13:12:43 +0000</pubDate>
		<dc:creator>Андрей Токарчук</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://tokarchuk.ru/?p=2949</guid>
		<description><![CDATA[Сегодня товарищ на работе обновил Ubuntu до версии 11.10 (Oneiric Ocelot). Ну и начали ловить первые баги. В этом посте я расскажу, как поставить Ruby 1.9.2.Итак ставили Ruby как обычно, по этому мануалу. Однако потом наткнулись на несколько глюков. Во первых после установки ruby-1.9.2 и выполнении # rvm use 1.9.2 # rvm --default 1.9.2 версия [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2Fruby-1-9-2-and-ubuntu-11-10%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2Fruby-1-9-2-and-ubuntu-11-10%2F&amp;source=netandreus&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/ubuntu-small.jpg" ><img class="size-thumbnail wp-image-2950 alignleft" style="margin: 10px;" title="ubuntu-small" src="http://tokarchuk.ru/wp-content/uploads/2011/10/ubuntu-small-150x150.jpg" alt="" width="34" height="34" /></a>Сегодня товарищ на работе обновил Ubuntu до версии 11.10 (Oneiric Ocelot). Ну и начали ловить первые баги. В этом посте я расскажу, как поставить Ruby 1.9.2.<span id="more-2949"></span>Итак ставили Ruby как обычно, по <a href="http://tokarchuk.ru/2011/05/installing-rvm-ruby-1-9-rails-3-0-1-in-ubuntu/"  title="Ubuntu 10.10 svn создание репозитория">этому мануалу</a>. Однако потом наткнулись на несколько глюков. Во первых после установки ruby-1.9.2 и выполнении</p>
<pre class="brush: bash"># rvm use 1.9.2
# rvm --default 1.9.2</pre>
<p>версия показывалась не та, что ставилась:</p>
<pre class="brush: bash"># ruby -v
 ruby 1.8.7</pre>
<h3>«SSLv2_method» undeclared here</h3>
<p>Оказалось, что в системе установлены пакеты со старым руби. Мы снесли их вот так:</p>
<pre class="brush: bash"> sudo apt-get remove ruby1.8</pre>
<p>После этого начали ставить новый руби (1.9.2) через rvm,  и тут на нас вылезла куча ошибок:</p>
<pre class="brush: bash">$ sudo rvm install 1.9.2
Installing Ruby from source to: /usr/share/ruby-rvm/rubies/ruby-1.9.2-p180, this may take a while depending on your cpu(s)...

ruby-1.9.2-p180 - #fetching
ruby-1.9.2-p180 - #extracted to /usr/share/ruby-rvm/src/ruby-1.9.2-p180 (already extracted)
ruby-1.9.2-p180 - #configuring
arith -Wwrite-strings -Wno-missing-field-initializers -Wno-long-long  -fPIC  -o ossl_ssl.o -c ossl_ssl.c
ossl_ssl.c:110:1: ошибка: «SSLv2_method» undeclared here (not in a function)
ossl_ssl.c:111:1: ошибка: «SSLv2_server_method» undeclared here (not in a function)
ossl_ssl.c:112:1: ошибка: «SSLv2_client_method» undeclared here (not in a function)
make[1]: *** [ossl_ssl.o] Ошибка 1
make[1]: Выход из каталога `/var/cache/ruby-rvm/src/ruby-1.9.2-p180/ext/openssl'
make: *** [mkmain.sh] Ошибка 1</pre>
<p>Нехитрым гуглением я понимаю, что проблема кроется в несовместимости Ruby 1.9.2 и LibSSL 1.0. Версия libssl 0.9.8 работает нормально, однако при попытке удаления 1.0 пакетный менеджер показал около сотни пакетов на удаление. Я всё же не решился удалять пол-системы и начал искать другой выход.</p>
<p>Я нашел небольшой <a rel="nofollow" href="http://tokarchuk.ru/goto/http://redmine.ruby-lang.org/attachments/1575/0001-Add-option-which-enable-SSLv2-support.patch" >патч</a>. Итак исправляем два файла: extconf.rb и ossl_ssl.c, которые у меня лежали вот здесь: /usr/local/rvm/src/ruby-1.9.2-p180/ext/openssl<br />
После этого пытаемся второй раз поставить ruby и нам это удается. Проблема решена!</p>
<h3>no such file to load mkmf (LoadError)</h3>
<p>После этого версия стала показываться нормальная, однако наш гем (<a href="http://tokarchuk.ru/tag/starling/" >starling</a>), который мы хотели установить &#8212; не ставился. А писал нам вот такие ошибки:</p>
<pre class="brush: bash">no such file to load mkmf (LoadError)</pre>
<p>Выяснилось, что этот модуль (mkmf) содержится в dev-пакете руби. Однако нашей ошибкой было то, что мы ставили пакет ruby1.8-dev, он и перекрывал текущий интерпретатор. Решение всё-же нашлось. Надо было поставить другой пакет, который при первичном поиске не выдавался:</p>
<pre class="brush: bash"> sudo apt-get install ruby1.9.1-dev</pre>
<p>В нём есть нужный модуль, и он всё-таки из ветки 1.9.x.<br />
После этого гем поставился нормально и мы получили на машине свежий руби и starling.</p>
<img src="http://feeds.feedburner.com/~r/tokarchuk/~4/KyBGijI8c1k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tokarchuk.ru/2011/10/ruby-1-9-2-and-ubuntu-11-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tokarchuk.ru/2011/10/ruby-1-9-2-and-ubuntu-11-10/</feedburner:origLink></item>
		<item>
		<title>Zend Framework Day 2011</title>
		<link>http://feedproxy.google.com/~r/tokarchuk/~3/Ygvm7y5VXE0/</link>
		<comments>http://tokarchuk.ru/2011/10/zf-day-2011/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 05:16:59 +0000</pubDate>
		<dc:creator>Андрей Токарчук</dc:creator>
				<category><![CDATA[IT конференции]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://tokarchuk.ru/?p=2915</guid>
		<description><![CDATA[12 ноября, в Киеве, пройдет конференция &#171;Zend Framework Day&#187; &#8212; посвященная популярному PHP фреймворку Zend Framework. Среди докладчиков непосредственные разработчики компонент Zend Framework. Событие соберет лучших PHP и Zend Framework специалистов из Украины, России, Белоруссии и других стран СНГ. С текущим списком тем и докладчиков можно ознакомиться на странице. Событие будет интересно не только тем, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2Fzf-day-2011%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2Fzf-day-2011%2F&amp;source=netandreus&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/zend-framework-day.png" ><img class="size-thumbnail wp-image-2921 alignleft" style="margin: 10px;" title="zend-framework-day" src="http://tokarchuk.ru/wp-content/uploads/2011/10/zend-framework-day-150x150.png" alt="" width="65" height="65" /></a>12 ноября, в Киеве, пройдет конференция &#171;Zend Framework Day&#187; &#8212; посвященная популярному PHP фреймворку Zend Framework. Среди докладчиков непосредственные разработчики компонент Zend Framework. Событие соберет лучших PHP и Zend Framework специалистов из Украины, России, Белоруссии и других стран СНГ.</p>
<p><span id="more-2915"></span>С текущим списком тем и докладчиков можно ознакомиться на <a rel="nofollow" href="http://tokarchuk.ru/goto/http://frameworksdays.com/event/zend-framework-day-2011/speakers" >странице</a>.</p>
<p>Событие будет интересно не только тем, кто использует Zend Framework, но и всем веб-разработчикам и PHP программистам в частности.</p>
<p>Место проведения — отель &#171;Казацкий&#187;, г. Киев, ул. Михайловская 1/3 (Площадь Независимости).</p>
<p>Со стоимостью участия и другой необходимой информацией вы можете ознакомиться на <a rel="nofollow" href="http://tokarchuk.ru/goto/http://frameworksdays.com/event/zend-framework-day-2011" >странице</a>.</p>
<p>Для участия в конференции необходимо пройти регистрацию на <a rel="nofollow" href="http://tokarchuk.ru/goto/http://frameworksdays.com/register" >странице</a>, а затем произвести оплату из личного кабинета.</p>
<h3>Ссылки</h3>
<p>Сайт конференции &#8212; <a rel="nofollow" href="http://tokarchuk.ru/goto/http://frameworksdays.com/event/zend-framework-day-2011" >http://frameworksdays.com/event/zend-framework-day-2011</a><br />
Наши новости в twitter &#8212; <a rel="nofollow" href="http://tokarchuk.ru/goto/http://twitter.com/fwdays" >http://twitter.com/fwdays</a><br />
Наша страница в facebook – <a rel="nofollow" href="http://tokarchuk.ru/goto/http://facebook.com/fwdays" >http://facebook.com/fwdays</a></p>
<img src="http://feeds.feedburner.com/~r/tokarchuk/~4/Ygvm7y5VXE0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tokarchuk.ru/2011/10/zf-day-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tokarchuk.ru/2011/10/zf-day-2011/</feedburner:origLink></item>
		<item>
		<title>1С Битрикс Облачный драйв. Фотоотчёт.</title>
		<link>http://feedproxy.google.com/~r/tokarchuk/~3/BS-v3ayWMLM/</link>
		<comments>http://tokarchuk.ru/2011/10/1c-cloud-and-v11/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 11:56:47 +0000</pubDate>
		<dc:creator>Андрей Токарчук</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[IT конференции]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[1с]]></category>
		<category><![CDATA[битрикс]]></category>

		<guid isPermaLink="false">http://tokarchuk.ru/?p=2838</guid>
		<description><![CDATA[Пару дней назад в мою почту свалилось приглашение на конференцию Битрикса. Откуда я собственно узнал, что вышла его новая 11 версия. Интересно было узнать, что же там нового, да и вообще приглядеться к самой популярной отечественной платной CMS системе.Конференция проходила в отеле Ararat Park Hyatt Moscow, в самом центре, недалеко от красной площади. Там кстати [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2F1c-cloud-and-v11%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2F1c-cloud-and-v11%2F&amp;source=netandreus&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/bitrix.jpg" ><img class="alignleft size-full wp-image-2840" style="margin: 10px;" title="bitrix" src="http://tokarchuk.ru/wp-content/uploads/2011/10/bitrix.jpg" alt="" width="33" height="31" /></a>Пару дней назад в мою почту свалилось приглашение на конференцию Битрикса. Откуда я собственно узнал, что вышла его новая 11 версия. Интересно было узнать, что же там нового, да и вообще приглядеться к самой популярной отечественной платной CMS системе.<span id="more-2838"></span><a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/company/bitrix/blog/129823/" >Конференция</a> проходила в отеле Ararat Park Hyatt Moscow, в самом центре, недалеко от красной площади. Там кстати поставили какие-то ограждения не то уже на 7 ноября (хотя ещё рано), не то для чего-то ещё. Побродив там немного я направился в отель. Давно там не был, скажу что обустроено там всё по высшему разряду, что и закономерно.</p>
<p style="text-align: center;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110125.jpg" ><img class="size-medium wp-image-2848" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110125-300x224.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110131.jpg" ><img class="size-medium wp-image-2851" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110131-300x224.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110128.jpg" ><img class="size-medium wp-image-2850" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110128-300x224.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110132.jpg" ><img class="size-medium wp-image-2852" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110132-300x224.jpg" alt="" width="150" height="150" /></a></p>
<p>На самом деле мероприятие было не столько IT-конференцией, сколько пресс-конференцией и презентацией для партнеров Битрикса. Из технических людей там были мы с <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/users/XaocCPS/" >Владимиром Юневым</a>, коллеги из хостеров и Яндекса (ну не считая собственно сотрудников Битрикса), автор Roem.ru. Пока мы сидели и общались с Владимиром подошел <a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.1c-bitrix.ru/blog/rsv/" >Сергей Рыжиков</a>, генеральный директор Битрикса. Мы разговаривали на тему гео-кластера, распределения нагрузки и облачных систем хранения данных. Было очень интересно пообщаться. За разговором не заметили, как пролетело время и всех позвали в конференц-зал. Доклад был всего один, собственно презентация 11 версии.</p>
<h3>Релиз-цикл Битрикса</h3>
<p style="text-align: center;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110133.jpg" ><img class="size-thumbnail wp-image-2864" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110133-150x150.jpg" alt="" width="150" height="150" /> </a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110134.jpg" ><img class="size-thumbnail wp-image-2865" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110134-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa1101351.jpg" ><img class="size-thumbnail wp-image-2867" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa1101351-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110136.jpg" ><img class="size-thumbnail wp-image-2868" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110136-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Сергей начал с того, что текущая версия была выпущена раньше времени. По идее это должен был быть Битрикс 10.5, но изменений накопилось столько, что с новая версия может с полным правом называться 11ой. В вебдеве всё постоянно меняется, и надо следовать этим изменениям, поэтому полугодовой релиз-цикл &#8212; самое то.</p>
<h3>Проблема качества</h3>
<p>Про баги битрикса не говорит только ленивый. На форумах, да и на Хабре тоже постоянно возникают топики про глючность и бажность этой CMS. Тут надо внести некоторую ясность. Сам я раньше тоже не был приверженцем Битрикса. Как-то поковыряв исходники 6ой версии я пришел в ужас, и неприятный осадок от того оставался до сих пор. Однако во первых, сейчас уже 11 версия на дворе, и с тех пор многое поправлено. Во-вторых глядя в changelist понимаешь, что с совсем уж плохим кодом такого сделать было бы просто нереально. Ну и в третьих, клиент не разбирается в ч1ём проблем &#8212; в хостинге, настройках сервера или самого битрикса, криворуких программистов в студии партнере. Он просто <a rel="nofollow" href="http://tokarchuk.ru/goto/http://habrahabr.ru/blogs/i_am_angry/130116/" >видит, что Битрикс глючит</a>.</p>
<p style="text-align: center;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110137.jpg" ><img class="alignnone size-thumbnail wp-image-2872" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110137-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110138.jpg" ><img class="alignnone size-thumbnail wp-image-2873" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110138-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa1101391.jpg" ><img class="alignnone size-thumbnail wp-image-2875" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa1101391-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110142.jpg" ><img class="alignnone size-thumbnail wp-image-2879" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110142-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Таким образом проблема качества &#8212; стала основным приоритетом при разработке системы и наладке отношений с партнерами. Для облегчения процесса внедрения и сдачи проекта конечному клиенту (т.е. для клиента и для партнера) в Битрике пробовали использовать стандартные методы: обучение, сертификацию. Однако на массовом рынке сделать это сложно, да и ресурсы затрачиваются большие. Еще больше осложняет проблему тот факт, что в работе над веб-сайтов участвуют несколько человек: собственно клиент, партнер и разработчики платформы.</p>
<h3>Монитор качества внедрения</h3>
<p>Для решения проблемы был создан <strong>Монитор качества внедрения</strong>. Это по сути некий checklist, по которому можно (даже нужно) проверять проект перед сдачей, это система тестов для веб-разработчиков. Она включает в себя 26 обязательных тестов и 39 необязательных а также 12 автоматических проверок. Их число постоянно увеличивается. Основная цель монитора качества &#8212; сдать заказчику качественный, проверенный проект, тем самым снизив количество ошибок.</p>
<p style="text-align: center;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110143.jpg" ><img class="alignnone size-thumbnail wp-image-2880" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110143-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110144.jpg" ><img class="alignnone size-thumbnail wp-image-2881" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110144-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110145.jpg" ><img class="alignnone size-thumbnail wp-image-2882" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110145-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Для разработчиков он также облегчает жизнь. Они могут сами добавлять свои тесты в &#171;монитор качества&#187;. Например это могут быть тесты на публикацию в каталогах, какие-либо шаги по SEO-оптимизации, тестирование code style, тесты по контекстной рекламе с помощью сторонних API и многое другое.</p>
<p>Монитор качества позволяет разработчикам систематизировать процедуру тестирования, повысить качество создания проектов, а также формализовать отношения с заказчиками. Думаю любому клиенту будет приятно, когда он получит бумажку с распечаткой результатов прохождения теста монитора качество. Это позволит для него снизить риски и затраты, как на этапе приемки веб-сайта, так и на этапе его поддержки и сопровождения. Иными словами, монитор качества призван повысить уровень гарантированного результата и снизить общие риски.</p>
<h3>Облака и Битрикс</h3>
<p style="text-align: center;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110146.jpg" ><img class="alignnone size-thumbnail wp-image-2883" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110146-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110147.jpg" ><img class="alignnone size-thumbnail wp-image-2884" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110147-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110148.jpg" ><img class="alignnone size-thumbnail wp-image-2885" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110148-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110149.jpg" ><img class="alignnone size-thumbnail wp-image-2886" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110149-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Другая модная нынче тема это облачные вычисления. На самом деле облачные технологии это старые добрые кластерные технологии, только с динамическим выделением ресурсов, живыми миграциями и некоторыми другими &#171;приметами нового времени&#187;. В презентации была высказана мысль, что облако &#8212; это новая операционная система. Формируются новые сервисы с API для приложений, облачный масштабируемый SQL, документы и файлы постепенно переезжают в облака (Google Docs, DropBox, Ubuntu One), календари почта и коммуникации тоже стремятся уйти с десктопов. Что это значит для разработчика? Он обеспечивается инфраструктурой, его приложения исполняются на ресурсах облачного провайдера, становится доступна масштабируемость и высокая производительность.</p>
<p style="text-align: center;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110150.jpg" ><img class="alignnone size-thumbnail wp-image-2887" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110150-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110151.jpg" ><img class="alignnone size-thumbnail wp-image-2888" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110151-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110152.jpg" ><img class="alignnone size-thumbnail wp-image-2889" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110152-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110155.jpg" ><img class="alignnone size-thumbnail wp-image-2890" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110155-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Традиционное веб-приложение использует три компонента: собственно исходный код, систему хранения (БД) и систему кэширования (Memcached со товарищи). При возрастании нагрузки разработчик вынужден добавлять кэширующие сервера, фронт-энды, сервера БД&#8230; иными словами кластеризовать веб-продукт.</p>
<p style="text-align: center;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110156.jpg" ><img class="alignnone size-thumbnail wp-image-2892" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110156-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110157.jpg" ><img class="alignnone size-thumbnail wp-image-2893" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110157-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110158.jpg" ><img class="alignnone size-thumbnail wp-image-2894" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110158-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110159.jpg" ><img class="alignnone size-thumbnail wp-image-2895" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110159-150x150.jpg" alt="" width="150" height="150" /></a></p>
<h4>Что же нового представлено в 11ой версии битрикса с точки зрения облачной инфраструктуры?</h4>
<ul>
<li>Поддержка облачных хранилищ и CDN. Битрикс позволяет задавать типы файлов и соответствующее им облачное хранилище. Т.е. всё статику можно перевести в облако. А облако = CDN, что решает большую головную боль по доставки контента. Разработчки полностью отказались от csync2 и своей инфраструктуры в пользу использования ресурсов облачного провайдера. Надо сказать, что это снимает целый комплекс вопросов по синхронизации и поддержки актуальности данных.</li>
<li>Географический веб-кластер. Это то, о чём они мечтали пол-года &#8212; год назад. Решив проблему хранения контента можно решать проблему географического распределения вычислений, т.е. генерации страницы. Тут опять же надо использовать <a rel="nofollow" href="http://tokarchuk.ru/goto/http://www.opennet.ru/base/dev/memcached_tips.txt.html" >принцип локальности</a>. Клиент должен взаимодействовать с ближайшим к нему узлом кластера (облака, не важно).</li>
<li>Виртуальная машина 3.0. У меня почему-то сложилось впечатление, что разработчики битрикса сделали свою виртуальную машину, которая что-то интерпретирует. Однако это было ошибочное представление. Имеется в виду образ ОС (на базе Debian) насколько я знаю, пригодный для развертывания в инфраструктуре облачного провайдера. Всё, чтобы пользователю решения (партнеру в данном случае) было легче.</li>
<li>Новая технология кэширования. Очевидно это также касается обалчно инфраструктуры и кэширования уже в ней. Вкратце было сказано, что локальая копия не изменяет себя, а все изменения накатывает в облако, откуда потом берет данные, кэшируя у себя. В общем, очень интересно. Я бы даже не отказался пощупать это в жизни.</li>
</ul>
<p>В общих чертах можно сказать, что Битрикс сейчас проходит этап становления платформы, как когда-то прошел его, например,  Google. На данный момент поддерживаются следующие облачные хранилища: Google, Amazon, Windows Azure, Rackspace и OpenStack. Особенная гордость битриксовцев &#8212; это поддержка <a rel="nofollow" href="http://tokarchuk.ru/goto/http://ru.wikipedia.org/wiki/OpenStack" >OpenStack</a>. Это комплекс открытого ПО, который поддерживает около 50 компаний по всему миру, среди которых есть и Citrix, Dell, AMD, Intel и другие. Из российских представителей это Clodo.ru</p>
<p style="text-align: center;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110160.jpg" ><img class="alignnone size-thumbnail wp-image-2896" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110160-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110161.jpg" ><img class="alignnone size-thumbnail wp-image-2897" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110161-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110162.jpg" ><img class="alignnone size-thumbnail wp-image-2898" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110162-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Кроме классификации файлов по типам для хранения в разных обьлачных хранилищах, можно делать это по размеру. Например все файлы &#171;весом&#187; больше 100Мб перемещать в Google Storage, а всё видео &#8212; в Amazon. На этом кстати можно здорово сэкономить. При использовании &#171;Медиатеки&#187; (аналог &#171;Медиа-менеджера&#187; в Joomla и &#171;Медиафайлов&#187; в WordPress) все файлы могут храниться в облаках и доставляться мгновенно с помощью CDN-сетей Google, Microsoft и других. Так что теперь из CDN можно брать не только jQuery <img src='http://tokarchuk.ru/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
Географический веб-кластер повышает отказоустойчивость проекта и обеспечивает независимость от дата-центра и поставщика облачных услуг (нет vendor-lock). В разных дата-центрах объединяются несколько групп веб-кластеров, находящихся в разных городах и странах. В случае отказа одного дата-центра, в работу мгновенно включается другой, без необходимости восстановления &#171;бекапа&#187;.</p>
<h3>Виртуальная машина 3.0</h3>
<p>Новая &#171;виртуальная машина 3.0&#8243; включает в себя мастер создания кластера, мастер добавления slave-сервера, мастер переключения slave-сервера в режим master. Теперь чтобы развернуть кластер, необходимо 5-10 минут. При этом не требуется ничего устанавливать или настраивать. Кроме того, появилась возможность на одной виртуальной машине запускать несколько сайтов, что также благотворно скажется на эффективности использования ресурсов. Поддерживаются следующие технологии виртуализации: VmWare, Parallels, Microsoft, Amazon WebService, Xen. Битрикс становится платформой не только для создания сайтов, но и для разработки облачных веб-сервисов, ведь основные задачи по развертыванию и поддержки инфраструктуры взяли на себя разработчики системы.</p>
<h3>Безопасная авторизация</h3>
<p style="text-align: center;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110163.jpg" ><img class="alignnone size-thumbnail wp-image-2899" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110163-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110164.jpg" ><img class="alignnone size-thumbnail wp-image-2900" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110164-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110165.jpg" ><img class="alignnone size-thumbnail wp-image-2901" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110165-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Из 50 000 клиентов только у 2 000 включён SSL. Остальные находятся в опасности, т.к. их учётные записи могут быть скомпрометированы. Для повышения безопасности разработчики реализовали шифрование пароля на клиенте средствами JavaScript и отправки по каналу связи уже зашифрованный пароль, что должно затруднить потенциальный взлом.</p>
<h3>Marketplace, &#171;<strong>Мне нравится&#187; и социальный поиск</strong></h3>
<p style="text-align: center;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110166.jpg" ><img class="alignnone size-thumbnail wp-image-2903" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110166-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110169.jpg" ><img class="alignnone size-thumbnail wp-image-2904" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110169-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>В новую версию включён <strong>Marketplace</strong>, в котором размещены уже более 300 готовых приложений. Интересно есть ли там Angry Birds? <img src='http://tokarchuk.ru/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Вообще идея хорошая, привлечь сторонних разработчиков. Кстати они уже запустили процессинг приложений. Посмотрим, что из этого выйдет.</p>
<p>Интерфейс социальной кнопки сделан более простым. Хотя алгоритм счёта и усложнился. Добавлена лента активности на сайте, и переработан поиск. Теперь поиск вместе с индексами вообще можно вынести на отдельную машину. Рейтинг того или иного контента зависит от количества и весов голосов за него, т.е. поиск стал социальным. При каждом нажатии на кнопку &#171;мне нравится&#187; происходит пересчёт рейтинга. Не знаю, конечно, как это сказалось на производительности.</p>
<h3><strong>Русские имена файлов, папок и сайтов. Микроформаты.</strong></h3>
<p style="text-align: center;"><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110172.jpg" ><img class="alignnone size-thumbnail wp-image-2905" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110172-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110173.jpg" ><img class="size-thumbnail wp-image-2906" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110173-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110174.jpg" ><img class="size-thumbnail wp-image-2907 alignnone" title="OLYMPUS DIGITAL CAMERA" src="http://tokarchuk.ru/wp-content/uploads/2011/10/pa110174-150x150.jpg" alt="" width="150" height="150" /></a></p>
<p>Теперь поддерживаются русские имена, так что можно будет чем-то забить ваш домен в зоне .рф <img src='http://tokarchuk.ru/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  А для лучшей индексируемости сайта поисковиками внедрена поддержка микроформатов, например, для товаров в интернет-магазине.</p>
<h3>Outro</h3>
<p>В общем конференция понравилась, рад был пообщаться с коллегами из Битрикса и Сергеем лично. Мне определённо нравится в какую сторону идёт Битрикс. Надеюсь его разработчикам удастся сломать старый имидж, и мы увидим на нём ещё много качественных и интересных проектов!</p>
<p>&nbsp;</p>
<img src="http://feeds.feedburner.com/~r/tokarchuk/~4/BS-v3ayWMLM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tokarchuk.ru/2011/10/1c-cloud-and-v11/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://tokarchuk.ru/2011/10/1c-cloud-and-v11/</feedburner:origLink></item>
		<item>
		<title>MHA for MySQL: Master High Availability Manager and tools for MySQL</title>
		<link>http://feedproxy.google.com/~r/tokarchuk/~3/Xwrn7k8AiPM/</link>
		<comments>http://tokarchuk.ru/2011/10/mha-for-mysql-master-high-availability-manager-and-tools-for-mysql/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 05:44:28 +0000</pubDate>
		<dc:creator>Андрей Токарчук</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://tokarchuk.ru/?p=2754</guid>
		<description><![CDATA[Недавно вышел релиз 0.52 замечательного средства поддержки MySQL кластера &#171;Master High Availability Manager&#187; от моего японского товарища Yoshinori Matsunobu. Он известен в первую очередь, как разработчик HandlerSocket (NoSQL средства доступа к БД MySQL). Он работает в компании DeNA, которая управляет географически-распределённый MySQL кластером. Чем больше машин в кластере, тем больше вероятность сбоев. Именно поэтому Yoshinori [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2Fmha-for-mysql-master-high-availability-manager-and-tools-for-mysql%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftokarchuk.ru%2F2011%2F10%2Fmha-for-mysql-master-high-availability-manager-and-tools-for-mysql%2F&amp;source=netandreus&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://tokarchuk.ru/wp-content/uploads/2011/10/mysql-small.png" ><img class="alignleft size-full wp-image-2825" style="margin: 10px;" title="mysql-small" src="http://tokarchuk.ru/wp-content/uploads/2011/10/mysql-small.png" alt="" width="52" height="53" /></a>Недавно вышел релиз 0.52 замечательного средства поддержки MySQL кластера &#171;Master High Availability Manager&#187; от моего японского товарища Yoshinori Matsunobu. Он известен в первую очередь, как разработчик <a href="http://tokarchuk.ru/2010/12/handlersocket-protocol-and-php-handlersocket-extension/"  title="Percona handlersocket PHP">HandlerSocket</a> (NoSQL средства доступа к БД MySQL).</p>
<p><span id="more-2754"></span>Он работает в компании DeNA, которая управляет географически-распределённый MySQL кластером. Чем больше машин в кластере, тем больше вероятность сбоев. Именно поэтому Yoshinori занялся разработкой такого рода. MHA был протестирован в рамках компании и теперь его можно спокойно скачать с <a rel="nofollow" href="http://tokarchuk.ru/goto/http://code.google.com/p/mysql-master-ha/downloads/list" >Google Code</a>.</p>
<h3>Обзор релиза</h3>
<p><a href="../wp-content/uploads/2011/10/yoshinori.jpg"><img class="alignleft" style="margin: 10px 30px 10px 10px;" title="yoshinori" src="../wp-content/uploads/2011/10/yoshinori.jpg" alt="" width="162" height="220" /></a>Итак, что же нового в версии 0.52.</p>
<ol>
<li>Именование версий теперь будет таким: mha4mysql-manager-X.Y Автор кстати непрозрачно намекает, что в будущем собирается патентовать одноимённую (MHA) торговую марку.</li>
<li>Теперь поддерживается <a href="http://tokarchuk.ru/2010/06/multi-master-%d1%80%d0%b5%d0%bf%d0%bb%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d1%8f-%d0%b2-mysql/" >Multi-Master схема</a>! В прошлой (0.50) версии она не работала, по этому поводу даже создали <a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/yoshinorim/mha4mysql-manager/issues/5" >feature request</a> на gitbub. Разработка велась сначала в отдельной ветке, а 12 сентября была перенесена в основную. Пример конфига для установки вы найдёте <a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/yoshinorim/mha4mysql-manager/issues/5" >здесь</a>.</li>
<li>Багфиксы:</li>
</ol>
<ul>
<li><a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/yoshinorim/mha4mysql-manager/issues/6" rel="nofollow" >Manager-Issue#6</a> masterha_check_repl may die with UUV when a master dies</li>
<li><a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/yoshinorim/mha4mysql-manager/issues/8" rel="nofollow" >Manager-Issue#8</a> MHA Manager does not start if Log::Dispatch version is 2.22 or lower</li>
<li><a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/yoshinorim/mha4mysql-manager/issues/10" rel="nofollow" >Manager-Issue#10</a> @@global.relay_log_purge should be preserved on change master</li>
<li><a rel="nofollow" href="http://tokarchuk.ru/goto/https://github.com/yoshinorim/mha4mysql-manager/issues/11" rel="nofollow" >Manager-Issue#11</a> Manager aborts by UUV if errstr is empty (rare cases)</li>
</ul>
<h3>Multi-master scheme</h3>
<p>Как я понял, схема работает следующим образом. Пусть есть 4 сервера A &lt;&#8212;&gt; B, A &#8212;&gt; C, B &#8212;&gt;D и в данный момент сервер A &#8212; активный мастер, т.е. на него идут все запросы на запись. Мастер-сервер B находится в оперативном резерве. Сервер С &#8212; slave для A, D &#8212; slave для B. Как только сервер A падает, то активным мастером становится B, а C переключается на него. Схема очень похожа на MongoDB Replica Sets, однако там голосование нод и выборы нового мастера идёт децентрализовано, а здесь централизовано с помощью MHA Manager&#8217;а.</p>
<p>Но в принципе и на том спасибо, ранее такой схемы не было, а сейчас она бы очень пригодилось многим админам и веб-разработчикам, т.к. избавляет от ручного труда по перенастройке (да я в курсе про MMA-tools). Например в 1С-Битрикс: веб-кластер насколько я знаю в данный момент делают аналогичную системе. Теперь можно взять за основу труды Yoshinori и допилить их под свои нужды.</p>
<h3>Ссылки</h3>
<p><a rel="nofollow" href="http://tokarchuk.ru/goto/http://yoshinorimatsunobu.blogspot.com/2011/09/mha-for-mysql-052-released.html" >http://yoshinorimatsunobu.blogspot.com/2011/09/mha-for-mysql-052-released.html</a><br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/http://code.google.com/p/mysql-master-ha/" >http://code.google.com/p/mysql-master-ha/</a><br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/http://code.google.com/p/mysql-master-ha/wiki/TableOfContents?tm=6" >http://code.google.com/p/mysql-master-ha/wiki/TableOfContents?tm=6</a><br />
<a rel="nofollow" href="http://tokarchuk.ru/goto/http://code.google.com/p/mysql-master-ha/downloads/list" >http://code.google.com/p/mysql-master-ha/downloads/list</a></p>
<img src="http://feeds.feedburner.com/~r/tokarchuk/~4/Xwrn7k8AiPM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tokarchuk.ru/2011/10/mha-for-mysql-master-high-availability-manager-and-tools-for-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://tokarchuk.ru/2011/10/mha-for-mysql-master-high-availability-manager-and-tools-for-mysql/</feedburner:origLink></item>
	</channel>
</rss><!-- This Quick Cache file was built for (  tokarchuk.ru/feed/ ) in 3.53200 seconds, on Feb 9th, 2012 at 4:27 pm UTC. --><!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 9th, 2012 at 5:27 pm UTC --><!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --><!-- Quick Cache Is Fully Functional :-) ... A Quick Cache file was just served for (  tokarchuk.ru/feed/ ) in 0.00000 seconds, on Feb 9th, 2012 at 5:00 pm UTC. -->

