# [НИЦ] Хакатон-2033
:::info
:bulb: Страничка для накопления и отладки знаний по Хакатону
:::
## :beginner: Орг.инфо
:small_blue_diamond:Дата проведения: 03.03.2023, пятница (четверг - подготовка помещений, рабочих мест, ТВ)
:small_blue_diamond:Длительность: 1 рабочий день
:small_blue_diamond:Целевая аудитория: разработчики ПО (программисты, тестировщики, аналитики) из ЦРТРИС и ДПО/ДУТиБА (стартовой квалификации)
:small_blue_diamond:Помещения:
* 47
* 16/18 - 5 команд
* 20 - 2 команды
* 34 - 1 команда (ОТ)
* 6 - 1 команда
* 17 - 2 команды
* на местах - 1 команда
:small_blue_diamond:Коммуникации
* телеграм:
* [инфо-канал](https://t.me/+6nqlOBTO91QyN2My) (readonly)
* [чат участников и организаторов](https://t.me/+v3u9JWoa5u8wZTIy)
* [приватный чат организаторов](https://t.me/+H4IV8ibYgP5hYTMy)
* [таймлайн](https://docs.google.com/spreadsheets/d/1-whgAL-BpM3tnwYaI7-dDDQK8GLN6g6mYEjentMmQpo/edit#gid=0)
* [чеклист **приватный**](https://docs.google.com/spreadsheets/d/1SFmqWbfoYnUa90SIjkwGKhkN3qH9_hazZ7ombg9nuSg/edit#gid=0) - таблица в GoogleDocs с командами и критериями/балами (ведёт Секретарь)
* [лидерборд публичный](https://docs.google.com/spreadsheets/d/11DHXcdmUTVZnoOT9nD9q9chLNqAoM28ZslRDj4JDjtA/edit#gid=0) - команды видят текущее состояние по баллам
* [сайт Хакатона](https://nicetuevent.bitrix24.site/hackathon/)
:small_blue_diamond: Роли от организаторов:
* Заказчик - Маевский Сергей, Миронов Александр
* Специалисты:
* C++/Python - Бочарников Андрей, Судаков Иван, Александр Кондратьев
* JS - Самойлов Илья, Макулова Яна (на удалёнке)
* Java - Маевский Сергей, Маслов Артём
* аналитика - Яцык Ангелина, Макарова Виктория
* Секретарь - для ведения дашборда (Google-таблицы с баллами), приёма заявок на сдачу работ: Пысёнков Алексей
* HR - Маслова Екатерина
* Организатор - Воробьёв Андрей, Калишенко Евгений, Трофимов Михаил, Иванов Антон
:small_blue_diamond:Обеспечение:
* :white_check_mark: git-репозиторий, доступный из Интернета. По количеству команд
* :heavy_check_mark: gitlab в Интернете в демилитаризованной зоне: https://jit.nicetu.spb.ru
* :white_check_mark: завести логины (Калишенко, [ITSERVICE-14405](http://jira.nicetu.spb.ru/jira/browse/ITSERVICE-14405))
* :white_check_mark: комп с IP, доступным из сети или portmap.io (:heavy_check_mark:, linux/ssh), (:heavy_check_mark: :heavy_check_mark:) ngrok.com, github.com/VKCOM/vk-tunnel-client (Маевский, Миронов)
* :white_check_mark: в 47 - коммутатор, проверить межсетевое взаимодействие для приёмки "клиент Заказчика + сервер участника" (Маевский, Миронов)
* :heavy_check_mark: в столовой - подключить компьютер с ТВ к сети
* :white_check_mark: талончики/командировочные (2 комплекта по 6 штук с временем 00/05/10/15/20/25. Пример текста: "11:05, 11:35, 12:05, 12:35")
* :white_check_mark: бейджики **"<Роль><ФИО>"** - см. роли
* мелочи в сценарий (Маевский)
* :heavy_check_mark: текст ТЗ (брать отсюда, ниже)
* :white_check_mark: (распечатать 12 шт)
* :heavy_check_mark: текст формализованного ТЗ (брать отсюда, ниже)
* :heavy_check_mark: Тестовые данные публичные (для тестов) - ниже
* :heavy_check_mark: Тестовые данные для приёма задач - ниже
* :heavy_check_mark: Приложение: полный круг + тестовые данные hardcode
* :heavy_check_mark: Тестовый сервер в Интернете (**ngrok** с рабочей машины Маевского)
* :heavy_check_mark: Сообщения в Инфо-чат - ниже
# :clipboard: Сценарий (этапы Хакатона)
[Таймлайн](https://docs.google.com/spreadsheets/d/1-whgAL-BpM3tnwYaI7-dDDQK8GLN6g6mYEjentMmQpo/edit#gid=0)
## (:clock12: 8:45) 0. "Открытие Хакатона" - приветственное слово
в столовой
## (:clock12: 9:00) 1. "Облик продукта" - выдача задания
С каждой команды выделяется 1 аналитик, все аналитики "едут в командировку" к Заказчику, разработчики перемещаются на рабочие места.
### :computer: 1.1. Разработчики...
...получают ТЗ (*"крайне кривое"*) (==подготовить и распечатать - Маевский==):
> **Область применения и назначение продукта**
>
> Разрабатываемый __продукт__ - система планирования маршрутов доставки грузов.
>
> Продукт разрабатывается в рамках создания "Колониальной Системы Доставки" (КСД). КСД состоит из периферийных пунктов (КСД-ПП, пункты назначения) и распределительного центра (КСД-Ц). Продукт __входит в состав КСД-Ц__.
>
> Назначение __продукта__: расчёт маршрута доставки до конкретного пункта назначения (параметров направления "альфа" и "бета" и оптимальной скорости доставщика).
>
> **Технические требования**
>
> Должны быть разработаны:
> 1. __Программа ввода данных и отображения результата__. Будет использоваться оператором КСД-Ц для получения маршрута по заданным исходным данным
> 2. __Сервер приложения__. Будет интегрирован в систему и решать задачу получения маршрута по запросу. Использовать технологии: HTTP, Restfull, JSON
> Примечание: Заказчиком предоставляется **тестовый сервер**, расположенный по адресу ==http://<ip-адрес>:<порт>== (адрес будет опубликован в Инфо-канале)
>
> Необходимо вести **базу знаний** (каталог doc/ в репозитории)...
и начинают думать, проектировать, программировать.
### :bulb: 1.2. Аналитики...
...направляются в командировку, в комнату Заказчика (47). В комнате находятся:
* стенд тестирования с "программой визуализации"
* __"представитель заказчика"__ (*некомпетентный* ==(?Маевский/Миронов)==), который не может отвечать на предметные вопросы, который зачитывает:
> Это стенд тестирования. Через него будут испытываться разработанный вами Продукты. Запущена программа визуализации. Вам нужно ознакомиться с программой, зафиксировать для себя существенные моменты предметной области, касающиеся вашего продукта.
>
> В данный момент разработчики ваших команд получили техническое ТЗ, в котором не полностью отражены требования к продукту. Вам нужно ознакомиться с программой, зафиксировать для себя существенные моменты предметной области, касающиеся вашего продукта. Время на первоначальное ознакомление ==ограничено 10:00== (можно уйти раньше).
>
> В дальнейшем для вас планируются ещё командировки для встречи со специалистами Заказчика, тогда возможность работы за стендом тоже будет, но, возможно, будет ограничена.
В момент выхода каждый аналитик получает **талончик/командировочное с временем приёма** на этапе 2 (начиная с 11:00).
В 10:00 - конец встречи с Заказчиком.
### :heavy_check_mark: 1.3 Чеклист - достижения и баллы
Публикуется [**лидерборд**](https://docs.google.com/spreadsheets/d/11DHXcdmUTVZnoOT9nD9q9chLNqAoM28ZslRDj4JDjtA/edit#gid=0) (публичная часть чеклиста с баллами по категориям обязательные/тесты/Аналитика/UI/сервер/технологии/функции/soft/доп.). Лидерборд рассчитывается по достижениям из приватного [**чеклиста**](https://docs.google.com/spreadsheets/d/1SFmqWbfoYnUa90SIjkwGKhkN3qH9_hazZ7ombg9nuSg/edit#gid=0).
**Пример достижений чеклиста**
| Достижение | Баллы | Примечание |
|-------------------|:----------:|:-------------:|
| Работоспособность алгоритма расчёта | ==XX== | прошли 9-10 тестов из 10 (у Заказчика через сервер или через UI у Специалиста) |
| Есть тесты алгоритма | ==XX== | (Специалист) |
| Есть приложение c UI для расчёта | ==XX== | (Специалист) |
| Есть серверное приложение для расчёта | ==XX== | (Заказчик) |
| Ведётся база знаний и постановка задачи (в папке doc в git-е) | ==5== | (Спец.Аналитик) |
| Описана и формализована предметная область| ==3== | (Спец.Аналитик) |
| Описана архитектура продукта| ==2== | (Спец.Аналитик) |
| Описаны требования| ==4== | (Спец.Аналитик) |
| Описан алгоритм расчёта| ==4== | (Спец.Аналитик) |
| Список уточняющих вопросов заказчику (в папке doc в git-е) | ==3== | (Спец.Аналитик) | | Достижение | Баллы | Примечания |
| UI-приложение взаимодействует с серверным | ==XX== | Спец или Заказчик подойдёт к команде |
| В UI-приложении есть обработка ошибок ввода | ==XX== | Спец |
| В UI-приложении есть обработка ситуаций непопадания в цель | ==XX== | Спец |
| В серверном приложении есть обработка ошибок/ситуаций, с возврашением кода ошибки HTTP и сообщения в ответе | ==XX== | Заказчик |
| Для работы с JSON использована библиотека, а не рукописное решение | ==XX== | Спец, где актуально (java/python) |
| Можно задавать g (ускорение свободного падения) | ==XX== | колониальная служба доставки подразумевает развёртывание во внеземных колониях с g, отличным от земного. g - это настройка системы |
| Спецификация методов API с входными и выходными параметрами, описанием методов, возвращаемыми ошибками и прочим | ==5== | (в папке doc в git-е) |
| Наличие диаграмм иллюстрирующих решение задачи | ==5== | (в папке doc в git-е) |
| Выявлены и зафиксированы требования разных типов | ==5== | (в папке doc в git-е) |
| Описан сценарий проверки | ==3== | (в папке doc в git-е) |
| ==ещё ...== | | |
### :clipboard: 1.4 Задачи и условия этапа
Задачи:
* начать программировать
* выявить понятные и непонятные места
* понятные места - формализовать в задачи на разработку
* непонятные места - оформить как вопросы на командировку #2
* получить эмоции от когнитивного диссонанса после возвращения аналитика в команду :smile:
Постоянно будет доступен по URL **тестовый сервер** (==организовать сервер, доступный из Интернета==) - чтобы команды попробовали с ним повзаимодействовать. Сервер не решает задачу, но выдаёт данные в правильном формате и реагирует на правильные/неправильные данные ==(может подсказать формат/пример JSON запроса)==.
## (:clock130: 11:00) 2. Начало индивидуальных консультаций с Заказчиком ("Уточнение облика" - выявление командами недостающеего инфо: уточнение предметной области, требований и ограничений)
В 10:45 делается объявление:
> С 11:00 Заказчик индивидуально принимает аналитиков команд (по записи, время записи указано в ==талоне==), может ответить на вопросы и предоставить доступ к стенду. Время общения с Заказчиком - 5 минут. Повторная встреча - через каждые полчаса до 13:00.
Далее аналитики команд встречаются с Заказчиком, 1 на 1 (чтобы "секреты не утекли").
Дополнительно в инфо-чат высылаются ==тестовые данные== - наборы координат и искомых "маршрутов" (целеуказаний). Цель выдачи не формулируется, но тестовые данные д.б. использованы:
* для отладки продукта при разработке
* в составе тестов
## (:clock230: 12:30) 3. "Уточнение ТЗ" - прояснение ТЗ со стороны Заказчика
В 12:30) или **по ситуации** командам высылается **разъяснение ТЗ** (требования/ограничения, которые команды д.б. выявить, но могли упустить):
> **Уточнение требований ТЗ**
>
> Координаты КСД-ПП (пункта назначения) - (X, Y) в целых километрах, КСД-Ц (отправитель) находится в (0,0).
>
> Маршрут доставки - это это целеуказания: углы "альфа" (азимут, по горизонтали), "бета" (угол места, по вертикали) и скорость посылки. Углы в целых градусах. Скорость - в целых м/с, из набора 100, 200..1000, (кратные 100).
>
> "Оптимальная" скорость - минимально возможная из допустимых, которая обеспечит попадание в пункт назначения.
>
> Критерий "попадания" - пересечение траектории посылки с полу-сферой радиуса 1 км с центром в пункте назначения ("силовое поле, принимающее посылку").
>
> Ускорение свободного падения g по умолчанию равно 10. Должна быть возможность сконфигурировать продукт для другого значения g.
>
> __Программа ввода данных и отображения результата__ должна позволять ввести координаты КСД-ПП и отобразить "маршрут" (рассчитанные целеуказания - азимут, угол места, скорость)
>
> __Сервер приложения__ - вэб-сервер, принимает POST-запрос по HTTP с данными в теле запроса в JSON-формате, выдаёт "маршрут" в JSON-формате (в теле ответа) и соответствующий статус.
>
> Программа ввода данных и отображения результата должна получать результат через запрос к серверу приложения, по API.
>
> *Примечание:* при демонстрации созданного __Сервера приложения__ желательно обеспечить (и проверить) доступность сервера из Сети (чтобы не терять время на настройку локального соединения машины участника и стенда)
## (:clock330: 12:30) 4. Открытие "приёмки результатов" - предъявление командами Продукта
:::success
**Нужна сеть между стендом Заказчика и серверами команд**
:::
Команды демонстрируют Продукт ==(по живой очереди/записи через Tg)==:
* команда **у Заказчика** прогоняет Продукт команды через (новые) тестовые данные, в т.ч. на особых (за радиусом макс.стрельбы, на координатах, куда не попасть на целочисленных ЦУ и т.д.)
* ~~через UI команды~~
* из тестового приложения по API к серверу команды
* **Специалист по технологиям** делает ревью проекта/кода - ==нужны критерии/чеклисты оценки==
* оценивается (Специалист) UI (для выявления "Лучшего UI" и "Самого особого UI")
Командам начисляются баллы:
* по чеклисту
* за прохождение функциональных тестов на приёмке
* дополнительно первым достигшим ==(по сколько?)==
## (:clock530:) 5. "Задача со звёздочкой" - расширенное ТЗ за доп.баллы
Если команды быстро справляются, объявляется доп.задание.
Команды, которые решаются взяться за доп.задачи:
* при успешном решении получают доп.баллы (для выявления лучших из лидеров)
* при неуспешном решении - теряют баллы
**Задание:** расчёт оптимального (чтобы точно попасть и/или с минимумом скорости/"топлива") размещения КСД-Ц для заданного набора пунктов назначения
**Суть:**
* расширить математику до перебора точек стояния точки стрельбы
* разработать и предложить Заказчику API
* добавить новый сервис с новым API
:::success
**На этом всё**
:::
## (:clock6: 16:30-17:00) 6. "Deadline" - подведение итогов, калькуляция
После 16:30 закрывается запись на приёмку
С 17:00 подведение итогов в столовой, награждение, аквадискотека и пр.
## Тестовые данные (для тестов)
[тут](/X3NrjG4yQy2OJHGfcG8CQA?view)
{%hackmd X3NrjG4yQy2OJHGfcG8CQA %}
## Тестовые данные (для приёмки заданий)
[тут](/IyvV1RwYTLeAzxeZCsOp2Q?view)
{%hackmd IyvV1RwYTLeAzxeZCsOp2Q %}
## Сообщение в Инфо-канал
[тут](/wQ2sDt57TjiH6Vk9mDgY6Q?view)
{%hackmd wQ2sDt57TjiH6Vk9mDgY6Q %}
## 💬 Вопросы и предложения
1.
2.