SpeedReaderRust: История одной идеи
С чего всё началось
Я читаю много технической документации. SDD (Specification Driven Development), RFC, спецификации — всё это приходится проглатывать в больших объёмах. Обычное чтение глазами упирается в скорость: вы всё равно тратите время на саккады (скачки глаза от слова к слову) и регрессии (возвраты назад по строке).
В какой-то момент я вспомнил про технику RSVP — Rapid Serial Visual Presentation. Это когда слова показываются одно за другим в одной точке экрана, а скорость задаётся количеством слов в минуту. Глазу не нужно двигаться — он просто смотрит в центр и схватывает слова.
Проблема существующих решений
Я погуглил готовые варианты. Есть веб-сервисы, есть мобильные приложения, есть плагины для браузеров. Но у всех одна и та же проблема:
- Не интегрируются с редактором — нельзя открыть файл из Zed и сразу читать
- Оверлей не настраивается — позиция на экране фиксированная
- Закрытый исходник — не добавить свою фичу
- Центральная буква не подсвечивается — а это, как оказалось, критически важно для скорости распознавания
Я решил написать свой. На Rust, конечно.
Почему Rust
Потому что:
- RSVP-ридер должен быть быстрым — слова мелькают с частотой 300+ в минуту, никаких пауз на GC
- Кроссплатформенность — Linux, macOS, Windows из одного кода
- Без зависимостей — не хотелось тащить Electron или Python
Я собрал минимальный прототип за вечер: winit для окна, ab_glyph для рендеринга шрифта, pixels для отрисовки пикселей. Получилось ровно то, что нужно.
Как это работает
Программа читает текстовый файл, токенизирует его на слова и выводит по одному в центре экрана. Каждое слово рендерится с подсветкой центральной буквы (ORP — Optimal Recognition Point).
Исследования показывают: когда глаз видит слово, он фокусируется не на первой букве, а примерно на ⅓ от начала. Подсветка этой буквы помогает мозгу быстрее распознать слово целиком. Это не просто прикол — это научно обоснованный приём, который реально увеличивает скорость чтения без потери понимания.
Интеграция с редактором
Киллер-фича: нажимаете Space — чтение ставится на паузу, и редактор (Zed, VS Code, Vim или любой другой) открывается ровно на том слове, где вы остановились. Никакого поиска по тексту, никакой потери контекста. Сфокусировались, отредактировали спеку и пошли дальше читать.
Настроил хоткей Cmd+Shift+R в Zed — и читаю любой открытый файл одной кнопкой. SDD, логи, сниппеты кода — всё, что можно открыть, можно и прочитать через RSVP.
Что дальше
Проект открыт на GitHub: github.com/bimawa/SpeedReaderRust
Установка одной командой:
cargo install speed-reader
Сейчас это рабочий MVP. В планах:
- Статистика чтения (средняя скорость, количество слов за сессию)
- Профили с разной скоростью под разные типы текстов
- Тёмная и светлая темы
Попробуйте — и пишите issue, если найдёте баг или придумаете фичу.