Re: so_5_extra-1.0.2 и so-5.5.19.4
От: so5team https://stiffstream.com
Дата: 20.09.17 14:52
Оценка:
Очередные обновления наших проектов.

Официальный анонс на странице проекта

В so_5_extra добавились такие штуки как:

— однопоточная реализация SObjectizer на базе Asio, которая при этом является еще и thread-safe. Предназначена для случаев, например, когда нужно иметь свободный основной поток для GUI и отдельный рабочий поток, на котором будет совместно работать и SObjectizer, и Asio. И чтобы из главного потока можно было управлять SObjectizer-ом (создавать/удалять кооперации, отсылать сообщения, создавать mchain-ы и т.д.);

— диспетчер asio_thread_pool. Этот диспетчер создает пул рабочих потоков, на каждом из которых запускает io_service::run(). При этом диспетчеризация событий для агентов, которые привязаны к данному диспетчеру происходит через asio::post. Это позволяет привязанным к asio_thread_pool диспетчеру агентам выполнять IO-операции там же, где работает сам Asio-шный io_service.

Попутно мы обновили SO-5, но там вообще ничего не добавилось. Просто устранены предупреждения, которые стал выдавать clang-5.0.0. Что должно помочь тем, кто у себя компилирует SObjectizer clang-ом с высокими уровнями предупреждений.

---
Попутно открывается возможность начать работу над следующей версией SO-5. Точного списка фич для версии 5.5.20 пока нет, будет выбрано несколько пунктов из этого wish-list-а. Если у кого-то есть пожелания о том, что хотелось бы видеть в SObjectizer-е, можно высказать их, мы постараемся их учесть.
Re: SObjectizer 5.5.19
От: so5team https://stiffstream.com
Дата: 02.11.17 07:25
Оценка:
Очередное обновление SO-5.5.19: версия 5.5.19.5

На этот раз добавили в SO-5 проверку наличия подписок для агента. Оказалось, что бывают сценарии, где это востребовано. Заодно пофиксили формат некоторых методов so_drop_subscription, которые не менялись очень давно и не поддерживали новый формат event-handler-ов. В общем, изменения небольшие, но полезные.
Re: На пути к SObjectizer-5.6
От: so5team https://stiffstream.com
Дата: 29.11.17 11:22
Оценка:
В следующем году мы планируем заняться версией 5.6, в которой будет нарушена совместимость с текущей веткой 5.5. Сделано это будет как для того, чтобы устранить выявленные за время эксплуатации SO-5 косяки, так и для того, чтобы сделать вещи, которые сейчас не представляется возможным внедрить в 5.5 без нарушения совместимости.

Первые идеи по поводу SO-5.6 можно посмотреть здесь. Соответственно, конструктивные соображения/замечания/предложения приветствуются и будут обязательно приняты к сведению. А может быть даже и реализованы
Re: SObjectizer 5.5.20 + so_5_extra 1.0.3
От: so5team https://stiffstream.com
Дата: 13.12.17 10:50
Оценка:
Мы рады сообщить о выходе обновленных версий SObjectizer и сопутствующего проекта so_5_extra.

SObjectizer обновился до версии 5.5.20. Изменений в нем немного. Пожалуй, самое важное -- это обновленная и улучшенная поддержка CMake. Полный список изменений можно увидеть здесь.

Загрузить новую версию можно либо в виде архива с SourceForge, либо из svn-репозитория проекта, либо из зеркала на GitHub.

Уже пару месяцев SObjectizer доступен через систему управления зависимостями vcpkg. Так что сейчас последнюю версию SO-5 можно установить себе посредством команды vcpkg install sobjectizer.

so_5_extra обновился до версии 1.0.3, в которой был добавлен еще один тип mbox-а: retained_msg mbox.

Взять so_5_extra можно либо в виде архива с SourceForge, либо из svn-репозитория.

Так же кого-то может заинтересовать свежая статья на Хабре, рассказывающая о такой важной штуке SObjectizer-а, как концепция mbox-ов.
Re: SObjectizer 5.5.21 + so_5_extra 1.0.4
От: so5team https://stiffstream.com
Дата: 08.02.18 13:18
Оценка:
Мы обновили SObjectizer до версии 5.5.21, а so_5_extra до версии 1.0.4.

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

Ну, например, пусть мы делаем агента распределяющего обработку запросов по нескольким обработчикам запросов. Этот агент получает сообщение request_data, определяет mbox, в который нужно переслать сообщение, а затем дождаться получение из этого mbox-а либо сообщения request_successed, либо сообщения request_failed. Так же должен учитываться тайм-аут на обработку запроса. Посредством асинхронных операций это может быть реализовано вот так:
class request_manager : public so_5::agent_t {
   struct request_timed_out {
      user_id user_;
      request_id id_;
   };
   ...
   void on_successful_result(mhood_t<request_successed> cmd) {...}
   void on_failed_result(mhood_t<request_failed> cmd) {...}
   void on_timeout(mhood_t<request_timed_out> cmd) {...}
   ...
   void on_new_request(mhood_t<request_data> cmd) {
      // Определяем, кто будет обрабатывать запрос.
      const auto processor_mbox = detect_processor_for_req(*cmd);

      // Подготавливаем асинхронную обработку запроса.
      so_5::extra::async_op::time_limited::make<request_timed_out>(*this)
         .completed_on(processor_mbox, so_default_state(),
            &request_manager::on_successful_result)
         .completed_on(processor_mbox, so_default_state(),
            &request_manager::on_failed_result)
         .timeout_handler(so_default_state(),
            &request_manager::on_timeout)
         .activate(5s, cmd->user_, cmd->id_);

      // Передаем запрос конкретному исполнителю.
      so_5::send(processor_mbox, cmd);
   }
   ...
};


Для того, чтобы сделать async_op в so_5_extra пришлось добавить в SO-5.5 такую штуку, как deadletter handler. Можно зарегистрировать deadletter handler для пары (message_type, mbox) и deadletter handler будет вызван, если у агента в его текущем состоянии нет обработчика для такой пары и типа сообщения и почтового ящика. Что позволяет делать обработчики сообщений "по умолчанию".

Подробнее о релизе можно прочитать здесь.

Взять дистрибутив новой версии SObjectizer-а можно из раздела Files на SourceForge. Документация по изменениям в версии 5.5.21 доступна здесь. Так же можно воспользоваться зеркалом на github. Пользователи vcpkg могут установить последнюю версию SObjectizer через vcpkg install sobjectizer.

Дистрибутив новой версии so_5_extra можно взять из раздела Files на SourceForge. Документация по изменениям в версии 1.0.4 доступна здесь.
Re: На пути к SObjectizer-5.5.22
От: so5team https://stiffstream.com
Дата: 20.03.18 15:56
Оценка:
Если кому-то интересно наблюдать за развитием SObjectizer-а и/или хочется повлиять на то, что и как добавляется в SObjectizer, то вот подходящий случай:

Как лучше добавить детализацию активности агентов в SObjectizer?

Действительно нужен свежий и заинтересованный взгляд со стороны.
Re: SObjectizer 5.5.22 и so_5_extra 1.1.0
От: so5team https://stiffstream.com
Дата: 14.04.18 12:05
Оценка: 4 (1)
Мы выпустили очередную версию: SObjectizer-5.5.22.

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

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

Еще в 5.5.22 добавлена возможность использовать свободные функции в качестве обработчиков сообщений в функциях для работы с CSP-шными каналами so_5::receive и so_5::select. И изменено поведение agent_t::so_current_state() -- теперь если этот метод вызывается внутри on_enter/on_exit обработчиков, то so_current_state() возвращает ссылку на то состояние, обработчик on_enter/on_exit которого сейчас активен.

SObjectizer живет на SourceForge, есть зеркало на github. Соответственно, исходники могут быть загружены с SF.net или с github-а.

Так же мы обновили надстройку над SObjectizer-ом, библиотеку so_5_extra. so_5_extra обновилась до версии 1.1.0. Но нового в нее ничего не добавилось, только произошел переход на Asio-1.12 и SO-5.5.22. Для этого пришлось перелопатить часть библиотеки и выпустить версию 1.1.0 вместо 1.0.5. Кстати говоря, если вы использовали so_5_extra-1.0.4, то для перехода на SO-5.5.22 вам придется перейти и на so_5_extra-1.1.0, т.к. в SO-5.5.22 сломалась совместимость в той части, где идет работа с кастомными mbox-ами.

so_5_extra живет на SourceForge, взять ее можно оттуда же. Правда, распространяется so_5_extra уже под двойной лицензией.

=====

Отдельно хотелось бы отметить вот какой момент. Мы свой список хотелок для SObjectizer-а исчерпали где-то в районе версии 5.5.19 (т.е. чуть меньше года назад). С тех пор в SO-5.5 добавляются только те фичи, которые кому-нибудь понадобились. Либо нам самим, либо кому-то из пользователей.

С релизом версии 5.5.22 на этом стоит заострить особое внимание: в ветку SObjectizer-5.5 новые фичи теперь попадают только если a) они кому-то нужны и b) нас об этом просят.

Т.е. если вы хотите что-то увидеть в SObjectizer, но нам вы об этом не рассказали и мы об этом не узнали, то в ветке 5.5 вы этого точно не увидите.

=====

Было бы здорово услышать мнение тех, кто смотрел в сторону SObjectizer-а, но не выбрал его в качестве инструмента. Что остановило? Что не понравилось? Что вы не увидели в SObjectizer? Или, напротив, что такого страшного увидели?

Конструктивная обратная связь такого рода поможет нам сделать SObjectizer лучше.
Re: Новая статья про внутренности SO-5
От: so5team https://stiffstream.com
Дата: 28.04.18 06:30
Оценка: 10 (1)
Мы подготовили статью, в которой постарались рассказать (и показать на картинках) про основные сущности, которые есть в SObjectizer, а так же про взаимосвязи и взаимодействие этих сущностей: Давайте заглянем SObjectizer-у под капот.
Re: Еще раз про CSP-шные каналы в SObjectizer
От: so5team https://stiffstream.com
Дата: 08.05.18 13:06
Оценка: 2 (1)
Очередная статья про SObjectizer: Обмен информацией между рабочими нитям без боли? CSP-шные каналы нам в помощь.

На этот раз мы знакомим читателя с программированием без агентов/акторов, но с использованием CSP-шных каналов, которые в SObjectizer-е называются mchain-ы.

Если не будет дополнительных "вбрасываний" от читателей, то следующая запланированная статья расскажет о том, как можно построить транспорт на базе SObjectizer-овских mbox-ов и MQTT-брокера.

Кто не любит Хабр, тот может сказать свое "фи" оставить свой комментарий здесь.
Re: SObjectizer 5.5.19
От: nen777w  
Дата: 18.05.18 07:37
Оценка: :)
Здравствуйте, so5team

Может офтопик, но почему вы не добавите вашу библиотеку к boost ?
Re[2]: SObjectizer 5.5.19
От: so5team https://stiffstream.com
Дата: 18.05.18 08:48
Оценка: +1
Здравствуйте, nen777w, Вы писали:

N>Может офтопик, но почему вы не добавите вашу библиотеку к boost ?


Наверное, потому, что мы не видим хорошего ответа на вопрос "Зачем SObjectizer в Boost?"

Если попробовать ответить на вопрос более развернуто, то можно выделить два момента (не считая моментов поменьше, которые не хочется выносить на публику):

1. Библиотеки/фреймворки делятся на две категории. Первая категория -- это общеупотребительные библиотеки, т.е. библиотеки, которые решают хорошо знакомые большинству разработчиков задачи. Например, работа с регулярными выражениями, с файловой системой, с сетью, датами, строками и пр. Вторая категория -- это специализированные библиотеки, которые решают специфические задачи. Скажем, библиотека для парсинга какого-то специфического протокола (вроде FIX или ISO 8583) или каких-то специфических форматов данных (например GSM 03.40). Или какая-нибудь реализация CORBA-брокера.

Конгломераты библиотек, вроде Boost-а, как нам думается, предназначены прежде всего для общеупотребительных библиотек. Помещать в Boost специализированные библиотеки, которые нужны узкому кругу программистов, наверное, не есть хорошая идея. А так как мы рассматриваем SObjectizer именно как специализированную библиотеку, то не считаем правильным запихивать SO-5 под одну крышу с такими общеупотребительными библиотеками, как Boost.Algorithm, Boost.Container, Boost.Hana и пр.

2. Роль Boost-а в C++ сообществе в настоящее время. Если смотреть на Boost как на полигон, на котором испытываются новые вещи, которые со временем попадут в стандарт, то добавление SObjectizer-а в Boost не имеет смысла, т.к. нам не кажется хорошей идеей включение инструмента вроде SObjectizer в стандартную библиотеку C++.

Если смотреть на Boost просто как на коллекцию библиотек, которые проверены временем и, якобы, должны иметь высокое качество, то тут вообще сложный момент. По крайней мере у одного члена нашей команды есть мнение, что в таком качестве Boost сейчас не способствует развитию C++ной экосистемы, а препятствует оному. Т.е. библиотека, попадая в Boost, оказывается в лучшем положении, чем библиотеки, не входящие в Boost. Вот, скажем, человек ищет себе инструмент для unit-тестирование, начинает поиск с Boost-а и останавливается на Boost.Test, при этом он может даже не узнать, что есть не менее интересные альтернативы в виде Catch2 или doctest.

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


Ну и встречный вопрос: а вам реально нужен SObjectizer в Boost-е? Если да, то зачем и почему он вам нужен именно в Boost-е?
Re: Распределенность на базе MQTT
От: so5team https://stiffstream.com
Дата: 24.05.18 08:46
Оценка: 1 (1)
Новая большая статья: Добавляем распределенность в SObjectizer-5 с помощью MQTT и libmosquitto

Две просьбы к тем читателям, которые заинтересуются.

Во-первых, если вы хотите иметь поддержку распределенности для SO-5, то найдите время и возможность поделиться своими хотелками.

Во-вторых, если кому-то нужен вариант этой статьи на рунглише с закосом на инглиш, то дайте знать.
Re[2]: Распределенность на базе MQTT
От: so5team https://stiffstream.com
Дата: 28.05.18 12:41
Оценка:
Здравствуйте, so5team, Вы писали:

S>Новая большая статья: Добавляем распределенность в SObjectizer-5 с помощью MQTT и libmosquitto


Дополнительная информация вдогонку. Для тех, кто интересуется распределенностью в SObjectizer.
Re: Митап St.Peterburg C++ User Group в августе 2018
От: so5team https://stiffstream.com
Дата: 10.09.18 05:56
Оценка: +1
Недавно в Питере прошел очередной митап сообщества St.Peterburg C++ User Group на котором наш коллега выступил с докладом "Акторы в C++: взгляд старого практикующего актородела". В докладе речь шла про Модель Акторов и ее применимость в C++ вообще, а так же о SObjectizer-е в частности.

Организаторы митапа опубликовали видео доклада на YouTube: https://youtu.be/c1qSVSHoMjU

PDF-ку с презентацией можно загрузить отсюда или посмотреть на Google Docs.
Re: Что войдет в версию 5.5.23?
От: so5team https://stiffstream.com
Дата: 13.09.18 12:29
Оценка:
Мы обозначили набор возможных фич для следующей версии 5.5.23, работа над которой уже идет. На плохом английском этот перечень изложен здесь: https://sourceforge.net/p/sobjectizer/blog/2018/09/what-can-or-should-go-into-so-5523/

Для тех, кто не хочет читать рунглиш, краткое изложение:

Можно высказываться как по поводу того, что было обозначено нами (вроде нужно/не нужно). Так и предложить то, чего лично вам не хватает. Если не удобно оставлять комментарии на SF.net, то это можно сделать здесь.

Еще мы хотим подготовить и опубликовать на Хабре очередную статью. Пока предполагаемая тема -- это разбор примера intercom_statechart, в котором иерархические конечные автоматы используются на полную катушку. Но если кому-то интересно что-то другое, то обозначайте. Постараемся раскрыть интересную вам тему. Либо в ближайшей статье, либо в одной из последующих.
Re: Статья про иерархические конечные автоматы и SO-5.5
От: so5team https://stiffstream.com
Дата: 17.09.18 07:22
Оценка:
Мы подготовили очередную статью с рассказом про возможности SObjectizer.
Эта статья может быть интересна не только тем, кто интересуется SObjectizer-ом, но и тем, кто раньше не сталкивался с иерархическими конечными автоматами. Первая часть статьи рассказывает именно про ИКА и их продвинутые возможности.
Re: Приблизительный роадмап на 2018-2019
От: so5team https://stiffstream.com
Дата: 05.10.18 09:11
Оценка:
Вот здесь изложено что-то вроде плана работ над SObjectizer-5 на 2018 и 2019-й.

У всех заинтересованных или просто сочувствующих есть возможность повлиять на то, что, когда и как в SO-5 попадет. Оставить свои пожелания о том, что вы хотите видеть или чего не хотите видеть в SObjectizer-е, можно либо в комментариях в блоге, либо прямо здесь.
Re: SObjectizer 5.5.19
От: niXman Ниоткуда https://github.com/niXman
Дата: 18.10.18 15:51
Оценка:
Здравствуйте, so5team, Вы писали:

скажите, а дока соответствует последим изменениям?
или чтоб заюзать последнюю версию нужно читать доку с каким-то оговорками? или другую доку?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: SObjectizer 5.5.19
От: so5team https://stiffstream.com
Дата: 19.10.18 05:15
Оценка: +1
Здравствуйте, niXman, Вы писали:

X>скажите, а дока соответствует последим изменениям?


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

X>или чтоб заюзать последнюю версию нужно читать доку с каким-то оговорками? или другую доку?


Никаких оговорок. Если найдете какое-то несоответствие -- окрывайте issue, это наш косяк и мы его будем исправлять.
Re[3]: SObjectizer 5.5.19
От: niXman Ниоткуда https://github.com/niXman
Дата: 19.10.18 05:21
Оценка:
понял, спасибо!
я вчера уже довольно много прочел вики %)

зы
моглы бы вы глянуть эту тему: https://rsdn.org/forum/cpp.applied/7276592.flat
Автор: niXman
Дата: 18.10.18


правильно ли я понимаю, что собжектайзер подходит для решения этой задачи?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.