<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="text">vlan</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/tumblr/vlan" /><updated>1970-01-01T00:00:00+00:00</updated><generator>Tumblr (3.0; @vlan)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/tumblr/vlan" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="tumblr/vlan" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" /><entry><title type="text">Мой блог переехал на http://blog.pirx.ru/</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/3200588256" /><category term="meta" /><updated>2011-02-09T09:30:00-08:00</updated><id>http://vlan.tumblr.com/post/3200588256</id><content type="html">&lt;p&gt;Мой блог переехал в мой домен: &lt;strong&gt;&lt;a href="http://blog.pirx.ru/"&gt;&lt;a href="http://blog.pirx.ru/"&gt;http://blog.pirx.ru/&lt;/a&gt;&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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/jmob8AEkC1Q" height="1" width="1"/&gt;</content></entry><entry><title type="text">м. Обводный канал</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/2628643701" /><category term="saint-petersburg" /><category term="subway" /><category term="architecture" /><updated>2011-01-06T12:17:34-08:00</updated><id>http://vlan.tumblr.com/post/2628643701</id><content type="html">&lt;img src="http://26.media.tumblr.com/tumblr_lemk6oZPhQ1qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;м. Обводный канал&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/rf6vAYti6oY" height="1" width="1"/&gt;</content></entry><entry><title type="text">Photo</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/2456528788" /><category term="suprematism" /><updated>2010-12-25T02:11:30-08:00</updated><id>http://vlan.tumblr.com/post/2456528788</id><content type="html">&lt;img src="http://30.media.tumblr.com/tumblr_ldzaz6MupW1qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/V9rQmwvUywc" height="1" width="1"/&gt;</content></entry><entry><title type="text">Author: MarcoB. Licensed under the terms of a Creative Commons...</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/1985163227" /><category term="winter" /><category term="nature" /><category term="snow" /><category term="finland" /><updated>2010-11-30T02:32:00-08:00</updated><id>http://vlan.tumblr.com/post/1985163227</id><content type="html">&lt;img src="http://25.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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/w6MAFU5Za-Y" height="1" width="1"/&gt;</content></entry><entry><title type="text">Моноид в категории эндофункторов</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/1667447864" /><category term="math" /><category term="monad" /><category term="monoid" /><category term="fp" /><category term="haskell" /><updated>2010-11-23T23:27:00-08:00</updated><id>http://vlan.tumblr.com/post/1667447864</id><content type="html">&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 = &lt; T, η, μ &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 &lt;…&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
  &lt;…&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 &lt;…&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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/gK0eXPg3ZWA" height="1" width="1"/&gt;</content></entry><entry><title type="text">Author: mwri. Licensed under the terms of a Creative Commons...</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/1120882462" /><category term="nature" /><category term="finland" /><category term="berry" /><updated>2010-09-14T06:18:00-07:00</updated><id>http://vlan.tumblr.com/post/1120882462</id><content type="html">&lt;img src="http://26.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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/djHhjCAAafQ" height="1" width="1"/&gt;</content></entry><entry><title type="text">Разбор аргументов командной строки в opster</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/1103301252" /><category term="python" /><category term="opster" /><category term="programming" /><updated>2010-09-11T09:09:00-07:00</updated><id>http://vlan.tumblr.com/post/1103301252</id><content type="html">&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 -&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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/QSS7yJwOx4k" height="1" width="1"/&gt;</content></entry><entry><title type="text">Жилой дом и ресторан. 1920-е. Приозерск, Ленинградская область....</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/1074450890" /><category term="architecture" /><category term="russia" /><category term="functionalism" /><updated>2010-09-06T01:38:01-07:00</updated><id>http://vlan.tumblr.com/post/1074450890</id><content type="html">&lt;img src="http://27.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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/xylpXJTTr9o" height="1" width="1"/&gt;</content></entry><entry><title type="text">Популярные лекции Фейнмана по квантовой механике</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/1057834739" /><category term="physics" /><category term="lecture" /><category term="video" /><updated>2010-09-03T03:11:21-07:00</updated><id>http://vlan.tumblr.com/post/1057834739</id><content type="html">&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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/3_tnhaxJ1Mk" height="1" width="1"/&gt;</content></entry><entry><title type="text">"f x = x. I don’t do very much but at least I’m unique."</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/1048067586" /><category term="programming" /><category term="fp" /><updated>2010-09-01T07:38:40-07:00</updated><id>http://vlan.tumblr.com/post/1048067586</id><content type="html">“&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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/WyXf8KIGHGg" height="1" width="1"/&gt;</content></entry><entry><title type="text">Правила краткого кода</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/1042823935" /><category term="programming" /><category term="fp" /><updated>2010-08-31T08:35:32-07:00</updated><id>http://vlan.tumblr.com/post/1042823935</id><content type="html">&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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/gbi9koHQ0P8" height="1" width="1"/&gt;</content></entry><entry><title type="text">Водонапорная башня. 1920-е. Сортавала, Карелия....</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/1031316484" /><category term="architecture" /><category term="sortavala" /><category term="karelia" /><category term="russia" /><category term="functionalism" /><updated>2010-08-29T08:06:00-07:00</updated><id>http://vlan.tumblr.com/post/1031316484</id><content type="html">&lt;img src="http://24.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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/LJpOtHCGZlw" height="1" width="1"/&gt;</content></entry><entry><title type="text">"I admire people who understand complicated programs or whatever. But I’m not that into tunes..."</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/1026870837" /><category term="music" /><category term="dubstep" /><updated>2010-08-28T13:28:00-07:00</updated><id>http://vlan.tumblr.com/post/1026870837</id><content type="html">“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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/SlsPNDvK2Ws" height="1" width="1"/&gt;</content></entry><entry><title type="text">xkcd #571: Can’t Sleep</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/856967393" /><category term="xkcd" /><category term="comics" /><updated>2010-07-25T07:08:51-07:00</updated><id>http://vlan.tumblr.com/post/856967393</id><content type="html">&lt;img src="http://25.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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/Xi7Hfg3iE2Y" height="1" width="1"/&gt;</content></entry><entry><title type="text">Вид со стены крепости Копорье на Финский залив. Автор: Андрей...</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/768365909" /><category term="russia" /><category term="nature" /><category term="fortress" /><updated>2010-07-04T00:16:00-07:00</updated><id>http://vlan.tumblr.com/post/768365909</id><content type="html">&lt;img src="http://29.media.tumblr.com/tumblr_l50uupJqgC1qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Вид со стены крепости Копорье на Финский залив. Автор: Андрей Власовских.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/axinghYGVOs" height="1" width="1"/&gt;</content></entry><entry><title type="text">Author: Incubos. Licensed under the terms of a Creative Commons...</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/631963551" /><category term="nature" /><category term="russia" /><updated>2010-05-25T12:09:34-07:00</updated><id>http://vlan.tumblr.com/post/631963551</id><content type="html">&lt;img src="http://25.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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/9mzYz909yVo" height="1" width="1"/&gt;</content></entry><entry><title type="text">Отчёт о DevConf</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/627808604" /><category term="devconf-ru" /><category term="python" /><category term="programming" /><category term="msk" /><updated>2010-05-24T03:08:38-07:00</updated><id>http://vlan.tumblr.com/post/627808604</id><content type="html">&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(...) -&gt; Iterable(etree.Element):
    'Вернуть итератор по XML-документам всех записей в БД.'
    return (to_xml_etree(e) for e in get_db_entries(...))

def dump_entries(entries: Iterable(etree.Element)) -&gt; Iterable(str):
    'Вернуть сериализованный поток записей.'
    return itertools.chain(['&lt;feed&gt;'],
                           (etree.tostring(e) for e in entries),
                           ['&lt;/feed&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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/uuYIadNIZeA" height="1" width="1"/&gt;</content></entry><entry><title type="text">Author: Suomi2005. Licensed under the terms of a Creative...</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/619773713" /><category term="finland" /><category term="spring" /><category term="nature" /><updated>2010-05-21T11:32:56-07:00</updated><id>http://vlan.tumblr.com/post/619773713</id><content type="html">&lt;img src="http://27.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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/DyKSvD14oDs" height="1" width="1"/&gt;</content></entry><entry><title type="text">Интервью со мной перед DevConf</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/589612833" /><category term="funcparserlib" /><category term="fp" /><category term="devconf-ru" /><category term="programming" /><category term="python" /><updated>2010-05-11T06:52:00-07:00</updated><id>http://vlan.tumblr.com/post/589612833</id><content type="html">&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;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/lAqt44Elw4Q" height="1" width="1"/&gt;</content></entry><entry><title type="text">Супрематизм на улицах Петербурга. Автор неизвестен. Фото: Андрей...</title><link rel="alternate" type="text/html" href="http://vlan.tumblr.com/post/558810807" /><category term="suprematism" /><category term="art" /><category term="spb" /><updated>2010-04-29T10:29:37-07:00</updated><id>http://vlan.tumblr.com/post/558810807</id><content type="html">&lt;img src="http://30.media.tumblr.com/tumblr_l1nf5lfUW51qau3ypo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Супрематизм на улицах Петербурга. Автор неизвестен. Фото: Андрей Власовских. Можно встретить искусство в неожиданных местах. Например, в подземном переходе у вокзала.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/tumblr/vlan/~4/eFS4Hz2pUP4" height="1" width="1"/&gt;</content></entry></feed>

