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?

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

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

Wednesday, December 25, 2019

git - строю из исходника на CentOS 6

Я решила освежить свои знания о git.

Пройти курс на GitHub? Почему бы и нет. Но git-ские шаловливые ручки могут перепортить мне рабочие настройки, так что лезть туда основным пользователем не стоит.
Старая машина с CentOS 6 пылится под столом, и никому нет до нее дела. Не пройти ли курс на ней?

$ git --version
$ git version 1.7. ..
(не помню последнюю цифру)

Обновить не получается: репозиторий RHEL предлагает ту же старую версию.
Добавить другой репозиторий и посмотреть, что там найдется?.. Или просто построить из исходника?

Тащу исходник:

$ mkdir gitsource
$ cd gitsource
$ git clone https://github.com/git/git

Теперь мой исходник сидит в gitsource/git. Как бы это построить? В исходниках инструкций не вижу, лезу в Гугль.

Вот здесь коротко и конкретно. Делаю все, как написано:

$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
$ yum install gcc perl-ExtUtils-MakeMaker

Это приносит мне старенький gcc 4.4.7 и прочее того же возраста.

Попробую построить:

$ cd git $ make prefix=/usr/local/git all

Побежало ... Ой, что это?!? "git-http-fetch error 1" ...

Гуглю ошибку и вижу, что ответы не в тему. Смотрю выше по терминалу. Судя по логу, компилятор полез куда-то явно не туда. Проверяю PATH. Так и есть, кто-то умный, скорее всего я сама или инсталлер anaconda, влепил путь к ней в самое начало. Удаляю лишнее.

Вроде, больше ошибок нет

$ make prefix=/usr/local/git install
$ echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc

Не лучшая идея менять PATH глобально, только что напоролась, но так хоть в конец добавляю.

Проверим, что построилось:

$ git --version
$ git version 2.24.GIT
Можно начинать учиться.

Thursday, August 22, 2019

Самое начало

Я решила начать со статической части сайта.

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

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

Я начинаю с самой простой - статический сайт.

Для этого есть несколько причин:

  • Я не специализируюсь в строительстве сайтов. Последние 12 лет я, в основном, программирую на C++. Мне нужно освежить и обновить мои знания о вебдизайне и вебпрограммировании.
  • Регистратор моих доменов бесплатно предоставляет место для размещения статического сайта на зарегистрированном у него домене. Я считаю, что стоит начать с бесплатного варианта и добавлять платные опции, когда я буду точно знать, что из них мне нужно.
  • Интересно посмотреть, какие функции удастся реализовать в рамках статического сайта.

Я начала с обновления моих знаний о HTML, CSS и JavaScript, выполняющегося браузером.

Когда берешься за изучение нового или хорошо забытого, лучше всего начать с хорошего обзора.

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

Мне повезло наткнуться на довольно хороший обзор HTML/CSS в этом самоучителе. Я настолько впечатлилась, что спросила автора, согласен ли он, чтобы этот самоучитель перевели на русский и болгарский. К сожалению, он мне пока не ответил.


Параллельно я ищу дизайнера для моего сайта. Программирование - это моё, но вот художник я от слова "худо" :(

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