суббота, 23 декабря 2023 г.

[life.audiophilia.diy] Итоги уходящего года в сфере самодельных наушников и мои текущие предпочтения

Сразу приношу свои извинения за то, что приведенный ниже персональный ТОП динамиков для DIY-вкладышей публикую уже после того, как на Aliexpress закончились все ноябрьские и декабрьские скидки :(

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

Итак, уходящий 2023-й год для моего увлечения самодельными наушниками (даже более точно: самодельными наушниками-вкладышами) прошел, в целом, неудачно. Было приобретено несколько комплектов дорогих (для меня) динамиков, но мало что понравилось. Да еще и два самых дорогих комплекта были мной сломаны в процессе подбора корпусов. Такое бывает: приобретаешь динамики за $40, а потом раз! и они ломаются при установке в корпус или при извлечении из корпуса, в котором их звучание не понравилось. Это DIY, тут никто тебе никаких гарантий не дает, все от самого себя зависит.

Да еще и с лета 2023 на Aliexpress с покупателей из РБ стали взимать 20%НДС, так что это мое увлечение внезапно стало заметно дороже :(

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

Вот такие вот итоги. Теперь же можно перейти к приятной части, к перечислению того, что мне нравится. Кому интересно, милости прошу под кат.

пятница, 22 декабря 2023 г.

[blog] Happy birthday my blog - 15!

Как-то тихо подкрался очередной ДР блога. Ровно 15 лет назад здесь была опубликована первая заметка.

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

Оглядываясь назад могу сказать, что когда блог только начинался, даже и мысли не было, что он просуществует так долго. А теперь уже начинает казаться, что и рубеж в 20 лет вполне можно будет взять. Если, конечно, и я, и blogger.com, проживем еще пять лет :)

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

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

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

четверг, 21 декабря 2023 г.

[prog.bugs] Иногда цена ошибки может быть известна достаточно точно

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

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

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

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

ЗЫ. Все совпадения с реальными людьми и событиями случайны и непреднамеренны :)


Мораль сей басни: если вызывается какая-то функция, которая возвращает код ошибки, то код ошибки обязательно должен быть проверен. Обязательно. Должен. Быть. Проверен.

Далее, в случае возникновения ошибки, по ситуации:

  • если ошибка ожидаемая, то выполняется логика ее обработки. Например, попробовали открыть файл, не получилось, что-то сделали по этому поводу. Скажем, выдали сообщение пользователю и попросили ввести новое имя файла;
  • если ошибка не сильно ожидаемая и не предполагающая путей исправления здесь и сейчас, то либо возвращаем свой код ошибки наверх (если исключения под запретом), либо выбрасываем исключения. Например, вызвали malloc, а он взял и вернул NULL. Маловероятно, но потенциально может произойти. Проверили результат malloc-а и вернули код ошибки наверх;
  • если ошибка вообще из разряда невероятных, то либо действуем как в предыдущем пункте, либо же вообще тупо зовем abort. Например, вызываем getwd, а получаем NULL, хотя казалось бы как такое возможно?

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

  • во-первых, сразу же узнаете о проблеме и
  • во-вторых, не сможете тихо "замести ее под коврик".

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


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