суббота, 1 мая 2021 г.

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

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

Аферистка (I Care a Lot, 2020). Весьма неплохо, смотреть было интересно.

Дикая (Wild, 2014). Хороший фильм. Меня неприятно удивило то, насколько невнятно в фильме показали уникальные по своей красоте места, которые попадали в кадр. Но это, наверное, уже придирка.

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

Взаперти (Run, 2020). Посмотреть можно, но общее впечатление такое, что достаточного бюджета фильму не выделили.

Выбивая долги (The Tax Collector, 2020). Занудная ерунда. Фильм, в котором никому не сочувствуешь и после просмотра жалеешь, что поубивали не всех. Шайа ЛаБаф, как актер, переиграл всех остальных актеров фильма вместе взятых, но его персонаж так и не "выстрелил", так что зачем в этот четверосотный фильмец зазвали такого мощного исполнителя я не понял.

суббота, 17 апреля 2021 г.

[prog.wtf] Пример творческого подхода некоторых софтописателей к трактовке спецификаций

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

Процедура подключения клиента к SOCKS5 серверу проста.

Клиент подключается и шлет первый PDU, в котором перечисляются методы аутентификации, поддерживаемые клиентом (например: без аутентификации вообще, на базе username/password).

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

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

Итак, простая схема, в которой клиент шлет сообщение серверу, сервер отвечает, затем клиент шлет второе сообщение и т.д.

Однако, как оказалось, некоторые софтописатели применяют любопытный хак: они шлют два первых сообщения от клиента сразу. Так, в первом PDU клиент говорит, что он желает использовать только способ аутентификации по username/password. И тут же приклеивает к первому PDU второй, который как раз и содержит username/password.

вторник, 13 апреля 2021 г.

[life.music] Продолжение саги о выборе хороших, но недорогих наушников на Aliexpress. Хороший звук за минимальный бюджет

Продолжаю делится впечатлениями от процесса поиска на Aliexpress недорогих, но хороших наушников. Делать обзор побывавших у меня наушников-вкладышей пока не готов (да и сомневаюсь, что это будет кому-то интересно). Поэтому сегодня расскажу о том, на что бы я сейчас, имея мой сегодняшний опыт, потратил бы деньги. Чтобы и хороший звук получить, и чтобы обошлось это в небольшую сумму, и чтобы не приходилось выходить за наш РБшный лимит в 25 USD за одну посылку.

Дисклаймер. Под хорошим звуком я понимаю звук, который устраивает меня. Т.е. когда я надеваю наушники, начинаю слушать музыку и меня перестает волновать через какие именно устройства я слушаю, какие у них характеристики, сколько они стоят и пр. Наверняка бывалые аудиофилы, профессионалы в обработке звука, да и просто люди с музыкальным слухом имеют совсем другое мнение по поводу понятия "хороший звук", но мне фиолетово :)

Главный фокус -- источник звука

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

Но гораздо меньше людей задумываются о том, что следующим важнейшим фактором является источник звука, т.к. устройство, которое и воспроизводит наш качественный MP3- или FLAC-файл. Я, например, на эту тему даже не задумывался. А зря.

понедельник, 12 апреля 2021 г.

[prog.c++] Наглядно на тему сложности освоения SObjectizer-а

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

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

Фокус здесь в том, что SObjectizer распространяется бесплатно и под пермиссивной лицензией BSD. Поэтому никто не обязан с нами связываться, спрашивать у нас разрешения, что-то нам платить и вообще хоть как-то ставить нас в известность. Люди просто берут SObjectizer и используют.

О том, что SObjectizer где-то и как-то применяется мы узнаем, как правило, из двух источников:

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

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

Совсем свежий пример в Google-группе. Человек разобрался с SObjectizer-ом, сделал далеко не самый простой имитатор того, что ему нужно в его предметной области, и спросил совета по достаточно интересной и неоднозначной теме.

Так что SObjectizer -- это вовсе не "образцовое ненужно" (на смотря на то, что меня в этом настойчиво убеждают благожелатели в Интернетах). Этим инструментом интересуются, его пробуют, его используют.

То, что мы вынуждены приостановить работы над нашими OpenSource проектами (включая SObjectizer), не означает, что проект заброшен. Без поддержки, как можете видеть, пользователей не оставляем. Ну а как представится возможность, так и продолжим снабжать SObjectizer/so5extra и RESTinio новыми фичами.

четверг, 8 апреля 2021 г.

[prog.c++.bicycle] Отдельный тип для строковых литералов своими руками

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

class long_living_object {
  const char * value_;
public:
  long_living_object(const char * v) : value_{v} {}
  ...
};

long_living_object make_object_ok() {
  return { "Hello, World!" };
}

то у нас, в принципе, все нормально. В возвращаемом функцией make_object_ok объекте будет находиться валидный указатель.

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

long_living_object make_object_bug() {
  char greeting[] = "Hello, World!";
  return { greeting };
}

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

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

понедельник, 5 апреля 2021 г.

[life.music] Продолжение саги о выборе хороших, но недорогих наушников на Aliexpress. Отчет о побывавших у меня внутриканалках

Сегодня кратко пройдусь по моделям внутриканальных наушников, которые побывали у меня в руках. За исключением KZ ZSN Pro, с которых все началось и которые я благополучно продал еще в январе.

Прежде чем начать...

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

среда, 31 марта 2021 г.

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

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

Фильмы

Девушка, подающая надежды (Promising Young Woman, 2020). Посмотрел случайно. Зашло на удивление хорошо. Главная моя претензия к фильму в том, что с исполнительницей главной роли угадали хорошо, но совершенно не верилось, что ей по фильму 30 лет. Если бы по фильму ей было 35, то и смотрелось бы более естественно, и то, что она так долго все это хранила в себе, придавало бы происходящему больше драматизма.

Последний богатырь: Корень зла (2020). Как по мне, так чуть слабее первой части, но все равно понравился. Для современного российского кино так прям очень здорово.

Марионетка (Marionette, 2020). Не так уж и плохо. Можно посмотреть.

Душевная кухня (Soul Kitchen, 2009). Странный фильм. Не берусь даже сказать к какому жанру его можно отнести, но смотреть было интересно.

Гениальное ограбление (Way Down, 2021). Лет 15 назад мог бы и зайти. А сейчас воспринимается как-то ну очень уж наивно и штамповано как-то, без изюминки.

В чужой шкуре (Possessor, 2020). Купился на достаточно высокий рейтинг этого фильма на IVI и Kinopoisk. Оказалась редкая муть. Такое ощущение, что снимали его сексуально озабоченные укурки. Хорошо хоть, что это были озабоченные гетеросексуалы, а то ведь могло быть и гораздо хуже. В общем, не хотите терять времени -- не смотрите.

Сериал

Кардинал (Cardinal, четыре сезона). Понравился. Смотреть было интересно. Хотя это как бы и не детектив вовсе. Скорее просто истории про людей в криминальном антураже.