15 июня 2026

Ковыряние в shell скриптах

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

Разработчики заводят новую ветку development-X.Y в которую заливается код "не имеющий ничего общего" с кодом в ветке development. Проблема в том что CI не поддерживает такой сценарий и как только будет выпущена версия X.Y.0, то собьётся версионирование в ветке development чего нужно избежать.

За версионирование в CI отвечает shell портянка строк на 200. Благо к ней есть тесты, написанные для bats и это большое благо, иначе количество сюрпризов повысилось бы кратно.

Вот несколько интересных граблей, на которые наступил в процессе:

Добавил новый параметр для фильтрации версий local filter="$10" - тесты отвалились, т.к. в значении переменной filter было "имя_сценария0", а не "0.[0-9]+" как должно было быть. Дело в том что bash трактует "$10" как обращение к первому параметру к которому в строке добавили ноль. Чтобы этого не происходило нужно писать local filter="${10}". Забавно что shellcheck на такое не ругается.

Когда добрался до сравнения версий, которое было сделано в виде хака version() { echo "$@" | awk -F. '{ printf("%d%03d%03d\n", $1,$2,$3); }'; } нашёл "спящую" ошибку, которая проявится спустя какое-то время. При использовании такой функции версия 0.48.0 на выходе имела вид 0048000, но если в начале числа стоит 0, то bash воспринимает его как восьмеричное число и ловит ошибку -bash: [[: 0048000: value too great for base (error token is "0048000").

14 июня 2026

Активный ФНЧ на 3 кГц

Собрал активный фильтр нижних частот с частотой среза 3 кГц чтобы отсекать высокочастотный свист и улучшить избирательность приёмника прямого преобразования. Для расчёта номиналов использовал схему и калькулятор из статьи онлайн расчёт активных фильтров на ОУ и транзисторах.

Моделирование фильтра делал в Qucs-S и начал со схемы на операционном усилителе, но она не работала без двухполярного питания. Двухполярное питание можно получить с помощью таймера 555 или, если снизить напряжение питания аналоговой части до 10 В, микросхемой семейства 7660 (на "летающих конденсаторах"). Но оба варианта потребует делать фильтрацию импульсных помех, чего не хотелось бы из-за усложнения схемы.

10 июня 2026

Балун по току 1:1

Наступило лето и можно выбраться подальше от городских помех чтобы на свежем воздухе послушать эфир. Для начала планирую сделать антенну диполь на диапазон 20 метров, т.к. в этом диапазоне активность есть и днём и ночью.

Поскольку диполь это симметричная антенна, а коаксиальный кабель не симметричен, то собрал себе балун (balun) который является симметрирующим устройством и исключает протекание тока по оплётке коаксиального кабеля. Другими словами балун нужен чтобы приём или передача сигнала велась только самой антенной а не фидером впридачу.

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

Для изготовления балуна взял ферритовое кольцо М2000НМ 32х16х8. У этого кольца острые грани и их стоит сгладить (напильником, бормашинкой и т.д.) чтобы избежать повреждения изоляции провода при намотке, затем дополнительно обмотать кольцо чем-то изолирующим поскольку феррит марки НМ проводит ток (я использовал ПВХ изоленту).

09 июня 2026

Подготовка печатной платы для ЛУТ

Перешёл на Inkscape для подготовки нескольких копий изображения дорожек и шелкографии печатной платы на листе бумаги для ЛУТ. В примере использована печатная плата УНЧ на LM386.

Для начала нужно в Kicad распечатать изображение дорожек и шелкографии в отдельные PDF файлы. Плата УНЧ односторонняя, поэтому печатается изображение меди снизу платы (слой "B.Cu") и шелкографию сверху (слой "F.Silkscreen").

При печати верхнего слоя меди или шелкографии нужно не забыть включить зеркалирование изображения ("Print mirrored"). Во всех случаях нужно установить печать в масштабе 1:1. Для удобства центровки при сверлении я использую мелкие отметки ("Small mark" в Drill marks) вместо реального диаметра сверла.

06 июня 2026

Генератор плавного диапазона на MS5351

После сборки усилителя низкой частоты попробовал собрать приёмник прямого преобразования используя вместо генератора плавного диапазона (ГПД) генератор сигналов UTG932E. Проверив работоспособность приёмника решил собрать отдельный ГПД на базе модуля SI5351 чтобы попробовать приёмник на улице. В домашних условиях слишком много помех даже на магнитную рамочную антенну.

У меня в запасах должен был быть один модуль SI5351 из которого я когда-то хотел собрать ВЧ генератор, но был куплен NanoVNA который закрыл эту потребность. Перерыв все закрома я так и не смог его найти хотя уверен что нигде его не использовал.

В итоге в ближайшем магазине электроники были куплены микросхема MS5351M от Hangzhou Ruimeng Tech (аналог SI5351) и кварцевый резонатор на 25 МГц (NX3225GA-25MHZ-STD-CRG-2). Подозреваю что в большинстве китайских модулей маркированных как SI5351 на самом деле стоит именно MS5351 вместо оригинальной SI5351 от Silicon Labs т.к. она значительно дешевле.

Чтобы не возиться с разводкой печатной платы для корпуса MSOP-10 взял переходник SOP-10 на DIP-10 и припаял микросхему и кварц на переходник. На выходах 2, 3 (кварцевый резонатор) и 6, 9, 10 (выходы CLK0 - CLK2) нет пинов чтобы не добавлять лишнюю ёмкость от беспаечной макетной платы.

На выход CLK1 припаял разъём SMA т.к. этот вывод соседствует с GND и почти совпадает с размерами SMA разъёма, заодно в дело пошёл разъём SMA у которого был отломан один из земляных выводов.

02 июня 2026

Исправление nagios-nrpe-server в Debian 13

Дошли руки поправить старую проблему с nagios-nrpe-server, которая появилась после обновления серверов на Debian 13 и воспроизводилась после каждой перезагрузки сервера. Последнее время обновления ядра выходят довольно часто и надоело перезагружать этот сервис руками.

DISK CRITICAL - /run/credentials/getty@tty1.service is not accessible: No such file or directory

В Debian 13 используется версия systemd в которой добавили ImportCredentials из systemd-creds для getty. В сочетании с опцией privateTmp=true для nagios-nrpe-server.service это приводит к такой ошибке.

В самом сервисе есть указание запускаться перед getty@tty1.service, но в моём случае это не даёт нужного эффекта. Чтобы ошибка не возникала при каждой перезагрузке достаточно выключить privateTmp для nagios-nrpe-server.service.

$ sudo systemctl edit nagios-nrpe-server.service

И переопределить значение privateTmp с true на false. Нужно добавить нужные строки до строки "### Edits below this comment will be discarded", примерно так:

29 мая 2026

Усилитель низкой частоты на LM386

Собрал несколько вариантов усилителя низкой частоты (УНЧ) на популярной микросхеме LM386. На макетной плате использована микросхема LM386N-1 в DIP корпусе от Texas Instruments. К выходу усилителя подключен динамик 6 Ом на 1,5 Вт. В тестах напряжение питания усилителя 8 В, а рекомендованный диапазон питающего напряжения от 4 В до 12 В.

Сначала собрал схему из документации с максимально возможным усилением в 200 раз, добавив электролитический конденсатор 220 мкФ по питанию.