Йогурт

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

  • Молоко жирностью не меньше 3.2% (а лучше все 6%) — 2 л (я беру вот такое)
  • закваска — 1 бутылочка «Иммунеле» (даёт лучший результат из всех опробованных)
  • сахарный песок

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

В каждую баночку отливаем немного, по чайной ложке, закваски («Иммунеле»). Одна бутылочка как раз нормально распределяется на 8 порций. Затем в каждую баночку кладём по 0.5 чайной ложки сахара. Это для того, чтобы закваска веселее заработала. Разливаем 2 литра молока по подготовленным банкам. Тщательно размешиваем, чтобы растворился сахар.

Ставим баночки в духовку, выставляем температуру на 37 градусов. Держим в духовке 7-8 часов. Дольше 8 часов держать нельзя! Начнёт отсекаться сыворотка.

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

Рис. 1

Этот удивительный Windows

Как я докладывал ранее, в домашней сетке был разведён собственный DNS-сервер.

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

И опасения полностью подтвердились.

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

IPv6 DNS

Оказывается, винда в безальтернативном порядке выбирает DNS-сервер с IPv6 адресом. Такой DNS-сервер у меня есть, и это, как нетрудно догадаться, мой роутер ZyXEL Keenetic. И опцию «IPv6 DNS-сервер» в нём можно выключить только вместе с поддержкой, собственно, IPv6. Ни на какие другие варианты мой Зухель не согласен; говорит «хочешь ты или не хочешь — а я буду DNS-сервером для IPv6». Я никогда бы не узнал об этом, если бы не развернул альтернативный DNS-сервер.

Ну думаю, ладно. Просто укажу в настройках винды, что для IPv6 нужно игнорировать предложенный адрес DNS-сервера.

Фигвам. Нет такой настройки в винде. Выбор есть между вариантами: а) использовать сервер, полученный по DHCP; б) задать адрес своего DNS-сервера, причем указать можно только IPv6 адрес (что логично).

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

Seems to me that filling the Preferred DNS Server field with something is required. I suggest:

Preferred DNS Server — ::1,
Alternate DNS Server — blank

DNSv6 will fail immediately and auto fallback to DNSv4.

Огонь! Указываем для IPv6 DNS адрес localhost, где никакого сервера нет, винда об этот адрес обламывается, и переходит к DNS-серверам с IPv4 адресами.

При этом, мой рабочий лаптоп (с Win10 на борту), будучи подключенным к этой же самой сети, как-то умудряется работать как надо: брать только тот сервер, который предложен в IPv4 DHСP. Значит настроить сие по-человечески всё-таки можно. Надо будет поинтересоваться у наших админов, как они добились правильного поведения винды.

IPv4 глюки

А вот с темой общения этого компа с остальными по IPv4 — вообще загадочный глюк.

Я, по простоте душевной, до сих пор думал, что если у компа есть сетевой интерфейс, на котором задан, например, адрес 192.168.1.20 и маска 255.255.255.0, и эта карта воткнута в Ethernet розетку, то этот комп без проблем должен общаться с любым устройством, находящимся в той же самой сети 192.168.1.0/24.

Но мой Windows-10 Home, почему-то, оказался не настолько прост.

Он без проблем общается с принт-сервером, который сидит на адресе 192.168.1.6, и нормально печатает на настроенном принтере с этого принт-сервера. Он без проблем общается с NAS (192.168.1.3), доступ к которому тоже настроен на этой винде.

Но есть ещё 3 Linux-компа: 192.168.1.7, 192.168.1.9 и 192.168.1.10 (далее №7, №9 и №10 соответственно). С компом №10 винда нормально взаимно пингуется и соединяется, а с №7 и №9 — и не пингуется, и не соединяется; т.е. и с самой винды №7 и №9 не пингуются, и со стороны №7 и №9 винда на пинги не отвечает.

Кiк тiк?

Я подозреваю, что гадит ипанутый «брандмауэр Windows», но понятия не имею с какой стороны к нему подступаться. В сетевых потрохах 10-й винды мне до сих пор копаться не приходилось.

Кривые мои руки, конечно, тоже возможны, но я в упор не вижу, где можно накосячить в настройке одной простейшей сетки 192.168.1.0/24. Всё, буквально всё остальное в этой сетке идеально работает (3 штуки десктопных Линуксов, планшеты, телефоны, NAS, принт-сервер на OrangePi, рабочий лаптоп на Win-10), и только Win-10 Home, установленная с честно купленного дистрибутива с практически всеми настройками по-умолчанию, выкобенивается.

Я уже даже обратил внимание на том, что №3 (NAS) и №10 (один из Линуксов), которые нормально пингуются, и сама винда подключены проводами, а №7 и №9, которые не пингуются, подключены по WiFi. Но ведь №6 (принт-сервер) тоже подключен по WiFi и при этом нормально виден с винды!

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

Рис. 1 Windows 10 с точки зрения «Кандинского»

Готов корпус панели управления

Готов нарисованный ранее корпус для панели управления.

Кнопки вставлены «просто так», платы внутри корпуса пока нет, и вместо зкранчика пока синий скотч.

Выглядит, вполне ожидаемо, как «корпус, напечатанный на 3D принтере». Пока пусть будет так, как есть. В будущем, может быть, я сподоблюсь как-то отшлифовать наружную поверхность, чтобы было гладко и блестяще (или хотя бы матово).

Рис. 1

Печать заказывал здесь.

Инфраструктурное

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

Не нравится. Хочу конфигурировать вообще всё, используя имена, а не адреса. А для этого нужен DNS-сервер на локальную сетку.

Изучение вопроса навело меня на очень и очень интересный проект: Pi-hole. Это оказалось именно то, что доктор прописал.

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

Я очень доволен и всем рекомендую.

Рис. 1

Нарисовал корпус панели управления

Поскольку прошивка готова, и датчики настроены, нужно продвигаться к следующему этапу: 3D печать корпуса панели управления и кнопок. Эскиз расположения кнопок и светодиодов на плате у меня был, на его основе и разрабатывал модель корпуса.

Сначала сделал модель самой печатной платы, чтобы по ней проверять правильность расположения отверстий в корпусе и правильность размеров кнопок. Потом нарисовал корпус, кнопки, и объединил всё в сборку. Очень удобно всё это делать в Компас 3D: делаешь сам корпус временно невидимым, и можешь проверять, как кнопки располагаются относительно микровыключателей, запаянных на плату. Как раньше без таких программ жили — решительно непонятно.

Рис. 1

Вроде норм. Единственное место, которое мне не нравится — это расположение левой «стрелки» вплотную к экрану. Надо было разнести ещё миллиметра на 3. Но уже поздно; расположение элементов определяется платой, а её я переделывать совершенно точно не буду.

Теперь надо прицениться к печати этого корпуса и 22-х кнопок (16 на Ø10 мм, и 6 на Ø15 мм).

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

Рис. 2

Прошивка для MIDI-баяна готова

Сегодня вечером после работы я закончил работу над прошивкой MIDI-баяна. Даже не верится. Реализовал все функции, которые хотел:

  • Полная поддержка готово-выборной левой клавиатуры. На механизм переключателя установлен свой собственный датчик, и контроллер при включении сам определяет текущий режим. Само собой, переключение режимов тоже определяется. В готовом режиме басы и аккорды играют в разные MIDI каналы, которые можно настраивать совершенно независимо. Т.е. на бас можно настроить звук контрабаса, а на аккорды — гитару или, например, фортепиано. В режиме выборной клавиатуры вся левая рука играет в один канал (что логично). Само собой, канал для выборки настраивается независимо от каналов баса и аккордов.
  • Особенность конструкции левой клавиатуры моего баяна в том, что басы там играют октавами. Т.е. при нажатии одной клавиши баса механизм открывает два клапана: одна нота в контроктаве и одновременно с ней та же нота в большой октаве. Для баяна это хорошо, т.к. добавляет красок в басовый звук. А вот для MIDI инструмента — это уже недостаток, т.к. далеко не каждый инструмент будет хорошо звучать с октавами в басах. Поэтому я сделал спец-режим «запрет октав в басах». Если он включен, то контроллер игнорирует нажатия более высоких басовых нот, если уже нажата соответствующая низкая нота. Само собой, датчики должны быть настроены так, чтобы датчик низкой ноты срабатывал чуть-чуть раньше, чем датчик высокой ноты.
  • Работа меха регистрируется дифференциальным датчиком давления, который измеряет разницу между давлением внутри герметичного корпуса и давлением снаружи. Также есть режим игры с выключенным датчиком давления; в этом случае громкость звука настраивается через меню настроек.
  • Имеется возможность сохранения 6 вариантов настроек всех MIDI-каналов (правая рука, бас, аккорд и выборка) — т.н. «пресетов». Каждый пресет включается своей кнопкой; текущий пресет обозначается соответствующим горящим светодиодом. (См. заметку про дизайн панели управления.) Запоминание настроек происходит интуитивно просто: как только все звуки настроены как надо, достаточно нажать и удерживать кнопку соответствующего пресета. После обнаружения длительного нажатия, соответствующий светодиод сначала быстро заморгает, обозначая, что «сейчас будет записан выбранный пресет». Если в течение 3-х секунд после начала моргания кнопку не отпустить, то пресет запишется в энергонезависимую память (EEPROM). По похожему алгоритму запоминаются радиостанции в некоторых автомагнитолах.
  • Поскольку настроек у MIDI каналов много, и перебирать их через меню не всегда удобно, реализованы 4 настраиваемых кнопки быстрого доступа к настройкам. Если в момент редактирования нужного параметра нажать и удерживать кнопку быстрого доступа, то эта кнопка станет связана с этим самым параметром. И для повторного изменения данного параметра достаточно будет один раз коротко нажать эту кнопку быстрого доступа (и сразу можно будет менять параметр «стрелочками»). Очень удобно.
  • Если контроллер обнаруживает, что настройки звука изменились, то светодиод текущего пресета начинает медленно мигать, показывая, что имеются несохранённые изменения. Эти изменения можно сохранить либо в текущем пресете, либо в любом другом. А можно и не сохранять.
  • Имеется встроенная ритм-машина, которая может работать в двух режимах:
    • ручной — когда при каждом нажатии басовых клавиш проигрывается один звук ударных инструментов (например барабан «бочка»), а при нажатии аккордов — другой звук (например «тарелка»).
    • автоматический — когда проигрываются заранее запрограммированные мелодии (в данный момент у меня сделаны 5 штук: 2 метронома (3/4 и 4/4) и 3 простых ритма). Автоматический режим может стартовать либо по кнопке на панели управления, либо при первом нажатии любой басовой клавиши.
  • Имеется «упрощенный» режим выбора некоторых настроек, адаптированный специально для синтезатора ATEMP MIDI HW Synth. В этом режиме значения параметров, не реализованные в синтезаторе, просто пропускаются; выбрать можно только то, что поддерживается синтезатором. В основном это касается выбора дополнительных банков инструментов.
  • Все настройки сохраняются с энергонезависимой памяти, и при следующем включении инструмент восстанавливает то состояние, в котором он был выключен.

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

Рис. 1

Продолжая тему джазовой гармонии на баяне

По следам предыдущих публикаций.

Сделал сводку по основным «джазовым» аккордам — см. рис. 1. Это для «До». Для остальных нот — всё по аналогии (у баянистов здесь не должно возникать вопросов).

На схеме в «числителе» указаны готовые аккорды, которые надо нажимать, а в «знаменателе» — басы. Нужный джазовый аккорд получается при одновременном нажатии баса и «готовых» аккордов.

Рис. 1

Эта информация будет полезна, например, для игры т.н. «turnaround progression» которая используется в очень многих джазовых произведениях:

Dm7 - G7 - Cmaj7 - A7

Вести с MIDI-полей

С момента публикации предыдущей заметки было сделано весьма много. Но работа велась исключительно над прошивкой, поэтому никаких фотографий или видео пока нет. (Какое-то видео запишу потом, когда всё сделаю; это будет видеопрезентация моего MIDI-баяна.)

А пока докладываю о том, что было сделано за всё это время:

  • В библиотеку работы со светодиодами я добавил режим медленного мигания светодиода. Пригодится для того, чтобы показывать, что данные текущего пресета (настроек тембров и прочих звуковых параметров) были изменены, но еще не сохранены в EEPROM.
  • Добавил глобальную настройку «Общая громкость» — чтобы можно было вручную настраивать громкость одновременно для всех активных MIDI-каналов.
  • Добавлено обновление значений громкости при включении/выключении датчика давления (значение общей громкости берется либо из датчика давления, либо из глобальной настройки соответственно).
  • Сделано обновление значений громкости в каналах левой руки при переключении режима готовой/выборной клавиатуры.
  • Сделано сохранение и восстановление глобальных настроек и пресетов в/из EEPROM (сохранение пресетов производится длительным нажатием кнопки соответствующего пресета, а глобальные настройки всегда автоматически сохраняются спустя 8 секунд с момента последнего изменения). В результате при включении баян приходит в то же состоянии, в каком он находился в момент выключения. Мне очень нравится, как всё получилось.
  • Сделал функцию отправки всех настроек в синтезатор. Настройки отправляются либо при смене пресета, либо по нажатию спец-кнопки на панели управления.
  • Добавил удобное переключения банков инструментов для синтезатора ATEMP. Для некоторых инструментов могут быть, а могут и не быть дополнительные варианты звучания; эти дополнительные варианты расположены в дополнительных т.н. «банках». В каких именно — описано в документации на синтезатор. Я сделал так, чтобы банки инструментов можно было менять только на те, в которых есть доп. инструменты; т.е. если для какого-то инструмента есть всего 3 варианта звучания, то для такого инструмента можно выбрать только один из этих 3-х вариантов (вместо того, чтобы перебирать все 127 возможных значений). Это на порядки упрощает поиск нужного тембра.
  • Сделан экран редактирования глобальных настроек (общая громкость, режим «running sttatus» и проч.)
  • Небольшой рефакторинг старого кода.

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

В исходниках уже 3910 строк; продолжаю работу над прошивкой.

Рис. 1

Мысли про скорость

Пока я нахожусь вдали от компьютера, приходят в голову разные мысли. Одна из них — это вопрос: способен ли будет мой баян перегрузить MIDI out порт командами в том случае, когда будут меняться настройки всех трёх активных midi каналов при нажатии кнопки «смена пресета». Для каждого канала надо будет установить примерно 15 параметров. Один параметр — это одна midi команда из 3-х байтов. Т.е. при смене пресета нужно будет отправить порядка 50 байт, и мне было интересно, сколько времени это может занять; будет ли эта задержка заметна во время игры.

А тут выдалось время на то, чтобы посчитать.

Скорость обмена данными у MIDI интерфейса — 31250 бод. То есть порядка 2900 байт в секунду. То есть порядка 1000 midi-команд в секунду. То есть мои несчастные 15 команд пролетят за 15 миллисекунд.

То есть можно вообще на этот счёт ни о чём не беспокоиться. Можно будет «щёлкать регистрами» во время игры сколько угодно. Главное, чтобы синтезатор был в состоянии обрабатывать команды с такой скоростью.

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

Рис. 1 (КДПВ)

Баян впервые собран

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

Можно играть обеими руками.

По механике — осталось герметизировать все отверстия и придумать, как крепить жгут проводов, идущий из одного полукорпуса в другой.

Черновая проверка датчика давления показала, что отработка нештатных ситуаций прошивкой работает отлично. 🙂 При одновременной работе датчика давления и большого количества музыкальных клавиш переполнялась внутренняя очередь MIDI-сообщений и прошивка вылетала в индикацию внутренней ошибки (баян перестаёт реагировать на внешние раздражители и высвечивает на светодиодах код ошибки). Видимо, очередь на 4 MIDI-сообщения была слишком маленькой; увеличил до 7. И слегка поменял внутреннюю логику разгребания этой очереди и отправки команд в синтезатор через MIDI-out порт.

Сейчас всё работает чётенько. 🙂

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

Рис. 1