nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 15:14



Reply to topic  [ 5 posts ] 
Glazeur / Глазурь (иллюминация из нескольких клавиатур) 
Author Message
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
Вашeму вниманию предлагается один из моих уникальных OpenSource-проектов, не имеющего серъёзного утилитарного назначения и являющегося лишь экспериментальным кодом для узкого специфического применения. Ближайщий из похожих проектов, который мне поисковая система выдаёт, это подобное… Так как до этого я писал в основном оконные приложения, консольными не занимался вообще. Потому данный проект стал уже одним из самых сложных консольных, что приходилось мне писать… :roll:
(Если кто-то хоть разок пытался программно поморгать индикаторами хотя бы на паре клавиатур, тот уже знает, что самым быстрым и лёгким способом можно моргать либо индикаторами всех клавиатур одновременно, либо индикаторами только основной клавиатуры. Изначально, стандартные средства WinAPI не предоставляют возможности независимого управления несколькими клавиатурами, так как Windows - однопользовательская. Что уже местами работает на пользу чисто «спортивного интереса» на слабо…)

«Глазурь» - консольный проект для управления индикаторами на нескольких клавиатурах, количество которых может достигать 9 штук, что в сумме может составлять всего 27 индикаторов NumLock/CapsLock/ScrollLock. Не важно, какие это клавиатуры - usb, ps/2 или ps/2 через usb-переходники. Так же не важно, исправные они или вместо корпуса остались только платки с контроллером. Главное, чтобы система их распознавала и их индикаторы исправно управлялись.
Для управления индикаторами «лишних» клавиатур необходимо верно указать их логическую последовательность в системе, либо просто физически конструктивно правильно расположить…

«Глазурь» - утилита, которая имеет несколько режимов работы.
В псевдо-автоматическом режиме ей можно «скормить» файл с текстовым вариантом любой трекерной композиции, которую можно достаточно легко в ModPlug Tracker'е манипуляциями copy-paste перенести в Блокнот текстом и сохранить. В этом случае «Глазурь» откроет этот текстовый файл, отыщет окно самого ModPlug Tracker'а и пошлёт ему команду «Play» для организации практически синхронного проигрывания композиции как трекером аккустически, так и собственным парсером с визуальным перемигиванием индикаторами всех заранее заданных клавиатур. Естественно, этот режим мало подходит для полноценной эффективной организации иллюминации на клавиатурах.
Для автоматического режима утилитой открывается файл нужного сценария, написанного на специально разработанном для этого скрипте. Посредством «глазурь-скрипта» предоставляется практически полный контроль над всей индикацией клавиатур.
В режиме ручного управления в окне консоли можно отрабатывать отдельные фрагменты эффектов. В основном, только через copy-paste, так как с клавиатуры нет прямой возможности набирать многие из операторов, в силу синтаксической особенности скриптового языка.

Так как в области управления индикаторами клавиатур сценарией интернет никак не может помочь и здесь утилита является уникальным инструментом, пришлось с чистого листа пытаться разработать общую модель «глазурь-языка». Первоначально планировалось использовать стандартные ключевые слова, как «repeat», «clear», «show». А переключения индикаторов описывать восьмиричным кодом… Однако, такой способ оказался и громоздким, и сложным для восприятия из-за трудностей перевода воображаемой картины эффекта в очередь восьмиричного представления… :esurprised:
Очень скоро мною вспомнился справочник по языку АПЛ, где основной отличной особенностью языка от остальных ЯВУ был набор специфических символов, требующих наличия терминала со специализированной расширенной клавиатурной раскладкой. Тем самым, обратившись к Unicode-наборам в интернете, было замечено, что набор брайля почти идеально подходит для визуального представления переключающихся индикаторов. Не «побрезговав» и остальными символиками, их я отобрал и включил в поддержку своим парсером… :idea:

Интерактивное окно консоли мало подходит для непосредственного набора в ней специфических символов Unicode-набора. Отображение знаков так же сильно ограниченно и многое отображается знаками вопроса. А многочисленные поиски в интернете не дали существенного результата, так как требуется наличие шрифта, поддерживающего растровое отображение всех нужных символов в консоли.
Однако, метод copy-paste хорошо работает и функция чтения строки «широких символов» исправно всё передаёт парсеру на разбор. Тем самым, можно просто вставлять фрагменты сценария в консоль и наблюдать за результатом… :ewink:

«Глазурь-скрипт - синтаксис»
Синтаксис языка достаточно прост и имеет несколько правил:
Строка считается комментарием и игнорируется, если она открывается любым печатаемым символом:
Code:
«Глазурь-скрипт» приветствует Вас!

Символом табуляции открывается цикл парсинга строки операторов и любым следующим символом табуляции он прерывается:
Code:
«Глазурь-скрипт» приветствует Вас!
⇥   250㎳ 100㎐⇥   Интервалом задержки устанавливаем темп исполнения сценария и задаём частоту регенерации индикаторов

Любая игнорируемая строка комментария, предшедствующая операторам печати логов, также служит им «строкой форматирования»:
Code:
«Глазурь-скрипт» приветствует Вас!
⇥   250㎳ 100㎐⇥   Интервалом задержки устанавливаем темп исполнения сценария и задаём частоту регенерации индикаторов
⇥   ⎙4⏱⎚⇥   ⇥   Печатаем «строку форматирования», ждём 4 интервала (1 сек.) и удаляем строку с печати

Строка открывается как начало параграфа, если она начинается символом параграфа с индексом:
Code:
«Глазурь-скрипт» приветствует Вас!
⇥   250㎳ 100㎐⇥   Интервалом задержки устанавливаем темп исполнения сценария и задаём частоту регенерации индикаторов
⇥   ⎙4⏱⎚⇥   ⇥   Печатаем «строку форматирования», ждём 4 интервала (1 сек.) и удаляем строку с печати
§1

Следующие строки будут дополнять открытый параграф до первой пустой строки:
Code:
«Глазурь-скрипт» приветствует Вас!
⇥   250㎳ 100㎐⇥   Интервалом задержки устанавливаем темп исполнения сценария и задаём частоту регенерации индикаторов
⇥   ⎙4⏱⎚⇥   ⇥   Печатаем «строку форматирования», ждём 4 интервала (1 сек.) и удаляем строку с печати

§1
⇥   0㎳⤵⇥   ⇥   Сброс локальных коэффициентов параграфа и отделение комментария табуляцией
Это - параграф №1
⇥   ⎙⏱⎚⏱⇥   Пауза в 1 интервал темпа исполнения с печатью и очисткой

Основное тело цикла всегда дополняется строчками, отделяемыми от тела любого параграфа пустыми строками:
Code:
«Глазурь-скрипт» приветствует Вас!
⇥   250㎳ 100㎐⇥   Интервалом задержки устанавливаем темп исполнения сценария и задаём частоту регенерации индикаторов
⇥   ⎙4⏱⎚⇥   ⇥   Печатаем «строку форматирования», ждём 4 интервала (1 сек.) и удаляем строку с печати

§1
⇥   0㎳⤵⇥   ⇥   Сброс локальных коэффициентов параграфа и отделение комментария табуляцией
Это - параграф №1
⇥   ⎙⏱⎚⏱⇥   Пауза в 1 интервал темпа исполнения с печатью и очисткой

⇥   §1 3(↝)⇥   ⇥   Циклическое построчное выполнение 3 раза параграфа №1


«Глазурь-скрипт - отладка и циклы»
Любые операции, экранированные скобками с любым числовым индексом будут выполнятся заданное число раз.
Если же цикл определяется дробным числом, то после целого количества циклов будут дополнительно исполнены те операции цикла, которые не выходят за пределы его дроби, определяемой символом «;» (точки с запятой):
Code:
⇥   3½(«эта часть выполняется 4 раза»; «эта часть выполняется 3 раза»)
⇥   2⅔(«эта часть выполняется 3 раза»; «эта часть выполняется 3 раза»; «эта часть выполняется 2 раза»)


«Глазурь-скрипт - операторы и симуляция»
На страничке проекта можно найти общее описание сигнатур операторов.
Спроектировать собственный сценарий и посмотреть симуляцию на экране можно с помощью «Глазуриста» - онлайн js-инструмента…
(Спроектировав сценарий в браузере и скопировав текст в консоль, я убеждаюсь в корректности и практически полном совпадении его «воспроизведения» как на экране, так и индикаторами физических клавиатур, так как js-скрипт был практически весь вручную портирован с исходного консольного Си-проекта и потому местами выглядит крайне странно…)
Первый вариант пробной работы утилиты с восьмиричным управлением индикаторами можно увидеть на видео:


P.S.: Предварительный черновой рабочий вариант можно скачать этой ссылкой.
После распаковки, в папке «Glazeur» откройте файл Glazeur.exe (VirusTotal-анализ)…
Раньше консоль была более гибкой, но на данный момент рекомендую лишь несколько стабильных опций:
Введите «:» (двоеточие) для запуска сохранённого скрипта текущей сессии (по-умолчанию - сессия #1 и папка /session_00000001/);
Введите «.» (точку), чтобы завершить текущую сессию;
Жмите ESC во время исполнения сценария для его прерывания…

Был несколько обновлён и доработан также Глазурист. Практически всё, на что способна оригинальная консольная программа, доступно и в рамках «Глазуриста»…
Тем самым, скопировав с окна Глазуриста свой собственный глазурный сценарий в буфер обмена, его можно вставить в окно консоли правым кликом, после чего начнётся его немедленное исполнение. В папке текущей сессии файл сценария также обновится.

Как пользоваться: Что в окне консоли, что в поле ввода страницы Глазуриста, можно нажимать клавиши 0-9 левой части клавиатуры, клавиши 0-9 правой части клавиатуры, а также клавиши A-Z. Что будет переключать исполнение сценария на соответствующую метку непосредственно в режиме реального времени. Если метка определена в сценарии, нажатие клавиши, закреплённой за ней, переключит исполнение на ту метку…
(В Глазуристе достаточно полный набор токенов-значков с всплывающими подсказками, удобными для интуитивного изучения)
Естественно, в каждом сценарии свой собственный набор «интерактивных меток» со своими эффектами…

Можете здесь обязательно сообщать о багах…
Возможно Ваша клавиатура не будет мигать, так как она единственная. В этом случае нужно перезадать свою очередь клавиатур в сценарии…

P.P.S.: Критикам моего бесполезного «произведения» я сразу скажу похожим рекламным лозунгом:
«Вы это ещё не делали? Тогда я сделаю это за Вас!»… :mrgreen:


Last edited by Paguo-86PK on 07 Nov 2017 05:36, edited 3 times in total.



14 Oct 2017 04:43
Profile WWW
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
reserved by author


14 Oct 2017 04:45
Profile WWW
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
Нo не плохо же будет, если я здесь объявлю мини-конкурс на лучший сценарий, который я скормлю затем своей программе и сниму всё на веб-камеру в более хорошем качестве.
Главная загвоздка в том, что если я использую абсолютно все доступные мне клавиатуры, то их число будет равно пяти (консольная Глазурь и html Глазурист поддерживают ровно 9).
Так что, на досуге можете, если захотите, набросать свой глазурь-сценарий для пяти клавиатур и я к новому году сниму новое видео моргания физических клавиатур.
(Так как проект в целом всё ещё активно жарится, в нём появляются новые интересные фишки. Достаточно стабильные из которых буду описывать на главной страничке github-проекта. Из набора значков в редакторе можно видеть, что зарезервировал красивых значков я достаточно много, но назначения им ещё не придумал)


14 Oct 2017 04:47
Profile WWW
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
А мне понравилось :mrgreen: Так как то по идиотски просто, но классно.

_________________
https://t.me/tronix_blog


14 Oct 2017 07:57
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
Итaк, предварительный черновой рабочий вариант можно скачать этой ссылкой.
После распаковки, в папке «Glazeur» откройте файл Glazeur.exe (VirusTotal-анализ)…
Раньше консоль была более гибкой, но на данный момент рекомендую лишь несколько стабильных опций:
Введите «:» (двоеточие) для запуска сохранённого скрипта текущей сессии (по-умолчанию - сессия #1 и папка /session_00000001/);
Введите «.» (точку), чтобы завершить текущую сессию;
Жмите ESC во время исполнения сценария для его прерывания…

Был несколько обновлён и доработан также Глазурист. Практически всё, на что способна оригинальная консольная программа, доступно и в рамках «Глазуриста»…
Тем самым, скопировав с окна Глазуриста свой собственный глазурный сценарий в буфер обмена, его можно вставить в окно консоли правым кликом, после чего начнётся его немедленное исполнение. В папке текущей сессии файл сценария также обновится.

Как пользоваться: Что в окне консоли, что в поле ввода страницы Глазуриста, можно нажимать клавиши 0-9 левой части клавиатуры, клавиши 0-9 правой части клавиатуры, а также клавиши A-Z. Что будет переключать исполнение сценария на соответствующую метку непосредственно в режиме реального времени. Если метка определена в сценарии, нажатие клавиши, закреплённой за ней, переключит исполнение на ту метку…
(В Глазуристе достаточно полный набор токенов-значков с всплывающими подсказками, удобными для интуитивного изучения)
Естественно, в каждом сценарии свой собственный набор «интерактивных меток» со своими эффектами…

P.S.: Можете здесь обязательно сообщать о багах…
Возможно Ваша клавиатура не будет мигать, так как она единственная. В этом случае нужно перезадать свою очередь клавиатур в сценарии…


03 Nov 2017 19:41
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 5 posts ] 

Who is online

Users browsing this forum: No registered users and 17 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.