31 декабря 2025

Эксперимент с обновлением Raspbian через QEMU

Прошлое обновление сервера печати, который построен на базе Raspberry Pi 1B и Raspbian, с Bullseye на Bookworm заняло несколько часов. В нём установлена micro SD карта на 4 гигабайта, которая работает довольно медленно, но для печати быстрее и не нужно. Debian Trixie вышел в начале августа, но обновить эту систему руки дошли только сейчас.

Тогда обновление системы напомнило былые времена с Gentoo. Тогда и появилась идея попробовать запустить образ SD карты в QEMU, обновить систему и записать его обратно на карту.

Поставил SD карту из сервера печати в ноутбук и сделал её образ в двух экземплярах - один будет использоваться для обновления, а второй будет в качестве резервной копии если после обновления он не начнёт работать.

$ sudo dd if=/dev/mmcblk0 of=sdcard-20251230.orig.bin bs=1M iflag=direct
3849+0 records in
3849+0 records out
4035969024 bytes (4,0 GB, 3,8 GiB) copied, 300,146 s, 13,4 MB/s

$ cp sdcard-20251230.orig.bin sdcard.img

Теперь нужно выровнять размер образа для эмуляции иначе QEMU будет ругаться "qemu-system-arm: Invalid SD card size: 3.76 GiB SD card size has to be a power of 2, e.g. 4 GiB."

$ qemu-img resize -f raw sdcard.img 4096M
Image resized.

Не вынимая SD карту из ноутбука копирую ядро (kernel7.img) и device tree (bcm2709-rpi-2-b.dtb) в директорию с образом накопителя.

Чтобы обновление прошло быстрее я использовал эмуляцию Raspberry PI 2B в QEMU. С подбором опций пришлось повозиться, т.к. загрузка висла когда включалась сетевая карта. В итоге нашёл что для эмуляции Raspberry PI 2B рекомендуют передать ядру параметр dwc_otg.fiq_fsm_enable=0 и после этого система загрузилась.

30 декабря 2025

Самодельный аттенюатор

Разбирая коробки наткнулся на DVB-T приёмник который когда-то покупал ради экспериментов с SDR (Software Defined Radio). Он не может принимать частоты ниже 24 МГц, поэтому послушал FM радиостанции, переговоры с соседней стройки, но до приема ADS-B или авиа диапазона руки не дошли. В итоге приёмник на долгое время отправился в коробку.

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

В радиосвязи уверенным приёмом считается сигнал уровня S9 (-73 dBm или 50 мкВ). Мой генератор сигналов не позволяет выставить уровень сигнала ниже -56 dBm и следовательно мне ещё нужен аттенюатор как минимум на 20 dB. В таком случае я могу выставить на генераторе амплитуду -53 dBm и через аттенюатор на 20 dB получить -73 dBm что будет соответствовать уровню S9.

Готовые аттенюаторы на 20 dB в продаже есть, но тут либо платить в разы больше за вариант "на завтра", либо подождать месяц пока придёт из Китая. Ну или вариант на сегодня в виде "сделай сам".

29 декабря 2025

Модуль идеального диода XL74610

 В моей самодельной электронной нагрузке на 75 Вт есть защита от обратной полярности в виде сдвоенного диода Шоттки. Это очень простое решение, но у такой защиты есть цена - электронная нагрузка не может работать с обычными пальчиковыми батарейками или Ni-MH аккумуляторами из-за падения напряжения на защитном диоде.

В своё время я купил модуль "идеального диода" XL74610 который имеет очень низкое падение напряжения и потенциально может заменить диоды Шоттки, но всё не доходили руки его протестировать и решить что с ним делать дальше.

28 декабря 2025

Новые ручки для потенциометров

 В моих электронной нагрузке и блоке питания регулировки осуществляются многооборотными потенциометрами 3590 с диаметром вала 6,3 мм. Ручки, которые я поставил при сборке, были диаметром 20 мм и высотой 11 мм. Они плохо смотрелись из-за зазора между корпусом и самой ручкой через который был виден винт крепления. А небольшой размер ручек доставлял неудобство при точной установки значений, т.к. приходится делать более точные движения рукой.

Смоделировал две новые ручки диаметром 25 мм 30 мм и высотой 20 мм, которые будут прятать винт крепления под собой. Для сравнения прежняя и новые ручки рядом.

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

27 декабря 2025

Профилактика мультиметра Zoyi ZT-301

 Мультиметр Zoyi ZT-301 стал показывать от единиц до десяток Ом при замкнутых щупах, на фотографии использована "перемычка", но показывает 2,4 Ом. Покупал этот мультиметр в конце 2023 года и с тех пор он был моим основным мультиметром.

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

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

26 декабря 2025

Доработка тестера батареек BT-168D

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

Чтобы проверять батарейки я когда-то покупал тестер BT-168D который может измерить напряжения на пальчиковых батарейках или аккумуляторах, а также батарейках 6F22 (их ещё называют "Крона").


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

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

25 декабря 2025

Установка NanoVNA-Saver в Debian 13

Понадобилось снять характеристику с самодельного аттенюатора и для этого хотел использовать приложение NanoVNA-Saver которое есть в репозитарии Debian 13. После установки оказалось что оно не запускается из-за неверно указанных зависимостей для пакета (подробности в #1123607).

Чтобы приложение запустилось нужно дополнительно установить несколько библиотек

$ sudo apt-get install -y python3-pyside6 python3-pyside6.qtcore python3-pyside6.qtgui python3-pyside6.qtwidgets

После этого приложение запускается и работает


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

24 декабря 2025

Отключение кеширования метаданных для сетевых дисков в Windows

На рабочем ноутбуке у меня стоит Windows как корпоративный стандарт, но основная работа происходит в Linux который установлен в VirtualBox. Такой подход у меня появился давно, когда ещё в Windows первый WSL был нестабилен и несколько попыток перейти на него провалились. К слову и WSL2 которым уже можно вполне пользоваться меня не устраивает из-за меньшей производительности.

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

Сегодня терпение лопнуло и был сделан беглый поиск решения который вылился в несколько строчек для редактора реестра 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
"FileInfoCacheLifetime"=dword:00000000
"FileNotFoundCacheLifetime"=dword:00000000
"DirectoryCacheLifetime"=dword:00000000

После внесения в реестр нужно перезапустить службу workstation 

net stop workstation
net start workstation

Или перезагрузить весь компьютер для надёжности.

Подробности можно почитать по ссылкам:


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

Добавить метку времени к событиям в Kubernetes

 Если по какой-то причине нет доступа в панель мониторинга Kubernetes кластера, но нужно знать в какое время происходит определённое событие, то есть простой способ сделать это

$ kubectl -n default get events -w | ts
Dec 24 09:39:13 LAST SEEN   TYPE     REASON              OBJECT                        MESSAGE
Dec 24 09:39:13 15s         Normal   Scheduled           pod/debug-658b996798-52g2g    Successfully assigned default/debug-658b996798-52g2g to aks-workerf1f9-29801352-vmss000003
Dec 24 09:39:13 14s         Normal   Pulling             pod/debug-658b996798-52g2g    Pulling image "nicolaka/netshoot"
Dec 24 09:39:13 14s         Normal   Pulled              pod/debug-658b996798-52g2g    Successfully pulled image "nicolaka/netshoot" in 237ms (237ms including waiting). Image size: 207893848 bytes.
Dec 24 09:39:13 14s         Normal   Created             pod/debug-658b996798-52g2g    Created container: netshoot
Dec 24 09:39:13 14s         Normal   Started             pod/debug-658b996798-52g2g    Started container netshoot
Dec 24 09:39:13 15s         Normal   SuccessfulCreate    replicaset/debug-658b996798   Created pod: debug-658b996798-52g2g
Dec 24 09:39:13 15s         Normal   ScalingReplicaSet   deployment/debug              Scaled up replica set debug-658b996798 from 0 to 1

Dec 24 09:39:26 0s          Normal   ScalingReplicaSet   deployment/debug              Scaled down replica set debug-658b996798 from 1 to 0
Dec 24 09:39:26 0s          Normal   Killing             pod/debug-658b996798-52g2g    Stopping container netshoot
Dec 24 09:39:26 0s          Normal   SuccessfulDelete    replicaset/debug-658b996798   Deleted pod: debug-658b996798-52g2g

Я раньше не знал про утилиту "ts" из пакета moreutils и узнал о ней из вопроса на stackoverlow. Забавно что больше откликов набрал другой вариант ответа на вопрос.


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

23 декабря 2025

Глюки паяльной станции Silverflo 982-I

В прошлом году приобрёл себе паяльную станцию Silverflo 982-I (она же Yihua 982-I) на жалах C245. За год использования несколько раз видел как она глючила при длительной пайке в режиме ожидания, если установленная температура выше 300 °C (температура начинала расти выше установленной когда паяльник находился в подставке). Решалось это выключением/включением обратно и работа продолжалась.

Вчера это поведение повторилось и дополнительно появилась ошибка "S-E" (скорее всего сокращение от Sensor-Error, но я не уверен).

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

21 декабря 2025

Когда не хватает розеток

Надоело постоянно переключать вилки в удлинителе на рабочем столе когда нужно поработать с генератором сигналов, развязывающим трансформатором или паяльником. Изначально на столе был удлинитель на 6 розеток (что-то бюджетное от Defender), но за пару месяцев активного использования у него прикипела кнопка включения и он перестал выключаться.

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

В хозяйственном магазине взял три накладные розетки для помещений

Внутрянка у них так себе, но лучше того что я видел в потрохах удлинителя от Defender.

Не видел раньше такие подпружиненные контакты и не знаю насколько они надёжные, но вилка входит плотно

14 декабря 2025

NetworkManager перестал принимать одинаковый IP для проводной и беспроводной сетей

Подключил проводную сеть к ноутбуку для обновления OpenWrt в домашней Wifi сети и заметил что NetworkManager долго "крутит" иконку настройки нового подключения в трее. Полез в логи посмотреть что там происходит и нашёл такое

Dec 13 11:29:34 XXXXXXXXXX NetworkManager[978]: <warn>  [1765614574.8401] device (enp0s31f6): IP address 192.168.XX.XX cannot be configured because it is already in use in the network by host XX:XX:XX:XX:XX:XX
Dec 13 11:30:04 XXXXXXXXXX NetworkManager[978]: <warn>  [1765614604.9456] device (enp0s31f6): IP address 192.168.XX.XX cannot be configured because it is already in use in the network by host XX:XX:XX:XX:XX:XX

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

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

12 декабря 2025

Distribution не работает через workload identity в Azure

 Довольно долго провозился с настройкой distribution в Azure через workload identity в AKS который не хотел работать.

Сама настройка простая:

  • аннотация на сервис аккаунт в кластере (azure.workload.identity/client-id)
  • метка на под (azure.workload.identity/use: "true")
  • настроить конфигурацию в distribution
    storage:
      azure:
        accountname: accountname
        container: containername
        credentials:
          type: default_credentials
    

Но в лог валится ошибка "403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature."

25 ноября 2025

Nextcloud: AppAPI default deploy daemon is not set

 После обновления Nextcloud до версии 32.x в настройках появилось предупреждение "AppAPI deploy daemon: AppAPI default deploy daemon is not set. Please register a default deploy daemon in the settings to install External Apps (Ex-Apps).".

Я не планирую ставить external apps и просто хочу отключить эту функциональность. В разделе поддержки Nextcloud нашёлся ответ как это сделать - нужно зайти в список активных приложений и отключить "AppAPI". После этого предупреждение пропадает.


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

20 ноября 2025

Апгрейд SSD в ноутбуке

В процессе установки пакета разработки для STM32 в очередной раз закончилось место на домашнем разделе (/home) в ноутбуке. Походил с du по директориям, но больше 4 GB освободить не получилось. Заниматься радикальной чисткой или перемещением части данных на домашний сервер было лениво и в итоге был заказан новый NVME SSD на 1 TB от Kingston (SNV3S1000G).

Т.к. новый диск заметно больше прежнего, то перенос системы не вызывает вопросов. Подключил новый диск через USB-NVME переходник и скопировал данные

$ sudo dd if=/dev/nvme0n1 of=/dev/sda bs=1M iflag=direct oflag=direct conv=notrunc status=progress

Дальше переставил новый диск в ноутбук и загрузился с LiveCD чтобы увеличить размер домашнего раздела. У меня система стоит на LVM поверх LUKS поэтому команды специфичны для этого варианта установки.

$ sudo parted /dev/nvme0n1 resizepart 3 100%

$ sudo cryptsetup luksOpen /dev/nvme0n1p3 nvme0n1p3_crypt

$ sudo cryptsetup resize nvme0n1p3_crypt

$ sudo pvresize /dev/mapper/nvme0n1p3_crypt

$ sudo vgchange -ay dragoncore

$ sudo fsck -Cf /dev/dragoncore/home

$ sudo lvextend -L+650G dragoncore/home

$ sudo resize2fs -p /dev/dragoncore/home

$ sudo vgchange -an dragoncore

$ sudo cryptsetup close nvme0n1p3_crypt

16 ноября 2025

Заново открываю для себя STM32

Так вышло что микроконтроллеры STM32 я обошёл стороной и в основном использовал ATMEGA8/ATMEGA328 и ESP8266. Заказывал на пробу платы Blue pill с STM32F103C8T6, помигал светодиодом и отложил в ящик до лучших времён. Тогда интерес был в районе IoT и ESP8266 давал больше возможностей в сравнении с ATMEGA и STM32 у которого не было встроенного WiFi.

Недавно собирал частотомер на ESP32-S3 и мне не хватало 32-битного таймера чтобы считать импульсы без переполнения. Полистал спецификацию на популярные сейчас Black pill и заказал две платы с STM32F411CEU6 на борту чтобы сделать ещё один подход к STM32.

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

Для поддержки этой платы потребуется Arduino IDE 2.х (я установил актуальную версию 2.3.6) в которой нужно добавить ссылку https://raw.githubusercontent.com/stm32duino/BoardManagerFiles/refs/heads/main/package_stmicroelectronics_index.json в поле "Дополнительные ссылки для Менеджера плат" в меню Файл / Параметры.

14 ноября 2025

Ingress-nginx уходит на покой

На днях в блоге Kubernetes появилась запись Ingress NGINX Retirement: What You Need to Know в которой сообщается что поддержка Ingress Nginx будет осуществляться до марта 2026 и далее не стоит ожидать каких-либо новых выпусков или исправлений.

To prioritize the safety and security of the ecosystem, Kubernetes SIG Network and the Security Response Committee are announcing the upcoming retirement of Ingress NGINX. Best-effort maintenance will continue until March 2026. Afterward, there will be no further releases, no bugfixes, and no updates to resolve any security vulnerabilities that may be discovered. Existing deployments of Ingress NGINX will continue to function and installation artifacts will remain available.

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


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

11 ноября 2025

Сломалась сборка образов в Gitlab

 Сегодня сборка Docker образов сломалась на docker-machine ранерах.

*** WARNING: Service runner-xxxxxxxx-project-xxxxx-concurrent-0-xxxxxxxxxxxxxx-docker-0 probably didn't start properly.
Health check error:
service "runner-xxxxxxxx-project-xxxxx-concurrent-0-xxxxxxxxxxxxxx-docker-0-wait-for-service" health check: exit code 1
Health check container logs:
2025-11-11T14:15:01.392368160Z FATAL: No HOST or PORT found                      
Service container logs:
2025-11-11T14:15:01.155180886Z cat: can't open '/proc/net/ip6_tables_names': No such file or directory
2025-11-11T14:15:01.156146175Z cat: can't open '/proc/net/arp_tables_names': No such file or directory
2025-11-11T14:15:01.159149102Z iptables v1.8.11 (nf_tables)
2025-11-11T14:15:01.198255845Z time="2025-11-11T14:15:01.197837859Z" level=info msg="Starting up"
2025-11-11T14:15:01.201660747Z time="2025-11-11T14:15:01.201577762Z" level=warning msg="Binding to IP address without --tlsverify is insecure and gives root access on this machine to everyone who has access to your network." host="tcp://0.0.0.0:2375"
2025-11-11T14:15:01.201682858Z time="2025-11-11T14:15:01.201643206Z" level=warning msg="Binding to an IP address, even on localhost, can also give access to scripts run in a browser. Be safe out there!" host="tcp://0.0.0.0:2375"
2025-11-11T14:15:01.201770114Z time="2025-11-11T14:15:01.201692789Z" level=warning msg="[DEPRECATION NOTICE] In future versions this will be a hard failure preventing the daemon from starting! Learn more at: https://docs.docker.com/go/api-security/" host="tcp://0.0.0.0:2375"

Вызовы docker завершались ошибкой

ERROR: Cannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?

Связано это с выходом Docker 29.0.0, который перестал быть совместимым с docker-machine (подробности есть в gitlab-org/gitlab-runner #39100 и cattle-ops/terraform-aws-gitlab-runner #1324).

Для исправления достаточно откатиться на предыдущую версию Docker добавив engine-install-url=https://releases.rancher.com/install-docker/28.3.3.sh в MachineOptions

Если используется модуль cattle-ops/terraform-aws-gitlab-runner, то это делается через добавление параметра

  runner_worker_docker_machine_ec2_options = [
    "engine-install-url=https://releases.rancher.com/install-docker/28.3.3.sh",
  ]

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

09 ноября 2025

Обновление генератора сигналов UTG932E до UTG962E

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

Пока не было необходимости в частотах выше 30 МГц, то не было и смысла лезть внутрь генератора. Когда игрался с самодельным частотомером и входным формирователем, то захотелось проверить их на более высоких частотах чем 30 МГц.

Сегодня дошли руки до этой переделки и первым делом съездил в магазин электроники за программатором на базе CH341A.

В описании товара было указано "CH341A-MOD" и в нём реализовано питание микросхемы CH341A от 3,3 В стабилизатора а также 9 ножка (V3) подключена к 3,3В. В этом случае прошиваемые микросхемы питаются от 3,3В и уровень сигнала соответствующий. Без каких либо переделок этим программатором можно прошивать микросхемы EEPROM/FLASH 24-й (I2C) и 25-й (SPI) серий на 5В и 3,3В. Если понадобится прошить микросхему на 1,8 В, то потребуется отдельный переходник.

07 ноября 2025

Услышать мерцание света

Стараюсь покупать лампочки с высоким цветовым индексом и отсутствием пульсаций, которые могут привести к усталости во время чтения. Рейтинг ламп смотрел на сайте проекта LampTest, но не всегда получалось найти информацию о лампах которые продаются в данный момент.

Мерцание ламп можно определить если подключить фотоэлемент к осциллографу, но это вариант для дома. Если лампа мерцает, то придётся тратить время на возврат и снова выбирать другую лампу.

Этот проект начался после просмотра видео ИНДИКАТОР МЕРЦАНИЯ - в каждую избу! от Дмитрия Коржевского. Вместо использования bluetooth колонки я собрал свой вариант из готовых модулей:

  • Фотоэлемент 70х70 мм на 5,5 В 
  • PAM8403 в качестве усилителя
  • Динамик 6 Ом 1,5 Вт от старой колонки
  • MT3608 повышает напряжение литиевого аккумулятора до 5 В
  • TP4056 для зарядки и защиты литиевого аккумулятора
  • Литиевый аккумулятор стандарта 18650
  • Выключатель 

Первый вариант схемы не заработал из-за дохлого MT3608 (он был уже паянный, но не помню чтобы я его палил). Со второго раза всё заработало на столе

Чтобы придать законченный вид смоделировал и распечатал корпус. Для фотоэлемента сделано углубление чтобы он не выступал из корпуса.

02 ноября 2025

Отрицательный Vref для OXCO генератора OSC5A2B02

 Со временем OCXO (Oven Controlled Crystal Oscillator) генераторы стареют и перестают соответствовать изначальной спецификации. Эта одна из причин почему пожилое измерительное оборудование начинает привирать. Так и произошло с моим OCXO генератором CTI OSC5A2B02 на 10 МГц который сейчас выдаёт 10000025 Гц при напряжении подстройки частоты Vref равным 0 В и 10000056 Гц при Vref равным 4 В. Т.е. его уже не получится штатно подстроить до ровных 10 МГц, т.к. диапазон регулировки по документации 2 В ± 2 В (от 0 В до 4 В). 

А что если попробовать подать на Vref отрицательное напряжение? Не зная как выглядит схема таких генераторов можно ему что-то спалить. Поискал схему подобных генераторов в сети и нашёл срисованную схему от CTS 1960017 10MHz OCXO.

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

01 ноября 2025

Измерение частоты кварца ардуинки

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

Например частоту кварца платы Freeduino 2009 можно измерить подключившись щупом осциллографа к пину XTAL2 в режиме 10Х (если попытаться подключиться щупом без делителя, то программа сразу зависнет).

Осциллограф показывает частоту 15,9996 МГц и период 63 нс. Я только сейчас заметил что в осциллографе можно включить дополнительное измерение частоты, а не довольствоваться значением 15,9 МГц внизу экрана. Нужно будет полистать его 250+ страниц документации повнимательнее.

31 октября 2025

Корпус для входного формирователя частотомера

 Не пользовался КОМПАС-3D с университета, но месяц назад открыли бета-тест версии для Linux и я получил пробную лицензию на 60 дней. До этого для моделирования использовал либо OpenSCAD, либо FreeCAD, а сейчас решил вспомнить работу в КОМПАС-3D и смоделировать корпус для входного формирователя частотомера.

Корпус состоит из двух П-образных половинок со стойками для печатной платы



 Снизу сделаны углубления чтобы винты не царапали поверхность стола. Для боковых панелей сделаны пазы в которые они вставляются.

28 октября 2025

Входной формирователь для частотомера

 В генераторе сигналов Uni-T UTG932E есть частотомер от 0,1 Гц до 100 МГц, но его вход поддерживает только TTL-совместимый сигнал. Таким частотомером не получится измерить слабый сигнал или сигнал который симметричен относительно нуля.

Чтобы обойти это ограничение собрал входной формирователь который усиливает слабый сигнал и формирует на выходе прямоугольные импульсы с амплитудой 5 В. На генераторе выбран режим синусоидального сигнала амплитудой 35 мВ и частотой 30 МГц который подаётся на вход формирователя, а его выход подключён на вход частотомера.


 Формирователь должен работать до 100 МГц, но пока у меня нет генератора чтобы это проверить. Чем выше частота тем выше требования к минимальной амплитуде входного сигнала. На частоте 200 Гц он начинает работать от 25 мВ, но на частоте 30 МГц для устойчивой работы нужно уже 35 мВ.

23 октября 2025

ESP32 частотомер

Приехали OCXO генераторы на 10 МГц (CTI OSC5A2B02), которые я заказывал для ремонта платы генератора. Я заказывал сразу 5 штук на случай если некоторые из них тоже окажутся нерабочими, но проверка показала что они все работают.

Но вот с частотой вышло не очень, при минимальном напряжении 0 В на подстроечном выводе я измерил частоту выше 10 МГц у каждого из них, а при максимальном напряжении 4 В к частоте добавляется примерно 30 Гц. Если частотомер в моём генераторе не врёт, то меньше 10 000 016 Гц мне получить не удастся.

У меня ещё есть частотомер в тестере кварцевых резонаторов, но единицы Гц он не покажет. Попробовал собрать ещё один частотомер из платы ESP32-S3 и использовать её счётчик импульсов (PCNT) для подсчёта частоты. Этот счётчик 16-битный и им нельзя измерить частоту выше 32 кГц без переполнения. В итоге в настроил счётчик PCNT считать до 30000 и генерировать прерывание по достижению максимального значения. Каждое прерывание увеличивает счётчик переполнений. Каждую секунду счётчик PCNT и количество переполнений сбрасываются и запускается новый счёт. В следующую секунду счёт останавливается и выводится значение частоты (количество переполнений * 30000 + значение счётчика PCNT). В следующую секунду всё повторяется.

02 октября 2025

Установка КОМПАС-3D v24 Beta в Debian 13

Стартовало бета тестирование Linux версии КОМПАС-3D v24, которое проходит с 1 октября по 30 ноября 2025. В списке официально поддерживаемых систем нет Debian 13, но поставить это приложение оказалось несложно.

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

$ sudo apt-get install --update -y curl gnupg locales desktop-file-utils libxcb-res0 libxcb-xkb1 libxcb-xinput0

Далее подключить репозитарий АСКОН для Astra Linux 1.8 и установить полную версию

$ curl -fsSL https://repo.ascon.ru/beta/deb/ascon.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/ascon.gpg
$ echo "deb [signed-by=/etc/apt/trusted.gpg.d/ascon.gpg] https://repo.ascon.ru/beta/deb 1.8_x86-64 main" | sudo tee /etc/apt/sources.list.d/ascon-beta.list

$ sudo apt-get install --update -y ascon-kompas3d-v24-full

Запуск из командной строки

$ kompas-v24

На встроенном видео Intel HD Graphics 520 работает довольно шустро, хотя сложные модели я пока не пробовал загружать.

Добавлено 2025-12-21

Бета-тестирование закончилось 30 ноября и пакеты убрали из репозитария Аскон. Полная версия КОМПАС-3D v24 для Linux уже продаётся, а КОМПАС-3D v24 Home обещают выпустить в первой половине 2026 года.

 


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

29 сентября 2025

Невезение с OCXO генератором на 10 МГц

Пришёл заказанный с AliExpress модуль OCXO (Oven-Controlled Crystal Oscillator) генератора на 10 МГц. Планировал использовать его для повышения точности генератора сигналов. Потом возможно прикручу к нему GPS чтобы получить GPSDO (GPS Disciplined Oscillator).

В комплекте шёл переходник с батарейки 6F22 который оказался нерабочим - ни один из контактов не подключен. В целом не ясно зачем он нужен если при старте модуль потребляет около 0,5 А и после нескольких минут прогрева падает до 0,25 А.

Флюс китайцы отмыть забыли, но это поправимо небольшим количеством изопропилового спирта.

28 сентября 2025

Команды SCPI для измерителя LCR Zoyi ZT-DQ02

 Обновил прошивку измерителя LCR Zoyi ZT-DQ02 до версии 1.0.7 и немного покопался в прошивке на предмет поддерживаемых SCPI команд (в документации упомянуто управление через SCPI, но не приводятся сами команды).

На форуме EEVblog есть упоминания отдельных команд, но я использовал strings для поиска текстовых строк в файле прошивки.

Чтобы включить связь с компьютером нужно нажать и подержать кнопку "HOLD/REC", после этого в системе появится новый последовательный порт вида ttyACM0. Настройки для терминала 9600 8N1, окончание строк CRLF.

Список команд который удалось извлечь (следить за развитием можно на GitHub)

27 сентября 2025

Установка OpenWrt на TP-Link RE365 v1

Решил улучшить покрытие в домашней беспроводной сети и поставить ещё одну точку доступа чтобы интернет надёжно работал на балконе. Для этой цели на барахолке был куплен TP-Link RE365 v1 для которого доступна прошивка OpenWrt.

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

Установка OpenWrt максимально простая:

  • скачать файл прошивки openwrt-24.10.2-ramips-mt76x8-tplink_re365-v1-squashfs-factory.bin
  • на всякий случай проверить его контрольную сумму
  • сделать сброс на заводские настройки (зажать Reset на 10 секунд)
  • зайти на http://192.168.0.254/ и через штатное обновление установить OpenWrt (важно чтобы файл прошивки был с суффиксом factory, а не sysupgrade)

24 сентября 2025

Изготовление печатных плат

До недавнего времени для изготовления печатных плат в домашних условиях пользовался методом лазерного утюга (ЛУТ), но решил попробовать метод "холодного" ЛУТ. Это когда перенос тонера на стеклотекстолит происходит без нагрева утюгом.

С ЛУТ у меня было две проблемы:

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

Набросал в Kicad печатную плату для источника опорного напряжения 10 В

Делитель напряжения для операционного усилителя собрал из цепочки точных сопротивлений 1 кОм ±0.1% ±25ppm/℃ 125mW, которые остались после сборки набора сопротивлений для проверки мультиметров (см. 1, 2, 3).

Обновление системы до Debian 13

Уже вышло первое исправление для Debian 13 и для меня это сигнал что можно начинать обновлять свои системы. Перед обновлением стоит почитать что нужно знать о trixie чтобы представлять что может пойти не так.

На домашнем ноутбуке обновление вышло более масштабным, т.к. заодно заменил штатный SATA SSD на NVME SSD который по размеру немного меньше прежнего, но зато в разы быстрее. Заодно перешёл на разметку диска GPT и загрузку через UEFI.

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

Сообщение systemd "Tainted: unmerged-bin"

Это известная проблема и с этим ничего не нужно делать (подробности в #1085370).

$ systemctl status | head -n 20
● vbox
    State: running
    Units: 396 loaded (incl. loaded aliases)
     Jobs: 0 queued
   Failed: 0 units
    Since: Tue 2025-09-09 15:02:26 +03; 30min ago
  systemd: 257.8-1~deb13u1
  Tainted: unmerged-bin
   CGroup: /
           ├─init.scope
           │ └─1 /sbin/init
           ├─system.slice
           │ ├─acpid.service
           │ │ └─794 /usr/sbin/acpid
           │ ├─atd.service
           │ │ └─830 /usr/sbin/atd -f
           │ ├─containerd.service
           │ │ └─840 /usr/bin/containerd
           │ ├─cron.service
           │ │ └─821 /usr/sbin/cron -f

Bacula

Несовместимость версий в Debian 12 и Debian 13. Bacula director старой версии может общаться с новым bacula-fd, но между bacula-fd и bacula-sd старой версии дружбы не сложилось. Пришлось отложить обновление пока не будут обновлены все системы.
$ sudo aptitude hold ~ibacula

23 сентября 2025

Диски в GCP заметно дороже

Давно не заглядывал в стоимость ресурсов Google Cloud Platform и сегодня удивился стоимости дисков в GCP. Для сравнения зональный диск на 100 GB в AWS и GCP:

Т.е. за большие деньги получаешь меньше производительности. Если пытаться подобрать аналогичную производительность диска, то это уже нужен pd-extreme где минимальный размер 500GB и стоимость больше 250 USD в месяц.


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

17 сентября 2025

Снимок экрана генератора сигналов Uni-T UTG932E

 Разобрался как сохранять снимки экрана в генераторе сигналов Uni-T UTG932E. Я использую Linux и последовательность действий будет для этой системы. Для начала настроить правило UDEV для выдачи прав при подключении генератора к компьютеру.

В моём случае настройки UDEV находятся в файле /etc/udev/rules.d/99-utg932e.rules, но имя может быть и другим

ACTION!="add|change", GOTO="utg932e_rules_end"
SUBSYSTEM!="usb", GOTO="utg932e_rules_end"

# Uni-T UTG932E
ATTRS{idVendor}=="6656", ATTRS{idProduct}=="0834", MODE="660", GROUP="plugdev", TAG+="uaccess"

LABEL="utg932e_rules_end"

Далее перечитать настройки UDEV и переподключить устройство

$ sudo udevadm control --reload-rules

Для сохранения скриншотов я использовал https://github.com/renaatd/utg962/

$ git clone https://github.com/renaatd/utg962.git
$ cd utg962/
$ sudo apt-get install -y python3-pyvisa-py python3-pil
$ python3 utg962/save_display.py sine-wave.png

Результат


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

15 сентября 2025

Фильтрация помех в сети

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

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

Попробую улучшить ситуацию хотя бы для измерительной техники в домашней мастерской поставив на вход удлинителя фильтр ЭМИ. С этой целью был куплен фильтр ZS-0004 в алюминиевом корпусе. Его продают как фильтр для аудиотехники, но с тем же успехом он подойдёт и для любой другой техники.

11 сентября 2025

Транзисторы BD139 и BD140 с AliExpress

Эксперимента ради покупал биполярные транзисторы BD139 (NPN 80 В 1,5 А 12,5 Вт) и BD140 (PNP 80 В 1,5 А 12,5 Вт) на AliExpress. В принципе не ожидал получить что-то оригинальное, но было любопытно насколько "левыми" они окажутся.

С доставкой вышло 1,09 USD за 20 транзисторов (10 BD139 + 10 BD140). Цены этих транзисторов от азиатских производителей в LCSC начинаются от 0,69 USD за десяток BD139 и 1,03 USB за десяток BD140. Т.е. гипотетически существует вероятность что кто-то распродаёт ненужные остатки, но здравый смысл подсказывает что будет либо перемаркировка, либо вовсе пустышки.

После получения первым делом поставил крестики на пакетики чтобы случайно не забыть про эти транзисторы и не поставить куда-то в ответственное место.

На тот момент у меня был только тестер компонентов MTester который определил что транзисторы рабочие и их проводимость соответствует маркировке. Но вот коэффициент усиления по току был заметно выше чем должно быть у BD139/BD140 по документации (у разных производителей видел только до 250). Так что это перемаркированные транзисторы и в даташит на BD139/BD140 можно не смотреть.

10 сентября 2025

Кулер для Gigabyte GB-XM14-1037

 Больше 10 лет у меня трудится HTPC на базе платформы Gigabyte BRIX (аналог Intel NUC). В моём экземпляре стоит Intel Celeron 1037U который охлаждается кулером BSB05505HP от Delta Electronix.

HTPC включён 24х7 и за 10 лет в нём сменилось 3 кулера:

  1. Оригинальный проработал около 5 лет, но я его периодически смазывал. Заменить пришлось когда крыльчатка стала заметно люфтить.
  2. В 2020 году я его заменил на аналогичный кулер, который купил на AliExpress - этот кулер проработал до конца 2023.
  3. В декабре 2023 был куплен OEM кулер на Ozon и вот его хватило всего на полтора года.

Оригинальный кулер выглядит так

08 сентября 2025

Хорошая статья о постройке частотометра

 Добавлю себе в коллекцию ссылку на отличную статью о постройке частотометра от Леонида Ивановича Ридико (leoniv). В статье подробно описаны принципы работы частотометров и этапы постройки этого проекта.

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


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

06 сентября 2025

ZT301 неверно измеряет скважность импульсов

Ради спортивного интереса измерил частоту и скважность импульсов с генератора сигналов обычными мультиметрами ZT102 и ZT301. Зная частоту и скважность можно вычислить длительность импульса.

На генераторе выбран режим генерации импульсов частотой 1 Гц, шириной 25 мс, амплитудой 5 В и сдвигом относительно нуля на 2,5 В (от 0 В до 5 В). Мультиметры установлены в режим измерения частоты и скважности для низкого напряжения.

Оба мультиметра верно измерили частоту сигнала.

Но ZT301 неверно определил скважность (duty cycle) - вместо ожидаемых 2,5% я вижу 100%, что в корне неверно.

04 сентября 2025

Генератор импульсов без Arduino

При измерении скорости работы прозвонки у различных мультиметров я использовал генератор сигналов Uni-T UTG932E. В нём удобно задавать частоту и продолжительность (ширину) импульсов, их амплитуду и смещение относительно нуля. Это здорово экономит время, но такой генератор есть не у каждого радиолюбителя.

Если под рукой нет подходящего генератора, то подобные импульсы можно сгенерировать с помощью микроконтроллера (например популярные платы Arduino). Отсутствие навыков программирования не должно быть помехой, т.к. есть ChatGPT, DeepSeek, и им подобные. Нейронки неплохо пишут простой код если им внятно объяснить что требуется. Умение писать запросы к нейронкам или "prompt engineering" уже стало рутиной и облегчает многие задачи как в своё время навык использования поисковых систем.

С использованием микроконтроллера сделан генератор импульсов в проекте DMM Continuity Tester. Но лично мне стало любопытно как решить эту задачу без микроконтроллера. Тем более у меня в голове кроме постановки задачи ничего не вырисовывалось.

Открываю ChatGPT и пишу запрос

опиши схему устройства которое генерирует импульсы длительностью 25 мс и частотой 1 Гц без использования микроконтроллера

03 сентября 2025

Скорость прозвонки у различных мультиметров

В моей домашней мастерской несколько мультиметров: Zoyi ZT102, Zoyi ZT301 и Agilent U3402A. В каждом из этих мультиметров есть функция "прозвонки" цепей (мультиметр издаёт звуковой сигнал если сопротивление цепи ниже определённого значения).

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

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

27 августа 2025

Контакты бывают разные

 Когда собирал эталоны сопротивлений в качестве контактов использовал колодку PLS2-40 (на фотографии ниже это крайний справа) и столкнулся со значительным превышением измеренного сопротивления от ожидаемого для номинала 0,1 Ом. В этом номинале было включено параллельно 10 сопротивлений по 1 Ом с допуском 0,1% что должно давать 0,1 Ом с допуском 0,1%. Но при измерениях получалось около 0,12 Ом что на 20% больше.

Измерил сами контакты и получилось что каждый контакт имеет сопротивление больше 20 мОм (миллиом) что составляет минимум 20% от номинала эталона. Чтобы понять насколько это "норма", измерил сопротивление контактов PLS-40 (крайний слева) и PLS-40R (средний)

Сопротивление контактов измерял с помощью Yaorea YR1035+. Этот прибор измеряет с помощью переменного тока, но для короткого прямого контакта это не вносит погрешность.

24 августа 2025

Система тормозит на SSD

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

В выводе iostat видна максимальная утилизация диска при небольшом количестве операций ввода-вывода

$ iostat -x sda
Linux 6.1.0-38-amd64 (dragoncore)       22/08/25        _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,50    0,25   40,85   38,35    0,00   20,05

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
sda              1,00      0,50     0,00   0,00  251,00     0,50   40,00    459,00    20,00  33,33  146,22    11,47    0,00      0,00     0,00   0,00    0,00     0,00    7,00  133,29    7,03 105,20

В ноутбуке установлен SSD накопитель LITEON CV3-8D256-11 SATA 256GB формата M.2.

Посмотрел в атрибуты S.M.A.R.T.

$ sudo smartctl -A /dev/sda
smartctl 7.3 2022-02-28 r5338 [x86_64-linux-6.1.0-38-amd64] (local build)
Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0003   100   100   000    Pre-fail  Always       -       0
  9 Power_On_Hours          0x0002   100   100   000    Old_age   Always       -       5763
 12 Power_Cycle_Count       0x0003   100   100   000    Pre-fail  Always       -       3819
175 Program_Fail_Count_Chip 0x0003   100   100   000    Pre-fail  Always       -       0
176 Erase_Fail_Count_Chip   0x0003   100   100   000    Pre-fail  Always       -       0
177 Wear_Leveling_Count     0x0003   100   100   000    Pre-fail  Always       -       768
178 Used_Rsvd_Blk_Cnt_Chip  0x0003   100   100   000    Pre-fail  Always       -       0
179 Used_Rsvd_Blk_Cnt_Tot   0x0003   100   100   000    Pre-fail  Always       -       0
180 Unused_Rsvd_Blk_Cnt_Tot 0x0033   100   100   005    Pre-fail  Always       -       1248
181 Program_Fail_Cnt_Total  0x0003   100   100   000    Pre-fail  Always       -       0
182 Erase_Fail_Count_Total  0x0003   100   100   000    Pre-fail  Always       -       0
187 Reported_Uncorrect      0x0003   100   100   000    Pre-fail  Always       -       0
194 Temperature_Celsius     0x0003   100   100   000    Pre-fail  Always       -       79
195 Hardware_ECC_Recovered  0x0003   100   100   000    Pre-fail  Always       -       0
199 UDMA_CRC_Error_Count    0x0003   100   100   000    Pre-fail  Always       -       1
238 Unknown_Attribute       0x0003   061   100   000    Pre-fail  Always       -       39
241 Total_LBAs_Written      0x0003   100   100   000    Pre-fail  Always       -       30759792686
242 Total_LBAs_Read         0x0003   100   100   000    Pre-fail  Always       -       48997828952

23 августа 2025

Экранированный кабель для четырёхпроводного измерения сопротивления

Когда я проверял точность мультиметров самодельными эталонами сопротивлений, то не смог измерить номинал 10 МОм настольным мультиметром Agilent U3402A из-за постоянно меняющихся значений в последних трёх знаках. Я пробовал оба кабеля для четырёхпроводного измерения, которые есть в моей домашней мастерской, но ни один не дал полностью устоявшихся показаний. А стоило начать немного шевелиться как уже менялись четыре, а иногда и все пять, последних знаков.

Инструкция на мультиметр рекомендует проводить измерения сопротивлений выше 100 кОм с помощью экранированного кабеля, но судя по всему оба эти кабеля были без внутреннего экрана.

Спортивный интереса ради заказал 4 метра экранированного кабеля RG178, зажимы кельвина и 4 приборных разъёма 4 мм были в наличии.

Со второй попытки получился кабель (в первый раз оторвались центральные жилы кабеля от разъёмов когда одевал комплектный держатель разъёма)

Внутри зажимов кельвина центральная жила зафиксирована термоклеем и сверху одета термоусадка. Со стороны приборных разъёмов от обрыва центральной жилы защищает два слоя термоусадки, но это слабое место кабеля.

21 августа 2025

Не проходят пробы после включения Istio Ambient

 Возился с переносом наработок по Istio Ambient из GKE (Google Kubernetes Engine) в EKS (Elastic Kubernetes Service) и столкнулся с "отваливающимися" проверками готовности подов в Knative сервисах после включения пространства имён в ambient mesh.

Новый под стартует, но через 30 секунд у него отваливается readiness check без каких либо сообщений в логе пода. Проверил логи ztunnel, но ничего интересного не увидел. Для верности почитал Platform-Specific Prerequisites для EKS но описанный там случай не подходил для моего кластера.

Попробовал искать в сообщениях об ошибках в Istio, но ничего подходящего не нашлось. Потом вспомнил про kubernetes network policy которая есть в этом неймспейсе и после её удаления проверки стали проходить нормально.

Стал искать целенаправленно и натнулся на раздел Ambient, health probes, and Kubernetes NetworkPolicy в документации Istio Ambient и стало ясно чего не хватает.

19 августа 2025

Пропадают чаты и каналы в Teams

 Сегодня заметил что в настольной версии Teams (версия 25185.410.3812.8024) стал пропадать список чатов и каналов на вкладке "Chat".


 Есть только "Recent", но отсутствуют "Chats" и "Teams and Channels". В браузерной версии это выглядит так


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

18 августа 2025

Ошибки при установке Istio в GKE

 Если вы ставите Istio в ambient режиме в GKE (Google Kubernetes Engine) кластер и не прочли Platform-Specific Prerequisites, то при установке CNI node agent вы столкнётесь с двумя ошибками.

Первая не даст установить Helm релиз (в событиях будет ошибка):

LAST SEEN   TYPE      REASON                    OBJECT                           MESSAGE
3s          Warning   FailedCreate              daemonset/istio-cni-node         Error creating: insufficient quota to match these scopes: [{PriorityClass In [system-node-critical system-cluster-critical]}]

Это связано с тем что по-умолчанию разрешает использовать priorityClassName: system-node-critical только в пространстве имён "kube-system". Чтобы разрешить использовать его в "istio-system" нужно создать ResourceQuota в соответствующем пространстве имён

apiVersion: v1
kind: ResourceQuota
metadata:
  name: gcp-critical-pods
  namespace: istio-system
spec:
  hard:
    pods: 1000
  scopeSelector:
    matchExpressions:
    - operator: In
      scopeName: PriorityClass
      values:
      - system-node-critical

Вторая проблема проявляется как постоянный перезапуск пода istio-cni и в логах будет подсказка как это чинить:

2025-08-15T14:03:48.272826Z     info    controllers     starting        controller=repair pods
2025-08-15T14:03:48.357825Z     info    cni-agent       initialization complete, watching node CNI dir
2025-08-15T14:03:48.358220Z     error   cni-agent       failed file copy of /opt/cni/bin/istio-cni to /host/opt/cni/bin: open /host/opt/cni/bin/istio-cni.tmp.2135482355: read-only file system
2025-08-15T14:03:48.358243Z     warn    hint: some Kubernetes environments require customization of the CNI directory. Ensure you properly set global.platform=<name> during installation
2025-08-15T14:03:48.358311Z     error   cni-agent       installer failed: copy binaries: open /host/opt/cni/bin/istio-cni.tmp.2135482355: read-only file system
2025-08-15T14:03:48.369141Z     info    cni-agent       terminating, but parent DS istio-cni-node is still present, this is an upgrade, leaving plugin in place
2025-08-15T14:03:48.369180Z     info    cni-agent       Ambient node agent shutting down - is upgrade shutdown? true

Для исправления достаточно задать --set global.platform=gke при установке Helm релиза.


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

17 августа 2025

Проверка измерений сопротивления в домашних условиях

 Это продолжение точные резисторы для калибровки и неожиданная цена за простую плату - собрал набор сопротивлений (0,1 Ом, 1 Ом, 10 Ом, 100 Ом, 1 кОм, 10 кОм, 100 кОм, 1 МОм, 10 МОм) которыми можно проверить точность показаний сопротивления у измерительных приборов в домашних условиях.

Использованы тонкоплёночные SMD сопротивления от Yageo с точностью 0,1% и ТКС ±25ppm.  Для всех номиналов кроме 1 МОм и 10 МОм итоговая мощность 1,25 Вт.

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

В качестве эталонного измерительного прибора выступил настольный мультиметр Agilent U3402A с использованием четырёхпроводной схемы измерений. В этом режиме его точность измерения сопротивления выше любого другого из моих приборов, но при измерении сопротивлений выше 100 кОм рекомендованы экранированные провода которых у меня нет.

01 августа 2025

Микрометр 0-25 мм

 Пополнил свой список измерительных инструментов микрометром 0-25 мм с ценой деления 0,01 мм (10 микрон). Этот инструмент был выпущен в 1974 году московским заводом "Калибр" и находится в хорошем состоянии.

Брал его чтобы проверить сечение многожильного провода, но по итогу оказалось что продавец неверно указал информацию о количестве и диаметре жил (в описании товара было указано 7 жил по 0,26 мм, а на самом деле там 12 жил по 0,19 мм).

Микрометр пришёл мне отрегулированным и уверенно становится на ноль если вращать за храповик. На случай если хочется проверить точность микрометра, но нет концевых мер длины, то можно проверить используя щупы для регулировки клапанов (обычно в наборе щупы 0,05 мм - 1 мм).

17 июля 2025

Wildcard SSL сертификат

Понадобилось сгенерировать wildcard SSL сертификат и раскладывать его по пространствам имён в Kubernetes кластере. Этот сертификат будет использоваться в тестах которые выполняются для набора приложений на каждый запрос на слияние.

В cert-manager настроен ClusterIssuer LE с валидацией через DNS01. Выпуск wildcard сертификата у Let's Encrypt поддерживается только через DNS валидацию и протокол ACMEv2. В примере использован сервис Cloud DNS от Google Cloud Platform.

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-production
spec:
  acme:
    email: certificates@example.com
    privateKeySecretRef:
      name: letsencrypt-production
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
    - dns01:
        cloudDNS:
          project: GCP_PROJECT_ID

Манифест для wildcard сертификата (сам сертификат и ключ будут созданы в пространстве имён cert-manager)

15 июля 2025

Привилегии приложений в контейнерах

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

Далее несколько частых случаев с которыми мне доводится сталкиваться и варианты их решения.

Прослушивание портов ниже 1024

Если программа требует повышения привилегий для прослушивания портов 80 и 443 (или любых других до 1024), то можно изменить конфигурацию для прослушивания портов выше 1024 (например 8080 и 8443), а на балансировщике сделать преобразование портов. Если переназначение портов невозможно, то можно воспользоваться Linux capabilities и выдать только CAP_NET_BIND_SERVICE вместо выдачи прав пользователя root.

13 июля 2025

Ремонт Amazon Kindle 4

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

Слева это донор с барахолки, а справа - уже разобранный реципиент у которого виднеется отладочный провод UART. Донор включался и у него работала неповреждённая часть экрана.

Для ремонта использовал инструкцию по замене материнской платы с сайта iFixit.com, дополнительно стоит посмотреть инструкцию по замене экрана.

12 июля 2025

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

 Столкнулся с интересной проблемой когда внедрял сборку контейнеров под ARM64 процессоры. Есть программа на Java контейнер которой использовал образ "eclipse-temurin:17-jre-alpine" в качестве базового. Для этого базового образа отсутствует вариант для платформы linux/arm64 и стоял вопрос что безопаснее сделать:

  • перейти на "eclipse-temurin:17-jre-noble" который использует Ubuntu вместо Alpine
  • перейти на "eclipse-temurin:21-jre-alpine" который влечёт обновление Java с 17 на 21

Разработчик выбрал первый вариант (перейти на "eclipse-temurin:17-jre-noble"), т.к. обновление версии Java выглядит рискованным (может повлечь неожиданные эффекты в какой-либо из библиотек) и требует полного цикла тестирования которое провести сейчас нет возможности.

Я также считал что замена Alpine на Ubuntu при сохранении версии Java является менее рискованным, хотя и повлечёт увеличение размера образа контейнера и возможные риски из-за замены musl на libc (хотя я не особо верю в вероятность таких неприятностей). Забегая вперёд, мы потратили несколько часов разбираясь почему программа перестала запускаться.

10 июля 2025

Рассинхронизация звука и видео в LibreELEC 12

 Какое-то время назад обновил домашние HTPC с LibreELEC 9.x на 12.x ради возможности смотреть YouTube на большом экране (отправляю ссылку с телефона на нужный HTPC через Kore). Сейчас в строю два HTPC - один собран на базе Gigabyte BRIX, а второй был на базе Raspberry PI 3B. Вот на втором из них и начались проблемы с синхронизацией звука и видео - спустя 10 минут звук начинал спешить, а через пол-часа уже невозможно смотреть.

Я пробовал менять настройки вывода звука, но заметного эффекта это не дало. Нагрузка на процессор была около 40% это не выглядело как нехватка ресурсов. В логе Kodi никаких интересных записей не нашлось.

На прошедших выходных занялся этой проблемой и заменил Raspberry PI 3B, на Raspberry PI 4. Насколько я могу судить по нескольким дням использования, проблема с синхронизацией больше не проявлялась.


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

09 июля 2025

Держатель аккумуляторов для Zoyi ZT-DQ02

Для измерения внутреннего сопротивления аккумуляторов или иных источников питания Zoyi ZT-DQ02 комплектуется зажимами в виде крокодилов. Их удобно использовать для измерения выводных источников питания (например аккумулятор 18650 с приваренными лепестками). Если стоит задача быстро проверить десяток обычных ячеек, то гораздо быстрее будет использовать специализированный держатель.

Разъём для измерения внутреннего сопротивления у ZT-DQ02 это авиационный XS10-4P. Назначение пинов XS10-4P взял от штатного провода с крокодилами:

  1. положительный вывод
  2. положительный вывод
  3. отрицательный вывод
  4. отрицательный вывод

Какой-либо разницы по какому из них подаётся измерительный сигнал, а с какого считываются показания, по сути нет.

06 июля 2025

Исправление ошибки QIDIStudio при отправке на печать

Если отправить модель на печать напрямую из QIDIStudio, то программа аварийно завершится.

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

$ export WEBKIT_DISABLE_COMPOSITING_MODE=0
$ export WEBKIT_DISABLE_DMABUF_RENDERER=0
$ ./QIDIStudio_1.10.02.76_Linux_Ubuntu_20.AppImage

В описании этого способа указано что будет работать только в Ubuntu 24, но на самом деле отлично работает в Debian 12.

Альтернативный варианты:

  • добавить в адрес принтера порт 7125, но перестанет работать подключение к Fluidd из QIDIStudio.
  • Сохранять файл gcode на флешку и запускать печать с принтера.

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

05 июля 2025

Загрузка модуля ядра в LibreELEC

 Чтобы node_exporter мог считывать показания оборотов вентилятора в HTPC системе на базе Gigabyte Brix и дистрибутива LibreELEC нужно загрузить дополнительный модуль ядра it87.

# echo it87 >> /storage/.config/modules-load.d/sensors.conf

После перезагрузки станут доступны новые метрики

# wget -qO- localhost:9100/metrics | grep ^node_hwmon_fan_rpm
node_hwmon_fan_rpm{chip="platform_it87_2592",sensor="fan1"} 0
node_hwmon_fan_rpm{chip="platform_it87_2592",sensor="fan2"} 2848
node_hwmon_fan_rpm{chip="platform_it87_2592",sensor="fan3"} 0

Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

04 июля 2025

Неожиданная цена за простую плату

 Заказывал сегодня мелкие платки у NextPCB и столкнулся с неожиданно высокой стоимостью изготовления. Раньше при заказе двухслойной платы размером до 100х100 мм они стоили 5$ за 10 шт, но в моём случае насчитало около 20$ за плату размером 35х20 мм.

На отдельной странице стал экспериментировать с параметрами заказа без загрузки гербера и выяснилось что если размер платы меньше 30х30 мм, то 5$ превращаются в 13$. А отдельные 7$ мне накинуло за шелкографию на нижней стороне.

В итоге растянул плату до 35х30 мм и перенёс шелкографию на верхний слой.

При оформлении заказа ещё накинуло 13% налога, которого не было при прошлом заказе, но это уже мелочи.


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

03 июля 2025

Точные резисторы для калибровки

 В ветке форума EEVblog, посвящённой измерителю LCR Zoyi ZT-DQ02, обсуждали версию прошивки 1.0.8 и упоминалось что после обновления на эту версию потребует калибровки некоторых значений сопротивления.

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

  • для измерительного моста: 0Ω, 10mΩ, 100mΩ, 1Ω, 10Ω, 100Ω, 1kΩ, 10kΩ, 100kΩ, 1MΩ, 10MΩ
  • для измерителя внутреннего сопротивления: 0Ω, 1mΩ,10mΩ, 100mΩ, 1Ω, 10Ω, 100Ω, 1kΩ

 В сумме требуется 12 различных номиналов: 0Ω, 1mΩ, 10mΩ, 100mΩ, 1Ω, 10Ω, 100Ω, 1kΩ, 10kΩ, 100kΩ, 1MΩ, 10MΩ. Точность нужна не хуже 0.1% и очень желательно выбирать резисторы с низким ТКС (Температурный Коэффициент Сопротивления). Такие резисторы редко бывают в наличии и стоят в разы дороже обычных.

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

28 июня 2025

Лечение скрипа при печати Qidi Q1 Pro

У принтеров Qidi Q1 Pro есть болячка в виде скрипа при печати. В моём случае она проявилась спустя два месяца после покупки и очень раздражала. Вначале я грешил на скрип направляющих, но их смазка ничего не давала. Потом мне подсказали что звук издают ленивцы (ролики через которые проходят ремни) и посоветовали их смазывать. Но это сложно из-за их неудобного расположения и давало эффект на одну или две печати.

Сегодня в телеграмм канале прочитал что причина скрипа ленивцев - трение кромки ремня о ролик. Следовательно нужно смазать торец ремня и скрип пройдёт. Использовал жидкую силиконовую смазку которую нанёс на торец ремня ватными палочками. Нужно делать это аккуратно чтобы волокна ваты не оставались на ремне.

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


Вы можете следить за обновлениями блога с помощью Atom/RSS и Telegram.

22 июня 2025

Amazon Kindle 4 окирпичился

Началось с того что Amazon Kindle 4 завис при открытии новой книги. На экране ничего не происходит даже если зажать кнопку включения на 15 секунд (принудительная перезагрузка). Индикатор около кнопки питания так же не светится.

Если подключить электронную книгу к компьютеру, то в логе ядра видно новое устройство

Jun 19 12:46:38 dragoncore kernel: usb 1-1: new high-speed USB device number 23 using xhci_hcd
Jun 19 12:46:39 dragoncore kernel: usb 1-1: device descriptor read/64, error -71
Jun 19 12:46:39 dragoncore kernel: usb 1-1: New USB device found, idVendor=15a2, idProduct=0052, bcdDevice= 0.01
Jun 19 12:46:39 dragoncore kernel: usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jun 19 12:46:39 dragoncore kernel: usb 1-1: Product: NS Blank CODEX 
Jun 19 12:46:39 dragoncore kernel: usb 1-1: Manufacturer: Freescale SemiConductor Inc 
Jun 19 12:46:39 dragoncore kernel: hid-generic 0003:15A2:0052.0003: hiddev0,hidraw0: USB HID v1.10 Device [Freescale SemiConductor Inc  NS Blank CODEX ] on usb-0000:00:14.0-1/input0

Пробовал использовать Kubrick - специализированный дистрибутив для "раскирпичивания" электронных книг Amazon Kindle, но устройство не переходит в режим fastboot.

Далее в ход пошли радикальные средства - подключился к UART порту Kindle. Для этого использовал модуль USB UART на базе микросхемы FT232RL которому снижено выходное напряжение до 1,8 В чтобы соответствовать напряжению UART порта Kindle.

16 июня 2025

Преобразователь USB RS232

 Для подключения настольного мультиметра Agilent U3402A к компьютеру я использовал преобразователь на макетной плате, который я когда-то собирал для восстановления домашнего сервера через последовательный порт. Помимо готового USB-UART модуля на микросхеме FT232RL на макетке была только одна микросхема MAX232 и четыре электролитических конденсатора на 1 мкФ. Выглядело ненадёжно и вес USB провода норовил вывернуть преобразователь из макетной платы.

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

Устройство состоит из двух плат, которые соединены через разъём и скреплены винтами через стойки. Печатная плату для USB-UART на базе микросхемы CH340G взял от изолированного USB-UART преобразователя, но вместо микросхемы гальванической развязки поставил перемычки.

11 июня 2025

Переключение диапазонов для Agilent U3402A в Test Controller

 Это продолжение настройки настольного мультиметра Agilent U3402A в программе Test Controller. В прошлый раз было добавлено только переключение режимов и отображение частоты измерений.

Сейчас появился ручной выбор диапазона и частоты измерений. В этом мультиметре диапазон измерений зависит от частоты измерений.

Например для постоянного напряжения это выглядит так:

  • Низкая частота измерений
    • Автоматически
    • 120 мВ
    • 1.2 В
    • 12 В
    • 120 В
    • 1000 В
  • Средняя и высокая частота измерений
    • Автоматически
    • 400 мВ
    • 4 В
    • 40 В
    • 400 В
    • 1000 В

И так для большинства измерительных функций.

В обновленной версии конфигурации добавил в настройки поле "Rate" в котором выбирается частота измерений. При её изменении показывается показывается элемент соответствующий выбранной функции измерения с нужным списком диапазонов.

01 июня 2025

Источник питания стабилизированный

 Не смог пройти мимо объявления о продаже регулируемого блока питания за вполне адекватную цену (на тот момент около 15 USD). "Источник питания стабилизированный" выпускался минским заводом "Калибр" начиная с 90-х годов. Сайт завода уже не работает, но через WayBack Machine можно посмотреть как выглядела страница продукта в 2016 году.

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

Технические характеристики

Измерения цифровым мультиметром показали предел регулирования напряжения от 3,1 В до 14,9 В, срабатывание защиты по току около 1,2 А и хорошую точность встроенного вольтметра.