Перейти к содержимому

как это устроено

О проекте

Всё, что считает тренажёр, можно проверить по формулам ниже. Серверной части нет, поэтому нет и рейтингов: результат на вашем устройстве можно отредактировать, и честно доказать обратное было бы нечем.

Формулы

Слово здесь это 5 символов, включая пробел. Время считается от первого нажатия до конца теста, паузы вычитаются.

минуты = время / 60000 WPM (чистый) = верные_символы / 5 / минуты Сырой WPM = все_нажатия / 5 / минуты CPM = верные_символы / минуты Точность = (нажатия - ошибочные_нажатия) / нажатия * 100

Верные символы это те, что совпадают с эталоном на момент конца. Ошибочное нажатие остаётся в точности, даже если вы его исправили Backspace. Поэтому «чистый» WPM может быть ниже сырого, а точность ниже 100 % при полностью верном тексте.

Консистентность

cv = σ / μ по посекундному сырому WPM консистентность = 100 · (1 - tanh(cv + cv³/3 + cv⁵/5))

Чем ровнее темп по секундам, тем ближе к 100. Это та же сглаживающая функция, что используют популярные тренажёры, но числа с другими сервисами сравнивать нельзя: тексты и допущения разные. Для коротких тестов (меньше двух полных точек) значение не определено и показывается прочерком.

Задержки между клавишами

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

Слабые места

errRate = (ошибки + 1) / (попытки + 10) slow = ограничить((задержка_клавиши - средняя) / средняя, 0, 2) слабость = errRate + 0,05 · slow

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

Архитектура движка

Движок это чистый TypeScript без DOM, поэтому он целиком покрыт тестами на эталонных трассах и свойствами (fast-check). Vue-слой только рисует состояние.

  • engine/session.ts: состояние набора, паузы, Backspace и Ctrl+Backspace, композиция IME и мёртвые клавиши, журнал нажатий и посекундные ряды.
  • engine/metrics.ts: все формулы в одном месте.
  • engine/layouts.ts: раскладки, пальцы, положение символа.
  • engine/generator.ts, stats.ts: слова, адаптивные упражнения, серии, достижения.
  • engine/schema.ts: схема экспорта и строгая проверка импорта.
  • app/utils/textview.ts: отрисовка текста через createElement и textContent, без innerHTML.

Ввод принимается через beforeinput и события композиции скрытого поля: так работают экранные клавиатуры, IME и мёртвые клавиши. Вставка и перетаскивание текста блокируются. При потере фокуса тест встаёт на паузу.

Тексты и лицензии

Списки слов составлены автором проекта (CC0). Цитаты это короткие фрагменты произведений, перешедших в общественное достояние (авторы умерли более 70 лет назад), и собственные тексты автора. Фрагменты набраны по памяти и приведены к ASCII-пунктуации (ё→е, тире → дефис, кавычки прямые), мелкие расхождения с изданиями возможны. Фрагменты кода написаны автором.

КодИсточникЛицензия
ru-1А. С. Пушкин, «Евгений Онегин»общественное достояние
ru-2А. С. Пушкин, «Я помню чудное мгновенье»общественное достояние
ru-3М. Ю. Лермонтов, «Парус»общественное достояние
ru-4А. П. Чехов, «Дядя Ваня»общественное достояние
ru-5Ф. И. Тютчевобщественное достояние
ru-6А. С. Грибоедов, «Горе от ума»общественное достояние
ru-7Л. Н. Толстой, «Анна Каренина»общественное достояние
ru-8И. А. Крылов, «Волк и ягненок»общественное достояние
ru-9автор проектаCC0 (автор проекта)
ru-10автор проектаCC0 (автор проекта)
ru-11автор проектаCC0 (автор проекта)
ru-12автор проектаCC0 (автор проекта)
en-1W. Shakespeare, Hamletобщественное достояние
en-2W. Shakespeare, A Midsummer Night's Dreamобщественное достояние
en-3J. Austen, Pride and Prejudiceобщественное достояние
en-4C. Dickens, A Tale of Two Citiesобщественное достояние
en-5H. Melville, Moby-Dickобщественное достояние
en-6B. Franklin, Poor Richard's Almanackобщественное достояние
en-7L. Carroll, Through the Looking-Glassобщественное достояние
en-8A. Lincoln, Gettysburg Addressобщественное достояние
en-9project authorCC0 (автор проекта)
en-10project authorCC0 (автор проекта)
en-11project authorCC0 (автор проекта)
en-12project authorCC0 (автор проекта)

Шрифты IBM Plex (SIL Open Font License 1.1) лежат на этом же сайте. Навигация, скелетоны и WebGL-«пульс» это общий набор портфолио автора.

Ограничения

  • Нет серверной части, поэтому нет рейтингов и подтверждённых результатов.
  • Экспорт-импорт защищён от испорченных файлов, но не от самого владельца данных.
  • Dvorak, Colemak, Workman и фонетическая раскладка это подсказка на экране: печатать нужно на раскладке, включённой в системе.
  • Фонетическая схема собственная и не совпадает буква в букву с системными.
  • На телефоне и планшете метрики менее показательны, экранная клавиатура не имитируется.
  • Русские тексты без буквы ё (она заменяется на е).
  • Скорости, измеренные здесь, нельзя напрямую сравнивать с другими тренажёрами.

Автор: ewsir247, Telegram @Ewsirdev. Портфолио.