вторник, 1 января 2030 г.

О блоге

Более двадцати лет я занимался разработкой ПО, в основном как программист и тим-лид, а в 2012-2014гг как руководитель департамента разработки и внедрения ПО в компании Интервэйл (подробнее на LinkedIn). В настоящее время занимаюсь развитием компании по разработке ПО stiffstream, в которой являюсь одним из соучредителей. Поэтому в моем блоге много заметок о работе, в частности о программировании и компьютерах, а так же об управлении.

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

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

[life.photo] Характерный портрет: вы и ваш мир моими глазами. Безвозмездно :)

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

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

среда, 18 апреля 2018 г.

[prog.c++] Наглядная разница при работе с многопоточностью "вручную" и с помощью CSP-шных каналов

Для очередной статьи на Хабре нужно было реализовать собственный диспетчер, заточенный под конкретную специфическую задачу. Первоначально я этот диспетчер начал делать "в лоб", с собственными очередями, mutex-ами, condition_variable и вот этим вот всем.

Однако, уже по ходу реализации в голову пришла простая мысль о том, что все тоже самое можно получить и используя CSP-шные каналы, благо в SO-5 они уже давно есть. В общем, было сделано две реализации. Одна на нитях/mutex/condition_variable. Вторая -- на SObjectizer-овских mchain-ах. То, какая в итоге вышла разница, можно увидеть под катом.

суббота, 14 апреля 2018 г.

[prog.c++] Послесловие к релизу SO-5.5.22 и so_5_extra-1.1.0

Мы сегодня официально выкатили очередной релиз SObjectizer-а. Это SObjectizer-5.5.22 и so_5_extra-1.1.0. Но в данном посте речь пойдет не о том, что вошло в этот релиз (и даже не о том, что не вошло). А о более важных вещах :)

Где-то до версии 5.5.19 у нас у самих был какой-то список хотелок, набор идей, которые хотелось воплотить в SObjectizer-е. А после релиза версии 5.5.19 этот список исчерпался. Плюс к тому, SObjectizer-5 стал гораздо сложнее и несколько объемнее с момента своего первого публичного релиза летом 2013-го. И даже сложнее и объемнее первого релиза ветки 5.5 в октябре 2014-го. Так что добавление какой-то новой фичи в нынешний SObjectizer -- это, зачастую, не такая простая задача, как еще пару лет назад.

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

А вот если никто ничего не сказал, ни о чем не попросил, то ничего и не сделали.

Так что можно с уверенностью сказать, что в настоящий момент SObjectizer дошел до такой стадии, в которой новая функциональность в него будет добавляться только если найдется конкретный человек, который скажет "мне нужно вот это". И если с этим человеком мы сможем обсудить то, что ему нужно и как это может выглядеть в итоге.

Если будут такие инициативы "снизу", то будут появляться новые версии SO-5.5. Если не будет, то обновления SO-5.5 будут выходить только тогда, когда нам самим в SO-5.5 что-нибудь новое понадобится. А с учетом того, сколько уже всякого разного в SObjectizer сделано, сложно прогнозировать когда же у нас самих появится нужна в чем-нибудь новеньком.

В общем, все просто: хотим что-то видеть в SO-5.5? Не стесняемся, говорим об этом :)

С SO-5.6, который не будет оглядываться на 100% совместимость с SO-5.5, пока больше вопросов, чем ответов. С одной стороны, есть соображения о том, что от чего в SO-5.6 имеет смысл отказаться. Так же, скорее всего, при разработке SO-5.6 мы будем отталкиваться уже от C++17, не оглядываясь на C++11 и C++14. Но, с другой стороны, нет понимания о том, откуда брать ресурсы на его разработку. Будем посмотреть, в общем. Никаких прогнозов на данный момент.

вторник, 10 апреля 2018 г.

[prog.flame] Недосказанное про Rust на C++ CoreHard Spring

По мере подготовки к участию в C++ CoreHard Spring 2018 более четко сформировал собственное текущее отношение к языку Rust. Пытался озвучить его на самой конференции в рамках панельной сессии, но там пришлось сильно спешить, поэтому толком это сделать не удалось. Попробую исправить положение в данном посте.

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

воскресенье, 8 апреля 2018 г.

C++ CoreHard Spring 2018: благодарности пост

Вернулся сегодня утром с C++ CoreHard Spring 2018. Впечатления просто "Вау!!!".

20180407-115740-DSCF9500

Это была, наверное, шестая конференция C++ CoreHard, на которой мы присутствовали и пятая, на которой был представлен доклад от нашей небольшой компании. Смело могу сказать, что это была самая крутая и представительная конференция, проведенная сообществом CoreHard. По уровню организации и представленных докладов, как мне показалось, ничуть не уступает прошлогодней C++Russia. Так что организаторы большие молодцы, огромное им спасибо за проделанную работу. И отдельная благодарность за предоставленную возможность поучаствовать в такой серьезной конференции.

Что касается моего участия. Основной мой доклад, как мне кажется, прошел нормально. Бодренько, нигде не сбился и не запнулся. Вроде и зашло хорошо, и вопросы затем толковые и интересные задавали. Слайды презентации можно найти здесь.

Следом еще принял участие в "панельной дискуссии" Игоря Садченко "Rust vs C++". Но там случилось то, что называется "первый блин комом" :( Формат для конференции новый, еще не опробованный, поэтому получилось нечто среднее между обычным обзорным докладом и панельной дискуссией. Сам я не сразу разобрался когда можно сразу вставлять свои пять копеек, когда лучше жевать чем говорить помолчать. В общем, прошло не так гладко, как хотелось бы. Зато отдельное спасибо Игорю за то, что дал стимул проштудировать второе издание Rust book-а. Пока добрался только до 10-й главы. Но нужно собраться с силами и добить эту тему. Как язык Rust меня не торкает совершенно, но для каких-то вещей это может быть гораздо более практичный (удобный, безопасный и т.д.) инструмент, чем C++.

В общем, очень насыщенный и интересный день получился. Планку качества организаторы подняли на очень большую высоту. Если представится возможность поучаствовать в следующей C++ CoreHard, то нужно будет готовится основательнее и тщательнее, чтобы соответствовать.

пятница, 6 апреля 2018 г.

[prog.c++] Только что довелось самому воспользоваться msg_tracing-фильтрами при поиске проблемы

Делаю примеры для новой статьи про SObjectizer. В примерах имитируется работа с оборудованием и собирается небольшая статистика о задержках в обработке сообщений при разных политиках обработки этих сообщений. По сути, в примерах работает два агента. Первый, a_device_manager, имитирует работу с оборудованием. Второй, a_dashboard, раз в пять секунд выдает на экран текущие показатели.

И вот при первых запусках примеров обнаруживается, что в какой-то момент статистика перестает обновляться. Становится понятно, что это происходит потому, что не обрабатывается одно из сообщений, a_device_manager_t::reinit_device_t. Но почему не обрабатывается? Подписка на него есть: