February 2011
1 post
1 tag
Мой блог переехал на http://blog.pirx.ru/
Мой блог переехал в мой домен: http://blog.pirx.ru/. Теперь он статически генерируемый, так что я смогу вводить новые вещи или оформление по желанию.
В новом блоге будут материалы двух видов:
Красивые фотографии (северная природа, искусство)
Заметки по разработке ПО и технологиям
Пожалуйста, подпишитесь на новую новостную ленту!
January 2011
1 post
3 tags
December 2010
1 post
1 tag
November 2010
2 posts
4 tags
5 tags
Моноид в категории эндофункторов
Монада является моноидом, если заменить декартово произведение множеств
композицией функторов (монада является функтором), умножение — функцией join,
а единицу — pure. Законы моноида при этом выполняются.
Mac Lane S. Categories for the Working Mathematician. — Springer, 1998:
A monad T = < T, η, μ > in a category X consists of a functor T: X → X and
two natural transformations η:...
September 2010
5 posts
3 tags
3 tags
Разбор аргументов командной строки в opster
Попробовал библиотеку @asolovyov для разбора аргументов командной строки в
Python, которая называется opster (вот доки, исходники). Это ещё
одна библиотека, решающая те же задачи, что и стандартные getopt, optparse и
argparse.
Впечатления приятные. Кода действительно надо писать меньше. Самая главная идея
— отделить код обработки опций от кода функции, которой они нужны как аргументы.
То есть...
3 tags
3 tags
Популярные лекции Фейнмана по квантовой механике
Рекомендую интересные лекции Фейнмана по квантовой механике, рассчитанные на широкий круг слушателей. В них он популярно объясняет основные понятия квантовой механики (точнее, её развития по состоянию на 1978 г.). Что интересно, он приводит много практических примеров, объясняет повседневные явления, причём делает это намного лучше, чем в сейчас в школах.
Сейчас до сих пор в школах рассказывают...
2 tags
f x = x. I don’t do very much but at least I’m unique.
– James Chapman (via annayudi)
August 2010
3 posts
2 tags
Правила краткого кода
Есть известные правила программирования в Unix. Мы решили обратить внимание на схожие правила, помогающие создавать краткий программный код:
Код должен быть читаемым текстом, но не на естественном языке
Абстракции должны браться из спеки, а не из воздуха
Плохо абстрагировать пост-фактум повторяющиеся куски
Много строк — плохо, но много обозначений — тоже плохо
Зло кроется в особых случаях
...
5 tags
2 tags
I admire people who understand complicated programs or whatever. But I’m...
– Burial
July 2010
2 posts
2 tags
3 tags
May 2010
4 posts
2 tags
4 tags
Отчёт о DevConf
2010-05-17 в Москве прошла конференция DevConf. Я на ней выступал с
докладом Внешние языки DSL на funcparserlib (см. интервью со мной).
Я хочу поделиться впечатлениями о потоке Python этой конференции. Я также собрал
немного ссылок по конференции, привожу их в конце поста.
Мы ехали в Москву из Петербурга в компании с @andreypopp, @hdima и
@dimasmz. Приехали вечером в воскресенье, остановились...
3 tags
5 tags
Интервью со мной перед DevConf
Я выступлю с докладом об использовании внешних языков DSL и моей библиотеке funcparserlib на DevConf в секции Python. Конференция пройдёт в Москве 2010-05-17.
Перед конференцией организаторы взяли у меня небольшое интервью. В нём я упоминаю мои текущие проекты, рассказываю о теме предстоящего доклада.
April 2010
4 posts
3 tags
2 tags
Parallel vs Concurrent
Сейчас многие интересуются языками, поддерживающими несколько взаимодействующих
потоков управления (Erlang, Clojure, Go). В них зелёные нити используются, в
основном, для организации многозадачности (concurrency). В качестве моделей
многозадачности используются CSP или Actor model. То есть программа строится из
объектов-акторов, имеющих свою зелёную нить и обменивающихся сообщениями
(синхронно или...
2 tags
3 tags
Python Future Imports
Импортирование нововведений из модуля будущего __future__ — интересная
особенность языка Python. Языковые нововведения, которые появятся только в будущих
версиях, уже можно импортировать и использовать. Какие нововведения вы можете
использовать в вашей версии интерпретатора?
# -*- coding: utf-8 -*-
from __future__ import print_function, unicode_literals
import sys
def future_features():
...
March 2010
1 post
3 tags
February 2010
5 posts
3 tags
Интернет-радио в стиле Unix
Приятный интерфейс по HTTP к ресурсам Интернет-радиостанции
verdure_station. Можно в стиле Unix получать:
Список аудио-потоков
Аудио-поток радиовещания
Расписание эфира
Ссылку на аудио-поток можно получить через промежуточный ресурс со списком
доступных потоков в формате INI:
$ curl -s http://air.verdure.ru:8881/listen.pls
[playlist]
NumberOfEntries=1
File1=http://air.verdure.ru:8881/
Сам...
2 tags
5 tags
Скорость "Hello World" на разных языках
В Unix приветствуется создание небольших взаимодействующих программ, каждая из
которых решает одну задачу. В частности, именно за счёт процессов ОС решаются
проблемы параллелизации и многозадачности. Поэтому важно, чтобы программа
стартовала быстро и не выполняла того, о чём её не просит программист.
Недавно я заинтересовался языком Clojure, который исповедует монолитный
подход к параллельности....
3 tags
3 tags
January 2010
4 posts
3 tags
hg-git
hg-git — хорошее расширение Mercurial для работы с репозиториями Git. Оно
позволяет делать hg push и hg pull по схемам URL git и git+ssh. При этом
остальная работа с локальным репозиторием Mercurial ведётся как обычно.
Добавляются только закладки (Mercurial bookmarks) с ветками Git. Расширение
можно использовать для доступа к проектам на GitHub без необходимости
сползать на git(1).
Вообще...
1 tag
2 tags
4 tags
Критика Actor Thinking
Недавно натолкнулся на пост Actor Thinking об использовании акторов в стиле
Erlang для «естественной» реализации параллельности. В посте поясняются уже
знакомые слова Joe Armstrong об аналогии между акторами и объектами ООП.
Мне кажется, в этих рассуждениях в очередной раз допускается ошибка
классического объектно-ориентированного подхода, будто почти все задачи
естественно решать в стиле...
December 2009
18 posts
4 tags
1 tag
One of my most productive days was throwing away 1000 lines of code.
– Ken Thompson
4 tags
iterpipes 0.3
Я выпустил библиотеку iterpipes 0.3 для запуска конвейеров команд в Python
с использованием синтаксиса shell. С её помощью может стать удобнее писать
многие скрипты на Python, чем на bash.
Несколько дней назад я писал об автомонтировании накопителей USB в Linux. В том
посте был приведён простой скрипт на shell для определения текущего
пользователя:
#!/bin/bash
uids () {
users | tr " " "\n"...
4 tags
3 tags
2 tags
4 tags
1 tag
1000 баллов на Stack Overflow
Как-то незаметно перевалил за 1000 баллов на Stack Overflow:
3 tags
4 tags
Описание библиотеки для конвейеров команд в Python
Многие скриптовые задачи удобнее решать на Python, чем на Bash. Но если в
скрипте много конвейеров, то такой скрипт удобнее писать на Bash благодаря
удобному и лаконичному конвейерному синтаксису.
Этому пора положить предел. Я хочу показать пример использования библиотеки
конвейеров команд на Python, которую я пишу и чуть позже выложу.
В прошлом посте я разместил вспомогательный скрипт...
3 tags
4 tags
Автомонтирование через udev
На днях настроил автомонтирование накопителей USB через udev в Arch Linux и
Ubuntu. Ниже я буду описывать детали для Arch Linux и udev версии 146. В
каждом дистрибутиве немного свои правила /etc/udev/rules.d, а в версиях udev
менялись названия утилит и опций.
Сначала я расскажу о том, как работает udev, а затем приведу мои файлы
конфигов и программки для монтирования накопителей USB.
Вкратце...
1 tag
There are two ways of constructing a software design. One is to make it so...
– C. A. R. Hoare
3 tags
3 tags
Псевдонимы в конфиге Mercurial
В конфиге Mercurial hgrc(5) можно объявлять псевдонимы команд, чтобы не
набирать по десять раз сложные опции. Сейчас в моём ~/.hgrc прописаны такие
псевдонимы:
[alias]
qstatus = status --rev qparent:qtip
glog = log -G --template '{rev}:{node|short} {tags} [{author|user}] {desc|firstline}\n'
slog = log --template '{rev}:{node|short} {date|age}\t{author|person}\t{desc|firstline} {tags}\n'
...
1 tag
z → z. This transformation is closed, so something persists, and the observer...
– W. Ross Ashby, “An Introduction to Cybernetics”
2 tags