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

<channel>
	<title>Neurons to bytes</title>
	<atom:link href="http://torqueo.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://torqueo.net</link>
	<description>Всё в кучу!</description>
	<pubDate>Thu, 25 Feb 2010 13:39:35 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Кэширование и сжатие файлов в apache2</title>
		<link>http://torqueo.net/caching-and-compression-files-in-apache2/</link>
		<comments>http://torqueo.net/caching-and-compression-files-in-apache2/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 13:00:01 +0000</pubDate>
		<dc:creator>Ouch!</dc:creator>
		
		<category><![CDATA[программерское]]></category>

		<category><![CDATA[apache2]]></category>

		<category><![CDATA[caching]]></category>

		<category><![CDATA[compression]]></category>

		<category><![CDATA[htaccess]]></category>

		<guid isPermaLink="false">http://torqueo.net/?p=414</guid>
		<description><![CDATA[Прочёл статью Настройка кеширования в Apache. Хотелось бы дополнить её, но только для Apache2. Первый апач рассматривать не буду, он устарел, а всегда нужно стремиться к новому :)
Итак, как правильно заметил автор, по-умолчанию в Apache кэширование и сжатие отключено. Чтобы их включить, нужно подключить в Apache нужные модули. Это модули mod_deflate, mod_expires и mod_headers.
Я сделал [...]]]></description>
			<content:encoded><![CDATA[<p>Прочёл статью <a rel="noindex,nofollow" href="http://www.xpro.su/archives/123">Настройка кеширования в Apache</a>. Хотелось бы дополнить её, но только для <strong>Apache2</strong>. Первый апач рассматривать не буду, он устарел, а всегда нужно стремиться к новому :)</p>
<p>Итак, как правильно заметил автор, по-умолчанию в Apache кэширование и сжатие отключено. Чтобы их включить, нужно подключить в Apache нужные модули. Это модули <strong>mod_deflate</strong>, <strong>mod_expires</strong> и <strong>mod_headers</strong>.</p>
<p>Я сделал свой конфиг, он отличается от конфига из статьи тем, что ваш сайт будет работать, даже если нужных модулей не будет установлено или включено. Плюс, я добавил установку mime-типов и кодировки по расширению, полезная штука. Итак, вот конфиг:</p>
<pre><code class="apache"># Добавляем mime-тип и кодировку
AddType 'text/css; charset=utf-8'  .css
AddType 'text/javascript; charset=utf-8'   .js
AddType 'image/x-icon; charset=utf-8' .ico
AddType 'text/html; charset=utf-8' .html .shtml
AddType 'text/xml; charset=utf-8'  .xml

# добавление сжатия файлов
&lt;IfModule mod_deflate.c&gt;
    AddOutputFilterByType DEFLATE text/html text/xml image/x-icon text/css text/javascript

    # обработка "кривых" броузеров
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch Konqueror no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
&lt;/IfModule&gt;

&lt;IfModule mod_headers.c&gt;
    Header append Vary User-Agent

    # разрешение кеширования файлов на стороне клиента
    &lt;FilesMatch .*\.(css|js|php|phtml|shtml|html|xml)$&gt;
        Header append Cache-Control private
    &lt;/FilesMatch&gt;
&lt;/IfModule&gt;

# включение заголовка Expires для всех файлов сроком на месяц
&lt;IfModule mod_expires.c&gt;
    ExpiresActive On
    ExpiresDefault "access plus 1 month"

    # выключение Expires для HTML-файлов и PHP-скриптов
    &lt;FilesMatch .*\.(shtml|html|phtml|php)$&gt;
        ExpiresActive Off
    &lt;/FilesMatch&gt;
&lt;/IfModule&gt;

# Выдача заголовка ETag (core feature)
FileETag MTime Size</code></pre>
<p>Положите эти настройки в корневой .htaccess на вашем сайте и подключите модули, указанные в начале статьи. Всё должно работать.</p>
<p>Вот <a href="/files/apache2-modules-win32.zip">готовый архив с модулями</a> для windows-инсталляции Apache2. Линуксойды же справятся сами, использовав утилиту <em>en2mod</em> :)</p>
]]></content:encoded>
			<wfw:commentRss>http://torqueo.net/caching-and-compression-files-in-apache2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Javascript в nginx</title>
		<link>http://torqueo.net/javascript-in-nginx/</link>
		<comments>http://torqueo.net/javascript-in-nginx/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 08:01:01 +0000</pubDate>
		<dc:creator>Ouch!</dc:creator>
		
		<category><![CDATA[javascript]]></category>

		<category><![CDATA[nginx]]></category>

		<category><![CDATA[nodejs]]></category>

		<category><![CDATA[v8]]></category>

		<guid isPermaLink="false">http://torqueo.net/?p=404</guid>
		<description><![CDATA[Игорь Сысоев, создатель веб-сервера nginx, написал заметку об идее встраивания javascript в nginx, наподобие того, как встроен perl.
Но, как рассказывает Игорь, пока нет возможности правильно встроить V8 в nginx из-за особенностей реализации.
Я вот что-то не могу понять, как тогда появилась такая вещь, как nodejs, которая, при всем при этом, держит огромную кучу запросов (я где-то [...]]]></description>
			<content:encoded><![CDATA[<p>Игорь Сысоев, создатель веб-сервера nginx, написал <a rel="noindex,nofollow" href="http://sysoev.ru/prog/v8.html">заметку</a> об идее встраивания javascript в nginx, наподобие того, как встроен perl.</p>
<p>Но, как рассказывает Игорь, пока нет возможности правильно встроить V8 в nginx из-за особенностей реализации.<br />
Я вот что-то не могу понять, как тогда появилась такая вещь, как nodejs, которая, при всем при этом, держит огромную кучу запросов (я где-то видел тесты, не помню у кого)?</p>
<p>Или он просто плохо смотрел (в чем я не уверен)?</p>
<p>Короче, буду рад, если мне кто-нибудь разъяснит, чем так кардинально отличается nginx от nodejs, что в nginx пока нельзя корректно встроить v8?</p>
]]></content:encoded>
			<wfw:commentRss>http://torqueo.net/javascript-in-nginx/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Чорне молне</title>
		<link>http://torqueo.net/chorne-molne/</link>
		<comments>http://torqueo.net/chorne-molne/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 20:56:15 +0000</pubDate>
		<dc:creator>Ouch!</dc:creator>
		
		<category><![CDATA[свежий навоз]]></category>

		<guid isPermaLink="false">http://torqueo.net/?p=400</guid>
		<description><![CDATA[Посмотрел тут дома. Как говорится, &#8220;не доставило&#8221;, хорошо хоть в кин не гонял. Есть слезоточивые сюжеты, но в каком супергероическом фильме их нет?
Понравилась фраза с киноговноком:
Сегодня вот спасает дам от сосулек, а завтра подлетит к кремлевским окнам и покажет президенту голую жопу. Будет очень стыдно.
Это единственное, связанное с чорне молне, что мне понравилось. Нет, конечно, [...]]]></description>
			<content:encoded><![CDATA[<p>Посмотрел тут дома. Как говорится, &#8220;не доставило&#8221;, хорошо хоть в кин не гонял. Есть слезоточивые сюжеты, но в каком супергероическом фильме их нет?<br />
Понравилась фраза с киноговноком:</p>
<blockquote><p>Сегодня вот спасает дам от сосулек, а завтра подлетит к кремлевским окнам и покажет президенту голую жопу. Будет очень стыдно.</p></blockquote>
<p>Это единственное, связанное с чорне молне, что мне понравилось. Нет, конечно, не единственное, еще всякие намёки на лепру понравились.</p>
]]></content:encoded>
			<wfw:commentRss>http://torqueo.net/chorne-molne/feed/</wfw:commentRss>
		</item>
		<item>
		<title>В конце марта 2010 г. в Санкт-Петербурге пройдет первая в России конференция по Zend Framework (Регаемся, ребяты!)</title>
		<link>http://torqueo.net/first-russian-zf-conf/</link>
		<comments>http://torqueo.net/first-russian-zf-conf/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 22:55:55 +0000</pubDate>
		<dc:creator>Ouch!</dc:creator>
		
		<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://torqueo.net/?p=394</guid>
		<description><![CDATA[На днях закончился прием тезисов по планируемым докладам. Примечательно, что в состав докладчиков вошли ведущие участники русскоязычного сообщества ZF, опытнейшие специалисты и лично один из создателей фрэймворка!

На данный момент уже открыта предварительная регистрация на конференцию! Для решения ряда вопросов организаторам очень важно сейчас понять приблизительное количество человек, которые смогут посетить конференцию или каким-то иным образом [...]]]></description>
			<content:encoded><![CDATA[<p>На днях закончился прием тезисов по планируемым докладам. Примечательно, что в состав докладчиков вошли ведущие участники русскоязычного сообщества ZF, опытнейшие специалисты и лично один из создателей фрэймворка!</p>
<p>
На данный момент уже открыта <a rel="nofollow,noindex" href="http://www.zfconf.ru/pre-registration.php" target="_blank"><strong>предварительная регистрация</strong></a> на конференцию! Для решения ряда вопросов организаторам <strong>очень важно</strong> сейчас понять приблизительное количество человек, которые смогут посетить конференцию или каким-то иным образом принять участие в ней.</p>
<p>Каждый предстоящий доклад возможно обсудить на форуме ZF-сообщества. Ваше мнение очень важно для авторов!</p>
<p>
<strong>Планируемые доклады</strong></p>
<p>
<strong><a rel="nofollow,noindex" href="http://zendframework.ru/forum/index.php?topic=2269.0" target="_blank">Жизненный цикл предложений (proposals) в проекте Zend Framework</a></strong> </p>
<p>Александр Веремьев (<a rel="nofollow,noindex" target="_blank" href="http://www.zend.com">Zend Technologies</a>, Zend Framework Core команда) </p>
<p><strong><a rel="nofollow,noindex" href="http://zendframework.ru/forum/index.php?topic=2270.0" target="_blank">Zend_Search_Lucene в деталях</a></strong> </p>
<p>Александр Веремьев (<a rel="nofollow,noindex" target="_blank" href="http://www.zend.com">Zend Technologies</a>, Zend Framework Core команда) </p>
<p><strong><a rel="nofollow,noindex" href="http://zendframework.ru/forum/index.php?topic=2271.0" target="_blank">Zend Framework и производительность</a></strong> </p>
<p>Александр Махомет (создатель сообщества <a rel="nofollow,noindex" target="_blank" href="http://zendframework.ru">ZendFramework.ru</a>) </p>
<p><strong><a rel="nofollow,noindex" href="http://zendframework.ru/forum/index.php?topic=2272.0" target="_blank">Zend Framework и MVC, &laquo;толстая&raquo; модель</a></strong> </p>
<p>Александр Стешенко (<a rel="nofollow,noindex" target="_blank" href="http://norada.com">Norada Corporation</a>, PHP-разработчик) </p>
<p><strong><br />
<a rel="nofollow,noindex" href="http://zendframework.ru/forum/index.php?topic=2273.0" target="_blank">ФотоСтрана.ru: Прототипирование с использованием ZF (история боевого применения Zend Framework в highload-проекте)</a></strong> </p>
<p>Леонид Жаворонков (<a rel="nofollow,noindex" target="_blank" href="http://fotostrana.ru">ФотоСтрана.ru</a>, тимлид) </p>
<p><strong><a rel="nofollow,noindex" href="http://zendframework.ru/forum/index.php?topic=2274.0" target="_blank">Использование очередей сообщений в повседневных проектах</a></strong> </p>
<p>Денис Баклыков (<a rel="nofollow,noindex" href="http://obnovlenie.ru" target="_blank">Обновление</a>, веб-разработчик) </p>
<p><strong><a rel="nofollow,noindex" href="http://zendframework.ru/forum/index.php?topic=2275.0" target="_blank">Zend Framework и Doctrine</a></strong> </p>
<p>Степан Танасийчук (руководитель веб-студии <a rel="nofollow,noindex" target="_blank" href="http://stfalcon.com">stfalcon.com</a>) </p>
<p><strong><a rel="nofollow,noindex" href="http://zendframework.ru/forum/index.php?topic=2276.0" target="_blank">Zend Framework и мультиязычность</a></strong> </p>
<p>Степан Танасийчук (руководитель веб-студии <a rel="nofollow,noindex" target="_blank" href="http://stfalcon.com">stfalcon.com</a>) </p>
<p><strong><a rel="nofollow,noindex" href="http://zendframework.ru/forum/index.php?topic=2277.0" target="_blank">История проекта e-Штаб</a></strong> </p>
<p>Анатолий Ларин (<a rel="nofollow,noindex" target="_blank" href="http://www.e-legion.com">e-Легион</a>, веб-программист) </p>
<p><strong><a rel="nofollow,noindex" href="http://zendframework.ru/forum/index.php?topic=2278.0" target="_blank">Что нового несет нам Zend Framework 2.0?</a></strong> </p>
<p>Надежда Блинова (<a rel="nofollow,noindex" target="_blank" href="http://www.wizartech.ru">Wizartech</a>, веб-программист), Георгий Туревич (<a href="http://www.wizartech.ru" target="_blank">Wizartech</a>, ведущий веб-программист) </p>
<p><strong><a rel="nofollow,noindex" href="http://zendframework.ru/forum/index.php?topic=2279.0" target="_blank">Интеграция Zend Framework c Javascript-фрэймворками jQuery и Dojo Toolkit</a></strong> </p>
<p>Георгий Туревич (<a rel="nofollow,noindex" rel="nofollow,noindex" href="http://www.wizartech.ru" target="_blank">Wizartech</a>, ведущий веб-программист)</p>
<p>
Смело обсуждайте доклады и <a rel="nofollow,noindex" href="http://www.zfconf.ru/pre-registration.php" target="_blank"><strong>регистрируйтесь</strong></a>!</p>
<p>
За последними новостями можно следить здесь:<br />
<strong>RSS-канал:</strong> <a rel="nofollow,noindex" href="http://feeds.feedburner.com/zfconf" target="_blank">feeds.feedburner.com/zfconf</a><br />
<strong>Twitter:</strong> <a rel="nofollow,noindex" href="http://twitter.com/zfconf" target="_blank">@zfconf</a><br />
<strong>Группа Вконтакте:</strong> <a rel="nofollow,noindex" href="http://vkontakte.ru/club14951507" target="_blank">vkontakte.ru/club14951507</a></p>
<p>
К участию также приглашаются информационные и финансовые спонсоры.</p>
]]></content:encoded>
			<wfw:commentRss>http://torqueo.net/first-russian-zf-conf/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Встроенные переводы сообщений валидаторов в Zend Framework</title>
		<link>http://torqueo.net/translating-validation-messages/</link>
		<comments>http://torqueo.net/translating-validation-messages/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 17:31:27 +0000</pubDate>
		<dc:creator>Ouch!</dc:creator>
		
		<category><![CDATA[Без рубрики]]></category>

		<category><![CDATA[Tomas Weidner]]></category>

		<category><![CDATA[zend framework]]></category>

		<category><![CDATA[Zend_Locale]]></category>

		<category><![CDATA[Zend_Translate]]></category>

		<guid isPermaLink="false">http://torqueo.net/?p=391</guid>
		<description><![CDATA[В новом Zend Framework 1.10 появились переводы для встроенных валидаторов! Ура!
Теперь не нужно переводить самому, как, например, делал я когда-то. Теперь можно тупо:
$language = 'ru';
$translator = new Zend_Translate(
    'array',
    '/resources/languages',
    $language,
    array('scan' =&#62; Zend_Locale::LOCALE_DIRECTORY)
);

Zend_Validate_Abstract::setDefaultTranslator($translator);
И всё - радуемся.
Информация из оригинального поста Томаса Вейднера, разработчика i18n в ZF.
UPD: мы с ребятами с zendframework.ru (спасибо им) перевели сообщения валидаторов на русский язык. Ожидается, что наш перевод появится [...]]]></description>
			<content:encoded><![CDATA[<p>В новом Zend Framework 1.10 появились переводы для встроенных валидаторов! Ура!<br />
Теперь не нужно переводить самому, как, например, делал я когда-то. Теперь можно тупо:</p>
<pre><code class="php">$language = 'ru';
$translator = new Zend_Translate(
    'array',
    '/resources/languages',
    $language,
    array('scan' =&gt; Zend_Locale::LOCALE_DIRECTORY)
);

Zend_Validate_Abstract::setDefaultTranslator($translator);</code></pre>
<p>И всё - радуемся.</p>
<p>Информация из <a rel="noindex,nofollow" href="http://www.thomasweidner.com/flatpress/2010/01/17/translating-validation-messages/">оригинального поста</a> Томаса Вейднера, разработчика i18n в ZF.</p>
<p><strong>UPD:</strong> мы с ребятами с zendframework.ru (спасибо им) <a href="http://zendframework.ru/forum/index.php?topic=2340">перевели сообщения валидаторов</a> на русский язык. Ожидается, что наш перевод появится в ZF 1.10.2 (выйдет 23 февраля 2010). Так же, ожидается перевод на украинский язык.</p>
]]></content:encoded>
			<wfw:commentRss>http://torqueo.net/translating-validation-messages/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Микрофреймворк fab для nodejs</title>
		<link>http://torqueo.net/fab-framework-for-nodejs/</link>
		<comments>http://torqueo.net/fab-framework-for-nodejs/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 20:11:15 +0000</pubDate>
		<dc:creator>Ouch!</dc:creator>
		
		<category><![CDATA[javascript]]></category>

		<category><![CDATA[программерское]]></category>

		<category><![CDATA[fab]]></category>

		<category><![CDATA[nodejs]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[sinatra]]></category>

		<guid isPermaLink="false">http://torqueo.net/?p=383</guid>
		<description><![CDATA[Наткнулся на замечательный микрофреймворк fab, который позволяет легко создавать простые серверные приложения на языке javascript, для веб-сервера nodejs.
Fab очень похож на ruby-фреймворк Sinatra, который является довольно популярной штукой в среде ruby-девелоперов, так как позволяет сделать легкое приложение, без использования тяжеловесов, таких, как Rails.
Например, так выглядит простейшее приложение в Sinatra:
require 'rubygems'
require 'sinatra'
get '/' do
  'Hello [...]]]></description>
			<content:encoded><![CDATA[<p>Наткнулся на замечательный <a href="http://github.com/jed/fab">микрофреймворк fab</a>, который позволяет легко создавать простые серверные приложения на языке <em>javascript</em>, для веб-сервера nodejs.</p>
<p>Fab очень похож на ruby-фреймворк <a href="http://github.com/sinatra/sinatra">Sinatra</a>, который является довольно популярной штукой в среде ruby-девелоперов, так как позволяет сделать легкое приложение, без использования тяжеловесов, таких, как Rails.</p>
<p>Например, так выглядит простейшее приложение в Sinatra:</p>
<pre><code class="ruby">require 'rubygems'
require 'sinatra'
get '/' do
  'Hello world!'
end</code></pre>
<p>А вот так выглядит точно такое же приложение в fab:</p>
<pre><code class="javascript">fab = require( "./fab" ).fab;

( fab )
  ( "/", function(){ return 'Hello world!' })
.deploy();
</code></pre>
<p>Многословнее, но всё равно круто, да? Единственное там пока нету разделения запросов по <em>REQUEST_METHOD</em>, первой нужнейшей штуки для удобной реализации REST-сервиса.</p>
]]></content:encoded>
			<wfw:commentRss>http://torqueo.net/fab-framework-for-nodejs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Фреймворки для nodejs</title>
		<link>http://torqueo.net/nodejs-frameworks/</link>
		<comments>http://torqueo.net/nodejs-frameworks/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 04:37:08 +0000</pubDate>
		<dc:creator>Ouch!</dc:creator>
		
		<category><![CDATA[javascript]]></category>

		<category><![CDATA[программерское]]></category>

		<category><![CDATA[bomber]]></category>

		<category><![CDATA[JSAN]]></category>

		<category><![CDATA[nerve]]></category>

		<category><![CDATA[nodejs]]></category>

		<category><![CDATA[raccoon]]></category>

		<guid isPermaLink="false">http://torqueo.net/?p=374</guid>
		<description><![CDATA[
Я просто оставлю это здесь. Список фреймворков для nodejs, которые я нашёл:

Намётки и размышления одного дядюшки Бена, который пытается создать свой фреймворк на nodejs. Смешно, он обозвал Дэвида Хэйнемайера Хэнсона тупицей, это повеселило :) Готового кода я там так пока и не нашел. А вот страничка проекта.
Simplex - здесь есть интересные куски кода, стоит посмотреть. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-388 alignleft" style="margin: 5px;" title="logo" src="http://torqueo.net/wp-content/uploads/2010/01/logo.png" alt="logo" width="200" height="53" /><br />
Я просто оставлю это здесь. Список фреймворков для nodejs, которые я нашёл:</p>
<ul>
<li><a rel="noindex,nofollow" href="http://benjaminthomas.org/2009-11-20/designing-a-web-framework.html">Намётки и размышления одного дядюшки Бена</a>, который пытается создать свой фреймворк на nodejs. Смешно, он обозвал Дэвида Хэйнемайера Хэнсона тупицей, это повеселило :) <del datetime="2010-01-10T15:32:05+00:00">Готового кода я там так пока и не нашел.</del> А вот <a rel="noindex,nofollow" href="http://bomber.obtdev.com/">страничка проекта</a>.</li>
<li><a rel="noindex,nofollow" href="http://github.com/mshakhan/simplex">Simplex</a> - здесь есть интересные куски кода, стоит посмотреть. Хотя это так - не фреймворк, а просто эксперимент, созданный за пару вечеров.</li>
<li><a rel="noindex,nofollow" href="http://github.com/keeto/raccoon/">Raccoon</a> - эта штука уже посерьёзней остальных. Буду её исследовать.</li>
<li>Вот еще один фреймворк, <a rel="noindex,nofollow" href="http://github.com/gjritter/nerve">nerve</a></li>
<li>В комментариях Kuroki Kaze подсказывает, что есть еще <a rel="noindex,nofollow" href="http://openjsan.org/">JSAN</a>. опенсурсовая библиотека javascript, но честно говоря, не слишком много я полезного там увидел.</li>
<li><a rel="noindex,nofollow" href="http://wiki.github.com/ry/node">Список проектов на github</a>, посвященных nodejs</li>
</ul>
<p>Если кто знает еще фреймворки для nodejs, буду признателен за ссылки в комментах.</p>
<p>Вообще, мне кажется, серверное программирование на js штука весьма перспективная. Не хватает только мощного фреймворка, по типу Zend или пакетов CPAN, как в Perl, или Gems, как в Ruby. Но это вопрос времени и я думаю, на эту тему стоит написать отдельный пост.</p>
]]></content:encoded>
			<wfw:commentRss>http://torqueo.net/nodejs-frameworks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Про интернационализацию и локализацию</title>
		<link>http://torqueo.net/i18n-and-l10n/</link>
		<comments>http://torqueo.net/i18n-and-l10n/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 15:29:30 +0000</pubDate>
		<dc:creator>Ouch!</dc:creator>
		
		<category><![CDATA[Без рубрики]]></category>

		<category><![CDATA[i10n]]></category>

		<category><![CDATA[i18]]></category>

		<category><![CDATA[locale]]></category>

		<category><![CDATA[Zend_Locale]]></category>

		<guid isPermaLink="false">http://torqueo.net/?p=366</guid>
		<description><![CDATA[Когда пользователь заходит на сайт, поддерживающий различные языки, то он должен выбрать тот язык, который подходит ему. В большинстве случаев язык, на котором отображается мультиязычный сайт определяется автоматически, на основе заголовка HTTP_ACCEPT_LANGUAGE, или на основе IP-адреса пользователя. Определять язык пользователя по его местоположению, при помощи IP-адреса неправильно, так как во-первых, правильно определить местоположение пользователя получится [...]]]></description>
			<content:encoded><![CDATA[<p>Когда пользователь заходит на сайт, поддерживающий различные языки, то он должен выбрать тот язык, который подходит ему. В большинстве случаев язык, на котором отображается мультиязычный сайт определяется автоматически, на основе заголовка <em>HTTP_ACCEPT_LANGUAGE</em>, или на основе <em>IP-адреса</em> пользователя. Определять язык пользователя по его местоположению, при помощи IP-адреса неправильно, так как во-первых, правильно определить местоположение пользователя получится не всегда, а во-вторых, определять язык по местоположению это плохая идея.</p>
<p>Почему? Например, я могу находиться в Испании, и зайду на мультиязычный сайт из под локализованного на баскский язык браузера (я Баск), а страничка всё равно отобразится на Испанском языке, хотя я хотел именно баскский, который, к тому же, вообще не связан ни с одной известной языковой семьёй и по-испански я просто бы ничего не понял. Такое может случиться, если язык пользователя определяется по IP.</p>
<p>Итак, чтобы правильно определить язык пользователя, мы можем посмотреть только на HTTP_ACCEPT_LANGUAGE, кроме него мы можем узнать язык пользователя только если он сам его  укажет.<span id="more-366"></span></p>
<h3>Язык не связан со страной</h3>
<p>Нам кажется, что язык конечно же связан со страной - в Италии говорят на итальянском, в России на русском, в США на английском. Но это если смотреть только на государственный  язык. Внутри этих стран люди разных национальностей общаются на различных языках и хотят смотреть сайты в локализованных на свой родной язык браузерах.</p>
<h3>Язык и локаль это разные вещи</h3>
<p>Нужно их различать. Локаль определяет представление чисел, даты, времени, валют, принятую типографику в тексте, в то время как язык определяет сам текст, то есть то, на каком языке написан текст. Способность же сайта показать пользователю текст на его родном языке - это уже интернационализация (сокращенно - i18n). Чтобы мы могли показать сайт на родном языке пользователя, нам нужно узнать язык. Ранее мы уже разобрались, как это сделать. Но вот мы получили язык пользователя, теперь мы можем показать ему текст на сайте на этом языке, но как нам теперь определить локаль, чтобы мы могли правильно отформатировать в этом тексте даты, числа и все прочее?</p>
<p>На самом деле так же - из заголовка <em>HTTP_ACCEPT_LANGUAGE</em>. Например, значение этого заголовка в моем браузере выглядит так:</p>
<pre><span style="color: #008000;">ru,en-us;q=0.7,en;q=0.3</span></pre>
<p>Это значение может кодироваться в соответствии с несколькими стандартами, мы не будем их рассматривать. Для того, чтобы полученное значение использовать в <em>Zend_Locale</em>, нужно просто передать его в конструктор, Zend_Locale сам приведёт его к виду <em>en_US</em>:</p>
<pre><span style="color: #008000;">$locale = new Zend_Locale('en-us');</span></pre>
<p>Формат, которым определяется локаль такой:</p>
<pre><span style="color: #008000;">&lt;язык&gt;_&lt;ТЕРРИТОРИЯ&gt;</span></pre>
<p>Как видно из заголовка HTTP_ACCEPT_LANGUAGE, у языка, которому мы отдаём предпочтение (ru), не указан код территории. Это нормально, у локали не обязательно может быть указан  код территории. Поэтому, в нашем случае, ru и будет названием локали.</p>
<p>А вдруг нам понадобится код территории? Откуда его взять в нашем случае? Ниоткуда, если пользователь не укажет его сам (например, в личном кабинете). А у тех, кому код  территории действительно нужен - он почти всегда указан в заголовке HTTP_ACCEPT_LANGUAGE.</p>
<p>А если вы хотите сделать совсем приятно - сделайте инструмент выбора языка с территорией у себя на сайте (<a rel="noindex nofollow" href="http://www.roseindia.net/tutorials/I18N/locales-list.shtml">смотрите здесь</a>).</p>
<h3>Как составляется название локали</h3>
<p>Список языков определяется в соответствии с <a rel="noindex nofollow" href="http://www.iana.org/assignments/language-subtag-registry">IANA Language Subtag Registry</a>. Код территории определяется в соответствии со стандартом <a rel="noindex nofollow" href="http://en.wikipedia.org/wiki/ISO_3166-1">ISO_3166-1</a>. Эти же коды территорий можно найти и в реестре <em>IANA Language Subtag Registry</em>.</p>
<p>Таким образом, чтобы составить локаль для французского языка, используемого на территории Канады, нам нужно заглянуть в реестр <em>IANA </em>и найти там запись:</p>
<pre style="color: #008000;">Type: language
Subtag: fr
Description: French
Added: 2005-10-16
Suppress-Script: Latn</pre>
<p>затем найти запись территории:</p>
<pre style="color: #008000;">Type: region
Subtag: CA
Description: Canada
Added: 2005-10-16</pre>
<p>и, далее, просто составляем язык и территорию: <em>fr_CA</em>.</p>
<p>Оказывается, далеко не все языки локализованы, то есть не ко всем языкам составлены файлы с правилами для локализации. Вы можете посмотреть <a rel="noindex nofollow" href="http://www.roseindia.net/tutorials/I18N/locales-list.shtml">список всех существующих локалей</a> на сегодняшний день. Но 99% разработчиков хватает и существующих локалей, не часто же вам приходится создавать сайты на языке <em>Utarmbung </em>(язык в Папуа-Новой Гвинее)?</p>
<h3>Зачем нужна локаль</h3>
<p>Как я уже говорил, локаль и язык это разные вещи. Локаль нужна нам прежде всего для интерфейса. Например, для каждой существующей локали мы можем сделать файл с переводом надписей интерфейса и, в зависимости от текущей локали, будем показывать пользователю надписи на его языке.</p>
<p>Но это только интерфейс сайта. Мы можем сделать интернационализацию, то есть вести сайт на нескольких языках, но мы, скорее всего, не имеем такой возможности, чтобы вести сайт на нескольких диалектах одного языка, например, английского. То есть, если у нас на сайте есть статья на американском английском (<em>en_US</em>), который сейчас использует большинство англоязычных людей, то вряд-ли мы будем делать локализацию этой статьи для пользователей из Австралии, которые тоже говорят на английском, но используют диалект этого языка (&#8221;<em>страйн</em>&#8220;), который имеет некоторые отличия и заимствованные слова у коренных жителей Австралии.</p>
<p>Поэтому, для всех англоязычных людей мы будем писать статьи на американском английском, не обращая внимания на диалекты. Это означает, что даже если к нам на сайт придет человек, для которого судя по заголовку HTTP_ACCEPT_LANGUAGE предпочтительным языком будет австралийский английский (<em>en_AU</em>), то мы все равно покажем ему статью на американском английском (теперь просто en, мы ведь не учитываем диалекты для контента сайта), а вот интерфейс сайта можем показать и локализованный на <em>en_AU</em>, так как такая локализация, скорее всего, отнимет немного сил.</p>
<h3>В заключении</h3>
<p>Я не стал обращать внимание на некоторые вещи, а постарался выделить главное, чтобы у вас сложилось понимание, как использовать локализацию и интернационализацию и как все это работает. Я мог упустить что-то, так что внимательных читателей прошу сообщать в комментах :)</p>
]]></content:encoded>
			<wfw:commentRss>http://torqueo.net/i18n-and-l10n/feed/</wfw:commentRss>
		</item>
		<item>
		<title>HTML5 Tabs: a first touch</title>
		<link>http://torqueo.net/html5-tabs-a-first-touch/</link>
		<comments>http://torqueo.net/html5-tabs-a-first-touch/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 06:57:24 +0000</pubDate>
		<dc:creator>Ouch!</dc:creator>
		
		<category><![CDATA[вёрстка]]></category>

		<category><![CDATA[программерское]]></category>

		<category><![CDATA[html5]]></category>

		<category><![CDATA[tabs]]></category>

		<guid isPermaLink="false">http://torqueo.net/?p=358</guid>
		<description><![CDATA[HTML5 have a new, very convenient element section which is used to separate content. I tried to implement tabs using this element, because the standard solution on unordered lists (UL) or definition lists (DL) is not semantic, because the tab is not associated with his content area. Finally, one evening I did the first version, [...]]]></description>
			<content:encoded><![CDATA[<p>HTML5 have a new, very convenient element <em>section</em> which is used to separate content. I tried to implement tabs using this element, because the standard solution on unordered lists (UL) or definition lists (DL) is not semantic, because the tab is not associated with his content area. Finally, one evening I did the first version, &#8220;quick and dirty&#8221;, but I tried.</p>
<p>So, let&#8217;s see the result: <a href="/files/html5-tabs/"><strong>HTML5 tabs demo</strong></a></p>
<p>These tabs have some drawbacks (fixed content area height and some others), so I accept suggestions for improvement (professionals will understand what I mean, when they&#8217;re look the sample code).</p>
<p><strong>Updated at 24 dec 2009</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://torqueo.net/html5-tabs-a-first-touch/feed/</wfw:commentRss>
		</item>
		<item>
		<title>HTML5 Tabs: Первая проба</title>
		<link>http://torqueo.net/html5-tabs-a-first-view/</link>
		<comments>http://torqueo.net/html5-tabs-a-first-view/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 22:58:45 +0000</pubDate>
		<dc:creator>Ouch!</dc:creator>
		
		<category><![CDATA[Без рубрики]]></category>

		<category><![CDATA[html5]]></category>

		<category><![CDATA[tabs]]></category>

		<guid isPermaLink="false">http://torqueo.net/?p=355</guid>
		<description><![CDATA[В HTML5 есть очень удобные семантичные элементы section, которые используются для разделения контента.
Я попробовал реализовать с их помощью табы, так как стандартное решение на списках UL не является семантичным. В итоге, за вечер был сделан первый вариант, что называется &#8220;быстро и грязно&#8221;, но я старался.
Итак, смотрим демо: HTML5 tabs demo
Принимаю предложения по улучшению, так как [...]]]></description>
			<content:encoded><![CDATA[<p>В HTML5 есть очень удобные семантичные элементы section, которые используются для разделения контента.<br />
Я попробовал реализовать с их помощью табы, так как стандартное решение на списках UL не является семантичным. В итоге, за вечер был сделан первый вариант, что называется &#8220;быстро и грязно&#8221;, но я старался.</p>
<p>Итак, смотрим демо: <a href="/files/html5-tabs/">HTML5 tabs demo</a></p>
<p>Принимаю предложения по улучшению, так как табы имеют некоторые недостатки (профессионалы поймут о чем я, когда посмотрят код примера).</p>
]]></content:encoded>
			<wfw:commentRss>http://torqueo.net/html5-tabs-a-first-view/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
