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

О блоге

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

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

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

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

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

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

четверг, 2 апреля 2020 г.

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

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

Холоп (2019). Мне зашел очень неплохо, посмотрел с удовольствием.

Джентльмены (The Gentlemen, 2019). Смотреть можно спокойно. Фильм добротный. А вот получить удовольствие от просмотра... Тут не знаю. Я ждал от Гая Ричи большего. Получилось разве что добротно.

21 мост (21 Bridges, 2019). Весьма смотрибельно. Динамично, в меру разговоров, в меру экшена. Хотя финал оказался немного предсказуем, но в целом это впечатления не испортило.

Калашников (2020). Мне зашло. Не смотря на то, что фильм простой и прямолинейный, без каких-либо изысков. Да и попадание одной или двух сцен в фильм лично у меня вызывает вопросы. Но зато хорошо передана фантастическая увлеченность главного героя своим делом.

Пушки Акимбо (Guns Akimbo, 2019). Так плохо, что даже хорошо. Мне понравилось, но я и не ждал ничего кроме лютого трэша от данного произведения. И, как по мне, именно в качестве трешового ремейка "Адреналина", но не с крутым уголовником в главной роли, а с хипстером-задротом, и следует это кино воспринимать. Ну и, соответственно, воздержаться от просмотра, если подобная смесь вас не интересует.

Под водой (Underwater, 2020). Вот вообще ни разу не шедевр, но смотреть было интересно, не смотря даже на то, что подводный монстр в конце был как-то не к месту (имхо). Может быть потому, что нормальной фантастики на тему более-менее качественно снятых катастроф на подводных объектах давно не было.

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

Союз спасения (2019). Посмотреть можно ради красочной картинки. И только если перед этим прочитать что-нибудь толковое о восстании Декабристов. А то из фильма с его рваным повествованием и перескакиванием с одного на другое, разобраться в происходящем будет сложно.

Правосудие Спенсера (Spenser Confidential, 2020). Как-то все посредствененько. Есть ощущение, что это не полноценный самодостаточный фильм, а попытка забросить пробный шар на что-то вроде серии фильмов с одними и теми же персонажами. Спасает разве что наличие пары-тройки известных актеров, которые придают происходящему хоть какой-то вес и солидность.

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

Джуманджи: Новый уровень (Jumanji: The Next Level, 2019). Ну так себе. Первый фильм был неплох, а этот явная попытка заработать на успехе первого фильма не утруждая себя поиском чего-то нового и интересного.

Убийства по открыткам (The Postcard Killings, 2020). Начало было интригующим и обещающим интересное продолжение. Но где-то с середины фильма начался такой лютый маразм, что никаких хороших впечатлений не осталось вовсе.

Ангелы Чарли (Charlie's Angels, 2019). Мог бы получится недорогой аттракцион из категории "Телохранитель киллера" или "Гемини", если бы не желание девочек снять про девочек и для девочек с режиссером-девочкой. И да, для подобной фигни сексизм в критике вполне уместен.

Герой (2019). Редкая бредятина и Александр Петров, как обычно, местами сильно выбешивает. Но картинка класcная. Местами офигенно классная. Настолько, что очень обидно становится, что к такой картинке прилагается такая муть в довесок.

Звериная ярость (Primal, 2019). Николас Кейдж, к сожалению, в нормальных фильмах уже не снимается. И "Звериная ярость" лишь подтверждает это. Так что смело можно проходить мимо.

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

суббота, 28 марта 2020 г.

[prog.actors] Почему я не считаю упомянутых в статье на Хабре акторов настоящими акторами

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

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

Это вообще достаточно сложная проблема, с которой я регулярно сталкивался будучи тимлидом. Делаешь code review подчиненного и явно ощущаешь, что реализация переусложнена, что можно проще. Говоришь "здесь что-то слишком сложно, должно быть проще", а на встречный вопрос "А как проще?" сходу ответ дать не можешь. Потому что для того, чтобы дать такой ответ, нужно самому сесть и плотно поработать над этой задачей. А это значит, что ты мало того, что будешь вынужден переделать работу, которую должен сделать твой подчиненный, но еще и не успеешь сделать что-то другое, что ты никому не можешь делегировать.

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

Но данный пост я решил написать на другую тему, связанную с этой же статьей.

Дело в том, что в статье автор повсюду упоминает акторов и, как мне показалось, пребывает в уверенности, что использует "акторный подход". Хотя я (пока еще) убежден, что это не так. И в данном посте попробую объяснить, почему мне кажется, что использованные в статье "акторы" на самом деле "акторами" не являются.

среда, 18 марта 2020 г.

[prog.flame] Ай да молодцы в Dropbox! Взяли и переписали свой sync engine на Rust. Ну молодцы же, да?

Речь про вот этот пост: Rewriting the heart of our sync engine. Dropbox переписал часть своей системы, отвечающей за синхронизацию, с Python-а на Rust и выкатил на публику победную реляцию об этом достижении.

Вот казалось бы, имей голову на плечах и напиши все сразу на C++... И работало бы это все годами.

Не нравится C++, а Rust-а еще нет не свете? Но ведь есть Ada, есть Eiffel...

Но нет. Сперва нужно написать на Python.

Поиметь в результате этого кучу геморроя. Убить уйму сил и времени в попытках привести чудо сие в норму.

А потом выбросить результаты всех трудов на помоечку (с) и с криками восторга и другими проявлениями щенячей радости переписать все на Rust.

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

Да и еще не могу удержаться и не пройтись по любимой теме:

Almost all of our code runs on a single thread (the “Control thread”) and uses Rust’s futures library for scheduling many concurrent actions on this single thread. We offload work to other threads only as needed: network IO to an event loop, computationally expensive work like hashing to a thread pool, and filesystem IO to a dedicated thread. This drastically reduces the scope and complexity developers must consider when adding new features.

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

четверг, 12 марта 2020 г.

[prog.c++.tiredness] Написал мета-функцию transform и чё-та приуныл...

Сегодня с утра потребовалось реализовать мета-функцию transform для списка типов в C++. Т.е. в transform передается мета-функция трансформатор и список типов, а на выходе получается преобразованный список типов. Типа такого:

using T = transform_t<std::decay, type_list<int, int&, const string&>>;
// T == type_list<int, int, std::string>

Задался целью сделать этот transform самостоятельно, опираясь только на детали реализации других мета-функций, которые написал где-то в начали осени 2019-го по следам прочитанных в Интернете материалов.

Убил часа полтора. Тупил невероятно. Но сделал. Не заглядывая в Интернет.

Никакого удовольствия от решения этой частной задачки не получил. Зато возникло ощущение, что чего-то для меня уже слишком много. Либо конкретно C++. Либо программирования вообще...

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

Либо специализацию, поскольку C++ реально подза*бывает, чем дальше, тем больше. И сам язык, в котором невероятная мощь сочетается с невероятной кривизной и, имхо, слишком уж высоким темпом развития в последние годы. И фрагментированное коммьюнити с чрезвычайно сильно развитым NIH-синдромом.

Либо профессию вообще, т.к. программирование сейчас, такое ощущение, стало совсем другим, нежели во времена, когда я в эту профессию пришел в середине 1990-х. Да и сам я за 25 лет профессиональной карьеры написал уже столько кода, что сложно уже стало получать удовольствие от дела, которым так долго занимаешься. Все чаще догоняет ощущения "дня сурка".

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

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

Чего и пожелаю всем читателям, которые ощущают себя в подобной ситуации.

вторник, 10 марта 2020 г.

[prog.c++.bicycle] I'm working on the first draft of experimental type-safe router for RESTinio

The express-like router is available in RESTinio for several years. I think it is a very easy to use tool, that is familiar to many developers. But it has some congenital defects I wanted to repair for a long time.

The congenital defects of express-like router

The propensity to errors

The first defect is that express-like router is error-prone and isn't friendly for repeated cases. Let's look at one of the examples from RESTinio, express_router: