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

О блоге

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

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

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

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

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

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

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

[prog.rust.flame] "Говорил я вам. Не прислушались. Так и получилось. Как говорил я вам..."

На выходных, лениво пожевывая попкорн почитывал срачик на Habr-е, в котором светлые рыцари ордена safe Rust-а громко доказывали, что писать код так, как сделал автор Actix-Web, ни в коем случае нельзя. Занимательное чтиво, аж душа пела.

Пела потому, что когда лет 5-6 назад первые упоротые в своей воинственности Rust-оманы начали бегать по профильным форумам и убеждать всех тех, кому Rust вообще не был интересен, что Rust -- это самое лучше, что произошло с софтостроением после изобретения перфокарт, некоторые скептически настроенные старпёры сердито ворчали: "Ну подождите пару-тройку лет, в этот ваш Rust обязательно придут люди, которые начнут использовать unsafe, скажем так, весьма творчески. Вот тогда и посмотрим, насколько Rust окажется safe в реальной-то жизни".

Ну вот и дождались.

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

Просто одно дело, когда ты в свободное время пишешь pet project на своем любимом языке для души. Совсем другое -- когда у тебя есть жесткие цели, сроки, бюджеты, конкретные люди со своими проблемами и куча других факторов, которые и отличают настоящую разработку от экспериментов с перспективной технологией. Вот автор Actix-Web-а столкнулся с задачей выжать из своего Web-сервера максимум производительсти и был вынужден прибегнуть к unsafe. И это еще был весьма квалифицированный и мотивированный разработчик. Что уж говорить об писателях индусокода (всех национальностей), которые неизбежно будут пихать unsafe в код, потому что дедлайн, а времени ублажать компилятор нету.

PS. А для всех свято верующих в то, что в реальной жизни unsafe в Rust будут использовать исключительно правильно, а прецидент Actix-Web-а -- это досадное исключение, ВИА "Громыка" исполняет свой незабвенный шлягер, строчка из которого была вынесена в заголовок заметки.

суббота, 18 января 2020 г.

[prog.open-source] Автор Rust-ового фреймворка Actix-Web: "I am done with open source."

На HackerNews разгорелся один из самых больших срачей, который попадался мне там на глаза: A Sad Day for Rust (steveklabnik.com). Этот срач посвящен блог-посту "A sad day for Rust" (как я понимаю, за авторством кого-то из именитых Rust-евангелистов). В свою очередь этот блог-пост посвящен эмоциональному решению автора Rust-ового фреймворка Actix-Web закрыть свой проект. На GitHub-е по адресу https://github.com/actix/actix-web сейчас размешен только относительно небольшой README-файл, озаглавленный как "Actix project postmortem".

В "Actix project postmorten" автор пишет о том, как он задолбался бороться с борцунами с unsafe. Что работа над Actix-Web перестала приносить удовольствие. И что он решил послать все и всех куда подальше:

It’s been three years since I started actix project (time flies). I learnt a lot, i meet new people, I found language that I really like and want to use it fulltime, I found fun job. But damage to the project's reputation is done and I don’t think it is possible to recover. Actix always will be “shit full of UB” and “benchmark cheater”. (Btw, with tfb benchmark I just wanted to push rust to the limits, I wanted it to be on the top, I didn’t want to push other rust frameworks down.) Everything started with actix, then actix-web and then actix-net. It took a lot of time to design api and architecture. Each of this projects was rewritten from scratch at least 4-5 time. I hope I expanded some boundaries and found few new patterns, I hope other developers will check source code and find inspiration to move even further. Nowadays supporting actix project is not fun, and be part of rust community is not fun as well.

I am done with open source.

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

Любой проект может сдохнуть в любой момент.

Итак, первое впечатление, как это ни странно -- это вспомнившаяся откуда-то "мудрость": если долго сидеть на берегу, то можно увидеть, как мимо проплывает труп твоего врага. Так уж вышло, что мы так же пилим свой "типа Web-фреймворк", но для C++. Поэтому в какой-то мере RESTinio и Actix-Web конкуренты. В небольшой степени, но все-таки.

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

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

Поэтому, собственно, нет никаких гарантий того, что наши разработки будут развиваться и дальше. Жизнь она такая: раз и все. Сегодня есть, завтра уже нет ничего. Сегодня мы увидели проплывающий мимо Actix-Web, завтра, может быть, кто-то увидит проплывающий мимо наш труп.

Се ля ви. Ничего не поделаешь.

Все вокруг все знают гораздо лучше тебя...

Есть старый анекдот: у армянского радио спрашивают "Можно ли изнасиловать женщину в толпе?" и армянское радио отвечает: "Нет, толпа замучает советами". Очень точная характеристика того, что происходит в этих наших интернетиках когда какой-то проект демонстрируется широкой публике. Сколько всезнающих горлопанов прибегает рассказать все, что думает и о твоем проекте, и о тебе лично, что только диву даешься.

Собственно, то что эмоционально рассказал в "Actix project postmortem" Николай Ким -- это оно и есть. В чистом виде.

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

Rust-сообщество зачастую напоминает стадо упоротых разрушителей старого мира во имя новой религии, имя которой "safe во все поля".

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

Причем отдельным фетишем для упоротых Rust-оманов является safe. Который должен быть во все поля.

А если safe во все поля нет, то это ай-ай-ай, это все старый мир, который должен быть до основания... И далее по тексту.

Просто иначе я не могу себе представить причин происхождения тех волн агрессии на Actix-Web от сторонников safe Rust. Ну реально: вот есть проект, он сделан, он работает, он показывает крутые результаты. Ну есть там unsafe. Ну так не просто же так он там оказался. Да и если проект работает, покрыт тестами, новый функционал добавляется, баги правятся, так не все ли равно, есть там unsafe внутри или нет? Вам шашечки или ехать, в конце-концов?

Но вот оказывается, что шашечки важнее. <img src="СергейЛавров.jpg">

Так за чей счет сей банкет?

И, пожалуй, главное впечатление -- это актуальность моих недавних заметок про OpenSource и заработок на OpenSource (раз и два).

Отлично понимаю вот эти слова Николая Кима в его "Actix project postmortem": "Seems everyone believes there is large team behind actix with unlimited time and budget."

Как мне представляется, сейчас к OpenSource сложилось исключительно потребительское отношение. Т.е. все привыкли к тому, что используемые ими инструменты должны быть открыты. И не просто открыты, но и бесплаты. Более того, начинают звучать голоса, которые говорят о том, что пермиссивные лицензии, которые требуют указания факта использования OpenSource проекта (как это обязывает делать, например, BSD-3-CLAUSE лицензия), не есть хорошо. Что следует использовать лицензии типа Boost Software License, которые позволяют задействовать открытый проект и даже не упоминать об этом...

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

ИМХО, это ненормальная ситуация. Могу предположить, что чем дальше она будет развиваться, тем чаще будут происходить случаи, когда даже большие и знаковые для каких-то сообществ проекты будут внезапно умирать. Просто потому, что их авторам нужно на что-то жить, обеспечивать свои семьи, давать образование своим детям, помогать своим родителям и т.д., и т.п. А моральное удовлетворение от решения сложных задач и удовольствие от того, что твою OpenSource-разработку использовали там-то, там-то и еще вот там-то, как оказывается, в деньги не конвертируется...

Так что за словами "I am done with open source.", как по мне, скрыт очень и очень большой смысл.

среда, 15 января 2020 г.

[prog.c++] Как много одна простая строчка может рассказать об эволюции С++

Вот в этой строке с декларацией простейшего метода:

[[nodiscard]] bool empty() const noexcept;

можно отследить насколько много C++ вобрал в себя за время своей эволюции:

  • изначально, насколько я помню, в C++ не было контантности для методов, она была добавлена уже после публичного релиза C++ в 1985-ом году. И очень выгодно отличала C++ времен 1990-х годов от первых версий Java (да и от последующих тоже);
  • специальный булевский тип bool, которого так же изначально не было, но который был добавлен на основании опыта хождения по доставшимся в наследство граблям языка Си;
  • noexcept как результат эволюции отношения к исключениям. Не то, чтобы это был уже тот результат, который хотелось бы. Но уже сильно лучше, чем выпиленный, к счастью спецификатор throw();
  • аттрибут nodiscard. Во-первых, просто само понятие аттрибута, чего на протяжении многих лет в C++ не было. Но которое появилось под влиянием опыта других языков программирования. И, во-вторых, собственно nodiscard, т.е. явное указание того, что возвращаемое значение нельзя просто так проигнорировать. Опять же, на основании опыта хождения по граблям.

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

Если дать себе время остановиться и порефлексировать на эту тему, то это внушаить :)

суббота, 4 января 2020 г.

[prog.c++] В SObjectizer-овском select() появляется send_case()

В черновой ветке SObjectizer-а появилась возможность делать select() не только для чтения входящих сообщений из нескольких каналов, но и для отсылки сообщений в канал. Так что совсем скоро SObjectizer-овский select() станет еще более близок к Go-шному. Естественно, с поправкой на то, что в SObjectizer-е все это сделано средствами библиотеки, а не вшито в язык намертво с оптимально причесанным под это дело синтаксисом.

Под катом традиционный для демонстрации Go-шного select-а пример: вычисление чисел Фибоначчи в отдельном потоке и отсылка их в канал. Отсылка автоматически приостанавливается, если в канале нет места. Так же вычисление прекращается, если из второго канала вычитали сообщение на завершение работы. Или если какой-то из каналов принудительно закрыли.

Примечательна история появления send_case для SObjectizer-овского select-а.

Сам select() в SObjectizer-е появился чуть менее четырех лет назад, в марте 2016-го. После чего я пытался сделать несколько подходов к реализации в select-е не только receive_case, но и send_case. Но каждый раз эти подходы завершались неудачей из-за отсутствия хороших идей по интеграции send_case в уже имеющуюся реализацию select-а.

За пару недель перед Новым Годом начался очередной, можно сказать, дежурный подход, в начале которого было полторы или две недели безрезультатного выкуривания бамбука. Пока, наконец, не пришло некоторое понимание и того, что хочется вложить в send_case, и того, как это поместить в уже имеющуюся схему работы select-а. После чего потребовалось буквально пара дней, чтобы реализовать это все. Тот самый случай, когда идея реально должна была вызреть и, кроме того, должны были сойтись звезды, чтобы появилась возможность качественно "подойти к снаряду".

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

четверг, 2 января 2020 г.

[life.sport.darts] Послесловие к завершившемуся PDC-шному Чемпионату Мира 2020. И еще пару слов про дартс

Завершился Чемпионат Мира 2020-го года по дартсу, проводившийся организацией PDC. Победу в финале над Майклом ван Гервеном одержал Питер Райт. Что меня порадовало вдвойне, т.к. за Райта я болеюю последние несколько лет.

Подробнее про значимость победы Райта я написал по горячим следам в Facebook-е. Здесь же хочется поделиться общими впечатлениями от прошедшего чемпионата. И немного поговорить о дартсе вообще, т.к. есть значимый повод для этого.

Много новых имен

Итак, главное впечатление от этого чемпионата (если не считать исторической, на мой взгляд, победы Райта) -- это четкое осознание того, что в ТОП-е мирового дартса происходит серьезная смена состава. Из тех ТОП-овых игроков, за которыми я следил и от игры которых пытался что-то брать в 2010-2012-х годах, остались считанные имена. Да и из тех, кто остался, далеко не все показывают игру достаточно хорошего уровня, чтобы претендовать на высокие места.

Карьера хорошего игрока в дартс может длится десятилетиями. На прошедшем ЧМ 2020 это можно было видеть на примере Стива Битона, которому сейчас 55 лет, а свою победу на BDO-шном ЧМ он одержал в далеком 1996-ом году. Но не смотря на то, что в дартс на высоком уровне можно играть и в 40, и в 50 лет, все-таки состав претендентов на победу за последние годы сильно обновился. Что хорошо для дартса. Что так же означает, что я сам слежу за дартсом уже настолько долго, что помню не только игроков, которые блистали 10 лет назад (Терри Дженкинс, например), но и тех, кто лет 6-7 назад вихрем ворвался в элиту дартса, ярко промелькнул на нескольких турнирах, а теперь лищь изредка заявляет от себе (Ким Хайбрехт и Стивен Бантинг вспоминаются в первую очередь).

Неожиданные прорывы

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

Наверное, в порядке вежливости, сперва нужно сказать о двух победах Фэллон Шеррок. Женщины вообще редко попадают на PDC-шный Чемпионат Мира. И раньше они никогда не проходили дальше первого тура. На ЧМ 2020 произошла настоящая сенсация: мало того, что Фэллон Шеррок выиграла в первом туре и прошла во второй, так она еще и во втором туре выиграла. И не у кого-то там, а у Менсура Сулловича, одного из тех, кто был в десятке потенциальных претендентов на звание чемпиона. Да и в третьем туре она смогла изрядно напрячь Криса Дабби, так что я бы не удивился, если бы Фэллон прошла и в четвертый тур. В общем, удивительно было наблюдать за игрой женщины против мужчин, да еще и показывающей средний набор в 90+ очков.

И, конечно же, нельзя не сказать о том, что Дариус Лабанаускас из Литвы сумел дойти до четвертьфинала, где его путь был остановлен не кем нибудь, а самим Майклом ван Гервеном. Проигрыш 2-5 в 1/4 финала ван Гервену -- это очень и очень достойно. И, мне показалось, что Дариусу помешал недосток опыта выступлений на таком высоком уровне и на арене с таким большим количеством зрителей. Было бы опыта чуть-чуть побольше, ван Гервену пришлось бы приложить значительно больше усилий. А так досадные промахи по удвоениям из-за волнения позволили выиграть ван Гервену с комфортным преимуществом в три сета. Тем не менее, у меня лично осталось ощущение, что прорыв Дариуса не случаен, поэтому буду ждать от нее еще более яркой игры в будущем.

Игра Эдриана Льюиса

Сильное впечатление на меня произвели две первые игры Эдриана Льюиса на этом ЧМ (третью я не смог посмотреть). Было ощущение, что Льюис сражается не за победу, а за свою жизнь.

Попробую объяснить почему мне так показалось.

Дело в том, что несколько лет назад Льюис был одним из самых талантливых и многообещающих игроков в PDC. Благодаря своему таланту он не только стал двухкратным чемпионом мира, но и выиграл ЧМ два раза подряд (что вообще-то мало кому удается). Но затем в его игре наступил спад, из которого Льюис не может выбраться до сих пор.

Наблюдая за игрой Льюиса на этом ЧМ у меня появилась версия, почему Эдриан не может вернуться на свой прошлый уровень. Мне думается, что это связано с техникой броска и манерой игры. Льюис очень быстро играет, бросает практически не целясь. И при такой манере игры чрезвычайно важна собственная уверенность в том, что ты попадешь. Вот в прошлом Льюис играл зная, что он не может промахнуться. А сейчас он играет зная, что он может промахнуться.

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

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

И мне бы хотелось, чтобы Льюис справился с тараканами в своей голове. Но, боюсь, для этого нужно, чтобы в жизни Эдриана произошло какое-то серьезное проишествие, которое заставит его пересмотреть свое отношение к дартсу. Поэтому я уже не сильно верю в возраждение Льюиса как ТОП-ового игрока. Хотя и буду очень рад ошибиться. Чем больше у ван Гервена сильных конкурентов, тем интереснее.

10 лет назад...

В начале 2010-го года на Евроспорте случайно наткнулся на трансляции BDO-шного Чемпионата Мира по дартсу. И с этого, по сути, началось мое приобщение к дартсу.

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

Это было интересно и неверно круто. Дартс помог лучше понять самого себя и справиться с одной из волн кризиса среднего возраста. В дарсе удалось понять, чем спорт отличается от физкультуры. Чем спорт отличается от простого увлечения. Да и почуствовать себя спортсменом в 40 лет -- это было, мягко говоря, неожиданно.

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

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

Так, что, наверное, все это было не зря. Особенно с учетом тех замечательных людей, с которыми меня познакомил дартс.

Вместо послесловия

А закончу я традиционно:

  • тем, кто еще не пробовал играть в дартс: играйте, это здорово!
  • тем, кто уже играет в дартс: больших наборов и быстрых закрытий!