суббота, 5 февраля 2011 г.

[prog] Пара трюков из реализации виртуальной машины Ovm для RTJS

В прошлый раз, когда я писал о Real-Time Java Specification, я дал ссылочку на список материалов от разработчиков виртуальной машины Ovm. За прошедшее время удалось прочесть большую статью A Real-Time Java Virtual Machine with Applications in Avionics оттуда. Сама статья для меня оказалась мало полезной и не очень интересной, т.к. ни виртуальными машинами для Java, ни Real-Time Java я не занимаюсь. Хотя любопытно было узнать, что под управлением этого Ovm люди умудрились запустить небольшой беспилотник. Но две вещи запомнились.

Во-первых, интересным образом разработчики Ovm поступили с многопоточностью и диспетчеризацией потоков. Поскольку Ovm работает на одной нити ОС, то всю диспетчеризацию Java-потоков Ovm делает сама. И для того, чтобы прерывать текущий поток и передавать управление другому потоку они сделали следующее: при трансляции Java-исходников просто напросто добавляются специальные вызовы в код (называемые Poll Check-ами). Т.е. если изначально программист написал что-то вроде:

void someMethod() {
   ...
   while(...) {
      ...
   }
}

То во время трансляции он будет преобразован в:

void someMethod() {
   POOLCHECK();
   ...
   while(...) {
      ...
      POOLCHECK();
   }
}

А внутри конструкции POOLCHEK происходит проверка необходимости передиспетчеризации нитей. Т.е. не внешний по отношению к коду диспетчер определяет, пора ли текущую нить прервать, а сама текущая нить время от времени озадачивается вопросом “А не пора ли дать управление кому-нибудь другому?”

Во-вторых, разработка Ovm шла еще до появления Java 1.5 с аннотациями, поэтому каких-то специальных средств связать метаинформацию с кодом у разработчиков Ovm не было. И они поступили очень остроумно, на мой взгляд – задействовали для этих целей инструкцию throws:

void storeCheck(VM_Address src, int offset, VM_Address tgt)
   throws PragmaNoPollcheck, PragmaNoBarriers, PragmaInline
{
   int sb = src.asInt() >>> blockShift;
   int tb = tgt.asInt() >>> blockShift;
   if (sb != tb) storeCheckSlow(sb, tb);
}

Здесь PragmaNoPollcheck, PragmaNoBarriers и PragmaInline – это не имена исключений, которые могут выбрасываться из метода, а инструкции для Ovm-овского компилятора.

Забавный подход. Который демонстрирует, что любые штатные возможности могут использованны самым непредсказуемым образом (здесь я с ностальгией вспоминаю игрушку Lode Runner, реализованную на алфавитно-цифровых дисплеях Robotron 1715).

[life.sport.darts] Похоже, что Фил Тейлор опять сменил дротики

Действующая легенда мирового дартса, 15-кратный Чемпион Мира, Фил Тейлор на проходящем сейчас турнире PDC Championship Finals играет новыми дротиками. Понятное дело, поскольку я сам очень часто меняю свои дротики, я не смог пройти мимо ;)

Историю смены дротиков Филом Тейлором можно посмотреть на сайте фирмы Unicorn. Долгое время (с 1996 по 2008) он использовал длинные и тонкие дротики с цилиндрическим баррелем. Но в 2008 он сначала перешел на Sigma Pro 970, а затем, так же в 2008, он вооружился “бомбочками” под названием Phase 5. Именно с ними он стал 15-кратным чемпионом и совершил в 2010 году уникальное достижение – два nine darts finish в одном матче.

Но в последние месяцы дела у Тейлора шли не очень, не было крупных побед. На Grand Slam Of Darts в 2010 он даже появился в очках, но затем снял их. Ни то, ни другое не помогло Тейлору ни на Grand Slam of Dars, ни на Чемпионате Мира 2011, где он не смог показать своей лучшей игры.

Видимо, Тейлор решил еще что-нибудь поменять и на этот раз это оказались новые дротики. Что за модель пока не понятно. Ни на сайте Тейлора, ни на сайте Unicorn-а пока информации нет. Точно не Phase 5. По внешнему виду сильно напоминают Sigma. Поэтому будем посмотреть дальше. Тем более, что Тейлор уверенно (хоть и не блестяще) выиграл Стива Брауна 6:2 и прошел в следующий круг, где сыграет с Джеймсом Уэйдом.

PS. Ну раз сам Тейлор сменил дротики, может и мне решиться на очередной эксперимент ;)

четверг, 3 февраля 2011 г.

[life.sport.darts] Похоже, что bet365.com прикрыл халяву с live-трансляциями

До недавнего времени я смотрел прямые трансляции с дартс-турниров PDC на сайте bet365.com. Там достаточно было только зарегистрироваться и смотреть после этого live-трансляции бесплатно. Сегодня попробовал продолжить в том же духе и обломался :(

Трансляции теперь доступны только если внести денежку на свой депозит на сайте. На соответствующей страничке какой-то странный раздел с лимитами по времени и по деньгам. Поскольку я не понял, что это такое и зачем, то решил на bet365 свои кровные не перечислять, а купил месячную подписку на трансляции на сайте www.pdc.tv – официальном сайте PDC. Буду посмотреть, может дело дойдет и до покупки годовой подписки.

Пока впечатления двойственные. Во-первых, в Opera не удалось запустить плейер – что-то не могло загрузиться. Под Chrome загрузилось, правда потребовало ставить какой-то компонент из состава Windows Media Player. Во-вторых, как-то там слишком часто спрашивают логин и пароль, причем иногда даже не понятно, удалось залогиниться или нет.

Картинка поначалу была корявая, трансляция постоянно срывалась. Только вот не знаю из-за чего – моего Интернета или проблем с их сервером. Минут через 40, однако, трансляция полностью наладилась. Плюс есть возможность развернуть картинку на Full Screen. Так что сейчас с удовольствием смотрю PDC Players Championship Finals :)

PS. Приятно чувствовать себя потребителем легального контента ;)

вторник, 1 февраля 2011 г.

[prog.humour] Он в совершенстве знал каратэ-до, айкидо, дзюдо, кэндо…

… и еще много других страшных слов.

Вчерашнее воплощение этого анекдота на LOR-е:

Ты уже аслил объектный паттерн "стратегия" по гофофаулеру для языков с функциями высших порядков? Или рефакторинг encapsulate collection для языков с иммутабельными коллекциями? Encapsulate Downcast - для языков с параметрическим полиморфизмом или динамических языков? Encapsulate Field для языков с пропертями? Introduce Null Object/Replace Error Code with Exception для языков с Option/Maybe?...?

понедельник, 31 января 2011 г.

[prog] Релиз POCO 1.4.1

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

Релиз содержит баг-фиксы + несколько каких-то мелких улучшений. А так же экспериментальную поддержку VxWorks (полную поддержку которой планируют добавить в следующих релизах). Более подробную информацию можно найти в CHANGELOG.

[life.sport.darts] Мечты сбываются: checkout 170!

170 – это максимальный checkout (т.е. списание очков точно в ноль), который можно осуществить тремя дротиками. И я таки это сделал! :)))

Примечательно, что сие достижение стало в прямом смысле следствием девиза “Не отступать и не сдаваться!”, поскольку произошло оно в самом конце тренировки, на которой у меня вообще ничего не получалось. Бывают такие дни: не то, что 140 или 100 очков не набираются, а и в T20 хотя бы один дротик крайне редко залетает (как правило, после таких дней следуют покупки новых дротиков). И последние минут десять я тренировался уже, что называется, на зубах, заставляя самого себя – мол, решил бросать до девяти часов, так бросай. Вот и бросил напоследок :)

PS. Играйте в дартс, это здорово! ;)

воскресенье, 30 января 2011 г.

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

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

Близкие враги. Очень серьезный и тяжелый фильм о войне.

Инкассатор. Хорошая французская психологически-криминальная драма.

Ёлки. Иногда смешная и трогательная комедия.

Щедрость Перрье. Местами наивная, местами забавная криминальная драма. Мне понравилось.

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

Турист. Неудавшийся американский ремейк отличной французской картины “Неуловимый”. Рекомендую смотреть именно французский оригинал. Для себя же с удовольствием отметил, что Софи Марсо запросто уделывает Анжелину Джоли и в плане женского обаяния, и в актерском плане.

Убойные каникулы. Нормальная дебильно-молодежная черная комедия.


В прошедшем месяце пересмотрел пару старых фильмов. Интересные впечатления.

Первым пересмотрел “Миссия невыполнима-1” с Томом Крузом. Помню, что пятнадцать лет назад сам фильм мне понравился (хотя то, что там проделывали с компьютерами выглядело сказочным уже тогда), а вот заглавная музыкальная тема к фильму – нет. Вообще, фильм тогда стал в каком-то роде знаковым. Именно благодаря ему в мой лексикон вошла фраза-понятие mission impossible (поскольку оригинальный американский сериал 60-х годов смотреть, естественно, не доводилось).

И вот посмотрел его спустя столько времени… Фильм – редкая херня. Зато музыкальная тема просто забойная! :)

Никита. Тот самый оригинальный французский фильм 1990-го года. Прекрасно помню, как в 1993-м я сначала посмотрел его американский ремейк “Point of No Return” (который у нас назывался “Ее звали Никита”). А потом случайно узнал, что это переделка французской ленты и долго искал именно оригинальную версию. Когда же нашел, был поражен тем, насколько французский вариант мощнее и интереснее.

А давеча захотелось пересмотреть. Отличный фильм! Если кто-то не видел – рекомендую. Не смотря на свой 20-ти летний возраст, смотрится на одном дыхании.