пятница, 3 сентября 2010 г.

[prog] Узнал о web-сервере Mongrel2

Несколько лет назад у меня был своеобразный кризис – хотелось уйти с C++ на что-нибудь другое (сухим остатком этого кризиса остались несколько страничек на narod-е). Одной из причин данного кризиса было то, что я распробовал вкус замечательного языка Ruby. Что вылилось не только в Mxx_ru, но и в некоторое количество очень важных утилит, использующихся внутри компании до сих пор. На Ruby в 2007-2008 я программировал, временами, даже больше, чем на C++. В то время я был больше Ruby-истом, чем C++ником :)

Но у Ruby тогда был один фатальный недостаток. Из всех популярных скриптовых языков (Perl, Python, Tcl, Ruby) он был самым медленным (да и, насколько я могу судить, сейчас он такой же) . Для каких-то задач это не играло существенной роли – что толку оптимизировать код программы, если 99% времени ее работы уходит на ввод-вывод или обращения к БД. Но все равно, осадочек-то оставался.

Поэтому в то время очень большой восторг вызывали любые Ruby-новые продукты, о которых говорили, что они быстро работают. И, если не ошибаюсь, самым знаковым из них стал для меня web-сервер Mongrel. Маленькая шустрая библиотечка на Ruby (вот хоть убей не помню, были ли в ней какие-то части на C или нет). Да еще и, по слухам, очень секьюрная – парсер HTTP там был написан не вручную, а сгенерирован по грамматике с помощью генератора парсеров Ragel, что не позволяло сломать сервер неправильно сформированными запросами.

Если мне не отшибает склероз, где-то в 2008-м мне попадались заметки в блогах о том, как RoR-приложения запускались на Mongrel вместо lighttpd и чуть ли не взлетали :) В общем, для меня Mongrel был таким классным флагом, которым можно было поразмахивать, чтобы доказать, что Ruby не сосет, а его просто не умеют готовить (ну почти как у Erlang-егов знаменитый AXD301). Хотя сам лично я Mongrel-ом не пользовался.

Но время шло, объемы данных в наших задачах росли, требования ко времени реакции и обработки все время ужесточались. И как бы мне не нравился Ruby, становилось понятно, что на Ruby далеко не уедешь. Поэтому потихоньку я из Ruby-иста опять превратился в C++ника. Ничего не поделать – против лома нет приема :)

А вчера по RSS приходит новость о первой версии сервера Mongrel2. Он уже не на Ruby написан, а на C. Ничего не поделаешь – против лома нет приема.

Интересна архитектура web-приложений, которые должны разрабатываться для Mongrel2. Логика выносится во внешние процессы, которые взаимодействуют с процессом web-сервера посредством ZeroMQ. С одной стороны – это хорошо. Более того, мне хочется, чтобы со временем для таких же целей вместо ZeroMQ использовался SObjectizer.

Но, с другой, ведь web-приложение тогда будет завязано только на Mongrel2 (я далек от Web-разработки, но что-то не приходилось слышать, чтобы другие сервера предоставляли ZeroMQ-шный интерфейс для web-приложений). Лично мне кажется, что это не очень правильно. Ведь когда пишешь обычный CGI, то без разницы, будет ли оно работать под apache, lighttpd или IIS-ом. Появляется свобода и некоторая гарантия того, что если под apache случится жопа, то можно будет пересесть на lighttpd или еще что-нибудь. А вот куда с Mongrel2 пересядешь?

четверг, 2 сентября 2010 г.

[prog.thoughts] Как лучше оформлять библиотеки для SObjectizer?

Не очень приятно раскрывать карты раньше времени, но есть важный вопрос, на который нужно найти хороший ответ.

В результате расширения моей команды весной этого года (части первая и вторая этой эпопеи) появились ресурсы на продолжение работ по SObjectizer со товарищи библиотеками :) Что привело к тому, что у нас разработаны новые версии SObjectizer-библиотек, которые мы хотим опубликовать на SourceForge. Но!

Лично мне кажется, что принятая сейчас форма публикации SObjectizer-библиотек не удобна для потенциальных пользователей. Например, если кто-то захочет использовать so_sysconf и so_alt_channel, то ему нужно будет скачать два архива (плюс еще архив с самим sobjectizer-ом), взять оттуда нужные подкаталоги, скопировать их куда-то к себе и совместить должным образом с каталогом SObjectizer (чуть подробнее эта процедура описана здесь).

Нужно упрощение. К сожалению, для C++ пока нет таких же продвинутых и удобных систем управления пакетами как, например, RubyGems или Maven2. Поэтому придется придумывать какое-то частное решение.

Сейчас я думаю распространять и сам SObjectizer, и все опубликованные библиотеки одним архивом, в котором есть все (по аналогии с тем, как это сделано в Boost и ACE). Например, архив so_bunch_20100910.tar.bz2, в котором имеется следующая структура:

so_bunch_20100910/
`-dev/
  `-ace/
  `-ace_lib_distrib/
  `-auto_ptr_3/
  `-cls_3/
  `-cpp_util_2/
  `-gemont_1/
  `-lib/	
  `-oess_1/
  `-smart_ref_3/
  `-so_4/
  `-so_alt_channel_2/
  `-so_log_1/
  `-so_sysconf_3/
  `-so_sysconf_3_meta_action/
  `-so_sysconf_breakflag_handler/
  `-so_sysconf_channel_common/
  `-so_sysconf_daemon/
  `-so_sysconf_gemont_2/
  `-so_sysconf_ichannel/
  `-so_sysconf_log_2/
  `-so_sysconf_ntservice/
  `-so_sysconf_ochannel/
  `-so_sysconf_process/
  `-test/
  `-samples/

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

Так же, я думаю, мы попробуем выпустить вариант со скомпилированной под win32 версией (под MSVS 2008). Как минимум, в Release-варианте. Может быть еще и в Debug-варианте.

Вот такие идеи. Собственно вопрос – нужно ли всем этим заморачиваться? Или есть какой-то другой способ?

[prog] Вышел ImgBurn 2.5.2.0

Вчера, 1 сентября, вышла очередная версия маленькой, но очень функциональной программки для записи CD/DVD/BluRay ImgBurn 2.5.2.0.

В списке изменений в основном bug-fix-ы и несколько маленьких дополнений.

Самый главный недостаток – отсутствие поддержки multisession – пока еще не устранен. Может быть, со временем…

среда, 1 сентября 2010 г.

[life; work] А ведь и со мной через несколько лет будет так же

За девять лет работы в Интервэйл раза четыре доводилось собеседовать программистов намного (больше чем на 10, а иногда и на 30 лет) старше меня. В одном случае сам соискатель решил с нами не связываться, а в остальных отрицательные ответы давал я. Старался быть объективным.

Конечно, от возраста абстрагироваться невозможно совсем, поскольку есть такое дело, как “глаза горят”. У молодых горят чаще и ярче. Молодого проще увлечь идеей, которая выстрелит разве что лет через пять-шесть. Меня и самого пятнадцать лет назад так заарканили. С опытными людьми такие вещи практически не проходят. Вот предложи мне сейчас броситься с головой в какой-нибудь прожект (вроде SObjectizer-а, только совсем в другой области) и я буду мало того, что сильно думать, так еще и изначально скептически этой затее относиться. Так мне еще 37, а не 47 и уж тем более не 57.

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

Тем не менее… Осадочек-то остается. Лет через 10-15 на собеседованиях и я буду выглядеть так же. И какой-нибудь молодой орел (возможно даже гораздо более толковый, чем я в его годы) будет смотреть на меня и думать: “Ну и что мне с тобой делать, дядька?”

Почему-то вспомнилось (это эпитафия на одной из могил Александро-Невской Лавры):

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

PS. Решения об увольнении или об отказе хорошим людям в приеме на работу не проходят без последствий. Как-то сразу чувствуется, что еще пять минут ты был одним человеком, а сейчас, после произнесенного “нет” уже изменился. Слегка, но сам-то ты это чувствуешь.

вторник, 31 августа 2010 г.

[life.blog] Можно ли снизить свою позицию в Google по определенной фразе?

Я слышал, что существуют фирмы, спецализирующиеся на поднятии заказанных сайтов в поисковых результатах Google/Yahoo/Яндекс и др. И даже неплохо живущие фирмы. Но вот у меня сейчас другая ситуация – я хочу, чтобы по определенной фразе меня вообще не было видно в результатах поиска. Поскольку вот это уже слегка маразмом попахивает:

Та самая злополучная фраза

Из 2.5 миллионов результатов поиска моя скромная заметка об этом человеке оказалась на четвертом(!) месте. Опередив даже его собственный сайт в доменной зоне com. Афигеть. Теперь страшно даже имя и фамилию этого человека у себя упоминать :/

[blog] Второй день блога

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

1. WSJ’s Photo Journal (не совсем блог, правда, ну да пофигу).
2. Inspire me, now!
3. Concurrency (опять же не совсем блог, а аггрегатор блогов, но очень полезная штука).
4. Обратная сторона реальности.
5. Только выйдя из дому понимаешь, насколько огромен мир.

Пользуясь случаем хочу сказать спасибо всем читателям и подписчикам моего блога – ваше внимание не дает мне задушить свои графоманские наклонности :)

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

[life.cinema] Очередной кинообзор

Подошло время очередного кинообзора. В этот раз он состоит из двух частей. Сначала, коротко, о новых фильмах, отсмотренных в прошедшем месяце. Затем несколько слов о фильмах, которые я пересмотрел недавно (т.е. видел их раньше, но захотелось посмотреть еще раз).

Неудержимые. Очень добротно сделанный боевик. Сталоне и компания еще раз показали, на что способна старая гвардия. Но меня лично гораздо больше торкнул Рэмбо-IV. Вот то был прорыв, а этот фильм просто сделан на таком же высоком уровне, но не зацепил.

Принц Персии: Пески времени. Хорошая и добрая сказочка. Моя дочка была в восторге.

Солт. Очень лихо, динамично, увлекательно. Но совершенно невероятно. Думать во время просмотра категорически запрещается.

Центурион. Хороший исторический боевик. Хоть что-то по-настоящему достойно снятое в этой области со времен Гладиатора и Трои. Как и в случае с Солт-ом думать над увиденным при просмотре категорически запрещается.

Каратэ-пацан. Я и от оригинального фильма The Karate Kid (1984-го года) был не в восторге, хотя смотрел его еще в возрасте 16-17 лет. А уж от этого и подавно – досмотрел до конца только благодаря ускоренному воспроизведению.

Милые кости. Безбожно затянутые гламурные сопли.

Универсальный солдат-3. Смотреть можно только финальную схватку Ван Дамма и Лундгрена – вот ее ветераны отработали на совесть. Все остальное дешевая муть.

Двойной КОПец. Действительно, копец. Не смог даже до половины досмотреть.


Теперь о нескольких фильмах, которые я пересмотрел спустя много времени.

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

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

Царство Небесное. Очень мастерски и очень качественно (Ридли Скотт, однако, не Федя Бондарчук) снятая иделогизированная и слегка затянутая муть. Может кто-то и может поверить в волшебное превращение сельского кузнеца в бесстрашного воина, опытного военачальника, толкающего зажигательные речи лидера, но у меня не получилось. Батальные сцены радуют глаз, но их слишком мало, чтобы скрасить все остальное.

понедельник, 30 августа 2010 г.

[life.sport.darts] А вот и фотографии с прошедшего турнира

Чуть запоздавшее из-за выходные дополнение к рассказанной на прошлой неделе истории. Автор фотографий -- Дмитрий Косточко, за что ему отдельное спасибо!

[prog] Случай, где была бы уместна логика на исключениях

У С++ников есть две страшные страшилки – использование goto и реализация логики на исключениях.

Ну, про goto все понятно – goto considered harmful и все такое ;) И действительно, в C++, в отличии от С (в котором goto часто используется для переход в блок очистки ресурсов в конце функции) есть достаточно средств без проблем обойтись без goto. Более того, в присутствии исключений именно такими средствами, а не goto и нужно пользоваться. Поэтому goto, действительно, harmful и о goto речи больше не будет.

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

Под катом много букв для тех, кто заинтересовался.

[prog] Поздравляю RoR-овцеводов с третьими рельсами!

Вышел Ruby-On-Rails (он же Rails, он же RoR) 3.0.0! И хоть я никаким боком к RoR или Web-разработке не отношусь, но новость приятная. Поэтому RoR-цев (-овцеводов) от души поздравляю с этим знаменательным событием.

Ruby-On-Rails – это, блин, знаковая для Ruby community штука. Если бы в 2005-2006 RoR не стрельнул так, как он стрельнул, то Ruby так бы и оставался малоизвестным скриптовым языком из Японии. Зато теперь Ruby – это мейнстрим. Что не может не радовать.

В общем, поздравляю! Так держать! Long live Ruby! Long live Rails! :)))

воскресенье, 29 августа 2010 г.

[life.photo] Фотографии Дмитрия Шатрова

Сегодня в рубрике “Знакомство с фотомастером” представлены работы Дмитрия Шатрова – фотографа, путешественника, альпиниста, автора блога “Только выйдя из дому понимаешь, насколько огромен мир”. Все спрятанные под катом фотографии найдены в его блоге и ссылаются туда же. Сразу предупреждаю, что здесь далеко не все, на что стоит посмотреть, поэтому настоятельно рекомендую самостоятельно пройтись по его блогу.