31.12.11

Итоги года...

Сейчас самое подвести итоги уходящего года, и посмотреть вперед - 2011-й год был достаточно насыщеным, свободного времени практически не было....

  • получил повышение до Principal разработчика, что добавило задач, но проекты были интересными, и будут новые
  • достаточно много ездил - в другие страны (англия, голландия, канарские острова) и в германии (по рейну, в Кельн на карнавал, и т.д.)
  • накатал 2000км на велосипеде, хотя это меньше чем я планировал
  • достаточно много "книжных" проектов - работал с Manning над "Mahout in Action" & "Tika in Action", наконец-то вышел перевод TaPL в его окончательном варианте
  • в части open source активность была не особо высокой - обычно в виде небольших патчей для разных проектов
  • для статей тоже не особо много времени находилось - написал только статью про TDD & Unit testing in C++, и вместе с Дмитрием Бушенко, написали небольшое пособие про Emacs, которое мы планируем в следующем году значительно расширить информацией про CEDET/Semantic для Java и т.п.
  • много читал, в основном техническую литературу
  • учился в двух стенфордских классах, что доставило очень большое удовольствие и позволило многому научиться

В следующем году продолжу разбираться с темами, которые мне интересны - machine learning, natural language processing (в том числе возьму и стенфордский класс на эту тему), постараюсь больше писать на разные темы, и более активно учавствовать в open source проектах. И проехать 3000км на велосипеде (надо только его проапгрейдить до шоссейника)...

И хочу поздравить всех моих читателей с Новым, 2012-м годом - пусть он будет успешным и интересным для вас!

23.12.11

Про Стэнфордские курсы...

Я как и многие мои знакомые, учавствовал в экспериментальных учебных курсах предложенных Стэнфордским университетом. В виду патологической жадности любви к учебе, записался сразу на два курса Artificial Intelligence (AI) & Machine Leaning (ML), оба на advanced track, что предполагало делание домашних заданий в дополнение к вопросам в ходе лекций. Вчера я получил свой сертификат для AI - 89%, чему я с одной стороны рад, поскольку я смог это сделать, с другой стороны - корю себя за невнимательность и несобранность - было сделано достаточно много глупых ошибок. Сертификат по ML скорее всего придет на той неделе.
Я собирался написать про свои впечатления об обоих курсах, но Lev Walkin меня опередил отличных постом в своем журнале. Мои впечатления полностью совпадают с тем, что он написал - возможность получения немедленного feedback на ML-курсе, позволила гораздо лучше запомнить материал по сравнению с тем что давали на AI. Но стоит отметить, что AI тоже не прошел даром - обзорные лекции по разным темам дали возможность на них посмотреть чуть ближе, и понять что из них будет интересно и применимо.
Оба курса были также хорошей возможностью чуть лучше сконцентрироваться на определенных темах, поскольку домашние работы надо было выполнять в срок. Плюс это дало возможность наконец-то почитать давно купленные книги, например, Artificial Intelligence: A Modern Approach (у меня 2-е, русское издание), купленное много лет назад, и иногда доставаемое с полки для чтения какой-то главы :-)

А в конце января, начнется новая серия курсов, я скорее всего возьму только один - Natural Language Processing (так что я достану из загашников еще пару книжек :-), хотя хочется взять половину из новых курсов, даже 2 курса одновременно - это достаточно затратно по времени, так что буду надеяться что все курсы будут оставаться в открытом доступе и в дальнейшем (по крайней мере, курс по ML будет повторен и в новом семестре).

27.11.11

Перевод TaPL в продаже

Для заинтересованных - перевод TaPL можно уже купить. findbook показывает что можно заказать через goodreads.ru, books.ru имеет книгу в каталоге, но она помечена как "нет в продаже"...
Судя по информаци из juick, в Москве можно купить в обычных книжных магазинах: "В москве продаётся как минимум в МДК (на арбате и в техкниге), в Москве (на тверской), и в библиоглобусе. Дешевле всего (за 1100р) можно купить в МЦНМО (mccme.ru). туда лучше заранее позвонить, ибо много книг хранить они не могут"...
P.S. а озон почему-то выставил безумную цену в 2 с лишним тысячи, поэтому они идут лесом :-)

Update: Алексей Махоткин написал пост, где собрал список всех известных магазинов и других способов покупки книги...

22.10.11

Еще книжное...

Осень выдается достаточно результативной на книги, к которым я имею отношение в той или иной мере... Кроме релиза про перевод Types & programming languages, про который я писал вчера, сегодня я получил свой экземпляр книги Mahout in Action, в издании которой я принимал участие в качестве technical proofreader. В том же качестве я поработал и над книгой Tika in Action, которая должна выйти в ближайшее время. А началось все с того, что люди из Manning предложили мне сделать review для нескольких книг, часть из которых я уже купил как MEAP, а потом предложили сделать и technical proofreading - проверить примеры, формулы и т.п., что и было с удовольствием сделано - все равно я собирался читать эту книгу, а тут такая возможность :-)


Mahout in Action - интересная книга, если вы интересуетесь machine learning, особенно в large scale. В книжке почти нет теории, но в ней подробно описывается как использовать Apache Mahout для классификации и кластеризации данных, а также рекомендаций (для товаров и т.п.). В книге описаны только основные алгоритмы, в самом Mahout их гораздо больше, и все больше добавляется с каждым релизом.
В электронной версии (в PDF) есть мультимедийные вставки, с помощью которых рассказывают или показывают про сложные места - интересно сделано. На амазоне, печатная книга стоит дешевле чем у Manning'а, но у Manning'а вместе с печатной версией дают и электронную - это у них стандартные условия, плюс регулярно бывают 40-50% скидки - если кому интересно. Все примеры были протестированы на Mahout версии 0.5 (актуальный релиз), но я планирую в ближайшее время сделать их совместимыми со следующим релизом - 0.6 - там совсем небольшое изменение...

P.S. будет еще несколько книг, но уже на русском, но я пока не знаю еще точных сроков выхода, но обязательно напишу :-)

21.10.11

Книга "Типы в языках программирования"

Из достоверных источников стало известно, что книга "Типы в языках программирования" (перевод известной "Types and Programming Languages") вышла в бумажном виде, и это не миф :-) Пока правда неизвестно где ее можно купить, но вы можете связаться с Алексеем Махоткиным (aka squadette) и узнать об этом.  Я тоже напишу когда она будет доступна в магазинах.
Также доступна полная электронная версия книги, она совпадает с печатной версией. Меньшего формата не будет (пока?), поскольку там есть проблемы с таблицами и листингами, но вы можете попытаться переверстать, благо исходные тексты также доступны.
Эта книга труд многих людей - Юра Бронников сделал львинную часть перевода, Алексей Махоткин сделал огромную работу по вычитке и редактированию, а Вадим Родионов так красиво и правильно все сверстал. Кроме того, много людей читало промежуточные версии перевода и присылало замечания и пожелания - всем спасибо!

24.9.11

Что нового в Clojure 1.3?

Сегодня ночью была выпущена новая версия языка Clojure — 1.3. Что нового в этой версии? Давайте рассмотрим основные изменения сделанные в этой версии (детальный список изменений можно найти в соответствующей ветке репозитория).

Расширенная поддержка примитивных типов

В предыдущих версиях, примитивные типы (long, double, etc.) поддерживались только для локальных арифметических операций и при объявлении полей deftype/defrecord, но не для аргументов функций и не для возвращаемых значений. Boxing выполнялся всегда, что часто приводило к ощутимым накладным расходам.

В новой версии примитивные типы поддерживаются в полной мере, что приводит к значительному увеличению производительности кода (в соответствующих тестах, в среднем в 3-5 раз). Соответственно изменилась работа с арифметическими выражениями — для примитивных типов будут использоваться стандартные операторы Java. Но при этом не будет происходит автоматического превращения в "Big*" типы при переполнении, как это происходило раньше — вместо этого будет брошено исключение. Если вам все-таки нужно автоматическая конвертация, то вы можете использовать операторы +', *', и т.д., хотя они и более медленные. Битовые операции теперь только поддерживаются для примитивных типов, и вся их поддержка для "Big*" была убрана из языка.

Для использования примитивных типов вам необходимо добавить соответствующие type hints, например:

(defn fib ^long [^long n]
    (if (<= n 1)
        1
        (+ (fib (dec n)) (fib (- n 2)))))

Более подробно обо всем этом на соответствующей странице JIRA.

Улучшения defrecord и deftype

В версии 1.3 были сделаны различные улучшения для работы с defrecord и deftype:

  • новый синтаксис для чтения и записи — либо с метками (#myns.MyRecord{:a 1, :b 2} — только для записей), либо позиционный (#myns.MyRecord[1 2] — для записей и типов);
  • автоматическая генерация функций для создания типов и записей: myns/map->MyRecord (только для записей) и myns/->MyRecord (для записей и типов).

Подробнее можно прочитать вот тут.

Reflection API

Введено новое пространство имен clojure.reflect, функции которого должны обеспечить более удобную и быструю работу с классами, методами и т.д. Подробнее об этом тут.

Модульный clojure-contrib

Начиная с версии 1.3, больше не существует монолитного набора библиотек известного как clojure-contrib — вместо этого, были созданы отдельные проекты для каждой из библиотек, что позволяет им развиваться и выпускаться независимо друг от друга. Полный список всех старых библиотек, и соответствующих им новых, можно найти на отдельной странице.

Множественные улучшения производительности

Кроме улучшений в части производительности, описанных выше, в новом релизе сделано множество изменений чтобы обеспечить более высокую скорость работы программ на Clojure:

  • Более быстрый доступ к переменным;
  • Ускорение загрузки
  • Promises не используют блокировок (locks);
  • Инлайнинг nil?, битовых функций, математических операций, функций min & max с разным числом аргументов;
  • и многое другое...

Прочее

Помимо новой функциональности описанной выше, а также различных исправлений ошибок, в новой версии реализованы новые вещи (перечислены не все):

  • Некоторые вспомогательные пространства имен (clojure.set, clojure.xml, clojure.zip) не загружаются при запуске;
  • Объявления сделанные с помощью def более не являются "динамическими" по умолчанию — вы должны использовать ^:dynamic если хотите иметь возможность использования ее в binding;
  • Улучшенные сообщения об ошибках и исключениях;
  • Можно вызвать deref с указанием таймаута;
  • Функция comp возвращает identity если вызвана без параметров;
  • Возможность указания разных возвращаемых типов в объявлениях одной функции с разными количествами аргументов;
  • Некоторые функции перемещены в другие пространства имен;

18.9.11

Перевод " Learn You a Haskell for Great Good!"

BTW, планируется выпуск русского перевода "Learn You a Haskell for Great Good!" в виде бумажной книги. Переводом занимается Yasir Arsanukaev, и работа над переводом ведется на bitbucket - кто может, присоединяйтесь к вычитке перевода! :-)

P.S. Из достоверных источников стало известно, что книжка уже на этапе верстки, так что недолго ждать осталось :-)