вторник, 1 января 2030 г.

О блоге

Более двадцати лет я занимался разработкой ПО, в основном как программист и тим-лид, а в 2012-2014гг как руководитель департамента разработки и внедрения ПО в компании Интервэйл (подробнее на LinkedIn). В настоящее время занимаюсь развитием компании по разработке ПО stiffstream, в которой являюсь одним из соучредителей. Поэтому в моем блоге много заметок о работе, в частности о программировании и компьютерах, а так же об управлении.

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

понедельник, 31 декабря 2029 г.

[life.photo] Характерный портрет: вы и ваш мир моими глазами. Безвозмездно :)

Вы художник? Бармен или музыкант? Или, может быть, коллекционер? Плотник или столяр? Кузнец или слесарь? Владеете маленьким магазинчиком или управляете большим производством? Реставрируете старинные часы или просто починяете примус? Всю жизнь занимаетесь своим любимым делом и хотели бы иметь фото на память?

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

среда, 13 октября 2021 г.

[sadness] С некоторым сожалением о старых-добрых временах LOR-а и RSDN-а

Угораздило ввязаться в Хабросрач под статьей о грядущем C++23. Теперь сожалею о времени, потраченном на это. Наверное, часов шесть, если не больше, убито без толку.

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

Плюс еще и нахватал минусов на комментариях. Хорошо, что у меня есть некий запас кармы от статей, так что возможность полноценно присутствовать на Хабре сохранилась, а то ведь можно было и в read-only улететь. Просто за то, что почему-то решил, что имеешь право собственное мнение высказывать.

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

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

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

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

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

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

Кстати говоря, на RSDN-е с минусовыми оценками было лучше -- там видно, кто именно минусует. И, когда тебя минусуют одни и те же персонажи, то тебе легче разобраться -- откровенную ли муть ты несешь искренне ли заблуждаешься или же это просто личное.

Сейчас Хабр популярный ресурс, на котором можно публиковать статьи на разные темы, чем мы уже с успехом пользовались. Подозреваю, что не только мы. Посему жаль, что Хабр сохраняет свою кармическую систему. По факту, там в комментариях точно такое же меряние пиписьками и обзывание "сам дурак", но только прикрытое чуть более толстым покрывалом "приличий", чем на RSDN или LOR-е. С перспективами превратиться в такой же отстойник, как и LOR.

среда, 6 октября 2021 г.

[prog.c++] Хотелось бы увидеть в мире C++ сценарий Kotlin/Ceylon из мира Java

На вынесенную в заголовок тему заставила задуматься статья: С++23 — feature freeze близко. Несколько моих комментариев к ней и к сопутствующим материалам в FB: раз, два, три.

Есть ощущение, что С++ уже не просто подошел к пределу моих умственных способностей, но и сильно их превзошел. Подозреваю, что моих мозгов не хватит, чтобы освоить C++20 и C++23 на более-менее приличном (для себя) уровне.

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

Невольно задумаешься о том, а как должны были бы развиваться события, чтобы появилась какая-то надежда на горизонте?

Сейчас я бы присмотрелся к сценариям, которые в мире Java пытаются претворить в жизнь Scala, Ceylon и Kotlin. Т.е. на базе уже существующей экосистемы создать инструмент, который бы был удобнее Java, но позволял бы использовать то, что в Java уже есть.

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

Грубо говоря, какая-то спроектированная на современном уроне Vala, которая бы, в примитивном сценарии, просто транслировалась в C++ный код (например, на C++17) и компилировалась бы далее обычным C++ным компилятором. И из которой можно было бы использовать C++ные библиотеки напрямую, без необходимости писать какие-то обертки (ну или с минимальными усилиями по написанию таких оберток).

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

Не знаю, насколько такой сценарий реален. Но он, как мне думается, дает возможность и продолжить использовать уже накопленный C++ный код, и писать новый код на более простом в изучении и использовании языке (возможно, даже более безопасном). И при таком развитии событий даже не сильно умные люди, вроде меня, могли бы нормально пользоваться привычными инструментами.

пятница, 1 октября 2021 г.

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

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

Главный герой (Free Guy, 2021). Бодренько и задорно. Но шаблонно и как-то по детски.

Бык (2019). К достоинствам фильма можно отнести то, что там очень хорошо передана атмосфера середины 1990-х и то, что авторы не сделали хэппи-энд в розовых соплях. Сам же сюжет, имхо, вторичен и следить там особо не за чем. Смотреть этот фильм можно, например, если о "святых 1990-х" почему-то остались радужные воспоминания.

Кейт (Kate, 2021). Еще одна попытка снять "Джона Уика в юбке". Наверное, пока что наиболее динамичная. Но все равно в происходящее не верится от слова совсем.

Исчезнувший (My Son, 2021). Мне не зашло. Первая половина фильма нудная и унылая, финал невнятный. Посмотреть можно разве что если больше вообще смотреть нечего.

Виновный (The Guilty, 2021). Вторичная и, прямо скажем, никакая копия датской картины 2017. Если видели оригинал, то на копию можно не тратить время. Если не видели, то, имхо, лучше посмотреть исходный вариант.


Отдельно по поводу новой "Дюны" Вильнева. Не смотрел. Пока не планирую. Во-первых, не фанат литературного первоисточника. Во-вторых, эта "Дюна" рассказывает только начало истории. Потратить 2.5 часа на то, чтобы посмотреть завязку, а потом ждать продолжения не пойми сколько времени... Ну как-то странно это. Так что либо дождусь, пока фильм появится в подписках IVI или Kinopoisk.HD, либо же вообще буду ждать выхода продолжения.

вторник, 28 сентября 2021 г.

[prog.philosophy] Показанный в предыдущем посте код пришлось усложнить еще больше

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

воскресенье, 19 сентября 2021 г.

[prog.philosophy] Пример того, как я "усложняю" код на ровном месте. И пояснение почему так делаю

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

Преамбула

Суть в том, что при написании кода есть отдельный класс ошибок, вызванных невнимательностью. Ну, например, в POSIX есть функция pipe, которая создает анонимный пайп. В качестве параметра в эту функцию передается указатель на массив из двух int-ов. В случае успеха в этот массив будет помещено два хэндла: первый для чтения из пайпа, второй для записи в пайп.

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

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

int x = ...;
int cx = ...;
int y = ...;
int cy = ...;
define_rect(x, cx, y, cy);

Корректен ли вызов define_rect? Может быть он должен был быть записан как:

int x = ...;
int cx = ...;
int y = ...;
int cy = ...;
define_rect(x, y, cx, cy);

?