четверг, 14 ноября 2013 г.

[prog.c++] Состоялся релиз SObjectizer Assembly 201311

Ноябрьская сборка SObjectizer и его подпроектов зафиксирована в виде тега и доступна для загрузки с SourceForge.

Это второй публичный релиз SObjectizer-5 в этом году. За прошедшее время SObjectizer и его подпроекты были довольно серьезно переработаны: удалены русские комментарии, произведен рефакторинг кода, были внесены различные мелкие и не очень изменения, которые упрощают использование SObjectizer. Но, главное, это первый серьезный шаг к тому, чтобы начать продвигать SObjectizer за пределами Рунета.

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

Данный релиз доступен в виде трех архивов:

  • so-201311-00.7z содержит исходные тексты только SObjectizer-а и его подпроектов. Необходимый для SObjectizer-а ACE нужно скачивать и устанавливать вручную;
  • so-201311-00+ACE.7z содержит и SObjectizer с подпроектами, и архив с ACE 6.2.0;
  • so-201311-00--doc-html.7z содержит сгенерированный Doxygen-ом API Reference Manual.

Для компиляции нужен Ruby и Mxx_ru. Данная версия проверялась под GCC 4.8.1/4.8.2, а так же VC++ 2010 (в 32-х и 64-битовых вариантах).


Ну вот как-то так. Непростой оказалась подготовка этого релиза. Но все-таки мы сделали это. Дальше будет интереснее и веселее.

PS. Буду очень признателен за распространение этой новости (например, в виде +1 в Google+).

[prog.jvm] Релиз языка Ceylon 1.0.0

Оказывается, два дня назад состоялся релиз версии 1.0.0 нового языка программирования для JVM/JavaScript под названием Ceylon, который в течении нескольких лет разрабатывался в RedHat.

Интересно. В мире JVM есть Java (как по мне, так крайне убогая не смотря ни на что), Scala (которая по сложности переплюнет C++), мало кому известный Gosu и теперь вот Ceylon. Ну и не за горами Kotlin от JetBrains. Можно начинать делать ставки на то, кто выживет в итоге. Лично мне кажется, что Java :)

[life.sport.darts] Тед Хэнки съедает своих соперников морально

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

Но есть Тед "The Count" Хэнки, двухкратный Чемпион Мира BDO. Со своим фирменным стилем поведения на матчах. И этим своим поведением он не просто выбивает своих соперников "из седла", заставляя их терять спокойствие. Он делает это настолько мощно, что не восхищаться этим невозможно.

Если кому-то интересно, как это выглядит, то поищите на YouTube записи двух последних игр Теда Хэнки на проходящем сейчас Grand Slam of Darts 2013 (вот поисковая фраза). Первая игра -- это игра за выход из группы против Майкла Смита (Ted Hankey vs Michael Smith, эта игра уже есть на YouTube). Очень сильный, но молодой игрок, Майкл Смит был буквально раздавлен поведением Хэнки. Я видел, как мощно Смит играл в первой групповой встрече против Дейва Чизнелла и не мог поверить, что человек может так "рассыпаться".

Но еще более важную встречу Тед Хэнки выиграл вчера в 1/8 против одного из лучших мировых дартсменов Саймона Витлока (Upd. вот одна из записей этой игры). И проигрывая 1-6 в матче до 10 побед Тед таки смог заставить Витлока нервничать и ошибаться в решающие моменты. В итоге -- феноменальная победа Хэнки 10-9! Причем в решающем леге Витлок был настолько деморализован, что даже не смог оказать на Хэнки хоть какого-то давления.

среда, 13 ноября 2013 г.

[prog.c++] Тег so_sysconf-4.2.0 как важная промежуточная веха

Сегодня зафиксирована в виде тега версия 4.2.0 одного из SObjectizer-проектов, so_sysconf. Веха эта, хоть и совершенно промежуточная, но для меня очень важная. Она означает, что закончился непростой и не быстрый процесс перевода комментариев с русского на английский язык. Который, плюс ко всему, вылился еще и трудоемкий первичный code review, на который у меня не было времени с 2012-го года.

Говоря о SObjectizer я, как правило, говорю сразу о двух вещах:

Во-первых, есть ядро SObjectizer, которое, собственно и называется SObjectizer (код ядра в пятой версии принадлежит пространству имен so_5, ранее это было пространство имен so_4). Ядро -- это минимум, который позволяет создавать агентов, диспетчеров и запускать все это совместно. Если в каком-то проекте требуется лишь обмен информацией между объектами-агентами посредством сообщений, то достаточно только ядра SObjectizer.

Во-вторых, над ядром SObjectizer создано несколько проектов, которые облегчают прикладное программирование с использованием SObjectizer. По привычке мы называем их "подпроекты", истоки этого термина можно найти в старой статье про Subversion и Mxx_ru. Таких подпроектов на базе SObjectizer сейчас четыре:

  • so_log, небольшая обертка над ACE_Logging Framework, предназначенная для операций логирования именно из SO-агентов (включая и небольшой Ruby DSL для упрощения логирования);
  • so_5_transport, библиотека для представления транспортных каналов в виде агентов. Используется при разработке сетевых приложений с применением агентного подхода. На данный момент поддерживаются потоковые TCP/IP сокеты (в качестве "подложки" задействован коммуникационный слой ACE с его реакторами и ACE_Event_Handler-ами);
  • mbapi_4, библиотека для обмена прикладными сообщениями. Обеспечивает более высокий уровень абстракции, чем ядро SObjectizer. Так же позволяет распределенным приложениям прозрачным образом обмениваться информацией между собой (для транспорта используется so_5_transport);
  • so_sysconf, библиотека для сборки SO-приложений "из кубиков". Те или иные прикладные агенты (кооперации агентов) формляются в виде DLL, а so_sysconf позволяет собирать приложение из набора таких DLL, подгружая DLL-ки и регистрируя коперации из них (в ACE есть что-то подобное под названием ACE Service Configurator Framework).

Так же для четвертого SObjectizer был еще один подпроект - gemont - для распространения мониторинговой информации, но под SO-5 он еще не адаптирован.

Так вот, очень часто говоря о SObjectizer я имел в виду и ядро, и все описанные выше подпроекты. А завершение работ над версией 4.2.0 подпроекта so_sysconf означает, что следующим шагом будет подготовка "релиза" на SourceForge.

Скорее всего мы сделаем три архива. Первый будет содержать только исходные тексты ядра SO и его подпроектов. Второй в дополнение к ним будет так же содержать внутри и архив с исходниками ACE (т.к. без них SO не собрать). Третий архив будет содержать сгенерированный посредством Doxygen набор html-файлов (что-то, что может быть названо API Reference Manual).

Ну и в дальнейшем мы планируем поступать именно так. Раз в несколько месяцев будут собираться все актуальные последние стабильные версии SO и его подпроектов и оформляться в виде архивов для загрузки с SourceForge. Промежуточные стабильные и нестабильные версии SO можно будет брать из SVN-репозитория на SourceForge.

Сразу скажу, что сейчас SO -- это OpenSource-проект со всеми вытекающими ;) Т.е. мы делаем то, что мы считаем нужным и важным. Используя то, что удобно нам. В первую очередь это касается системы сборки. Ну вот так сложилось, что мы сидим на Mxx_ru, поэтому SO собирается Mxx_ru. Понятно, что неудобно для тех, кто Mxx_ru не пользуется. Но у нас нет времени добавлять в SO поддержку каких-то других систем (CMake, SCons, MSBuild или еще чего-то). Как и в любом другом OpenSource-проекте, это может появится, если найдутся желающие такими вещами заниматься :) Мы же пока точно этого делать не будем, т.к. есть более актуальные для проекта вещи, на наш взгляд. Например, наполнение Wiki-проекта на SourceForge. С тем, чтобы информация о проекте, какие-то обучающие материалы, документация на английском языка таки появилась и была доступна широкому кругу потенциальных пользователей SObjectizer. И это не говоря о том, чтобы добавлять в SO новые фичи, исправлять ошибки, делать его еще лучше и быстрее...

В общем, SObjectizer живет и развивается! Stay tunned ;)

[life.politic] Таки выскажусь про русофобию в журнале "Вокруг света"

С детства с большим уважением отношусь к журналу "Вокруг света". Не всегда была возможность регулярно его читать, но в последние несколько лет стараюсь покупать каждый его номер. Многие вещи в нем читаю с удовольствием. Но вот проявления антисоветизма и русофобии, периодически всплывающие в материалах журнала откровенно подзадалбывают. Во времена редакторства Маши Гессен этого было много, сейчас меньше, но все равно встречается. Последней каплей, заставившей таки высказаться на эту тему, стало предисловие главного редактора Александра Монахова к 11-му, ноябрьскому, номеру "Вокруг света" за 2013 год:

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

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

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

вторник, 12 ноября 2013 г.

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

В минувшее воскресенье принял участие в 5-м, предпоследнем, этапе Кубка РБ по дартс. Мало в этом году удавалось выбираться на турниры. Поэтому сейчас, как предоставляется возможность, стараюсь это делать. Тем более, что в оставшееся до Нового Года время получится подъехать всего на два соревнования: Чемпионат РБ (1-го декабря) и Финал Кубка РБ (ориентировочно 15-го декабря).

Вспоминать прошедший 5-й этап не очень приятно. Для меня он стал этапом упущенных возможностей. В важнейшие моменты матчей я умудрялся мазать третьим дротиком на 100+ закрытиях.

В первый раз это было в парной встрече против Кириченка/Орешкевича. В решающем леге при счете 2-2 мы с Андреем Бузуверовым сильно отстали по наборам. Анатолий Кириченок вышел закрывать какое-то небольшое число, что-то около 55, тогда как у нас было 152. Первым дротиком Кириченок в 15 не попал. Оставшимися двумя дротиками он закрываться не стал, а вывел своего партнера на D16. Дальше нужно было бросать мне и я понимал, что за такую самоуверенность соперников нужно наказывать. Хотя при остатке в 152 очка это выглядело лишь благими намерениями :( Но я попал первым дротиком в T20, вторым еще раз в T20 и сразу же третьим сильно ниже D16! Отходил я от мишени с пониманием того, что противник нам этого промаха не простит. Так оно и вышло. Орешкевич закрылся первым же дротиком.

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

Второй большой checkout сорвался в следующей парной игре против пары Малец/Богданов. Наши противники опять уже висели на удвоении, тогда как у нас оставалось 110. Первым дротиком я попал в T20, второй, после некоторых сомнений, я отправил в 10, а третий пошел выше D20. До сих пор думаю, что бросать второй в 10 не нужно было. Нужно было рисковать и бросать в Bull. Попал бы, был бы хороший удар по противникам, а у нас бы кураж появился. Я же решил пойти по более надежному варианту, но одного дротика для закрытия мне оказалось мало. В итоге этот матч мы проиграли 0-3.

Третий большой checkout, и опять в 110 очков, сорвался в ключевой для меня игре личного турнира против Георгия Перевозчикова. При счете 1:1 мне обязательно нужно было закрывать 110 в своем подходе, первый дротик ушел в 20, второй попал в T18, а третий пошел мимо D18. В следующем подходе Жора закрылся, счет стал 2-1 в его пользу. А в следующем леге Жора даже не дал мне дойти до закрытия. Матч я проиграл 1-3 и мне не хватило всего одного лега для выхода из группы на олимпийку. Как раз того самого :(

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

Еще одно досадное большое закрытие у меня сорвалось в матче с Андреем Тарасенко. При остатке в 97 очков первым я промахиваюсь мимо 19-го сектора и попадаю в 7-ку. Зато второй идет точно в T18, а третий бросок срывается и я попадаю в D4 вместо D18. Потом, правда, мы с Андреем еще почудили промахиваясь мимо удвоений (он мимо D8, я мимо D14), но в итоге, Андрей лег взял. Для меня это оказалось не так страшно, победу я чудом увел у Андрея из под носа в решающем леге. И это, пожалуй, стало единственным светлым пятном на прошедшем турнире.

Далее было еще веселее. Выход троих(!) игроков из группы зависел от двух последних матчей: Тарасенко-Перевозчиков (Тарасенко выиграл 3-2) и Охотников-Павлоградский. Перед своим матчем я статистические расклады не высчитывал, дабы сохранить концентрацию на победу. Это за меня сделал Андрей Тарасенко. Правда, когда он мне сказал итоговый расклад, я его не расслышал и ошибочно понял его слова так, что мне обязательно нужно выигрывать у Виталия Павлоградского со счетом 3-0. Что оказалось сделать очень и очень сложно, особенно в последнем леге, когда я уже выигрывал со счетом 2-0 и казалось, что до выхода из группы уже совсем-совсем недалеко. В итоге 3-0 все-таки получилось, но исключительно из-за невезения Виталия на удвоениях. Я же в третьем леге засунул решающий дротик в D2 каким-то непостижимым для себя образом, морально я был готов уже к тому, что мы зависнем на D1 :)

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

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

А вообще, играйте в дартс -- это очень здорово!

PS. Первого декабря 2013-го в Минске пройдет Чемпионат Республики Беларусь по дартс. Участие в турнире бесплатное. Это отличная возможность попробовать себя впервые на официальных турнирах для тех, кто никогда раньше этого не делал. Чем больше приедет людей, тем больше шансов пройти на ранних стадиях мимо сильнейших игроков. А ведь это именно то, чего так опасаются новички ;) Так что приглашаю всех опытных и неопытных игроков, которые раньше не решались на поездку на официальные турниры, на Чемпионат Республики.

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

понедельник, 11 ноября 2013 г.

[prog.bugs.humour] Точность результатов поиска на странице в Chrome

В браузере Chrome при активации поиска на странице (Ctrl+F) появляется небольшое окошко в котором вводится строка поиска, а затем указывается количество найденный вхождений строки, текущий номер отображаемого вхождения. Номер вхождения и количество найденных совпадений обычно выглядит как "1 из 1" или "6 из 15"

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