пятница, 31 декабря 2010 г.

[life] С Новым Годом!

Вот и подходит к концу 2010 год. Для меня он стал весьма необычным. Во-первых, за последние десять или восемь лет этот год первый, который пролетел не как один день. Обычно встречаешь Новый Год, потом глазом моргнуть не успеваешь, а уже новый Новый Год на пороге. Но прошедший 2010-й длился чуть дольше, я успел моргнуть больше одного раза. Раза три или четыре, наверное ;)

Во-вторых, в прошедшем году я нежданно-негаданно с головой окунулся в новое увлечение – занялся дартсом. Причем на столько сильно, что почувствовал актуальность афоризма “если работа мешает хобби, не её на фиг, такую работу” :))) А ведь еще год назад ничего интереснее программирования для меня почти не существовало. Да еще не только сам подсел на дартс, но и заразил человек 10-12. Что, боюсь, они мне еще припомнят ;)

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

А пожелать всем своим читателям, да и себе, я хочу везения. Везение – это одна из таких вещей (как и здоровье), которые либо есть, либо нет, и за деньги не купишь. Ведь как бы мы не хотели и не старались, все равно shit happens. Так пусть нам повезет и мы в него не вляпаемся!

Для иллюстрации небольшой ролик в тему:

четверг, 30 декабря 2010 г.

[life.cinema] Очередной кинообзор (2010/12)

Подошло время очередного кинообзора. На этот раз не очень длинного.

Брестская крепость. Действительно самый лучший фильм о Великой Отечественной за последние годы.

Город воров. Вполне достойный фильм. Но мне он показался затянутым.

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

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

Киллер. Средней руки криминальная (мело)драма.

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

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

Неуправляемый. Не впечатлил. Хотя, по сравнении с "Опасными пассажирами поезда 123" (где главную роль так же играл Дензел Вашингтон) этот фильм можно спокойно смотреть.

[life.photo] Все-таки заснял рябину под снегом

В этом году уродилось очень много рябины. И когда выпадал снег, то деревья стояли очень красивые – большие розовые гроздья с ослепительно белыми шапками. Но, как на зло, видел я эту красоту только в пасмурную погоду и без фотоаппарата. А сегодня по дороге на работу, не смотря на совсем не вовремя спрятавшееся солнышко, все таки сделал пару кадров. Один из которых рискну показать читателям:

среда, 29 декабря 2010 г.

[work] Быть начальником? Подчиненные – тоже люди

Следующая часть заметок под общей темой “Почему я не хочу быть начальником?” (предыдущая часть здесь, следующая часть здесь).

Думаю, что многие задавались вопросом: “Как вести себя с другими людьми?” Лично я пришел к выводу, что нельзя строить из себя кого-то другого. Но и быть просто самим собой можно далеко не всегда. Например, нужно сдерживать порывы гнева. Это наедине с самим собой со злости можно кулаком в стенку заехать, а на людях лучше такие реакции не демонстрировать.

В общем, следует быть как можно ближе к тому, кто ты есть, но держать себя в рамках приличий.

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

Однако, как только ты становишься начальником, то ситуация резко меняется. И, казалось бы, мелочи начинают приобретать большое значение. Ну например, зашел ты утром в комнату и с кем-то поздоровался за руку, а кому-то просто кивнул. Имеет ли это значение? Если ты начальник, то уже имеет. И много еще чего имеет значение.

Например, форма, в которой ты выдаешь задание подчиненному: “Сделай вот это к такому-то числу” или “Мог бы ты сделать это к такому-то числу?”, или “Как ты смотришь на то, чтобы сделать это к такому-то числу?”, или даже “К такому-то числу вот это должно быть сделано!”

Или форма, в которой ты расспрашиваешь о статусе ранее поставленной задачи: “В каком состоянии задача X?” или “Мог бы ты мне рассказать, в каком состоянии задача X?”, или “Я хотел бы от тебя услышать о состоянии задачи X?” или “Что ты сделал по задаче X?”

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

Фокус в том, что, на мой взгляд, правильные варианты зависят о человека, с которым тебе приходится работать. Например, если мне поставят пусть даже интересную задачу в форме “X должно быть сделано к Ч!”, то это верный способ отбить у меня желание заниматься задачей X. Есть у меня такая особенность – как только слышу слово “Надо”, так сразу хочется ответить “Ну и пошло оно…” :) Зато, если постановка задачи будет сформулирована как “Вот если бы мы смогли сделать X к Ч… Сможем?”, вот тогда срабатывает правило “Слабо?” и выполнение задачи становится моей личной целью :)

Так что все весьма индивидуально. Кому-то нужно директивное управление, у кого-то нужно создавать видимость свободы выбора. Кому-то нужно все разъяснять в мельчайших подробностях, а кто-то должен получать только общую постановку задачи. За кем-то нужно организовывать тотальный контроль, а кого-то он будет угнетать. Кто-то может требовать жесткого стиля общения с окриками и одергиваниями, а кого-то время от времени нужно будет подбадривать. Ведь подчиненные – они тоже люди :)

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

Только вот непросто все это, если до этого разделял принцип: “чем больше я узнаю людей, тем больше мне нравятся собаки” :(

---
* В свое время мне понравилось эссе “Психология управления программными проектами”, в котором как раз подчеркивалось, что многие успешные программисты были аутично-шизоидными личностями.

понедельник, 27 декабря 2010 г.

[prog.humour] Цитата о Java порвала меня на кусочки

Читатели моего блога уже наслышаны о моем отношении к языку Java. Поэтому я надеюсь, что они не обидятся на следующую цитату:

"If Java had true garbage collection, most programs would delete themselves upon execution."
        -- Robert Sewell

Что в моем вольном переводе звучит как:

Если бы в Java был настоящий сборщик мусора, то большинство программ удаляли бы самих себя.

Пожалуй, это лучшая юмористическая характеристика Java из тех, которые мне доводилось слышать.

PS. Найдено здесь.

воскресенье, 26 декабря 2010 г.

суббота, 25 декабря 2010 г.

[life.sport.darts] Выиграл финал в офисе

С октября мы в офисе проводили регулярные игры в 301-double-out. По их результатам сложилась итоговая рейтинговая таблица. Восемь человек, оказавшиеся в верху этой таблицы вчера разыграли “суперфинал”. Я выиграл. Если кому-то интересны подробности, то прошу под кат.

[prog] Релизы Ruby 1.8.7-p330 и 1.9.2-p136

Вышли обновленные версии Ruby веток 1.8.7 и 1.9.2. Точного списка изменений я не видел, подозреваю, что это bug-fix обновления.

Исходники:

http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p330.tar.bz2
http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p136.tar.bz2

Бинарники под Windows есть пока только для 1.8.7-p330:

http://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/ruby-1.8.7-p330-i386-mswin32.zip

пятница, 24 декабря 2010 г.

[prog] Дмитрий Вьюков запустил свой ресурс 1024cores.net

Есть такой замечательный программист – Дмитрий Вьюков. На RSDN он известен как remark. А я в своем блоге писал о нем буквально вчера (кстати, вот и еще одно его достижение).

Дима большой спец в области многопоточности и параллелизма. Читатели RSDN наверняка помнят его суперпосты “Многопоточность сегодня”, “lock-, wait-, obstruction-, atomic-free algorithms”, “О lock-free алгоритмах (+бонус)”, “RAM - не RAM, или Cache-Conscious Data Structures” и др.

Лично мне повезло: в свое время Дима заинтересовался SObjectizer-ом и активно участвовал в его обсуждениях, критиковал существующие решения и предлагал новые. Так что о его профессиональных способностях я знаю не понаслышке.

На днях Дмитрий Вьюков запустил свой собственный ресурс: www.1024cores.net, где он будет рассказывать о lock-(wait-, obstruction-) free алгоритмах, о заточенных под эти алгоритмы структурах данных, о масштабируемости программ, о том, как проектировать приложения с оглядкой на многоядерность и многопроцессорность… И еще о многом другом.

С удовольствием приглашаю всех интересующихся данными темами на новый Димин ресурс. А Диме желаю удачи в его нелегком начинании!

четверг, 23 декабря 2010 г.

[life.sport.darts] Первые впечатления от дротиков McCoy Stealth 22g 90%

В прошлом рассказе о своем увлечении дартсом я написал, что заказал себе новые дротики – на этот раз 22-граммовые 90%-ные McCoy Stealth. Вчера они ко мне дошли и я даже сумел провести две тренировки с их использованием. Так что могу поделиться первым впечатлением.

Под катом продолжение для тех, кому это интересно.

[prog.wow] Реализация от Дмитрия Вьюкова заняла первое место в конкурсе WideFinder!

Несколько лет назад Тим Брей организовал свой собственный бенчмарк на одной простенькой задачке – парсинге большого объема лог-файлов на многопроцессорной машине. И назвал это соревнование WideFinder.

Долгое время этот бенчмарк использовался в спорах функциональщиков со всем остальным миром как доказательство преимущества ФП в написании быстрых и которых программ. Поскольку на первых местах в начале были реализации на OCaml от Маурисио Фернандеза. Но потом подтянулись C++ники и всех порвали (по крайней мере по скорости работы) :)

А потом пришел Дмитрий Вьюков (aka remark) и порвал вааще всех, включая C++ников :) На чистом C ;)

Текущую таблицу результатов (со ссылками на исходники всех реализаций) можно посмотреть здесь: http://wikis.sun.com/display/WideFinder/Results

А вот как выглядит ее верхняя часть сейчас (Smart-Finder – это и есть вариант Димы):

К моему сожалению о рекорде, который был установлен еще в марте, я узнал только сейчас. Поэтому хоть и с опозданием, но с удовольствием поздравляю Диму с этим замечательным достижением!

среда, 22 декабря 2010 г.

[life] Happy Birthday My Blog – 2!

Моему блогу сегодня исполняется два года. И если в прошлый раз день рождения подобрался тихо и незаметно, то в этот раз заметно (все-таки я умудрился написать чуть ли не в полтора раза больше заметок, чем в первый год), хотя и тихо :)

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

Еще более огромное спасибо всем комментаторам моих заметок – благодаря вам я чувствую, что мое увлечение все-таки не чистой воды графоманство :)

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

Еще раз спасибо всем заглянувшим. Продолжайте это делать и дальше. Желание продолжать у меня еще есть, так что еще увидимся (услышимся? спишемся?)! :)))

Ну а я делом займусь ;)

[work] Быть начальником? Организованность

Следующая часть заметок под общей темой “Почему я не хочу быть начальником?” (предыдущая часть здесь, следующая часть здесь).

Случалось ли вам пообещать кому-то принести, скажем, книжку, а затем забыть об этом?

Случалось ли вам сказать кому-то: “Я освобожусь через полчаса и мы обсудим твой вопрос?”, а потом увлечься так, чтобы забыть об этом обещании напрочь?

Случалось ли вам подумать про себя “Нужно будет у Иванова узнать, как обстоят дела с тем-то и тем-то”, а затем встретив Иванова и проговорив с ним полчаса на всевозможные темы, совершенно забыть о своем намерении?

Случалось ли вам, имея список дел, которые нужно выполнить к определенной дате, с головой окунуться в самое интересное для вас дело, оставив все остальное (включая и намного более важные дела) “на потом”?

Думаю, что наверняка. У кого-то в меньшей степени. У кого-то, в большей. У меня в гораздо большей степени: природная рассеянность + врожденное раздолбайство помноженное на фанатично увлекающуюся натуру дает итоге практически героя старого анекдота:

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

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

Ну для иллюстрации можно взять, хотя бы, контроль за подчиненными. Сказал начальник, что такого-то числа такая-то часть работы должна быть сделана, и что он проверит. Значит должен проверить, даже если и так понятно, в каком состоянии работа находится. А если сказал, но не проверил, т.е. забыл, то это уже плохо. Это признак того, что порядка у такого начальника не будет.

Хорошо тем, кто раздолбайству и рассеянности по своей природе и воспитанию подвержен меньше, чем я. А вот мне остается заниматься самовоспитанием. Т.е. пытаться вырабатывать у себя привычки:

  • задумал что-то – зафиксируй. И дату начала поставь. И оповещение задай. С режимом snooze;
  • пришло время сделать что-то – не откладывай это, не передвигай сроки. Хотя бы больше трех раз;
  • если выдалось свободное время – просмотри список оставшихся дел. Хотя бы просмотри. А лучше возьми оттуда что-нибудь и сделай;
  • не откладывай то, что тебе не хочется делать. Попробуй с этого начать;
  • не увлекайся чем-то одним…

Все это, наверное, хорошо и правильно. Только, блин, муторно и скучно. Где же, мать его, полет фантазии?! Где, мать ее, свобода творчества?! Где, мать, мать, мать, прорывы и открытия, от которых чуть ли не оргазм испытываешь?! А нет их больше! Зато есть оповещение от планировщика дел “Через 5 минут проверить выполнение работ по задаче №…”

PS. Есть у меня подозрение, что в своей рассеянности, раздолбайстве и увлеченности я далеко не уникален. Все эти time management-ы, методики get things done, рекомендации сперва жрать лягушек и прочие способы самобичевания самосовершенствования – это все попытки сотен прирожденных разпиз раздолбаев обмануть собственную природу и стать кем-то другим, а именно – организованным человеком.

вторник, 21 декабря 2010 г.

[life.politic.humour] Послевыборное

Не могу удержаться и не запостить (найдено здесь):

Когда изобретут лекарство от смерти, весь мир возликует. И только Беларусь хором скажет "бляяяя!!!"

пятница, 17 декабря 2010 г.

[life.photo] Прям беседка снежной королевы

Это маяк у Cleveland Harbor West Pierhead на озере Эри. А вот так он выглядит в обычное время:

PS. Снимок найден в очередном выпуске WSJ’s Photos of the Day.

[work] Быть начальником? Глубокое погружение vs быстрое переключение

Первая часть заметок под общей темой “Почему я не хочу быть начальником?” (следующая часть здесь)

Сегодня речь пойдет о двух вещах, которые, как мне кажется, являются двумя сторонами одной и той медали.

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

Помню, как в 97-м или в 98-м пытался решить проблему эволюции схемы данных в своей объектно-ориентированной БД. Т.е. пользователь сначала описывает схему БД на языке описания данных, затем наполняет БД данными, затем описывает новую схему на том же языке, а сама БД определяет, как схема изменилась и как следует преобразовать данные. И чтобы пользователю не приходилось вручную вписывать инструкции вида alter table… add… или alter table… drop column… Просто БД должна была сравнить две схемы и сама решить что к чему.

Я рожал такое преобразование около месяца. Занимаясь, по сути, только им. На все остальное не оставалось сил. В мусорку отправилась толстенная пачка бумаги формата A4. Но алгоритм таки был получен, реализован и протестирован.

Вот это, я считаю, и является главной добродетелью хорошего разработчика – погрузиться в задачу так, чтобы ничего больше не существовало вокруг, и сделать в конце-концов конфетку. Чтобы у самого была 100% уверенность в том, что лучше ты бы уже не смог.

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

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

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

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

Что-то подобное, имхо, прослеживается и в разработке ПО. Только я бы это аналогию развернул, подозреваю, неожиданным образом. Я думаю, что программисты – это спринтеры. Работа программиста – как серия 400-метровок – напрягся (погрузился в задачу), расслабился (доделываю предыдущую задачу и присматриваюсь к новой), напрягся (погрузился), расслабился…

Тогда как начальники – это стайеры, бегуны на длинные дистанции с препятствиями – бежим, бежим, прыгнули, бежим, бежим, еще раз прыгнули, опять бежим, бежим, прыгнули снова, опять бежим, снова бежим… И так из проекта в проект.

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

[work] Почему мне не хочется быть начальником

Данной заметкой я планирую открыть цикл постов, в которых постараюсь описать почему мне не нравится руководить (в моем конкретном случае разработкой ПО). Непосредственным толчком к этому стал комментарий ув.тов.имя в теме “А где (и кому) нужны мастера на все руки?” Хотя, положа руку на сердце, это проявление душевного эксбиционизма публичная попытка ответить самому себе на вопрос “Если ты такой умный, то почему ты не миллионер?”

Или даже не так. Есть замечательное изречение:

Кто хочет – ищет возможности.
Кто не хочет – ищет причины.

Так вот, быть начальником я никогда особо не хотел. Посему ищу причины, по которым у меня такого желания нет.

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

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

В общем, вот такие планы. Если кому-то интересно, то stay tunned… ;)

четверг, 16 декабря 2010 г.

[prog] Описание нововведений Scala 2.8: The Architecture of Scala Collections

Продолжается серия статей с описанием новых возможностей Scala 2.8. На этот раз статья внутренности библиотеки коллекций и контейнеров Scala: The Architecture of Scala Collections.

Ранее были опубликованы статьи:

[prog] Релиз POCO 1.4.0

Состоялся релиз версии 1.4.0 библиотеки POCO.

Среди основных новшеств разработчики называют поддержку Visual Studio 2010, 64-битовую сборку под Windows, поддержку Windows Embedded CE и улучшения в поддержке iOS. Плюс большое количество исправлений и добавлений, подробности которых можно посмотреть в CHANGELOG.

PS. Судя по прошлому опыту работы с POCO, я бы подождал выхода 1.4.1 или 1.4.0p1.

среда, 15 декабря 2010 г.

[life.sport.darts] Небольшой лытыбр

Распродал практически весь свой арсенал. И Target-овские Aviator-ы, и Unicorn-овские Andy Hamilton Maestro. Все-таки дротики Andy Hamilton-а оказались для меня слишком скользкими. И если дома, разогревшись, они держались в руке более-менее нормально, то вот в офисе, в весьма прохладном коридоре, часто выскальзывали.

Остался с Target-овскими Silica Apollo, которые мне когда-то не очень понравились. Причем задержались они у меня только потому, что слишком дорого мне обошлись (более 40GBP с учетом замены иглы), а задешево продавать я их не хотел. И вот теперь, благодаря собственному скупердяйству, вновь привыкаю к новым старым дротикам :)

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

В начале декабря, когда стало у меня копиться неудовольствие от дротиков Andy Hamilton-а, заказал себе 22-х граммовые 90% дротики McCoy Stealth.

Но из-за всех приближающихся праздников посылка все никак не дойдет до Беларуси и, вероятно, идти будет еще долго. Так что, подозреваю, когда она дойдет, я уже буду плотно сидеть на Silica Apollo. Или же буду ждать новых дротиков с нетерпением ;)

Кстати о дротиках McCoy. Раньше я о них вообще не слышал. И что за фирма их производит не знаю. Сайт Real McCoy Darts пока находится на реконструкции. А сами дротики есть в наличии далеко не во всех магазинах.

Однако, если посмотреть на форму и вес моделей дротиков McCoy, то можно заметить, что они практически копируют лучшие модели от Unicorn-а и Target-а. Но по гораздо более привлекательным ценам. Так что я бы рекомендовал обратить на них внимание – может оказаться, что очень хорошие дротики обойдутся всего лишь в 10-12GBP (а не в 20-40GBP как в случае “больших” брендов).

Ну и на последок о главном. С завтрашнего дня стартует Чемпионат Мира по дартс в рамках PDC. Программа уже определена. Сайт bet365.com обещает прямые трансляции. Так что на ближайшие пару недель я по вечерам буду совершенно потерян для общества :)

[prog] Вышла версия 6.0.0 библиотеки ACE

Как и обещали разработчики ACE месяца полтора назад, состоялся релиз версии 6.0.0 библиотеки ACE. Список изменений, правда, не сильно впечатляет:

  • изменен формат строки, формируемой ACE::timestamp(). Если раньше она возвращала значение вида "Day Mon dd hh:mm:ss yyyy", то теперь она возвращает строку “yyyy-mm-dd hh:mm:ss.mmmmmm” в соответствии с ISO-8601. Соответственно, изменится вид даты-времени при работе с ACE_Log_Msg и спецификаторе %D;
  • полностью удалена поддержка GCC версий ниже 3.0;
  • в build-систему ACE добавлена поддержка пользовательских файлов rules.private.GNU, которые, буду найденными в процессе build-а, теперь подключаются файлом $ACE_ROOT/include/makeinclude/rules.local.GNU.

Вот, собственно, и все. Ну плюс несколько багфиксов.

Зачем нужно было обзывать новую версию 6.0.0 – не знаю. Когда руки дойдут ее пощупать – тоже не знаю.

Скачать новую версию ACE (а так же обновленные версии TAO, CIAO и DAnCE) можно отсюда: http://download.dre.vanderbilt.edu/previous_versions/

[prog.work] Вот так бывает в оффшоре

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

История первая. Делается незначительный рефакторинг некоего второстепенного и совершенно не публичного класса – какой-то метод переименовывается, какой-то удаляется, а на его место добавляются пара новых методов. Изменения фиксируются в репозитории. Спустя пару часов от заказчика приходит письмо с просьбой объяснить, зачем и почему были сделаны такие изменения.

Увидев мои круглые глаза друг рассказал еще более замечательный случай. Его коллега руководил проектом для другого заказчика и был вынужден тратить по четыре(!) часа в день только на объяснению заказчику причин внесения в код тех или иных изменений.

Ну что тут сказать… Маразм крепчал, конечно. Но, с другой стороны, как даму обедают, так ее потом и танцуют. Вот хотят танцевать именно так – что остается делать? Поэтому от оффшорных контор лично я стараюсь держаться подальше. Имхо, если уж разрабатывать софт на дядю, то там, где этот дядя сам является владельцем разрабатываемого софта. И живет с этого софта. А не с проданных жопочасов.

вторник, 14 декабря 2010 г.

[life.politic.humour] Отличная цитата перед предстоящими выборами

Найдено здесь.

Имхо, данное высказывание сэра Уинстона было отлично подтверждено результатами выборов 1994-го года.

Ну и в дополнение еще одна цитата. Не совсем про выборы, но зато по отношение русских (да и белорусов, хотя и в меньшей степени) к собственной стране:

Найдено там же.

воскресенье, 12 декабря 2010 г.

[life.photo] Несколько снимков Andrew Zuckerman

На неделе набрел на рассказ о серии фотографии Creature от Andrew Zuckerman. После чего зашел на сайт самого Andrew Zuckerman. И выбрал из серии Creature несколько других снимков (они под катом). Хотя там есть что посмотреть и в остальных сериях. Кроме серии Creature я лично рекомендовал бы посмотреть серию Bird.

суббота, 11 декабря 2010 г.

[life;prog;work] Программист Сергей Алейников признан виновным

Года полтора назад на RSDN-е меня зацепила тема “За эрланг может задержать ФБР”. Именно оттуда я узнал о программисте Сергее Алейникове, который работал в Goldman Sachs, а потом ушел оттуда к конкурентам с несколькими десятками мегабайт исходников.

Сегодня в новостях по НТВ рассказали, что Сергей Алейников признан виновным (сам же приговор огласят в марте).

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

пятница, 10 декабря 2010 г.

[work.prog] А где (и кому) нужны мастера на все руки?

Время от времени задумываюсь о том, где и как мне больше всего нравится работать. При этом пытаясь более-менее объективно оценить самого себя.

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

Этому способствовали, похоже, и условия, в которых происходило мое профессиональное становление. В КБСП, куда я попал еще студентом, наш маленький отдел был, по сути, мелким стартапом, пытающимся создать свой собственный продукт – объектную SCADA-систему. И каждый программист в таких условиях был и швец, и жнец, и на дуде игрец. Приходилось и код клепать, и тесты к нему, и GUI-интерфейс строить, и, что вообще многие программисты не любят, документацию писать, причем самую разную документацию. С заказчиками, правда, не сильно общался, да и внедрениями занимался эпизодически, но все-таки что-то из этого и мне перепало.

Ну а когда я почти десять лет назад оказался в Интервэйл, то все эти навыки не только пригодились, но и были, смею надеяться, развиты многократно :) Тут уж я и архитектуру рисовал, и воплощал ее в коде, и тестировал, и документировал, и внедрял, и сопровождал…  Даже людьми теперь приходится управлять и размеры премий назначать.

Но Остапа что-то понесло :) Так вот, после нескольких страниц отвлеченных рассуждений, пора переходить к сути.

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

Т.е., если кто-то в большой программерской конторе является обычным программистом, то ему вряд ли нужны навыки архитектора, как и способность написать 100 страниц внятной документации. Или, скажем, архитектору более пригодятся знания в области buzzword-ов вроде SOA и ebXML (попытайтесь произнести это вслух на людях не смущаясь), чем практические навыки организации тестовых стендов и, уж тем более, опыт общения с техподдержкой заказчика.

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

Итак, где может быть востребован программист-многостаночник?

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

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

В-третих… А вот в-третьих уже и нет. Первые два пункта – это все, что приходит мне в голову. Только две потенциальные ниши. Не густо :(

Наверняка что-то прошло мимо меня. Поэтому буду признателен читателям за любые подсказки и соображения.

Например, как на счет R&D подразделений в крупных компаниях? Может у кого-то есть опыт или ссылки на рассказы о таком опыте?

четверг, 9 декабря 2010 г.

[prog] В Scala 2.9 (или чуть позже) может появится поддержка Software Transactional Memory

Поскольку я у себя в блоге регулярно публикую новости из мира Scala, то не могу пропустить данное известие: коллектив разработчиков Scala STM Expert group объявил о желании выпустить поддержку STM в Scala 2.9 (или чуть позже после выхода следующей версии Scala).

Те, кто не хотят ждать официального релиза, приглашаются на сайт проекта чтобы познакомиться с бета-версией Scala STM.

PS. Мопед не мой…

[life;work] Новый офис Google в Москве

Прошло чуть больше месяца как я поиронизировал над офисами Google в Москве, а российский Google уже переехал в новый офис. Видимо, не только я иронизировал :)

Анонс в официальном блоге Google Russia.

Большой пост с картинками о новом офисе.

Девушки с блинами просто порвали:

Интересно, они там каждый день блины готовят или только по праздникам? ;)

среда, 8 декабря 2010 г.

[life] Житейская демонстрация разницы в доходах

Решили с друзьями сегодня вечером посидеть за бутылочкой приличного коньяка. Как выдающий себя за знатока этого напитка я взялся за закупку. Зашел в наш магазин “Старый Универмаг” и спросил:
-- Какой у вас самый выдержанный коньяк?
После некоторого замешательства и еще более длительного раздумья продавец ответила:
-- Семилетний… Молдавский.
На мою последовавшую гримасу непритворного удивления она добавила:
-- Есть еще грузинский, 15 летний. Но он ДОРОГОЙ!
-- Дорогой – это сколько?
-- 41 тысяча (~$13.5)!
На что я смог только удивленно выдохнуть:
-- Разве 41 тысяча – это дорого?
Но продавец добавила:
-- Но там бутылка 200 грамм…

Т.е. 0.5 пятнадцатилетнего грузинского коньяка (не поддельного, у нас с этим строго), стоило бы ~103K BYR (~$33.6). На мой взгляд, для 15-летнего импортного коньяка такая цена – это не дорого (мы ведь не в Грузии, и не в Молдавии, и даже не в Москве). Не дешево, конечно, но вполне нормально. А вот для обычного продавца обычного магазина –дорого.

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

Еще один хороший повод перестать жалеть самого себя и жаловаться на жизнь :)

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

[life] Совпадения, раздолбайство, космический аппарат, 24 болта и ремонт в $217M

Читая статьи различных политологов часто натыкаюсь на фразы вроде “таких совпадений не бывает”. Поскольку в какой-то степени разработка ПО сродни инженерному делу, а инженеры постоянно сталкиваются с разного рода невероятными совпадениями, то лично я убежден в том, что самое невероятное стечение обстоятельств – это вполне нормальное явление. И вот хорошая (на мой взгляд) иллюстрация (найдена в Computerra).

6 сентября 2003 года космический аппарат NOAA-N Prime при перевозке в лабораторию для очередной проверки уронили – он выскочил из держателей:

Практически полностью готовый к запуску спутник, стоимостью $239M, высотой в 4 метра, весом более 2 тонн. Хранился в компании Lockheed Martin в ожидании запуска. Для проверки электроники и двигателей время от времени перемещался в лабораторию для тестирования. До тех пор пока…

Пока техники, обслуживающие другой спутник, никому ничего не сказав, не позаимствовали 24 болта, удерживавшие NOAA-N Prime на платформе. Наверняка позаимствовали на время :/ Типа – все равно он здесь стоит уже давно, пусть без болтов недельку постоит, что с ним станет-то?

Ремонт обошелся в $217M. Отремонтированный аппарат все-таки был выведен на орбиту в 2009.

Такие дела. Законы подлости и генеральский эффект еще никто не отменял :) Да и закон Мёрфи возник как раз как результат наблюдения инженера за работой техников :)

вторник, 7 декабря 2010 г.

[life] Красота требует жертв (хотя бы в виде ковровых дорожек)

Лет 17-15 назад пошла у нас в городе мода на “евроремонты”. Если у какого-нибудь магазинчика или парикмахерской было крыльцо со ступеньками, то обязательно нужно было выложить его керамической плиткой. Типа красиво и удобно. Летом :/

Зимой же такое “плиточное” крыльцо представляло из себя серьезное испытание. Поскольку на морозе плитки сами по себе становились очень скользкими, а уж если на них образовывалась наледь, то наступал полный ахтунг.

Благо поначалу плитку использовали дешевую, мороза она не выдерживала, трескалась и отслаивалась. Так что после нескольких нормальных зим отделанное под “евро” крыльцо возвращалось к обычному советскому виду :)

Но время идет, народ “умнеет” и сейчас плитку для внешней отделки использует более качественную – она не трескается, не отслаивается и лежит, зараза, годами. Естественно, каждую зиму превращаясь в аттракцион “Веселые горки”.

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

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

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

[life.photo] Снимок про сегодняшнюю погоду. И почти про настроение :)

Собачка снята в Минске. Фото найдено в WSJ’s Photos of the Day.

понедельник, 6 декабря 2010 г.

[prog] ICU 4.6 Released

Вышла версия 4.6 большой библиотеки ICU – инструмента для работы с Unicode и другими связанными с интернализацией (i18n) вещами (числами, датами, текстами, регулярными выражениями и пр.).

Загрузить можно отсюда: http://site.icu-project.org/download/46

Тем, кто не знаком с ICU, можно заглянуть сюда: http://userguide.icu-project.org/

PS. Сам я до использования ICU пока не дорос, но за релизами слежу :)

[life.photo] И вот почему я публикую чужие фотографии, а не свои

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

Так вот, красиво на улице. Когда вел дочку утром в школу, то смотрел не под ноги (а следовало бы, поскольку гололед жуткий), а крутил головой по сторонам – насколько все вокруг удивительно.

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

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

воскресенье, 5 декабря 2010 г.

суббота, 4 декабря 2010 г.

[life.sport.darts] Несколько слов о Unicorn-овских дротиках Andy Hamilton 97% 23g

С месяц назад соблазнился изрядной скидкой на Unicorn-овские дротики Энди Хамильтона из серии Maestro Latinum (97% содержание вольфрама, 23 грамма вес) – на dartscorner.co.uk они стоили всего 22.33GBP. Для дротиков с таким высоким содержанием вольфрама (а больше 97% я никогда не видел) это совсем не высокая цена. В общем, желание иметь понтовые дротики, которые были бы тоньше, чем мои Target Aviator, в сочетании с большой скидкой сделали свое черное дело – я решился на покупку.

Посылка в этот раз шла очень долго – больше трех недель. Дротики ко мне попали всего за несколько дней до турнира в Минске. Поэтому я на них тогда только посмотрел и толком не пробовал. А вернувшись из Минска начал тренироваться только ими, отложив в сторону Aviator-ы, чтобы составить нормальное впечатление о своем приобретении. Небольшой рассказ о том, что же из этого вышло с картинками под катом.

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

[prog] OTL4, MSSQL, bulk insert, триггер на вставку и ошибка 24000

Нужно было сделать быструю вставку записей в табличку MSSQL. Задействовал нестандартную SQL-ную фичу с конструкцией insert into … select … union all … select … union all. Работал через OTL4 и сделал пул otl_nocommit_stream-ом (с разным количеством строк внутри). Например, если в пуле были otl-потоки для 20, 10, 5, 2 и 1-ой строки, а нужно было вставить 59 строк, то два раза использовался поток на 20 записей, один раз поток для 10 строк, один раз поток для 5 строк и два раза поток для 2-х строк.

Все работало хорошо до тех пор, пока в базе не появился триггер на вставку в эту таблицу. Триггер должен был срабатывать на insert и добавлять строки в другую таблицу. Но после того, как он срабатывал, у меня при выборе следующего otl-потока из пула возникала ошибка 24000: [Microsoft][SQL Server Native Client 10.0]Invalid cursor state.

Поиск по Интернету показал, что такие вещи при работе через ODBC уже случались. И в качестве workaround-а рекомендовали после каждого SQLExecute для вставки в основную таблицу делать обращение к SQLMoreResults.

Легко это сделать когда ты сам осуществляешь вызовы SQLExecute. Но за меня это делает OTL. Да еще делает это неявно для меня, внутри своих otl-потоков. Так что как применить данную рекомендацию поначалу было непонятно.

К счастью, OTL доступен в исходных текстах (более того, весь OTL – это один большой заголовочный файл). Посредством поиска удалось выяснить, что обращение к SQLMoreResults в OTL есть. Происходит оно внутри метода sql_row_count(), а sql_row_count() вызывается после обращения к SQLExecute.

Но sql_row_count() использует SQLMoreResults не всегда, а только когда определен макрос OTL_ODBC_ALTERNATE_RPC. И в документации к OTL_ODBC_ALTERNATE_RPC сказано, что он предназначен для PostgreSQL:

This #define should be used with the PostgreSQL ODBC driver. The driver returns as many row counts via SQLRowCount() calls as there are rows in a batch INSERT statement. The #define enables a loop that fetches all individual row counts and sums them up (+=). As a result, otl_stream::get_rpc() returns the total, which is correct for PostgreSQL. Normally, commercially available ODBC drivers return a single row count on a batch INSERT.

Тем не менее, определил макрос OTL_ODBC_ALTERNATE_RPC и все заработало!

Мораль сей басни – доступные исходники сторонних библиотек – это must have. :)

[life;work] Мерзнем-с. Посему тянет на воспоминания и философствование.

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

Вспоминается год 1997-й или 1998-й, когда я в КБСП работал. У КБ тогда в распоряжении было три здания: двухэтажная бывшая столовая, трехэтажное длинное здание (ВМК, если память не изменяет), в котором когда-то размешался Эльбрус и машинные залы, а так же современная высотка из стекла и бетона (которая в кулуарах называлась “стилобат”).

Поскольку денег тогда у КБСП на нормальное отопление не было, то практиковалась следующая схема – летом народ размещался в стилобате, а на зиму переезжал в ВМК. Поскольку ВМК на такое скопление народа не было рассчитано, то в большие комнаты заселяли сразу по два отдела. Так, зиму с 1994-го на 1995-й наш отдел (8 человек)  делил комнату в 16-17 квадратов с отделом электронщиков (4 человека). Правда, на следующую зиму этого отдела в КБ уже не осталось, и всю комнату отдали в наше полное распоряжение.

Затем КБ решило стилобат то ли продать, то ли отдать в аренду под общежитие для местного Политехнического Института Университета. Пригодные же для проживания помещения ВМК начали сдавать всяким коммерческим фирмочкам. А нас из ВМК переселили в здание бывшей столовой.

Разницу в качестве строительства старой ВМК, возведенной в начале 70-х из кирпича, и более-менее новой панельной столовой мы почувствовали с наступлением первых холодов. Но еще лучше это стало заметно когда внезапно ударили морозы под 25 градусов.

Это была песТня :( При теплых батареях и работающих обогревателях у нас в комнате температура не поднималась выше 13 градусов тепла. Работали сидя в зимней обуви и зимней верхней одежде. Особенно везло тем, у кого были тонкие вязанные перчатки – можно было работать на клавиатуре не снимая их. А без перчаток руки минут через 20-30 просто отмерзали.

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

Однако ж… Вот тогда было хреново, да и деньги платили смешные. А тем не менее, в КБСП у нас был очень сплоченный коллектив. Ушел только один человек и то вынуждено. Мы же верили, что занимаемся очень перспективным продуктом. И что если выдержим, то все наши труды окупятся… В какой-то степени так и вышло. Не в КБСП, правда, а в Интервэйле, где нам удалось сильно развить обсуждавшиеся в КБ идеи.

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

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

четверг, 2 декабря 2010 г.

[life.sport.darts] Австралийский интернет-магазин с полезной особенностью

Во многих магазинах наблюдается один и тот же недостаток: если у какой-то модели дротиков есть несколько вариантов веса (скажем, 20, 22, 24 и 26 грамм), то в качестве изображения дротиков приводится фотография только одной модели. Ну вот, например, на dartscorner.co.uk модели Unicorn Sigma Pro 970 веса 21 грамм и 27 грамм. Чем различаются их изображения?

Да что там магазины. Сам производитель дротиков Unicorn на своем сайте приводит только одно изображение для своей серии Sigma Pro 970!

Между тем, если внимательно посмотреть спецификации дротиков разного веса, то можно увидеть, что они имеют и разную длину, и разную толщину. Неужели вне зависимости от различия в размерах они выглядят одинаково?

Отнюдь. И это очень хорошо видно в австралийском интернет-магазине DeadEye Darts, в котором имеется отдельная фотография на каждый вариант одних и тех же дротиков. Вот, например, легко можно увидеть, как различаются между собой Sigma Pro 970 разных весов:

21 грамм:

27 грамм:

Вот такое полезное и редкое качество. Которое, однако, не означает, что следует заказывать дротики в Австралии :)

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

[work;prog] О парочке демотиваторов

Полгода назад мой коллега, Слава Костин, выдал хороший пост на тему непредумышленных потерь компании. И хоть мы там со Славой поспорили по отдельным пунктам, в целом я с ним был согласен.

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


Фактор первый. Как легко рассказать (написать) о том, что тебе кажется нужным на будущий год – нанять N человек, закупить K серверов, докупить того-то и того-то – если можно это сделать в свободной форме. И как же все это усложняется, если нужно заполнить пару сверстанных кем-то Excel-евских табличек для той же самой информации!

Блин, даже не верится, насколько сложно. Второй день смотрю в монитор, туплю, матерюсь про себя, а воз и ныне там. Имхо, похожая ситуация происходит, когда нужно заполнить анкету в какой-нибудь государственной организации (в налоговой, например) – вроде бы все просто, все графы более-менее понятны, а даже с образцом перед глазами получается все заполнить только со второй (третьей,…) попытки и под чьим-нибудь чутким руководством :(

Другое дело, если бы был назначен отдельный человек, которому все руководители команд высказывают в свободной форме все, что им нужно, а он бы сам сводил полученные данные в итоговые Excel-еские таблички. Имхо, все это было бы и проще, и быстрее, и дешевле.

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


Фактор второй. Оценка успешности работы сотрудника по сколько-то-там-бальной шкале. Т.е. предложение вида “оцените вклад каждого сотрудника за истекший год по следующей шкале: A – …, B – …, C – …” уже приводит меня в замешательство, граничащее с приступом бешенства. А дополнение “оценку A можно выставить не более 10% сотрудников, …” вообще повергает в полный ступор (что, к счастью, оберегает от взрыва бешенства).

Почему так происходит?

Во-первых, сложно проводить какие-то границы по живым людям. Вот этот человек получает оценку A, а вот этот B, поскольку оценки A- или B+ просто нет. Да еще и нельзя две оценки A поставить.

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

Гораздо проще было бы, если по итогам года мне говорят: “Твоя команда заслужила премию в размере M тугриков. Твоя задача – разделить ее между своими людьми в зависимости от их вклада.” Вот это уже совсем другое дело: живые деньги делить – это не оценки расставлять :)

Фактически, тема оценок труда программиста чем-то отличным от живых денег может считаться продолжением “KPI для программистов” (№раз и №два).

[prog] Описание нововведений Scala 2.8: The Scala 2.8 Actors API

Продолжается серия статей с описанием новых возможностей Scala 2.8. На этот раз статья описывает Scala Actors (которые появились в Scala раньше, но в версии 2.8, afaik, претерпели некоторые изменения): The Scala 2.8 Actors API.

Ранее были опубликованы статьи:

вторник, 30 ноября 2010 г.

[life.wow] Здорово!

[life.cinema] Очередной кинообзор (2010/11)

Подошло время для очередного кинообзора. В начале списка идут фильмы, которые мне понравились, а в конце – которые не понравились.

Красный дракон. Мне понравилось. Хотя до “Молчания ягнят” и “Ганнибал: Восхождение” не дотягивает.

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

Черная смерть. Неплохая страшная сказочка про средневековье.

На измене. На мой взгляд достаточно удачно растянутое до полнометражного фильма скеч-шоу (вроде "Шести кадров", двое участников которого играли в фильме главные роли).

Призраки в Коннектикуте. Добротный ужастик. Временами, правда, очень сказочно все, но в целом хорошо сделано.

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

Эксперимент. Ремейк немецкого фильма с таким же названием 2000 года. Лучше посмотреть первоисточник.

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

Копы в глубоком запасе. Своеобразная комедия. По мне слишком туповатая. Но ситуацию спасают хорошие актеры и попадающиеся временами отличные шутки. А по сравнению с Двойным КОПцом так вообще отличный фильм.

13. Не понравилось. Весь просмотр был вынужден отгонять от себя мысль "Не верю!"

Ярослав. Тысячу лет назад. Ерундистика. Единственная хорошая сторона – это "шпион" в окружении Ярослава. Во всем остальном виден как недостаток нормального сюжета, так и недостаток средств на съемку хорошего исторического фильма.

Кочегар. Фишку фильма не просек.

Треугольник. Какая-то неубедительная и занудная фигня.

понедельник, 29 ноября 2010 г.

[life.humour] Вопросец климатологам :)

Добираясь домой сквозь метель, проваливаясь по щиколотку в снег, укрываясь от перехватывающего дыхание ветра, пытался найти ответ на вопрос: “Ну и где, блин, обещанное глобальное потепление?”

воскресенье, 28 ноября 2010 г.

[life.sport.darts] Поучаствовал в 4-ом этапе Кубка Беларуси по дарсу

Вчера с коллегами съездили в Минск и приняли участие в 4-ом этапе Кубка Беларуси по дартсу. Я и Денис Томашенко сыграли несколько матчей, а Роман Орышко и Сергей Атрощенко болели за нас и оказывали моральную поддержку, за что им отдельное спасибо!

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

Ехали мы в Минск с одной главной целью – посмотреть, как это все происходит на самом деле и понять, нужно ли продолжать заниматься дартсом дальше.

Посмотрели. Конечно, все не так красиво и красочно, как в телевизионных трансляциях. Но увлекательно. Так что желание играть в дартс не только не уменьшилось, а напротив – появился стимул тренироваться еще серьезнее.

Личный турнир проходил в два этапа. Сначала групповой этап, когда игроки разбивались на группы, где каждый играл с каждым. А потом два лучших игрока из группы выходили в play-off. Я сыграл только на групповом этапе и из группы, понятное дело, не вышел. Из четырех своих матчей три я проиграл (2:3, 1:3 и 0:3), но один выиграл (3:0). Мог бы выиграть и больше, если бы не вновь проявившаяся проблема с закрытием удвоений. Тем не менее, своим результатом я доволен, поскольку довелось сыграть с людьми, имеющими не только больший стаж занятий дартсом, но и гораздо больший игровой опыт.

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

Так что продолжим тренироваться. Ближайшая цель – локальный турнир в Минске, который собираются организовать в конце января 2011.

PS. Все-так дартс не фотогеничный вид спорта :(

[life.photo; blog] Знакомство с фотомастером: истоки и будущее рубрики

Первая заметка в рубрике “Знакомство с фотомастером” появилась почти год назад – 29 ноября 2009 года. Опубликовав ее я решил попробовать сделать регулярные заметки по воскресеньям, в которых я помещал бы понравившиеся мне когда-то фотографии. И поставил себе маленькую цель – выдержать такой ритм в течении года. И вот год прошел. Мне это почти удалось, сегодня была опубликована пятидесятая заметка.

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

Началось все давным-давно, еще в детстве :) Отец у меня был заядлым фотолюбителем. И какая-то доля страсти к фотографии, видимо, передалась и мне. Но, к сожалению, малая доля – таланта фотографа во мне не оказалось, да и желание пофотографировать возникает очень редко. А вот разглядывать красивые и интересные фотографии – вот это завсегда и с удовольствием ;)

Году где-то в 2002, когда у меня появился более-менее сносное подключение к Интернет, я стал регулярным посетителем сайта www.photoline.ru. Не знаю, чем меня зацепил именно он. Но мне казалось, что процент хороших снимков на нем заметно повыше, чем на альтернативных площадках (в частности, на photosight.ru).

Так вот, где-то раз в неделю я залазил на photoline.ru и рассматривал новинки, которые там появлялись за последнее время. А наиболее понравившиеся мне снимки сохранял к себе на компьютер. В итоге за несколько лет у меня набралась коллекция из несколько сотен фотографий. В основном пейзажи, поскольку из всех остальных этот жанр мне нравится больше всего.

Со временем, однако, на photoline.ru я стал заглядывать все реже и реже. Если раньше я делал это каждый выходной, то теперь, в лучшем случае, раз в месяц, а то и в два. Так что коллекция теперь почти не пополняется :(

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

Вот, собственно, и вся история. Почти все, что у меня было, я опубликовал. Посему рубрика “Знакомство с фотомастером” перестает быть регулярной. Я хочу ее оставить и собираюсь делать новые выпуски. Но уже только тогда, когда на глаза попадется что-нибудь. Ну и плюс еще несколько авторов с photoline.ru до которых пока еще не дошла очередь.

Такие дела.

[life.photo] Пейзажи Вадима Петракова

Сегодня в рубрике “Знакомство с фотомастером” пейзажи Вадима Петракова.

Под катом несколько снимков, которые понравились лично мне. Но я бы рекомендовал посмотреть и другие снимки Вадима Петракова на photosight.ru и, особенно, на photoline.ru.

пятница, 26 ноября 2010 г.

[prog] Любопытная ошибка при использовании libcurl, CURLOPT_READFUNCTION и std::stringstream

Преамбула. Необходимо было через libcurl делать HTTP POST запросы и получать ответы от HTTP-сервера. Тело POST-запроса подготавливалось в std::stringstream. Для того, чтобы отдать его содержимое библиотеке libcurl я сделал специальную вспомогательную функцию, приблизительно такого вида:

size_t
std_istream_read_function(
  void * to,
  size_t size,
  size_t nmemb,
  void * raw_stream_pointer )
  {
    std::istream * from =
        reinterpret_cast< std::istream * >( raw_stream_pointer );
    if( !from )
      return CURL_READFUNC_ABORT;

    if( !(*from) )
      if( from->eof() )
          return 0;
      else
        return CURL_READFUNC_ABORT;

    const size_t capacity = size * nmemb;
    from->read(
        reinterpret_cast< char * >( to ), capacity );

    return from->gcount();
  }

А затем регистрировал данную функцию в качестве параметра CURLOPT_READFUNCTION (а в качестве CURLOPT_READDATA передавал указатель на stringstream). Соответственно, когда libcurl устанавливал соединение, проходил HTTP-аутентификацию и отсылал на удаленную сторону HTTP-заголовки, он вызывал мою функцию и получал от меня тело POST-а.

Теперь амбула :)

Все это дело красиво работало. Но не всегда. Часть запросов почему-то завершалась неудачно. После чего спецы, которые обслуживали HTTP-сервер, стали жаловаться, что в некоторых случаях от нас приходят только HTTP-заголовки, но нет тела POST-а.

Разбирательство показало, что в этих случаях происходит следующее:

  • для взаимодействия с HTTP-сервером используются Keep-Alive соединения;
  • 1, 2, 3,…, (i-1)-ый обмен с HTTP-сервером проходят без сучка и задоринки;
  • между (i-1)-м и i-м запросами проходит несколько десятков секунд;
  • при выполнении i-го запроса libcurl передает HTTP-заголовки и тело POST, после чего libcurl:
    • пишет, что текущее соединение с сервером оказалось разорвано;
    • предупреждает о том, что попытается восстановить соединение;
    • сообщает, что соединение восстановлено;
    • отсылает HTTP-заголовки;
    • некоторое время ничего не делает;
    • получает ответ от удаленной стороны.

Т.е., действительно, в таких случаях от нас тело POST-а не уходило повторно. По сообщениям libcurl ситуация выглядит приблизительно так:

# Re-using existing connection! (#0) with host YYY
# Connected to YYY (zzz.zzz.zzz.zzz) port 8080 (#0)
< POST /bla-bla-bla HTTP/1.1
< Content-Type: …
< Content-Length:…
<
< <?xml>…</xml>
# Connection died, retryinga fresh connect
# Closing connection #0
# Issue another request to this URL: 'http://YYY:8080/bla-bla-bla'
# About to connect() to YYY port 8080 (#0)
#    Trying 193.41.60.77...
# connected
# Connected to YYY (zzz.zzz.zzz.zzz) port 8080 (#0)
< POST /bla-bla-bla HTTP/1.1
< Content-Type: …
< Content-Length:…
# HTTP 1.0, assume close after body
> HTTP/1.0 200 OK
> Server: Apache-Coyote/1.1
>  Content-Type: text/xml;charset=ISO-8859-1
> Content-Length: 152

Т.е. соединение висело без дела достаточно времени, удаленная сторона его прибила (или оно просто само умерло из-за каких-то сетевых неприятностей). При попытке переиспользования соединения libcurl это диагностировал и попытался восстановить соединение и передать данные заново. Только почему-то не передал.

А не передал по простой причине – моя функция при новом обращении к ней от libcurl-а ничего больше не отдала.

Ларчик, как водится, открывался просто – во время первого обращения к std_istream_read_function был достигнут конец входного потока (у объекта stringstream был установлен eofbit). А посему последующие обращения сразу же обламывались.

Вот такая вот неожиданная для меня особенность работы libcurl. И, что обидно, нигде не замечал в документации описания того, что libcurl может обращаться к ней повторно для того, чтобы перечитать поток заново с самого начала.

В процессе разбирательства с libcurl выяснилось, что в нее в версии 7.18.0 была добавлена специальная опция CURLOPT_SEEKFUNCTION, которая специально для таких вещей предназначена – для перехода на конкретную позицию передаваемых на HTTP-сервер данных. Но, как показали эксперименты, для POST-запросов она не используется. Поскольку предназначена для операций upload (т.е. HTTP PUT-запросов) и для случаев с разрывами keep-alive соединений она не задействуется.

Посему пришлось вносить в свою функцию несколько строк:

if( !(*from) )
  if( from->eof() )
    {
      // Для того, чтобы можно было начать читать поток заново,
      // если это потребуется из-за разрыва keep-alive соединения.
      from->clear();
      from->seekg( 0 );

      return 0;
    }
  else
    return CURL_READFUNC_ABORT;

После чего все заработало.

PS. Логгирования мало не бывает! :)

[life.art] Портреты из мусора Зака Фримана

Американский художник Зак Фриман начиная с 1999 года создает серию картин из мусора – он собирает всякую ерунду, наклеивает ее на деревянную основу:

В результате чего получается вот такое:

Если интересно, то вот галерея картин из мусора.

вторник, 23 ноября 2010 г.

[prog] Маленький хинт: MS SQL Server, NT Authentification и ODBC

Из C++ных программ работаем с MS SQL Server через ODBC. Обычно настраиваем строку подключения вручную (т.е. с указанием параметров DRIVER, SERVER и пр.), хотя иногда используется и настройка через системный DSN. Но всегда раньше подключались к БД через SQL Server-аутентификацию.

А тут потребовалось для подключения к MS SQL-ю использовать NT Authentification. Попробовали настроить системный DSN (из под другого пользователя-администратора), но при попытке подключиться к БД натыкались на ошибку: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified.

Честно скажу, фиг знает почему не удавалось найти DSN. Но в результате гугления нашелся более простой способ. Оказывается, в параметрах подключения нужно указать “Trusted_Connection=yes”. Например, строка подключения к БД может иметь вид:

DRIVER={SQL Native Client};SERVER=somehost;DATABASE=somedb;Trusted_Connection=yes

И все, и не нужно DSN-ы настраивать.

PS. Источник.

[life.sport.darts] Хвастаюсь: первый 180 во время матча

Не смотря на то, что на тренировках я уже довольно регулярно делаю 180, в проходящих у нас в офисе матчах я сделал сегодня 180 в первый раз. В матче это намного сложнее, т.к. в отличии от тренировок, руки трясутся. Сильно трясутся :)

Немного обидно что не смотря на максимум я все-таки проиграл. Причем проиграл и тот лег, в котором максимум выбил. Но радует другое.

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

Так что тренироваться продолжу с увеличенной энергией :)

понедельник, 22 ноября 2010 г.

[blog] Небольшое извинение перед читателями

Хочу извинится перед читателями, которые ждут в моем блоге заметок о программировании. К сожалению, в последние дни писать на эти темы некогда – много разнообразной работы, увеличился объем тренировок, да и трансляции Grand Slam of Darts отнимали немало времени. И такая ситуация, боюсь, сохранится еще в течении пары недель. Поэтому вряд ли мне удаться написать что-нибудь интересное на тему программизмов в ближайшее время. Есть несколько тем, на которые хотелось бы высказаться, и я постараюсь это сделать как только представиться возможность.

Пока же буду выкладывать ссылки на поднакопившиеся материалы из категории “Вау!” Надеюсь, что это хоть как-то скрасит ожидание :)

Вот, для затравки и для поднятия настроения в начале рабочей недели, маленький пример занимательной арифметики в картинках:

Остальные примеры можно посмотреть здесь.

воскресенье, 21 ноября 2010 г.

[life.sport.darts] Завершился Grand Slam of Darts 2010

После двух абсолютно невыразительных полуфиналов (Стив Битон сопротивлялся Скотту Уэйтсу лишь до счета 7:7, а потом уступил 9:16; а в матче Джеймса Уэйда против Уэйна Джонса вообще борьбы не было – Уэйд весь матч шел впереди и уверенно выиграл 16:6) турнир Grand Slam of Darts 2010 завершился совершенно невероятным финалом Джеймс Уэйд против Скотта Уэйтса.

Джеймс Уэйд начал очень мощно – 8:0! Но Скотт Уэйтс сначала потихонечку (8:2), затем увереннее (9:6), затем еще увереннее (11:9) перехватывал инициативу. Чтобы при счете 11:11 наступил, на мой взгляд, переломный момент матча.

Уэйтс вышел на не очень большой checkout (по-моему, у него было меньше сотни), но не смог закрыться и оставил себе 9 очков. Тогда как у Уэйда было 166. Уэйд смог выйти на 40. Затем пришел черед бросать Уэйтсу. И Скотт умудрился первым дротиком вместо 1 попасть в 18! Огромный шанс для Уэйда. Однако, случилось почти невероятное – Уэйд не смог закрыть 40 тремя дротиками (первым промахнулся, второй пошел в 20, а третий мимо d10). Ну а тут уж Уэйтс своей возможности не упустил – первым дротиком в 1, вторым в d4. Счет стал 11:12, после чего вполне закономерно дошел и до 12:16 – Скотт Уэйтс выиграл!

Лично мне интересно было следить именно за Уэйтсом по двум причинам. Во-первых, это игрок BDO, который, тем не менее, смог уделать сильных представителей PDC. А во-вторых, Уэйтс играет дротками фирмы Red Dragon Darts (у которой я и сам когда-то закупался). И, кроме того, я впервые увидел, как кто-то играет дротиками такой необычной (на мой взгляд) формы:

Да как играет! :)

[life.photo] Тибет на фотографиях Юрия Бирюкова

У нас в городе живет фотограф, путешественник и преподаватель Юрий Бирюков. Я сам с ним, однако, не знаком, но несколько моих коллег знают его лично и даже посещали его занятия. Как раз с их подачи я и почитываю иногда блог Юрия. А сегодня представляю в рубрике “Знакомство с фотомастером” некоторые из его фотографий, сделанные в путешествиях по Тибету.

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

[life.sport.darts] Стив Битон выбил Фила Тейлора из Grand Slam of Darts!

Только что закончился последний четвертьфинал Grand Slam of Darts. В сумасшедшем матче Стив Битон выиграл у Фила Тейлора – 16:14!!!

Сначала Фил Тейлор выигрывал 4:1, потом Битон сравнял до 5:5, а потом и вышел вперед 7:5, затем Фил Тейлор вырвался далеко вперед (10:7, 14:11) и казалось, что Битону ничего не светит. Но счет стал сначала 14:14 и, наконец, 15:14.

А checkout в последнем леге был вообще невообразимым. Когда Битон вышел списывать 105 у Тейлора было порядка 260. Но Битон не смог сделать checkout – у него осталось 40 (40 – это всего лишь одно попадание в d20). Тейлор списал свой счет до 93, но пришла очередь бросать Битону. Первый дротик мимо, а второй – в 5! Пришлось третьим дротиком Стиву выходить на 32.

У Тейлора появился реальный шанс сравнять счет, но третьим дротиком он не попал в Bull и у него осталось 25.

Бросать вышел Битон. Нужно было попадать в d16, а в этот сектор Стив весь матч попадал стабильно. Но под тяжестью момента он промазал первым дротиком. Затем вторым. Попал третьим!

В отличии от Тейлора у Битона в этом матче с попаданиями в удвоения было все нормально. Что и сказалось в драматической развязке последнего лега.

Аналогичная история сегодня приключилась в матче Джеймса Уэйда и Терри Дженкинса. Когда при счете в матче 15:15 и при счете в леге, кажется, 20:20 Уэйд вышел бросать и вместо своего любимого d10 попал просто в 10, а потом вторым дротиком промазал мимо d5, но закрылся все-таки третьим броском.

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

суббота, 20 ноября 2010 г.

[life.photo] Два снимка из серии Great Migrations

В разделе Big Picture сайта The Boston Globe опубликована коллекция Great Migrations. Зацепили два снимка оттуда.

Разборки между стервятниками:

И просто красота. Исчезающая после дуновения ветра :)

[life.sport.darts] Фил Тейлор vs Ронни Бакстер – 10:1

Только что закончился матч 1/8 финала Grand Slam of Darts между Филом Тейлором и Ронни Бакстером. Главная интрига матча заключалась в том, сумеет ли Ронни Бакстер взять хотя бы один лег.

Сумел. При счете 9:0 :)

PS. Фил Тейлор после проигрыша Теду Хинки снял очки и последние два матча проводил без них.

PPS. Жалко, что ван Барневельд вылетел сегодня в 1/8. Хоть и заслужено вылетел, но все равно жалко.

пятница, 19 ноября 2010 г.

[life.photo] Классно пойманный момент поединка фехтовальщиков

Поединок между китайцем Li Guojie (это его голова в кадре) и японцем Shogo Nishida на Азиатских Играх в Китае.

Снимок найден в очередном выпуске WSJ’s Photos of the Days.

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

[prog] И вновь на тему 1K строк в день

Вчера в комментариях к заметке “Неожиданное продолжение истории об 1K строк на C в день” отметился сам герой истории Лев Валкин. Процитирую:

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

Т.о. Лев Валкин опровергает мое заявление о том, что выдавать по 1K отлаженных строк в день невозможно. Оказывается, возможно.

Что остается сказать? Феноменальная производительность. Я не знаю, за счет чего она достигается. Впрочем, я не знаю, например, как люди становятся Олимпийскими чемпионами. Возможно, это все из одной оперы.

Но вывод из этой истории у меня получается такой: даже если ты можешь делать что-то из ряда вон выходящее и феноменальное, то еще не факт, что это следует делать.

среда, 17 ноября 2010 г.

[life;prog] Трагичная фотография в подтверждение старого афоризма

Еще на первом курсе универа я услышал афоризм:

Если бы строители строили здания так же, как программисты пишут программы, первый залетевший дятел разрушил бы цивилизацию.

И было хорошо, что строители более тщательно относятся к своей работе. Но не всегда:

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

Похоже, что термин “индусский код” начинает проникать и в строительство :(

PS. Снимок найден в очередном выпуске WSJ’s Photos of the Day.

понедельник, 15 ноября 2010 г.

[life.sport.darts] Под впечатлением от матча Дэррила Фитона и Триши Райт

Только сегодня озадачился вопросом “Зачем женщинам играть с мужчинами в дартс?” – мол, все равно проигрывают и крупно, как сегодня на Grand Slam of Darts состоялся матч между Деррилом Фитоном и Тришей Райт. И Триша чуть было не задала трепку Фитону! Хотя и проиграла 3:5, но вполне могла свести к 4:5, а то и к 5:4.

Деррил начал очень странно – быстро доходил до удвоений, но потом мазал безбожно. Что позволило Трише взять один лет – счет стал 1:1. Потом Деррил чуть выправил удвоения и на перерыв игроки уходили со счетом 3:1 в пользу Фитона.

А вот после перерыва произошло чудо: Триша Райт взяла два лега подряд. И сделала два максимума! И даже в двух проигранных ей последних легах она серьезно давила Фитона, но чуть-чуть не хватало везения. С другой стороны, мне кажется, что именно это давление позволило Фитону взять себя в руки и настроиться на игру. Поэтому и последний лег он взял с внушающим уважение checkout-ом в 157 очков.

[life.sport.darts] Впечатления от первых дней Grand Slam of Darts

Прошедшие выходные провел за просмотром первых туров группового этапа турнила Grand Slam of Darts. Хотя, к сожалению, всех игр не посмотрел (так, пропустил удивительный матч Ко Стомп vs Скот Уэйтс, когда Ко Стомп проигрывая 0:4 умудрился довести до 4:4, но все равно проиграл решающий лег; а так же не посмотрел checkout в 170 очков в исполнении Колина Ллойда). Но и без того впечатлений достаточно.

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

Фил Тейлор играл в очках – впервые за свою карьеру. Но об этом и так до турнира много говорилось. Скажу только, что на этот шаг Тейлор решился после четырех поражений (сначала в World Grand Prix от Адриана Льюиса, затем от Саймона Витлока в Champions League Darts, потом еще на двух турнирах поменьше).

Не знаю, очки ли мешали Тейлору или последние проигрыши, но играл он очень не уверено. Столько мазал по удвоениям, что я боялся, что он вообще проиграет. Но обошлось.

Очень хорошо показали себя игроки BDO. Тони О’Ши выиграл уже два матча (в том числе и у Джеймса Уэйда), Дейв Крисналл разнес в пух и прах Саймона Витлока, а потом очень достойно сражался с Робертом Торнтоном, Тэд Хенки сделал очень хорошо играющего в последнее время Уэса Ньютона, Скотт Уэйтс сломил Ко Стомпа. И если от О’Ши я ждал подобной игры, а так же подозревал, что Хенки будет крепким орешком, но вот чтобы так сильно игроки BDO выглядели “всем скопом” – вот это приятная неожиданность. Посмотрим, что будет дальше.

Жалко, что Саймон Витлок проиграл два матча и точно не выйдет в плей-офф. Обычно я болею за него.

Может это было волнение первых игровых дней, но игроки часто делали совсем маленькие наборы – по 30, 41, 45 очков. Несколько раз дело даже доходило до удвоения единицы! :) Более того, в матче Марк Вебстер vs Уэйн Джонс был случай, когда имея в остатке 5 очков Марку Вебстеру нужну было попасть в единицу, чтобы довести остаток до 4-х, но он промазал и попал в 18! Ну прям все как у нас в офисных играх ;)

Ну а главный вопрос у меня после первых дней турнира – это зачем женщинам играть с мужчинами? Чемпионка Мира 2010 года, Стейси Брумберг, проиграла два матча и смогла взять всего 3 лега (причем два из них в матче с Джоном Хендриксоном, которого я раньше в крупных турнирах вообще не видел). Т.е. очевидно, что лучшие игроки среди женщин не способны тягаться с лучшими мужчинами-дартсистами. Ну так и зачем этот делать? Да, Анастасия Добромыслова несколько раз выигрывала у мужчин. Но это происходит настолько редко (достаточно посмотреть на ее результаты в мужских турнирах), что это как раз то самое исключение, которое лишь подтверждает правило.

Пока все. Турнир продолжается. Будем посмотреть дальше :)

[life.idiocy] Пример бытового идиотизма в компании умных людей

Сегодня утром в офисе обнаружил на мишени для дартс фотографию:

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

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

суббота, 13 ноября 2010 г.

[prog] Книга “Язык программирования D” от Александреску?

10 ноября в news-группе digitalmars.D.announce Андрей Александресу написал, что его книгу “The D Programming Language” собрались переводить на русский язык.

Дополнительных подробностей пока нет.

[prog.flame] Unix-оиды иногда такие unix-оиды

Отличная политика – есть только Unix, а все остальное ниипёт! Потребуется тебе, например, libiconv под Windows скомпилировать, распакуешь ее архив и обнаружишь там ахиренных размеров configure и маленький файлик README.woe32, в котором английским по белому написано:

Installation on Woe32 (WinNT/2000/XP/Vista, Win95/98/ME):

Building requires the mingw or cygwin development environment (includes gcc).
MS Visual C/C++ with "nmake" is no longer supported.

Вот так! Херня эта ваша Windows, нет Бога кроме Unix и autotools пророк его!

Не понимаю. Если в этом есть какой-то прагматизм, то он с оттенком снобизма и сепаратизма. Мол, мы, Ъ-ру Unix-оиды и нам нужен только Unix, а если тебе вдруг понадобились какие-то из наших инструментов, то давайте к нам на Колыму в Unix. А разработчики кроссплатформенного софта, видать, ими рассматриваются как шпионы или предатели истинной веры. Ну или просто мазохисты: мол, мосье хочеть познать толк в извращениях, ну тогда вот тебе библиотека с configure – острота ощущений обеспечена!

Впрочем, я забыл. Для Unix-оидов кроссплатформенность означает возможность скомпилировать программу на разных версиях Unix-а.

PS. Вообще, как я понял, если в C/C++ программе потребовалось работа с кодировками, то нужно либо брать версию 1.9.2 libiconv, скомпилированную когда-то добрым человеком под Win32. Либо использовать здоровенный ICU. Либо же задействовать QTextCodec из еще более здоровенной Qt.

пятница, 12 ноября 2010 г.

[prog.flame] Apple отдает свои наработки в OpenJDK

Не успел я похоронить Java на Mac OS-ах, как пришла новость о присоединении Apple к OpenJDK. Компания Apple передаст OpenJDK свои наработки, созданные в процессе реализации Java для Mac OS.

Так же было заявлено, что Java 6 будет доступна для Mac OS X Lion, а Java 7 и последующие версии Java для Mac OS будут подготавливаться самим Oracle.

Абыдно. Как упертому Java-ненависнику мне все это не нравится :(

[life.sport.darts] Завтра стартует Grand Slam of Darts

Завтра, 13-го ноября, стартует большой турнир Grand Slam of Darts. Примечателен он тем, что на нем встречаются лучшие игроки организаций PDC (Professional Darts Corporation – самая сильная лига дартс) и BDO (British Darts Organization – которую можно считать кузницей кадров для PDC). Что интересно, вместе с мужчинами будут играть две женщины: Стейси Брумберг и Триша Райт (пытался я посмотреть их финал женского Чемпионата Мира 2010 – имхо, не женское дело тягаться с мужчинами в дартсе).

Уже известно расписание встреч. На www.bet365.com в списке Live-трансляций первые встречи уже обозначены, значит будем смотреть в on-line.

Турнир продолжится до 21-го ноября. Так что по вечерам я, похоже, буду потерян для общества :)