2010-05-17 в Москве прошла конференция DevConf. Я на ней выступал с докладом Внешние языки DSL на funcparserlib (см. интервью со мной).
Я хочу поделиться впечатлениями о потоке Python этой конференции. Я также собрал немного ссылок по конференции, привожу их в конце поста.
Мы ехали в Москву из Петербурга в компании с @andreypopp, @hdima и @dimasmz. Приехали вечером в воскресенье, остановились у @barbuza. Он с @semenov и @andreypopp продолжили готовить свои доклады, обсуждая при этом Django. Мне, как и @otkds, поэтому казалось, что выступление @barbuza на конфе должно было быть более резким :)
Мне, слава богу, проблемы Django были достаточно далеки. Мой доклад о funcparserlib был готов за неделю до конфы и я мог просто повеселиться и отдохнуть :)
Организация конференции была на весьма среднем уровне. Не буду подробно на этом останавливаться.
Теперь о самих докладах. Многие темы докладов были интересными. Но сами доклады отличались, к сожалению, значительной монотонностью. Так что когда я ниже говорю, что доклад был интересный, я оставляю монотонность за скобками ;)
@andreypopp выступал с двумя докладами. Первый доклад о gevent был для меня более интересным. Есть разные решения для IO-bound parallelism на Python. gevent — одно из них. Я бы хотел узнать более подробно о том, насколько gevent применима для actor-based concurrency. Разработчик одной из альтернатив, eventlet, показал, как можно создавать акторов на основе его библиотеки. Про gevent пока не ясно. Хотелось бы ещё узнать подробнее о различиях между Stackless Python, gevent и eventlet.
Доклад Андрея Светлова про import hooks также затронул интересную тему. Я как раз какое-то время назад жаловался, что Python грузится слишком долго, импортируя слишком много модулей при начальной загрузке. Так что узнать подробнее о том, как работают механизмы импорта, было хорошей идеей. К сожалению, Андрей включил в доклад слишком много деталей, из-за которых потерялись ключевые моменты. Думаю, что доклад выполнил свою задачу в том смысле, что теперь мне интересно почитать об импорте подробнее.
Дальше были два более коротких доклада, один мой про funcparserlib и создание DSL на Python и ещё один доклад @intelliyole об IDE PyCharm для Python от JetBrains. Про свой доклад я рассказывать не буду :) Про IDE лучше смотреть, чем рассказывать. Для поклонников Eclipse, NetBeans и IntelliJ IDEA эта новая IDE PyCharm наверняка будет хорошим выбором. Я использую vim, так что для меня это не очень актуально.
Александр Шигин рассказывал в своём докладе о Cython, расширении языка Python для более удобного создания расширений на C для Python. Опять же интересная вещь, но у меня до неё ещё не доходили руки. Я обычно взаимодействую с C из Python при помощи Unix IPC: запуска процессов, обмена через неименованные каналы, сокеты. Более тесная интеграция независимых программ — обычно плохая идея. Когда это всё же нужно, то я использовал модуль стандартной библиотеки ctypes для вызова функций на C из разделяемых библиотек. Cython — это ещё один возможный вариант. Более того, если нужно ускорить код на Python, а не взаимодействовать с кодом на C, то он, видимо, должен хорошо решать эту задачу. Возможно, на нём можно намного быстрее делать различные рекурсивные обходы. На Python это часто слишком медленно.
@isagalaev проводил мастер-класс, а не читал доклад. Его мастер-класс был посвящён созданию библиотеки потоковой генерации XML. Было любопытно понаблюдать за процессом создания библиотеки (опять же не принимая в расчёт монотонность изложения). О чём хотелось бы услышать подробнее — об альтернативах разных решений и о том, почему было выбрано то или иное решение.
На мой взгляд, для подобных задач (генерация больших списков записей в XML) лучше подошёл бы другой подход, очень частный, но простой. Нужен генератор XML-деревьев отдельных небольших записей списка и функция сериализации этого списка внутри тэгов-контейнеров. Так проще работать с XML, не надо везде подстраивать свой код под потоковость. Только на уровне одного очень большого списка тэгов. Вот на уровне псевдокода:
def get_entries(...) -> Iterable(etree.Element):
'Вернуть итератор по XML-документам всех записей в БД.'
return (to_xml_etree(e) for e in get_db_entries(...))
def dump_entries(entries: Iterable(etree.Element)) -> Iterable(str):
'Вернуть сериализованный поток записей.'
return itertools.chain(['<feed>'],
(etree.tostring(e) for e in entries),
['</feed>'])
Второй доклад @andreypopp был посвящён веб-фреймворку repoze.bfg. У меня создалось впечатление, что это очередная Java. Проблемы, которые он решает, выглядят надуманными, а решения — слишком unpythonic, в стиле Java. Может быть, для каких-нибудь крупных enterprise приложений это и имеет смысл, но я вообще-то сомневаюсь :) Simple is better than complex. Complex is better than complicated. Фреймворк repoze.bfg показался как раз complicated. Если нельзя даже объяснить кратко, зачем нужны какие-то решения, значит вряд ли они по-настоящему нужны.
Совместный доклад @barbuza и @semenov был о минусах Django, из-за которых временами бывает очень неудобно с ней работать. Со многими из перечисленных минусов я сталкивался сам, некоторые ещё не встречал. Доклад был очень полезный. В некоторых областях, например в ORM, стоит явно посмотреть на альтернативы Django. Одна из плохих вещей про Django, о которой упомянули докладчики, это снижение среднего уровня программистов на Python. Сейчас многие начинают использовать Django, даже не зная толком сам язык. Это грозит сообществу PHP-культурой кодирования. С этой точки зрения Django — это зло.
@asolovyov рассказал как раз об одной из альтернатив Django, которую он создаёт вместе с несколькими open-source разработчиками. Их фреймворк называется Svarga. Команда у них очень маленькая и они уделяют проекту довольно мало времени. Зато и кода там на порядок меньше, чем в Django. Надеюсь, меньше за счёт лишнего и ненужного кода в Django :)
Это вообще настоящая беда — раздувать код проектов. Это объясняется, как мне кажется, неумением всех нас программировать. Насколько я знаю, ни в каком другом виде деятельности не создаётся таких огромных текстов, как в программировании. С этим точно надо что-то делать. Один из подходов к этой проблеме — работы Viewpoints Research Institute. У них есть несколько интересных публикаций и видео докладов, стоит посмотреть.
Вот такие доклады были в потоке Python. В перерывах между докладами удалось немного пообщаться с друзьями-питонистами, познакомиться с новыми людьми и увидеться с теми, с кем общался раньше только в Инете. @otkds уже отмечал, что общались достаточно дружно, во время обеда и по окончании конференции все садились вместе, продолжали обсуждение.
У меня получилось побывать только на первом дне конференции, вечером надо было торопиться на поезд в Петербург. В целом впечатления от конференции положительные. Спасибо всем, с кем удалось пообщаться и кого удалось послушать :)
Ниже приведено несколько собранных мной ссылок по потоку Python.
Фотки:
Отчёты:
Другое: