Я участвовал в конференции «Инженеры будущего» для школьников в Москве в апреле 2024 года и рассказал о своем опыте в предыдущей статье на Хабре https://habr.com/ru/articles/810939/
Мой проект – обучающее мобильное приложение RuLearn – участвовал в секции «Программирование. Разработка программ, приложений, веб-сайтов». Для обучения RuLearn реализует метод интервальных повторений. Возможно, вы уже видели сотни разных приложений на эту тему и скажете, что еще одно просто не нужно. Но мне найдется, что возразить:
Все-таки разработка под Андроид – это не самое простое занятие, особенно после появления Jetpack.
Все-таки 10 000 строчек кода — это 10 000 строчек кода, особенно во время учебы в школе.
Все-таки это вполне «взрослое» приложение, повторяющее функции Memrise (https://www.memrise.com). Авторы Memrise недавно кинули своих верных фанатов, отказавшись поддерживать курсы, создаваемые самими пользователями. Memrise использовался в моей семье около 10 лет. У меня дома все учат иностранные языки, мой старший брат - победитель Всероссийской олимпиады по немецкому. В будущем нужно будет знать китайский, и это уже не так просто, как учить банальный английский – нужны инструменты, которые помогут в процессе. Так вот, приложение RuLearn сейчас реально используется каждый день, для него сделали курсы на арабском, английском, немецком, испанском языках, для изучения географии итд – всего больше 15000 карточек.
Жюри конкурса согласилось с этими аргументами, и я стал победителем. Хотелось бы развивать свой проект и дальше. Но обо всем по порядку, а то запутаемся.
Теоретической базой для алгоритмов интервального повторения, применяющихся в моем RuLearn, являются работы немецкого психолога Германа Эббингауза, который проводил эксперименты по изучению памяти в XIX веке. Он показывал обучающимся карточки, на которых была информация для изучения и обнаружил, что максимальная эффективность достигается при повторении заучиваемой информации через определенные промежутки времени. Сейчас бумажные карточки можно сделать электронными. Гаджет сам может определить необходимость освежить информацию в памяти и предложить повторить только то, что находится на грани забывания. Таким образом, сокращается время «зубрежки». Лучше и чаще всего эта методика применяется для изучения иностранных языков. Тем не менее, нет никаких сложностей, чтобы адаптировать алгоритмы интервальных повторений для запоминания математических формул или географических карт.
Летом 2023 года я решил, что нужно написать свою версию программы для интервальных повторений. Вот откуда я брал информацию:
Интервальные повторения
Классические методы исследования памяти Эббингауза
Кривая забывания
Система Лейтнера
Книга "Лейтнер, Себастьян Метод интервальных повторений"
Мне пришлось познакомиться с другими теоретическими работами в лингвистике (например, что такое частотные словари, в которых сортировка сделана по частоте употребления слов в реальной жизни и почему не нужно знать больше 5000 слов в иностранном языке) и информационных технологиях (поддержка поиска в базе по нескольким языкам, обработка букв, состоящих из нескольких символов, нормализация текста итд).
С августа 2023 по апрель 2024 года было 47 версий RuLearn ?, то есть 47 версий с достаточно серьезными изменениями, чтобы порекомендовать пользователям обновить приложение. Для разработки использовалась Android Studio/Kotlin. Всего получилось около 10 000 строчек кода, организованных в 56 классов. Программа содержит 10 Activity. Да, это довольно крупное приложение ?.
Программа тестировалась на различных версиях операционных систем от разных поставщиков – от Android 9 до 14, а также на Harmony OS 2 компании Huawei и различных кастомных прошивках на базе AOSP и CAF.
Когда все начиналось, хотелось сделать порт под Аврору, на C++ и QML. Но тогда устройства на этой операционке не продавались, а школа не стала мне помогать. Так что об этой идее пришлось забыть. Ну а iOS я никогда и не собирался поддерживать.
С самого начала я решил, что буду использовать по минимуму все то, что сложно контролировать. Поэтому приложении нет синхронизации между устройствами через Firebase. Хотите синхронизировать – делайте это в локальной сети вручную. Опыт с Memrise с его тормозами, лагами и потерями статистики был учтен на 100%. Заодно даже не пытался выводить приложение в Google Play. Но код менялся… Поэтому для удобства пользователей реализована автоматизированная система обновления ПО, основанная на моем другом проекте, в котором в качестве хранилища дистрибутивов все-таки используется Google Firebase. Такое вот противоречие, но решение это временное – просто этот код уже был, и пока работает без проблем. Но все-таки обычный способ инсталляции RuLearn – это «ручная» установка через файл apk.
Хранение данных программы осуществляется в SQLite. Программа может импортировать/экспортировать данные внешних источников, используя файлы с расширением *.db или *.csv. Для озвучки поддерживается формат *.mp3. Для удобства обмена данными реализована поддержка формата *.zip – все упаковывается в один файл.
Придумал методику по использованию курсов в формате Anki, и возможен импорт из любой обучающей программы или сайта через данный формат. Если вы тоже использовали Memrise, то пока еще оттуда можно выкачать все, что угодно через CourseDump (https://github.com/Eltaurus-Lt/CourseDump2022) – можно перенести свои (или чужие) курсы в RuLearn. Одним нажатием кнопки в RuLearn тут не обойдешься, и возможно придется как-то редактировать курс, но представьте – кто-то сделал частотный словарь для какого-то редкого языка. Работа огромная. Польза огромная. Но Memrise удалит все это до конца года, так нужно хватать, пока есть.
В приложении есть встроенный редактор для создания или модификации курсов. Поддерживается работа с внешней клавиатурой для удобства выполнения печатных тестов. Дополнительно реализованы «горячие клавиши». Соответственно, интерфейс адаптирован для работы как с телефона, так и для планшетов.
Как это работает? Посмотрите видео (озвучка Yandex TTS):
Что дальше? К сожалению, мне до ЕГЭ и поступления в вуз еще очень далеко, и эти дополнительные баллы за победителя конференции «сгорят» раньше. Так что надо выигрывать еще хотя бы пару лет ?. Как развивать проект?
Переписать код на Jetpack Compose, заодно оптимизируя те участки кода, которые делались в стиле «копипаст из stackoverflow». С этим вполне можно справиться самому. Кстати, выяснилась интересная деталь – у школьников родители иногда отбирают мобильные телефоны, но оставляют ноутбуки. Поэтому неплохо было бы сделать вариант на Kotlin Multiplatform. Заодно станет намного удобнее редактировать курсы и создавать новые карточки.
Приложение может собирать данные о том, как пользователь учится (я «вскрыл» базу SQLite у Memrise и видел, что они это действительно делали и очень активно). Это дает интересные возможности. Статистику обучения – запомнил/не запомнил, на каком уровне были проблемы, длинное/короткое слово, сколько времени потратил – можно проанализировать с помощью нейросети. В результате можно предсказывать, насколько успешным будет обучение по какой-то теме, можно адаптировать алгоритмы Эббингауза под каждого пользователя. Как это сделать практически, мне пока что непонятно. То есть ясно, что это тема из Natural Language Processing, но не совсем. Как использовать эту статистику? Как использовать то, что обычно делается на Python, в мобильнике? Одни вопросы. Хорошо бы найти научного руководителя.
Генеративный ИИ для мнемоники. Для запоминания со времен античности используют мнемонические технологии. Один из создателей Memrise был активным участником сообщества, которое занимается продвижением этих утерянных навыков в обучении. Его ученик даже написал книгу «Эйнштейн шагает по Луне» про то, как он за год дошел с нуля до звания чемпиона США на соревнованиях по супер-запоминанию. В RuLearn можно добавлять графические карточки, но мобильник – не лучшее средство для создания контента. То есть картинку туда загрузить можно, но делать новую будет слишком неудобно. Придумывать мемы для запоминания слов лучше самому, а генерировать картинку лучше через Kandinsky от Сбера. Мои первые опыты в этой области оказались не очень успешными.
Но я думаю, все в результате получится.