суббота, 9 января 2021 г.

[prog.c++] Пару слов про позиционирование RESTinio и основные хотелки для RESTinio на 2021-й

Начало года отличное время для того, чтобы попытаться прикинуть планы на ближайшее (и не очень) будущее. Сегодня скажу пару слов про то, в каком направлении я вижу смысл развивать RESTinio.

ИМХО, уже пришла пора более точно определиться с позиционированием RESTinio в экосистеме C++. Это раньше RESTinio был молодой и мало кому известной разработкой. Сейчас же ситуация меняется, мы уже не молоды ;)

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

Мне представляется, что RESTinio уникален тем, что под одной крышей здесь собрано:

  • простота использования RESTinio для каких-то очевидных и понятных действий. Так, чтобы получить запрос и пройтись по списку HTTP-полей, не нужно выписывать вручную процедуры чтения данных из сокета;
  • гибкая настройка RESTinio под условия пользователя. Захотел пользователь применять Boost.Log для логирования? Нет проблем, RESTinio позволяет написать адаптер и RESTinio будет логировать свои действия с помощью этого адаптера. Или, например, захотел пользователь запускать вместе с RESTinio на io_context еще и какие-то свои сетевые операции... Опять же, нет проблем;
  • набор инструментов, которые позволяют применять RESTinio для каких-то нетривиальных сценариев. Например, средства работы с HTTP-заголовками используются в arataga даже для исходящих HTTP-запросов.

Что делает RESTinio хорошим выбором для ситуаций, когда разработчику нужно что-то сильно повыше уровнем, чем Boost.Beast, но при этом хочется иметь гораздо больший контроль за происходящим, чем в oat++ или cpp-httplib.

Отличный пример такой задачи, на мой взгляд, -- это прокси-сервер типа arataga. На Boost.Beast его делать будет слишком хлопотно. А oat++/cpp-httplib вряд ли дадут доступ к своим потрохам.

Именно в этом направлении, думаю, и стоит развивать RESTinio дальше.

Т.е., RESTinio должен быть выше уровнем, чем Boost.Beast, но ниже, чем oat++ и cpp-httplib. Но при этом средствами RESTinio продвинутый разработчик с небольшими усилиями должен уметь создать для себя что-то похожее на oat++/cpp-httplib, но заточенное под специфические требования конкретной прикладной задачи.

Или же, в более лаконичной форме:

RESTinio должен стать конструктором из продвинутых инструментов, отлично подогнанных друг к другу.

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


Теперь попробую обозначить несколько приоритетов в предполагаемом развитии RESTinio в 2021-ом году.

Во-первых, это замена http_parser на что-то другое. Конечно же, хочется иметь собственную реализацию, которая бы a) сделала RESTinio полностью header-only библиотекой, и b) поддерживала бы различные тонкие моменты в HTTP-протоколе (вроде chunk extensions). Если это не получится, то рассмотреть и внедрить какую-то готовую альтернативную реализацию (llhttp, picohttpparser, что-то еще).

Во-вторых, добавление режима работы в котором RESTinio не будет загружать весь запрос в память перед вызовом обработчика, а будет отдавать читаемые от клиента данные кусками по мере их поступления. Это позволит a) эффективно обрабатывать запросы с большим объемом входящих данных, и b) использовать RESTinio для сценариев, в которых сейчас RESTinio не может применяться в принципе (например, для разработки прокси-сервисов).

В-третьих, добавление поддержки http/2. Пока RESTinio жестко завязана на работу со всего лишь один протокол. От этого нужно уходить, т.к. рано или поздно, http/2 и http/3 вытеснят http/1.1. И если в 2021-ом получится изменить RESTinio так, чтобы в нем поддерживалось сразу два протокола, то это откроет отличную возможность добавить со временем еще и http/3, а может и еще что-нибудь.

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

По поводу поддержки в RESTinio клиента я могу лишь повторить то, что уже говорил раньше: без внешнего финансирования мы поднять такую задачу не сможем. Так что если кто-то готов вложить в RESTinio, минимально, 3.5K USD, то давайте всерьез обсудим такую возможность.


Если кого-то интересует перечень встраиваемых HTTP-серверов для C++, то выглядит он приблизительно так (перечисление в случайном порядке): RESTinio, Boost.Beast, cpp-httplib, http_backend, Pistache, RestBed, served, C++ REST SDK, proxygen, Simple-Web-Server, drogon, oat++

суббота, 2 января 2021 г.

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

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

Фильмы

Смертельные иллюзии (2020). Если кому-то хорошо зашли обе части "Иллюзии обмана", то смело можно и этот фильм посмотреть. Снято, по крайней мере, красиво и зрелищно.

Отряд Фокстрот (Foxtrot Six, 2019). Неожиданно бодренький, хотя и дешевый, околофантастический боевик из Индонезии. До "Рейда", конечно же, не дотягивает, но если хочется отключить мозги и посмотреть бескомпромиссное и динамичное рубилово-мочилово, то достойный вариант на нынешнем безрыбье.

Честный вор (Honest Thief, 2020). Все средненько и предсказуемо. Вполне можно и посмотреть, когда ничего лучше нет. Жалко только, что местами спецэффекты были сделаны совсем уж убого и дешево.

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

Новые мутанты (The New Mutants, 2020). Любители серии про "Людей Икс" могут глянуть, конечно. Но лучше не стоит, ничего хорошего в фильме нет, как по мне. А уж зачем туда притянули лесбийские отношения...

Ритм-секция (The Rhythm Section, 2020). Редкая дрянь несмотря на неплохих актеров в главной роли и, местами, отличную работу оператора. Смело можно не смотреть.

Гренландия (Greenland, 2020). Муть полная. Да и на удивление убогие и дешманские спецэффекты для фильма-катастрофы такого масштаба.

Сериалы

Смог полностью отсмотреть два сериала:

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

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

И еще два досмотреть не смог, осилив по 3-4 первые серии:

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

Эпидемия (первый сезон). Отличный визуальный ряд. Две первые серии весьма бодренькие и вселяющие надежду. Но уже с третьей серии все скатывается в какие-то непрерывные сопли и нудятину. Происходящее на экране вызывает вопросы из категории "Ну, ну чё за фигня?" А количество неожиданных роялей в кустах начинает зашкаливать. Так что после с трудом досмотренной четвертой серии просмотр сего творения был прекращен.


Отдельно нужно сказать про Рокетмен (Rocketman, 2019). Я так и не понял, что это было. То ли гениальная находка в виде встраивания песен Элтона Джона в нить повествования, то ли это был здоровенный гвоздь в крышку гроба. Одно могу сказать точно: если бы не эти самые песни Элтона, которые, как по мне, близки к гениальности и уже вошли в историю, смотреть было бы вообще нечего.


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

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

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

вторник, 29 декабря 2020 г.

[prog.c++] RESTinio-0.6.13: последний большой релиз в 2020-ом и, возможно, вообще последний в рамках ветки 0.6

Состоялся очередной релиз RESTinio: версия 0.6.13, в которой таки были реализованы идеи по выстраиванию обработчиков запросов в цепочки (по аналогии с ExpressJS-овскими middleware). Подробнее про новшества версии 0.6.13 я собираюсь рассказать в отдельной статье на Хабре. Кто не хочет ждать, тот может заглянуть в нашу документацию.

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

В пользу того, чтобы перестать развивать ветку 0.6 и начать делать новую 0.7 говорит несколько факторов (порядок их перечисления случаен):

  • в RESTinio уже накопилось несколько моментов, которые требуют переделки (какие-то из них прямо в коде помечены как FIXME). А эта переделка невозможна без слома текущего API;
  • до сих пор в RESTinio поддерживался только http/1.1. Думаю, чтобы двигаться дальше нужно добавлять в RESTinio и http/2, и http/3. А на такую мультпротокольность RESTinio не был расчитан. Непонятно, можно ли уместить поддержку мультипротокольности в существующую архитектуру и API RESTinio. Поэтому проще заниматься этим вопросом без оглядки на совместимость с предыдущими версиями RESTinio;
  • поддержка цепочек обработчиков, которая появилась в 0.6.13, распространяется только на синхронные обработчики. А хочется иметь такую же и для цепочек асинхронных обработчиков. Но придумать как это сделать в рамках версии 0.6 у меня не получилось. Есть смутная идея, но она требует изменения API;
  • сейчас RESTinio сперва полностью загружает в память входящий запрос и лишь затем вызывает обработчик для него. Хочется добавить режим работы, в котором RESTinio сможет отдавать входящий запрос на обработку частями, без предварительного накопления всего содержимого запроса;
  • один из важнейших факторов: лежащая в качестве базы RESTinio внешняя библиотека http-parser осталась без сопровождения. Поэтому в RESTinio парсер HTTP нужно заменить на что-то. Либо на другую готовую стороннюю библиотеку, либо на свой собственный велосипед. Такая замена существенно изменит список зависимостей для RESTinio, а это уже точно ведет к переходу к следующему номеру в версии.

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

Сколько времени это займет и когда можно ждать 0.7.0 не могу сказать. Вряд ли раньше весны 2021-го.

Соответственно, сейчас очень хороший момент, чтобы рассказать нам о том, чтобы вам хотелось видеть в RESTinio. Любые конструктивные замечания и предложения всячески приветствуются.

Сразу хочу сказать по поводу поддержки клиента в RESTinio. Без внешнего финансирования мы не сможем поднять эту тему. Так что если кто-то использует RESTinio на работе и хотел бы с помощью RESTinio обслуживать не только входящие, но и исходяще соединения, то рассмотрите, пожалуйста, возможность заказать такую доработку RESTinio у нас. Цена вопроса, думаю, будет где-то в районе 3.5-6k USD.


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

Если кто-то хочет помочь в развитии RESTinio, то на данный момент одним из самых больших подспорьев для нас является распространение информации о RESTinio. Каждое упоминание RESTinio в Интернете (Facebook, LinkedIn, Reddit-е, HackerNews, Twitter, Slack, Telegram и т.д.) поддерживает нашу мотивацию и желание развивать RESTinio дальше.

суббота, 12 декабря 2020 г.

[prog.c++] Думаю как добавить в RESTinio что-то похоже на middleware из Express.js

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

В общем, если кто-то интересуется развитием RESTinio, то милости прошу: https://github.com/Stiffstream/restinio/discussions/140

ЗЫ. За подобие английского прощу не бить, это лучшее, на что способны Google-Translate в паре с Grammarly в настоящее время ;)

среда, 2 декабря 2020 г.

[prog.c++] SObjectizer-5 десять лет! Мой субъективный взгляд на его прошлое и настоящее

В октябре 2010-го года начались работы над SObjectizer-5. Что означает, что SObjectizer-5 развивается уже десять лет.

Немаленький срок.

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

Вот о чем пойдет речь:

Подробности под катом (букв очень много)...

вторник, 1 декабря 2020 г.

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

Напоминание: вначале идут фильмы/сериалы, которые понравились больше, в конце же те, которые понравились меньше или вообще не понравились.

Бонусом в конце идет поток лучей понятно чего в адрес Нолановского "Довода".

Прекрасная эпоха (La Belle Époque, 2019). Отличное кино. Но, может быть, будет не так интересно для зрителей моложе 40 (не говоря уже про зрителей моложе 30).

День курка (Boss level, 2019). Бюджетная и камерная вариация на тему "Грани будущего" и "Дня сурка". Но бодренько. Так что мне зашло очень хорошо.

Легендарное ограбление (Vault, 2019). Своеобразно снят. И эта своеобразная манера съемки может кого-то оттолкнуть от просмотра. Сама история интересная, но как-то уныло рассказано. В общем, так себе кино. Но на безрыбье может и сойти.

Ребекка (Rebecca, 2020). Картинка отличная, просто услада для глаз. Визуально все сделано очень хорошо. Но вот за сюжетом следить было не интересно, сопереживания никто из героев не вызвал, сплошная скукота.


Отдельных слов заслуживает Довод (Tenet, 2020) Кристофера Нолана. Общее впечатление можно передать одной фразой: "Хочешь почувствовать себя идиотом? Посмотри "Довод"!"

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

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

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

Напоминание: вначале идут фильмы/сериалы, которые понравились больше, в конце же те, которые понравились меньше или вообще не понравились.

Фильмы

Афера века (El robo del siglo, 2020). Аргентинская картина, поэтому стилистика совершенно не похожа ни на европейское, ни на голливудское кино. Плюс интересная история. Так что посмотрел с удовольствием.

Прощай (Adiós, 2019). Испанская криминальная драма. Посмотрел с интересом. Странная вариация на тему социальной чернухи в стиле соцреализма, но с неизбежным хэппи-эндом.

Сериалы

Пацаны (The Boys, 2020). Второй сезон мне зашел даже лучше, чем первый. Местами ронял челюсть на пол от восторга. И, в отличии от первого сезона, здесь они поставили хорошую точку в конце истории. Естественно, с толстым намеком на продолжение, но сюжетную линию, начатую в первом сезоне, довели до логического итога, а не оборвали где-то посередине, за что авторам отдельное спасибо.

Банды Лондона (Gangs of London, 2020). Первый сезон. За жесть, кровь и кишки твердая пятерка. А вот сюжет, поведение неврастенических персонажей и мотивацию героев... Как будто все это сделали по остаточному принципу в довесок к экшену.

Тайная власть (Deep State, 2018). Посмотрел первый сезон. Смотреть было интересно и хотелось узнать, чем же все закончится, но после завершения сезона осталось ощущение, что в сюжете что-то не так. Как будто причинно-следственные связи между событиями были прописаны в сценарии абы как, а то, что было прописано, было притянуто за уши.