вторник, 30 марта 2021 г.

[life.music] Продолжение саги о выборе хороших, но недорогих наушников на Aliexpress. Мое отношение к "тёмным" наушникам

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

Светлые vs темные

Для тех, кто не читал поясняющий пост, кратенько про различие между "светлыми" и "темными" наушниками (или "светлой" и "темной" подачей).

четверг, 25 марта 2021 г.

[prog.c++] Мне кажется, что с SObjectizer-ом гораздо лучше видно где, когда и какие треды создаются внутри приложения

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

Так вот, постепенно пришел к выводу, что помимо прочего в SObjectizer гораздо лучше видно сколько и каких рабочих потоков (тредов) создается, где и когда это происходит.

В SObjectizer ты имеешь дело с агентами. Агенты сами никаких нитей (тредов) не запускают. Такими вещами занимаются диспетчеры.

А места создания новых диспетчеров и привязки агентов к диспетчерам в коде хорошо видны. Так что читая код практически сразу видишь, когда новая рабочая нить запускается.

Тогда как изучая код, использующий голую многопоточность, приходится обращать внимание на то, где появляются экземпляры std::thread (или какие-нибудь самодельные обертки над POSIX Threads). Зачастую такие экземпляры являются членами какого-то класса. Типа service_manager или session_listener. И стартуют/останавливаются рабочие нити в каких-то методах этих самых service_manager/session_listener/им-подобных-классов. Что не так-то и просто обнаружить. А обнаружив потом еще и держать в памяти: "О, вот этот объект запустил рабочую нить, а затем этот объект переходит в подчинение вот этому, а нить останавливается тогда, когда..."

В общем, привыкаешь к хорошему (это я про SObjectizer), расслабляешься, теряешь нюх на неприятности... :(

вторник, 23 марта 2021 г.

[life.music] Продолжение саги о выборе хороших, но недорогих наушников на Aliexpress. Пару слов о самом выборе

Во второй части попробую рассказать об аспектах, которые имеет смысл принимать во внимание при выборе наушников.

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

Какие-то аспекты (вроде съемного кабеля) наверняка будут лишь дополнительным фактором.

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

Поскольку вся эта серия посвящена закупке наушников на Aliexpress, то и картинки для иллюстраций я без зазрения совести утащил именно оттуда.

пятница, 19 марта 2021 г.

[prog.c++] Видео доклада Николая Гродзицкого про SObjectizer на виртуальном митапе Italian C++ Community

Мой коллега, Николай Гродзицкий, сделал доклад про SObjectizer на митапе Italian C++ Community. Видео этого доклада уже доступно на YouTube. Между прочим, знаменательное событие -- первый доклад про SObjectizer на английском языке на международную аудиторию.

Слайды доклада доступны здесь.


Думаю, что можно рассказать историю появления этого доклада. Где-то в январе в репозитории SObjectizer-а на GitHub-е начал создавать issues некто Марко Арена. Из его пояснений получалось, что он вынужден портировать под Linux софт, написанный на базе Microsoft PPL. И этот самый PPL ему нужно чем-то заменить, поэтому он пробует SObjectizer. В каком-то из issues я его попросил, мол, будет большая помощь проекту, если Марко поделится ссылкой на SObjectizer в своих соцсетях. На что он сказал что-то вроде: "Да не вопрос, но можно сделать и лучше. Я веду Italian C++ Community, мы раз в месяц проводим митапы с докладами на разные темы. Не хотите ли сделать у нас доклад про SObjectizer?" Мы, естественно, захотели.

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

четверг, 18 марта 2021 г.

[peopleware] Сколько людей -- столько и мнений

Вчера днем какой-то анонимный надмозг с LOR-а в очередной раз утверждал, что я делаю никому не нужные хелловорлды. Подозреваю, что он имел в виду именно SObjectizer и RESTinio.

Вчера же вечером, когда мой коллега, Коля Гродзицкий, читал доклад о SObjectizer-е на виртуальном митинге Italian C++ Community, Марко Арена, несколько месяцев назад самостоятельно нашедший SObjectizer и начавший его использовать для своих задач, сказал, что у SObjectizer-а одна из самых лучших Wiki, что доводилось видеть в OpenSource проектах.

PS. Если я правильно понимаю, то упомянутый мной Марко Арена портирует под Linux приложение, написанное на базе Microsoft-овской PPL. И как раз SObjectizer-ом он заменяет PPL.

воскресенье, 14 марта 2021 г.

[life.music] Введение в сагу о выборе недорогих, но хороших наушников на Aliexpress

Люди, которые подписаны на меня в FB, уже в курсе того, что я умудрился вписаться в странный эксперимент над собственным кошельком: назаказывал кучу разнообразных наушников с Aliexpress в попытке подобрать для себя те, которые будут устраивать меня по звучанию, но при покупке которых получится уложиться в лимит $25 на одну посылку.

Для тех же читателей, которые пока что не в курсе данной истории, расскажу что к чему и откуда растут ноги.

четверг, 11 марта 2021 г.

[prog.c++] Наглядно про "могу помочь вашей команде улучшить качество кода"

В связи с поиском подработок за последнее время мне несколько раз довелось отвечать на вопросы, суть которых сводилась к следующему: "а чем вы можете оказаться полезны нашей команде?"

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

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

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