Андрей Власовских

Блог Андрея Власовских

Мой новый зимний блог

leave a comment »

Друзья, поздравляю вас с началом календарной зимы!

Внимание: C декабря 2009 я начинаю вести блог на другом сайте — http://vlan.tumblr.com/. Пока что кажется, что Tumblr.com удобнее WordPress.com. Переезд моего блога пока временный: будем считать, что на зиму, а там посмотрим. Прошу вас подписаться на ленту новостей нового блога!

Написано vlasovskikh

2009-12-01 в 03:28

Опубликовано в Uncategorized

Отмечено как ,

Пакеты Python: distutils или setuptools

с 5 комментариями

Недавно в обсуждении одного бага funcparserlib всплыла тема установки пакетов Python. Раньше я пользовался модулем setuptools и частично связанной с ним утилитой easy_install. Однако из-за проблем с ним я решил попробовать использовать модуль distutils, идущий в поставке Python и являющийся официальным способом установки пакетов Python.

Есть разные претензии к setuptools (см. посты в блогах Brett Cannon и James Bennett), Здесь я кратко скажу о моих собственных. Во-первых, setuptools не создаёт промежуточные каталоги при setup.py install. Во-вторых, интерпретатор Python при старте сканирует слишком много файлов и каталогов. Возможно, это связано с форматом пакетов eggs модуля setuptools, хотя может и нет. Наконец, setuptools привносит дополнительную сложность по сравнению с distutils, а пользы от него — только в более простой установке скриптов, команде setup.py develop и описании зависимостей.

Все эти вещи можно сделать и без setuptools. Скрипты можно ставить обычным копированием с помощью distutils. Команду develop можно заменить созданием символьной ссылки из каталога в PYTHONPATH на каталог разработки.  В плане зависимостей интересна утилита pip, но пока что easy_install кажется удобнее.

Написано vlasovskikh

2009-10-06 в 16:33

Опубликовано в Uncategorized

Отмечено как , , , ,

Непрерывная сборка с inotify-tools

с 3 комментариями

Из этого поста узнал о программе inotify-tools. Теперь порой использую утилиту inotifywait для постоянной сборки моего проекта при изменении каких-нибудь его файлов. Например, вот небольшой скрипт, позволяющий видеть отрендеренную версию статьи всё время при её редактировании:

#!/bin/sh

while true; do
    inotifywait -e MOVE_SELF,MODIFY,CLOSE_WRITE ../wiki/*.md img/*
    sleep 1
    make --quiet
done

Очень удобная штука!

Вопрос: насколько правильно при каждом сохранении выполнять анализ корректности программы/статьи? Можно смотреть на это так. Либо это заставляет больше стараться, чтобы при каждом сохранении иметь синтаксически корректную программу, либо добавляет ответственности при написании кода и упорядочивает мысли.

Написано vlasovskikh

2009-09-20 в 18:37

Опубликовано в Uncategorized

Отмечено как , ,

Курс по языкам программирования осенью 2009

с 4 комментариями

В осеннем семестре 2009 я читаю лекции по языкам программирования на кафедре АиВТ в Политехе. На странице курса я буду выкладывать слайды и другие материалы по курсу. За обновлениями можно следить через блог курса.

Написано vlasovskikh

2009-09-04 в 12:56

Опубликовано в Uncategorized

Отмечено как ,

Функциональные комбинаторы парсеров в Python

с 4 комментариями

С некоторого времени я стал делать на Python часть моих повседневных задач по анализу языков, трансляторам и пр. Вначале для вспомогательных целей, а потом и для парсинга небольших языков, прототипирования грамматик, деревьев AST, трансформаций кода. Многие при этом подумают про OCaml, но в Unix-среде (привет spb-archlinux!) от Python с его библиотеками пользы больше.

Для задач парсинга я написал библиотеку funcparserlib. Эта библиотека предназначена для создания парсеров по методу рекурсивного спуска на основе функциональных комбинаторов. Также я написал вводное руководство по funcparserlib (на английском), которое будет интересно всем, увлекающимся функциональным программированием (FP) и/или языком Python. Рекомендую его почитать!

Вот, например, такие картинки деревьев можно легко получать с помощью funcparserlib:

>>> print dotparser.pretty_parse_tree(tree)
Graph [id=g1, strict=False, type=digraph]
`-- stmts
    |-- Edge
    |   |-- nodes
    |   |   |-- n1
    |   |   |-- n2
    |   |   `-- SubGraph [id=n3]
    |   |       `-- stmts
    |   |           |-- Edge
    |   |           |   |-- nodes
    |   |           |   |   |-- nn1
    |   |           |   |   |-- nn2
    |   |           |   |   `-- nn3
    |   |           |   `-- attrs
    |   |           `-- Edge
    |   |               |-- nodes
    |   |               |   |-- nn3
    |   |               |   `-- nn1
    |   |               `-- attrs
    |   `-- attrs
    `-- Edge
        |-- nodes
        |   |-- SubGraph [id=n3]
        |   |   `-- stmts
        |   `-- n1
        `-- attrs

Итак, предлагаю взглянуть на руководство, а питонистам — попробовать funcparserlib, посмотреть другие доки и примеры на сайте библиотеки.

Дальше идут особенности funcparserlib, сравнение с pyparsing и LEPL, история библиотеки…

Написано vlasovskikh

2009-07-28 в 21:38

Опубликовано в Uncategorized

Отмечено как , , ,

Монады в OCaml

leave a comment »

В блогах уже есть, конечно, рассказы о монадах в OCaml, например, A Monad Tutorial for OCaml и Syntax Extension for Monads in OCaml. Однако меня интересовало воссоздание соответствующих классов типов Haskell при помощи параметрических модулей (вот пост про соответствие между ними).

Вот «иерархия» модулей, расширяющих функтор до монады. Полезные комментарии к соответствующим классам Haskell есть в статье The Typeclassopedia из The Monad.Reader.

module type FunctorType =
sig
  type 'a t
  val map : ('a -> 'b) -> 'a t -> 'b t
end

module type PointedType =
sig
  include FunctorType
  val pure : 'a -> 'a t
end

module type ApplicativeType =
sig
  include PointedType
  val (<*>) : ('a -> 'b) t -> 'a t -> 'b t
end

module type MonadType =
sig
  include ApplicativeType
  val join : 'a t t -> 'a t
  val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
  val (>>) : 'a t -> 'b t -> 'b t
end

Здесь уже видно, что не всё получается как в Haskell. Сигнатуры модулей не позволяют привести значение терма по умолчанию.

Upd: Выложил полный исходник с примерами в pastebin.

Дальше пример с монадой Maybe…

Написано vlasovskikh

2009-07-13 в 22:17

Опубликовано в Uncategorized

Отмечено как , , , ,

Команда spb-archlinux на ICFPC 2009

с 13 комментариями

Никак не возьму в привычку чаще писать в блог. Но на этот раз повод действительно есть. Наша команда spb-archlinux принимала участие в программерском конкурсе ICFP Contest 2009 :)

Ниже рассказ об этом. Если вкратце, было весело! :)

Upd: В финальной таблице результатов мы заняли 95 место с 1826 очками.

Прочтите эту запись до конца »

Написано vlasovskikh

2009-07-02 в 01:41

Опубликовано в Uncategorized

Отмечено как , , , , , ,

Группа юзеров spb-archlinux

leave a comment »

Мы с приятелями организовали spb-archlinux, питерскую группу пользователей Arch Linux. Некоторое время назад я со знакомыми заинтересовался этим минималистичным дистрибутивом Linux. Результатом стал переход на Arch и создание такой группы.

Наша группа объединяет людей по интересу к Arch Linux и связанным технологиям, желающих делиться информацией, вместе обсуждать темы, решать встречающиеся сложности, и просто встречаться ради общения. Если вам интересно, заходите на сайт нашей группы, присоединяйтесь к списку рассылки email.

Arch Linux — это действительно симпатичная система, близкая духу Unix. Вот что говорят пользователи этой системы о пути Arch. В основу дистрибутива положены:

  • Простота и элегантность базовой структуры системы
  • Корректность кода вместо видимого удобства для пользователя
  • Открытость
  • Направленность на пользователя в смысле возможности полного контроля над системой
  • Свобода выбора компонентов и других вещей в своей системе

Хорошие и полезные качества, свойственные минималистичному простому софту.

Написано vlasovskikh

2009-03-24 в 19:00

Опубликовано в Uncategorized

Отмечено как , , , , , ,

ВКонтакте как социальная чёрная дыра

с 21 комментариями

Я решил удалить свой аккаунт с сайта ВКонтакте, т. к. он слишком централизованный и закрытый. Вначале я расскажу почему это так, а затем опишу более хорошую альтернативу социальной сети.

Upd: Оставил аккаунт для общения с теми, кто не хочет или не может общаться по-другому :)

Этот сайт слишком централизованный, т. к. люди вынуждены использовать его для общения, даже если они хотели бы общаться в другом месте. Это происходит из-за огромного количества пользователей сайта (на настоящий момент около 30 млн.). Сайт как воронка притягивает новых пользователей за счёт уже имеющихся. Я считаю это неприемлемым, т. к. это ненадёжно и небезопасно. Если с сайтом технически или административно что-то произойдёт, все эти люди окажутся без сервиса. Речь даже не о выходе из строя, а о таких мелочах, как реклама, плата за дополнительные функции и т. д.

Прочтите эту запись до конца »

Написано vlasovskikh

2009-03-21 в 20:02

Опубликовано в Uncategorized

Отмечено как , , , , , ,

Курс по языкам программирования

с 10 комментариями

Закончилась зимняя сессия, время рассказать о прочитанном курсе и подвести небольшие итоги.

В осеннем семестре 2008 читал в Политехе курс лекций «Языки программирования» студентам 5-ого курса кафедры АиВТ. Идеей было дать общий подход к рассмотрению языков, познакомить с функциональным программированием, рассмотреть некоторые компромиссы при проектировании языков. Курс наполовину основан на SICP и языке Scheme, а вторая половина посвящена сравнительному обзору языков C, C++, Python и Java.

Поделюсь впечатлениями о курсе. Во-первых, наши студенты имеют весьма туманные навыки программирования, немного грустно :( Думаю, такое характерно для большинства вузов, хотя наверняка есть и исключения. Они написали к 5-ому курсу слишком мало программ (к тому же весьма простых), и не в состоянии нормально чувствовать и рассуждать о проблемах борьбы со сложностью в программировании. Во-вторых, в курсе получился большой перекос в сторону основ ФП и Scheme в противовес передаче сообщений, параллельности, малым языкам и т. д. Наконец, чтение курса помогает заострить внимание на моментах, которые иначе не были бы замечены и систематизированы.

Теперь есть мысли о нескольких лекциях или семинарах по сетевому и распределённому программированию. Кажется, уже достаточно много важных и интересных вещей могу сказать по этому поводу.

Студентов поздравляю с Татьяниным днём :)

Написано vlasovskikh

2009-01-25 в 23:40

Опубликовано в Uncategorized

Отмечено как , , , , ,