пятница, 17 октября 2014 г.

[prog.flame] Асинхронность без порталов и телепортации :)

Вчера вечером в G+ увидел ссылку на статью с Хабра "Асинхронность 2: телепортация сквозь порталы." Просмотрел мельком, понял только то, что на этой полянке можно попробовать потоптаться и с SObjectizer-ом. Сегодня с утра перечитал повнимательнее. Решил посмотреть, как эта же самая задача может быть решена средствами SO-5.5.1. После 2.5 часов работы получилось вот так. Кода много. Но, думается, он не сложнее представленного на Хабре.

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

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

четверг, 16 октября 2014 г.

[prog.c++] Нужна помощь зала: по поводу демо-проекта для SObjectizer-а...

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

Лично мне было бы интересно покопаться в теме Data Distribution Service. По многим причинам, включая и ностальгические, т.к. история самого SObjectizer как раз начинается с темы сбора информации для АСУТП. Но с DDS засада в том, что в DDS входят, по сути, две спецификации. Первая касается протокола передачи данных (DDSI-RTPS), сделать ее реализацию на SObjectizer, в принципе, можно, хотя это отнимет порядочно времени и сил. Но есть и вторая спецификация -- отображение DDS в конкретный язык программирования, в C++03 и C++11 в частности. И это самое важное: стандарт DDS описывает не только то, как данные летают по сети, но и как с DDS работать в коде, на уровне жестко специфицированного API. Селать реализацию этого API, основываясь на SObjectizer, или, напротив, пытаться натянуть SObjectizer поверх DDS API, конечно же можно, но... Я лично не понимаю, зачем. Попытаться сделать собственный продукт, предоставляющий еще одну реализацию DDS? Эта цель понятна. Но она выходит далеко за рамки демо для SObjectizer-а.

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

Еще была идея сделать AMQP-клиента и с его помощью показать, как посредством MQ-шных сервисов делать распределенные приложения на SObjectizer. Но, в принципе, я останусь при той же самой проблеме: ну а что показывать в качестве примера распределенного приложения? Какое подобие прикладной задачи реализовать, чтобы людям было интересно заглянуть вовнутрь?

Поэтому сейчас в качестве рабочего варианта рассматривается реализация на SObjectizer очень простенького MQ-шного сервера для протокола STOMP. С одной стороны, там не должно быть слишком много работы по поддержке самого протокола (хотя придется воспользоваться чем-то вроде Ragel-я). С другой стороны, на агентную модель такое приложение должно лечь вполне хорошо: работа с сетью посредством Asio (или libuv), обслуживание клиентов и, может быть, очередей, в виде SObjectizer-овских агентов. Кроме того, в списке имеющихся серверов чего-нибудь маленького и нативного для STOMP-а нет. Поэтому мало ли что, вдруг кому-то минималистичный и шустрый STOMP-сервер и для работы пригодиться.

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

В общем, если у кого-то есть насущные проблемы, решение которых посредством SObjectizer-а вам бы хотелось видеть, то не сочтите за труд, поделитесь в комментариях или в личку на eao197 на gmail через точку com.

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

PS. На хорошую реализацию нормального демо-проекта я готов потратить 2-3 месяца работы для первого публичного релиза (включая не только код, но тесты, примеры, документацию и пр.) Лицензия для кода будет, скорее всего, GPL, но это можно обсуждать.

среда, 15 октября 2014 г.

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

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

Последние несколько лет SObjectizer развивается на SourceForge как OpenSource проект под BSD-лицензией. Подробнее об истории развития SObjectizer можно прочитать здесь.

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

Версия 5.5.1 может быть загружена из раздела Files или получена из Subversion-репозитория.

В Files для загрузки доступны следующие архивы:

  • so-5.5.1.7z -- исходный текст ядра SObjectizer (включая тесты и примеры);
  • so-5.5.1--doc-html.7z -- сгенерированный посредством Doxygen API Reference Manual;
  • so-5.5.1--bin-msvs2013-x86.7z -- исходные тексты и 32-битовые бинарники для Windows (скомпилированы посредством MS Visual Studio 2013 Express);
  • so-5.5.1--bin-msvs2013-x86_amd64.7z -- исходные тексты и 64-битовые бинарники для Windows (скомпилированы посредством MS Visual Studio 2013 Express).

Примечание. Этот релиз содержит только ядро SObjectizer (т.е. проект so_5). Никакие другие подпроекты (вроде so_log или so_sysconf) в релиз не включены. Возможно, сборка SObjectizer Assembly со всеми подпроектами будет сформирована и опубликована позже (если она действительно кому-то потребуется).

Вкратце перечень изменений выглядит следующим образом:

понедельник, 13 октября 2014 г.

[life.sport.darts] Немного про дартс (по следам завершившегося World Grand Prix)

Давно ничего не писал про дартс. Но завершившийся вчера World Grand Prix дает повод сказать несколько слов на эту тему. Сначала про сам World Grand Prix.

воскресенье, 12 октября 2014 г.

[life.photo] Ну и несколько осенних Ч/Б в догонку...

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

PS. Интересный факт. Восприятие картинки сильно меняется не только от размера (в 1024px по длинной стороне, которые я выкладываю для G+ выглядят хуже, чем 2000px, которые я делаю для ZeissImages), но от от вьювера картинок. Встроенный в Windows вьювер показывает гораздо хуже, чем IrfanView и Lightroom. Так что, возможно еще и браузер свою лепту внесет.

[life.photo] Краски осени в октябре 2014

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

В процессе съемок пришел к банальной мысли, что стекла разные важны, стекла разные нужны :) Привыкнув снимать на 85mm совершенно не мог понять, что же попадет в кадр на 35mm, приходилось гораздо больше "зуммировать ножками", чем с привычной 85-кой. Ну и, наверное, возьми я не 35mm, а 50mm макро, было бы удобнее. Впрочем, под любой угол и минимальную дистанцию фокусировки можно приспособиться, нужно только снимать побольше.

Ну и да: дублей много не бывает :)