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

<channel>
	<title>Paradigm.ru &#187; php</title>
	<atom:link href="http://paradigm.ru/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://paradigm.ru</link>
	<description>Блог Александра Мусаева</description>
	<lastBuildDate>Wed, 23 Nov 2011 19:10:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>ZFconf 2011: регистрация открыта</title>
		<link>http://paradigm.ru/zfconf-2011</link>
		<comments>http://paradigm.ru/zfconf-2011#comments</comments>
		<pubDate>Sat, 07 May 2011 10:13:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zfconf]]></category>

		<guid isPermaLink="false">http://paradigm.ru/?p=616</guid>
		<description><![CDATA[Основные подготовительные работы по конференции закончены. Открыта финальная регистрация! Пожалуйста, обратите внимание на то, что изменилось место проведения. Мероприятие будет проходить на прошлогодней площадке — в актовом зале ЛГТЦ (Ленгипротранс-Центр), по адресу: Московский пр., 143, ст. м. «Электросила». Кофе-брейки и обсуждения на флипчартах будут проходить в фойе. На данный момент также полностью сформирован список докладов: [...]]]></description>
			<content:encoded><![CDATA[<p>Основные подготовительные работы по конференции закончены. Открыта финальная <a href="http://www.zfconf.ru/registration/">регистрация</a>!</p>

<p>Пожалуйста, обратите внимание на то, что изменилось место проведения. Мероприятие будет проходить на прошлогодней площадке — в актовом зале ЛГТЦ (Ленгипротранс-Центр), по адресу: <a href="http://maps.yandex.ru/-/CBQJ5ZnH">Московский пр., 143</a>, ст. м. «Электросила». Кофе-брейки и обсуждения на флипчартах будут проходить в фойе.</p>

<p>На данный момент также полностью сформирован <a href="http://www.zfconf.ru/2011/topics/">список докладов</a>:</p>

<ul>
<li>Гибкая архитектура Zend Framework приложений с использованием Dependency Injection / Алексей Качаев (Сogniance, Senior PHP Developer)</li>
<li>Воюем за ресурсы: Повышение производительности Zend Framework приложения с помощью phpDaemon, Varnish и ESI / Алексей Качаев (Сogniance, Senior PHP Developer)</li>
<li>Behavior Driven Development в PHP и Zend Framework / Константин Кудряшов</li>
<li>Разделение труда: Организация многозадачной, распределенной системы в Zend Framework с помощью Job Queue / Александр Готгельф (Magento, PHP-разработчик)</li>
<li>Как может помочь среда разработки при написании приложения на Zend Framework? / Николай Матвеев (JetBrains, разработчик)</li>
<li>Создание REST-API для сторонних разработчиков и мобильных устройств с авторизацией по протоколу OAuth 1.0 / Дмитрий Чижевский (Дзен-мани, разработчик)</li>
<li>Толстая модель: История разработки собственного ORM / Михаил Шамин (Геометрия, ведущий разработчик)</li>
<li>Что такое Sphinx, зачем он вообще нужен и как его использовать с PHP (от простого индекса до поискового кластера) / Владимир Федорков (Sphinx, Director of Professional Services)</li>
</ul>

<p>Стоимость участия в мероприятии составит 1500 руб. В данную сумму входит: участие в самой конференции, кофе-брейки (от внешней кейтеринг-компании), пакет материалов участника и доступ к профессиональным видеозаписям докладов (после мероприятия). Доступно множество <a href="http://www.zfconf.ru/payment-types/">способов оплаты</a>.</p>

<p>Выпуск подкаста (#4) Виктора Фараздаги о конференции: <a href="http://zfcasts.ru">http://zfcasts.ru</a></p>

<p>Последние новости:</p>

<ul>
<li>RSS-канал: <a href="http://feeds.feedburner.com/zfconf">http://feeds.feedburner.com/zfconf</a></li>
<li>Twitter: <a href="http://twitter.com/zfconf">http://twitter.com/zfconf</a></li>
<li>Группа ВКонтакте: <a href="http://vkontakte.ru/club14951507">http://vkontakte.ru/club14951507</a></li>
</ul>

<p>Организатор: компания <a href="http://www.wizartech.ru/">Wizartech</a>
Партнеры: русскоязычное <a href="http://zendframework.ru/">ZF-сообщество</a> и конференция <a href="http://zfconf.org.ua/">ZFConf Ukraine</a></p>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/zfconf-2011/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Открыта регистрация на первую в России конференцию по Zend Framework</title>
		<link>http://paradigm.ru/zend-conf-spb</link>
		<comments>http://paradigm.ru/zend-conf-spb#comments</comments>
		<pubDate>Mon, 01 Feb 2010 09:41:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[конференции]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://paradigm.ru/?p=441</guid>
		<description><![CDATA[В конце марта 2010 г. в Санкт-Петербурге пройдет первая в России конференция по Zend Framework. На днях закончился прием тезисов по планируемым докладам. Примечательно, что в состав докладчиков вошли ведущие участники русскоязычного сообщества ZF, опытнейшие специалисты и лично один из создателей фрэймворка. Участие в конференции планируется сделать бесплатным или за небольшую стоимость. На данный момент [...]]]></description>
			<content:encoded><![CDATA[<p>В конце марта 2010 г. в Санкт-Петербурге пройдет первая в России конференция по Zend Framework.</p>

<p>На днях закончился прием тезисов по планируемым докладам. Примечательно, что в состав докладчиков вошли ведущие участники русскоязычного сообщества ZF, опытнейшие специалисты и лично один из создателей фрэймворка.</p>

<div align="center"><img src="http://paradigm.ru/;-)/2010/02/ZendFramework-logo.png" alt="" title="ZendFramework-logo" width="500" height="132" /></div>

<p>Участие в конференции планируется сделать бесплатным или за небольшую стоимость. На данный момент уже открыта <a href="http://www.zfconf.ru/pre-registration.php">предварительная регистрация</a>. Для решения ряда вопросов организаторам очень важно сейчас понять приблизительное количество человек, которые смогут посетить конференцию или каким-то иным образом принять в ней участие.</p>

<p>Каждый предстоящий доклад возможно обсудить на форуме ZF-сообщества. Ваше мнение очень важно для авторов.</p>

<p>Планируемые доклады:</p>

<ul>
<li><a href="http://zendframework.ru/forum/index.php?topic=2269.0">Жизненный цикл предложений (proposals) в проекте Zend Framework</a>
Александр Веремьев (Zend Technologies, Zend Framework Core команда)</li>
<li><a href="http://zendframework.ru/forum/index.php?topic=2270.0">Zend_Search_Lucene в деталях</a>
Александр Веремьев (Zend Technologies, Zend Framework Core команда)</li>
<li><a href="http://zendframework.ru/forum/index.php?topic=2271.0">Zend Framework и производительность</a>
Александр Махомет (создатель сообщества ZendFramework.ru)</li>
<li><a href="http://zendframework.ru/forum/index.php?topic=2272.0">Zend Framework и MVC, «толстая» модель</a>
Александр Стешенко (Norada Corporation, PHP-разработчик)</li>
<li><a href="http://zendframework.ru/forum/index.php?topic=2273.0">ФотоСтрана.ru: Прототипирование с использованием ZF</a> (история боевого применения Zend Framework в highload-проекте)
Леонид Жаворонков (ФотоСтрана.ru, тимлид)</li>
<li><a href="http://zendframework.ru/forum/index.php?topic=2274.0">Использование очередей сообщений в повседневных проектах</a>
Денис Баклыков (Обновление, веб-разработчик)</li>
<li><a href="http://zendframework.ru/forum/index.php?topic=2275.0">Zend Framework и Doctrine</a>
Степан Танасийчук (руководитель веб-студии stfalcon.com)</li>
<li><a href="http://zendframework.ru/forum/index.php?topic=2276.0">Zend Framework и мультиязычность</a>
Степан Танасийчук (руководитель веб-студии stfalcon.com)</li>
<li><a href="http://zendframework.ru/forum/index.php?topic=2277.0">История проекта e-Штаб</a>
Анатолий Ларин (e-Легион, веб-программист)</li>
<li><a href="http://zendframework.ru/forum/index.php?topic=2278.0">Что нового несет нам Zend Framework 2.0?</a>
Надежда Блинова (Wizartech, веб-программист), Георгий Туревич (Wizartech, ведущий веб-программист)</li>
<li><a href="http://zendframework.ru/forum/index.php?topic=2279.0">Интеграция Zend Framework c Javascript-фрэймворками jQuery и Dojo Toolkit</a>
Георгий Туревич (Wizartech, ведущий веб-программист)</li></ul>

<p>Смело обсуждайте доклады и <a href="http://www.zfconf.ru/pre-registration.php">регистрируйтесь</a>!</p>

<p>За последними новостями можно следить здесь:</p>

<ul><li>RSS-канал: <a href="http://feeds.feedburner.com/zfconf">http://feeds.feedburner.com/zfconf</a></li>
<li>Twitter: @<a href="http://twitter.com/zfconf">zfconf</a></li>
<li>Группа Вконтакте: <a href="http://vkontakte.ru/club14951507">http://vkontakte.ru/club14951507</a></li></ul>

<p>К участию приглашаются информационные и финансовые спонсоры.</p>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/zend-conf-spb/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Инфраструктура Zend Framework 1.5</title>
		<link>http://paradigm.ru/zend-framework-infrastructure</link>
		<comments>http://paradigm.ru/zend-framework-infrastructure#comments</comments>
		<pubDate>Mon, 21 Apr 2008 17:00:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[cheatsheets]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://paradigm.ru/?p=279</guid>
		<description><![CDATA[В&#160;последнее время я&#160;все меньше слежу за&#160;развитием Zend Framework. Под текущие задачи подходит более легковесный CodeIgniter, а в ближайшей перспективе есть планы перелезть на Python и Django. Тем не&#160;менее ZF&#160;остаётся одним из&#160;основных крупнокалиберных MVC-фреймворков для разработки CMS и&#160;веб-приложений на PHP (перечитал предложение, мысленно охнул от количества аббревиатур, но все равно решил не расшифровывать &#8212; c&#8217;est la [...]]]></description>
			<content:encoded><![CDATA[<p>В&nbsp;последнее время я&nbsp;все меньше слежу за&nbsp;развитием Zend Framework. Под текущие задачи подходит более легковесный CodeIgniter, а в ближайшей перспективе есть планы перелезть на Python и Django.</p>

<p>Тем не&nbsp;менее ZF&nbsp;остаётся одним из&nbsp;основных крупнокалиберных MVC-фреймворков для разработки CMS и&nbsp;веб-приложений на PHP (перечитал предложение, мысленно охнул от количества аббревиатур, но все равно решил не расшифровывать &#8212; c&#8217;est la vie, что уж тут). Общее представление о&nbsp;внутреннем устройстве и&nbsp;ключевых компонентах последней версии ZF&nbsp;дает весьма наглядная схема, найденная сегодня на&nbsp;блоге <a href="http://b23.ru/k9p" ref="nofollow">cоde:diesel</a>:</p>

<div align="center"><a href='http://www.codediesel.com/data/pdf/zend_framework.pdf'><img src="http://paradigm.ru/;-)/2008/04/zf-15.png" alt="Инфраструктура Zend Framework 1.5" title="zf-15" width="500" height="565" class="alignnone size-medium wp-image-280" /></a></div>

<p>Схема доступна в&nbsp;формате PDF, в&nbsp;виде <a href="http://www.codediesel.com/data/pdf/zend_framework.pdf">цветного</a> и&nbsp;<a href="http://www.codediesel.com/data/pdf/zend_framework_blackwhite.pdf">черно-белого</a> варианта (последний, на&nbsp;мой взгляд, предпочтительнее для печати, т.к. сделан на&nbsp;белом фоне).</p>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/zend-framework-infrastructure/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Поговорим о погоде</title>
		<link>http://paradigm.ru/yahoo-weather</link>
		<comments>http://paradigm.ru/yahoo-weather#comments</comments>
		<pubDate>Mon, 18 Feb 2008 14:19:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[yahoo]]></category>
		<category><![CDATA[прогноз погоды]]></category>
		<category><![CDATA[сервисы]]></category>

		<guid isPermaLink="false">http://www.paradigm.ru/2008/02/18/yahoo-weather/</guid>
		<description><![CDATA[За&#160;последнее время мне пришлось довольно основательно пообщаться с&#160;несколькими сервисами Yahoo! В&#160;этой заметке расскажу об&#160;одном из&#160;них, который для многих может оказаться полезным. Это сервис прогноза погоды Yahoo! Weather. Года два назад я&#160;искал в&#160;сети удобный и&#160;открытый источник подобных данных, но&#160;так ничего и&#160;не&#160;нашел. Все отечественные сервисы экспортировали данные за&#160;деньги (отпугивала скорее не&#160;цена, а&#160;наличие возни с&#160;оплатой), а&#160;западные&#160;&#8212; либо не&#160;предоставляли [...]]]></description>
			<content:encoded><![CDATA[<p>За&nbsp;последнее время мне пришлось довольно основательно пообщаться с&nbsp;несколькими сервисами Yahoo! В&nbsp;этой заметке расскажу об&nbsp;одном из&nbsp;них, который для многих может оказаться полезным. Это сервис прогноза погоды <a href="http://weather.yahoo.com/">Yahoo! Weather</a>.</p>

<p>Года два назад я&nbsp;искал в&nbsp;сети удобный и&nbsp;открытый источник подобных данных, но&nbsp;так ничего и&nbsp;не&nbsp;нашел. Все отечественные сервисы экспортировали данные за&nbsp;деньги (отпугивала скорее не&nbsp;цена, а&nbsp;наличие возни с&nbsp;оплатой), а&nbsp;западные&nbsp;&#8212; либо не&nbsp;предоставляли данных в&nbsp;удобном для автоматической обработки формате, либо не&nbsp;знали о&nbsp;существовании города, в&nbsp;котором я&nbsp;живу.</p>

<p>Yahoo! Weather порадовал отсутствием перечисленных недостатков. Информация о&nbsp;текущей погоде, а&nbsp;так&nbsp;же прогноз на&nbsp;ближайшие 5&nbsp;дней экспортируется с&nbsp;их&nbsp;сервера в&nbsp;формате RSS. На&nbsp;мой взгляд, выбор этого формата притянут за&nbsp;уши, т.к. погодная RSS &laquo;лента&raquo; содержит всего однин item. Те&nbsp;же данные можно было&nbsp;бы экспортировать в&nbsp;более лаконичном виде, но&nbsp;в&nbsp;Yahoo, по&nbsp;всей видимости, расчитывали на&nbsp;стандартные методы обработки RSS, что тоже довольно весомый довод. Стандарт&nbsp;&#8212; это все-таки стандарт.</p>

<p>Адрес RSS фида для интересующего города можно найти на&nbsp;сайте <a href="http://weather.yahoo.com/">weather.yahoo.com</a>.</p>

<p><img src="http://paradigm.ru/;-)/2008/02/yahoo-weather.png" width="500" height="291" alt="" /></p>

<p>В&nbsp;общем виде URL выглядит следующим образом:</p>

<p><code>http://xml.weather.yahoo.com/forecastrss?p=<strong style="color:green;">код<em>города</strong>&amp;u=<strong style="color:red;">единицы</em>измерения</strong></code></p>

<p>Первый параметр&nbsp;&#8212; идентификатор интересующего города. Второй параметр определяет, в&nbsp;каких единицах будет выдаваться температура. Значение &laquo;c&raquo; соответствует градусам Цельсия, &laquo;f&raquo;&nbsp;&#8212; градусам Фаренгейта. <span id="more-181"></span></p>

<p>Несколько примеров:</p>

<ul>
<li>Москва&nbsp;&#8212; <a href="http://xml.weather.yahoo.com/forecastrss?p=RSXX0063&#038;u=c">http://xml.weather.yahoo.com/forecastrss?p=RSXX0063&amp;u=c</a></li>
<li>Санкт-Петербург&nbsp;&#8212; <a href="http://xml.weather.yahoo.com/forecastrss?p=RSXX0091&#038;u=c">http://xml.weather.yahoo.com/forecastrss?p=RSXX0091&amp;u=c</a></li>
<li>Екатеринбург&nbsp;&#8212; <a href="http://xml.weather.yahoo.com/forecastrss?p=RSXX1219&#038;u=c">http://xml.weather.yahoo.com/forecastrss?p=RSXX1219&amp;u=c</a></li>
<li>Ханты-Мансийск&nbsp;&#8212; <a href="http://xml.weather.yahoo.com/forecastrss?p=RSXX1234&#038;u=c">http://xml.weather.yahoo.com/forecastrss?p=RSXX1234&amp;u=c</a></li>
<li>Киев&nbsp;&#8212; <a href="http://xml.weather.yahoo.com/forecastrss?p=UPXX0016&#038;u=c">http://xml.weather.yahoo.com/forecastrss?p=UPXX0016&amp;u=c</a></li></ul>

<p>Описанный ниже класс <code>YahooWeather</code> (PHP5) предназначен для загрузки RSS по&nbsp;HTTP и&nbsp;предварительной обработки данных.</p>

<p><pre><code class="php">&lt;?php</p>

<p>class YahooWeather {
    // Ветер
    public $wind_chill;
    public $wind_direction;
    public $wind_speed;</p>

<pre><code>// Атмосферные показатели
public $humidity;
public $visibility;
public $pressure;

// Время восхода и заката переводим в формат unix time
public $sunrise;
public $sunset;

// Текущая температура воздуха и погода
public $temp;
public $condition_text;
public $condition_code;

// Прогноз погоды на 5 дней
public $forecast;

public $units;

function __construct($code, $units = 'c', $lang = 'en') {
    $this-&amp;gt;units = ($units == 'c')?'c':'f';

    $url = 'http://xml.weather.yahoo.com/forecastrss?p='.
        $code.'&amp;u='.$this-&amp;gt;units;

    $xml_contents = file_get_contents($url);
    if($xml_contents === false) 
        throw new Exception('Error loading '.$url);

    $xml = new SimpleXMLElement($xml_contents);

    // Ветер
    $tmp = $xml-&amp;gt;xpath('/rss/channel/yweather:wind');
    if($tmp === false) throw new Exception("Error parsing XML.");
    $tmp = $tmp[0];

    $this-&amp;gt;wind_chill = (int)$tmp['chill'];
    $this-&amp;gt;wind_direction = (int)$tmp['direction'];
    $this-&amp;gt;wind_speed = (int)$tmp['speed'];

    // Атмосферные показатели
    $tmp = $xml-&amp;gt;xpath('/rss/channel/yweather:atmosphere');
    if($tmp === false) throw new Exception("Error parsing XML.");
    $tmp = $tmp[0];

    $this-&amp;gt;humidity = (int)$tmp['humidity'];
    $this-&amp;gt;visibility = (int)$tmp['visibility'];
    $this-&amp;gt;pressure = (int)$tmp['pressure'];

    // Время восхода и заката переводим в формат unix time
    $tmp = $xml-&amp;gt;xpath('/rss/channel/yweather:astronomy');
    if($tmp === false) throw new Exception("Error parsing XML.");
    $tmp = $tmp[0];

    $this-&amp;gt;sunrise = strtotime($tmp['sunrise']);
    $this-&amp;gt;sunset = strtotime($tmp['sunset']);

    // Текущая температура воздуха и погода
    $tmp = $xml-&amp;gt;xpath('/rss/channel/item/yweather:condition');
    if($tmp === false) throw new Exception("Error parsing XML.");
    $tmp = $tmp[0];

    $this-&amp;gt;temp = (int)$tmp['temp'];
    $this-&amp;gt;condition_text = strtolower((string)$tmp['text']);
    $this-&amp;gt;condition_code = (int)$tmp['code'];

    // Прогноз погоды на 5 дней
    $forecast = array();
    $tmp = $xml-&amp;gt;xpath('/rss/channel/item/yweather:forecast');
    if($tmp === false) throw new Exception("Error parsing XML.");

    foreach($tmp as $day) {
        $this-&amp;gt;forecast[] = array(
            'date' =&amp;gt; strtotime((string)$day['date']),
            'low' =&amp;gt; (int)$day['low'],
            'high' =&amp;gt; (int)$day['high'],
            'text' =&amp;gt; (string)$day['text'],
            'code' =&amp;gt; (int)$day['code']
        );
    }
}

public function __toString() {
    $u = "&amp;deg;".(($this-&amp;gt;units == 'c')?'C':'F');
    return $this-&amp;gt;temp.' '.$u.', '.$this-&amp;gt;condition_text;
}
</code></pre>

<p>}</p>

<p>?&gt;</code></pre></p>

<p>Пример использования:</p>

<p><pre><code class="php">&lt;?php</p>

<p>try {
    $weather = new YahooWeather('RSXX0091');
} catch(Exception $e) {
    echo "Caught exception: ".$e-&gt;getMessage();
    exit();
}</p>

<p>echo '&lt;h1&gt;'.$weather.'&lt;/h1&gt;';</p>

<p>echo "&lt;pre&gt;";
print_r($weather);
echo "&lt;/pre&gt;";</p>

<p>?&gt;</code></pre></p>

<p>Вывод:</p>

<p><img src="http://paradigm.ru/;-)/2008/02/weather-report.png" width="447" height="441" alt="" /></p>

<p>Временн<strong>ы</strong>е значения восхода и&nbsp;заката солнца (поля <code>sunrise</code> и&nbsp;<code>sunset</code> соответственно) автоматически переводятся в&nbsp;формат unix time. стоит так&nbsp;же обратить внимание на&nbsp;то,&nbsp;что по&nbsp;непонятной причине Yahoo! выдает явно некорректное значение атмосферного давления (0). Но&nbsp;само наличие соответствующего атрибута в&nbsp;XML дает некоторую надежду на&nbsp;то,&nbsp;что рано или поздно экспорт этих данных починят.</p>

<p>Поле <code>condition_code</code> используется для хранения кодового обозначения погодных условий. Текстовая расшифровка текущего значения хранится в&nbsp;поле <code>condition_text</code>, а&nbsp;полный перечень возможных вариантов приведен в&nbsp;следующей таблице:</p>

<table style="width:80%;">
<tr><th style="width: 10%;">Код</th><th>Описание</th></tr>
<tr><td>0</td><td>tornado</td></tr>
<tr><td>1</td><td>tropical storm</td></tr>
<tr><td>2</td><td>hurricane</td></tr>
<tr><td>3</td><td>severe thunderstorms</td></tr>
<tr><td>4</td><td>thunderstorms</td></tr>
<tr><td>5</td><td>mixed rain and snow</td></tr>
<tr><td>6</td><td>mixed rain and sleet</td></tr>
<tr><td>7</td><td>mixed snow and sleet</td></tr>
<tr><td>8</td><td>freezing drizzle</td></tr>
<tr><td>9</td><td>drizzle</td></tr>
<tr><td>10</td><td>freezing rain</td></tr>
<tr><td>11</td><td>showers</td></tr>
<tr><td>12</td><td>showers</td></tr>
<tr><td>13</td><td>snow flurries</td></tr>
<tr><td>14</td><td>light snow showers</td></tr>
<tr><td>15</td><td>blowing snow</td></tr>
<tr><td>16</td><td>snow</td></tr>
<tr><td>17</td><td>hail</td></tr>
<tr><td>18</td><td>sleet</td></tr>
<tr><td>19</td><td>dust</td></tr>
<tr><td>20</td><td>foggy</td></tr>
<tr><td>21</td><td>haze</td></tr>
<tr><td>22</td><td>smoky</td></tr>
<tr><td>23</td><td>blustery</td></tr>
<tr><td>24</td><td>windy</td></tr>
<tr><td>25</td><td>cold</td></tr>
<tr><td>26</td><td>cloudy</td></tr>
<tr><td>27</td><td>mostly cloudy (night)</td></tr>
<tr><td>28</td><td>mostly cloudy (day)</td></tr>
<tr><td>29</td><td>partly cloudy (night)</td></tr>
<tr><td>30</td><td>partly cloudy (day)</td></tr>
<tr><td>31</td><td>clear (night)</td></tr>
<tr><td>32</td><td>sunny</td></tr>
<tr><td>33</td><td>fair (night)</td></tr>
<tr><td>34</td><td>fair (day)</td></tr>
<tr><td>35</td><td>mixed rain and hail</td></tr>
<tr><td>36</td><td>hot</td></tr>
<tr><td>37</td><td>isolated thunderstorms</td></tr>
<tr><td>38</td><td>scattered thunderstorms</td></tr>
<tr><td>39</td><td>scattered thunderstorms</td></tr>
<tr><td>40</td><td>scattered showers</td></tr>
<tr><td>41</td><td>heavy snow</td></tr>
<tr><td>42</td><td>scattered snow showers</td></tr>
<tr><td>43</td><td>heavy snow</td></tr>
<tr><td>44</td><td>partly cloudy</td></tr>
<tr><td>45</td><td>thundershowers</td></tr>
<tr><td>46</td><td>snow showers</td></tr>
<tr><td>47</td><td>isolated thundershowers</td></tr>
<tr><td>3200</td><td>not available</td></tr>
</table>

<h3>Ссылки по&nbsp;теме</h3>

<ul>
<li><a href="http://weather.yahoo.com/">Yahoo! Weather</a></li>
<li><a href="http://developer.yahoo.com/weather/">Yahoo! Weather RSS feed</a> @ Yahoo! Dev Network&nbsp;&#8212; полное описание экспортируемых данных</li></ul>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/yahoo-weather/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Blitz Templates</title>
		<link>http://paradigm.ru/blitz-templates</link>
		<comments>http://paradigm.ru/blitz-templates#comments</comments>
		<pubDate>Mon, 14 Jan 2008 13:49:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[blitz templates]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[разработка]]></category>
		<category><![CDATA[шаблонизаторы]]></category>

		<guid isPermaLink="false">http://www.paradigm.ru/2008/01/14/blitz-templates/</guid>
		<description><![CDATA[Сегодняшний информационный повод&#160;&#8212; открытие шаблонизатора Blitz Templates, который ранее ускользал от&#160;моего внимания. Из&#160;всех парсеров темплейтов, с&#160;которыми я&#160;имел дело, это первый, реализованный в&#160;виде модуля интерпретатора PHP. Как не&#160;сложно догадаться, это радикально-положительным образом сказывается на&#160;производительности системы, но&#160;вначале я&#160;бы хотел высказаться о&#160;другом его свойстве. Как известно, задачей любого парсера темплейтов является полумифическое отделение кода (и&#160;данных) от&#160;оформления страниц. Я&#160;говорю [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодняшний информационный повод&nbsp;&#8212; открытие шаблонизатора <a href="http://alexeyrybak.com/blitz/blitz_ru.html">Blitz Templates</a>, который ранее ускользал от&nbsp;моего внимания. Из&nbsp;всех парсеров темплейтов, с&nbsp;которыми я&nbsp;имел дело, это первый, реализованный в&nbsp;виде модуля интерпретатора PHP. Как не&nbsp;сложно догадаться, это радикально-положительным образом сказывается на&nbsp;производительности системы, но&nbsp;вначале я&nbsp;бы хотел высказаться о&nbsp;другом его свойстве.</p>

<p>Как известно, задачей любого парсера темплейтов является полумифическое отделение кода (и&nbsp;данных) от&nbsp;оформления страниц. Я&nbsp;говорю полумифического, т.к. в&nbsp;действительности ни&nbsp;один развитый шаблонизатор не&nbsp;может похвастаться реализованной в&nbsp;полной мере такой возможностью. Когда требования к&nbsp;функциональности шаблонов возрастают, их&nbsp;синтаксис усложняется, постепенно перерастая в&nbsp;специализированный язык. Показательный пример тому&nbsp;&#8212; Smarty и&nbsp;многие другие распространенные движки темплейтов. Строго говоря, сам PHP можно отнести к&nbsp;категории очень навороченного генератора страниц.</p>

<p>В&nbsp;итоге, одним из&nbsp;основных критериев при выборе шаблонизатора становится не&nbsp;качество (или степень) отделения кода от&nbsp;оформления, а&nbsp;скорее читаемость этого кода&nbsp;&#8212; достаточно субъективная характеристика, которая сильно зависит не&nbsp;только от&nbsp;шаблонизатора, но&nbsp;и&nbsp;от&nbsp;стиля кодинга. Показательный пример: XSLT является одним из&nbsp;наиболее идеологически-грамотных шаблонизаторов, тем не&nbsp;менее он&nbsp;сейчас пользуется <a href="http://b23.ru/czi">не&nbsp;самой большой популярностью</a>. Одна из&nbsp;причин тому&nbsp;&#8212; очень навороченный синтаксис. <span id="more-156"></span></p>

<p>В&nbsp;контексте сказанного выше, мне понравилась идеология, заложенная в&nbsp;синтаксис Blitz. цитата из&nbsp;официального источника:</p>

<blockquote>Blitz не&nbsp;поддерживает по&nbsp;принципиальным соображениям сложные выражения:

<code>{{if(if($foo, 0,&nbsp;1), &#8217;bar&#8217;, &#8217;foobar&#8217;)}}</code>

Данный код работать не&nbsp;будет. Не&nbsp;надо превращать код в&nbsp;спагетти.</blockquote>

<p>И&nbsp;это очень правильный подход. Гибкие возможности строить сложные синтаксические конструкции&nbsp;&#8212; не&nbsp;всегда хорошо. Часто это служит причиной возникновения настолько запутанного кода, что в&nbsp;него не&nbsp;то&nbsp;что сторонний разработкич побоится залезть, но&nbsp;и&nbsp;сам автор, через пару месяцев после написания, предпочтет полную переработку корректировке деталей.</p>

<p>Упрощение синтаксиса хорошо еще и&nbsp;потому, что у&nbsp;кода шаблонов есть своя специфика: зачастую в&nbsp;темплейтах осознанно не&nbsp;делают форматирования (чтобы не&nbsp;портить форматирование генерируемого HTML и/или не&nbsp;утяжелять его излишним количеством пробельных символов), кроме того в&nbsp;текстовых редакторах обычно нет синтаксической подсветки кода темплейтов, которая облегчила&nbsp;бы работу (исключения&nbsp;&#8212; XSLT и,&nbsp;опять&nbsp;же, PHP).</p>

<p>Возвращаясь к&nbsp;вопросу производительности: Blitz работает быстрее, чем шаблоны, собираемые из&nbsp;отдельных PHP файлов (include-ами), но,&nbsp;по&nbsp;понятным причинам, медленее сплошного PHP кода. Учитывая, что нежелание использовать темплейтов на&nbsp;базе PHP&nbsp;&#8212; одна из&nbsp;самых важных причин использования сторонних шаблонизаторов вообще, можно считать, что Blitz фактически является лидером по&nbsp;скорости среди других систем своего класса.</p>

<p><img src="http://paradigm.ru/;-)/2008/01/lebowski-bench-small.gif" width="522" height="362" alt="" /></p>

<p>Отдельно стоит упомянуть процесс тестирования, точнее обстоятельный подход, с&nbsp;котором он&nbsp;выполнен и&nbsp;описан на&nbsp;сайте разработчика. Неоднократно видел, как производительность шаблонизаторов, фреймворков и&nbsp;CMS измеряют на&nbsp;примерах уровня сложности &laquo;Hello world&raquo;, а&nbsp;потом кричат &laquo;Сенсация! PHP работает быстрее кода на&nbsp;C++!&raquo;. Что касается Blitz&nbsp;&#8212; тесты проводились в&nbsp;условиях, близких к&nbsp;боевым, и&nbsp;полностью обоснованы.</p>

<p>Вывод: на&nbsp;Blitz стоит обратить пристальное внимание при проектировании высокопроизводительных CMS для сайтов, работающих на&nbsp;выделенных серверах. В&nbsp;тех случаях, когда серьезных требований к&nbsp;производительности нет, его использование, к&nbsp;сожалению, будет не&nbsp;всегда оправдано экономически (пользовательские модули PHP&nbsp;&#8212; вещь не&nbsp;для shared хостинга).</p>

<h3>Ссылки по&nbsp;теме</h3>

<ul>
<li><a href="http://alexeyrybak.com/blitz/blitz_ru.html">Blitz Templates</a>&nbsp;&#8212; официальная страница разработки с&nbsp;описанием синтаксиса и&nbsp;результатами сравнительных тестов.</li>
<li>Другие шаблонизаторы: <a href="http://www.smarty.net/">Smarty</a>, <a href="http://templatelite.sourceforge.net/">Template Lite</a> (облегченная и&nbsp;более быстрая версия Smarty), <a href="http://b23.ru/czu">PEAR::HTML_Template_*</a> (средства PEAR для генерации страниц по&nbsp;шаблонам).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://paradigm.ru/blitz-templates/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

