Wednesday, September 21, 2022

От ЧТО к КАК: то, что видно отсюда, не было видно оттуда

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

Не могу судить, насколько это верно в политике. В программировании это верно на 200%.

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

Коррекция плана:

Функциональность

  • Тренируемые способности: тренировка способности читать и слушать малоэффективна без тренировки способности писать и говорить. Добавляю блоки:
    • Слушай & Повторяй - предложение за предложением или даже слово за словом, медленно, потом быстрее и быстрее.
    • Диктант

Данные

  • Профиль пользователя:
    • Язык интерфейса
    • Изучаемые языки - в процессе изучения и доступные для изучения
    • Предмет следующего урока и варианты урока, доступные для выбора
  • Очень полезно позволить пользоватею вставить текст в окно первого чтения и тут же построить из него новый урок.

Используемые технологии

  • Похоже, Firebase - хорошая стартовая точка для хостинга PWA
  • Взаимосвязи данных удобно хранить в граф-базе Neo4j
    • Граф-база специально предназначена для хранения взаимосвязей
    • Язык запросов очень похож на MongoDB
    • Интересно, как отразится на быстродействии необходимость запрашивать 2 разных сервера для построения урока?

Продолжение следует ...

Thursday, August 11, 2022

От ЧТО к КАК: аппликация для изучения языков - первоначальный анализ

Этот проект огромен.
Сейчас я анализирую первый релиз с очень ограниченной функциональностью.

Функциональность

  • Тренируем способности:
    • Читать
    • Слушать
  • Порядок действий:
    • Показать текст и прочитать его пользователю, выделяя прочитанную часть одним цветом и слово, которое сейчас читается, - другим
    • Предложить пользователю выделить неизвестные слова
    • Показать толкования каждого из неизвестных слов из публично доступных словарей - одного слова за раз
    • Подобрать следующие тексты, использующие неизвестные слова, и добавить их в очередь для чтения
    • Для новых пользователей очередь содержит несколько простейших текстов типа "Здрассте/До свиданья/Как тебя зовут".
    • Когда очередь оказывается пустой - пользователь уже знает все слова из представленных текстов - показать список тем для выбора следующих текстов.
    • В идеале новый текст не должен содержать больше 10% новых слов или словоформ.

Данные

  • Корпус коротких текстов, проиндексированный по:
    • Словам
    • Морфемам (когда возможно)
    • Идиомам (когда возможно)
  • Толкования слов, собираемые по мере необходимости
  • Данные о пользовательской активности:
    • Частота, затраченное время и насыщенность уроков
    • Словарь пользователя: слова, которые никогда не отмечались как неизвестные или перестали отмечаться как неизвестные (с числом обоих состояний или списком текстов)
    • Внимание: как много слов впервые отмечаются как неизвестные лишь после нескольких появлений в текстах
    • Эффективность обучения: сколько раз одно и то же слово отмечается как неизвестное?

Используемые технологии

  • A progressive web app (PWA) - нигде не нашла перевода этого выражения, "прогрессивное веб-приложение" не в счет - сохраняющее данные о пользовательской активности на пользовательской машине.
    • Тот же самый код для компьютера, планшета и смартфона
    • не нужно инсталляции и апгрейдов
    • 100% приватность для пользователя
    • пользователь == пользовательский агент(браузер или планшет/смартфон)
  • MongoDB на публичном сервере для хранения корпуса
    • MongoDB поддерживает регулярные выражения как тип данных.
    • Я знаю, как это сделать в SQL. Самое время разобраться с NoSQL 😉.
    • Публичный сервер - это необходимость. Я пока не готова к собственному серверу.
  • Использовать кластеринг для разпознавания морфем и идиом
    • Хорошо бы добавить возможность критичного использования мнения пользователей
  • Use GraphQL для взаимодействия клиента с сервером
    • Легче добавлять функциональность, чем при использовании REST
    • Сложнее выучить
  • Использовать автоматическое чтение (TTS) доступное в браузере
    • Не надо хранить аудио
    • Легко синхронизировать чтение и выделение текста
  • Для начала реализовать всю серверную часть на Python
    • Python имеет больше функциональности для машинного обучения
    • Он поддерживает все, что мне сейчас надо

Нужно выучить

  • Реализацию асинхронности в Python
  • GraphQL
  • PyMongo
  • Motor?
  • Graphene or Ariadne?
  • Tornado?

Готовые фрагменты

Продолжение следует ...