26.1.10

Видеоматериалы про Clojure

Поскольку не вся информация помещается в статью, то решил публиковать в блог излишки информации :-)
Существует несколько хороших наборов видеоматериалов, посвященных Clojure:
  • http://clojure.blip.tv/ - содержит видео с рассказами о Clojure, записанные на выступлениях как автора языка - Rich Hickey, так и других разработчиков.  Лекции самые разные по содержанию, и содержат интересные выступления. Есть отдельные лекции "Clojure для программистов на Lisp" и "Clojure для программистов на Java", которые могут служить очень хорошими введениями в язык;
  • набор скринкастов от Sean Devlin, в которых рассказывается как про возможности новой версии Clojure - 1.1, так и про другие темы - управление проектами, и т.д.
  • Inside Clojure - лекция Rich Hickey для Channel 9, в котором рассказывается про внутреннее устройство языка
Update: Спасибо комментаторам за дополнительные ссылки, я про них совсем забыл:
  • Persistent Data Structures and Managed References - еще одна презентация Rich Hickey о внутреннем устройстве Clojure
  • Intro to Clojure - серия презентация о Clojure;
  • Functional Programming with Clojure - платный скринкаст, показывающий возможности Clojure на примере разработки игры (я сам не смотрел его, в отличии от предыдущих материалов)...

25.1.10

работа для функциональщиков в праге...

мне тут прислали вакансию для функционального программиста, офис находится в праге. работа - разработка какого-то финансового ПО. если кому интересно, пишите мне - я перекину описание вакансии и явки...

23.1.10

Вот небольшое добавление к отличному пакету listings, который позволяет вставлять код на Clojure в документы LaTeX

21.1.10

новый домен для домашней страницы

Перевел свою домашнюю страницу в отдельный домен - http://alexott.net/. Все старые ссылки должны продолжать работать...

P.S. единственный вопрос, который меня сейчас мучает - почему я не сделал это много лет назад?

19.1.10

Обзор литературы по функциональному программированию...

По согласованию с проектом fprog.ru выложил у себя на сайте статью с обзором литературы по функциональному программированию, первоначально опубликованную в первом номере журнала.
Новая версия статьи отличается от оригинала наличием описаний новых книг, вышедших за последние полгода. В дальнейшем, я планирую поддерживать данный обзор литературы в актуальном состоянии...
P.S. Замечания и пожелания оставляйте в комментариях к статье, или присылайте мне по электронной почте.

18.1.10

Coders at Work

Только что закончил читать Coders at Work. Книжка хоть и на один раз прочитать, но все равно очень интересная - можно увидеть как примерно работают известные разработчики ПО.
У всех разные истории, разные подходы к разработке программ, но у многих есть общие черты. Например, многие используют отладочную печать + пристальное чтение кода для поиска ошибок, и не особо используют интерактивные отладчики. Многие используют Emacs в качестве редактора, включая главного Java архитектора в Гугле.
Так что если книжка попадется в руки, стоит потратить немного времени на ее чтение....

12.1.10

однострочное...

Читал про protocols и datatypes, разрабатываемые для новой версии Clojure, много думал...
P.S. они уже слиты в master branch репозитория Clojure, можно играться в clojure-snapshot

7.1.10

fprog.ru на twitter

если вы пользуетесь twitter, то вы можете отслеживать публикации используя fprogru@twitter.

Russian Lambda Planet переехала!

У нас получилась неделя переездов. В рамках разгрузки сервера defun.ru, было решено перевести русскую планету ФП на сервер проекта fprog.ru.
Теперь обновленная планета живет по адресу http://fprog.ru/planet/ и с defun.ru будет сделано перенаправление. Но адрес подписки мы рекомендуем изменить - для уменьшения проблем в будущем, создан feed на feedburner, который нужно указать в вашей программе чтения новостей.

6.1.10

boost.spirit2 vs. atoi

Сделал примитивный тест производительности нового boost.spirit. Я где-то читал, что boost.spirit v.2 обгоняет atoi на разборе целых чисел, и решил проверить это с помощью программы, приведенной ниже.
При компиляции в release mode для 10000000 повторений, я получил следующие результаты:
atoi   = (10000000 rep): 00:00:00.404165
spirit = (10000000 rep): 00:00:00.043559
Update: Я немного изменил парсер, чтобы он обрабатывал пробельные символы перед числом (как это делает atoi), и все равно boost.spirit показывает лучший результат:
atol   = (10000000 rep): 00:00:00.411694
spirit = (10000000 rep): 00:00:00.112000
Буду теперь проверять на более сложных парсерах, и агитировать за переход с ручного разбора с помощью find/substr на 2-ю версию спирита...

#include <boost/spirit/include/qi.hpp>
#include <iostream>
#include <boost/date_time/local_time/local_time.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

using namespace boost::spirit;

typedef void (*void_func)(int);
void measure_time(const char *str, void_func func, int number_of_repeat) {
    using namespace boost::posix_time;
    ptime tStart = microsec_clock::local_time();
    (*func)(number_of_repeat);
    ptime tEnd = microsec_clock::local_time();
    time_duration tVal = tEnd - tStart;
    std::cout << str << " (" << number_of_repeat << " rep): " << to_simple_string(tVal)  << std::endl;
}

const char* nstr="123456";
const char* const nstr2="123456";

void test_spirit(int number_of_repeat) {
    int val=0;
    for(int i=0; i < number_of_repeat; i++) {
        qi::parse(nstr,nstr+6,int_,val);
        if (val != 123456)
            std::cout << "Spirit Errror! val=" << val << std::endl;
    }
}

void test_atol(int number_of_repeat) {
    long val=0;
    for(int i=0; i < number_of_repeat; i++) {
        val=atoi(nstr2);
        if (val != 123456)
            std::cout << "Atoi Errror! val=" << val << std::endl;
    }
}

int main(int /*argc*/, char **/*argv*/) {
    measure_time("atol   =", test_atol, 10000000);
    measure_time("spirit =", test_spirit, 10000000);
    return 0;
}

4.1.10

Русская планета Emacs переехала!

Русская планета Emacs почти два года жила на хостинге, представленном Semka Novikov за что ему огромное спасибо!
Но из-за некоторых проблем с хостингом, было принято решение о переезде на сервер, на котором живет главная Emacs Planet, что вчера и было осуществлено. Новый адрес русской планеты Emacs - http://planet.emacsen.org/ru/, а старая планета будет отключена сегодня, и удалена через некоторое время...
Поэтому, обновите адрес ленты новостей на новый адрес. Вы также можете использовать адрес ленты Feedburner, которая уже обновлена.