четверг, 2 февраля 2023 г.

[prog.c++.flame] Бомбануло у меня от копипасты сегодня

Вот здесь два немаленьких таких куска одинакового кода. Что заставило автора дублировать эти простыни вместо того, чтобы сделать одну вспомогательную функцию, указатель на которую затем отдается в SetCreateThumbnailCallback? Не понимаю.

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

Однако, для меня лично все равно это попахивает известной субстанцией. Слишком уж много лишних деталей вываливается на пользователя, да и не сложно уже существующий код видоизменить так, чтобы не приходилось вручную звать close() для открытых std::ifstream. Хотя я бы все равно сделал бы что-то вот такое, если бы пришлось оставаться в рамках C++11:

template<typename Setter>
void trySetBookmarksFromFile(const char * fileName, Setter && setter)
{
   std::ifstream docFile(fileName, std::ios::in);
   if(docFile) {
      std::stringstream strStream;
      strStream << docFile.rdbuf();
      setter(strStream.str());
   }
}

trySetBookmarksFromFile("bookmarks_1.conf",
      [](const std::string & v) {
         ImGuiFileDialog::Instance()->DeserializeBookmarks(v);
      });

trySetBookmarksFromFile("bookmarks_2.conf",
      [&fileDialog2](const std::string & v) {
         fileDialog2.DeserializeBookmarks(v);
      });

trySetBookmarksFromFile("bookmarks_c.conf",
      [&cfileDialog](const std::string & v) {
         IGFD_DeserializeBookmarks(cfileDialog, v.c_str());
      });

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

В общем, не делайте так.

среда, 1 февраля 2023 г.

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

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

Фильмы

Вершина страха (Summit Fever, 2022). Местами очень красиво снято (ну очень красиво). По сюжету, в большинстве своем все простенько и предсказуемо. И не сказал бы, что игра актеров поражает. Но в целом неплохое впечатление.

Всевидящее око (The Pale Blue Eye, 2022). Большую часть фильма нужно тупо вытерпеть, развязка в конце почти полностью оправдывает унылую тягомотину в начале. Но "почти", а не "полностью", как по мне.

Дверной замок (Doeorak, 2018). Могло бы получиться более-менее ничего, но кино погубила его камерность: слишком мало персонажей, легко вычисляется кто окажется главным злодеем.

Апгрейд. Цифровой солдат (Shen bing te gong, 2021). В принципе, бодренько. И выстрелы-взрывы, хоть и нарисованы на компьютере, но качеством отрисовки не раздражают. Однако, в фильме столько невероятного и нелогичного, что постоянно хочется задать вопрос "Что за фигню нам здесь показывают". Так что если есть возможность не смотреть, то можно и не смотреть.

Чрезвычайная ситуация (Bisangseoneon, 2021). Может быть интересно разве что большим любителям корейского кинематографа. А так все очень посредственно и предсказуемо, настоящей суровой драмы, которую можно было бы сделать, у авторов не получилось.

Меню (The Menu, 2022). Ощущение редкостной фигни, не смотря на красивую картинку и хорошую игру актеров. Полтора часа напрасно потраченного времени.

Сериалы

Душегубы (2019). Посмотрел с большим удовольствием.

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

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

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

Дикая река (Savage River, первый сезон, 2022). Вплоть до последней серии было хоть и затянуто, но интересно. А вот развязку завязали так, что просто сплошные вопросы "а зачем вот это и вот это было притягивать?" Так что в итоге осталось плохое впечатление.

Доктор Преображенский (первый сезон, 2018). Редкая дрянь и откровенная халтура. Посмотрели, что называется, "на безрыбье", но осталось только горькое ощущение напрасно потраченного времени.

вторник, 31 января 2023 г.

[prog.c++] Местами C++ недостаточно многословен для меня

С++ многими рассматривается как многословный язык. И хотя само по себе понятие "многословный" весьма субъективно, но если сравнить C++ с более молодыми конкурентами, вроде Rust или Go, но некая многословность таки заметна невооруженным взглядом: всякие template, typename, virtual, override, noexcept и т.д., и т.п.

У меня отношение к многословности C++ специфическое: да, она имеет место быть и на небольших фрагментах кода она может раздражать. Однако, когда приходится целый день копаться в простынях незнакомого кода, то все эти бросающиеся в глаза template, typename, virtual, override, noexcept и пр. начинают восприниматься как благо: хоть какие-то проблесковые огоньки в сплошном потоке.

А давеча столкнулся с ситуацией, в которой C++ мне показался недостаточно многословным.

Обнаружил в коде, написанном больше года назад, классическую для C++ ошибку: повисшую ссылку. Лямбда захватывала ссылку на объект, который жил внутри контейнера. В качестве контейнера был std::vector и, естественно, когда что-то из контейнера удалялось, то захваченная ссылка оказывалась невалидной.

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

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

И вот тут-то встал вопрос: а как по коду быстро и точно разыскать все лямбды?

Вот было бы в C++ ключевое слово lambda для определения лямбда-функции, было бы проще.

Но такого ключевого слова нет.

Жаль, как по мне. Будь такое ключевое слово (или какой-то специальный символ, скажем @), то код на современном C++, в котором, местами, лямбда на лямбде и лямбдой погоняет, читался бы проще. ИМХО, конечно же.


Есть ли у этого потока сознания какой-то сухой остаток? Вряд ли.

Разве что кто-то хочет создать современную замену C++ (ну не ограничиваться же Circle, Carbon, Val и cppfront, в самом-то деле) и задумается стоит делать эту самую замену настолько же лаконичной, как вышеупомянутый Rust?

понедельник, 30 января 2023 г.

[memories:prog,work,life] Фотография шестилетней давности...

Facebook любезно напомнил фотографию из января 2017-го года:

Это самое начало проекта RESTinio, я даже не уверен, что у нас уже к тому времени было само название RESTinio.

На снимке мой коллега и основной разработчик RESTinio, Николай Гродзицкий, фиксирует на доске свои идеи о том, как RESTinio будет устроена.

Насколько я помню, именно в тот день у нас в офисе сама эта доска появилась, мы ее только только повесили (внизу фото можно увидеть красный чемодан с перфоратором, приведенным в офис специально для этих целей).

Сам офис уже обжит. А за три месяца до этого было вот так:


Не знаю, что еще добавить. Разве что банальное: как же быстро летит время.

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