Полезные скрипты: Организуем удаленную сборку ПО

Решил в начале Нового Года, что надо разгрести каталог с полезными скриптами, которые используются годами “в хозяйстве” едва ли не на рефлексах, документировать их и закинуть в блог, а лишние снести к чертям. И начну, пожалуй, со скрипта, которым собираю тяжелый софт на “большом” сервере, где много памяти, быстрый SSD и прочие радости жизни. (О том, как я выбирал и настраивал для этого железо, пожалуй, я напишу в другом посте).

(далее…)

Оптимизируем ESP8266/ESPHOME для работы на батарейках (и делаем попутно мониторинг температуры воды в ванной)

— Товарищ генерал-лейтенант. Я давно хотел спросить. А как с йети быть?
— Йети? Надо чаще мыть.
(c) Х/Ф “ДМБ”

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

Что за повод? А история такая. Тут дернула меня нелёгкая начать закаливаться в летнюю жару, и не душем а сразу ледяной ванной (по-научному CWI, Cold Water Immersion). Дело мне это понравилось, и я дотянул спокойно аж до ноября, благо погода сама понижала температуру холодной воды от прохладной и приятной до “охтыжблинхолод”, и делала это неспешно.

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

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

Форм-фактор устройства: кирпич обыкновенный
(далее…)

Избавляемся от телефонного спама, Часть 1

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

(далее…)

Простая настройка IPv6 на OpenWRT

Тут как-то спрашивали в комментариях в моем унылом бложике про мою настройку OpenWRT для раздачи IPv6 на локальную сеть. Не прошло и пары месяцев, как я все же сподобился набросать статейку про это. Итак, поехали. Спойлер: На самом деле все намного проще, чем кажется.

(далее…)

Самодельный музыкальный центр с веб-интерфейсом

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

(далее…)

Пытаемся сдружить симуляторы Verilog и ctest

Если Вы программист, которому по долгу службы пришлось испачкать руки Verilog/SystemVerilog – первое что приходит на ум – заюзать какую-нибудь штатную запускалку тестов. Если бы разработка велась на myhdl то можно было бы использовать все то добро, что сделано для unit-тестирования кода на python.

Но если мы используем самые что ни есть классические инструменты, проект достаточно большой, с кучей разных библиотек и IP ядер из разных концов света, велик шанс, что простых скриптов на bash/csh для запустка тестов маловато. Да и не хочется тратить драгоценные минуты жизни на переизобретение велосипеда, когда можно использовать что-то готовое.

В этой заметке я расскажу, как интегрировать verilog симуляторы со стандартными запускалками тестов, на примере ctest (Из комплекта cmake) и какие грабли нас ждут при этом.

(далее…)

Грабли препроцессора Verilog HDL

Небольшая заметка о том, как работают include и define в Verilog HDL.   Вопреки ожиданиям, они работают совершенно иначе, чем в большинства языков программирования. В маленьком проекте с этим можно не столкнуться, но в более или менее большом проекте, где есть лицензированные/скаченные с OpenCores блоки от этого поведения можно очень больно огрести. (Я долго искал подходящую картинку, но лучше этой не нашел)

TL;DR: Определенные однажды макросы глобальны, и передаются из одного файла в другой в том порядке, в котором файлы передаются компилятору/синтезатору.

(далее…)

тяжелая наркомания: Сборка VPI расширения и запуск Verilog тестов при помощи cmake/ctest

Недавно потребовалось для нужд кровавой отладки сделать свое VPI расширение для verilog HDL и встал вопрос как интегрировать это добро с какой-нибудь нормальной системой сборки. К сожалению, в плане инструментов для сборки, отладки и тестирование люди проектирующие СБИС живут если не в каменном веке, то в своем особом мирке, со своей особой атмосферой. Опенсурсный iverilog в этом плане ничуть не лучше коммерческих тулов, которые кладут огромный болт на многие общепринятые в мире linux практики.
Ну да хрен с ними. Надо решать как с этим жить. В этой заметке я постараюсь пройтись по основным нюансам написания CMakeLists.txt для сборки vpi расширения и его unit-тестирования.

(далее…)

SkyForge: Создаем корневую ФС Debian на основе конфигурации в стиле Dockerfile

Для кучи проектов, как для работы, так и для дома я использую Debian. Однако, когда работаешь со встраиваемыми системами (напр. ARM СнК) под рукой нет установочного диста debian… Да и вообще привода для чтения дисков. Корневая ФС формируется вручную, отдельно собирается вручную ядро. Впрочем, как обычно.

Процесс не особенно быстрый, если следовать официальной документации на debootstrap и multistrap, а новичкам просто взрывает мозг. (К сожалению, я уже тут не нуб зеленый, старею)
Самое неприятное, что мало просто сформировать корневую ФС, надо ее еще настроить более или менее вменяемым способом, напр. выставить пароль по умолчанию, сгенерировать ssh ключи, прописать fstab… В общем, обычный набор действий.

В большом Ынтерпрайзе ™ существуют такие инструменты, как vagrant который создает базовую виртуальную машину заданной конфигурации и chef или puppet, которые собственно ее настраивают. Хотя нам никто не запрещает использовать chef или chef-solo на armhf плате (а почему бы и нет?) нам все равно нужен какой-то базовый образ, который мы будем в дальнейшем настраивать, так?

(далее…)

CMake + atom + .clang_complete

С некоторый пор я переехал с emacs’а на atom, который выглядел как более современная замена. Что для меня было важным – у него очень хорошая работа с CMake и автодополнение для оного. Вскоре ко всему этому делу я прикрутил lint и autocomplete через clang. И то и другое мне понравилось, но хотело актуального .clang_autocomplete в корне проекта. Однако, если проект получает от системы сборки кучу дефайнов, то управлять этим файликом руками становится больно и неприятно. Выход – генерить его на лету. Вот мой костыль для CMake:

message(STATUS "Generarating ${CMAKE_SOURCE_DIR}/.clang_complete")
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
file(WRITE ${CMAKE_SOURCE_DIR}/.clang_complete "")
foreach(dir ${dirs})
  file(APPEND ${CMAKE_SOURCE_DIR}/.clang_complete "-I${dir}\n")
endforeach()
string(REPLACE "'" "" CMAKE_C_FLAGS_SPLIT ${CMAKE_C_FLAGS})
string(REPLACE " " ";" CMAKE_C_FLAGS_SPLIT ${CMAKE_C_FLAGS_SPLIT})
foreach(flag ${CMAKE_C_FLAGS_SPLIT})
  file(APPEND ${CMAKE_SOURCE_DIR}/.clang_complete "${flag}\n")
endforeach()

Очевидно, если мы используем C++ в проекте, то и обрабатывать схожим образом надо переменную CMAKE_CXX_FLAGS. У этого кода есть очевидное ограничение: Если мы передаем через -D дефайны с несколькими словами – нас ждет облом (напр. -DRELEASE_CODENAME=”Black Burned Cookies”)