Когда я переехал в Германию и познакомился поближе с немецким языком, то обнаружил, что у существительных в нем есть грамматический род.
Индикатором рода служит артикль -- der для мужского, die для женского, das для среднего. Поэтому часто говорят о том, какой у слова артикль, имея в виду род.
Простой системы распределения по родам (как, например, в английском) в немецком нет.
Знание русского тоже никак не помогает, скорее, даже мешает.
Для примера: Солнце (die Sonne) в немецком -- женского рода, а Луна (der Mond) -- мужского, водка (der Wodka) -- тоже мужского, но девушка (das Mädchen) -- среднего.
"Запомните это, дэти, потому что понять это нэвозможно"!
Идея
До 2020 я работал в тревел-индустрии, но в середине года мой работодатель решил урезать расходы, и у меня стало много свободного времени (попросту говоря, меня уволили).
От безделья я наконец активно принялся за немецкий, а параллельно размышлял, не стоит ли поучиться и программировать.
Однажды, в очередной раз открывая словарь, чтобы посмотреть род какого-то слова, я подумал, а почему бы не написать мобильное приложение или бота, чтобы они регулярно присылали опрос с артиклями?
Заодно и технологии какие-нибудь по пути можно освоить.
Технологии
Насчет приложения я быстро понял, что это как-нибудь потом.
Зато бот выглядел реализуемо.
Писать я решил на Питоне, так как с ним уже пару раз встречался. Нашел пару сносно документированных библотек для работы с Telegram Bot API и остановился на Aiogram (просто понравилось слово "асинхронный" в названии).
Боту нужно где-то хранить список чатов и состояние для каждого из них. Сложной структуры данных не ожидалось, так что я решил использовать MongoDB.
Деплоить проект оказалось проще всего при помощи Docker (два контейнера, app & db, запускаемые через docker-compose).
Образ контейнера автоматически собирался Docker Hub из master-ветки на GitHub, после этого достаточно было скриптом на сервере скачать его и перезапустить контейнер. (Я пишу "было", тк недавно Docker отменил автобилды для бесплатных аккаунтов, я пока не придумал простой замены, собираю сам и пихаю в Docker Hub).
Что сделано
В самой первой версии бот просто брал 10 случайных слов из частотного словаря, найденного в интернете, и раз в день присылал опрос с ними. Даже такой вариант оказался рабочим, и у бота появились человек пять пользователей из моих знакомых.
После первой пары недель кто-то из них заблочил бота, и из-за необработанного exception он зациклился и несколько часов рассылал опрос раз в минуту. После этого я освоил try/catch и юнит-тесты.
Потом, уже немного подучившись в программерском буткемпе, я добавил интервальное повторение (spaced repetition). Алгоритмов для него есть несколько, я реализовал самый простой: правильный ответ повышает score слова, а каждая ошибка -- снижает. Чем выше у слова score -- тем дальше отодвигается дата, когда его надо будет повторить.
Чтобы было не так скучно (повторять приходится много), под повторение отведена только половина опроса. Вторая половина -- новые слова, они выбираются из словаря по порядку: чем дальше -- тем более редкое слово.
Недавно вкрутил базовую статистику -- можно посмотреть, в каких словах чаще всего делаешь ошибки:
Более детальную статистику думаю показывать в браузере.
Что дальше
Сейчас ботом каждый день пользуются человек 40 (это активных подписок, из 90 чатов всего), из них я знаю примерно 7, остальные как-то сами пришли.
Текущий челендж -- без рекламы набрать 1000 активных пользователей. Принимаю идеи, как это сделать, пока что начал с Клуба :) Как думаете, стоит ли сделать пост на ProductHunt?
Если количество пользователей вдруг когда-то создаст ощутимую нагрузку на сервер, придется изобрести какую-то монетизацию. Наверное, поищу рекламодателя среди школ немецкого.
А, да, затраты и доходы!
- Деньги ~0 (все мои проекты крутятся на одном droplet-е Digital Ocean за ~14 баксов в месяц).
- Время -- пару недель в начале, потом спорадически по 2-3 часа в месяц.
- Доходы: ценный опыт :)
В общем, если вы изучаете немецкий -- вилькоммен:
https://dasbot.yak.supplies/
И друзьям расскажите :) Спасибо!
UPDATE. Полторы недели спустя пользователей стало уже 250 (из них активных 150). Клуб работает! :)
Английский перевод тем временем добавлен, как и некоторые визуальные улучшения (типа артиклей в статистике и красных крестиков).
Интерфейсное решение пока такое: кнопка '?' рядом с кнопками артиклей.
Добавлять перевод ко всем словам подряд не хотелось бы -- там часто несколько значений, может оказаться много лишней информации.
Как вариант -- можно использовать инлайн-кнопку или добавить опцию в настройках "всегда показывать перевод". Послушаю отзывы и определюсь =)
Это гениально!
Артикли — мой бич. На телефоне у меня всегда программа для тренировки артиклей, но дома я редко прикасаюсь к телефону. А вот телега всегда запущена.
Порекламирую завтра внутри компании.
Фича-реквест-1: почему-то если я правильно отвечаю, то ставит красивую зеленую галочку. А когда неправильно — просто текст. Почему нет красного кружка или крестика?
Фича-реквест-2: хочется либо приболдить слова для которых надо подбирать артикль, либо вообще радикально упросить подачу и начиная со второго (подхода или вопроса — обдумать) вместо полного "1/10. What's the article for Prozent?" спрашивать "1/10: ... Prozent?"
Фича-реквест-3: я хочу по чуть-чуть слов (круто что есть настройка на 5...50 слов!), но регулярно: например, в рабочие дния каждый час с 9 до 17 по 10 слов или там каждые 2 часа. Раз в день для сидящего за компом — мало.
Рекламу можно было бы вкрячить если отвечаешь правильно только на 6 из 10 или меньше.
Куда рубль заносить?
До кучи ещё можно режим обратного запоминания - ты ему слово, он тебе артикль. Поможет при написании писем.
Спасибо! Буду пробовать, тож начал немецкий осваивать. Единственная просьба - если бы он еще переводы для слов сразу говорил, было бы вообще круто. Можно на английском.
Типа "6/10. What's the article for Mensch (human)?"
Еще раз спасибо!
Два долора! :)
Присоединюсь практически ко всем хотелкам, которые выразил выше @zahhar.
Ну и перевод тоже круто было бы видеть, типа режим "для вспоминающих немецкий".
Ещё бы разные падежи 🙏
Всё время путаю ich gehe in den Park, ich bin im (in dem) Park
Для Plural свои окончания по падежам снова
Может другой бот, я бы с радостью пользовался и даже помог бы написать
Я вам тут немного испорчу малину, но есть же приложение Anki. Не могу преставить, что можно придумать что-то лучше и универсальнее.
Вот ссылка ну уже имеющиеся ресурсы для немецкого - https://ankiweb.net/shared/decks/german
очень круто, спасибо!
Классная идея и прикольно работает. Я прошел всё за два дня, и когда приближается к концу, то появляется такой баг: при настройке выдавать 50 слов выдает только 25. Наверное, на таких наркоманов как я это не было рассчитано и что-то пошло не так, но тем не менее.
извинитичтоподнимаюдревнийтред
Я в свое время так и не добил Adjektivdeklination, это связанная с родами история, и тоже зубреж. Если появится желание развивать и углублять, мб упражнения на это -- логичный следующий шаг.
https://deutsch.lingolia.com/de/grammatik/adjektive/deklination
Мне как раз дорогой человек порекомендовал этого бота недели две назад. Пользуюсь. И своим одногруппникам по изучению немецкого тоже рассказала о нем :).
А как насчёт все задания давать на немецком языке, его же учим? А переводы - да, можно на англ.