пятница, 3 декабря 2021 г.

[work.business] Нежданная засада с оценкой затраченного времени

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

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

Работали мы по схеме time-and-material, т.е. выставляли счета заказчикам исходя из затраченного нами времени. И с подсчетом этого самого затраченного времени проблем не было как раз из-за работы в режиме "отсюда и до..."

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

Но вот в текущем заказном проекте (в котором мы также работаем по схеме time-and-material) недавно возникла ситуация, с которой мы пока еще не сталкивались. Потребовалось именно что родить идею.

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

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

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

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

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

В итоге, на рождение идеи было затрачено чуть больше недели календарного времени. Фактического времени было залогировано 12 часов. На то, чтобы зафиксировать получившееся в тексте и затем дать заказчику необходимые разъяснения ушло 5 часов (все это в течении одного рабочего дня).

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

Фиксировать только время, которое было затрачено на сидение с блокнотиком -- это явная работа себе в убыток. С другой стороны, логировать по 7 или 8 часов в такие дни совесть не позволяет, ведь большую часть этого времени я, фактически, бил баклуши и гонял своих собственных тараканов. Да и не хочется провоцировать вопросы со стороны заказчика о том, неужели несколько страничек сумбурного текста потребовали 40 рабочих часов подготовки...

Вот впервые оказались в такой ситуации. Есть о чем подумать.

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

PS. Раз уж пошла такая пьянка, поделюсь еще одним наблюдением. По нашему опыту выходит, что даже когда по заказному проекту идет плотная работа с минимумом задержек и отвлечений, все равно выходит где-то по 110-120 часов на человека в месяц. Максимум. Остальное время либо мы на что-то вынуждены отвлекаться, либо заказчик что-то не предоставил, либо ждем какого-то подтверждения/согласования или доступности чего-то/кого-то, либо еще что-то (типа болезни, мелких форсмажоров и т.п.). Из этого следует то, что нельзя подходить к расчету предполагаемой выручки по формуле Rh*160 (где Rh -- это почасовой рейт), в реальности выйдет, в лучшем случае, Rh*120.

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

среда, 1 декабря 2021 г.

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

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

Фильмы

Красное уведомление (Red Notice, 2021). Отличный развлекательный аттракцион, в котором смешались "Телохранитель жены киллера", "Индиана Джонс", "Сокровища нации" и даже знаменитая белка из "Ледникового периода". Но ни в коем случае не следует искать в этом кино чего-либо серьезного, это чистой воды развлечение.

Финч (Finch, 2021). Неплохо сделанный и, в общем-то, прикольный фильмец. Но очень уж прямолинейный, предсказуемый, затянутый и, поэтому, унылый.

Небо (2020). Красиво снято. Но саму по себе историю рассказали настолько плоско и неинтересно, что прямо обидно. Да и количество пафоса зашкаливает ну совсем уж неприлично. А вот увидеть в эпизодической роли Владимира Онокоя было неожиданно :)

Веном 2 (Venom: Let There Be Carnage, 2021). По сравнению с первой частью сделано откровенно халтурно. Если первый фильм зашел, то можно и вторую часть глянуть, но без ожиданий чего-то стоящего.

Шан-Чи и легенда десяти колец (Shang-Chi and the Legend of the Ten Rings, 2021). Очередное кино про очередной кусочек вселенной Marvel. Может быть интересен тем, кому нравятся фильмы по комиксам от Marvel, да еще и сдобренные восточными единоборствами. В принципе, можно и посмотреть, благо юмор в фильме не позволяет воспринимать его всерьез.

Армия воров (Army of Thieves, 2021). Красиво снятая фигня.

Амнезия (Awake, 2019). Нудная и затянутая муть.

Сериал

Основание (Foundation, 2021, первый сезон). Ну очень красиво и качественно снято. Местами прям казалось, что в сериале графон сильно получше, чем в некоторых нынешних "блокбастерах". И по началу даже более-менее неплохо заходил. Была слабая надежда, что авторы попытаются удержаться в рамках научной фантастики. Но нет, без суперспособностей (предсказания, околопророческие видения) у ключевых героев все равно не смогли обойтись. Поэтому досматривал только чтобы посмотреть, закончат ли первый сезон на каком-то логическом финале (или хотя бы полуфинале).


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

Завершающий фильм бондианы с Крейгом. Боюсь, это самый слабый фильм про Бонда за последние лет 20-25. По впечатлениям, так вообще как будто смотришь что-то из бондианы времен 1970-х годов. Ну и главный вопрос: неужели владельцы бондианы зарезали курицу, которая несла им золотые яйца? А если нет, то как они собираются выруливать после смерти своего главного героя?

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

вторник, 23 ноября 2021 г.

[prog.c++] Небольшое обновление RESTinio с исправлением проблемы под C++20

Мы тут выкатили очередной релиз RESTinio. Ничего серьезного, но исправлена проблема при использовании RESTinio и fmt-8.0.1 под C++20. Так что теперь RESTinio может спокойно применяться и в C++20, хотя все еще остается проектом C++14.

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

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

В этом плане даже такой мелкий релиз лично для меня уже оказывается знаковым. Таки живем, таки творим (как бы высокопарно это не звучало).

Боюсь загадывать, но может быть какие-то небольшие обновления получится сделать и для SObjectizer, и для json-dto. По крайней мере есть хотелки и надежда, что под их реализацию найдется возможность. А для 2021-го года само по себе наличие надежды -- это, блин, ну очень редкое явление.

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

Так вот, я был сильно удивлен тому, что SObjectizer-5.5 спокойно и без каких-либо проблем собрался и заработал под C++20.

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

И тот факт, что пользователи SObjectizer-5.5, которые не имеют возможности перевести свой софт на 5.6/5.7, могут продолжать жить с SO-5.5 и под C++20, меня сильно радует. Эдакое теплое чувство внутри.

понедельник, 1 ноября 2021 г.

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

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

Мистериум: Эффект Марко (Marco effekten, 2021). Как я понимаю, это продолжение неплохой датской серии детективных фильмов. Но уже с другими актерами на главных ролях из-за чего часть обаяния этой картины уже пропадает. В целом по атмосфере очень похоже на то, что уже было. А вот по сюжету как-то слабовато, на мой взгляд.

Безжалостный (Bulhandang: nappeun nomdeului sesang, 2017). Вроде бы и неплохо, есть внезапные твисты, которые делают сюжет интересным. Но смотреть тяжеловато, т.к. для европейского зрителя и актеры практически на одно лицо, и имена героев не запоминаются. С учетом переплетенных сюжетных линий сложно следить за повествованием.

Начать с нуля (Cambio tutto, 2020). Как по мне, так проходной фильм с довольно-таки предсказуемым сюжетом и плоско-картонными персонажами. Все держится на актрисе в главной роли, она справилась мастерски. Однако, на фоне всего остального нынешнего шлака это кино вполне можно и посмотреть.

Старый Генри (Old Henry, 2021). Затянуто. Проматывал наиболее занудные моменты. Если бы не это, то фильм был бы прекрасным образчиком того, как можно снять хорошее кино за недорого.

Мадам Парфюмер (Les parfums, 2019). Это не комедия, ни драма, ни мелодрама. Просто милый фильм с хорошими актерами. Можно глянуть если больше смотреть нечего. Но и ждать от него не нужно ничего.

Новый порядок (Nuevo orden, 2020). Мне не зашло. Такое ощущение, что авторы хотели сделать шок-контент, но пригламуренный. Получилось лайт-жестокость ради лайт-жестокости.

Клыки ночи (Night Teeth, 2021). Уж не знаю, как можно было сделать боевик про вампиров настолько скучным и унылым, но тут это получилось.

Хороший, плохой, коп (Copshop, 2021). Фильм-разочарование. Отличный трейлер, интересная фабула. Но воплощение -- это какой-то треш и отстой. Если не хотите после просмотра отплевываться и задаваться вопросом "Как можно было испоганить такую завязку?", то это кино лучше не смотреть.


Фильм вне категории: Поездка (I onde dager, 2021). Так и не понял, что это было. Для черной комедии он слишком серьезен, для Ъ-шного кровавого слэшера -- слишком ироничен и саркастичен. Лично для меня это треш, угар и содомия, чуть ли не в прямом смысле слова. Потраченного времени жаль. Но наверняка кому-то такое кино зайдет.

вторник, 26 октября 2021 г.

[life.music] Неожиданное и приятное открытие, связанное с ЦАПом CM108 на CS4398+TDA1308

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

Среди ЦАПов, о которых рассказывалось в предыдущем посте серии, было упоминание о безымянном ЦАПе на базе когда-то ТОПового чипа от Cirrus Logic CS4398 и усилителе TDA1308. Правда, он, как оказалось, не совсем безымянный. На просторах Aliexpress он известен как CM108. Впрочем, речь не о названии, а о звучании.

Изначально этот ЦАП показался мне излишне светлым. С "темными" накладными и полноразмерными наушниками (вроде KOSS Porta Pro) он звучал нейтрально, а вот с 32-омными вкладышами басов практически не было. Так что пользоваться им не смог. Но и на продажу выставить рука не поднялась, т.к. ну очень уж драйвовая у него подача.

Так он и лежал у меня без дела, пока не решился на эксперимент с покупкой высокоомных динамиков (выбирал между 120- и 130-омными моделями). Но дабы не выбросить деньги понапрасну сперва проверил, а тянут ли мои ЦАПики наушники с импедансом больше 100ом.

Взял т.н. impedance plug (это такой штекер-переходник для 3.5-мм разъема с дополнительным сопротивлением внутри) на 80ом и стал пробовать звучание ЦАПов со своими основными на тот момент 32-омными вкладышами (т.е. суммарное сопротивление составляло ~110ом).

Все ЦАПы, даже самые дешевые, спокойно "раскачивали" такую связку.

Но самым неожиданным стало то, что CM108 на такой связке стал звучать гораздо ровнее. Он практически перестал быть светлым, стал почти что нейтральным и сбалансированным. Басы зазвучали совсем по другому. Скорость, упругость и хлесткость осталась, но к ним теперь добавилась глубина, протяженность и объем.

"Ничего себе!", подумал я. И стал ждать посылки со 120омными динамиками.

Когда посылка пришла и новые наушники были собраны, то попробовал их в первую очередь с CM108.

Результат очень понравился. Этот ЦАП, даже не смотря на то, что он поддерживает всего 16bit/48kHz, сразу же перешел в категорию любимых. Настолько интересный, детальный, глубокий и драйвовый звук он выдает.

А давеча решил подключить 120омные наушники к ЦАПу через 80омный impedance plug.

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

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

К чему я это все рассказал?

Эксперименты с повышением сопротивления ваших наушников могут привести к интересным результатам.

В качестве дополнительных источников информации к размышлению пару статей из Интернета: Правда или нет? Высокоомные наушники звучат лучше и На что влияет сопротивление наушников.


Напоследок поделюсь некоторыми своими текущими соображениями, которыми бы я руководствовался бы сейчас, если бы мне потребовалось выбрать для себя новый ЦАП.

Сейчас бы я обратил внимание на описание усилителей, которые используются в ЦАПе кроме основного чипа. Если в "свистке" производителем указывается только ЦАП-чип (например, CS43191), то такой "свисток" я бы уже не рассматривал. А вот если бы кроме ЦАПа указывалось бы, что применяется дополнительный усилитель (или даже несколько), то это стало бы для меня весомым плюсом.

И не потому, что я разбираюсь в том, как меняет звук какой-нибудь OPA1612, TDA1308 или AD8397. Нет, в этом как раз не разбираюсь.

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

С другой стороны, за это придется расплачиваться повышенным энергопотреблением. Ко мне еще не попадали экономичные ЦАПы с хорошим звуком, да и в отзывах/обзорах про такое слышать не приходилось.

среда, 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++ный код, и писать новый код на более простом в изучении и использовании языке (возможно, даже более безопасном). И при таком развитии событий даже не сильно умные люди, вроде меня, могли бы нормально пользоваться привычными инструментами.