kmp news

      

 

Literator.io

 

от Владимира Толстикова

 

Задача

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

Дополнительные требования:

  • простота и понятность

  • доступность на мобильных устройствах

  • плавная анимация и качество работы приложения

  • отображение подсказок пользователю, если он не помнит пропущенного слова

  • поддержка мультиязычности и разного набора стихов/авторов для разных стран

  • приложение должно быть полностью статическое, чтобы можно было разместить на GitHub Pages и не платить за хостинг.

 

 

 

Инструментарий

Сервис на JavaScript создан с использованием AngularJS

AngularJS:

  • JavaScript-фреймворк с открытым исходным кодом для разработки одностраничных приложений.

  • разработан в 2009 году Мишко Хевери и Адамом Абронсом

  • обеспечивает отделение DOM-манипуляции от логики приложения и разделение клиентской и серверной стороны.

  • работает с HTML, содержащим дополнительные пользовательские атрибуты, которые описываются директивами, и связывает ввод или вывод области страницы с моделью, представляющей собой переменные JavaScript. Значения этих переменных задаются вручную или извлекаются из статических или динамических JSON-данных.

 

 

 

 

Архитектура приложения

Выделяются две сущности:

  • авторы (autor)

  • стихи (verses).

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

Стихи  дополнительно имеют файл content.txt, где и хранится текст стихотворения.

Отдельно выделяется файл structure.json, который хранит всю структуру и метаданные.

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

Чтобы не хранить данные вместе с исходным кодом в том же репозитории, для стихов был создан отдельный репозиторий.

Это позволит использовать pull-реквесты для добавления новых стихи и новых авторов. Данный репозиторий подключается к основному репозиторию через Git Submodules, что дает дополнительный контроль за тем, какая ревизия данных сейчас используется.

 

 

Стихи

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

 
Шли {годы{}}. Бурь порыв {мятежный}

Рассеял прежние {мечты},
И я забыл твой {голос} нежный,

Твои небесные {черты}.
 

Фрагменты заключены в фигурные скобки.

Вложенность необходима для указания фрагментов разной сложности.

Скобки "раскрываются" от внутренних к наружным, таким образом "легкому" уровню сложности соответствуют самые внутренние скобки в конкретном выделенном фрагменте.

Фрагмент вида {годы{}} соответствует тому, что он будет использован только для "средней" сложности и пропущен на "легкой", т.к. вложенные скобки ничего не содержат.

Таким образом можно добавить любую сложность.

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

 

 

Результаты

Веб-приложение: http://literator.io

Репозиторий приложения: https://github.com/bobrosoft/literator.io

Репозиторий стихов: https://github.com/bobrosoft/literator.io-verses

Дальнейшее развитие проекта в группе: https://vk.com/literatorio 

 

 

kmp