Лабораторная работа №3
Требования к лабораторной работе
Требования к знаниям учащихся
- Уровень знакомства с синтаксисом языка Ruby:
- Запуск приложения.
- Переменные, методы.
- Работа контейнерами, итераторами, нумераторами.
- Описание собственных классов.
- Наследование классов.
- Использование модулей и примесей.
- Знание деталей работы чисел.
- Знание деталей вызова методов и указания их аргументов.
- Использование методов чисел и промежутков.
- Использование методов классов строк и регулярных выражений.
- Уровень знакомства с экосистемой Ruby:
- Установка, удаление зависимостей с помощью
gem
. - Управление зависимостями с помощью Bundler.
- Проверка качества исходного кода с помощью Rubocop.
- Установка, удаление зависимостей с помощью
- Уровень знакомства с разработкой веб-приложений с помощью библиотеки Roda:
- Обработка запросов GET для получения данных.
- Использование шаблонов Foundation / Bootstrap для оформления сайта.
- Обработка запросов POST на редактирование данных.
- Передача аргументов в контроллер через адресную строку.
- Умение структурировать простое Roda-приложение.
Требования к выполнению задания
- Приложение должно реализовать все требования, указанные в задании. Однако к защите допускаются приложения, реализующие только часть задач.
- Исходный код приложения должен быть проверен с помощью приложения Rubocop с настройками по умолчанию или с конфигурацией, предложенной на соответствующем занятии. Для каждого нарушения, которое находит Rubocop, должно быть объяснение почему оно не было исправлено. Допускаются аргументы с точки зрения архитектуры приложения, другого рода аргументы не принимаются.
- Все зависимости приложения должны управляться с помощью Bundler, установка зависимостей с помощью
gem
запрещена. Исключением является джемbundler
. - Для разрабатываемого приложения должны быть создан отдельный каталог.
- В корне каталога должны располагаться конфигурационные файлы:
Gemfile
,Gemfile.lock
. - В корне каталога должен находится конфигурационный файл
rackup
, с помощью которого можно запустить приложение. - Исходный код приложения может быть расположен в каталогах
helpers
,models
,lib
,routes
. - В каталоге
views
должны находиться шаблоны для описания вида.
- В корне каталога должны располагаться конфигурационные файлы:
- Весь код приложения должен быть разбит на модули и классы, запрещается использовать файлы с простым набором методов, которые не принадлежат какому-либо модулю.
- Необходимо выделить отдельные классы, описывающие предметную область.
- В одном модуле нельзя совмещать логику обработки данных предметной области и операции ввода-вывода.
- Приложение должно корректно обрабатывать неправильный ввод от пользователя.
- Приложение должно обладать понятным интерфейсом:
- все страницы приложения должны быть доступны из пользовательского интерфейса;
- показывать помощь по использованию;
- в случае ошибочных ситуаций сообщать пользователю причину ошибки и способы её устранения.
- Запрещено писать код для приложения на языке JavaScript или любом языке, который компилируется в JavaScript.
Требования к формату сдачи
Каталог приложения с исходным кодом должен быть загружен в качестве ответа на задание в Moodle.
Задача
Разработать веб-приложение, позволяющее Санта Клаусу построить маршрут для обхода всех домов в его списке. Маршрут начинается из его дома и заканчивается в нём.
Точки маршрута хранятся в JSON-документе santa-path.json. Структура документа:
{
"santa_home": {
"x": 123,
"y": 186
},
"children_homes": [
{
"x": 354,
"y": 192
},
{
"x": 165,
"y": 103
}
]
}
В корне документа находится объект со свойствами santa_home
и children_homes
. В santa_home
хранятся координаты дома Санта Клауса. В свойстве children_homes
хранится список домов детей. Описание одного дома — это объект со свойствами x
и y
.
Значение координаты X находится в диапазоне от 0 до 600. Значение координаты Y находится в диапазоне от 0 до 400.
Веб-приложение должно позволять пользователю:
- Просматривать координаты маршрута и длину текущего маршрута.
- Просматривать маршрут на карте. Для генерации изображения можно воспользоваться библиотекой chunky_png. Созданное изображение можно размещать в каталоге
public
рядом со статической информацией. - Случайным образом перестраивать маршрут.
- Перебором пытаться улучшать маршрут относительно его длины. За 100_000 итераций случайно перестраивайте маршрут. Выбирайте ту перестановку, чья длина окажется наименьшей. Можно реализовывать более оптимальные алгоритмы поиска лучшего маршрута.
- Вручную изменять маршрут следования. Примером реализации данной функции является возможность передвинуть точку маршрута “раньше” или “позже”. Для удобства слежения за передвигаемой точкой её можно выделить на карте следования маршрута.
Все функции могут быть реализованы на одной странице, однако на серверной стороне желательно подготовить несколько обработчиков по различным адресам, а не перегружать один маршрут множеством параметров. Хотя на стороне сервера и происходит изменение данных, в данном случае разрешается использовать GET-запросы для реализации приложения.
Пример реализации интерфейса приложения можно увидеть на изображении ниже.