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

О блоге

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

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

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

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

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

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

вторник, 23 апреля 2019 г.

[prog.c++] Продолжение истории про отсутствие в C++ полноценного static if-а

Тема, которая началась несколько дней назад постом "Тот случай, когда жалко, что C++ный if constexpr не дотягивает до D-шного static if :(" завершилась созданием нужной мне реализации средствами C++ных шаблонов и написанием статьи про получившуюся реализацию.

Вот эта статья на Хабре: "С сожалением об отсутствии в C++ полноценного static if или…" Желающие сказать своё "Фи" могут сделать это на Хабре или прямо здесь.

В планах еще одна статья на тему шаблонной магии в дебрях реализации SObjectizer-а (точнее основанного на Asio диспетчере в so5extra). Надеюсь, что смогу опубликовать ее в начале следующей недели.

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

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

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

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

суббота, 20 апреля 2019 г.

[prog.c++] Тот случай, когда жалко, что C++ный if constexpr не дотягивает до D-шного static if :(

Хорошо, когда C++ со временем впитывает в себя хорошие штуки из других языков программирования. Вот тот же if constexpr из C++17 явно позаимствован из D. Жаль только, что static if в D может применяться в большем количестве контекстов, чем if constexpr в C++.

Был бы в C++17 if constexpr таким же мощным, как static if в D, я бы мог написать вот такой вот код сходу, не сильно задумываясь:

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

[prog.c++] Кому-нибудь будет интересна еще одна статья про C++ные навороты с шаблонами и наследованием?

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

Суть в том, что я сейчас закончил адаптацию базирующегося на Asio диспетчера для SO-5.6. И в этой реализации полно всяких C++ных штук. Тут есть и шаблоны, и CRTP, и наследование как от шаблонов, так и не от шаблонов, включая нелюбимое многими наследование реализации.

Когда смотришь на все это со стороны, то создается впечатление хардкора и оверкилла, от которого следует избавиться раз и навсегда, а автора сего безобразия -- выгнать из профессии на мороз. Нет, серьезно. У меня вчера у самого были такие мысли, когда я в этот код погрузился впервые за полтора года.

Собственно, каждый желающий может сам составить свое впечатление. Текущий вариант реализации зафиксирован здесь. Можно обратить внимание, например, на thread_local_ptr_holder_t (стр.423), на его наследника work_thread_t (стр.466) и на его наследников work_thread_without_activity_tracking_t (стр.575) и work_thread_with_activity_tracking_t (стр.677). Либо на basic_binder_impl_t (стр.716) и его наследников binder_template_t (стр.790), binder_with_external_strand_t (стр.831) и binder_with_own_strand_t (стр.863). Не говоря уже про basic_dispatcher_skeleton_t и то, что идет дальше :)

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

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

пятница, 12 апреля 2019 г.

[prog.c++] Шаблоны против копипасты 9: SFINAE и CRTP чтобы бить юзверя по рукам в компайл-тайм

Очередная серия про то, как C++ные шаблоны позволяют бороться с копипастой. Опять в виде статьи на Хабре: "Немного C++ной шаблонной магии и CRTP для контроля за корректностью действий программиста в компайл-тайм". На Хабре потому, что нужен PR. Какой-никакой, но PR. И нужен.

Сказать свое "Фи", "Не нужно", "За такое нужно руки отрывать" или "Когда я вижу такой код, то хочется обнять и плакать" можно как в комментариях на Хабре, так и здесь. Но меня вы все равно не переубедите :) Так что лучше, если вы где-нибудь сделаете репост ссылки на статью со своими уничижительными комментариями. Мол, вон как хардкорные C++ники упарываются, нидайбох дойти до жизни такой ;)

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

  • в basic_holder_t потребовалось два метода data (константный и неконстантный), причем оба эти метода сделаны публичными (чтобы не трахаться с friend-ами для шаблонов);
  • методы clone_if_necessary в примеси cloner_t оказались статическими.

Поиграться в on-line с продвинутой версией можно здесь.

PS. Предыдущая часть серии "Шаблоны против копипасты" здесь.

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

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

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

Закатать в асфальт (Dragged Across Concrete, 2018). Пожалуй лучший криминальный фильм за последние годы. Может быть слишком длинный, но по ходу просмотра даже это не вызывает особых претензий.

Журнал 64 (Journal 64, 2018). Отличное продолжение серии фильмов про странного следователя и его коллег. Особенно ценно то, что это европейское кино, со своим стилем, не похожим на американский.

В погоне за Бонни и Клайдом (The Highwaymen, 2019). Хорошее кино с хорошими актерами. Мне было интересно. Но тех, кто ждет от фильма какого-то экшена, ждет разочарование: весь экшен был показан в трейлере.

Наркокурьер (The Mule, 2018). Не шедевр. Но вполне себе добротное кино. Которое впечатляет не само по себе, а то, что это умудряется выдавать в свои годы Клинт Иствуд. И как режиссер, и как актер.

Хоть раз в жизни (Begin again, 2013). Незамысловатое кино с простым и предсказуемым сюжетом. Но, такое ощущение, что сами актеры получали кайф от своей работы, поэтому получился приятный фильм со своим настроением.

Удивительный мир Марвена (Welcome to Marwen, 2018). Добротно сделанное кино, вполне в духе Роберта Земекиса. Но, видимо, я уже не в том возрасте, чтобы в меня такие мелодраматические картины заходили. И этот не зашел. Хотя снят добротно.

Ржавый ручей (Rust Creek, 2018). В общем-то не так уж и плохо. Но общее впечатление испортило несколько моментов, которые вызывали желание воскликнуть "не верю!", а также совершенно невнятный финал.

В поисках Стива Маккуина (Finding Steve McQueen, 2019). В принципе, история рассказана неплохая. Но вот манера рассказа и показа такова, что фильм наверняка зайдет не всем. Так что, если вас не накроет раздражение от стилистики изложения истории в первые 15 минут, то может быть досмотрите до конца с интересом.

Планета зверей (Dong wu shi jie, 2018). Красочно. Но мне не понравилось. Во-первых, сюжет не зацепил. В том числе и не понял суть происходящего на корабле. Во-вторых, лень было следить за математически-логическими выкладками главного героя, который просчитывал свои шансы в той или иной ситуации.

Тройная граница (Triple Frontier, 2019). Трейлер обещал очень крутой боевик. На деле же оказалась унылая нудятина в которой главные герои, якобы будучи крутыми головорезами, ведут себя как рефлексирующие интеллигенты.

Тройная угроза (Triple Threat, 2019). В фильме собрали, пожалуй, лучших исполнителей из фильмов про единоборства. Получилось так себе. Но фанаты жанра могут и посмотреть.

Счастливого нового дня смерти (Happy Death Day 2U). Если вам понравилась первая часть, то, чтобы не портить впечатление, не смотрите вторую.