11.1.13

Готовится перевод "Clojure Programming"

Издательство "ДМК-Пресс" продолжает серию переводов книг про новые языки программирования, и следующая вещь в списке - "Clojure Programming". Перевод уже начался, и они ищут людей которые помогут с технической вычиткой перевода.  Если кому-то интересно, то пишите на dm at dmk-press.ru.

3.12.12

Переводы книжек на тему ФП...

Я регулярно общаюсь с издательством ДМК-Пресс, которое в последнее время занимается изданием переводов книг по функциональному программированию и языкам ФП. В данный момент они занимаются переводом "Scala for Impatient" и им нужны люди которые бы могли сделать техническую вычитку. Если кому интересно, то напишите Дмитрию Мовчану на dm at dmk-press.ru - я сам не знаю как это дело будет организовано...
Они также заинтересованы в издании перевода Practical Common Lisp, который находится в подвешенном состоянии уже давно (надо доперевести 1.5 главы и пройтись по тексту, вычитывая). Издательство приобрело права на издание книги в России, и обещает напечатать книгу по себестоимости. Если кто может принять участие в этом проекте, напишите мне, я выдам .git-репозиторий с текстом в формате LaTeX (или залить это дело на github?). У меня честно говоря совсем нет свободного времени довести PCL до ума.

Update: PCL залит на github, кто хочет поучавствовать - присылайте свои login names, я добавлю к проекту. Координация и обсуждения происходят в списке рассылки

30.10.12

Новая версия статьи про CEDET

Только что залил на сайт новую версию своей статьи про настройку CEDET. Я также оставил доступной старую версию статьи, но в виде отдельной страницы.
Новая версия описывает новую схему расположения исходного кода, а также новый способ активации под-режимов, так что статья теперь применима и к версии из bzr, и к версии идущей в составе GNU Emacs (после того как выпустят новую его версию).
Кроме того, я добавил небольшое описание того, как настроить связку CEDET + Java, а также небольшое описание настройки дополнений через auto-complete.

Вместо моего конфига, который очень уж сильно замусорен, теперь лучше воспользоваться отдельным конфигом.

P.S. кстати, в последних снапшотах, CEDET умеет находить проекты Maven, и получать информацию о classpath прямо из них, так что теперь работает и дополнение имен для классов из сторонних библиотек.  Например, вот так (Это дополнение при работе с кодом Apache Tika):


P.P.S. If you found error, or typo - please write comment on page, or fork source code on github (it's enough to fix only .muse file), and create pull request :-)

25.9.12

Выступление про Clojure на ITSea 2012

На прошлой неделе я рассказывал про Clojure на небольшой конференции ITSea (совмещенной с купанием в море и т.п. :-), и затем еще давал небольшой мастер-класс на тему практического использования Clojure. Слайды доступны на slideshare (а вот записи выступления к сожалению не было):
Данный постинг является дополнением к этим слайдам, и содержит ссылки на разные ресурсы, упоминавшиеся в рассказе:

10.6.12

Вышел GNU Emacs 24.1!

После длительной разработки, была выпущена новая версия GNU Emacs - 24.1. Среди основных изменений в данной версии можно отметить следующие:
  • система пакетов, которая позволяет скачивать и устанавливать пакеты из внешних источников - как официальных, так и сторонних
  • поддержка отображения и редактирования текстов на языках, где текст пишется справа-налево
  •  поддержка lexical scoping в Emacs Lisp
  • улучшения в системе дополнений (completion) - большинство пакетов теперь используют одинаковый метод показа дополнений
  • встроенная поддержка тем оформления
  • улучшения в интеграции с внешними библиотеками - GTK+3, ImageMagic, GNU TLS, etc.
Более подробную информацию можно найти в поставке GNU Emacs (файл etc/NEWS) и в статьях, перечисленных на странице wikemacs.

3.6.12

Впечатления о курсе "Natural Language Processing"

Продолжая традицию постоянного обучения, я не смог не пройти мимо еще одного из курсов предлагаемых Coursera. После курсов прошедших прошлой осенью, у меня осталось очень хорошее впечатление о них. Среди большого набора новых курсов я выбрал курс Natural Language Processing (NLP) - та тема, которая меня давно интересовала. А на этой неделе я наконец-то получил сертификат об окончании этого курса, и решил написать по свежим следам...
Курс длится 8 недель и преподается двумя известными специлистами в этой области - Dan Jurafsky & Christopher Manning (оба из университета Stanford). В качестве основы для курса взяты две книги: Speech & Language Processing, 2ed и Introduction to Information Retrieval (можно найти и онлайн-версии обоих книг - в виде последних снапшотов перед отравкой в издательство). Так получилось, что обе книги у меня уже были достаточно давно, но все не доходили руки сесть за их чтение. Хочется отметить, что читать книги все-таки требовалось, чтобы лучше понять то, что объяснялось в лекциях.
Каждую неделю необходимо было прослушать примерно 2 часа лекций, ответить на набор вопросов, и выполнить домашнее задание (в виде программы). В качестве языка программирования можно было использовать Java или Python - каждую неделю публиковалось новое задание, которое содержало заготовку кода, куда надо было вписать свое решение. Одним из отличий от осенних курсов было то, что на выполнение заданий отводилось больше времени - две недели (эти сроки иногда увеличивались - в зависимости от сложности задания и технических проблем).
Первые три недели были достаточно простыми - разбирали использование регулярных выражений для NLP, моделирование языков, spell correction и классификацию текстов с помощью Naive Bayes - задания выполнялись достаточно быстро.
А вот недели 4-6 были достаточно сложными - рассматривались maximum entropy модели, вычленение именованных объектов и отношений между ними, part of speech tagging, а также вероятностный парсинг текста.  5-е и 6-е задания были самыми сложными в этом курсе (стоит отметить, что много народу просто пропустило 6-ю домашнюю работу) - необходимо было уметь программировать на достаточно хорошем уровне. Но зато было очень интересно смотреть как твоя программа выдает корректную структуру даже для очень сложных предложений с правильно присвоенными частями речи.
7-е задание было очень легким - надо было запрограммировать индексирование текста и вычисление tf-idf. А вот 8-е, хоть и казалось несложным, но требовало достаточно много времени для доводки регулярных выражений, которые должны были извлекать кусочки информации из входных данных. Времени к сожалению было не особо много, так что я сдал первый работающий вариант, за который получил около 70% от макс. оценки.
В итоге, после прохождения всего курса, я набрал 93% от макс. кол-ва баллов. Также вспомнил/научился как программировать на питоне - языке на котором я писал очень редко, а в основном читал код. И даже применил новые знание на практике, соорудив категоризатор текста на базе HBase/Clojure/Hadoop в виде эксперементального модуля для нашего продукта.

Так что если вам интересны вопросы information retrieval/natural language processing - я очень рекомендую этот курс - он дает очень хорошее представление об этих областях и формирует основу для дальнейшего изучения.

15.4.12

Clojure 1.4!

А между тем, незаметно подкрался релиз новой версии языка Clojure - 1.4.
Rich Hickey называет этот релиз в основном maintenance, хотя есть и достаточно крупные изменения:
  • Расширяемая процедура чтения (reader) - разработчик может указать функцию чтения для своих типов данных. Разработчик должен указать метку для своего типа данных, и соответствующую функцию чтения, и данная функция будет вызвана после того, как следующая (после метки) форма будет считана стандартным reader. Например, можно будет писать вот так: #foo/bar [1 2 3] - в этом случае, после чтения метки, процедура чтения сначала считает форму [1 2 3], а затем вызовет процедуру связанную с данной меткой (если она определена) и передаст ей прочитанные данные. В состав новой версии вошла поддержка чтения двух новых типов - #inst - для времени и даты, и #uuid - для UUID.
  •  Новый синтаксис для доступа к полям записей (унифицировано с ClojureScript) - теперь можно писать (.-field_name record-instance).
  • Возможность контролировать поведение компилятора Clojure с помощью опций, указанных через переменную *compiler-options*.
Остальные изменения включают в себя добавление новых функций в базовую библиотеку, достаточно много исправлений ошибки, оптимизации производительности.
Полный список изменений можно найти в репозитории. Кроме того, может быть интересным интервью Rich Hickey в котором он рассказывает про некоторые изменения в новой версии.