30.12.10

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

Год получился интересным, было много интересных проектов, как на работе, так и вне ее.
Продолжал "развлекаться" с Clojure, что в итоге вылилось в написание большой статьи для журнала "Практика функционального программирования", докладах на MarginCon 2010 и на встрече Munster Java User Group, а также в подкасте у golodnyj (1, 2). Ну и конечно, не обошлось без писания кода для разных проектов (Incanter, leiningen, swank-clojure, clojure-hadoop, и еще паре своих). Правда немного подзабросил Common Lisp и Scheme, но с первым я поработаю во время чтения недавно купленной "Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp".
Очень много читал (соответствующая полка на shelfari, правда список на прочитать еще больше), не в последнюю очередь благодаря покупке iPad, и приобретению электронных книг (много у Manning).
Первый раз был в США (по работе) - была очень полезная поездка. Теперь в планах поездки уже не по работе, хочется вживую познакомиться с френдами на обоих побережьях США...
На следующий год очень много планов:
  • хочу немного увеличить количество Haskell и Erlang в своих проектах, и может быть посмотреть на Scala, если останется время;
  • продолжить заниматься machine learning, кроме того, есть несколько задумок в части natural language processing; 
  • продолжу занятия с hadoop, и т.п. вещами, связанными с обработкой больших объемов данных;
  • обновить существующие статьи по программированию и Emacs, и может быть написать что-то новое для ПФП;
  • продолжить хакать Emacs, особенно в части CEDET для функциональных языков.
 И пользуясь случаем, хочу поздравить всех своих читателей с наступающим новым годом, и пусть у вас будет много интересных вещей в новом году, и вообще все хорошо в жизни :-)

Update: Забыл написать, что в следующем году (марте скорее всего) будет официально издан перевод отличной книжки - Types and Programming Languages. Перевод закончен полностью, и сейчас только ведется работа над версткой

21.12.10

Переехал на el-get

Я достаточно долгое время таскал с собой все используемые пакеты для Емакса, вместе с конфигурационными файлами - это позволяло мне иметь везде одинаковую рабочую среду. Большая часть используемых пакетов бралась прямо из репозиториев и регулярно обновлялась с помощью набор шельных скриптов.
Но некоторое время назад я наткнулся на проект el-get, который берет на себя вопросы скачивания и обновления пакетов, и делает это прямо из емакса. Основное удобство заключается в том, что в составе el-get имеется большое количество готовых конфигурационных файлов (рецептов) для самых разных пакетов, и вы можете сразу использовать их в своей конфигурации.
Использование el-get очень просто - вы определяет список пакетов, которые вы хотите использовать, а затем вызываете функцию (el-get), которая выкачивает пакет, компилирует его в соответствии с инструкциями, и загружает нужные части, так что пакет становится доступным для использования.  Подробности использования можно найти в описании проекта.
Неделю назад я наконец-то собрался с духом, и перевел свою рабочую конфигурацию на el-get (я пока использую свой форк проекта, хотя многие из рецептов уже внесены в основной проект), пришлось правда добавить рецептов которых еще не было в репозитории, и немного повозиться со сборкой на Mac OS X. Но в остальном - все работает нормально.

8.12.10

Следующие номера ПФП

Редакция журнала "Практика функционального программирования" ищет авторов статей для следующих выпусков журнала.
Если вы хотите написать о применении ФП в своей работе, о новом языке программирования, о конкретном алгоритме, сделать перевод хорошей статьи, или написать еще о чем-то относящемся к ФП, то пришлите письмо на адрес ie@fprog.ru с небольшим описанием того, о чем вы хотите написать

Дайджест прочитанных книг. Ноябрь 2010

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

Programming Massively Parallel Processors: A Hands-on Approach

В рамках проверки некоторых гипотез решил ознакомиться с программированием для графических процессоров (GPU). В общих чертах я знал как это делается, а для получения более подробной информации выбрал книжку Programming Massively Parallel Processors: A Hands-on Approach, которая судя по обзорам должна была дать достаточно информации для начала работы с GPU.
Первые две главы содержат введение в историю программирования на GPU, рассматривают их архитектуру, а также описывают разные подходы к параллельному программированию.
Начиная с третье главы начинается описание программирования с помощью CUDA, начиная со структуры программы. Затем показывается простой пример умножения двух матриц, который будет улучшаться на протяжении всей книги. И в заключение третьей главы, рассматриваются необходимые вопросы перемещения данных между основной памятью и GPU, а также то, как соотносятся ядерные функции и потоки выполнения GPU.
Четвертая глава полностью посвящена тому, как организовано выполнение кода в модели CUDA — как потоки выполнения выбираются для исполнения на процессоре, как они образуют блоки потоков, как обеспечить синхронизацию между потоками. В пятой главе рассматриваются все виды памяти доступной для программиста CUDA и описываются различные стратегии ее использования, с учетом влияния на производительность и т.п. вещи.
Шестая глава полностью посвящена вопросам оптимизации производительности программ — как обеспечить полную загрузку процессора и шины по которой данные передаются в память, как организовать предвосхищающую выборку данных, и т.д. В седьмой главе внимание читателя обращается на выполнение операций с плавающей точкой, о том, как это влияет на точность вычислений и т.п. вопросам.
В 8-й и 9-й главах рассматриваются два проекта, которые используют вычисления на GPU. Для каждого проекта рассматриваются архитектура программы, как организованы данные, что выносится в ядерную функцию и т.п.
Десятая глава более философская — в ней пытаются описать общие подходы к решению проблем и выбору алгоритмов для параллельных программ.
А 11-я глава посвящена небольшому описанию языка OpenCL, с указанием отличий его от CUDA. Но описание слишком краткое, и лучше обратиться к официальной документации по OpenCL, хотя сама книга дает очень теоретическую хорошую базу.
Заключение: Если вы хотите ознакомиться с основами "нормального (general purpose)" программирования на графических процессорах, то вы можете взять эту книгу. В ней содержится общая информация об архитектуре, советы по дизайну эффективных программ, которые будут работать на этих процессорах (проиллюстрированные различными примерами), а также небольшое введение в OpenCL. Кроме того, каждая глава книги содержит много ссылок на статьи и литературу, которые могут быть полезны в дальнейшей работе. Для тех кто хочет подробней познакомиться с CUDA, советуют книгу CUDA by Example: An Introduction to General-Purpose GPU Programming и/или официальную документацию.
Дальнейшая работа
Меня в первую очередь интересует OpenCL, поскольку имеется возможность его использования из других языков, а не быть привязанным к C. Например, имеется проект Calx, который обеспечивает возможность запуска кода на OpenCL из программ на Clojure. К тому же, OpenCL поддерживается не только NVidia. Я жду выхода в следующем году книг OpenCL in Action (уже можно начинать читать купив MEAP) и OpenCL Programming Guide, которая, судя по описанию, должна содержать достаточно много полезной информации.
Хорошим подспорьем также является то, что с недавнего времени вы можете запускать свой код использующий GPU в Amazon Elastic Cloud, что позволяет уменьшить расходы на покупку мощного оборудования.
Дополнительные ресурсы
В качестве полезных ресурсов могу указать на сайт GPGPU где регулярно публикуются статьи и анонсы про программирование GPU. Например, для меня были интересны следующие статьи: GrAVity: A Massively Parallel Antivirus Engine и Regular Expression Matching on Graphics Hardware for Intrusion Detection, поскольку они имеют некоторое отношение к тому, чем я занимаюсь.
Как минимум два курса по программированию GPU можно найти на iTunesU. Кроме того, доступен следующий курс лекций.
И достаточно много документации и учебных материалов можно найти на сайте NVidia — как по CUDA, так и по OpenCL.

2.12.10

Интервью для проекта openquality

На сайте проекта OpenQuality выложили интервью со мной, обо всем понемножку - разработка ПО, функциональные языки, безопасность и т.д. Умудрился упомянуть про Emacs всего один раз ;-)