пятница, 15 мая 2009 г.

Вдогонку вопросу о CMake: идея для SObjectizer-5 и Mxx_ru

С самого начала размышлений над SObjectizer-5 я придерживаюсь мнения, что для популяризации SObjectizer обязательно нужен какой-то демонстрационный OpenSource проект. Достаточно полезный для того, чтобы его использовали безотносительно к том, на чем он написан. И достаточно интересный, чтобы продемонстрировать, преимущества SObjectizer при разработке приложений.

Но что за проект?

Изначально я думал об очередном клиенте для peer-to-peer сетей (eDonkey или BitTorrent). Тем более, что тогда можно было бы легко сравнить SObjectizer-разработку с целым рядом других проектов. Только вот нет большой практической пользы в создании еще одного P2P клиента. Поэтому высоки шансы, что подобный проект не найдет одобрения у начальства, чтобы можно было заниматься им в рабочее время. Как следствие, в качестве рабочего варианта рассматривалась OpenSource реализация средств работы с GSM-модемом. Правда, без особого энтузиазма, т.к. не понятно, кого этот проект мог бы заинтересовать кроме нас.

А вот сегодня, после написания заметки о CMake я подумал: а почему бы на основе SObjectizer-5 и Mxx_ru не замутить конкурента IncrediBuild? Думаю, это было бы здорово!

В чем секрет CMake?

Время от времени попадаются сообщения о том, что очередной проект перебирается на build-систему CMake. Вот и сегодня в блоге Стива Хьюстона (Steve Huston, один из разработчиков ACE) прочитал о том, что на CMake перебирается проект Apache Qpid (это OpenSource реализация протокола AMQP). Некоторое время назад на CMake, если не ошибаюсь, перебрался проект KDE. А сейчас еще ходят слухи о том, что на CMake будет перебираться Boost (что не может не радовать, т.к. я никогда не понимал, как можно пользоваться Boost.Build-ом).

Загадкой для меня является то, что CMake пользуется таким успехом. На мой вкус, build-система для кроссплатформенных C++ проектов должна:

  • давать разработчику одинаковую среду на любой платформе;
  • позволять записывать проектные файлы в виде небольших программ (с обязательной возможностью использовать if-ы, циклы, различные операции над переменными).

С этими критериями CMake справляется, на мой взгляд, не слишком. Во-первых, CMake является генератором проектных файлов. Т.е., под Linux-ом я должен сгенерировать make-файлы и запускать make. Под Visual Studio – проектные файлы и devenv. Во-вторых, CMake предоставляет свой язык программирования, который выглядит не слишком эстетично. Т.е. на троечку по каждому пункту. В отличии от, например, SCons, Rake и моего Mxx_ru. Ведь SCons, Rake, Mxx_ru сами управляют компиляцией (не требуется генерация нативных проектных файлов) и проекты записываются в виде программ на нормальных языках программирования (Python в случае SCons, Ruby в случае Rake и Mxx_ru).

Тем не менее, CMake по популярности, как мне представляется, уделывает нас всех. Вопрос: почему?

Может быть, здесь работает принцип “Worse is Better”?

Или же CMake как раз предоставляет разработчикам то, что я ошибочно считаю чем-то малозначащим? Например, я не пользуюсь IDE и, поэтому, для меня генерация проектных файлов VisualStudio – это пустой звук. Но, наверное, для значительного количества программистов это огромное достоинство CMake: они получают возможность комфортной работы в привычной для себя среде… Опять же, с проектами VisualStudio работает IncrediBuild (из коробки)… И может быть визуальная убогость языка программирования в CMake для многих вовсе не является недостатком… В общем, хотелось бы знать ответ :)

Несколько ссылок на тему build-систем:

PS. Несколько слов об Mxx_ru. В последнее время мой проект развивается “по просьбам трудящихся”. Т.е. новые возможности в нем появляются только когда меня об этом просят. Это не из-за того, что я утратил интерес к проекту, а из-за нехватки времени. Поскольку приходится разрываться между кормящими меня проектами на работе, SObjectizer и Mxx_ru (а ведь есть еще и несколько других важных для меня проектов, в частности, ObjESSty), то жертвовать приходится развитием Mxx_ru. Впрочем, как только появится достаточно стабильная версия Ruby 1.9, я обязательно портирую Mxx_ru 1.4 под нее. Ведь переход на Ruby 1.9 сулит серьезные преимущества. Во-первых, можно надеяться на увеличение скорости работы. Во-вторых, может быть под Ruby 1.9 будет гораздо проще реализовать распараллеливание компиляции больших проектов. Так что пока Mxx_ru жив! :)

PPS. Кстати, кто-нибудь знает, как можно вносить изменения в англоязычную Wikipedia? Там регистрироваться нужно, проходить какую-то процедуру одобрения внесенных на страничку изменений? А то появилось желание добавить Mxx_ru к списку build-систем.

четверг, 14 мая 2009 г.

SourceForge начинает отбор претендентов на Community Choice Award

И я, памятуя, что пока сам не похвалишь, никто не похвалит, номинировал SObjectizer (в категории Best Project)!

Понятно, что больше одного-двух голосов мы не соберем. Но сам факт участия :)

Кстати, если кто-нибудь напомнит хороший проект, который хостится на SourceForge, то я за него проголосую.

среда, 13 мая 2009 г.

Язык Tcl, интересный факт

Оказывается, язык Tcl был использован для системы контроля за нефтяной платформой. Об этом говорит автор языка в своем интервью:

The most surprising thing to me was that people built large programs with Tcl. I designed the language as a command-line tool and expected that it would be used only for very short programs: perhaps a few dozen lines at most. When I went to the first Tcl workshop and heard that a multi-billion-dollar oil platform was being controlled by a half million lines of Tcl code I almost fell over.

Это хорошая иллюстрация к разговорам о том, насколько язык программирования влияет на разработку. Сейчас я думаю, что не сильно-то и влияет. Главным фактором является человеческий фактор. Любой язык будет в чем-то помогать разработчику (статическая типизация, сборка мусора, тотальный контроль за индексами массивов, механизм исключения,…), и будет в чем-то мешать (статическая типизация, сборка мусора, тотальный контроль за индексами массивов, механизм исключений,…) И тут уж от программиста зависит, как он всем этим распорядится. Чему и является иллюстрацией данный факт. Если уж системы контроля на Tcl успешно создаются…

понедельник, 11 мая 2009 г.

Каталог мест отдыха в Белоруссии

В поиске места для отдыха наткнулся на вот этот каталог. Пока больше ничего такого же объемного не видел в Интернете.

Несколько маленьких открытий

Оказывается, VirtualDub легко перегоняет MOV в AVI.

Цифровая мыльница жены пишет видео в MOV-формат. Когда года полтора назад потребовалось перегнать пару MOV-клипов в AVI я убил день в поисках походящего инструмента, но ничего путного не нашел (практически все конвертеры, на которые я натыкался, были платными, а их ворованные версии, обычно, очень глючили).

Вчера опять потребовалось перегнать MOV в AVI. На этот раз я довольно быстро нашел информацию о том, что VirtualDub поддерживает плагины, и что есть плагин, который позволяет читать в VirtualDub MOV-файлы. Подробнее здесь.

Интересная особенность strchr.

В C и C++ есть функция strchr – поиск символа в наборе символов. Был очень удивлен результатом поиска 0-символа во множестве “\\\r\n”. Оказывается 0-символ в этом наборе есть! Почему? А потому, что завершающий 0-символ множества символов так же просматривается функцией strchr. Афигеть!

Подробнее здесь.

Первый раз услышал альбом “Blow by Blow” Джефа Бека.

Есть такой знаменитый гитарист Jeff Beck. На днях довелось прослушать один из его самых знаменитых альбомов “Blow by Blow” 1975-го года (который я, к своему стыду, никогда раньше не слышал). Отличная штука. Особенно последняя композиция альбома – Diamond Dust. Рекомендую.

Оказывается, в Гомеле прошла встреча на высшем уровне!

В преддверии 9-го майя в Гомеле развернулись активные работы по приведению города в порядок. В нашем районе очень шустренько закончили прокладывать теплотрассу вдоль главной улицы. Стало понятно, что в Гомель приезжает наш президент. 6-го майя по всему Гомелю стояли гаишники, несколько улиц было перекрыто. Стало понятно, что президент приехал. Ну и ладно.

А вот вчера вечером я совершенно случайно узнал, что к нам приезжал не один президент, а двое: в Гомеле состоялась встреча Лукашенко и Ющенко. Вот ведь! Вот что значит новости не смотреть! :)