Memose — нескучное приложение для изучения языка

Всем привет, я Олег, и я делаю приложение. Оно переводит слова.

Memose — нескучное приложение для изучения языка

Все началось с лени. Так получилось, что примерно год назад мне стало очень нужно улучшить свой английский — причем не просто улучшить, а перепрыгнуть сразу из B1 в C, да еще и уложиться в пару месяцев, которых для этого дела вряд ли хватило бы даже очень упрямому студенту.

Поиск коротких путей логично привел в никуда: репетитора на такой график найти непросто, самоучители унылы, а бодрые экспресс-курсы оптимистично заверяли, что все возможно, если ты brave enough, но сидеть на занятиях, вероятно, придется с понедельника по воскресенье с восьми утра до восьми утра.

Но я же программист

Идея была в следующем: изучение английского выше B2 невозможно без форсированного расширения словарного запаса — значит, я буду учить слова.

Однако появилась проблема: приложения, которые уже есть для этой цели, либо невыносимо душны и неприятны на ощупь, либо обращаются с тобой как с малым ребенком — рисуют фейерверки и ходят колесом каждый раз, когда ты выучил новое слово.

И в тех, и в других, как правило, приходится изучать не те слова, которые нужны лично тебе, а те, которые нравятся разработчику. Пришлось писать свое.

Все, что мне было нужно на тот момент — удобный инструмент, который не только позволял бы оперативно переводить незнакомые слова из любого источника (для этого уже есть переводчики Google и «Яндекса»), но и сразу складывать их в некий стек, в который впоследствии можно ходить и удобно повторять все, что напереводил.

Я делаю софт примерно восемь лет — начинал с веба и ВК-приложений, затем перелез на Android и немножко на iOS. Поскольку Android — мое все, делать приложение было решено именно под него.

Для первой задачи — перевода — во всех более-менее свежих Android отлично подходит API выделения текста (это когда ты выделяешь текст в любом приложении и над ним появляются кнопки возможных действий). Читаем какой-нибудь иноязычный материал, наткнулись на непонятное слово, нажали на него, получили перевод, отправили в свой справочник — быстро и эффективно.

Вторая задача (повторение) в итоге свелась к мини-игре: перед тобой перевод слова на русский и поле для ввода — переведи слово на английский или умри. Перевел — молодец, много перевел — большой молодец. Правильно переведенные слова продолжают появляться в игре в последующие дни с постепенно убывающей частотой, пока не будут выучены окончательно.

Первая версия приложения была собрана за пару выходных: клиент на Kotlin и серверная часть на yii2, которая обслуживала базовые вещи и принимала запросы на перевод. В качестве переводчика был выбран API Google Translate, не умеющий ровным счетом ничего, кроме как отдавать на строку-запрос строку с переводом, но этого было вполне достаточно, благо качество перевода вполне радовало.

Шли дни, приложение работало именно так, как от него и ожидалось, но к лени начала примешиваться жадность. Я понял, что одного перевода слова недостаточно — неплохо было бы еще добавить примеры употребления, фонетику и еще чего-нибудь, да побольше. Так рядом с гугловским переводчиком на сервере появился переводчик от Microsoft.

Translator API из Azure гораздо хуже знаком с русским языком, чем Google Translation API, но у него есть одно весомое преимущество — дополнительно к переводу он так же готов предложить примеры употребления искомого слова и альтернативные трактовки.

Пусть примеры употребления от него иногда бывают странными и страшными, а альтернативные переводы — сомнительными, это все же лучше, чем совсем ничего.

Memose — нескучное приложение для изучения языка

В этот момент стало ясно, что процесс становится интереснее цели. Чтобы совмещать параллельные вызовы двух API, серверную часть пришлось потихоньку переводить на Java. Также был добавлен кэш запросов, сберегающий время для слов, которые уже есть в базе.

Первая версия сервера выполняла перевод одного слова тремя внутренними запросами — к Google за основным переводом, в Azure за альтернативами, в Azure за примерами употребления. В итоге примеры употребления были выведены в отложенную загрузку, а первые два запроса — оптимизированы, благодаря чему удалось сократить среднее время ожидания перевода до 1–2 секунд.

Тогда же пришло понимание, что нет ни одной причины для того, чтобы ограничиваться одним только английским, когда API позволяет работать с сотней языков — в один день все они появились в приложении.

Memose — нескучное приложение для изучения языка

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

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

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

Но набирать текст руками — это ведь тааак долго. Гораздо удобнее, если он будет набираться сам.

За пару ночей к серверу был подключен Firebase Vision, назначение которого — распознавать текст с картинок, и в моем плавающем меню появилась вторая кнопка.

Идея снова сработала, но осадок остался: распознавание снимка экрана со стороны сервера требовало до пяти секунд ожидания, что было чрезвычайно долго для быстрого меня. К счастью, FV также может работать в офлайне — правда, это применимо только для текста на латинице, но это было как раз нормально.

В итоге базовым стал офлайн-режим, на современных девайсах требующий ожидания не более секунды, но также была оставлена возможность при необходимости переключиться на более точный и полный онлайн-режим. Теперь приложение могло справляться с любыми буквами, которые пользователь видит на экране.

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

С этим мне помог разобраться друг и главный бета-тестер, справедливо заметивший, что настоящие пацаны не хотят видеть перевод слова на русский, а хотят видеть определение слова на языке оригинала.

Мысль была замечательная, но она вступала в прямой конфликт с концепцией приложения: концепция считала все языки из своей коллекции равными в правах, однако новый подход подразумевал, что некоторые будут равнее, потому что нет в природе такого API, который предоставил бы словари с определениями для ста языков.

Разумеется, в реальности языки совсем не равны (подавляющая часть пользователей придут учить английский), концепция была успешно задвинута, а в таблице с языками появилась булевая колонка extended.

Источником знаний для нового hard mode с определениями вместо перевода стал Oxford Dictionaries API (пока только для английского), который не только дает определения, но и досыпает сверху кучу другой полезной информации — от этимологии до фонетики.

Memose — нескучное приложение для изучения языка

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

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

Исходя из этого, опциональные напоминания было решено сделать через всплывающие каждые три минуты облачка-тосты, которые полупрозрачны, не сохраняются в шторке, через пару секунд исчезают сами собой и не требуют никакого интерактива. Чтобы оно было еще и полезным, в облачке всякий раз показывается случайное слово из твоего словаря с переводом — бросил мимолетный взгляд на облачко, слово отложилось в памяти, едешь дальше.

Memose — нескучное приложение для изучения языка

На текущий момент какой-либо особой раскрутки приложения не проводилось, точно так же нет конкретных планов по экономической части — сейчас оно просто работает и приносит пользу. Я работаю в основном на фрилансе, поэтому времени едва хватает даже на текущие задачи.

Что же касается планов на фичи, то тут все в порядке — технологическая база с самого начала писалась максимально качественно (для себя делал!), удобно обслуживается и легко расширяется, с идеями тоже проблем нет.

Главное, в чем нуждается приложение на сегодня — в социальной составляющей: сейчас идет тестирование новой рубрики, в которой пользователи смогут обмениваться бекапами своих словарей и проходить их на скорость, с обязательными рейтингами и плюшками. К сожалению, эта часть еще даже не в бете, но достаточно скоро будет.

И да, свой английский с помощью этой штуки я таки улучшил.

1616
28 комментариев

Вы не могли бы разбить материал на абзацы поменьше? Тогда его будет удобнее читать.

2
Ответить

спасибо, и правда

2
Ответить

сразу, как только придумаю, что дальше делать с андроидом!
плюс, на iOS половину фич реализовать не получится в силу ограничений платформы

упс, промазал
сорян, Герман Инс

1
Ответить

А для браузера десктопного у вас есть это же самое?

2
Ответить

Успехов. Я пару удачных мыслей увидел в отношении перевода. Сейчас пойду гуглить эти техники =) 

Кстати, а как делали синтез речи? В айосе некоторые языки нельзя озвучить синтезатором, к примеру, армянский.

Ответить

в андроиде все ровно так же)
какие-то языки поддерживаются, какие-то нет
сейчас там стандартный синтезатор, вшитый в платформу, а вот для английского скоро частично добавлю нормальную озвучку (спасибо, oxford dictionaries api)

2
Ответить

когда на эпл?

Ответить