среда, 22 апреля 2009 г.

Опять разное о программировании, музыке и кино

Вновь вываливаю кучу всякого разного…

Программирование…

Разговоры о языке D

Есть такой язык программирования – D. И есть такой сайт – www.linux.org.ru. Забавный сайт с очень неформальной манерой общения. Из-за чего чтение некоторых обсуждений на нем значительно поднимают настроение.

На linux.org.ru есть хорошая традиция – на главной странице сайта публикуются небольшие анонсы наиболее интересных и важных новостей. В последнее время к таким новостям стали причислять и анонсы очередных версий компилятора DMD. И в каждом обсуждении такого анонса обязательно найдутся утверждения типа “D не нужен!” :)

Вот мне интересно: версии DMD выходят с периодичностью в 2-3 недели. Так неужели на linux.org.ru будут с такой же частотой возникать темы с утверждениями “D не нужен”? :)

Что до меня, то я уже смотрю на D по инерции. Когда-то надеялся, что он вот-вот достигнет стабильного состояния и можно будет начать переход на него с C++. Не дождался, плюнул. Как до меня сделали еще несколько моих коллег по RSDN (c-smile, Зверек Харьковский, FR). Похоже – это традиция такая: очередной товарищ смотрит на D как на свой будущий инструмент, ждет стабилизации языка, ждет, ждет, потом плюёт.

Pattern matching мне бы сейчас пришелся ко двору…

Переделываю сейчас кусок C++ной программы. Код вида:

allocate_child_process_result alloc_result =
 allocate_child_process_for( request );
if( alloc_result.is_successful() )
  ...
else
  ...

Раньше alloc_result мог быть либо успешным, либо неудачным. Сейчас нужно добавить третий потенциальный результат – выполнение отложено. Т.е. что-то вроде:

allocate_child_process_result alloc_result =
 allocate_child_process_for( request );
if( alloc_result.is_successful() )
  ...
else if( alloc_result.is_delayed() )
  ...
else
  ...

Но такой вариант, хоть он очень простой и рабочий, мне не нравится. Ведь если со временем появится еще какой-то вариант alloc_result-а, то компилятор не подскажет мне места, где этот вариант не обрабатывается. Т.е. если я забуду подправить код обработки alloc_result-а в каком-то месте, то все – баг в программе.

Здесь бы очень пригодился бы паттерн-матчинг (такой как в Scala). Например, что-то типа:

case class abstract_process_allocation_result_t {};
case class successful_alloc : abstract_process_allocation_result_t { ... };
case class delayed_alloc : abstract_process_allocation_result_t { ... };
case class failed_alloc : abstract_process_allocation_result_t { ... };
...
allocate_child_process_result alloc_result =
 allocate_child_process_for( request );
match( alloc_result ) {
 case successful_alloc => ...
 case delayed_alloc => ...
 case failed_alloc => ...
}

Тогда бы компилятор сам бы указывал места, в которых новый вариант alloc_result-а не обрабатывается.

Обновились библиотеки ACE и POCO

Вышла версия ACE 5.6.9. Разработчики ACE в конце прошлого года забабахали анонсами грядущего ACE 5.7. Который так и не появился до сих пор. Зато версии 5.6.* выходят стабильно. Вот и 5.6.9 появилась. Но еще не пробовал ее, нет времени.

Вчера вышла и очередная версия библиотеки POCO – 1.3.4. В основном это bug-fix релиз, подробный список изменений здесь. После версии 1.3.4 разработчики POCO обещают заняться версией 2.0, которая будет значительно переработана и будет ориентироваться, в том числе, и на новые возможности C++0x.

Использовал POCO в парочке мелких утилиток. Впечатления самые положительные. Возможно, для SObjectizer 5 стоит выбрать именно ее в качестве базовой библиотеки вместо громоздкой и достаточно старомодной ACE.

Музыка

Новый альбом Depeche Mode

На днях Depeche Mode выпустили свой новый альбом: Sounds Of The Universe.

С первого раза не торкнул. Но с Depech-ами у меня это обычное дело: начиная с Violator-а меня догоняет только после нескольких десятков прослушиваний (исключениями были разве что Songs of Faith and Devotion с их совершенно забойными “Walking In My Shoes” и “Higher Love”). Например, в альбоме Ultra мне долго не нравилась их заглавная “Barrel Of A Gun”, зато сейчас она слушается как родная.

Вероятно, с этим альбомом произойдет тоже самое. Случаю его уже второй день и начинает втыкать. Вот, сейчас, например, очень в тему попала композиция “Wrong” :)

Что удивительно – Depeche-вский стиль. Не меняется. Уже почти тридцать лет. И все равно звучит актуально.

Tangerine Dream

Есть, оказывается, такая группа. Tangerine Dream. Исполняет электронную музыку уже более сорока(!) лет – с 1967-го года.

Нашел несколько их сборников: Dream Sequence (1985), The Best Of Tangerine Dream (1989), The Anthology Decades (2008). И альбом 2008-го года Views From A Red Train. Прослушал с удовольствием. А вот один из старых и знаменитых альбомов Phaedra (1974) мне не понравился – не мое.

Вообще-то, на мой вкус, мелодии у них однообразные. Нет таких забойных и узнаваемых хитов, как у Space, Майка Олдфилда, Жана-Мишеля Жарра или Вангелиса. Что-то типа спокойной фоновой музыки. При работе за компьютером вполне себе ничего.

Кино

Юлия Снегирь

Единственное, что есть хорошее в фильме “Обитаемый остров” (в первой части, по крайней мере) – это очень красивая актриса. Юлия Снегирь. Я уже публиковал ее фото из фильма. А вчера наткнулся на еще одну ее фотографию. Мне фотография очень понравилась, жене – нет :)

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

Пираты

Пираты, ворующие фильмы, не останавливаются. Копии, снятые с экрана кинотеатра видеокамерой – это еще цветочки по сравнению с тем, когда фильм воруется еще до окончания создания спецэффектов и монтажа. Вот например, доступный через файлообменные сети фильм “Люди Икс: Начало. Росомаха”. Забавно во время просмотра видеть, как персонаж превращается в недооцифрованный компьютерный манекен:

А тут еще и новости приходят о том, что пособников пиратов осуждать стали. Что вряд ли остановит файлообмен. Я надеюсь :)

Вот уж кому действительно выгодно процветание пиратства – так это Интернет провайдерам. Народ качает пиратский контент, провайдеры в выигрыше :)

Как по мне, так медиа-гигантам давно нужно было менять свою политику. Ну ведь все равно понятно, что воровать будут. Так почему бы не сделать воровство невыгодным для пиратов, а распространение фильмов/музыки через Интернет – выгодным для себя? Размещайте сами в Сети фильмы, и берите деньги с провайдеров. Вот, скажем, у меня unlimit за $20 в месяц. Пусть из этих денег $5 идут продавцам контента. Таких как я только в одной Белоруссии наберется тысяч сто, я думаю. Это значит, что какой-нибудь Warner Bros. будет получать по $500K в месяц от какой-то заштатной Белоруссии.

Вот была бы красота: захотел фильм посмотреть, зашел на сайт Warner Bros., выбрал подходящее для себя качество и размер (700Mb, 1.5Gb, 4.5Gb…), качнул. С нормального сайта, на нормальной скорости. Warner Bros. и Белтелеком получили свою денежку, я – свой фильм. Лепота!

Эх, мечты, мечты…

Кстати, интересно: почему в файлообменниках фильмы, в основном, в XviD или DivX-е ужаты (по крайней мере те, которые по 700Mb и 1.5Gb)? Ужимали бы их в H.264 (MPEG-4 AVC). Тогда в тех же 700Mb качество фильма было бы гораздо выше.

суббота, 18 апреля 2009 г.

О самородкиных, самоделкиных и сломанных крыльях

Вместо вступления…

Когда я вижу сломанные крылья -
Нет жалости во мне, и неспроста:
Я не люблю насилье и бессилье,
Вот только жаль распятого Христа.

В.Высоцкий

Из-за нехватки времени опять смешаю в одном посте сразу несколько разных вещей. Хотя мне кажется, что они тесто связаны друг с другом. Кроме того, в жизни всегда так – все перемешено. Хочется остановиться и сосредоточится на чем-то одном, самом важном. Но это утопия, такой возможности нет, нужно постоянно двигаться вперед, разбираться с кучей вещей, которые все время сваливаются на наши головы…

Запуск программы не фейерверк – его красоту непосвященному не увидеть…

Когда-то я уже говорил, что работа программиста такова, что оценить ее результаты твои близкие далеко не всегда могут. Хорошо с фейерверком – бабахался с ним две недели, потом позвал всю семью, сказал: “А сейчас…” И все увидели, над чем же ты бабахался две недели.

Две недели я со своей командой в авральном режиме приводил в чувства старый и очень ответственный проект. Который волею судьбы оказался в очень неприятном и вонючем месте. Убита уйма сил и нервов, включая три выходных дня. Первая исправленная версия заработала корректно, но отжирала слишком много ресурсов из-за просчета в архитектуре. Вчера вечером довольно-таки спонтанно состоялся боевой запуск второй версии. На реальных деньгах (в прямом смысле этого слова, поскольку система предназначена для обслуживания финансовых транзакциях). Успешно.

Блин. Сейчас, спустя сутки после запуска до меня доходит, что же мы все-таки сделали. И что значат для нас эти сутки устойчивой работы. Это просто трындец. В хорошем смысле слова :)

Объяснить это жене просто нереально. Это же не фейерверк, красота которого видна всем. Блин.

Самородкины, самоучкины, самоделкины…

С детства у меня сформировался пиетет к самородкам, самоучкам и самоделкиным. Наверное, потому, что меня воспитывали родители, детство которых пришлось на войну и послевоенные годы. Которым самим приходилось учиться по жизни. И которые жили в советские времена дефицитов, когда собрать самому кухонную мебель или сменить сантехнику было гораздо проще, чем купить новую или вызвать специалистов. Кроме того, мой отец был фотографом-самоучкой и талантливым самоделкиным с золотыми руками (например, он сам собрал себе маленький токарный станок). Так что я очень уважительно отношусь к самоучкам и самородкам. Более того, в тайне сам бы хотел входить в их число.

Вот что меня подвигло на написание этого текста: выступление Susan Boyle на Britain's Got Talent. Не само феерическое выступление, а эффект, который оно произвело…

Неправильное есть в фуроре, который это выступление произвело. На мой взгляд, это как раз тот случай, когда должно быть жаль времени, потраченного впустую. И, возможно, таланта, который был зарыт в землю.

О чем я сейчас? О том, что, по сути, все, чем располагает человек на Земле – это время. В течении которого мы должны достичь успехов, которые либо помогли бы нам обеспечить себе более-менее нормальное существование (жилье, обстановку, автомобиль, возможность нормального отдыха и пр.), либо же достичь сознания того, что в жизни были достигнуты какие-то нематериальные ценности, которые позволяют нам гордится собой (написанные книги, картины, покоренные горные вершины, совершенные кругосветные плавания).

Если человек наделен от природы какими-то способностями (в данном случае слухом и голосом) то эти способности должны быть развиты и реализованы вовремя. Чтобы начинать карьеру певца в 17-ть лет, а не в 47. Чтобы иметь временной запас на несколько взлетов и падений до тех пор, пока не исчезнет желание этим заниматься. Ну и пока здоровье позволяет.

В данном случае я вижу, как тетка в 47-мь лет публично заявляет, мол я хочу и могу быть профессиональной певицей. А до этого ты где была? Неужели голоса все это время не было? А если был, то что мешало приступить к воплощению своего желания раньше? Чтобы сейчас быть не участником, а судьей в на Britain’s Got Talent.

Странный феномен

В интернете наблюдал несколько раз интересный феномен: если какая-то признанная личность скажет какую-нибудь муть, то обязательно найдется большое количество почитателей этой личности, которые будут сказанную муть защищать. В последнее время наблюдал это в блогах Дмитрия Пучкова (aka Гоблин) и Леонида Каганова. А на днях увидел очередное проявление в RSDN. Там появился опус Криса Касперски о жизни и работе в Южной Корее. На мой взгляд – рядовая запись для заштатного блога (вроде моего). Да еще в стиле и с подробностями, которым не место в публичных форумах (да еще и посвященных программированию).

Но, самое интересное, что данное сообщение набрало удивительно большое количество баллов. А на попытки поинтересоваться “А какого, собственно, x.. здесь появилась эта х....я?” тут же появились защитники с лозунгами “Да все пучком!”. Феномен продемонстрировал свое очередное проявление.

Я было поинтересовался, а что именно толкнуло такого успешного и признанного специалиста, как Крис Касперски (книга которого стоит у нас на книжной полке в офисе), на демонстрацию графомании в RSDN. Но, похоже, все дело в рубеже 33-х лет.

Хочу оставаться многостаночником. Пока хочу.

На том же RSDN Василий Старостин опубликовал свое резюме для критической оценки участниками RSDN (заодно я узнал, на какую сумму в Москве мог бы претендовать я сам :), поскольку опыт местами весьма схожий). В одной из рецензий Василию порекомендовали определиться, что для него важнее: позиционировать себя как разработчика, архитектора ПО или менеджера проектов. Наверное, с точки зрения современных больших контор по разработке ПО это правильно, вряд ли в больших шарагах нужны “и швец, и жнец, и на дуде игрец”…

Однако я рад, что сейчас на работе я как раз занимаюсь всем понемножку. И архитектуру проектирую, и программирую, и тестирую, и документирую. Иногда внедряю, иногда командую. Каждое из этих дел я делаю не очень хорошо. Зато именно сочетание всех этих качеств в лице меня, такого всего единственного… :) В общем, пока я считаю, что это мой козырь. И я рад, что сейчас у меня есть работа, на которой этот козырь востребован.

четверг, 16 апреля 2009 г.

Кстати, о языке Curl

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

В первый раз я услышал о языке Curl в 2001-м году. В белорусской компьютерной газетке “Компьютерные вести” промелькнула очень коротенькая заметочка:

Создатель Всемирной Паутины Тим Бернерс-Ли предложил использовать разработанный Дэвидом Кранцем язык Curl (выглядящий как смесь C, Tcl и Lisp) в качестве замены комбинации HTML, Java и JavaScript.

(чуть позже в этой же газете тема нашла свое продолжение – сейчас забавно читать тот прогноз)

Мне захотелось узнать, что же это за Curl такой. Как раз тогда я оказался в EPAm-е и, поэтому, не было проблем с поиском Curl-а в Интернете (нужно отметить, что в начале 2001-го более-менее нормальный доступ в Интернет в Гомеле имели далеко не все организации). Так я нашел небольшой отчетик об экспериментальном языке Curl, который был разработан в MIT. Что-то типа вот этого: Curl: A Gentle Slope Language for the Web. А уже потом – сайт curl.com, с которого загрузил и среду исполнения, и средства разработки Curl.

Не то, чтобы меня впечатлил сам язык. Хотя сама идея о том, чтобы сделать и использовать специально предназначенный язык для Web-приложений вместо жуткой смеси из Java, HTML и JavaScript (с чем я тогда столкнулся в EPAm-е) казалась мне очень здравой. Помнится, я сильно недоумевал, почему же эта идея не выстрелила (это теперь-то я знаю, что совершенство технологии к ее широкой востребованности имеет очень и очень посредственное отношение).

Удивили меня в языке несколько вещей. Во-первых, это был, наверное, первый язык, в котором я увидел встроенные типы данных для различных метрических величин. Например, можно было записать один метр как 1m. И это значение нельзя было присвоить переменной типа Time. Такие вещи были зашиты в язык:

{let a:Angle = 2deg} || 2 degrees
{let c:Distance = 1m} || 1 meter
{let d:Mass = 6g} || 6 grams
{let f:Time = 5s} || 5 seconds

А в документации по Curl была подколка в адрес разработчиков программного обеспечения марсианских спутников – мол, если бы они использовали Curl, одним кратером на Марсе было бы меньше:

Because Curl language quantities include the unit of measurement as part of the value, it is easy for you to work with values that have different units of measurement. For example, you can easily compare quantities such as four centimeters (4cm) and two inches (2in). The translation between measurements systems is transparent. Had a certain government agency used the Curl language, there would probably be one less crater on Mars...

Еще меня впечатлило, что язык разметки и язык программирования были очень хорошо выражены в едином синтаксисе. Более того, оба эти языка были настолько хорошо увязаны друг с другом, и сама концепция Curl была настолько ориентированной на это дело, что разработчик получал возможность определять собственные теги разметки, которые были обычными конструкциями языка. Например, если нужно было объявлять параграф, в котором текст был бы написан красным цветом, можно было либо использовать стандартный тег {paragraph} и параметр color:

{paragraph
  color="red",
  This is a text }

или же определить свой собственный тег {red-font-paragraph} (который бы использовал {paragraph} и color внутри себя):

{define-text-format red-font-paragraph as paragraph with
  color="red"}
{red-font-paragraph This is a text }

Все это было насколько просто и элегантно по сравнению с JSP/JavaScript (с которыми тогда бодались мои коллеги), что это впечатляло. Хотя ничего нового в этом не было – в Lisp-е и TeX-е такие приемы уже давно были повседневностью.

Еще очень меня поразила такая возможность Curl-а, как передача фрагмента кода как параметра в функцию. Помнится, там был какой-то специальный синтаксис для такого рода аргументов. И на этом деле в документации к Curl-у был построен прикольный фокус. Сама документация в среде разработки Curl-а (если не ошибаюсь, называлась она Surge Lab) была выполнена в виде обычных Curl-документов. И местами в этих документах встречались небольшие окошки. Внутри окошек располагался фрагмент программы-примера и кнопочка “Исполнить”. Нажимаешь на кнопочку – пример выполняется и ты видишь его результат:

А когда заглядываешь в исходник документации – видишь там вызов какого-то тега, скажем, {example}, с тем самым кодом примера внутри. Все было просто – в тег {example} код передавался как параметр.

В 2001-м году Curl был во младенческом возрасте. Тогда как раз только образовалась компания Curl Corp. (президентом которой, если мне не изменяет мой склероз, был тот самый Тим Бернерс-Ли). И было понятно, что в ближайшее время Curl не станет заметным игроком. Но я надеялся, что заложенная в него замечательная идея быстро обеспечит ему успех. Однако, все оказалось не так просто. Curl Corp. был продан и в конце-концов им завладели японцы. Которые, надо полагать, хорошо поняли, что на просторах Интернета Curl-у ловить нечего, зато есть неплохие шансы в Интранет-проектах. Судя по тому, что сейчас пишут на сайте Curl-а, разработка внутрикорпоративных информационных систем является основной нишей Curl-а. И, похоже, Curl там постепенно получает признание. Что лично меня радует, т.к. неприятно видеть, как хорошие технические идеи погибают под давлением различных исторических и политических факторов.

В истории с Curl-ом есть и вторая линия романа. В процессе знакомства с языком я больше всего впечатлился тому простому факту, что на самом языке можно было очень удобно и просто описывать данные для программы. Например, тогда мне приходилось делать на XML описания Web-приложения. Т.е. приложение на Java, а конфигурация для его развертывания пишется на XML. Читабельность которого гораздо ниже плинтуса. Вообще, маразм по запихиванию XML везде и всюду заслуживает отдельного разговора… Но вернемся к Curl-у. На нем тоже самое описание выглядело, как мне казалось, на пару порядков проще и компактнее, чем на XML. О чем я и написал (в приступе восторга от собственного открытия) профессору Стиву Уорду (Steve Ward), курировавшему эксперимент с Curl-ом в MIT. И он даже мне ответил: мол да, описание на Curl выглядит симпатичнее XML.

Вот тогда я и попал на крючок Curl-овского синтаксиса. Настолько, что сделал свою маленькую библиотечку для работы с конфигурационными файлами в синтаксисе Curl-а (под названием Cls – Curl Like Syntax). Ее первую версию я написал на C++ в 2001-м. С тех пор практически во всех моих C++ных программах конфиги оформляются в Curl-синтаксисе. Да и не только в C++ных, т.к. я портировал ее и под Ruby – ClsRuby.

Вот, например, в SObjectizer можно отсылать сообщения глобальных (и не только) агентов через SOP протокол в приложение через коммуникационный канал с помощью специальной утилиты so_send_stdin. Эта утилита воспринимает данные в Cls-формате:

{send-msg
 {agent aag_3::smpp_smsc::bserver.trx::a_channel }
 {msg msg_imit_deliver }
 {field m_count {uint-stream 1 } }
 {field m_sequence_number {uint-stream 12 } }
 {field m_data
  {byte-stream 0x06 0x00 0x04 0x80 0x81 0x82 0x83 0x03 0x04 0x05 } }
 {field m_source_addr {string-stream "7926XXXXXXX" } }
 {field m_dest_addr {string-stream "YYYYYY" } }
 {field m_esm_class {uint-stream 0x40 } }
}

send
exit

Что интересно. Как программисты, так и не программисты, осваивают Cls-формат очень быстро и без проблем. Либо же я просто не замечаю их жалоб ;)

В общем, для меня Curl стал отличным языком для конфигурационных файлов. Гораздо более удобным и практичным, чем XML, YAML или JSON. Вот какая вот история.

PS. Да, я уже знаю про десятое правило Гринспуна об половинчатой и глючной реализации Lisp-а в любой нетривиальной C/C++ программе. Я думаю, что ко мне и Cls оно не имеет отношения. Хотя, говорят, оно распространяется даже на тех, кто в него не верит :)

вторник, 14 апреля 2009 г.

Интересное интервью с разработчиком языка Falcon

В рамках серии The A-Z of Programming Languages появилось интересное интервью с Джанкарло Николаи, разработчиком скриптового языка Falcon.

В первую очередь, интервью отличается (на мой взгляд) от предшествующих. Поскольку посвящено подробному обсуждению причин, побудивших Николаи на разработку собственного языка, и целей, которые им преследуются. Т.е. речь идет не о каких-то давних воспоминаниях и не о текущих взглядах на жизнь конкретного человека. А о процессе развития живого и растущего проекта. Такие вещи меня сильно впечатляют.

Но, пожалуй, больше всего мне понравилось очень здравое и взвешенное описание причин, по которым Николаи решил использовать в реализации Falcon-а C++, а не C:

I like OOP and I like the power of C. When I decided to go C++ for Falcon, I was positive that I would have used C for the low level stuff and C++ classes to shape higher concepts. All the applications I had to script were C++, or could integrate with C++. Also, I was told by a friend of mine working in the gaming industry that Virtual Calls was actually more efficient than switches, and we have lot of them in a scripting language. I tested the thing out for myself, and it turned out that modern processors are performing really well in presence of Virtual Calls, so many of the common problems were usually resolved with complex ifs, and switches could be resolved with Virtual Calls instead.

At the beginning I used also STL, which is usually much more performing than any dynamic typing based library (STL maps are at least 10 per cent faster than Python string dictionaries), but that carried on a relevant problem of interoperability with other programs. Falcon was also meant to be a scripting engine, and applications often have different ideas on which version of the STL they would like to use. Moving STL across DLLs is quite hellish and it's a deathblow to the binary compatibility of C++ modules (already less stable than C module binary compatibility by nature). Also, STL caused the code to grow quite a lot, and a lot more than I wanted; so, I temporarily switched back to dynamic typed structures, which are slower, to be sure to clear the interface across modules from external dependencies.

Recently, having found that new compilers are extremely efficient on the fast path of exception raising (actually faster than a single IF on an error condition), I have introduced exceptions where I had cascades of controls for error being generated deep inside the vm.

In short, Falcon uses C++ where it can bring advantages in term of speed and code readability and maintainability, while still being C-oriented on several low-level aspects.

После длительного участия в священных войнах на профессиональных форумах, такие слова воспринимаются как бальзам на душу. А то уже очень неприятно наблюдать помойки, вроде обсуждения выхода новой версии компилятора FreePascal.

Ну и сам язык, Falcon, после прочтения интервью заинтриговал. Создан с прицелом на высокую скорость исполнения и легкую интеграцию в host-приложение (в том числе, как я понял, удобное отображение внутренних структур host-приложения на объекты Falcon-а). Года полтора назад мне пришлось заниматься добавлением возможности скриптования в свой большой C++ный проект. Тогда после анализа возможности интеграции Ruby (очень медленный), Python (специфический синтаксис) и Lua (очень быстрый) я выбирал между Lua и собственной реализацией языка. Выбрал, в итоге, собственную реализацию, поскольку благодаря Curl-подобному синтаксису там было просто реализовывать предметно-ориентированные языковые конструкции. Хотя, конечно, читабельность if-ов и switch-ей пострадала. Если, со временем, придется сменить собственный велосипед на более традиционный скриптовый язык, то обязательно рассмотрю Falcon.

суббота, 11 апреля 2009 г.

Накопилось разное

Неделю назад ввязался в очередной безнадежный проект. За очень небольшой отрезок времени нужно привести в чувство старую разработку, которая просела под тяжестью накопившихся в ней правок и заплаток. В связи с чем пришлось отложить и свой блог, и занятия английским, и работу над седьмой бетой SObjectizer… Но вот сегодня, проснувшись слишком рано (поскольку очередную ночь снятся сны на рабоче-производственную тему), решил законспектировать разные мысли, которые накопились за последнее время.

Леонид Каганов (вообще) и ядерная энергетика (в частности)

Есть такой писатель-фантаст, Леонид Каганов. Известный (как оказалось) блоггер под псевдонимом lleo. Пару раз ловил ссылки на несколько его замечательных блог-постов (самым шедевральным, помнится, был про Маринок из банков). Поэтому подписался на его RSS. Но почитав его блог в течении нескольких месяцев решил больше не тратить на это времени.

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

Но это еще цветочки. Ягодки были незадолго до этого, когда он обсуждая маразматичность “Дня Земли” (с публичным отключением на час подсветки некоторых зданий в Москве) принялся защищать ядерную энергетику. Как самую экологически чистую. Как единственную надежду человечества в ближайшем бедующем. И как самую безопасную. Ага.

Не буду спорить ни по поводу экологичности, ни по поводу альтернатив ядерной энергетики. Ну не специалист я. А вот безопасность ядерной энергетики – это тема актуальная. Поскольку мой родной город Гомель, в котором я живу, в некоторой степени оказался причастным к последствиям Чернобыльской аварии…

Каганов утверждает, что Чернобыльская авария не была настолько тяжелой, как об этом принято говорить. Что даже в Союзе были тяжелее. И что это, мол, доказывает какая-то статистика по случаям рака щитовидной железы у ликвидаторов. Не знаю, о какой статистике идет речь. У нас в Белоруссии вообще не очень принято распространять информацию о последствиях катастрофы на ЧАЭС… Но я знаю другие вещи.

Например, где-то в 1994-м одна моя знакомая рассказала, что ее мама, работавшая акушером в Речице, наблюдала увеличение количества врожденных уродств после 1986-го года.

В Гомеле несколько лет назад начал работать Республиканский Центр Радиационной Медицины. Не в Минске, не в Бресте или Гродно. А в Гомеле.

Я с ходу могу вспомнить восьмерых моих родственников и родственников моих знакомых, которые умерли в Гомеле от рака за последние пятнадцать лет.

Такие вот дела. Люди вообще любят думать, что они вот прямо сейчас знают все о будущих последствиях своих решений. Потом, правда, оказывается, что это далеко не так. Но это уже расхлебывают другие поколения. А деятели, типа Каганова… Многие трындеть горазды, но некоторые гораздее…

Суровые фильмы

Посмотрел недавно продолжения фильма Пир (Feast) – Пир 2 и Пир 3 (Feast-2 и Feast-3). Начатое в первом фильме действо доведено до апофеоза – монстры, жертвы монстров, потоки крови и спермы, горы кишок и оторванных конечностей :) Но не торкает :))

Первый фильм – это очень классный и качественно сделанный стеб над фильмами ужасов, в которых компашка случайно оказавшихся в каком-то богом забытом месте, вынуждена противостоять невесть откуда взявшихся монстров. Меня больше всего впечатлили стоп кадры, в которых дается краткая характеристика конкретного персонажа. Например: “Герой. Готов надрать задницу кому угодно. Шансы на выживание – единственный выживший”. После чего этой герой погибает дурацкой смертью через несколько секунд.

Зачем снимали продолжение – не понятно. Ничего нового там не появилось. Единственный хороший момент – это когда в конце третьей части выживших блондинку-красотку и циркача-карлика затаптывает проходящий мимо огромный человекоподобный робот. Откуда роботы? А фиг знает! Зато очень неожиданно и очень в духе всего предыдущего абсурда.

Совсем, совсем другое впечатление производит действительно суровый фильм Райское озеро. Влюбленная пара приезжает отдохнуть на озеро. Пересекаются с местными тинэйджерами. В результате он гибнет. Она убивает двоих подростков. И попадает в руки их родителей.

Жена после просмотра попросила больше таких фильмов не приносить. Т.к. сюжет уж очень реалистичный.

Размышляя после фильма, поймал себя на мысли о том, что в подобных ситуациях (когда сталкиваешься с проявлением силы и агрессии), есть всего два выхода – либо бегство (что разумно), либо же готовность дойти до самого конца. Полумеры в виде угроз не помогут. Либо ты готов убить (быть убитым), либо нет. Если нет, не пытайся казаться крутым. Герои фильма были не готовыми, но вначале пытались быть крутыми…

Да и вообще, стремно отправлять в романтическое путешествие без пары автоматов Калашникова.

Продается новый дом, срочно, не дорого :)

Так уже вышло, что моя сестра уже несколько лет живет в Италии. В пригороде Неаполя. Помойка еще та. Причем в прямом смысле слова.

Сестра очень хочет оттуда уехать. И один из фантастических планов на эту тему – чтобы ее муж купил здесь домик. В связи с чем сестра нашла в Интернете доску объявлений о продаже домов в Гомеле. Среди прочих там было объявление о продаже нового двухэтажного дома в нашем районе. Дом продается срочно и недорого – всего $100K. Сестра говорит, что по итальянским меркам это дорого. А у нас – нет. Практически даром, ага.

В Гомеле есть несколько “бедняцких” райончиков. С двух-трехэтажными коттеджами за высокими каменными заборами. Раньше меня занимал вопрос о том, откуда берутся деньги на строительство таких хором. Сейчас я не понимаю, почему имея такие деньги люди строят дома у нас, в постчернобыльском Гомеле? А не где-нибудь в северной Италии или Новой Зеландии. Вопросец, однако. Как и вопрос о том, хватит ли у меня самого когда-нибудь духу слинять из Гомеля куда-нибудь, где меня нет и где (поэтому) хорошо :)

А я и не задумывался…

Что слушаю музыку уже пожилых людей. Вангелис, оказывается 1943-го года рождения. Жан-Мишель Жарр – 1948-го. Майк Олдфилд – 1953-го. Роджер Уотерс – 1943-го. Роберт Гилмор – 1946-го. Да и что там классики – группе Depeche Mode через два года будет тридцатник.

А ведь люди творят до сих пор. Уотерс в 2005-м даже оперу выпустил, а Олдфилд в прошлом году – свой первый альбом классической музыки. И так хочется, чтобы они еще что-нибудь написали!

Безлимитный интернет и маленькие компьютеры

Подключился к безлимитному интернету. Хоть и дорого (60K BYR или ~700RUR), и медленно (128KB/s), но здорово! Как еще можно было познакомится с оперой Роджера Уотерса Ca Ira и неизвестным мне ранее альбомом Жарра Interrior Music, который был выпущен тиражом всего лишь в 1000 экземпляров :)

Теперь проблема. Когда я уезжаю на работу и забираю ноутбук, то канал простаивает! На покупку личного компьютера домой меня всегда жаба давила. Но тут уже нужно что-то решать :)

Жалко, что у нас в продаже нет вот таких девайсов (*):

или вот таких (**):

Вот было бы самое оно! Поставил себе в углу стола и пусть качает себе.

Пока же единственным приемлемым вариантом выглядит приобретение Asus Eee PC 90x. Модели с Celeron-M и SSD диском на 20Gb в Москве сейчас стоит в районе 8.5-9.5K RUR.

Вот оно как у Гугля-то!

Вы видели как выглядят дата-центры Гугля? Я тоже не видел, пока не наткнулся на это. Блин, электрическое и гидравлическое хозяйство покруче, чем у небольшой фабрики времен Советского Союза. Чего только не построят, чтобы написанные программистами программы работали :)

Scala и Twitter

В последнее время начинается раскручивание информации о том, что Scala успешно применяется в различных проектах. Хотя, может это у меня такое впечатление, т.к. я подписан на Scala-вский RSS :)

Одной из самых нашумевших историй стало использование Scala в реализации системы обмена сообщениями в Twitter. Сначала разработчики Twitter использовали Ruby, но когда Ruby-новые тормоза стали непреодолимыми, переписали самую важную часть на Scala и получили прирост производительности в разы. Что и стало предметом ряда новостей.

Очень мне понравилась реакция на это дело со стороны Дейва Томаса (автора нескольких книг по Ruby):

At the kinds of volumes that Twitter handles (and with what I assume is a somewhat scary growth curve), Twitter needs  to improve concurrency—it needs an environment/language with low memory overhead, incredible performance, and super-efficient threading. I don't know if Scala fits that particular bill, but I know that current Ruby implementations don't. It isn't what Ruby's intended to be. So the move away is just sound thinking. (I suspect it also took some courage.) I applaud Alex and the team for this.

Instead of defending Ruby when it's clearly not an appropriate solution, let's think about things the other way around.

The good folks at Twitter started off with Ruby because they wanted to get something running quickly, and they wanted to experiment. And Ruby gave them that. And, what's more, Ruby saw them through at least two rounds of phenomenal  growth. Could they have done it in another language? Sure. But I suspect Ruby, despite the occasional headache, helped them get where they are now.

And now they've reached the status of world-wide wunderkind, it's time to move on.

I for one wish them luck. I look forward to the day when our online store reaches the kind of size where we have to move away from Rails. I'll tweet the fact with a tear in my eye, while my yacht sails me off to the sunset.

четверг, 2 апреля 2009 г.

Из непонятого: alias this в языке D 2.0

В преддверии 1-го апреля Вальтер Брайт выпустил новые версии своего компилятора языка программирования D. Списки изменений для версий 1.0 и 2.0 можно посмотреть здесь:

http://www.digitalmars.com/d/1.0/changelog.html
http://www.digitalmars.com/d/2.0/changelog.html

В язык D 2.0 была добавлена фича, которую я раньше нигде не видел: alias this. Как я смог понять из документации, эта конструкция позволяет переадресовать все вызовы, которые компилятор не смог связать с самим объектом, на указанный атрибут этого объекта. Вот пример из документации:

struct S
{   int x;
    alias x this;
}

int foo(int i) { return i * 2; }

void test()
{
    S s;
    s.x = 7;
    int i = -s;   // i == -7
    i = s + 8;    // i == 15
    i = s + s;    // i == 14
    i = 9 + s;    // i == 16
    i = foo(s);   // implicit conversion to int
}

Здесь получается, что большинство операций над экземпляром s на самом деле переадресуется его атрибуту x. Т.е. такая конструкция позволяет легко выдать экземпляр/объект структуры/класса за экземпляр другого типа. Всего лишь с помощью alias this. В C++ для этого пришлось бы определять кучу операторов. А в D – только alias this :)

Вероятно, данная конструкция была введена в D из-за каких-то прагматических соображений. Но я не могу понять каких. Равно как не могу сообразить, в каких случаях мне мог бы понадобиться подобный прием.

Но вот есть у меня серьезное подозрение, что понимаемость D-шных программ, в которых данный трюк используется, основательно снизится. И это все в языке, который декларировался как более простой и логичный C++. И если C++ ругают за то, что в результате своего развития он превратился в клоаку очень разрозненных идей и концепций, то у D есть все шансы переплюнуть C++ в этом отношении.

понедельник, 30 марта 2009 г.

Воскресное, разное…

Спортивное…

Закончился кубок мира у биатлонистов. Жалко. Очень интересно смотреть, очень непредсказуемый вид спорта. Немного жаль Томаша Сикору – ветеран по ходу сезона лидировал в Кубке Мира. Но Бьердален, конечно, велик. Казалось бы, и сезон начал не шатко, ни валко. И конкуренты сильные, тот же Сведсен из той же сборной Норвегии. Но, как же человек подвел себя к Чемпионату Мира! Великий спортсмен.

У женщин, в отличии от мужчин, до самой последней гонки ситуация в общем зачете была интригующей. Промежуточный лидер общего зачета, Хелена Юнссон, была в незавидной ситуации. После вычета худших гонок у нее оказывалось меньше очков, чем у Кати Вильхельм. Поэтому Юнссон обязательно должна была выигрывать у Кати Вильхельм, причем обязательно несколько мест. До самого последнего огневого рубежа Юнссон шла сразу вслед за Вильхельм. Наверное, специально, чтобы создавать немке напряжение. И на последнем рубеже Вильхельм ошиблась, а Юнссон была точна.

На финише Юнссон была второй, а Вильхельм – шестой. И в итоге оказалось, что по результатам сезона у Юнссон и Вильхельм одинаковое количество очков. Но Юнссон все же выиграла Большой Хрустальный Глобус, т.к. у нее больше побед.

Вот так вот. Вильхельм, как и Сикора, лидировала по ходу сезона. Но несколько неудачных выступлений на последних этапах – и Кубок Мира уплыл… Но Вильхельм, в отличии от Сикоры, очень и очень здорово выступила на Чемпионате Мира (два золота – это не хухры-мухры).

Забавно, что Малый Хрустальный Глобус в индивидуальных гонках, где очень важна точная стрельба (каждый промах – это целая штрафная минута), получила Магдалена Нойнер. Молодая, но уже титулованная спортсменка, отличающаяся очень-очень быстрым ходом и очень-очень нестабильной стрельбой. Такие вот казусы.

Иногда кажется, что развитие и сопровождение долгоживущего программного проекта (особенно Open Source проекта) очень напоминает длительные спортивные соревнования, вроде Кубка Мира у биатлонистов. Точно так же нельзя сдаваться, нужно верить в победу и идти к ней. Даже временами сцепив зубы.

Еще начался сезон автомобильных гонок Формулы-1. Что-то странное со мной произошло – первая гонка не торкнула. Вообще. Даже не смотря на то, что была интересной, с обилием обгонов, аварий и непредсказуемым финалом (чего стоит хотя бы сход шедших на втором и третьем местах гонщиков за два круга до финиша). Но не торкнуло. Вероятно, этап боления за Формулу-1 в моей жизни подошел к концу. А начиналось все году в 1993-м, когда ее только транслировать по РТР начали. Практически с первых гонок я болел за Михаэля Шумахера… Удачно выбрал, за кого болеть, нужно сказать :) После ухода Шумахера болел за Кими Райконена. Сейчас ни за кого не болею. Наверное, поэтому и Формула уже не интересна – ну гоняются и гоняются. Нет того напряжения, которое возникает, когда ты до последней минуты ждешь какого-то чуда. Которое, надо сказать, случается. До сих пор помню гонку, в которой Шумахер был безнадежно вторым, а Мика Хаккинен шел к своей победе. И вот, метров за 800(!) до финиша Хаккинен глохнет, а Шумахер выигрывает! Вот это было да! Впрочем, тогда и трава была зеленее, и вода мокрее… :)

Велосипедостроитель, блин! :)

Где-то неделю назад я уже сказал свое “Фи” изобретателям современных сливных бачков. Понапридумывают, блин, хитрых впускных клапанов. Потом фиг знает, как их исправить, когда они протекать начинают.

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

В результате решил повелосипедостроить сам. Чай не хуже этих неизвестных мне горе-конструкторов :)

Итак, берется обычный входной клапан для боковой конструкции:

У него очень простой принцип – по мере заполнения бачка водой поплавок начинает поднимать рычаг и входное отверстие перекрывается. Но этот клапан должен устанавливаться горизонтально. По замыслу конструкторов. А вот по моему:

его можно устанавливать уже вертикально. Наверное, можно было еще проще сделать, но и так заработало.

Вообще, изготовители такого клапана тоже редиски. Мало того, что рычаг с корпусом они соединили при помощи обычного гвоздя. Так еще и пластмассы для резьбы пожалели – нет чтобы миллиметров на 5-10 длиннее резьбу сделать. Экономисты, блин! Так что увижу подобный клапан с более длинной резьбой – куплю и переделаю.

Пока возюкался с этим клапаном и сливным бачком, наговорил матов больше, чем за всю предшествующую неделю. Видимо, некоторые занятия заставляют менять свой словарь :)

Рабочее, творческое…

Накануне выходных удалось-таки синтезировать и оформить идею о том, как в SObjectizer обойтись без внешних DSL, но при этом получить довольно прозрачный C++ код и хороший контроль за корректностью описаний агентов.

А в воскресение получилось-таки записать идею о возможном способе контроля за перегрузками агентов и о новом взгляде на приоритеты событий.

Похоже, что очертания SObjectizer-5 становятся все более и более отчетливыми. Таки становятся :)


Чу! Пока писал, уже понедельник начался :)