Пользуясь случаем, напомню о том, что самый вкусный йогурт — самодельный. Рецепт я публиковал ранее, но повторю уже здесь. С учётом накопленного опыта.
Молоко жирностью не меньше 3.2% (а лучше все 6%) — 2 л (я беру вот такое)
закваска — 1 бутылочка «Иммунеле» (даёт лучший результат из всех опробованных)
сахарный песок
В качестве порционной тары я использую баночки из-под томатной пасты.
В каждую баночку отливаем немного, по чайной ложке, закваски («Иммунеле»). Одна бутылочка как раз нормально распределяется на 8 порций. Затем в каждую баночку кладём по 0.5 чайной ложки сахара. Это для того, чтобы закваска веселее заработала. Разливаем 2 литра молока по подготовленным банкам. Тщательно размешиваем, чтобы растворился сахар.
Ставим баночки в духовку, выставляем температуру на 37 градусов. Держим в духовке 7-8 часов. Дольше 8 часов держать нельзя! Начнёт отсекаться сыворотка.
Йогурт получается отличный: весьма густой (не вываливается из баночек, даже если их переворачивать) и с очень приятной текстурой.
Как я докладывал ранее, в домашней сетке был разведён собственный DNS-сервер.
И сегодня я полез проверить, как с этим всем теперь будет работать единственный домашний комп на 10-й винде.
И опасения полностью подтвердились.
Когда я её устанавливал на этот комп, я большинство настроек оставлял по-умолчанию, меняя только то, что нужно для типовых задач этого компа.. А сейчас я полез со своими проверками туда, куда до сих пор не залезал. И обнаружил интересное.
IPv6 DNS
Оказывается, винда в безальтернативном порядке выбирает DNS-сервер с IPv6 адресом. Такой DNS-сервер у меня есть, и это, как нетрудно догадаться, мой роутер ZyXEL Keenetic. И опцию «IPv6 DNS-сервер» в нём можно выключить только вместе с поддержкой, собственно, IPv6. Ни на какие другие варианты мой Зухель не согласен; говорит «хочешь ты или не хочешь — а я буду DNS-сервером для IPv6». Я никогда бы не узнал об этом, если бы не развернул альтернативный DNS-сервер.
Ну думаю, ладно. Просто укажу в настройках винды, что для IPv6 нужно игнорировать предложенный адрес DNS-сервера.
Фигвам. Нет такой настройки в винде. Выбор есть между вариантами: а) использовать сервер, полученный по DHCP; б) задать адрес своего DNS-сервера, причем указать можно только IPv6 адрес (что логично).
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 и при этом нормально виден с винды!
Я даже не могу сказать, было ли так всегда, или всё испортилось недавно, потому что той работе, для которой предназначена эта винда, данный удивительный глюк не мешает. Но блин!
Кнопки вставлены «просто так», платы внутри корпуса пока нет, и вместо зкранчика пока синий скотч.
Выглядит, вполне ожидаемо, как «корпус, напечатанный на 3D принтере». Пока пусть будет так, как есть. В будущем, может быть, я сподоблюсь как-то отшлифовать наружную поверхность, чтобы было гладко и блестяще (или хотя бы матово).
На днях я в очередной раз занимался настройкой всякого домашнего компьютерного, и осознал, что IP адреса всяких домашних устройста уже перестают держаться в голове; приходится лазить в админку роутера, чтобы вспомнить.
Не нравится. Хочу конфигурировать вообще всё, используя имена, а не адреса. А для этого нужен DNS-сервер на локальную сетку.
Изучение вопроса навело меня на очень и очень интересный проект: Pi-hole. Это оказалось именно то, что доктор прописал.
Оно без проблем утановилось на мой принт-сервер, который у меня крутится на OrangePi. Конфигурируется оно тривиально просто, и возможностей вполне хватает для небольшой домашней сетки. Теперь все адреса везде с чувством глубокого удовлетворения я меняю на имена.
Поскольку прошивка готова, и датчики настроены, нужно продвигаться к следующему этапу: 3D печать корпуса панели управления и кнопок. Эскиз расположения кнопок и светодиодов на плате у меня был, на его основе и разрабатывал модель корпуса.
Сначала сделал модель самой печатной платы, чтобы по ней проверять правильность расположения отверстий в корпусе и правильность размеров кнопок. Потом нарисовал корпус, кнопки, и объединил всё в сборку. Очень удобно всё это делать в Компас 3D: делаешь сам корпус временно невидимым, и можешь проверять, как кнопки располагаются относительно микровыключателей, запаянных на плату. Как раньше без таких программ жили — решительно непонятно.
Вроде норм. Единственное место, которое мне не нравится — это расположение левой «стрелки» вплотную к экрану. Надо было разнести ещё миллиметра на 3. Но уже поздно; расположение элементов определяется платой, а её я переделывать совершенно точно не буду.
Теперь надо прицениться к печати этого корпуса и 22-х кнопок (16 на Ø10 мм, и 6 на Ø15 мм).
Взрыв-схема сборки панели управления выглядит так:
Сегодня вечером после работы я закончил работу над прошивкой MIDI-баяна. Даже не верится. Реализовал все функции, которые хотел:
Полная поддержка готово-выборной левой клавиатуры. На механизм переключателя установлен свой собственный датчик, и контроллер при включении сам определяет текущий режим. Само собой, переключение режимов тоже определяется. В готовом режиме басы и аккорды играют в разные MIDI каналы, которые можно настраивать совершенно независимо. Т.е. на бас можно настроить звук контрабаса, а на аккорды — гитару или, например, фортепиано. В режиме выборной клавиатуры вся левая рука играет в один канал (что логично). Само собой, канал для выборки настраивается независимо от каналов баса и аккордов.
Особенность конструкции левой клавиатуры моего баяна в том, что басы там играют октавами. Т.е. при нажатии одной клавиши баса механизм открывает два клапана: одна нота в контроктаве и одновременно с ней та же нота в большой октаве. Для баяна это хорошо, т.к. добавляет красок в басовый звук. А вот для MIDI инструмента — это уже недостаток, т.к. далеко не каждый инструмент будет хорошо звучать с октавами в басах. Поэтому я сделал спец-режим «запрет октав в басах». Если он включен, то контроллер игнорирует нажатия более высоких басовых нот, если уже нажата соответствующая низкая нота. Само собой, датчики должны быть настроены так, чтобы датчик низкой ноты срабатывал чуть-чуть раньше, чем датчик высокой ноты.
Работа меха регистрируется дифференциальным датчиком давления, который измеряет разницу между давлением внутри герметичного корпуса и давлением снаружи. Также есть режим игры с выключенным датчиком давления; в этом случае громкость звука настраивается через меню настроек.
Имеется возможность сохранения 6 вариантов настроек всех MIDI-каналов (правая рука, бас, аккорд и выборка) — т.н. «пресетов». Каждый пресет включается своей кнопкой; текущий пресет обозначается соответствующим горящим светодиодом. (См. заметку про дизайн панели управления.) Запоминание настроек происходит интуитивно просто: как только все звуки настроены как надо, достаточно нажать и удерживать кнопку соответствующего пресета. После обнаружения длительного нажатия, соответствующий светодиод сначала быстро заморгает, обозначая, что «сейчас будет записан выбранный пресет». Если в течение 3-х секунд после начала моргания кнопку не отпустить, то пресет запишется в энергонезависимую память (EEPROM). По похожему алгоритму запоминаются радиостанции в некоторых автомагнитолах.
Поскольку настроек у MIDI каналов много, и перебирать их через меню не всегда удобно, реализованы 4 настраиваемых кнопки быстрого доступа к настройкам. Если в момент редактирования нужного параметра нажать и удерживать кнопку быстрого доступа, то эта кнопка станет связана с этим самым параметром. И для повторного изменения данного параметра достаточно будет один раз коротко нажать эту кнопку быстрого доступа (и сразу можно будет менять параметр «стрелочками»). Очень удобно.
Если контроллер обнаруживает, что настройки звука изменились, то светодиод текущего пресета начинает медленно мигать, показывая, что имеются несохранённые изменения. Эти изменения можно сохранить либо в текущем пресете, либо в любом другом. А можно и не сохранять.
Имеется встроенная ритм-машина, которая может работать в двух режимах:
ручной — когда при каждом нажатии басовых клавиш проигрывается один звук ударных инструментов (например барабан «бочка»), а при нажатии аккордов — другой звук (например «тарелка»).
автоматический — когда проигрываются заранее запрограммированные мелодии (в данный момент у меня сделаны 5 штук: 2 метронома (3/4 и 4/4) и 3 простых ритма). Автоматический режим может стартовать либо по кнопке на панели управления, либо при первом нажатии любой басовой клавиши.
Имеется «упрощенный» режим выбора некоторых настроек, адаптированный специально для синтезатора ATEMP MIDI HW Synth. В этом режиме значения параметров, не реализованные в синтезаторе, просто пропускаются; выбрать можно только то, что поддерживается синтезатором. В основном это касается выбора дополнительных банков инструментов.
Все настройки сохраняются с энергонезависимой памяти, и при следующем включении инструмент восстанавливает то состояние, в котором он был выключен.
Когда закончу работу над механической частью (герметизация технических отверстий в корпусе и крепление декоративной решетки правой клавиатуры), запишу видеоролик с демонстрацией этого всего.
Сделал сводку по основным «джазовым» аккордам — см. рис. 1. Это для «До». Для остальных нот — всё по аналогии (у баянистов здесь не должно возникать вопросов).
На схеме в «числителе» указаны готовые аккорды, которые надо нажимать, а в «знаменателе» — басы. Нужный джазовый аккорд получается при одновременном нажатии баса и «готовых» аккордов.
Эта информация будет полезна, например, для игры т.н. «turnaround progression» которая используется в очень многих джазовых произведениях:
С момента публикации предыдущей заметки было сделано весьма много. Но работа велась исключительно над прошивкой, поэтому никаких фотографий или видео пока нет. (Какое-то видео запишу потом, когда всё сделаю; это будет видеопрезентация моего MIDI-баяна.)
А пока докладываю о том, что было сделано за всё это время:
В библиотеку работы со светодиодами я добавил режим медленного мигания светодиода. Пригодится для того, чтобы показывать, что данные текущего пресета (настроек тембров и прочих звуковых параметров) были изменены, но еще не сохранены в EEPROM.
Добавил глобальную настройку «Общая громкость» — чтобы можно было вручную настраивать громкость одновременно для всех активных MIDI-каналов.
Добавлено обновление значений громкости при включении/выключении датчика давления (значение общей громкости берется либо из датчика давления, либо из глобальной настройки соответственно).
Сделано обновление значений громкости в каналах левой руки при переключении режима готовой/выборной клавиатуры.
Сделано сохранение и восстановление глобальных настроек и пресетов в/из EEPROM (сохранение пресетов производится длительным нажатием кнопки соответствующего пресета, а глобальные настройки всегда автоматически сохраняются спустя 8 секунд с момента последнего изменения). В результате при включении баян приходит в то же состоянии, в каком он находился в момент выключения. Мне очень нравится, как всё получилось.
Сделал функцию отправки всех настроек в синтезатор. Настройки отправляются либо при смене пресета, либо по нажатию спец-кнопки на панели управления.
Добавил удобное переключения банков инструментов для синтезатора ATEMP. Для некоторых инструментов могут быть, а могут и не быть дополнительные варианты звучания; эти дополнительные варианты расположены в дополнительных т.н. «банках». В каких именно — описано в документации на синтезатор. Я сделал так, чтобы банки инструментов можно было менять только на те, в которых есть доп. инструменты; т.е. если для какого-то инструмента есть всего 3 варианта звучания, то для такого инструмента можно выбрать только один из этих 3-х вариантов (вместо того, чтобы перебирать все 127 возможных значений). Это на порядки упрощает поиск нужного тембра.
Сделан экран редактирования глобальных настроек (общая громкость, режим «running sttatus» и проч.)
Небольшой рефакторинг старого кода.
И в данный момент а баяне уже можно довольно комфортно играть, не тратя кучу времени на настройку звуков при каждом включении.
В исходниках уже 3910 строк; продолжаю работу над прошивкой.
Пока я нахожусь вдали от компьютера, приходят в голову разные мысли. Одна из них — это вопрос: способен ли будет мой баян перегрузить MIDI out порт командами в том случае, когда будут меняться настройки всех трёх активных midi каналов при нажатии кнопки «смена пресета». Для каждого канала надо будет установить примерно 15 параметров. Один параметр — это одна midi команда из 3-х байтов. Т.е. при смене пресета нужно будет отправить порядка 50 байт, и мне было интересно, сколько времени это может занять; будет ли эта задержка заметна во время игры.
А тут выдалось время на то, чтобы посчитать.
Скорость обмена данными у MIDI интерфейса — 31250 бод. То есть порядка 2900 байт в секунду. То есть порядка 1000 midi-команд в секунду. То есть мои несчастные 15 команд пролетят за 15 миллисекунд.
То есть можно вообще на этот счёт ни о чём не беспокоиться. Можно будет «щёлкать регистрами» во время игры сколько угодно. Главное, чтобы синтезатор был в состоянии обрабатывать команды с такой скоростью.
Очень хочется добраться до компа и продолжить доводить прошивку баяна до рабочего состояния, реализуя все задуманные функции.
В эти выходные я закончил настройку датчиков левой клавиатуры, начисто прикрутил плату датчиков, просверлил в деке отверстие, вывел жгут проводов от левой клавиатуры в герметичный объём, и подключил левую клавиатуру к общей схеме.
Можно играть обеими руками.
По механике — осталось герметизировать все отверстия и придумать, как крепить жгут проводов, идущий из одного полукорпуса в другой.
Черновая проверка датчика давления показала, что отработка нештатных ситуаций прошивкой работает отлично. 🙂 При одновременной работе датчика давления и большого количества музыкальных клавиш переполнялась внутренняя очередь MIDI-сообщений и прошивка вылетала в индикацию внутренней ошибки (баян перестаёт реагировать на внешние раздражители и высвечивает на светодиодах код ошибки). Видимо, очередь на 4 MIDI-сообщения была слишком маленькой; увеличил до 7. И слегка поменял внутреннюю логику разгребания этой очереди и отправки команд в синтезатор через MIDI-out порт.
Сейчас всё работает чётенько. 🙂
Но с прошивкой ещё возиться и возиться. Это для отладки электроники и механики там сейчас есть всё, что надо. А для игры не хватает ещё много чего. Продолжу работу над баяном после 15 августа. А пока другие дела.