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

О блоге

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

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

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

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

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

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

воскресенье, 30 сентября 2018 г.

[work] Свободная касса! (C++/Rust/D)

Если вдруг кто-то не знает, то я представляю небольшую компанию stiffstream. Одно из направлений нашей деятельности -- это заказная разработка. Нам доводилось разрабатывать и новый код для заказчика, и расчищать авгиевые конюшни дабы привести в работоспособное состояние окаменевшие копролиты мамонта.

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

Специализируемся мы на C++. У нас большой опыт разработки на этом языке. Благодаря чему умеем писать на С++ без боли, чтобы ничего не текло и не падало.

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

Если качество нашего кода вас устраивает и вы хотите, чтобы аналогичного качества код был и у вас в проекте, то давайте пообщаемся на предмет взаимовыгодного сотрудничества. Пишите на info [at] stiffstream.com. Можно и напрямую мне: eao197 [at] stiffstream.com или eao197 [at] gmail.com.

PS. Хотя наш основной инструмент -- это C++, но язык Rust нам так же симпатичен. Как и язык D. Поэтому если вы ищете Rust- или D-разработчиков, которых на рынке и так практически нет, то почему бы вам не попробовать посотрудничать с нами?

пятница, 21 сентября 2018 г.

[prog.thoughts] Мнение пациента с хроническим NIH-синдромом: плюсы и минусы самодельного внутреннего инструментария

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

Как бы то ни было, так уж случилось, что за время своей работы в ИТ мне довелось создать несколько инструментов для разработчиков, которые использовались для создания прикладного софта. Созданный на базе моих инструментов работал годами и годами же находился на сопровождении. Ну, скажем, в 2002-ом году мной были сделаны первая версия SObjectizer-4 и встраиваемая ООСУБД ObjESSty, на базе которых затем был сделан агрегатор SMS/USSD сообщений. Этот агрегатор, как оказалось, до сих пор работает, прокачивает пару тройку десятков миллионов сообщений в сутки, что дает более полумиллиарда сообщений в месяц. Часть компонентов все еще работают именно на SO-4 и ObjESSty. Часть компонентов была написана уже на SObjectizer-5. Но, опять же, возраст этих "новых" компонентов так же измеряется годами.

Да, все это был софт, про который нигде не рассказывали, с ним не сталкиваются миллионы пользователей напрямую, как это происходит с продуктами известных компаний, вроде Microsoft, Google, Yandex и иже с ними. Так что вам, читатель, решать, интересно ли вам мнение велосипедостроителя, работавшего в noname-компаниях и принимавшего участие в проектах, о которых вы никогда не слышали и не услышите.

Но т.к. этот блог был создан для того, чтобы я мог свободно говорить то, что хочу, то все-таки выскажу свои мысли на тему того, насколько выгодно или невыгодно компании создавать и развивать свой внутренний инструментарий. Что может быть интересно тем, кто работает не в Google или Yandex-е, а в продуктовых конторах поменьше, с другими штатами, бюджетами и возможностями. Речь про продуктовые компании, т.к. про то, как со внутренним инструментарием дела обстоят на аутсорсинговых галерах я понятия не имею.

вторник, 18 сентября 2018 г.

[prog.c++] Let's talk about hierarchical finite state machines and their support in SObjectizer-5.5

Finite state machine is a probably one of most basic and widespread thing in software development. Finite state machines (FSM) are actively used in many areas. For example in such niches as SCADA- and telecom systems FSM are used almost everywhere.

In this article we will try to speak about hierarchical FSM. And then we will try to take a look at FSM's support in SObjectizer-5. SObjectizer is one of a few OpenSource and live "actor" frameworks for C++ and actors in SObjectizer are FSMs. We will speak why SObjectizer's actors are FSMs and which capabilities they have.

A Brief Introduction Into Finite State Machines

It is hard to explain in a shot article such big topics as automata theory in general and finite state machines in particular. Because of that an basic understanding of these topics are required from a reader.

Advanced Finite State Machines And Their Features

There are several "advanced features" of FSM which significantly simplify usage of FSM. Let's talk about them briefly.

Disclaimer: if a reader has a good knowledge of UML's statechart diagrams then he or she doesn't find anything new here.

[work.thoughts] Люди, действительно, главный ресурс. Печально, когда это не так

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

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

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

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

Зато в очередной раз лучше понимаешь, в какую уникальную среду и движуху удалось попасть в 2001-ом году и насколько невероятно удачно все складывалось где-то до 2010-го года...

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

PS. Что еще печально, так это то, что не удалось получить от бывшего работодателя success story по итогам разработок, который мой отдел когда-то делал на базе SObjectizer-а. Уже и отдела нет. И, как будто, сами эти разработки уже были проданы одному очень крупному банку. А уж от банка-то мы точно success story не получим.

четверг, 13 сентября 2018 г.

[prog.flame] Beast-vs-RESTinio or is Boost.Beast really good for solving simple tasks?

It seems that after inclusion of Beast C++ framework in Boost the Boost.Beast is regarded as the only right way to work with HTTP in modern C++. Maybe it is because some C++ developers know only Boost and look for libraries in Boost only. Some even don't know that there is something else except Boost.Beast (like CROW, Pistache, RestBed, served, C++REST SDK, POCO and so on).

And there also is a strong opinion that any library from Boost is the best in its class. For some Boost libraries it is just true. But now Boost has more than 100 libraries inside. It is hard to belive that all of them are exceptionaly useful, easy to use, well documented and maintained well...

Boost.Beast looks like a high-quality library. It just a bright example of C++ masterpiece. But there is a problem: it is too low-level. If you need to solve a simple task you have to write a lot of code on top of Boost.Beast.

To show this we reimplemented a simple example from Vinnie Falco's (he is Beast's author) talk at CppCon-2018 (code and slides can be found here) by using RESTinio library.

The repository with our implementation can be found here: https://bitbucket.org/sobjectizerteam/beast-cppcon2018-vs-restinio

We think that Boost.Beast is a great building block for something really complex (like high-performant HTTP server or client) or for something high-level and user-friendly (like that). But if you have to create a simple RESTful API or simple HTTP-service then it is better to look for something more simple and expressive. We hope our code shows this.