пятница, 1 сентября 2023 г.

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

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

Фильмы

Быть Сальвадором Дали (Daliland, 2022). Я посмотрел с большим удовольствием. Но у меня Дали вообще, наверное, любимый современный художник, так что здесь я изначально сильно предвзят.

Рай земной (Paradise, 2023). На удивление неплохо для фильма от Netflix.

(Не)идеальные роботы (Robots, 2023). Простенько и немного предсказуемо, но прикольно. Посмотрел с удовольствием.

Бекки (Becky, 2020) и Бекки в ярости (The Wrath of Becky, 2023). Кино для любителей жанра "кишки, кровь, рас3.14дорасило", правда в немного лайт-версии. При этом первый фильм, как будто снимали на серьезных щах и, тем самым, немного подпортили впечатление. А вот во втором фильме создатели как будто специально говорят "мы не просто снимаем треш и угар, но и угараем с этого, поугарайте вместе с нами". Так что второй мне, как любителю жанра, понравился даже больше.

Не буди во мне киллера (Les complices, 2023). Вполне сойдет для ситуации, когда смотреть больше нечего.

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

Гангстердам (Gangsterdam, 2017). Посредственная молодежная комедия с шутками про пердеж (в прямом смысле). Но местами смешная.

Сердце Стоун (Heart of Stone, 2023). Красиво снятая мура.

Сериалы

Город шпионов (Spy City, первый сезон, 2020). Смотреть интересно, интригу в первых сериях закручивают хорошо, а вот развязка разочаровывает, как будто творческий порыв авторов внезапно выдохся.

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

Захваченный рейс (Hijack, первый сезон, 2023). Отлично снято и к игре актеров нет претензий. Пожалуй, это все хорошее, что можно сказать про этот сериал. Остальное, как по мне, одни недостатки.

Библиотекарь (первый сезон, 2023). Как по мне, так это сериал для любителей фэнтези. Если вы спокойно погружаетесь с фэнтезийный мир с его выдуманными законами, то можно и посмотреть. Если к фэнтези равнодушны, то можно и пройти мимо.

Богомол (La Mante, первый сезон, 2017). К технической части претензий нет. Но вот к сюжету и к героям... По поводу героев: такое ощущение, что там вообще нет ни одного нормального человека, сплошные поехавшие психи. В общем, не рекомендую.

среда, 23 августа 2023 г.

[prog.c++] Пример того, как NRVO(RVO) оптимизация может к вам в код UB подсадить

В процессе одного из споров на RSDN-е родился пример того, как компилятор, применив NRVO, приводит к неожиданному поведению.

Под катом полный код примера. Пока же пару слов о том, на что смотреть.

Есть простой класс entity, который содержит внутри себя целочисленное значение. Изменить это целочисленное значение можно только вызывав метод entity::update. Но это не const-метод, т.е. для константного entity его вызывать нельзя.

Фокус с entity в том, что есть еще и entity_registry, т.е. реестр объектов entity. Если в конструктор entity передать ссылку на entity_registry, то entity себя в реестре зарегистрирует. А в деструкторе -- вычеркнет.

Пока объект находится в реестре, его можно изменить через реестр: вызываем метод entity_registry::update и реестр вызывает update для всех зарегистрированных в нем объектов.

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

void check() {
   entity_registry registry;
   entity e1{registry};

   entity e2; // Не в реестре.

   entity e3{e1}; // Не в реестре.

   registry.update(25);

   std::cout << e1.value() << ", " << e2.value() << ", " << e3.value() << std::endl;
}

Мы получим вполне ожидаемое:

add to registry: 0x7ffd7b567c18
25, 0, 0
removed from registry: 0x7ffd7b567c18

Т.е. объект e1 добавил себя в реестр, потом мы получили три предсказуемых значения (два нулевых, т.к. никто не менял e2 и e3), затем e1 изъял себя из реестра.

А теперь внимание, вопрос: что будет во в таком случае?

entity make_entity(entity_registry & registry) {
   entity ent{registry};
   ent.update(42);
   return ent;
}

void demo() {
   entity_registry registry;
   const entity ent = make_entity(registry);

   registry.update(100);

   std::cout << ent.value() << std::endl;
}

Можем ли мы изменть значение константного ent внутри функции demo через вызов update у реестра?

суббота, 19 августа 2023 г.

[prog.c++.message-passing] A few words after watching Anthony Williams's "Designing for C++ Concurrency Using Message Passing"

There is Anthony Williams's talk "Designing for C++ Concurrency Using Message Passing" at ACCU 2023. It wasn't an interesting talk for me personally because I didn't find anything new for myself (not surprising, because I have been responsible for the development of a message passing framework for years).

But I would like to add my 2 cents to the topic. I hope my thoughts will help to understand how message passing frameworks can differ from each other. And how such differences can affect the design and writing of software.


First of all entities that receive and process messages (let's call them "actors") can be represented as objects with callbacks or as execution threads.

четверг, 17 августа 2023 г.

[prog.c++.sobjectizer] Есть идея о том, как пользователь может реализовать собственные очереди сообщений для агентов

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

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

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

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

Свою текущую идею на этот счет я описал в разделе Discussions на GitHub: https://github.com/Stiffstream/sobjectizer/discussions/64

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

Главный вопрос для меня сейчас -- это интересно ли кому-нибудь данное направление?

Если кому-то интересно, то появляется смысл копать дальше.

Ну а если нет, то подожду удобного случая. Может со временем что-то еще лучше в голову придет.

среда, 16 августа 2023 г.

[career.flame] Рекомендация, которая меня всегда подбешивала...

..."стремись в коллектив, в котором ты будешь худшим".

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

Рекомендацию эту я встречаю уже, если не соврать, лет 15. И каждый раз меня одолевает некоторое недоумение. Чем дальше, тем больше.

В очередной раз у меня подгорело на вот этой иллюстрации, попавшейся в ленте LinkedIn:

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

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

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

вторник, 15 августа 2023 г.

[work] Известный на RSDN-е Ikemefula ищет работу

На когда-то известном в Рунете профильном ресурсе RSDN есть форумчанин Ikemefula (он же Pauel, он же Plutonia Experiment, он же old Dutchman, он же Dutchman). Один из немногих RSDN-еров, который отличался здравыми и логичными суждениями, да еще и записанными нормальным и понятным языком. Признаюсь, мне самому было интересно читать то, что пишет о программировании, хоть не со всем я был согласен. Но, повторюсь, умением связно излагать свое мнение Ikemefula отличался в лучшую сторону и по этому показателю был очевидно круче остальных 99% участников RSDN.

Сейчас ищет работу. Вот его профиль на LinkedIn.

Сам я с Ikemefula не работал и даже никогда не общался с ним вне RSDN, но, имхо, неправильно это когда толковые люди сидят без работы.

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

[prog.c++] Вот как раз для таких вот задач SObjectizer и бывает полезен

В качестве наглядного примера: свежий вопрос на LOR-е под названием "Приоритетная очередь".

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

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