Для чего

Тренажёры вроде monkeytype меряют скорость и точность, но не знают, на какой клавиатуре идёт набор. После переезда на split этого мало: нужно видеть перекос между руками, медленные пальцы и цену работы со слоями. Split Monkey знает физическую раскладку и keymap клавиатуры и считает статистику в этом разрезе. Целевое железо — Lily58 с QMK, настроенной через Vial.

Тренажёр

  • Режимы как у monkeytype: на время (15, 30, 60 секунд) и на число слов (10, 25, 50), с пунктуацией или без.
  • Скорость, точность и ровность темпа считаются так же, как в monkeytype, и цифры можно сравнивать.
  • Клавиатура под текстом. Под строкой нарисована Lily58 целиком: клавиша следующего символа обведена, нажатая подсвечивается. Если символ живёт на слое, подсвечиваются и активатор слоя, и сама клавиша.
  • Раскладка из Vial. Keymap загружается файлом .vil. Символы, которых на клавиатуре нет, в текст не попадают.

Аналитика

  • Баланс рук и доля чередования.
  • SFB: биграммы одним пальцем и их цена в миллисекундах.
  • Пальцы и клавиши: нажатия, ошибки, медианная задержка.
  • Цена слоя: насколько символы на слое медленнее базового.
  • История забегов с графиками динамики и профилем слабых мест по последним забегам.

Как считает

Браузер видит только результат работы прошивки: слой и mod-tap разрешаются внутри клавиатуры. Тренажёр восстанавливает физический путь каждого символа по загруженному keymap, выбирает путь с меньшим числом нажатий и учитывает, что заглавную букву левой руки набирают правым Shift. Разрез по слоям выводится из этого пути, остальные метрики измеряются по нажатым клавишам. Задержки агрегируются медианой, чтобы одна пауза на раздумье не искажала картину.

Под капотом

Nuxt, SQLite и ядро аналитики отдельным пакетом. Ядро принимает поток событий и не зависит от DOM, так что источник ввода можно заменить на WebHID без переписывания метрик. Разворачивается одной командой docker compose up. Тренажёр рассчитан на одного человека: входа нет, порт открыт только на localhost.