понедельник, 2 апреля 2018 г.

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

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

Первому игроку приготовиться (Ready Player One, 2018). Сюжет полное Г. Но вот визуальная составляющая доставляет по полной программе. И вообще, это фильм для семейного просмотра, так что в этом качестве к нему претензий нет -- хороший, динамичный и красочный аттракцион.

Большая игра (Molly's Game, 2017). Наверное, не шедевр. Но мне понравилось.

Все деньги мира (All the Money in the World, 2017). Первый фильм Ридли Скотта за последние годы, который можно спокойно посмотреть.

Tomb Raider: Лара Крофт (Tomb Raider, 2018). Еще один красочный аттракцион для семейного просмотра. Как по мне, так самое достойное, наверное, из приключенческого кино в стиле "Индианы Джонса" за последнее время. Ну и, по-моему, гораздо лучше, чем фильмы по мотивам Tomb Raider с Джоли в главной роли.

Джуманджи: Зов джунглей (Jumanji: Welcome to the Jungle, 2017). Очень неплохая приключенческая комедия.

Аутсайдер (The Outsider, 2018). Посмотреть можно. Но как-то все очень неспешно в фильме происходит, к этому нужно быть готовым.

10 на 10 (10x10, 2018). Могло бы быть хорошо, если бы не несколько моментов, в которые приходится вопрошать "Ну что за...? Ну как же так...?"

Аннигиляция (Annihilation, 2018). Очень занудная нудятина-бредятина с предсказуемой концовкой.

Форма воды (The Shape of Water, 2017). Тот самый случай, когда и во время, и после просмотра хочется воскликнуть: "Коллега, что за фигню нам здесь показывают?!!!"

Титан (The Titan, 2018). Обычная история для фильмов Netflix: замах на рубль, удар на копейку. Но в данном случае все настолько скучно, занудно и убого, что можно смело не смотреть.

пятница, 30 марта 2018 г.

[prog.thoughts] Тяпничное про оглядки на старые версии C++ компиляторов

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

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

Возможно, на заре моей программерской деятельности это было не совсем так, поскольку тогда и C++ весьма активно развивался, и сами платформы активно развивались и вытесняли друг друга (например, многие ли помнят, как 16-битовый Windows пытался бороться с 16-битовым MS-DOS, а всех их уделывала 32-х битовая OS/2, которая затем не смогла устоять перед Windows-95 и Windows-NT?). Ну и плюс к тому, мы сами тогда работали над новыми, перспективными проектами и не сильно были знакомы с понятием legacy (под "мы" здесь понимаются те небольшие коллективы, в которых мне довелось поработать в 1990-х).

Но вот года с 1998 или 1999-го оглядываться на то, что у тебя самого или у кого-то из твоих клиентов может быть далеко не самый новый C++ компилятор, и что у этого компилятора могут быть какие-то заскоки по части поддержки той или иной части C++... Вот на это оглядываться уже приходилось. Отлично помню момент, как на рубеже 2000-го года под каким-то из Linux-ов довелось поработать с gcc версии, кажется, 2.95, который не умел нормально ловить исключения при использовании наследования. Т.е. если у тебя есть базовый тип Exception, и есть наследник FileNotFoundException, ты бросаешь FileNotFoundException, а ловишь его по ссылке на Exception, то исключение просто не ловилось. Пришлось тогда в каком-то проектике отказываться от иерархии исключений.

Да, так вот с конца 90-х и до сего времени приходится задумываться о том, что кто-то может еще сидеть на каком-то специфическом Linux-е с проплаченной на 10-ть лет коммерческой поддержкой. А там, дай Бог, если gcc-4.8, а то может быть и какой-нибудь gcc-4.4. И, что самое печальное, я сам до недавнего времени считал, что такие оглядки -- это вполне себе нормально и забота о потенциальных пользователях, которые не могут переходить на новые версии компиляторов -- это разумно и оправдано.

Но в последние дни мое отношение к этой ситуации начало меняться. Не то, чтобы это произошло внезапно. В общем-то с SObjectizer-ом мы ограничились поддержкой на уровне gcc-4.8 и msvc-12.0. Была попытка опуститься до gcc-4.7, но там уж совсем все было грустно, поэтому плюнули. Ну и для RESTinio мы сразу решили ограничиться только C++14 на уровне где-то gcc-5.4 и msvc-14.0. Там, однако, был расчет на то, что пока мы будем доводить RESTinio до версии 1.0, пройдет ну очень много времени. И минимум на уровне C++14 к тому времени будет казаться вполне себе нормальным. Пока что этот расчет оправдывается, т.к. прошел уже год с момента начала работ над RESTinio и скоро будет год с первого публичного релиза, а мы еще только на уровне версии 0.4 и впереди еще прорва работы.

Сейчас же я прихожу к мысли, что C++ с 2011-го года вышел на совсем другой темп развития. Мало того, что бумажные стандарты выходят каждые три года, так еще и основные компиляторы в последние годы очень быстро подтягиваются с поддержкой самых свежих стандартов. Это делает ситуацию совершенно не похожей на то, что было до C++11. В 2008-ом году, например, было вполне нормально оглядываться на то, что умеет поддерживать, скажем, VC++6.0. Потому, что в 2008-ом был только C++98 и VC++6.0 в изрядной степени C++98 поддерживал. Но в 2018-ом году оглядываться на то, что поддерживает VC++12.0, наверное, уже не разумно. Жизнь слишком коротка для того, чтобы ждать, пока плюшки и вкусности из C++17 станут тебе доступны потому, что уже прошло 10-15 лет после принятия 17-го стандарта и практически никто уже не использует VC++12.0 (хотя я уверен, что в 2028-ом еще найдется какой-нибудь ынтерпрайз, который будет завязан на 12-ю версию VC++). Плюс к тому, конкурирующие технологии развиваются еще быстрее. И в таких условиях сложно находить для себя убедительные объяснения того, почему я не могу использовать std::optional из C++17, если его аналоги уже много лет как есть в стандартных библиотеках каких-нибудь Scala или Rust.

Еще один веский довод -- это постоянно возрастающий объем и сложность наших OpenSource проектов. Тот же SObjectizer за прошедший 2017-й год увеличился в объеме и сложности более чем прилично (если считать вместе с so_5_extra). Что уж говорить про RESTinio. Соответственно, добавление новой функциональности в OpenSource-проекты требует все больше и больше усилий. И не так-то просто оправдать те усилия, которые тратятся на поддержку старых компиляторов. Особенно с учетом того, что OpenSource-проекты распространяются бесплатно.

В связи с этим я думаю, что в современных условиях, особенно с поправкой на то, как развивается C++ и какие изменения нас ждут в C++20, мне кажется вполне разумным для своих проектов ограничится поддержкой всего двух стандартов C++: самого последнего и предпоследнего. Т.е. на данный момент это C++17 и C++14. Соответственно, когда появится C++20, поддержка C++14 закончится. А для новых проектов, которые еще только-только стартуют и достигнут стабильности лишь в отдаленной перспективе, можно ограничится вообще только последним стандартом.

К чему это может привести на практике?

SObjectizer-5.5 будет требовать не более чем gcc-4.8 до апреля следующего года. Мы пару лет назад пообещали, что SObjectizer-5.5 будет привязан к gcc из Ubuntu 14.04 LTS. И от этого обещания мы не отказываемся. С поддержкой VC++12.0 сложнее. Скорее всего, мы на нее забьем после выхода очередной VisualStudio. Т.е. как только появится VisualStudio-2018, так мы сразу же перестанем оглядываться на VC++12.0.

Другой вопрос -- это насколько активно будет дальше развиваться SO-5.5? Сейчас мы работаем над версией 5.5.22. Затем, возможно, будет еще и 5.5.23. И, может быть, после этого ветка 5.5 перейдет в режим поддержки. А развиваться будет новая, нестабильная ветка 5.6, в которой мы будем закладываться уже на C++17. Но тут мы посмотрим еще на то, что за gcc будет в Ubuntu 18.04 LTS и на то, когда у нас появятся ресурсы для начала работ над 5.6.

RESTinio, по крайней мере, в этом году, будет требовать C++14. В следующем году посмотрим, выгодно ли нам держаться за C++14 или же проще и дешевле ограничится только C++17.

Вот как-то так. Имхо, времена изменились. И сейчас местами даже C++14 уже может быть слишком старым, чтобы ориентироваться на него. Что уж говорить про C++11 и, тем более, C++98/03.

среда, 28 марта 2018 г.

[prog.c++] Статья на Хабре про нововведение в грядущей версии SObjectizer-а.

Собственно, вот: Когда акторный фреймворк превращается в «черный ящик» и что мы можем с этим сделать?. Те, кто не может/любит комментировать на Хабре, могут оставить свое "Фи" в комментариях к этой заметке.

Первая альфа новой версии SObjectizer-5.5.22 уже зафиксирована (архив доступен на SourceForge, так же обновлено зеркало на github-е (но там тег не фиксировался)). Так что желающие могут брать и пробовать.

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

вторник, 27 марта 2018 г.

[life.books] Промежуточные впечатления от книги Петра Авена "Время Березовского"

Читаю сейчас книгу, которую написал бизнесмен Петр Авен. Книга называется "Время Березовского". Книга весьма объемная. С трудом добрался до середины.

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

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

Мне повезло и я бы воспитан в духе интернационализма. Поэтому я совершенно спокойно отношусь к представителям всех рас и национальностей. И антисемитом никогда не был. Но то количество апелляций к национальности еврей в книге даже для моего интернационализма является серьезнейшим испытанием. А уж для человека, который хотя бы слегка сочувствует антисемитам, книга может стать ярким доказательством того, что "ж*ды просрали Россию" (прошу простить мне мой французский). Профессиональные же антисемиты рискуют выйти на околоземную орбиту из-за подрыва пуканов.

вторник, 20 марта 2018 г.

[prog.c++] Как лучше добавить детализацию активности агентов в SObjectizer?

В SObjectizer уже довольно давно существует такая штука, как work thread activity tracking. Но этот механизм дает только самую общую информацию о том, сколько событий было обработано на конкретном диспетчере (точнее, на конкретной нити диспетчера), сколько времени это заняло, сколько раз приходилось ждать поступления событий и сколько времени это ожидание заняло. Механизм самый базовый. Но уже, при необходимости, помогающий посмотреть на то, куда и как тратится время в программе.

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

Важный момент. Интенсивность работы над этой задачей будет зависеть от того, какой интерес эта задача вызовет у публики. Если никто не заинтересуется, то мы ничего и не будем делать до тех пор, пока нам самим что-нибудь такое не потребуется. Ну а если, напротив, тема вызовет интерес, то мы выделим ресурсы на ее решение. Так что если вы ничего не скажете, то ничего и не получите, все просто ;)

суббота, 17 марта 2018 г.

[life.thoughts] Странные ощущения от чтения серьезных книг в последнее время

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

Любопытный эффект. Буквально ощущается, как накопленный опыт и текущий груз забот препятствует изучению нового.

[books.business] Впечатления от книги "Единственная книга по брендингу, которая вам нужна, чтобы начать, раскрутить и сделать бизнес прибыльным"

Уже не помню, когда и зачем купил книгу с названием "Единственная книга по брендингу, которая вам нужна, чтобы начать, раскрутить и сделать бизнес прибыльным" за авторством Мишеля Маандага и Лиисы Пуолакка, но добрался до нее только сейчас. И, скажу прямо, мало какая книга о бизнесе выбешивала меня так сильно, как эта.

Дело в том, что книгу написали два непонятных человека, один из которых консультант с якобы большим опытом в области глобального маркетинга, а вторая -- бывший дизайнер моды, которая в течении пяти лет возглавляла отдел, "отвечающий за глобальную идентичность бренда" в Nokia (и где та Nokia сейчас?). А сама книга представляет из себя альбом детских рисунков, с небольшими вкраплениями текста. Причем местами, видимо там, где авторы говорят о сфере своей профессиональной деятельности (например, в описании требований к логотипам), там все по делу. А вот там, где они пытаются говорить о рыночном позиционировании, продвижении новых товарных линеек под флагом старых брендов или даже про диверсификацию бизнеса... Вот там уже к авторам возникают вопросы. И ладно бы авторы вели повествование с оговорками "по нашему мнению" или "мы считаем разумным". Так нет, рекомендации из книги сомнению не подлежат. Яркий пример:

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

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

Вот так же и в этой книге. Пара маркеров, которые обратили на себя внимание и запомнились.

Про компанию Philips. Сперва авторы много перемывали косточки Philips на тему того, что компания продвигает разные продукты под общим брендом, а не создает отдельные бренды для бытовой электроники и, скажем, медицинского оборудования. Тут уже у авторов хочется спросить: "а какие у вас есть основания полагать, что Philips действует неправильно?" Может они какие-то финансовые отчеты изучали? Проводили маркетинговые исследования? Изучали динамику продаж определенной категории товаров под разными брендами? Это все риторические вопросы, понятное дело, что авторы книги ничего подобного не делали.

Но вот что откровенно выбесило, так это обсуждение слогана компаний. К слогану Philips-а, который звучит "Let's make things better" (или "Изменим жизнь к лучшему" в русском варианте), предъявили такую претензию: "Разве существующие продукты Philips недостаточно хороши?"

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

Второй же момент, еще более показательный, касался совета компаниям Canon и Nikon. В частности:

Аналогичным образом, когда произойдет окончательный переход от ставших уже привычными цифровых фотоаппаратов к смарт-камерам — например на операционной платформе Android, — это существенно затронет бизнес производителей традиционных цифровых камер — Canon и Nikon.

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

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

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