{"id":14268,"url":"\/distributions\/14268\/click?bit=1&hash=1e3309842e8b07895e75261917827295839cd5d4d57d48f0ca524f3f535a7946","title":"\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c \u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043c\u0435\u0441\u0442\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"f71e1caf-7964-5525-98be-104bb436cb54"}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0
28 комментариев
Написать комментарий...
Кирилл Казаков

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

Ответить
Развернуть ветку
Олег Чеботарев
Автор

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

Ответить
Развернуть ветку
Олег Чеботарев
Автор

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

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

Ответить
Развернуть ветку
Сергей Зайцев

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

Ответить
Развернуть ветку
Олег Чеботарев
Автор

Слушайте, я по ходу и правда следующим шагом запилю плагин к хрому, спасибо за идею

Ответить
Развернуть ветку
Сергей Зайцев

Ещё из идей, было бы лучше для обучаемости если всплываемое облочко со словом сначала всплывало без перевода, а перевод появлялся только секунды через 2-4, что бы была возможность заставить мозг хоть немного напрячься и самостоятельно припомнить перевод. Это намного эффективнее.
Также хотелось бы иметь возможность экспорта базы своих слов в стороннее приложение. С anki, Quizlet или им подобным мне кажется тягаться нет смысла. Я в частности использую flashcards deluxe.
Ещё не смог найти, можно ли сделать что бы был и перевод на русский и одновременно несколько примеров использования слова по английски.
Сделал продвинутый режим, там есть примеры, но на русский нет перевода, без него тяжело, они все равно нужен.
И я кстати готов бы купить но только не подписку.

Ответить
Развернуть ветку
Олег Чеботарев
Автор

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

Ответить
Развернуть ветку
Виталий Подольский

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

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

Ответить
Развернуть ветку
Олег Чеботарев
Автор

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

Ответить
Развернуть ветку
Виталий Подольский

Я про oxford dictionaries api и не знал, если честно. Сам сейчас пишу на айос приложение (другое направление).

То есть, эта апишка даст нормально звук подгрузить на английский? Бесит в синтезе то, что русский нормально читает, английский как будто местный беззубый и вечно бухой бомж озвучивает.

Чел, ты не представляешь, какой квест помог решить своей статьей и комментариями. Если ты в Москве, угощу вкусным немецким пивом =)

Ответить
Развернуть ветку
Олег Чеботарев
Автор

да, там у большинства слов есть ссылки на mp3 с нормальной озвучкой носителями языка
но, понятно, это работает именно что для одиночных слов, рандомный текст она не озвучит
увы, не в Москве(

Ответить
Развернуть ветку
Виталий Подольский

Эх(

Ответить
Развернуть ветку
Герман Инс

когда на эпл?

Ответить
Развернуть ветку
Alexey Gavrilov

мм, навскидку 2 варианта, которыми я пользовался:

1) есть плагин у лингвалео - добавляйте в свой словарь и тренируйтесь сколько угодно
2) есть плагин на google.translate - так же, добавляете в свой словарь на ваш аккаунт, а далее в любое приложение с карточками перегоняете, quizlet и так далее. 

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

Ответить
Развернуть ветку
Олег

Попробую.

Ответить
Развернуть ветку
Олег Чеботарев
Автор

Эй ты, ну-ка иди отсюда!

Ответить
Развернуть ветку
Олег

Понял.

Ответить
Развернуть ветку
Олег Чеботарев
Автор

Увы, все что видел - не понравилось

Ответить
Развернуть ветку
Сергей Зайцев

Подскажите пожалуйста название плагина?

Ответить
Развернуть ветку
Anastasiia Fomina

Тоже начинала изобретать свой "велосипед", а потом наткнулась на разработку ребят из Вьетнама:

ejoy-english.com
Слова можно сохранять почти из любых источников, группировать их, практиковаться в произношении (хотя в этом ELSA SPEAK намного круче), смотреть YouTube и NetFlix.

Ответить
Развернуть ветку
Олег Чеботарев
Автор

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

Ответить
Развернуть ветку
Vadim K

Зачем это когда есть memrise? В целом не так часто натыкаешься на незнакомые слова, чтобы форсированно учить явно не тянет приложение. Для начального уровня может и сойдет.

Ответить
Развернуть ветку
Олег Чеботарев
Автор

Ну вы явно давно перешагнули озвученные в тексте уровни) чтобы составить свой первый словарик из 20 слов, мне в свое время хватило прочесть единственную хитровывернутую статью из hollywood reporter

Ответить
Развернуть ветку
Ахмед Савмурзаев

А вы задумывали выбрать технологию react native для разработки этого приложения?

Ответить
Развернуть ветку
Олег Чеботарев
Автор

Нее, по многим причинам. Достаточно того, что в приложении почти все завязано на фичи конкретной платформы - Андроида

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Олег Чеботарев
Автор

Посмотрел, спасибо. Не справляется

Ответить
Развернуть ветку
bpop

Привет, я - Егор, и я скачал.

Ответить
Развернуть ветку
25 комментариев
Раскрывать всегда