<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Разное про программирование</title>
	<atom:link href="http://zxmd.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://zxmd.wordpress.com</link>
	<description>Заметки про Python, JavaScript, SQL etc</description>
	<lastBuildDate>Fri, 03 Feb 2012 14:47:18 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='zxmd.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/629463535cabed5c81e52ff3f15e6a55?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Разное про программирование</title>
		<link>http://zxmd.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://zxmd.wordpress.com/osd.xml" title="Разное про программирование" />
	<atom:link rel='hub' href='http://zxmd.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Балдеющие от адреналина и зомбированные шаблонами</title>
		<link>http://zxmd.wordpress.com/2012/01/22/book-978-5-93286-160-8/</link>
		<comments>http://zxmd.wordpress.com/2012/01/22/book-978-5-93286-160-8/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 20:52:38 +0000</pubDate>
		<dc:creator>zxmd</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[978-5-93286-160-8]]></category>
		<category><![CDATA[книга]]></category>
		<category><![CDATA[обзор книги]]></category>

		<guid isPermaLink="false">https://zxmd.wordpress.com/?p=362</guid>
		<description><![CDATA[Книга с таим название привлекает внимание. Что говорить, только ради названия я ее и купил.Авторы книги &#8211; группа консультантов которые помогают компаниям в менеджмента проектов. Основная цель данной книги показать основные поведенческие паттерны присущие многим компаниям по входящим ПО. Слово поведенческие основное. Вы не встретите в книге никакого упоминания про паттерн синглетон или фабрика. Эта [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=362&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://zxmd.files.wordpress.com/2012/01/713163.jpg"><img class="alignleft size-full wp-image-368" style="margin:5px;" title="713163" src="http://zxmd.files.wordpress.com/2012/01/713163.jpg?w=590" alt=""   /></a>Книга с таим название привлекает внимание. Что говорить, только ради названия я ее и купил.Авторы книги &#8211; группа консультантов которые помогают компаниям в менеджмента проектов.</p>
<p>Основная цель данной книги показать основные поведенческие паттерны присущие многим компаниям по входящим ПО.<br />
Слово <em>поведенческие</em> основное. Вы не встретите в книге никакого упоминания про паттерн синглетон или фабрика. Эта книга не про эти шаблоны. Более того, эта книга <em>не для разработчиков вообще</em>.  Ее цель показать 86 причин (по сути моделей поведения) хреновой работы команд, неудач проектов и косяки менеджеров ПО. Естественно все излагается в контексте возможностей как сделать софт лучше, процесс разработки более гладким, а нервы целыми.</p>
<p>В книга будет полезна менеджерам  и аналитикам проектов. Книга поднимает основную проблему современного мира создания ПО &#8211; как балансировать в проектном треугольнике так чтобы не стать в конечном итоге козлом отпущения, когда сроки уже перевалили за дату второго дедлайна, бабки кончились а у разработчиков нет никакого желания или возможностей что то исправить.</p>
<p>В кнге нет готовых решений в виде: делать надо так и так, думаю просто не позволяет объем. Но каждая глава имеет ценность, и над каждой стоит задуматься и спроецировать описанную модель на свою компанию или свою должность в этой компании. В любом случае что то полезное извлечь получится.</p>
<p>Перевод совсем не шлакрвый, хотя как я заметил у издателя Символ+ совсем шлаковых не бывает (ну ладно, почти не бывает)<br />
Одним словом рекомендую для прочтения всем менеджерам проектов не осилившим pm book :-)</p>
<p>ISBN: 978-5-93286-160-8</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zxmd.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zxmd.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zxmd.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zxmd.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zxmd.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zxmd.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zxmd.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zxmd.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zxmd.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zxmd.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zxmd.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zxmd.wordpress.com/362/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zxmd.wordpress.com/362/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zxmd.wordpress.com/362/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=362&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zxmd.wordpress.com/2012/01/22/book-978-5-93286-160-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/f64b0a6055d54cb55b5efe288bcf91fe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zxmd</media:title>
		</media:content>

		<media:content url="http://zxmd.files.wordpress.com/2012/01/713163.jpg" medium="image">
			<media:title type="html">713163</media:title>
		</media:content>
	</item>
		<item>
		<title>Джоел о программировании. Джоел. И снова о программировании</title>
		<link>http://zxmd.wordpress.com/2012/01/22/joel-on-software/</link>
		<comments>http://zxmd.wordpress.com/2012/01/22/joel-on-software/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 20:32:32 +0000</pubDate>
		<dc:creator>zxmd</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[5-93286-063-4]]></category>
		<category><![CDATA[978-5-93286-144-8]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Джоел Спольски]]></category>
		<category><![CDATA[книги]]></category>
		<category><![CDATA[обзор книги]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">https://zxmd.wordpress.com/?p=360</guid>
		<description><![CDATA[Вместо предисловия: где то с месяц до нового 2012 года я заказал у books.ru кучу книжек по программированию, архитектуре и менеджменту. Хочется сделать небольшие обзорчики по мере прочтения книг. Начну с двух книг Джоела Спольских, потом по мере прочтения буду выкладывать обзорчики других. Итак &#171;Джоэл о программировании&#187; и &#171;Джоэл. И снова о программировании&#187;. Что можно [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=360&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Вместо предисловия: где то с месяц до нового 2012 года я заказал у books.ru кучу книжек по программированию, архитектуре и менеджменту. Хочется сделать небольшие обзорчики по мере прочтения книг. Начну с двух книг Джоела Спольских, потом по мере прочтения буду выкладывать обзорчики других.</p>
<p>Итак &laquo;Джоэл о программировании&raquo; и &laquo;Джоэл. И снова о программировании&raquo;.</p>
<p>Что можно сказать об этих двух книжках&#8230;</p>
<p><a href="http://zxmd.files.wordpress.com/2012/01/419540.jpg"><img class="alignleft size-full wp-image-365" style="margin-top:5px;margin-bottom:5px;" title="419540" src="http://zxmd.files.wordpress.com/2012/01/419540.jpg?w=590" alt=""   /></a><a href="http://zxmd.files.wordpress.com/2012/01/632841.jpg"><img class="alignleft size-full wp-image-366" style="margin:5px;" title="632841" src="http://zxmd.files.wordpress.com/2012/01/632841.jpg?w=590" alt=""   /></a>Они <strong>очень</strong> хорошо написаны. Основное и главное достоинство книг Джоэла &#8211; прмая и доступная для всех мысль и хороший слог. Собственно во второй книге автор об этом и говорит &laquo;хорошему программисту надо уметь хорошо излагать свои мысли&raquo;.</p>
<p>Надо понимать, что это не книги в общем-то, это наборы статей из блога <a href="http://joelonsoftware.com/">joelonsoftware.com</a>. Именно по этому автор затрагивает очень большое количество аспектов менеджмента и разработки ПО. Статьи кнечно сгруппированы по направлению, но не ищите в них развернутых материалов по какойто то теме.</p>
<p>Скажу прямо, мне книжки очень понравились, они достаточно интересно написаны, поднимаются  распространенные и сложные темы и в книгах есть ответы на некоторые вопросы. Да и стиль узложения автора неподражаем.</p>
<p>Чего не стоит искать в книгах, так это самого программирования. Это не учбники информатики, это больше методологии по менеджменту времени, качеству ПО по рекомендации подбору персоналу. Все это сдобрено хорошими историями из опыта автора, так что читать их очень легко даже если вы не профессинал в какой то области.</p>
<p>Те кто любит сухие факты, книги наверное не понравятся. В них (особенно во второй больше) достаточно много воды и спорных идей, которые автор выдвигает как неприложные истины. Особенно это касается вопросов связанных с подбором персонала, у меня при прочтении некоторых глав, посвященных этой тематики, выворачивало наизнанку. Если у Джоел с таким рвением подбирает себе разработчиков и если его продукт так хорош, то почему так мало распространен.</p>
<p>Особо хочется отметить перевод &#8211; он на удивление хорош. Хотя и есть некоторые ляпы, но смысл от них материал не меняет.<br />
Можно по разному относится к персоне автора, но книги, имхо, обязательны к прочтению. Проведите аналогию с товарищем А. Лебедевым, так вот Спольских такойже Лебедев но от программирования. Интересная и неоднозначная личнось с более чем 20 летним опытом разработки и менеджмента ПО. В любом случае, что то новое узнаете. А если не узнаете то хотябы повесилитесь.</p>
<p>ISBN: 5-93286-063-4 (первая книга)</p>
<p>ISBN: 978-5-93286-144-8 (вторая книга)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zxmd.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zxmd.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zxmd.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zxmd.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zxmd.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zxmd.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zxmd.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zxmd.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zxmd.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zxmd.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zxmd.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zxmd.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zxmd.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zxmd.wordpress.com/360/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=360&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zxmd.wordpress.com/2012/01/22/joel-on-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/f64b0a6055d54cb55b5efe288bcf91fe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zxmd</media:title>
		</media:content>

		<media:content url="http://zxmd.files.wordpress.com/2012/01/419540.jpg" medium="image">
			<media:title type="html">419540</media:title>
		</media:content>

		<media:content url="http://zxmd.files.wordpress.com/2012/01/632841.jpg" medium="image">
			<media:title type="html">632841</media:title>
		</media:content>
	</item>
		<item>
		<title>MySQL функции GROUP_CONCAT и ее аналог в PostgreSQL</title>
		<link>http://zxmd.wordpress.com/2011/11/11/group_concat/</link>
		<comments>http://zxmd.wordpress.com/2011/11/11/group_concat/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 12:58:13 +0000</pubDate>
		<dc:creator>zxmd</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[группировка по столбцу]]></category>
		<category><![CDATA[GROUP_CONCAT]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://zxmd.wordpress.com/?p=349</guid>
		<description><![CDATA[В MySQL есть одна интересная функция, о которой не все знают, но от этого менее интересной и полезной она не становится. Имя этой функции GROUP_CONCAT. Занимается она тем, что склеивает через сепаратор значения из определенного столбца таблицы. Лучше всего это показать на примере. Допустим, что у нас есть таблица со следующей структурой: CREATE TABLE `section_firms`( `sid` int(11) NOT [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=349&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>В <a class="zem_slink" title="MySQL" href="http://www.mysql.com" rel="homepage">MySQL</a> есть одна интересная функция, о которой не все знают, но от этого менее интересной и полезной она не становится. Имя этой функции <a href="http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html" target="_blank">GROUP_CONCAT</a>.</p>
<p>Занимается она тем, что склеивает через сепаратор значения из определенного столбца таблицы. Лучше всего это показать на примере.</p>
<p>Допустим, что у нас есть таблица со следующей структурой:</p>
<p><span style="color:#800000;font-weight:bold;">CREATE </span><span style="color:#800000;font-weight:bold;">TABLE </span><span style="color:#800000;">`</span><span style="color:#000000;background:#ffffff;">section_firms</span><span style="color:#800000;">`</span><span style="color:#808030;">(</span></p>
<pre style="color:#000000;background:#ffffff;">  <span style="color:#800000;">`</span><span style="color:#000000;background:#ffffff;">sid</span><span style="color:#800000;">`</span> <span style="color:#bb7977;">int</span><span style="color:#808030;">(</span><span style="color:#008c00;">11</span><span style="color:#808030;">)</span> <span style="color:#808030;">NOT</span> <span style="color:#808030;">NULL</span><span style="color:#800080;">,</span>
  <span style="color:#800000;">`</span><span style="color:#000000;background:#ffffff;">fid</span><span style="color:#800000;">`</span> <span style="color:#bb7977;">int</span><span style="color:#808030;">(</span><span style="color:#008c00;">11</span><span style="color:#808030;">)</span> <span style="color:#808030;">NOT</span> <span style="color:#808030;">NULL</span><span style="color:#800080;">,</span>
<span style="color:#808030;">)</span><span style="color:#800080;">;</span></pre>
<p>В таблице хранятся соотношения одной сущности (sid) к другой (fid), в данном случае many-to-many.</p>
<p><a href="http://zxmd.files.wordpress.com/2011/11/table_sample.png"><img class="aligncenter size-full wp-image-350" title="table_sample" src="http://zxmd.files.wordpress.com/2011/11/table_sample.png?w=590" alt=""   /></a><br />
Нам нужно в результате запроса получить все fid со всеми связанными с ней sid. Как раз для этого и существует функция GROUP_CONCAT. Она возмет все строчки указанного столбца и склит их в одну строку. Запрос для этого будет выглядит так:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#800000;font-weight:bold;">SELECT</span> fid<span style="color:#800080;">,</span> GROUP_CONCAT<span style="color:#808030;">(</span>sid<span style="color:#808030;">)</span> <span style="color:#800000;font-weight:bold;">as</span> sid
<span style="color:#800000;font-weight:bold;">FROM</span> section_firms
<span style="color:#800000;font-weight:bold;">GROUP</span> <span style="color:#800000;font-weight:bold;">BY</span> fid</pre>
<p>Результат будет таким:</p>
<p><a href="http://zxmd.files.wordpress.com/2011/11/selection_006.png"><img src="http://zxmd.files.wordpress.com/2011/11/selection_006.png?w=590&#038;h=317" alt="" width="590" height="317" /></a></p>
<p>Как видим функция &laquo;свернула&raquo; столбец в строку.</p>
<p>А как обстоят дела с ней в <a class="zem_slink" title="PostgreSQL" href="http://www.postgresql.org" rel="homepage">PostgreSQL</a> ? А никак. (Как мне правильно указал <a href="http://www.facebook.com/profile.php?id=100000478132817" rel="external nofollow">Alexander Korotkov</a> - я ошибаюсь по поводу PostgreSQL, функция такая <a href="http://www.postgresql.org/docs/8.4/static/functions-aggregate.html">есть</a>) Это специфичная только для MySQL  функция. Но можно написать аналогичную процедуру для PostgreSQL, чуть сложнее конечно, но можно положить в библиотеку (а еще лучше в свой шаблон базы данных) и таскать из проекта в проект.</p>
<p>Функция собственно:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#800000;font-weight:bold;">create</span> aggregate array_accum <span style="color:#808030;">(</span>
sfunc <span style="color:#808030;">=</span> array_append<span style="color:#808030;">,</span>
basetype <span style="color:#808030;">=</span> anyelement<span style="color:#808030;">,</span>
stype <span style="color:#808030;">=</span> anyarray<span style="color:#808030;">,</span>
initcond <span style="color:#808030;">=</span> <span style="color:#0000e6;">'{}'</span>
<span style="color:#808030;">)</span><span style="color:#808030;">;</span></pre>
<p>Пример запроса с этой процедурой:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#800000;font-weight:bold;">select</span> fid<span style="color:#808030;">,</span> array_to_string<span style="color:#808030;">(</span>array_accum<span style="color:#808030;">(</span>sid<span style="color:#808030;">)</span><span style="color:#808030;">,</span> <span style="color:#0000e6;">','</span><span style="color:#808030;">)</span>
<span style="color:#800000;font-weight:bold;">from</span> section_firms
<span style="color:#800000;font-weight:bold;">group</span> <span style="color:#800000;font-weight:bold;">by</span> fid<span style="color:#808030;">;</span></pre>
<p>Небольшое замечание, процедура возвращает не строку а массив значений, для того чтобы превратить в строку нужно результат работы процедуры скормить стандартной процедуре array_to_string, которая склеит массив с указанным разделителем.</p>
<p>Более подробно про реализацию под PostgreSQL можно <a href="http://mssql-to-postgresql.blogspot.com/2007/12/cool-groupconcat.html">почитать тут</a>.</p>
<p>Надеюсь, что данная информация сможет быть интересной.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zxmd.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zxmd.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zxmd.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zxmd.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zxmd.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zxmd.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zxmd.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zxmd.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zxmd.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zxmd.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zxmd.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zxmd.wordpress.com/349/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zxmd.wordpress.com/349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zxmd.wordpress.com/349/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=349&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zxmd.wordpress.com/2011/11/11/group_concat/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/f64b0a6055d54cb55b5efe288bcf91fe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zxmd</media:title>
		</media:content>

		<media:content url="http://zxmd.files.wordpress.com/2011/11/table_sample.png" medium="image">
			<media:title type="html">table_sample</media:title>
		</media:content>

		<media:content url="http://zxmd.files.wordpress.com/2011/11/selection_006.png" medium="image" />
	</item>
		<item>
		<title>Книжки&#8230;</title>
		<link>http://zxmd.wordpress.com/2011/09/26/books/</link>
		<comments>http://zxmd.wordpress.com/2011/09/26/books/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 20:02:33 +0000</pubDate>
		<dc:creator>zxmd</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://zxmd.wordpress.com/?p=344</guid>
		<description><![CDATA[Наткнулся в сети на блог отдного коллеги. Он собрал список книжек по Python/Django/JS/etc. Полностью со списком согласен, добавить нечего: http://vas3k.ru/blog/283/<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=344&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Наткнулся в сети на блог отдного коллеги. Он собрал список книжек по Python/Django/JS/etc. Полностью со списком согласен, добавить нечего: <a href="http://vas3k.ru/blog/283/" target="_blank">http://vas3k.ru/blog/283/</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zxmd.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zxmd.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zxmd.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zxmd.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zxmd.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zxmd.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zxmd.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zxmd.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zxmd.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zxmd.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zxmd.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zxmd.wordpress.com/344/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zxmd.wordpress.com/344/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zxmd.wordpress.com/344/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=344&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zxmd.wordpress.com/2011/09/26/books/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/f64b0a6055d54cb55b5efe288bcf91fe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zxmd</media:title>
		</media:content>
	</item>
		<item>
		<title>Буду переезжать</title>
		<link>http://zxmd.wordpress.com/2011/09/12/change-server/</link>
		<comments>http://zxmd.wordpress.com/2011/09/12/change-server/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 14:53:48 +0000</pubDate>
		<dc:creator>zxmd</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://zxmd.wordpress.com/?p=337</guid>
		<description><![CDATA[<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=337&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div class="zemanta-img">
<div class="wp-caption alignleft" style="width: 250px"><a href="http://www.flickr.com/photos/11556508@N00/6138780010/"><img title="Dall Sheep" src="http://farm7.static.flickr.com/6082/6138780010_488b9f04fd_m.jpg" alt="Dall Sheep" width="240" height="199" /></a><p class="wp-caption-text">Собираюсь переезжать на новый сервер.</p></div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zxmd.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zxmd.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zxmd.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zxmd.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zxmd.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zxmd.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zxmd.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zxmd.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zxmd.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zxmd.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zxmd.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zxmd.wordpress.com/337/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zxmd.wordpress.com/337/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zxmd.wordpress.com/337/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=337&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zxmd.wordpress.com/2011/09/12/change-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/f64b0a6055d54cb55b5efe288bcf91fe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zxmd</media:title>
		</media:content>

		<media:content url="http://farm7.static.flickr.com/6082/6138780010_488b9f04fd_m.jpg" medium="image">
			<media:title type="html">Dall Sheep</media:title>
		</media:content>
	</item>
		<item>
		<title>Сравнение web фреймворков для Python</title>
		<link>http://zxmd.wordpress.com/2011/08/30/web-frameworks-battle/</link>
		<comments>http://zxmd.wordpress.com/2011/08/30/web-frameworks-battle/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 17:53:35 +0000</pubDate>
		<dc:creator>zxmd</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[фреймворки для веба]]></category>
		<category><![CDATA[python frameworks]]></category>
		<category><![CDATA[web frameworks]]></category>

		<guid isPermaLink="false">http://zxmd.wordpress.com/?p=331</guid>
		<description><![CDATA[ <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=331&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="__ss_8952006" style="width:550px;">
<p> <iframe src='http://www.slideshare.net/slideshow/embed_code/8952006' width='550' height='451' scrolling='no'></iframe></p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zxmd.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zxmd.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zxmd.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zxmd.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zxmd.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zxmd.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zxmd.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zxmd.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zxmd.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zxmd.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zxmd.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zxmd.wordpress.com/331/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zxmd.wordpress.com/331/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zxmd.wordpress.com/331/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=331&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zxmd.wordpress.com/2011/08/30/web-frameworks-battle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/f64b0a6055d54cb55b5efe288bcf91fe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zxmd</media:title>
		</media:content>
	</item>
		<item>
		<title>Переопредление вывода в Python</title>
		<link>http://zxmd.wordpress.com/2011/08/18/python-stdout/</link>
		<comments>http://zxmd.wordpress.com/2011/08/18/python-stdout/#comments</comments>
		<pubDate>Thu, 18 Aug 2011 12:29:50 +0000</pubDate>
		<dc:creator>zxmd</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[/dev/null]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[консоль]]></category>
		<category><![CDATA[логирование]]></category>
		<category><![CDATA[перенаправление]]></category>
		<category><![CDATA[logging]]></category>
		<category><![CDATA[stdout]]></category>

		<guid isPermaLink="false">http://zxmd.wordpress.com/?p=325</guid>
		<description><![CDATA[Чтобы переопредлить вывод в Python&#8217;е можно использовать следующую конструкцию: import sys, os sys.stdout = open(os.devnull, 'w') В этом случае, весь вывод (например командой print) будет перенаправлен в /dev/null. Естественно, если нужно перенаправить в файл то вместо os.devnull следует подставить название текстового файла куда будет перенаправлен вывод. Если вам нужно переключать контексты вывода и перенаправлять не [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=325&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Чтобы переопредлить вывод в Python&#8217;е можно использовать следующую конструкцию:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#800000;font-weight:bold;">import</span> sys<span style="color:#808030;">,</span> os
sys<span style="color:#808030;">.</span>stdout <span style="color:#808030;">=</span> <span style="color:#e34adc;">open</span><span style="color:#808030;">(</span>os<span style="color:#808030;">.</span>devnull<span style="color:#808030;">,</span> <span style="color:#0000e6;">'w'</span><span style="color:#808030;">)</span></pre>
<p>В этом случае, весь вывод (например командой print) будет перенаправлен в /dev/null. Естественно, если нужно перенаправить в файл то вместо os.devnull следует подставить название текстового файла куда будет перенаправлен вывод.</p>
<p>Если вам нужно переключать контексты вывода и перенаправлять не всегда в файл но и, в зависимости от ситуации, в консоль &#8211; то можно сделать так:</p>
<pre style="color:#000000;background:#ffffff;">old_stdout <span style="color:#808030;">=</span> sys<span style="color:#808030;">.</span>stdout
sys<span style="color:#808030;">.</span>stdout <span style="color:#808030;">=</span> <span style="color:#e34adc;">open</span><span style="color:#808030;">(</span>os<span style="color:#808030;">.</span>devnull<span style="color:#808030;">,</span> <span style="color:#0000e6;">'w'</span><span style="color:#808030;">)</span>
<span style="color:#696969;"># ...</span>
<span style="color:#800000;font-weight:bold;">print</span> <span style="color:#0000e6;">"перенаправленный вывод в файл"</span>
<span style="color:#696969;">#....</span>
sys<span style="color:#808030;">.</span>stdout <span style="color:#808030;">=</span> old_stdout <span style="color:#696969;"># Сменили контекст</span>
<span style="color:#696969;">#...</span>
<span style="color:#800000;font-weight:bold;">print</span> <span style="color:#0000e6;">"в стандартный вывод (обычно консоль)."</span></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zxmd.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zxmd.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zxmd.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zxmd.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zxmd.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zxmd.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zxmd.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zxmd.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zxmd.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zxmd.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zxmd.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zxmd.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zxmd.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zxmd.wordpress.com/325/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=325&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zxmd.wordpress.com/2011/08/18/python-stdout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/f64b0a6055d54cb55b5efe288bcf91fe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zxmd</media:title>
		</media:content>
	</item>
		<item>
		<title>Что такое Titanium Appcelerator</title>
		<link>http://zxmd.wordpress.com/2011/08/02/titanium-app/</link>
		<comments>http://zxmd.wordpress.com/2011/08/02/titanium-app/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 21:08:19 +0000</pubDate>
		<dc:creator>zxmd</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Androind]]></category>
		<category><![CDATA[crossplatform]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac OS]]></category>
		<category><![CDATA[mobile development]]></category>
		<category><![CDATA[Titanium Appcelerator]]></category>

		<guid isPermaLink="false">http://zxmd.wordpress.com/?p=289</guid>
		<description><![CDATA[В современном мире уже никуда не деться от повальной мобилизации &#8211; iPhone, iPad, Android, Blackberry, Maemo (сейчас скорее уже труп, но всеже) и даже пресловутый WebOS от HP, заставляют разработчиков все пристальней смотреть в сторону мобильных систем. Что же нам сулит мобильный рынок с точки зрения трудозатрат на разработку? По сути &#8211;  ничего хорошего. Сейчас [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=289&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>В современном мире уже никуда не деться от повальной мобилизации &#8211; iPhone, iPad, Android, Blackberry, Maemo (сейчас скорее уже труп, но всеже) и даже пресловутый WebOS от HP, заставляют разработчиков все пристальней смотреть в сторону мобильных систем.</p>
<p>Что же нам сулит мобильный рынок с точки зрения трудозатрат на разработку? По сути &#8211;  ничего хорошего.</p>
<p>Сейчас уже сложился достаточно большой лагерь разработчиков под iOS, есть специалисты по Андроиду, но на порядок меньше, кто то тыкал палочкой в Маемо и почти никто не видел WebOS или Blackberry. C каждой из платформ связаны свои технологии, стандарты, гайдлайны. Наверное самой сложной можно считать разработку под iOS, так как ни тебе нормального (сорри, привычного) языка разработки, ни вольностей по UI да и разработку на пустом месте не начнешь &#8211; нужен как минимум Mac OS. А про сложности выхода в маркет &#8211; лучше умолчу. (надо уточнить что это мое IMHO)</p>
<p><span id="more-289"></span></p>
<p>Но не бросать же этот, достаточно жирный, рынок только из за сложностей разработки. Да и есть как минимум два, на данный момент, решения способных сильно облегчить жизнь разработчика. Конечно с ограничениями, но и со своими плюшками. Забегая вперед надо заметить, что адепты нативного программирования под любую из платформу будут плевать ядовитой слюной и кричать что это &laquo;не тру&raquo; и &laquo;не айс&raquo; и автор редкостный _____еб ! Таких товарищей попрошу удалиться &#8211; дальше статья не для вас.</p>
<p>Итак, на рынке есть два решения которые позволяют сильно облегчить написания приложений для мобильных платформ. Это <a href="http://www.appcelerator.com/" target="_blank">Titanium Appcelerator</a> и <a href="http://www.phonegap.com/" target="_blank">PhoneGap</a>. Принцип работы обеих систем достаточно прост &#8211; и то и другое это кросплатформенные движки, которые позволяют запускать веб приложения с доступом к специфичному API системы (звук, камера, геолокация, звонки и т.д.)</p>
<p>То-есть вам не нужно знать ни ObjectiveC ни Java для написания приложения. Единственные знания которые от вас требуются &#8211; JavaScript на досточном уровне. Более того &#8211; написав приложение, например, для iPhone вы его сможете собрать и для Android не изменив ни строчки. Единственное, что остается &#8211; это подобрать соответствующие иконки и значки под требования ОС. Для простых программ &#8211; этого достаточно. Это достигается за счет  того, что платформы реализуют в себе UI самой системы &#8211; создав например Tab он будет выглядить нативно для целевой системы.</p>
<p>Сразу нужно предупредить, что производительность программ написанных с помощью этих фремворков несколько ниже &#8211; но не критично. Абсолютно точно, что не стоит пытаться писать на них игры &#8211; это не та стихия где рулят эти фреймворки. Для игр лучше посмотреть в сторону <a href="http://habrahabr.ru/blogs/gdev/123331/" target="_blank">кроссплатформенных игровых движков</a>.</p>
<p>Какая из систем лучше &#8211; я пока не могу определиться. У обоих есть свои плюшки и какашки.</p>
<p>Давайте рассмотрим работу с одной из систем поближе. Сегодня хочу рассказать про Titanium, в следующий раз про PhoneGap.</p>
<p>С чего начать. Начать с того что зарегистрироваться на <a href="http://www.appcelerator.com/" target="_blank">http://www.appcelerator.com/</a></p>
<p>Пару слов о лицензиях. Есть community лицензия &#8211; бесплатная, есть Indy и Proffesional &#8211; платные. Различаются набором модулей самого фреймворка, фичей Debug в IDE (за время написания статьи стала доступна и в бесплатной версии), естественно поддержкой и доступом к <a href="http://www.appcelerator.com/products/titanium-analytics/" target="_blank">системе аналитики</a>.</p>
<blockquote><p>После регистрации &#8211; качаем Titanium Studio. К слову сказать &#8211; компания appcelerator некоторое время назад купила компанию Aptana с их продуктом Aptana IDE, вместе они допилили Аптану до состоянии синергии с титаниумом и теперь это штатная IDE для Titanium Appcelerator. Естественно ничего оттуда не выкинули &#8211; Ruby и PyDev из коробки на месте и&#8230; OMG!! они добавили поддержку цветовых тем из TextMate!!!</p></blockquote>
<p>Скачав IDE, распаковав и запустив &#8211; вам нужно залогиниться под аккаунтом appcelerator`а.</p>
<p><a href="http://zxmd.files.wordpress.com/2011/07/titanium-login.png"><img class="aligncenter size-full wp-image-299" title="Titanium Appcenter login form" src="http://zxmd.files.wordpress.com/2011/07/titanium-login.png?w=590&#038;h=405" alt="Titanium Appcenter login form" width="590" height="405" /></a></p>
<p>Для быстрого старта я рекомендую слить с github пример под названием <a href="https://github.com/appcelerator/KitchenSink" target="_blank">Kitchen Sink</a>. Это большой пример использования самых различных подсистем ОС, начиная от простых кнопок, заканчивая доступом к камере и медиатеке.</p>
<p>Пару слов про требования к системе &#8211; они описаны <a href="http://wiki.appcelerator.org/display/guides/Titanium+Compatibility+Matrix" target="_blank">тут</a>, но в двух словах: работает на Windows, Linux, Mac OS. Под Android можно разрабатывать на всех трех системах, под iOS только в Mac OS X (ну а как же иначе) Также, требуются Androind SDK и iOS SDK. Ну и сам компьютер должен быть хоть немного шустрым &#8211; а то эмуляция дело такое, не для слабонервных ПК (особенно касается эмуляции Android). Еще дополнение &#8211; для работы с Android SDK нужно еще <a href="http://wiki.appcelerator.org/display/tis/Installing+the+ADT+Plugin" target="_blank">отдельно поставить ADP</a></p>
<p>Давайте в качестве примере напишем простой сервис, который будет выполнять следующие действия:</p>
<ul>
<li>Осуществлять поиск по названию компании в удаленной БД (через JSON);</li>
<li>Отображать список найденных компаний;</li>
<li>По клику на компанию отображать ее на карте;</li>
</ul>
<div>
<div>Дизайн приложения будет максимально простой:</div>
<div><a href="http://zxmd.files.wordpress.com/2011/08/mockup.png"><img class="aligncenter" title="mockup" src="http://zxmd.files.wordpress.com/2011/08/mockup.png?w=585&#038;h=510" alt="" width="585" height="510" /></a></div>
</div>
<div>Вроде простая программка. Посмотрим что получится.</div>
<div>Создаем новый проект:</div>
<pre>New -&gt; Titanium Mobile Project</pre>
<div>Для примера назовем его</div>
<pre>FindOnMap</pre>
<div>установим App Id:</div>
<pre>org.example.findonmap</pre>
<div>Выберем платформы iPhone, iPad и Android:</div>
<div><a href="http://zxmd.files.wordpress.com/2011/07/new_project.png"><img class="aligncenter size-full wp-image-301" title="new_project" src="http://zxmd.files.wordpress.com/2011/07/new_project.png?w=590" alt=""   /></a></div>
<div>Весь проект с комментариями доступен по ссылке <a href="https://github.com/jasper1/FindOnMap" target="_blank">https://github.com/jasper1/FindOnMap</a> по этому приводить его здесь не буду.</div>
<div><a href="http://zxmd.files.wordpress.com/2011/08/screen-shot-2011-08-03-at-0-24-09.png"><img class="alignleft size-full wp-image-304" title="Screen Shot 2011-08-03 at 0.24.09" src="http://zxmd.files.wordpress.com/2011/08/screen-shot-2011-08-03-at-0-24-09.png?w=590" alt=""   /></a>Отмечу  основные моменты:</div>
<div>
<ul>
<li>По структуре проекта &#8211; основной код и ресурсы находятся в каталоге Resources. В зависимоти от платформы используются разные ресурсы из каталогов android и iphone. Так-же в этих каталогах находятся ресурсы для разных устройств, как пример splash screen для iPhone, iPhone 5 (Retina) и iPad называются  Default.png, Default@x2.png и Default-Landscape.png (Default-Portrait.png) для iPad (в зависимоти от положения при запуске). С андроидом сложнее так как разрешений экранов для него больше. В принципе отдельно готовить ресурсы для каждого не обязательно &#8211; будет сжимать сам, но качество потеряется и надо учитывать, что соотношение стороно бывает разное;</li>
<li>файл app.js &#8211; основной файл проекта. Логики он несет совсем мало, но мне удобнее было оставить его;</li>
<li>main.js &#8211; содержит описания UI для приложения;</li>
<li>events.js &#8211; события на ввод поисковой фразы и нажатия на табличку для выбора компании.</li>
<li>Сервер отдает в формате JSON (кому интересно то такм Python+Django+Mongo)</li>
</ul>
<div>Из особенностей Titanium Mobile которыми я пользовался:</div>
<div>
<ul>
<li>Ti.include(&#8216;&#8230;&#8217;) &#8211; подключение внешнего файла;</li>
<li>Ti.API.info (&#8216;&#8230;&#8217;) &#8211; вывод в консоль отладочной информации;</li>
</ul>
<div>Ну и скриншоты приложения на последок:</div>
<div><a href="http://zxmd.files.wordpress.com/2011/08/screen-shot-2011-08-03-at-0-37-18.png"><img class="aligncenter size-full wp-image-305" title="Screen Shot 2011-08-03 at 0.37.18" src="http://zxmd.files.wordpress.com/2011/08/screen-shot-2011-08-03-at-0-37-18.png?w=590" alt=""   /></a></div>
</div>
</div>
<div>Если есть вопросы &#8211; пишите, с удовольствием отвечу. И ждите еще подобный экскурс в систему PhoneGap.</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zxmd.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zxmd.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zxmd.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zxmd.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zxmd.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zxmd.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zxmd.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zxmd.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zxmd.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zxmd.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zxmd.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zxmd.wordpress.com/289/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zxmd.wordpress.com/289/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zxmd.wordpress.com/289/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=289&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zxmd.wordpress.com/2011/08/02/titanium-app/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/f64b0a6055d54cb55b5efe288bcf91fe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zxmd</media:title>
		</media:content>

		<media:content url="http://zxmd.files.wordpress.com/2011/07/titanium-login.png" medium="image">
			<media:title type="html">Titanium Appcenter login form</media:title>
		</media:content>

		<media:content url="http://zxmd.files.wordpress.com/2011/08/mockup.png" medium="image">
			<media:title type="html">mockup</media:title>
		</media:content>

		<media:content url="http://zxmd.files.wordpress.com/2011/07/new_project.png" medium="image">
			<media:title type="html">new_project</media:title>
		</media:content>

		<media:content url="http://zxmd.files.wordpress.com/2011/08/screen-shot-2011-08-03-at-0-24-09.png" medium="image">
			<media:title type="html">Screen Shot 2011-08-03 at 0.24.09</media:title>
		</media:content>

		<media:content url="http://zxmd.files.wordpress.com/2011/08/screen-shot-2011-08-03-at-0-37-18.png" medium="image">
			<media:title type="html">Screen Shot 2011-08-03 at 0.37.18</media:title>
		</media:content>
	</item>
		<item>
		<title>Создание XML на скорою руку</title>
		<link>http://zxmd.wordpress.com/2011/07/13/xml_from_templates/</link>
		<comments>http://zxmd.wordpress.com/2011/07/13/xml_from_templates/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 14:58:17 +0000</pubDate>
		<dc:creator>zxmd</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[шаблоны]]></category>
		<category><![CDATA[templates]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[xml output]]></category>

		<guid isPermaLink="false">http://zxmd.wordpress.com/?p=292</guid>
		<description><![CDATA[Привет ! Иногда бывает нужно по быстрому набросать XML для какого-нибудь очередного экспорта во внешний мир. Кто эанимался созданием XML налету, тот наверное разделит мое мнение о том, что пустяковая задача превращается в рутину и кучу кода по управлению предками и детьми (parent nodes, childrens, etc.). Для себя, я решил эту проблему посредством шаблонов. Обычных [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=292&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Привет !</p>
<p>Иногда бывает нужно по быстрому набросать <a class="zem_slink" title="XML" href="http://en.wikipedia.org/wiki/XML" rel="wikipedia">XML</a> для какого-нибудь очередного экспорта во внешний мир. Кто эанимался созданием XML налету, тот наверное разделит мое мнение о том, что пустяковая задача превращается в рутину и кучу кода по управлению предками и детьми (parent nodes, childrens, etc.).</p>
<p><span id="more-292"></span></p>
<p>Для себя, я решил эту проблему посредством шаблонов. Обычных (в моем случае джанговских) шаблонов. Собственно вся идея в том, что шаблонизатору абсолютно по барабану что обрабатывать, будь то <a class="zem_slink" title="XHTML" href="http://en.wikipedia.org/wiki/XHTML" rel="wikipedia">XHTML</a>, <a class="zem_slink" title="HTML" href="http://en.wikipedia.org/wiki/HTML" rel="wikipedia">HTML</a>, <a class="zem_slink" title="Scalable Vector Graphics" href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics" rel="wikipedia">SVG</a>, <a class="zem_slink" title="JSON" href="http://en.wikipedia.org/wiki/JSON" rel="wikipedia">JSON</a> (для сособо одаренных) и естественно он ничего не имеет против XML.</p>
<p>Собственно вот пример:</p>
<p>Шаблон</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#004a43;">&lt;?</span><span style="color:#004a43;">xml</span> <span style="color:#004a43;">version</span><span style="color:#808030;">=</span><span style="color:#008c00;">"1.0"</span> <span style="color:#004a43;">encoding</span><span style="color:#808030;">=</span><span style="color:#0000e6;">"windows-1251"</span><span style="color:#004a43;">?&gt;</span>
<span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">discounts</span><span style="color:#a65700;">&gt;</span>
    <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">operator</span><span style="color:#a65700;">&gt;</span>
    <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">name</span><span style="color:#a65700;">&gt;</span>{{ operator.name }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">name</span><span style="color:#a65700;">&gt;</span>
    <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">url</span><span style="color:#a65700;">&gt;</span>{{ operator.url }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">url</span><span style="color:#a65700;">&gt;</span>
    <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">logo</span><span style="color:#a65700;">&gt;</span>{{ operator.logo }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">logo</span><span style="color:#a65700;">&gt;</span>
    <span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">operator</span><span style="color:#a65700;">&gt;</span>
    <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">offers</span><span style="color:#a65700;">&gt;</span>
        {% for offer in offers %}
        <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">offer</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">id</span><span style="color:#a65700;">&gt;</span>{{ offer.id }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">id</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">bonus</span><span style="color:#a65700;">&gt;</span>{{ offer.bonus }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">bonus</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">name</span><span style="color:#a65700;">&gt;</span>{{ offer.title }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">name</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">url</span><span style="color:#a65700;">&gt;</span>{{ offer.url_full }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">url</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">description</span><span style="color:#a65700;">&gt;</span>{{ offer.title }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">description</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">region</span><span style="color:#a65700;">&gt;</span>{{ offer.region }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">region</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">beginsell</span><span style="color:#a65700;">&gt;</span>{{ offer.start_date }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">beginsell</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">endsell</span><span style="color:#a65700;">&gt;</span>{{ offer.expire_date }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">endsell</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">beginvalid</span><span style="color:#a65700;">&gt;</span>{{ offer.start_date }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">beginvalid</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">endvalid</span><span style="color:#a65700;">&gt;</span>{{ offer.expire_date }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">endvalid</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">picture</span><span style="color:#a65700;">&gt;</span>{{ offer.front_647x427 }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">picture</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">price</span><span style="color:#a65700;">&gt;</span>0<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">price</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">discount</span><span style="color:#a65700;">&gt;</span>{{ offer.min_discount.0 }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">discount</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">discountprice</span><span style="color:#a65700;">&gt;</span>0<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">discountprice</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">pricecoupon</span><span style="color:#a65700;">&gt;</span>{{ offer.min_discount.1 }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">pricecoupon</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">supplier</span><span style="color:#a65700;">&gt;</span>
                <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">name</span><span style="color:#a65700;">&gt;</span>{{ offer.company.name }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">name</span><span style="color:#a65700;">&gt;</span>
                <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">url</span><span style="color:#a65700;">&gt;</span>{{ offer.company_url }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">url</span><span style="color:#a65700;">&gt;</span>
                <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">tel</span><span style="color:#a65700;">&gt;</span>{{ offer.company_phone }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">tel</span><span style="color:#a65700;">&gt;</span>
                <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">addresses</span><span style="color:#a65700;">&gt;</span>
                    <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">address</span><span style="color:#a65700;">&gt;</span>
                        <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">name</span><span style="color:#a65700;">&gt;</span>{{ offer.company_address }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">name</span><span style="color:#a65700;">&gt;</span>
                        <span style="color:#a65700;">&lt;</span><span style="color:#5f5035;">coordinates</span><span style="color:#a65700;">&gt;</span>{{ offer.geo_data }}<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">coordinates</span><span style="color:#a65700;">&gt;</span>
                    <span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">address</span><span style="color:#a65700;">&gt;</span>
                <span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">addresses</span><span style="color:#a65700;">&gt;</span>
            <span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">supplier</span><span style="color:#a65700;">&gt;</span>
        <span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">offer</span><span style="color:#a65700;">&gt;</span>
        {% endfor %}
    <span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">offers</span><span style="color:#a65700;">&gt;</span>
<span style="color:#a65700;">&lt;/</span><span style="color:#5f5035;">discounts</span><span style="color:#a65700;">&gt;</span></pre>
<p>Понятное дело что можем применять любые условия, циклы, фильтры и вообще что захотим, точнее что знает ваш шаблонизатор.</p>
<p>Вот код который все это безобразие обрабатывает:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#800000;font-weight:bold;">def</span> xml<span style="color:#808030;">(</span>request<span style="color:#808030;">)</span><span style="color:#808030;">:</span>
<span style="color:#c0c0c0;"> operator = get_operator(request) discounts = DiscountFOE.objects.filter(....)</span></pre>
<pre style="color:#000000;background:#ffffff;">    <span style="color:#c0c0c0;">...</span>
    t <span style="color:#808030;">=</span> get_template<span style="color:#808030;">(</span><span style="color:#0000e6;">'exporters/kuponator.xml'</span><span style="color:#808030;">)</span>
    xml <span style="color:#808030;">=</span> t<span style="color:#808030;">.</span>render<span style="color:#808030;">(</span>Context<span style="color:#808030;">(</span><span style="color:#800080;">{</span>
                            <span style="color:#0000e6;">'operator'</span><span style="color:#808030;">:</span>operator<span style="color:#808030;">,</span>
                            <span style="color:#0000e6;">'offers'</span><span style="color:#808030;">:</span>discounts<span style="color:#808030;">,</span>
                            <span style="color:#800080;">}</span><span style="color:#808030;">)</span><span style="color:#808030;">)</span>

    xml <span style="color:#808030;">=</span> xml<span style="color:#808030;">.</span>encode<span style="color:#808030;">(</span><span style="color:#0000e6;">'windows-1251'</span><span style="color:#808030;">)</span>
    <span style="color:#800000;font-weight:bold;">return</span> HttpResponse<span style="color:#808030;">(</span>xml<span style="color:#808030;">,</span> mimetype<span style="color:#808030;">=</span><span style="color:#0000e6;">"text/xml"</span><span style="color:#808030;">)</span></pre>
<p>Но как и в любом решении есть подводные камни.</p>
<p>По умолчанию &#8211; говоря о XML мы подразумеваем, что кодировка у нас UTF-8, но на практике это может быть и CP1251  и KOI-8-R (а кто работал с системой РЖД Экспресс 3 &#8211; тем привет из KOI-7-R). Решение в лоб &#8211; перекодировать каждую строку в нужную кодировку &#8211; не прокатило. Строки либо бьются еще хуже, либо вообще отваливаются. Ответ подсказал товарищ &#8211; перекодировать уже готовый результат. Собственно предпосленяя строка этим и занимается.</p>
<p>Так-же у этого подхода есть один огромный минус &#8211; он легко вам может сгенерировать не валидный документ. Тоесть, если вы пользуетесь библиотекой для работы с XML  и строите документ с его помощью &#8211; он не даст вам сделать что то не по стандарту. В случае шаблонов &#8211; вся ответственность за результат остается на программисте который писал шаблон.</p>
<p><em>Понимаю что тема очень простая, но вдруг кому-то сможет пригодится.</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zxmd.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zxmd.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zxmd.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zxmd.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zxmd.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zxmd.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zxmd.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zxmd.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zxmd.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zxmd.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zxmd.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zxmd.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zxmd.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zxmd.wordpress.com/292/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=292&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zxmd.wordpress.com/2011/07/13/xml_from_templates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/f64b0a6055d54cb55b5efe288bcf91fe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zxmd</media:title>
		</media:content>
	</item>
		<item>
		<title>Генератор промежутков дат</title>
		<link>http://zxmd.wordpress.com/2011/07/04/dates-range-generator/</link>
		<comments>http://zxmd.wordpress.com/2011/07/04/dates-range-generator/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 18:44:32 +0000</pubDate>
		<dc:creator>zxmd</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[dates]]></category>
		<category><![CDATA[dates generator]]></category>
		<category><![CDATA[промежутки дат]]></category>
		<category><![CDATA[ranges]]></category>
		<category><![CDATA[yield]]></category>

		<guid isPermaLink="false">http://zxmd.wordpress.com/?p=283</guid>
		<description><![CDATA[Все кто, когда либо, сталкивались с обработкой статистики, наверняка решали проблему генерации промежутков дат от одной даты до другой. Вот и я озаботился такой, писать было лень (да и зачем если гугол и так все знает), поэтому нашел и немного допилил чужое: import datetime def daterange(start, stop, step=datetime.timedelta(days=1), inclusive=True): # inclusive=False to behave like range [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=283&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Все кто, когда либо, сталкивались с обработкой статистики, наверняка решали проблему генерации промежутков дат от одной даты до другой. Вот и я озаботился такой, писать было лень (да и зачем если гугол и так все знает), поэтому нашел и немного допилил чужое:</p>
<p><span class="Apple-style-span" style="font-family:Consolas, Monaco, monospace;font-size:12px;line-height:18px;white-space:pre;"><span style="color:#800000;font-weight:bold;">import</span> datetime</span></p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#800000;font-weight:bold;">def</span> daterange<span style="color:#808030;">(</span>start<span style="color:#808030;">,</span> stop<span style="color:#808030;">,</span> step<span style="color:#808030;">=</span>datetime<span style="color:#808030;">.</span>timedelta<span style="color:#808030;">(</span>days<span style="color:#808030;">=</span><span style="color:#008c00;">1</span><span style="color:#808030;">)</span><span style="color:#808030;">,</span> inclusive<span style="color:#808030;">=</span><span style="color:#e34adc;">True</span><span style="color:#808030;">)</span><span style="color:#808030;">:</span>
    <span style="color:#696969;"># inclusive=False to behave like range by default</span>
    <span style="color:#800000;font-weight:bold;">if</span> step<span style="color:#808030;">.</span>days <span style="color:#808030;">&gt;</span> <span style="color:#008c00;">0</span><span style="color:#808030;">:</span>
        <span style="color:#800000;font-weight:bold;">while</span> start <span style="color:#808030;">&lt;</span> stop<span style="color:#808030;">:</span>
            <span style="color:#800000;font-weight:bold;">yield</span> start
            start <span style="color:#808030;">=</span> start <span style="color:#808030;">+</span> step
    <span style="color:#800000;font-weight:bold;">elif</span> step<span style="color:#808030;">.</span>days <span style="color:#808030;">&lt;</span> <span style="color:#008c00;">0</span><span style="color:#808030;">:</span>
        <span style="color:#800000;font-weight:bold;">while</span> start <span style="color:#808030;">&gt;</span> stop<span style="color:#808030;">:</span>
            <span style="color:#800000;font-weight:bold;">yield</span> start
            start <span style="color:#808030;">=</span> start <span style="color:#808030;">+</span> step
    <span style="color:#800000;font-weight:bold;">if</span> inclusive <span style="color:#800000;font-weight:bold;">and</span> start <span style="color:#808030;">=</span><span style="color:#808030;">=</span> stop<span style="color:#808030;">:</span>
        <span style="color:#800000;font-weight:bold;">yield</span> start</pre>
<p>Как юзать ? Вот например так:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#800000;font-weight:bold;">from</span> datetime <span style="color:#800000;font-weight:bold;">import</span> timedelta<span style="color:#808030;">,</span>date

end_date   <span style="color:#808030;">=</span> date<span style="color:#808030;">.</span>toady<span style="color:#808030;">(</span><span style="color:#808030;">)</span>
start_date <span style="color:#808030;">=</span> date<span style="color:#808030;">.</span>today<span style="color:#808030;">(</span><span style="color:#808030;">)</span><span style="color:#808030;">-</span>timedelta<span style="color:#808030;">(</span>days<span style="color:#808030;">=</span><span style="color:#008c00;">365</span><span style="color:#808030;">)</span>
dates <span style="color:#808030;">=</span> <span style="color:#808030;">[</span>x <span style="color:#800000;font-weight:bold;">for</span> x <span style="color:#800000;font-weight:bold;">in</span> daterange<span style="color:#808030;">(</span>start_date<span style="color:#808030;">,</span>
                              end_date<span style="color:#808030;">,</span>
                              step<span style="color:#808030;">=</span>timedelta<span style="color:#808030;">(</span>weeks<span style="color:#808030;">=</span><span style="color:#008c00;">1</span><span style="color:#808030;">)</span><span style="color:#808030;">,</span>
                              inclusive<span style="color:#808030;">=</span><span style="color:#e34adc;">True</span><span style="color:#808030;">)</span><span style="color:#808030;">]</span></pre>
<p>Надеюсь, что кому либо пригодится.</p>
<p>PS: Автор изначального генератора: Roger Pate с ресурса <a href="http://stackoverflow.com" target="_blank">stackoverflow.com</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zxmd.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zxmd.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/zxmd.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/zxmd.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/zxmd.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/zxmd.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/zxmd.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/zxmd.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/zxmd.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/zxmd.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/zxmd.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/zxmd.wordpress.com/283/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/zxmd.wordpress.com/283/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/zxmd.wordpress.com/283/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=zxmd.wordpress.com&amp;blog=17054658&amp;post=283&amp;subd=zxmd&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://zxmd.wordpress.com/2011/07/04/dates-range-generator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<georss:point>0.000000 0.000000</georss:point>
		<geo:lat>0.000000</geo:lat>
		<geo:long>0.000000</geo:long>
		<media:content url="http://1.gravatar.com/avatar/f64b0a6055d54cb55b5efe288bcf91fe?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zxmd</media:title>
		</media:content>
	</item>
	</channel>
</rss>
