пятница, 14 августа 2015 г.

[prog.c++] Забацал новый пример для SO-5.5.8, теперь доволен как слон :)

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

Пример имитирует управление примитивными станками (machine), в которых есть двигатель (engine) и система охлаждения (cooler). Работающий двигатель нагревается. Когда нагревается выше 70 градусов, то включается система охлаждения. Если после этого двигатель продолжает нагреваться и его температура достигает 95 градусов, то двигатель отключается. Когда двигатель охлаждается до 50 градусов, он включается вновь. Система охлаждения отключается если двигатель охлаждается до 50 градусов (при этом двигатель может быть как включенным, так и выключенным).

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

[life] На что можно потратить 3-3.5 часа в Минске в будний день?

Вероятно, на следующей неделе (во вторник или в четверг) придется посетить город-герой Минск с рабочим визитом. Есть ощущение, что где-то к 14:00 со своими делами я разберусь. А далее дилемма: либо уезжать поездом в 15:47 и трястись в нем 4.5 часа, либо же поездом в 18:08, который идет всего 3.5 часа. Сидеть в поезде лишний час не прельщает, посему возникает вопрос:

А как в будний день в Минске можно употребить с толком и пользой 3-3.5 часа свободного времени?

В принципе, если кого-нибудь из читателей интересует то, чем я занимаюсь или занимался, то можно было бы организовать что-то вроде встречи-семинара на какую-то заданную тему. Например: нужно ли идти из программиста в менеджеры, когда это делать и что ждет на этом пути? Или же: SObjectizer и C++ -- зачем все это нужно и стоило ли оно того? Или: как организовать дартс-клуб на своем рабочем месте? Или: как разорить друга, подарив ему зеркалку... :)

четверг, 13 августа 2015 г.

[prog.c++] Еще живой пример влияния эволюции C++ на размер кода

Уже неоднократно говорил, что C++11 -- это совсем другой язык, нежели C++98/03. Если же появляется возможность использовать C++14, то это еще более другой язык. Под катом свежий пример.

среда, 12 августа 2015 г.

[prog.c++11] Описание агентов в SObjectizer: старый подход против нового (модного и молодежного)...

Год назад, когда в версии 5.3.0 появились ad-hoc агенты (агенты, для которых не нужно было описывать отдельный C++ класс), область применения таких агентов казалась очень узкой. Поэтому и функциональность, доступная в ad-hoc агентах, была меньше, чем в обычных, полноценных агентах. По-началу даже не было возможности получить доступ к direct_mbox-у ad-hoc агента.

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

[prog.c++11.sobjectizer] Нужна помощь в поиске названия для трех новых диспетчеров

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

Изначально предполагалось, что в очередной версии SO-5 будет всего один диспетчер с поддержкой приоритетов, который будет запускать все события на одной рабочей нити. Отсюда и появилось название prio::common_thread.

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

  • одна рабочая нить, низкие приоритеты блокируются высокими приоритетами (это то, что сейчас делает prio::common_thread);
  • одна рабочая нить, у каждого приоритета своя квота;
  • по одной рабочей нити на каждый приоритет.

Все эти диспетчеры будут внутри пространства имен so_5::disp::prio.

Но вот хорошие имена для них никак не придумываются. В голове крутится что-то вроде one_thread_vip_first (blocked, women_and_child_first, highest_first), one_thread_quoted (round_robin, proportional), thread_per_prio (separate_threads, dedicated_threads)...

Может кто-нибудь из читателей поможет? Или подтолкнет в каком-то направлении?

вторник, 11 августа 2015 г.

[prog.thoughts] Сценарии для различных типов приоритетного обслуживания

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

понедельник, 10 августа 2015 г.

воскресенье, 9 августа 2015 г.

[life.photo] Несколько видеороликов на тему street photo

В поисках обзоров компактных видеокамер наткнулся на YouTube на несколько роликов, очень, на мой взгляд, полезных пытающихся приобщиться к жанру street photo любителей. По моему глубокому убеждению, в 99% случаев уличная фотография -- это убогие попытки преобразовать количество в качество. А размещенные под катом ролики как раз таки и показывают, чем удачный street photo отличается от неудачного.