пятница, 21 июня 2019 г.

[prog.c++] В склерозник: список встраиваемых HTTP-серверов для C++

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

  • RESTinio. Это наша разработка, в которую наша маленькая команда продолжает вкладывать силы и душу. Соответственно, номер один в списке претендентов. Если вам чего-то не хватает в RESTinio или что-то не нравится, то с нами всегда можно договориться ;)
  • Silicon Framework;
  • Pistache;
  • RestBed. Продвинутый. Но, насколько я помню, был одним из самых тормозных. Плюс он идет под двойной лицензией. Т.е. либо за деньги, либо GPL;
  • served;
  • C++REST SDK. Разработка от самого Microsoft-а. Не знаю, как сейчас, но раньше не отличалась хорошей производительностью под Linux-ами;
  • proxygen от Facebook-а. Традиционно ориентируется на мир Linux-ов, насколько юзабелен за его пределами (тем более под Windows) -- без понятия;
  • Simple-Web-Server (раньше жил на GitHub-е);
  • drogon;
  • CROW. Пожалуй один из самых распиаренных фреймворков такого рода для C++. Но который, вероятно, уже давно приказал долго жить и не развивается с декабря 2017-го.

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

четверг, 20 июня 2019 г.

[prog] Статья на Хабре не про акторы, но в которой можно увидеть хороший пример использования акторов

Вот эта статья от Яндекса на Хабре: "Архитектура сервиса распределённых очередей сообщений в Яндекс.Облаке". И картинка оттуда, демонстрирующая наличие акторов:

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

№1:

YMQ Actor system – акторная система. В ней одновременно запущены тысячи различных акторов, обменивающихся информацией. Акторная система каждого хоста — это часть кластера. Все акторы кластера живут и действуют как единое целое. Бизнес-логика YMQ реализована в различных акторах, осуществляющих запросы-транзакции к YDB.

№2:

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

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

И, как по мне, сама по себе задача разработки системы, вроде YMQ, является отличным примером ниши, для которой могут применяться инструменты вроде Akka, SObjectizer, CAF, Actix и пр. По крайней мере наверняка могу сказать, что заложенные в SObjectizer проектные решения (вроде использования динамической памяти и исключений) не будут стоп-фактором для использования SObjectizer-а в разработке подобного проекта. В отличии от проектов, связанных с настоящими системами жесткого реального времени.

Другой вопрос, нужно ли такого рода системы разрабатывать на C++.

Ну а почему бы и нет? Вообще, список подходящих кандидатов окажется небольшой: Java (или альтернативы для JVM, вроде Scala, Kotlin, Ceylon), C#, C++ и Rust. Можно, конечно, взять в рассмотрение еще и чистый C, а так же Go. Но, имхо, стартовать сейчас что-либо на чистом C за пределами системной Linux-овой хардкорщины -- это крайняя степень изощренного мазохизма. Тогда как Go, опять же имхо, не очень хорош для разработки больших и долгоживущих проектов (просто в силу убогости заложенных в этот язык выразительных возможностей).

Так что, по сути, имеем список из Java, C#, С++ и Rust. При этом и у C++, и у Rust-а есть то преимущество, что в погоне за максимальной производительностью можно без проблем опускаться на сколь угодно низкий уровень.

Вот и получается, что есть резоны как для выбора C++, так и для отказа от C++. Посему почему бы и нет?

PS. Динамику, вроде Erlang-а, я не рассматривал. Ибо делать большие системы на динамике -- это другая крайняя степень мазохизма, имхо. Но, наверняка, Erlang или какой-нибудь Elixir можно будет использовать в разработке такого рода системы. Тут вопрос лишь в итоговой ее стоимости. Впрочем, как и в случае C++.

среда, 19 июня 2019 г.

[prog.c++] Послесловие к релизу RESTinio 0.5.1

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

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

Если же новые хотелки озвучиваться не будут, то RESTinio будет оставаться в своем текущем состоянии.

Я бы даже развил эту мысль. Текущие версии наших проектов, будь то RESTinio, SObjectizer/so5extra или json_dto, имеет смысл рассматривать как инструментарий в, скажем так, базовой комплектации. Не факт, что эта базовая комплектация хорошо подходит для ваших условий. И, если подходит не очень хорошо (либо вы думаете, что подходит не очень хорошо), то вы можете обсудить ситуацию с нами. Есть далеко не нулевая вероятность, что наши инструменты смогут быть доработаны так, чтобы удовлетворять вашим требованиям.

вторник, 18 июня 2019 г.

[life.music] Немного гитарной музыки с YouTube

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

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

А с недавних пор в меня стала заходить и акустическая гитара, в частности под соусом "фингерстайла". И, вместе с ней, испанская гитара. Классическая гитара (как и изрядная часть классической музыки) остается сильно в стороне и, практически, не трогает. Хотя современные и не очень вещи, переработанные под исполнение на классической гитаре, мне нравятся (для примера: "My Way" и, конечно же, "The Entertainer"). Но, наверное, это просто разновидность все того же "фингерстайла", только на классике, а не на акустике.

Так вот, в результате просмотра клипов некоторых известных (и не очень) фингерстайл-гитаристов в рекомендациях YouTube мне попались вот эти два сборника:

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

Попутно нашел еще вот какой канал на YouTube: Tunc Er. Там лежит несколько сборников испанской музыки. Ну т.е. фламенко и все такое. Как в виде чистой гитары, так и "с оркестром". Но, что мне особенно понравилось, практически без вокала. Поскольку зачастую фламенко с вокалом наводит меня на мысли вроде "почему никто не застрелит того кота, который так истошно вопит?" Сорри за неполиткорреткность, но говорю как есть ;)

PS. Маленькое наблюдение после прослушивания/просмотра полутора десятков подобных сборников на YouTube: если в описании к ролику нет списка композиций с таймингами, то сборник, скорее всего будет корявый. Вплоть до того, что одни и те же композиции там могут повторяться несколько раз.