понедельник, 30 августа 2021 г.

[blog] Включил премодерацию комментариев

Сегодня какой-то спамер стал донимать меня комментариями с левыми ссылками.

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

Заодно выяснилось, что Blogger с начала этого года уже отправил несколько комментариев на премодерацию, но мне об этом забыл сказать. В связи с этим приношу извинения тем людям, чьи комментари опубликовались только сегодня.

четверг, 19 августа 2021 г.

[prog.thougths] Попытка спроектировать механизм взаимодействия процессов на одной ноде через shared memory по принципу single-producer/multi-consumers

С конца прошлой недели занимаюсь проектированием механизма, посредством которого процесс-producer смог бы передавать через shared memory информацию одному или нескольким процессам-consumer-ам. Вроде бы придумалось какое-то решение, которое выглядит рабочим. Данный пост является попыткой еще одной проверки этого решения: если получится упомянутый механизм внятно описать словами, то есть хорошая вероятность, что он будет воплощен в коде.

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

В общем, всех заинтересовавшихся приглашаю под кат.

понедельник, 16 августа 2021 г.

[prog.thoughts] И снова на тему исключений. На этот раз с подачи Вальтера Брайта

На HackerNews появился и обсуждается плач Ярославны Вальтера Брайта на тему исключений. Он там перечислил с десяток причин своей нелюбви к исключениям. Желающие могут ознакомиться сами.

Я же выделю два пункта из списка Брайта:

5. it is hard to write exception-safe code

6. very few understand how to write exception-safe code

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

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

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

И, как показывает практика, у многих программистов (включая меня самого) не очень хорошо с предсказанием последствий такого преждевременного выхода. В этом-то как раз и есть корень зла. Мы, люди, не особо хорошо справляемся с перебором возможных вариантов "а что, если здесь случится какая-то херня?" Это и есть основополагающая штука. А не throw, return или goto err.

У хейтеров исключений существует иллюзия о том, что если они будут писать код в стиле:

r = do_something();
if(-1 == r) {
  revert_changes();
  return -1;
}

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

По моим наблюдениям это, мягко говоря, не так.

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

Да, я знаю, что идиома goto err сильно облегчает жизнь. Но это именно что средство для уменьшения боли, а не ее устранения.

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

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

суббота, 14 августа 2021 г.

[life.sport.thoughts] Горькое послевкусие завершившейся Олимпиады 2020

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

Общие впечатления лично у меня достаточно грустные. И не по поводу скандалов вокруг происходившего до и во время Олимпиады. А по поводу самого факта существования и значимости Олимпиады в современных условиях и в её современном виде.

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

ИМХО, в Олимпиаде нужно оставить только те виды спорта, для которых:

  • понятие "олимпийский цикл" -- это не пустой звук. Т.е., когда завершение одной Олимпиады означает начало подготовки к следующей, с введением в сборную молодых спортсменов, с обновлением команд, с выстраиванием планов по выводу спортсменов на пик их формы и возможностей именно к следующей Олимпиаде. А в каких-то видах спорта (командных в первую очередь, как мне кажется) планы могут распространяться и на более длительный срок (скажем, начало "обкатки" молодых спортсменов в возрасте 18-19 лет, чтобы они стали ядром команды через 7-8-9 лет);
  • звание Олимпийского Чемпиона является если не самым престижным в этом виде спорта, то одним из немногих самых престижных званий.

Например, я не вижу смысла в сохранении тенниса в программе Олимпиады. Масштаб и сложность победы на любом из 4-х турниров Большого Шлема, имхо, в разы круче, чем то, что можно было увидеть на Олимпиаде. Тоже самое можно сказать и о футболе.

Или присутствие скейтборда или некоторых разделов МТБ в программе Олимпиады. Почему-то эти виды спорта мне напоминают анекдот про седых байкеров и молодых мотоциклистов: "А что с вами знакомиться? Вы же каждый год новые".

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

Побочным эффектом того, что набор видов спорта на Олимпиаде расширяется, становится то, что сокращается число спортсменов, которые могут принять участие в Олимпиаде в конкретном виде.

Так, если в 1960-1970-е годы в боксе в некоторых весовых категориях участвовало больше сотни боксеров (емнип), то сейчас их всего-то 32. Да, система получения олимпийских лицензий обеспечивает присутствие среди этих 32-х самых ТОПовых спортсменов. Но все равно, если в 1960-х победитель игр должен был пройти путь из 6-7 поединков с самыми разными спортсменами, то сейчас этот путь заметно короче.

В общем, текущее направление движения Олимпиад мне не нравится (и это в расчет не берутся разные политические игры, которые оказывают влияние на Олимпиады). И если ничего не изменится, то лет через 12-16, боюсь, Олимпиада превратиться в какое-то заурядное событие, в котором с интересом можно будет посмотреть всего лишь несколько видов спорта.

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

  • в течении последних 30 лет (а лучше 50) должны проводится крупные турниры уровня Чемпионатов Мира с какой-то минимальной квотой участников (с учетом отборочных соревнований). И чтобы среди победителей этих крупных турниров были спортсмены из большого количества стран. Чтобы на Олимпиаду не попадали виды спорта, популярность которых ограничивается каким-то небольшим регионом (типа США, Англии, Японии, России, Бразилии, Китая и т.д.);
  • чтобы в этом виде спорта были случаи, когда кто-то выигрывал крупнейшие соревнования (уровня ЧМ) несколько раз и разница в годах между первой и последней победами составляла бы более 4-х лет. Это исключит виды спорта, в которых каждый год новые чемпионы просто в силу того, что людям до 16 лет интересно выделывать всякое на скейте, а потом приходит время других юных и бесстрашных;
  • чтобы престиж звания Олимпийского Чемпиона был на самом высоком уровне. Например, за счет того, что настолько больших и сложных турниров по этому виду спорта, как Олимпиада не было бы и близко.

В общем, видов спорта поменьше, спортсменов в каждом виде побольше.

Формулируя такие критерии я понимаю, что любимый мной дартс никогда не станет олимпийским видом спорта. Как и снукер. Но, как по мне, так это и к лучшему. Тот же дартс не станет лучше, если попадет на Олимпиаду.

суббота, 7 августа 2021 г.

[life;business] Цинично о шумихе вокруг Xsolla

Даже до меня долетел шум вокруг компании Xsolla с весьма необычным обоснованием необходимости уволить 150 человек. Для тех, кто как и я, в танке, вот несколько материалов на тему:

Xsolla уволила часть сотрудников пермского офиса после «анализа их активности» в рабочих чатах,

Xsolla предположительно уволила ряд сотрудников в Перми после анализа их рабочей активности,

«Мы формально еще никого не уволили. Мы сказали: компания вас не ценит» Интервью основателя Xsolla Александра Агапитова, который объявил, что разом увольняет 150 «невовлеченных» сотрудников (и тут началось).

Больше всего у меня от этой истории подгорело из-за того, что 99.9% обсуждающих эту тему a) не имеют к ней никакого отношения и b) не почувствуют на себе никаких последствий.

Ну а раз так, то позволю и я себе пару циничных высказываний.


Во-первых, это решение собственника компании. Имеет право.

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

Так что еще раз, главное: он владелец, он может делать что хочет. В этом-то и весь смысл.


Во-вторых, нахожусь при мнении, что публика в Интернетиках так сильно возбудилась потому, что 99% возбудившихся -- это наемные сотрудники на зарплате. И часть из возбудившихся отчетливо понимает, что собственники бизнеса с ними могут поступить точно так же. А кто не понимает отчетливо ("малолетних дебилов" в ИТ всегда было в избытке, несмотря на миф о том, что это якобы высокоинтеллектуальная сфера деятельности), те что-то подозревают на уровне подкорки.

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

Но признать это нужно. Welcome to the real world, как грится.


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

Чтобы оценить, насколько такой исход вероятен, нужно учесть, как минимум два важных фактора (на самом деле их больше, но для нестоличных городов роль этих двух факторов очень велика).

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

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

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


Ну и напоследок сухой остаток:

  • мы живем в условиях капитализма, так что да, "в*бывай или у*бывай", по другому никак и не вы решаете достаточно ли вы "в*бываете";
  • если вы собственник бизнеса или собираетесь им стать, если ТОП-менеджер или метите в таковые, то данный случай можно использовать для того, чтобы сделать собственные выводы о том, какие способы контроля и управления вы готовы применять и к каким последствиям это может привести;
  • если вы обычный наемный сотрудник, то это лишний повод посмотреть на мир без розовых очков и подумать о мерах, которые помогли бы вам, окажись вы сами в числе тех, кого решили выставить на мороз.

PS. Отдельная часть шума -- это обсуждение того, как можно обосновать увольнение "показателями big-data". Ну ё-маё, это даже не серьезно. Суть же в том, чтобы тем или иным образом определить список подлежащих увольнению. Обставить это все потом с формальной точки зрения можно так, чтобы не подкопались. Особенно, если владелец готов идти на нормальные выплаты при увольнении. Как и сделать невыносимой дальнейшую работу тех, кто решит пойти на принцип и захочет остаться прикрываясь соблюдением бюрократии.

четверг, 5 августа 2021 г.

[prog] Хорошая иллюстрация кода, про который остается разве что сказать "мне кажется, что можно сделать проще"

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

К сожалению, такие воспоминания сложно иллюстрировать примерами кода.

Но вот на Хабре нашел статью с примером, который, как мне думается, ну просто идеален для подобной иллюстрации: История одного фееричного провала тестового задания на C#. Код, который написал автор упомянутой статьи, выложен на GitHub, там его и можно посмотреть. В частности, мне хватило беглого взгляда на вот этот файл.

Вот тут уж, действительно, смотришь на код и не можешь отделаться от двух мыслей: a) вроде бы должно быть проще и b) блин, да это же нужно самому задачу решить, чтобы объяснить, что именно должно быть проще.

Если говорить о содержимом класса TestApp::Schedule, то у меня лично сходу следующие претензии к уведенному:

  • нет описания принципа хранения расписания в TestApp::Schedule. В классе есть набор членов, но нет описания как и для чего они используются, каким образом расписание представляется посредством этих членов. Это значит, что тому, кто будет сопровождать такой класс, придется всю логику выколупывать из кода. И надеятся, что исходная логика была этим самым кодом выражена правильно, что не далеко не факт, как показывает мой многолетний опыт;
  • слишком большой объем некоторых методов. В частности конструктора Schedule. Ладно бы эти 120 строк были сгенерированы автоматически, но ведь они написаны вручную;
  • слишком большая вложенность if-ов в некоторых местах. Опять же, если бы это был автоматически сгенерированный код, то ладно. Но это же написано вручную. Простите мне мой французский, но когда программист пишет подобную вложенность if-ов, то это наводит на подозрения об ошибках в ДНК. В мое время человеку бы могли запросто сказать, что он ошибся профессией.

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

Так что я бы лично такую реализацию тестового задания бы завернул. Может быть с более лояльной общей оценкой :)

Вообще же задача сильно напоминает мне классический unix-овый cron. И если бы такое тестовое задание предстояло решать мне самому, то я бы сперва перерыл бы Интернет в поисках описаний различных подходов к ее реализации. Может быть даже в исходники cron-а бы заглянул. У меня коллега когда-то лет 17 назад что-то подобное делал и там использовались битовые массивы и, вроде бы, все это было гораздо компактнее и понятнее.

воскресенье, 1 августа 2021 г.

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

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

Вторая жизнь Уве (En man som heter Ove, 2015). Как по мне, так добрый и милый фильм. Но зайти может не всем, т.к. в нем нет какой-то интриги и он наполнен довольно-таки стереотипными вещами.

Круэлла (Cruella, 2021). Удивительно, но на фоне всего того шлака, который идет в этом списке ниже, этот фильм даже посмотреть можно. Хотя бы из-за саундтреков. А если бы и спецэффекты были на нормальном уровне сделаны, то было бы и вообще хорошо.

Война будущего (The Tomorrow War, 2021). Можно посмотреть. Но многого ждать не стоит. И мозги нужно отключить, не вдумываться и смотреть просто как на аттракцион.

Без резких движений (No Sudden Move, 2021). Кино из, что называется, непонятого. Смотреть было интересно. Но после просмотра главный вопрос: "А кто бы теперь все это объяснил для обычного зрителя?"

Мейер Лански (Lansky, 2021). Сильно двойственные впечатления. С одной стороны, очень качественно все сделано и смотреть это на фоне остального современного шлака, просто приятно. Отдельное удовольствие опять увидеть в главных ролях Харви Кейтеля, ветеран держится молодцом. Но, с другой стороны, ничего нового в фильме нет. Такое ощущение, что все это уже видел многократно и никакой собственной изюминки нет и впомине.

Пятнадцать минут войны (L'Intervention, 2019). Фильм условно можно разделить на две части: первая (порядка 1 часа и 15 минут), в которой происходит завязка истории и подготовка к развязке, и вторая (порядка 15 минут) с собственно развязкой. Так вот, первая часть настолько уныла и неинтересна, что я даже и не знаю, стоит ли через нее продираться, чтобы посмотреть вторую часть, намного более интересную и динамичную.

Судная ночь навсегда (The Forever Purge, 2020). Если кому-то понравились предшествующие части серии про "Судную ночь", то можно попробовать посмотреть и эту. Но, как по мне, лучшей была вторая часть, в которой снимался Фрэнк Грилло. А этот же фильм -- обычный ширпотреб для любителей жанра.

Пороховой коктейль (Gunpowder Milkshake, 2021). Унылая и скучная попытка снять очередного "Джона Уика в юбке". Временами чрезмерно затянутые сцены просто выбешивали.

Во всё тяжкое (The Professor, 2018). После трейлера ожидал от фильма много большего. Получил же набор банальностей и, в некоторых местах, желание громко воскликнуть "Не верю!" Немного спасает фильм разве что обаяние Джонни Деппа и, особенно, Дэнни Хьюстона.

Заложники Марса (Settlers, 2021). Фильм развивается неспешно. В одной и той же локации. С очень небольшим количество персонажей. Но за этим всем все равно интересно следить в ожидании развязки и объяснения того, чтоже именно и почему происходит. Но вот этой самой развязки с объяснением и не случается. Унылый финал, который сливает в унитаз весь фильм.

Ага (2021). Попытка казахов снять своего собственного Джона Уика. Попытка так себе. Убедительного персонажа взяли на главную роль. А вот на все остальное, такое ощущение, денег уже не хватило. Включая, к сожалению, и экшен.

Телохранитель жены киллера (Hitman's Wife's Bodyguard, 2021). Отборнейшее говно. И по замыслу, и по исполнению.

Черная вдова (Black Widow, 2021). Редкой тупости кино с невероятно убогими для такого "блокбастера" спецэффектами. Такое ощущение, что создание фильма было отдано на откуп самым дешевым и криворуким аутсорсерам.

Красотка на взводе (Jolt, 2021). С большим трудом досмотрел до половины, потом сдался и выключил.


Отдельное мнение по поводу фильма Красный призрак (2020).

Я не понял что это было. А потому и не могу судить, хорошее это кино или нет. Но лично мне как-то не зашло. Может быть как раз потому, что я так и не понял, что это было.

Возможно, в современных реалиях нужно делать комиксы на тему ВОВ, к коим "Красный призрак" я и отношу. Но мне такое, в силу возраста и воспитания на совсем других фильмах про войну, кажется дикими.

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