---
# System prepended metadata

title: '[НИЦ] Хакатон-2033'

---

# [НИЦ] Хакатон-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. 

