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

О блоге

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

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

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

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

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

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

среда, 17 апреля 2024 г.

[life;work;business] 10 лет с начала нового этапа в профессиональной жизни

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

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

Главный упрек, который многократно доводилось слышать в адрес разработчиков (т.е. в том числе и в свой) от ТОП-менеджеров, особенно от "продажников": программисты не знают, откуда берутся деньги на оплату их труда.

Теперь знаю 😉

Теперь и сам могу упрекнуть кого хошь 😆

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

Так что фактор "не иметь никого над головой" имеет место быть. Однако, он с лихвой компенсируется другими факторами. Так что тут не все так однозначно... Почти как в анекдоте: "Быть подкаблучником означает, по меньшей мере, наличие крыши над головой" 😀

Повторю мысль, которую, вроде бы, уже озвучивал ранее: вероятно, если бы я жил в большом городе, вроде Москвы, Питера или даже Минска, то нашел бы небольшую продуктовую компанию, занимающуюся разработкой собственного софта, которой бы пригодился человек вроде меня (из категории "и швец, и жнец, и на дуде игрец"). И не пришлось бы открывать свою фирму. Но в моем родном Гомеле шансов найти такую не было, поэтому проявилась врожденная приверженность к велосипедостроению: если подходящего места работы здесь нет, то почему бы его и не создать самому?

Советовать кому-то пойти по этому же пути не буду.

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

Так что могу лишь перефразировать классика: открывать свое дело нужно не тогда, когда ты можешь это сделать, а тогда когда не можешь не сделать.

Вопрос лишь в том, чтобы отличить одно от другого.

Ну а я продолжу свой путь дальше. Посмотрим, что будет в последующие десятилетие. Как показывают последние 4-5 лет, случится может такое, что и нафантазировать трудно. Поэтому не исключаю и сценария, когда буду обычным программистом с минимумом ответственности, работающим с 9 до 17 над тасками из Jira, все мысли которого посвящены выращиванию капусты на домашнем огороде. Who knows, who knows... 🤔

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

ЗЫ. Что-то много смайликов в посте. Не специально, просто "...Это нужно для того, чтобы человечество весело расставалось со своим прошлым" (с).

ЗЗЫ. Тогдашний "Интервэйл" все еще вспоминается с большой теплотой. Действительно, чуть ли не лучшие годы и все такое... Но то тогдашний. Вроде как от тогдашнего сейчас мало что осталось.


Поясню для тех, кто во фразе "обычным программистом с минимумом ответственности" видит только "обычным программистом". Такие персонажи из-за недостатка мозгов (простите, но это самое политкорректное определение, которое смог придумать) могут начать спрашивать "Ну и зачем было тратить годы на изучение C++/карьерный рост/развитие бизнеса/нужное-вписать, чтобы затем оказаться обычным программистом?"

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

понедельник, 15 апреля 2024 г.

[work] Открыт для сотрудничества в качестве C++ разработчика

В виде (суб)контракта с нашей компанией СтифСтрим.

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

Самостоятельно погружаюсь в проблему, нахожу решение, кодирую, тестирую, документирую. Если нужно обучаю. Если нужно сопровождаю и поддерживаю. Если нужно выступаю в качестве евангелиста (см. список публикаций на Хабре).

Работаю не быстро, но качественно, беру недорого.

Оценить мой уровень можно, например, про проекту aragata, реализованному мной практически в одиночку. Код можно увидеть на GitHub-е, на Хабре есть две статьи о том, что это и как работает: вводная статья и описание сделанных по результатам нагрузочных испытаний оптимизаций + вот этот пост.

В качестве дополнительных примеров: timertt (+ документация), so5extra (+ документация) -- эти проекты так же написанные мной самостоятельно.

Связаться со мной можно через eao197 на gmail тчк com. Если кому-то интересен профиль на LinkedIn, то вот.


Это сообщение повисит какое-то время вверху. Потом будет видно, имеет ли смысл пытаться дальше оставаться в C++.

[prog.c++.wtf] Один из самых странных паттернов в коде, с которым доводилось сталкиваться...

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

bool does_contain_apropriate_item(
   const item_container & items,
   const search_criteria & search_params)
{
   for(const auto & i : items) {
      if(!does_meet_coditions(i, search_params)) {
         continue;
      }

      return true;
   }

   return false;
}

Зачем нужен continue в цикле и почему нельзя сразу написать:

bool does_contain_apropriate_item(
   const item_container & items,
   const search_criteria & search_params)
{
   for(const auto & i : items) {
      if(does_meet_coditions(i, search_params))
         return true;
   }

   return false;
}

Большая и неразрешимая для меня загадка.

Возможно, выросло поколение, которое лояльно относится к break/continue в циклах. А может уже и не одно поколение.

PS. Почему не используется в таких случаях std::find_if -- это отдельный вопрос. Местами не такой простой, как может показаться. Тем более, что я привел не реальный фрагмент кода, а общую схему того, что вижу в последние месяцы регулярно. Детали же часто сильно отличаются, иногда еще нужен и индекс найденного элемента, так что на практике std::find_if не всегда такая уж удобная замена.

вторник, 2 апреля 2024 г.

[life.cinema] Очередной кинообзор (2024/03)

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

Фильмы

Холоп 2 (2023). Вполне на уровне первого фильма. Но, как раз это немного и разочаровывает: как все предсказуемо, хотелось бы, чтобы авторы чем-то удивили. А удивили разве что масштабной батальной сценой в финале. Вот это было здорово.

Дом у дороги (Road House, 2024). Если раньше смотрели "Дом у дороги" с Патриком Суэйзи от 1989-го, то современный ремейк будет "немного предсказуемым". Но глянуть его можно хотя бы ради красочно поставленных рукопашных сцен.

Мармелад (Marmalade, 2024). Необычный фильм. Его нужно обязательно смотреть до конца, даже если по ходу просмотра возникает ощущение "что за фигня?" По итогу мне зашло, но могу предположить, что кино все-таки "на любителя".

Ангел мести (Fatum, 2023). Посредственно, но смотрибельно. Хотя и далеко не шедевр.

Анатомия падения (Anatomie d'une chute, 2023). Если не жалко потратить 2.5 часа своего времени на то, чтобы узнать за что же именно был вручен "Оскар", то можно и глянуть. Но меня фильм не зацепил: ни история сама по себе, ни то, как она была рассказана, ни игра актеров. А уж работа оператора как и вообще раздражала, как будто телеспектакль с советского ТВ посмотрел.

Молчание ангелов (Englemageren, 2023). Пока смотришь, то кажется, что бюджетно, но более-менее смотрибельно. Но вот финал ошарашивает таким маразмом, что становится жалко потраченного на просмотр времени.

Три мушкетера: Миледи (Les Trois Mousquetaires: Milady, 2023). Как по мне, так редкостная дрянь. Категорически не советую тратить на это "кино" свое время.

Сериалы

Медиатор (третьий сезон, 2024). Если первые два сезона понравились, то можно смело смотреть и третий. Мне зашло. На фоне других современных российских (да и не только) сериалов, так прям отдохновение.

Джентльмены (The Gentlemen, первый сезон, 2024). Пара первых серий и пара последних, как по мне, так отличные. В середине ну такое себе, можно было бы и подсократить хронометраж. Но в целом посмотрел с удовольствием.

Джетт (Jett, 2019). В целом неплохо и бодренько. Но общее впечатление портит, во-первых, то, что явно был сделан намек на следующий сезон, которого не состоялась. Так что история не была завершена и это раздражает. Во-вторых, хоть Карла Гуджина и выглядит совершенно замечательно для своих лет, но все-таки заметно, что она лет на 10 постарше своей героини.

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

Halo (второй сезон, 2024). Смотреть можно разве что тем, кому понравился первый сезон. Мне первый сезон не то, чтобы понравился, но просто захотелось посмотреть что-то из жанра "боевой фантастики". Местами норм, местами скучно. Ну и везде какая-то бессмыслица происходит, как по мне :)

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

Не смог осилить

Костолом (Ruthless, 2023). Какая-то унылая и бюджетная попытка показать ещё одного "боевого пенсионера", в одиночку расправляющегося с кучей бандитов. Уж лучше пересмотреть первую часть "Заложницы".

Уцелевший (Warhorse One, 2023). С самого начала какой-то маразм + ну какой-то совсем уж ущербный уровень компьюетрной графики, так что я не смог выдержать и пятнадцати минут.

воскресенье, 31 марта 2024 г.

[prog.c++] Оказывается, для VC++ недостаточно ключа -std для того, чтобы получить актуальное значение __cplusplus

Если вы, как и я, думали, что указав компилятору ключ -std:c++20 вы автоматически получите корректное значение __cplusplus, то вы заблуждаетесь :(

Кроме ключа -std:c++20 нужно еще и ключ -Zc:__cplusplus указать. Цинк:

$ cat t.cpp
#include <iostream>

int main() {
        std::cout << __cplusplus << std::endl;
}

$ cl -EHsc -nologo -std:c++20 t.cpp
t.cpp

$ ./t.exe
199711

$ cl -EHsc -nologo -std:c++20 -Zc:__cplusplus t.cpp
t.cpp

$ ./t.exe
202002

Рецепт найден здесь.

Что тут остается сказать кроме "Вот уроды!"...