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

О блоге

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

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

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

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

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

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

четверг, 11 августа 2022 г.

[prog.c++] Внезапное продолжение вчерашней темы и неожиданное для меня поведение компиляторов GCC и clang

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

Но вот поведение компиляторов GCC и clang при его использовании меня удивило. С VC++ не проверял, не знаю как бы он себя повел бы.

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

среда, 10 августа 2022 г.

[prog.c++.humour] Как можно сделать хуже в попытке сделать лучше

Выдалась возможность потратить некоторое время на очистку кода RESTinio от (полу)забытых FIXME. Один из них выглядит так:

templatetypename Extra_Data, typename Producer, typename Handler >
class actual_router_entry_t : public router_entry_t< Extra_Data >
{
   //FIXME: compatibility between Extra_Data and Handler should be
   //checked by static_assert. If it's possible.

Суть здесь в том, что когда пользователь задает обработчик входящего запроса (тип Handler), то должна быть возможность передать в этот обработчик ссылку на generic_request_handle_t<Extra_Data>. А если это не так, например, если пользователь забыл про свой Extra_Data и подсовывает обработчик для простого request_handle_t, то будет ошибка компиляции.

Ошибки компиляции в шаблонном C++ном коде не самое приятное чтиво и разбираться с ними то еще удовольствие. Поэтому хотелось поставить в код какой-то static_assert, который бы явно говорил программисту: у тебя Handler не дружит с твоим же собственным Extra_Data.

Однако сходу написать такой static_assert в свое время не получилось, поэтому в коде был оставлен FIXME: мол, когда-нибудь руки дойдут.

Вот, руки дошли. Попробовал написать такой static_assert.

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

Написал, удовлетворил компилятор, попытался проверить как этот новый static_assert себя поведет.

Под катом два лога с сообщениями об ошибках компилятора GCC 9.4 в режиме C++14. Первый -- это старая версия с FIXME и без static_assert-а. Вторая -- новая версия без FIXME и со static_assert-ом.

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

Ну и да, видимо, этот FIXME из кода просто удалю и не буду делать никаких static_assert-ов. Потому что сложность кода растет, а пользы от этого никакой :(

Upd. Тема получила неожиданное продолжение.

суббота, 6 августа 2022 г.

[life.audiophilia.diy] Попытка переставить 10mm динамики из одних корпусов в другие

Покупать и ждать доставки готовых наушников просто и не интересно. Это все могут ;) Я же подсел на собственноручную сборку наушников. А с недавнего времени и на их переделку.

В данном случае имелись:

Наушники Yincrow RW-919, приобретенные когда-то на заре увлечения бюджетной аудиофилией. Куплены были за копейки (по меркам аудиофилии), но звучали достаточно прилично, хотя я и не сразу распробовал их звук, как и удобство корпуса.

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

Проблема с самодельными затычками была в том, что, как оказалось, именно эти корпуса в мои уши не садились. Думаю, что дело в прямом звуководе, расположенном точно по осевой корпуса. Тогда как в Yincrow RW-919 и просто отлично садящихся мне AKG K321 звуковод направлен в сторону.

С Yincrow RW-919 вообще были странные взаимотношения. Сначала они мне не зашли, а т.к. внутриканалок у меня собралось больше, чме было нужно, то выставил RW-919 на продажу. Но никто не заинтересовался и это оказалось к лучшему, т.к. буквально через несколько дней после снятия объявления о продаже у наушников переломился провод у штекера. Было бы неприятно, если бы это произошло у покупателя.

Со временем звук Yincrow мне стал нравится все больше и больше, плюс в результате многократных переборов удалось найти максимально комфортные и по посадке, и по звуку амбушюры. Амбушюры эти нашлись случайно в футляре от каких-то старых и давным-давно выброшенных Sennheiser. В общем, использовал RW-919 в качестве резервных, когда вкладыши надоедали или требовалась большая звукоизоляция.

Кабель у RW-919 был откровенно дерьмовый: слишком тонкий, склонный и к скручиванию, и к завязыванию, да еще и с микрофонным эффектом. Давным-давно хотел поменять его на что-нибудь другое. Даже была мысль установить туда MMXC разъемы, чтобы можно было и балансные кабеля использовать, но не решался вскрывать корпуса, т.к. с моими растущими не из того места руками было слишком много шансов все поломать без шансов на восстановление.

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

Настолько большая разница, что я таки решился разобрать RW-919 и поставить туда 10mm динамики из самодельных затычек. Что и проделал сегодня с утра. Естественно, не без приключений. С неприятными сюрпризами. И с полной переделкой :)

Собственно, было-стало:

Кому интересен фотоотчет об этом эксперименте, то милости прошу под кат.

понедельник, 1 августа 2022 г.

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

Как обычно, в начале списков перечислено то, что понравилось больше, а в самом конце откровенный шлак, на который можно не тратить свое время.

Фильмы

Джерри и Мардж играют по-крупному (Jerry & Marge Go Large, 2022). Милое и доброе кино.

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

Серый человек (The Gray Man, 2022). Адская смесь из "Джеймса Бонда", "Миссия невыполнима" и "Форсаж". Красочный и мегадинамичный аттракцион. Но блин, какая же сказка! Смотреть можно только отключив мозги и только в качестве аттракциона.

Рубикон (Rubikon, 2022). На удивление неплохо, как по мне, хотя бюджетность постановки и ощущается. Но главная претензия -- это неспешность повествования, было бы динамичнее, было бы получше. Однако, в целом, лично мне следить за происходящим было интересно.

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

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

Виртуоз (The Virtuoso, 2021). Какая-то антреприза с вышедшими в тираж хорошими в прошлом актерами. Могло бы получиться более-менее пристойно, если бы хронометраж сократить минут на 20-30 и избавиться от такого количества закадрового текста.

Криминальный город 2 (Beomjoе dosi 2, 2022). Странное кино: местами нелепая буффонада, местами звериная жестокость. Мне не зашло.

9 жизней (Nine Bullets, 2022). Ерунда.

Мир Юрского периода: Господство (Jurassic World Dominion, 2022). Смело можно не смотреть, редкая гадость.

Сериалы

Убийство на ферме «Уайтхаус» (White House Farm, 2020). Отличное атмосферное кино. Финал фильма меня лично приятно удивил, именно такой развязки я не ожидал.

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

Медленные лошади (Slow Horses, 2021, первый сезон). Отлично, мне понравилось.

Списов смертников (The Terminal List, 2022, первый сезон). Начинался пусть и скучновато, но смотрибельно. Но к финалу скатился в такую невероятную сказочку, что аж жутко стало.

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

суббота, 30 июля 2022 г.

[life.audiophilia.diy] Переделка кабеля с 3.5mm на балансный 4.4mm штекер и использование его для самодельных 14.8mm вкладышей

Давно ничего не рассказывал про свое увлечение бюджетной аудиофилией. Да и особо нечего рассказывать. Многое перепробовал, некоторое мнение составил. Экспериментировать с доступными мне комплектующими и относительно недорогими ЦАПами уже не интересно, а на то, что еще хочется попробовать, пока нет средств :)

Но вот вчера решил закрыть сразу два открытых вопроса:

  • что делать с 3.5mm MMCX кабелем от NiceHCK, который уже больше года валяется у меня без дела. Покупался этот кабель когда-то под очень даже неплохие заушные мониторы Tiandirenhe TD2, но затем я все свои заушные мониторы распродал, а кабель остался. Кабель специфический: очень тонкий, очень гибкий, завязывается в труднораспутываемые узлы просто на раз-два. Зато очень легкий, практически невесомый. Плюс к тому я перешел на балансный 4.4mm разъем и старые небалансные кабеля с 3.5mm штекером мне уже и не нужны. Следовало бы его продать, но так как он изначально недорогой, да еще и б/у, то с продажей лень было связываться;
  • что делать с самодельными вкладышами с неплохим 14.8mm драйвером с титановой диафрагмой и импедансом 40ом. Вкладыши эти были собраны с несъемным кабелем больше года назад и отношения с этими наушниками у меня не особо складывались. После ВАУ-эффекта в первые пару дней показалось, что в них слишком мощные басы, способные продолбить дырку в башке. Потом, когда пытался слушать их без амбушюр вообще, стало не хватать детализации на верхах. В общем, всегда обнаруживался какой-то фатальный недостаток и наушники лежали без дела. Кроме того, кабель у этих наушников был небалансный 3.5mm, поэтому не было возможности послушать вкладыши с балансными ЦАПами.

Изначально было желание выставить на продажу и кабель, и вкладыши.

Но пару дней назад сравнивая свои основные 15.4mm вкладыши с LCP-диафрагмой с самодельными затычками с 10mm динамиком внезапно обнаружил, что мне перестали нравится басы на LCP-динамиках. В некоторых композициях, особенно с женским вокалом, звуки ударных как будто бы выходили на передний план и "забивали" своим буханием все остальное. Тогда как в затычках с 10mm динамиком такой проблемы не было, там на первом плане как раз был женский вокал, а басы оставались на заднем плане.

Мне стало интересно, а как себя поведут на этом же материале старые вкладыши с 14.8mm динамиком с титановой диафрагмой, там же басы были еще более ударными.

И, как это не удивительно, но 14.8mm динамики показали себя более достойно. Ударные мощные, но звучат чуть "дальше", женский вокал остается на переднем плане.

Захотелось переделать эти 14.8mm вкладыши так, чтобы их можно было использовать и с ЦАПами с балансным выходом. Тем более, что за время лежания в футляре установленный на наушники кабель загрубел и утратил эластичность, что не есть хорошо: явно рано или поздно где-то переломится и придется менять.

К сожалению, корпусов с MMCX разъемами под 14.8mm динамики у меня нет, а самостоятельно переделывать пластиковые под MMCX не хотелось, не очень эстетично выглядящий результат получается.

Еще одной неприятной особенностью имеющихся у меня корпусов под 14.8mm является то, что в них узкий кабель-канал. Только относительно тонкие провода туда можно засунуть.

Тут-то и появилась идея взять валяющийся без дела черный кабель от NiceHCK, заменить 3.5mm штекер на 4.4mm, срезать MMCX-контакты и использовать получившийся балансный 4.4mm кабель для переделки 14.8mm владышей.

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

Кому интересен небольшой фотоотчет, милости прошу под кат.