Анализ качества печати наборщика

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
Компания Трушин Дмитрий Витальевич
Учебный семестр Осень 2018
Учебный курс 2-3-й курс
Максимальное количество студентов, выбравших проект: 3-4



Что за проект?

О проекте

Данный проект вырос вокруг сообщества любителей печати вслепую klavogonki.ru. На данной открытой площадке тренируются в том числе и профессионалы, которые интересуются качеством набора печати. В рамках этого сообщества программистом-энтузиастом была создана программа Typing Statistics, которая является основным инструментом анализа качества печати. Основная проблема этой программы – она лишь на разные лады считает все возможные средние характеристики. Цель данного проекта – создать собственную программу, которая бы могла выхватить из сеанса по набору объективные характеристики физических возможностей наборщика.

Базовые идеи

Пусть мы хотим исследовать скорость набора. Если бы на клавиатуре набирал робот, то он нажимал бы каждую клавишу с постоянной скоростью. Однако, человек каждое отдельное нажатие совершает с различной скоростью. Потому на процесс нажатия клавиши можно смотреть как на случайный процесс, а скорость нажатия – это случайная величина. Каждая клавиша нажата со своей собственной скоростью, которая является реализацией нашей случайной величины. Потому наша задача восстановить плотность распределения этой случайной величины. Если мы знаем плотность случайной величины, то мы знаем абсолютно всю информацию о случайной величине, а значит, мы сможем вытащить из сеанса абсолютно любую информацию о скорости набора (в данном случае).

Текущее состояние проекта

На данный момент реализована альфа2 версия программы только под операционную систему Windows. Она способна вести перехват текста, анализировать сделанные ошибки в тексте (в разных режимах и не зная набираемый текст), восстанавливать плотность распределения скорости (в разных режимах), вычислять скорость максимального правдоподобия (MLE speed) – «несущую скорость» и устойчивые зоны скоростей. Ниже приведены два скриншота с перехваченным текстом и графиком плотности распределения. Набор выполнен Элеонорой Лукиной (чемпионом СССР по машинописи 1991 года) в рамках Интерстено 2018, напутствие. Сейчас происходит пересадка проекта на Windows независимые компоненты.

Направления развития проекта

Хочется сделать основной акцент на том, что основная задача проекта не абстрактные никуда не приводящие теоретические изыскания, а реализация на практике вполне простых (с математической точки зрения) идей. Идей, которые на выходе дают рабочий инструмент, помогающий наборщику узнать о своих сильных и слабых сторонах. Проект должен быть мультиплатформенным, удобным в использовании, вычислительные задачи должны выполняться быстро, код должен использовать современные парадигмы по разработке ПО на объектных языках программирования.

Важное замечание о проекте

Основная цель участия в проекте – помочь мне не делать все самостоятельно в одиночку. Это означает большое количество самостоятельной работы по изучению нового материала, освоением и внедрением. Я готов и буду прилагать все усилия в помощи с освоением любого материала, но вы должны быть готовы работать самостоятельно.

Чему научатся студенты

Следующий список скорее правильно озаглавить: «С чем есть шанс познакомиться»
• Не опускать руки перед ужасом предстоящих работ
• Понимание применения базовых идей теории вероятности на примере задачи о наборе текста
• Понимание устройства message driven систем
• Абстрактный математический подход к написанию программного обеспечения с использование шаблонов и метапрограммирования на C++
• Знакомство с Qt (читается cute)
• Знакомство с boost
• Знакомство с параллельными вычислениями
• Знакомство с SIMD
• Знакомство с низкоуровневым перехватом клавиатуры
• Знакомство с некоторыми шаблонами проектирования
• Умение писать надежный читаемый код

Какие начальные требования


• Огромное желание что-то сделать
• Знание языка C++, желательно понимание наследования и шаблонов.
• Для некоторых задач потребуется знание любого скриптового языка. Можно использовать Python или любой другой.
• Желательно умение читать технические статьи на английском, а в идеале умение понимать видео доклады с cppcon.

Какие технологии будут использоваться

Следующий список не означает, что придется изучать все и сразу, это лишь перечень того, с чем можно соприкоснуться при работе над проектом.
• Основной язык проекта – C++(14).
• Qt Creator используется в качестве IDE для текущей версии альфа3.
• ISPC для SIMD кода.
• Библиотека PPL для параллельных вычислений (в версии альфа3).
• Библиотека boost.
• Система GraphViz для работы с графами. Только для задач на Python по поддержке структуры проекта.

Темы вводных занятий


1. Описание основных математических идей в реализации проекта
2. Описание структуры альфа2 версии программы и ее функционала.
3. Описание текущей альфа3 версии программы.
4. Описание конкретных модулей для реализации в альфа3 версии программы.
5. Дальнейшие встречи предполагаются для разбора и обсуждения изученного студентами материала и обсуждения продвижения в рамках поставленной задачи.

Направление развития

Примеры задач в рамках развития функционала альфа2
• Внедрение температурного вывода текста
• Анализ скорости отпускания клавиш
• Анализ плотности распределения ошибок
Примеры задач в рамках переноса функционала на альфа3
• Вывод данных с использованием Qt Model-View-Controllers, например, QTreeView, QListView и прочие.
• Вывод графиков плотностей с использованием qwt или QChart.
• Вывод клавограммы с использованием qwt или QChart.
• Реализовать обработчик какого-нибудь элемента интерфейса для взаимодействия с ядром программы.
• Собрать вычислительный pipeline с кэшированием данных для работы с сеансом набора.
• Реализовать систему редактирования сеанса с поддержкой дерева состояний.
• Пересадить модуль параллельных вычислений с native windows thread pool на PPL.
• Реализовать платформонезависимый сериализатор данных. Разработать формат для файлов данных Typing Analysis.
• Написать конвертор файлов Typing Statistics в файлы Typing Analysis.
• Модифицировать структуру данных сеанса до платформонезависимого состояния.


В качестве сторонней задачи на скриптовом языке: написать скрипт описывающий структуру проекта, например, граф include-зависимостей файлов (с настройками различных аспектов графа).

Критерии оценок

Критерии оценки сильно варьируются в зависимости от конкретного задания в рамках проекта. Но можно ориентироваться на следующее

  • 4-5 Теоретическое описание того как должен функционировать реализуемый модуль программы. Описание

всех ключевых элементов с указанием используемых структур данных и алгоритмов.

  • 6-7 Реализация отдельно функционирующего модуля по теоретическому описанию. Соблюдение требований

к коду. Код корректно работает.

  • 8-10 Внедрение модуля в альфа3 версию (или альфа2 версию).

Ориентировочное расписание занятий

По договоренности. Скорее всего любой рабочий день кроме четверга

Контакты

Трушин Дмитрий Витальевич dtrushin@hse.ru