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