суббота, 1 апреля 2017 г.

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

Подошло время очередного кинообзора. На этот раз в списке всего два нормальных фильма (и это,  к сожалению, отнюдь не первоапрельская шутка). Остальное просто шлак, на который можно не тратить свое время.
Невидимый гость (Contratiempo, 2016). Европейский криминальный фильм. Снятый в своей, очень отличающейся от голливудской, стилистике. Посмотрел с большим удовольствием.
Гуляй, Вася (2017). Вот просто на удивление неплохой фильм. Понравилось. Хотя, подозреваю, фильм сильно на любителя, и не могу утверждать, что он понравится еще кому-то.
Закон ночи (Live by Night, 2016). Очень тщательно сделанный фильм. Смотришь и получаешь визуальное наслаждение от того, как фильм снят и какая там картинка. Но вот все остальное довольно уныло и неинтересно, даже никому из героев фильма сопереживать не хочется.
Новогодний корпоратив (Office Christmas Party, 2016). После трейлера ожидал, что будет такой же треш и угар, как в "Мальчишнике в Вегасе". Но получилось весьма уныло и практически не смешно.
Видели ночь (All Nighter, 2017). Посмотрел из-за участия Дж.К.Симмонса в главных ролях. Но его одного не хватило, фильм получился довольно посредственным.
Логан (Logan, 2017). По отзывам критиков перед фильмом ждал чего-то другого. Оказалось, что как был фильм по комиксам, так он и остался. Трейлер для "Логана" оказался намного интереснее и суровее самого "Логана".
Конг: Остров черепа (Kong: Skull Island, 2017). Красочно. Но накал идиотии просто зашкаливает. Потраченного на фильм времени очень жалко.
Три икса: Мировое господство (xXx: Return of Xander Cage, 2017). Либо это кино для детей младшего школьного возраста, либо я так и не понял, что это, блин, такое было.
Живое (Life, 2017). Снято красиво, но муть редкая. Постоянно задаешь себе вопрос: что за херню нам показывают?
Обитель зла: Последняя глава (Resident Evil: The Final Chapter, 2017). Посмотрел только для того, чтобы увидеть, до какого маразма дошли создатели этой серии фильмов. Лучше бы не смотрел.

пятница, 31 марта 2017 г.

[prog.thoughts] Блеск и нищета C++

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

Серьезно, если кто-то еще не читал эту небольшую PDF-у, в которой показываются трюки вроде:

template <typename N, template <typename...> class... CRTPs>
class Number : public CRTPs<Number<N, CRTPs...>>... {
public:
   using S = decay_t<underlying_arithmetic_type_t<N>>;
   constexpr Number() // note: intentionally uninitialized
       {}
   constexpr Number(S value)
       : value_(value) {}
   constexpr S value() const
       { return value_; }
   constexpr void set_value(S a)
       { value_ = a; }
private:
   N value_;
};

template <typename T>
class Stream_i {
   friend std::ostream &operator <<(std::ostream &a, T b)
      { return a << b.value(); }
};

template <typename T>
class Shift_i {
   friend T operator <<(T a, T b)
      { return T(a.value() << b.value()); }
   friend T operator >>(T a, T b)
      { return T(a.value() >> b.value()); }
};

template <typename T>
class Eq_i {
   friend constexpr bool operator ==(T a, T b)
      { return a.value() == b.value(); }
   friend constexpr bool operator !=(T a, T b)
      { return a.value() != b.value(); }
};
...

using restricted_int = Number<int, Eq_i, Rel_i, Add_i, Stream_i>;
   // Supports only ==, !=, <, >, <=, >=, +, +=, <<(ostream).

то очень рекомендую. От нового взгляда на возможности современного C++ глаза распахиваются еще шире :)

Это, конечно же, с непривычки сносит крышу. Но, блин, ведь круто же. Очень интересный способ композиции возможностей на основе CRTP.

И на этом фоне реальный топик с LOR-а, в котором человек приводит свой код и просит подсказать, в чем проблема.

Код -- полный ахтунг. Если кому-то не жаль 15 минут времени, советую сходить на LOR, посмотреть полный текст. Под катом я попробую разобрать только его фрагмент.

вторник, 28 марта 2017 г.

[prog.c++] Библиотека timertt обновилась до версии 1.1.3

Вышла обновленная версия библиотеки timertt для работы с таймерами в C++ -- 1.1.3. В этой версии в публичный интерфейс timer_manager и timer_thread добавлена функция empty(), которая проверяет, пуст ли список таймеров или нет.

Признаюсь, это глупый косяк, который был допущен пару лет назад. В потрохах библиотеки empty() был реализован для всех timer_engine, но вот наружу я его тупо забыл вытащить (объект timer_engine инкапсулирован внутри timer_manager/timer_thread и просто так его методы недоступны).

Библиотека разрабатывалась для замены ACE в проекте SObjectizer, поэтому все, что связано с timertt, находится на SourceForge:

  • архивы с исходными текстами доступны в секции Files. Архив timertt-1.1.3-headeronly.7z содержит только основной заголовочный файл со всей функциональностью timertt. Архив timertt-1.1.3-full.7z содержит так же тесты, примеры и сгенерированный посредством Doxygen API Reference Manual;
  • основная документация для проекта собрана в Wiki;
  • исходники лежат в Subversion-репозитории на SourceForge. Релизные версии в tags/timertt, находящиеся в разработке версии в branches/timertt.

понедельник, 27 марта 2017 г.

[prog.flame] Rust-оманы зря пытаются продавать Rust С++никам, им бы поменять целевую аудиторию :)

Данный пост возник под впечатлением от двух недавних больших срачей на reddit-е на тему о том, почему Rust лучше C++: Have you used Rust? Do you prefer it over Modern C++? и Things I love about Rust while being a C++ programmer. А так же интересным ссылкам, которые проскочили в этих обсуждениях, например: вот (про некоторые проблемы Rust) или вот (специально для тех, кто верит, что безопасность Rust-а не имеет платы в run-time). Кроме шуток, срачи интересные, помимо обычного булшита (например, в очередной раз всплыл аргумент о том, как классно иметь возможность во время компиляции подключиться к СУБД, выкачать оттуда описание схемы данных и сгенерировать ORM) встречаются и прикольные примеры C++ граблей на ровном месте. Вот, скажем: