как это устроено
О проекте
Всё, что считает тренажёр, можно проверить по формулам ниже. Серверной части нет, поэтому нет и рейтингов: результат на вашем устройстве можно отредактировать, и честно доказать обратное было бы нечем.
Формулы
Слово здесь это 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-1 | W. Shakespeare, Hamlet | общественное достояние |
| en-2 | W. Shakespeare, A Midsummer Night's Dream | общественное достояние |
| en-3 | J. Austen, Pride and Prejudice | общественное достояние |
| en-4 | C. Dickens, A Tale of Two Cities | общественное достояние |
| en-5 | H. Melville, Moby-Dick | общественное достояние |
| en-6 | B. Franklin, Poor Richard's Almanack | общественное достояние |
| en-7 | L. Carroll, Through the Looking-Glass | общественное достояние |
| en-8 | A. Lincoln, Gettysburg Address | общественное достояние |
| en-9 | project author | CC0 (автор проекта) |
| en-10 | project author | CC0 (автор проекта) |
| en-11 | project author | CC0 (автор проекта) |
| en-12 | project author | CC0 (автор проекта) |
Шрифты IBM Plex (SIL Open Font License 1.1) лежат на этом же сайте. Навигация, скелетоны и WebGL-«пульс» это общий набор портфолио автора.
Ограничения
- Нет серверной части, поэтому нет рейтингов и подтверждённых результатов.
- Экспорт-импорт защищён от испорченных файлов, но не от самого владельца данных.
- Dvorak, Colemak, Workman и фонетическая раскладка это подсказка на экране: печатать нужно на раскладке, включённой в системе.
- Фонетическая схема собственная и не совпадает буква в букву с системными.
- На телефоне и планшете метрики менее показательны, экранная клавиатура не имитируется.
- Русские тексты без буквы ё (она заменяется на е).
- Скорости, измеренные здесь, нельзя напрямую сравнивать с другими тренажёрами.