<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description> 




</description><title>vlan</title><generator>Tumblr (3.0; @vlan)</generator><link>http://vlan.tumblr.com/</link><item><title>Мой блог переехал на http://blog.pirx.ru/</title><description>&lt;p&gt;Мой блог переехал в мой домен: &lt;strong&gt;&lt;a href="http://blog.pirx.ru/"&gt;http://blog.pirx.ru/&lt;/a&gt;&lt;/strong&gt;. Теперь он статически генерируемый, так что я смогу вводить новые вещи или оформление по желанию.&lt;/p&gt;

&lt;p&gt;В новом блоге будут материалы двух видов:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Красивые фотографии (северная природа, искусство)&lt;/li&gt;
&lt;li&gt;Заметки по разработке ПО и технологиям&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Пожалуйста, подпишитесь на новую &lt;strong&gt;&lt;a href="http://blog.pirx.ru/feed.atom"&gt;новостную ленту&lt;/a&gt;&lt;/strong&gt;!&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/3200588256</link><guid>http://vlan.tumblr.com/post/3200588256</guid><pubDate>Wed, 09 Feb 2011 20:30:00 +0300</pubDate><category>meta</category></item><item><title>м. Обводный канал</title><description>&lt;img src="http://36.media.tumblr.com/tumblr_lemk6oZPhQ1qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;м. Обводный канал&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/2628643701</link><guid>http://vlan.tumblr.com/post/2628643701</guid><pubDate>Thu, 06 Jan 2011 23:17:34 +0300</pubDate><category>saint-petersburg</category><category>subway</category><category>architecture</category></item><item><title>Photo</title><description>&lt;img src="http://40.media.tumblr.com/tumblr_ldzaz6MupW1qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;</description><link>http://vlan.tumblr.com/post/2456528788</link><guid>http://vlan.tumblr.com/post/2456528788</guid><pubDate>Sat, 25 Dec 2010 13:11:30 +0300</pubDate><category>suprematism</category></item><item><title>Author: MarcoB. Licensed under the terms of a Creative Commons...</title><description>&lt;img src="http://36.media.tumblr.com/tumblr_lcp1atawZ11qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Author: &lt;a href="http://www.flickr.com/photos/landroval/4403957761/"&gt;MarcoB&lt;/a&gt;. Licensed under the terms of a &lt;a href="http://creativecommons.org/licenses/by-nc/2.0/"&gt;Creative Commons&lt;/a&gt; License.&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/1985163227</link><guid>http://vlan.tumblr.com/post/1985163227</guid><pubDate>Tue, 30 Nov 2010 13:32:00 +0300</pubDate><category>winter</category><category>nature</category><category>snow</category><category>finland</category></item><item><title>Моноид в категории эндофункторов</title><description>&lt;p&gt;Монада является моноидом, если заменить декартово произведение множеств
композицией функторов (монада является функтором), умножение — функцией &lt;code&gt;join&lt;/code&gt;,
а единицу — &lt;code&gt;pure&lt;/code&gt;. Законы моноида при этом выполняются.&lt;/p&gt;

&lt;p&gt;Mac Lane S. &lt;em&gt;Categories for the Working Mathematician&lt;/em&gt;. — Springer, 1998:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A monad &lt;em&gt;T = \&amp;lt; T, η, μ &amp;gt;&lt;/em&gt; in a category &lt;em&gt;X&lt;/em&gt; consists of a functor &lt;em&gt;T: X → X&lt;/em&gt; and
  two natural transformations &lt;em&gt;η: I_X → T&lt;/em&gt;, &lt;em&gt;μ: T^2 → T&lt;/em&gt;,
  which make the following diagrams commute &amp;lt;&amp;hellip;&amp;gt;&lt;sup&gt;*&lt;/sup&gt;.&lt;/p&gt;
  
  &lt;p&gt;Formally, the definition of a monad is like that of a monoid &lt;em&gt;M&lt;/em&gt; in sets
  &amp;lt;&amp;hellip;&amp;gt;.  The set &lt;em&gt;M&lt;/em&gt; of elements of the monoid is replaced by the endofunctor
  &lt;em&gt;T: X → X&lt;/em&gt;, while the cartesian product &lt;em&gt;⨯&lt;/em&gt; of two sets is replaced by
  composite of two functors, the binary operation &lt;em&gt;μ: M ⨯ M → M&lt;/em&gt; of
  multiplication by the transformation &lt;em&gt;μ: T^2 → T&lt;/em&gt; and the unit
  (identity) element &lt;em&gt;η: 1 → M&lt;/em&gt; by &lt;em&gt;η: I_X → T&lt;/em&gt;. We shall thus call
  &lt;em&gt;η&lt;/em&gt; the &lt;em&gt;unit&lt;/em&gt; and &lt;em&gt;μ&lt;/em&gt; the &lt;em&gt;multiplication&lt;/em&gt; of the monad &lt;em&gt;T&lt;/em&gt;; the first
  commutative diagram &amp;lt;&amp;hellip;&amp;gt; is then the &lt;em&gt;associative&lt;/em&gt; law for the monad, while
  the second and third diagrams express the left and right &lt;em&gt;unit laws&lt;/em&gt;,
  respectively. All told, a monad in &lt;em&gt;X&lt;/em&gt; is just a monoid in the category of
  endofunctors of &lt;em&gt;X&lt;/em&gt;, with product &lt;em&gt;⨯&lt;/em&gt; replaced by composition of endofunctors
  and unit set by the identity endofunctor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;sup&gt;*&lt;/sup&gt; Диаграммы, на которые ссылается текст, описывают известные законы монад.&lt;/p&gt;

&lt;p&gt;Свяжем это с монадами в Haskell. &lt;em&gt;T&lt;/em&gt; — это &lt;code&gt;Monad m ⇒ m a&lt;/code&gt;, &lt;em&gt;η&lt;/em&gt; — это &lt;code&gt;pure ::
Monad m ⇒ a → m a&lt;/code&gt;, а &lt;em&gt;μ&lt;/em&gt; — &lt;code&gt;join :: Monad m ⇒ m (m a) → m a&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Напомню, что эта категория называется &lt;strong&gt;Hask&lt;/strong&gt;. В ней объектами являются типы
Haskell, а морфизмами — функции. Композиция морфизмов — это &lt;code&gt;(.)&lt;/code&gt;, единичный
морфизм — &lt;code&gt;id&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Функторы Haskell &lt;code&gt;Functor&lt;/code&gt; являются функторами из &lt;strong&gt;Hask&lt;/strong&gt; в подкатегорию
&lt;strong&gt;Hask&lt;/strong&gt;, состоящую из типов, образованных приписыванием конструктора. То есть
типу &lt;code&gt;a&lt;/code&gt; ставится в соответствие тип &lt;code&gt;m a&lt;/code&gt;, а функции &lt;code&gt;a → b&lt;/code&gt; — функция &lt;code&gt;m a → m
b&lt;/code&gt;.&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/1667447864</link><guid>http://vlan.tumblr.com/post/1667447864</guid><pubDate>Wed, 24 Nov 2010 10:27:00 +0300</pubDate><category>math</category><category>monad</category><category>monoid</category><category>fp</category><category>haskell</category></item><item><title>Author: mwri. Licensed under the terms of a Creative Commons...</title><description>&lt;img src="http://36.media.tumblr.com/tumblr_l8qnnnQb011qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Author: &lt;a href="http://www.flickr.com/photos/karviainen/193862775/"&gt;mwri&lt;/a&gt;. Licensed under the terms of a &lt;a href="http://creativecommons.org/licenses/by/2.0/"&gt;Creative Commons&lt;/a&gt; License.&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/1120882462</link><guid>http://vlan.tumblr.com/post/1120882462</guid><pubDate>Tue, 14 Sep 2010 17:18:00 +0400</pubDate><category>nature</category><category>finland</category><category>berry</category></item><item><title>Разбор аргументов командной строки в opster</title><description>&lt;p&gt;Попробовал библиотеку @&lt;a href="http://twitter.com/asolovyov"&gt;asolovyov&lt;/a&gt; для разбора аргументов командной строки в
Python, которая называется &lt;a href="http://pypi.python.org/pypi/opster"&gt;opster&lt;/a&gt; (вот &lt;a href="http://packages.python.org/opster/"&gt;доки&lt;/a&gt;, &lt;a href="http://hg.piranha.org.ua/opster/"&gt;исходники&lt;/a&gt;). Это ещё
одна библиотека, решающая те же задачи, что и стандартные &lt;code&gt;getopt&lt;/code&gt;, &lt;code&gt;optparse&lt;/code&gt; и
&lt;code&gt;argparse&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Впечатления приятные. Кода действительно надо писать меньше. Самая главная идея
— отделить код обработки опций от кода функции, которой они нужны как аргументы.
То есть если у меня есть функция:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def test(arg1, arg2, include=[], exclude=[], verbose=False):
    '''A test command.'''
    ...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;то для превращения её в утилиту командной строки мне не надо её менять, только
снабдить декоратором &lt;code&gt;@command&lt;/code&gt; или обернуть её в этот декоратор непосредственно
в &lt;code&gt;main&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@command(usage='%name [hIXv] arg1 arg2',
         options=[
             ('I', 'include', [], 'include names'),
             ('X', 'exclude', [], 'exclude names'),
             ('v', 'verbose', False, 'be more verbose')])
def test(arg1, arg2, include=[], exclude=[], verbose=False):
    '''A test command.'''
    ...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Получилось 5 строк. Этот же пример на &lt;code&gt;getopt&lt;/code&gt; занимает где-то 30 строк.&lt;/p&gt;

&lt;p&gt;Затем можно вызвать функцию, передав аргументы командной строки:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if __name__ == '__main__':
    test(argv=sys.argv[1:])
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;либо вызывать как обычную функцию:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;test('foo', 'bar', include=['path1', 'path2'], verbose=True)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;При этом у программы появится автоматическая справка по &lt;code&gt;-h&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ./test -h
test [hIXv] arg1 arg2

A test command.

options:

 -I --include  include names
 -X --exclude  exclude names
 -v --verbose  be more verbose
 -h --help     show help
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ещё несколько слов об особенностях. Есть поддержка подкоманд (в духе Mercurial,
Git). Нет обязательных опций, но это даже хорошо.  Какой смысл в обязательных
&lt;em&gt;опциях&lt;/em&gt;? Есть поддержка задания одной опции несколько раз (значений типа
&lt;code&gt;[str]&lt;/code&gt;), а также значений &lt;code&gt;bool&lt;/code&gt;, &lt;code&gt;str&lt;/code&gt;, &lt;code&gt;int&lt;/code&gt; и интересных значений &lt;code&gt;str -&amp;gt;
a&lt;/code&gt;, то есть функций по преобразованию значения во что угодно.&lt;/p&gt;

&lt;p&gt;Из минусов можно назвать не всегда корректную работу с Unicode, stack trace при
указании неверных значений опций вместо красивых сообщений об ошибках,
невозможность задать только короткое имя опции и ещё несколько мелочей.&lt;/p&gt;

&lt;p&gt;Библиотека &lt;code&gt;opster&lt;/code&gt; определённо заслуживает внимания.&lt;/p&gt;

&lt;p&gt;См. также:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://piranha.org.ua/en/2009/09/14/opster/"&gt;Original opster announcement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://vlan.tumblr.com/post/1103301252</link><guid>http://vlan.tumblr.com/post/1103301252</guid><pubDate>Sat, 11 Sep 2010 20:09:00 +0400</pubDate><category>python</category><category>opster</category><category>programming</category></item><item><title>Жилой дом и ресторан. 1920-е. Приозерск, Ленинградская область....</title><description>&lt;img src="http://41.media.tumblr.com/tumblr_l8anevX30Q1qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Жилой дом и ресторан. 1920-е. Приозерск, Ленинградская область. Функционализм.&lt;/p&gt;

&lt;p&gt;См. также &lt;a href="http://picasaweb.google.com/andrey.vlasovskikh/WcwUwE"&gt;другие здания&lt;/a&gt; в стиле функционализм в Приозерске.&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/1074450890</link><guid>http://vlan.tumblr.com/post/1074450890</guid><pubDate>Mon, 06 Sep 2010 12:38:01 +0400</pubDate><category>architecture</category><category>russia</category><category>functionalism</category></item><item><title>Популярные лекции Фейнмана по квантовой механике</title><description>&lt;p&gt;Рекомендую интересные лекции Фейнмана по квантовой механике, рассчитанные на широкий круг слушателей. В них он популярно объясняет основные понятия квантовой механики (точнее, её развития по состоянию на 1978 г.). Что интересно, он приводит много практических примеров, объясняет повседневные явления, причём делает это намного лучше, чем в сейчас в школах.&lt;/p&gt;

&lt;p&gt;Сейчас до сих пор в школах рассказывают про оптику, волновую теорию света, про квантово-волновой дуализм, в то время как в современной физике все свойства электромагнетизма объясняются квантовой теорией. Даже такие банальные вещи, как равенство угла падения и угла отражения света.&lt;/p&gt;

&lt;p&gt;Вот эти четыре лекции:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;a href="http://video.google.com/videoplay?docid=1501838765715417418"&gt;Photons: Corpuscules of Light&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://video.google.com/videoplay?docid=-5604842186235091737"&gt;Reflection and Quantum Behaviour&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://video.google.com/videoplay?docid=-2622437302869951111"&gt;Electrons and their Interactions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://video.google.com/videoplay?docid=-366187591938740087"&gt;New Queries&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description><link>http://vlan.tumblr.com/post/1057834739</link><guid>http://vlan.tumblr.com/post/1057834739</guid><pubDate>Fri, 03 Sep 2010 14:11:21 +0400</pubDate><category>physics</category><category>lecture</category><category>video</category></item><item><title>"f x = x. I don’t do very much but at least I’m unique."</title><description>“&lt;code&gt;f x = x&lt;/code&gt;. I don’t do very much but at least I’m unique.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;James Chapman (via &lt;a href="http://annayudi.tumblr.com/" class="tumblr_blog"&gt;annayudi&lt;/a&gt;)&lt;/em&gt;</description><link>http://vlan.tumblr.com/post/1048067586</link><guid>http://vlan.tumblr.com/post/1048067586</guid><pubDate>Wed, 01 Sep 2010 18:38:40 +0400</pubDate><category>programming</category><category>fp</category></item><item><title>Правила краткого кода</title><description>&lt;p&gt;Есть известные правила программирования в Unix. Мы решили обратить внимание на схожие правила, помогающие создавать краткий программный код:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Код должен быть читаемым текстом, но не на естественном языке&lt;/li&gt;
&lt;li&gt;Абстракции должны браться из спеки, а не из воздуха&lt;/li&gt;
&lt;li&gt;Плохо абстрагировать пост-фактум повторяющиеся куски&lt;/li&gt;
&lt;li&gt;Много строк — плохо, но много обозначений — тоже плохо&lt;/li&gt;
&lt;li&gt;Зло кроется в особых случаях&lt;/li&gt;
&lt;li&gt;Нужно локализовывать оптимизации любого уровня&lt;/li&gt;
&lt;li&gt;Не знаешь точно, пригодится ли код, — не пиши&lt;/li&gt;
&lt;/ol&gt;</description><link>http://vlan.tumblr.com/post/1042823935</link><guid>http://vlan.tumblr.com/post/1042823935</guid><pubDate>Tue, 31 Aug 2010 19:35:32 +0400</pubDate><category>programming</category><category>fp</category></item><item><title>Водонапорная башня. 1920-е. Сортавала, Карелия....</title><description>&lt;img src="http://41.media.tumblr.com/tumblr_l7x5wyqgLC1qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Водонапорная башня. 1920-е. Сортавала, Карелия. Функционализм.&lt;/p&gt;

&lt;p&gt;См. также &lt;a href="http://picasaweb.google.com/andrey.vlasovskikh/qDsXnE"&gt;другие здания&lt;/a&gt; в стиле функционализм в Сортавале.&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/1031316484</link><guid>http://vlan.tumblr.com/post/1031316484</guid><pubDate>Sun, 29 Aug 2010 19:06:00 +0400</pubDate><category>architecture</category><category>sortavala</category><category>karelia</category><category>russia</category><category>functionalism</category></item><item><title>"I admire people who understand complicated programs or whatever. But I’m not that into tunes..."</title><description>“I admire people who understand complicated programs or whatever. But I’m not that into tunes that are so sequenced that all you can hear is the perfect grid, even on the echoes. With those kind of tunes, sometimes I just hear Tetris music, I always know where I am in the tune so I can’t get lost in it, no rough edges in some tunes even when they try hard to sound rough. I want to learn one day how to make tunes properly, but I wanted to do a tribute to my rubbish, dying computer. It starts smoking sometimes and the screen flickers like a strobelight, it mashes your eyes. The tunes are made where they’re made, somewhere in my building, the roof or wherever, but not in some airtight studio. Loads of the album was made with the TV on. I wish I could make technical proper music one day but people who want technical music maybe won’t like my new tunes but its not for them.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;&lt;a href="http://hyperdubrecords.blogspot.com/2007/10/burial-untrue-november-2007.html"&gt;Burial&lt;/a&gt;&lt;/em&gt;</description><link>http://vlan.tumblr.com/post/1026870837</link><guid>http://vlan.tumblr.com/post/1026870837</guid><pubDate>Sun, 29 Aug 2010 00:28:00 +0400</pubDate><category>music</category><category>dubstep</category></item><item><title>xkcd #571: Can’t Sleep</title><description>&lt;img src="http://36.media.tumblr.com/tumblr_l649yrajAI1qau3ypo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://xkcd.com/571/"&gt;xkcd #571: Can’t Sleep&lt;/a&gt;&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/856967393</link><guid>http://vlan.tumblr.com/post/856967393</guid><pubDate>Sun, 25 Jul 2010 18:08:51 +0400</pubDate><category>xkcd</category><category>comics</category></item><item><title>Вид со стены крепости Копорье на Финский залив. Автор: Андрей...</title><description>&lt;img src="http://41.media.tumblr.com/tumblr_l50uupJqgC1qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Вид со стены крепости Копорье на Финский залив. Автор: Андрей Власовских.&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/768365909</link><guid>http://vlan.tumblr.com/post/768365909</guid><pubDate>Sun, 04 Jul 2010 11:16:00 +0400</pubDate><category>russia</category><category>nature</category><category>fortress</category></item><item><title>Author: Incubos. Licensed under the terms of a Creative Commons...</title><description>&lt;img src="http://36.media.tumblr.com/tumblr_l2zp4zqD5D1qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Author: &lt;a href="http://www.flickr.com/photos/incubos/2758537173"&gt;Incubos&lt;/a&gt;. Licensed under the terms of a &lt;a href="http://creativecommons.org/licenses/by-nc-nd/2.0/"&gt;Creative Commons&lt;/a&gt; License.&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/631963551</link><guid>http://vlan.tumblr.com/post/631963551</guid><pubDate>Tue, 25 May 2010 23:09:34 +0400</pubDate><category>nature</category><category>russia</category></item><item><title>Отчёт о DevConf</title><description>&lt;p&gt;2010-05-17 в Москве прошла &lt;a href="http://devconf.ru/"&gt;конференция DevConf&lt;/a&gt;. Я на ней выступал с
докладом &lt;a href="http://www.slideshare.net/vlasovskikh/devconf-ru-funcparserlib"&gt;Внешние языки DSL на funcparserlib&lt;/a&gt; (см. &lt;a href="http://devconf.ru/news/detail/54"&gt;интервью со мной&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Я хочу поделиться впечатлениями о потоке Python этой конференции. Я также собрал
немного ссылок по конференции, привожу их в конце поста.&lt;/p&gt;

&lt;p&gt;Мы ехали в Москву из Петербурга в компании с @&lt;a href="http://twitter.com/andreypopp"&gt;andreypopp&lt;/a&gt;, @&lt;a href="http://twitter.com/hdima"&gt;hdima&lt;/a&gt; и
@&lt;a href="http://twitter.com/dimasmz"&gt;dimasmz&lt;/a&gt;. Приехали вечером в воскресенье, остановились у @&lt;a href="http://twitter.com/barbuza"&gt;barbuza&lt;/a&gt;. Он с
@&lt;a href="http://twitter.com/_semenov_"&gt;&lt;em&gt;semenov&lt;/em&gt;&lt;/a&gt; и @&lt;a href="http://twitter.com/andreypopp"&gt;andreypopp&lt;/a&gt; продолжили готовить свои доклады, обсуждая при
этом Django. Мне, как и @&lt;a href="http://twitter.com/otkds"&gt;otkds&lt;/a&gt;, поэтому казалось, что выступление
@&lt;a href="http://twitter.com/barbuza"&gt;barbuza&lt;/a&gt; на конфе должно было быть более резким :)&lt;/p&gt;

&lt;p&gt;Мне, слава богу, проблемы Django были достаточно далеки. Мой доклад о
funcparserlib был готов за неделю до конфы и я мог просто повеселиться и
отдохнуть :)&lt;/p&gt;

&lt;p&gt;Организация конференции была на весьма среднем уровне. Не буду подробно на этом
останавливаться.&lt;/p&gt;

&lt;p&gt;Теперь о самих докладах. Многие темы докладов были интересными. Но сами доклады
отличались, к сожалению, значительной монотонностью. Так что когда я ниже
говорю, что доклад был интересный, я оставляю монотонность за скобками ;)&lt;/p&gt;

&lt;p&gt;@&lt;a href="http://twitter.com/andreypopp"&gt;andreypopp&lt;/a&gt; выступал с двумя докладами. Первый доклад о gevent был для меня
более интересным. Есть разные решения для IO-bound parallelism на Python. gevent
— одно из них. Я бы хотел узнать более подробно о том, насколько gevent
применима для actor-based concurrency. Разработчик одной из альтернатив, eventlet,
показал, как можно создавать акторов на основе его библиотеки. Про gevent пока
не ясно.  Хотелось бы ещё узнать подробнее о различиях между Stackless Python,
gevent и eventlet.&lt;/p&gt;

&lt;p&gt;Доклад Андрея Светлова про import hooks также затронул интересную тему. Я как
раз какое-то время назад жаловался, что &lt;a href="http://vlan.tumblr.com/post/382577216/languages-startup-performance"&gt;Python грузится слишком долго&lt;/a&gt;,
импортируя слишком много модулей при начальной загрузке. Так что узнать
подробнее о том, как работают механизмы импорта, было хорошей идеей. К
сожалению, Андрей включил в доклад слишком много деталей, из-за которых
потерялись ключевые моменты. Думаю, что доклад выполнил свою задачу в том
смысле, что теперь мне интересно почитать об импорте подробнее.&lt;/p&gt;

&lt;p&gt;Дальше были два более коротких доклада, один мой про funcparserlib и создание DSL
на Python и ещё один доклад @&lt;a href="http://twitter.com/intelliyole"&gt;intelliyole&lt;/a&gt; об IDE PyCharm для Python от
JetBrains. Про свой доклад я рассказывать не буду :) Про IDE лучше смотреть, чем
рассказывать. Для поклонников Eclipse, NetBeans и IntelliJ IDEA эта новая IDE
PyCharm наверняка будет хорошим выбором. Я использую vim, так что для меня это
не очень актуально.&lt;/p&gt;

&lt;p&gt;Александр Шигин рассказывал в своём докладе о Cython, расширении языка Python
для более удобного создания расширений на C для Python. Опять же интересная
вещь, но у меня до неё ещё не доходили руки. Я обычно взаимодействую с C из
Python при помощи Unix IPC: запуска процессов, обмена через неименованные
каналы, сокеты. Более тесная интеграция независимых программ — обычно плохая
идея. Когда это всё же нужно, то я использовал модуль стандартной библиотеки
ctypes для вызова функций на C из разделяемых библиотек. Cython — это ещё один
возможный вариант. Более того, если нужно ускорить код на Python, а не
взаимодействовать с кодом на C, то он, видимо, должен хорошо решать эту задачу.
Возможно, на нём можно намного быстрее делать различные рекурсивные обходы. На
Python это часто слишком медленно.&lt;/p&gt;

&lt;p&gt;@&lt;a href="http://twitter.com/isagalaev"&gt;isagalaev&lt;/a&gt; проводил мастер-класс, а не читал доклад. Его мастер-класс был
посвящён созданию библиотеки потоковой генерации XML. Было любопытно понаблюдать
за процессом создания библиотеки (опять же не принимая в расчёт монотонность
изложения). О чём хотелось бы услышать подробнее — об альтернативах разных
решений и о том, почему было выбрано то или иное решение.&lt;/p&gt;

&lt;p&gt;На мой взгляд, для подобных задач (генерация больших списков записей в XML)
лучше подошёл бы другой подход, очень частный, но простой. Нужен генератор
XML-деревьев отдельных небольших записей списка и функция сериализации этого
списка внутри тэгов-контейнеров. Так проще работать с XML, не надо везде
подстраивать свой код под потоковость. Только на уровне одного очень большого
списка тэгов. Вот на уровне псевдокода:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def get_entries(...) -&amp;gt; Iterable(etree.Element):
    'Вернуть итератор по XML-документам всех записей в БД.'
    return (to_xml_etree(e) for e in get_db_entries(...))

def dump_entries(entries: Iterable(etree.Element)) -&amp;gt; Iterable(str):
    'Вернуть сериализованный поток записей.'
    return itertools.chain(['&amp;lt;feed&amp;gt;'],
                           (etree.tostring(e) for e in entries),
                           ['&amp;lt;/feed&amp;gt;'])
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Второй доклад @&lt;a href="http://twitter.com/andreypopp"&gt;andreypopp&lt;/a&gt; был посвящён веб-фреймворку repoze.bfg. У меня
создалось впечатление, что это очередная Java. Проблемы, которые он решает,
выглядят надуманными, а решения — слишком unpythonic, в стиле Java. Может быть,
для каких-нибудь крупных enterprise приложений это и имеет смысл, но я вообще-то
сомневаюсь :) Simple is better than complex. Complex is better than complicated.
Фреймворк repoze.bfg показался как раз complicated. Если нельзя даже объяснить
кратко, зачем нужны какие-то решения, значит вряд ли они по-настоящему нужны.&lt;/p&gt;

&lt;p&gt;Совместный доклад @&lt;a href="http://twitter.com/barbuza"&gt;barbuza&lt;/a&gt; и @&lt;a href="http://twitter.com/_semenov_"&gt;&lt;em&gt;semenov&lt;/em&gt;&lt;/a&gt; был о минусах Django, из-за
которых временами бывает очень неудобно с ней работать. Со многими из
перечисленных минусов я сталкивался сам, некоторые ещё не встречал. Доклад был
очень полезный. В некоторых областях, например в ORM, стоит явно посмотреть на
альтернативы Django. Одна из плохих вещей про Django, о которой упомянули
докладчики, это снижение среднего уровня программистов на Python. Сейчас многие
начинают использовать Django, даже не зная толком сам язык. Это грозит
сообществу PHP-культурой кодирования. С этой точки зрения Django — это зло.&lt;/p&gt;

&lt;p&gt;@&lt;a href="http://twitter.com/asolovyov"&gt;asolovyov&lt;/a&gt; рассказал как раз об одной из альтернатив Django, которую он
создаёт вместе с несколькими open-source разработчиками. Их фреймворк называется
Svarga. Команда у них очень маленькая и они уделяют проекту довольно мало
времени. Зато и кода там на порядок меньше, чем в Django. Надеюсь, меньше за
счёт лишнего и ненужного кода в Django :)&lt;/p&gt;

&lt;p&gt;Это вообще настоящая беда — раздувать код проектов. Это объясняется, как мне
кажется, неумением всех нас программировать. Насколько я знаю, ни в каком другом
виде деятельности не создаётся таких огромных текстов, как в программировании. С
этим точно надо что-то делать. Один из подходов к этой проблеме — &lt;a href="http://vpri.org/html/work/ifnct.htm"&gt;работы
Viewpoints Research Institute&lt;/a&gt;. У них есть несколько интересных публикаций и
видео докладов, стоит посмотреть.&lt;/p&gt;

&lt;p&gt;Вот такие доклады были в потоке Python. В перерывах между докладами удалось
немного пообщаться с друзьями-питонистами, познакомиться с новыми людьми и
увидеться с теми, с кем общался раньше только в Инете. @&lt;a href="http://twitter.com/otkds"&gt;otkds&lt;/a&gt; уже отмечал,
что общались достаточно дружно, во время обеда и по окончании конференции все
садились вместе, продолжали обсуждение.&lt;/p&gt;

&lt;p&gt;У меня получилось побывать только на первом дне конференции, вечером надо было
торопиться на поезд в Петербург. В целом впечатления от конференции
положительные. Спасибо всем, с кем удалось пообщаться и кого удалось послушать
:)&lt;/p&gt;

&lt;p&gt;Ниже приведено несколько собранных мной ссылок по потоку Python.&lt;/p&gt;

&lt;p&gt;Фотки:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;@&lt;a href="http://twitter.com/riffm"&gt;riffm&lt;/a&gt;: &lt;a href="http://fotki.yandex.ru/users/riffm/album/97237/"&gt;Альбом devconf_ru 2010&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;@&lt;a href="http://twitter.com/barbuza"&gt;barbuza&lt;/a&gt;: &lt;a href="http://yfrog.com/4jvjsj"&gt;#devconf_ru начало @andreypopp @dimasmz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;@&lt;a href="http://twitter.com/hdima"&gt;hdima&lt;/a&gt;: &lt;a href="http://twitpic.com/1og9uv"&gt;@andreypopp и котэ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;@&lt;a href="http://twitter.com/sharifulin"&gt;sharifulin&lt;/a&gt;: &lt;a href="http://twitpic.com/1ok6gp"&gt;Питонисты на #devconf_ru&lt;/a&gt; (участник задаёт
@&lt;a href="http://twitter.com/vlasovskikh"&gt;vlasovskikh&lt;/a&gt; вопрос)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Отчёты:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;@&lt;a href="http://twitter.com/otkds"&gt;otkds&lt;/a&gt;: &lt;a href="http://otkds.blogspot.com/2010/05/devconfpython.html"&gt;Впечатления от DevConf::Python()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Другое:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="http://devconf.ru/python/page/programm/"&gt;Программа и слайды потока Python на DevConf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;@&lt;a href="http://twitter.com/wackum"&gt;wackum&lt;/a&gt;: &lt;a href="http://dl.dropbox.com/u/932007/devconf.jpg"&gt;Краткое содержание DevConv::Python()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://vlan.tumblr.com/post/627808604</link><guid>http://vlan.tumblr.com/post/627808604</guid><pubDate>Mon, 24 May 2010 14:08:38 +0400</pubDate><category>devconf-ru</category><category>python</category><category>programming</category><category>msk</category></item><item><title>Author: Suomi2005. Licensed under the terms of a Creative...</title><description>&lt;img src="http://41.media.tumblr.com/tumblr_l2s8ucUz7n1qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Author: &lt;a href="http://www.flickr.com/photos/suomi2005/3494171467/"&gt;Suomi2005&lt;/a&gt;. Licensed under the terms of a &lt;a href="http://creativecommons.org/licenses/by-nc-sa/2.0/"&gt;Creative Commons&lt;/a&gt; License.&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/619773713</link><guid>http://vlan.tumblr.com/post/619773713</guid><pubDate>Fri, 21 May 2010 22:32:56 +0400</pubDate><category>finland</category><category>spring</category><category>nature</category></item><item><title>Интервью со мной перед DevConf</title><description>&lt;p&gt;Я выступлю с &lt;a href="http://devconf.ru/python/offers/96"&gt;докладом&lt;/a&gt; об использовании внешних языков DSL и моей библиотеке &lt;a href="http://code.google.com/p/funcparserlib/"&gt;funcparserlib&lt;/a&gt; на &lt;a href="http://devconf.ru/"&gt;DevConf&lt;/a&gt; в секции Python. Конференция пройдёт в Москве 2010-05-17.&lt;/p&gt;

&lt;p&gt;Перед конференцией организаторы взяли у меня &lt;a href="http://devconf.ru/news/detail/54"&gt;небольшое интервью&lt;/a&gt;. В нём я упоминаю мои текущие проекты, рассказываю о теме предстоящего доклада.&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/589612833</link><guid>http://vlan.tumblr.com/post/589612833</guid><pubDate>Tue, 11 May 2010 17:52:00 +0400</pubDate><category>funcparserlib</category><category>fp</category><category>devconf-ru</category><category>programming</category><category>python</category></item><item><title>Супрематизм на улицах Петербурга. Автор неизвестен. Фото: Андрей...</title><description>&lt;img src="http://40.media.tumblr.com/tumblr_l1nf5lfUW51qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Супрематизм на улицах Петербурга. Автор неизвестен. Фото: Андрей Власовских. Можно встретить искусство в неожиданных местах. Например, в подземном переходе у вокзала.&lt;/p&gt;</description><link>http://vlan.tumblr.com/post/558810807</link><guid>http://vlan.tumblr.com/post/558810807</guid><pubDate>Thu, 29 Apr 2010 21:29:37 +0400</pubDate><category>suprematism</category><category>art</category><category>spb</category></item></channel></rss>
