Хакатон DevDays'19 (частина 1): щоденник з рекомендаціями, генератор маршрутів для прогулянок та рідка демократія

нещодавно ми розповідали про корпоративну магістерську програму JetBrains та Університету ІТМО «Розробка програмного забезпечення / Software Engineering». Запрошуємо всіх, хто цікавиться на день відкритих дверей у понеділок 29 квітня. Ми розповімо про переваги нашої магістратури, про те, які бонуси пропонуємо студентам та що вимагаємо натомість. Окрім того, ми обов'язково відповімо на запитання наших гостей.

Хакатон DevDays'19 (частина 1): щоденник з рекомендаціями, генератор маршрутів для прогулянок та рідка демократіяДень відкритих дверей пройде в офісі JetBrains у БЦ «Таймс», де навчаються студенти нашої магістратури. Початок о 17:00. Дізнатися всі подробиці та зареєструватися на захід можна на сайті mse.itmo.ru. Приходьте та не пошкодуєте!

Однією з основних складових навчання на програмі є практика. Її у студентів багато: щотижневі домашні завдання, семестрові проекти та хакатони. Завдяки повному зануренню у сучасні методології та технології розробки під час навчання випускники швидко вливаються у робочі процеси великих IT-компаній.

У цьому пості ми хочемо докладніше розповісти про хакатони DevDays, які проходять раз на півроку. Правила прості: збираються команди по 3-4 особи та протягом трьох днів студенти втілюють власні ідеї в життя. Що з цього може вийти? Читайте першу частину розповідей про проекти хакатону цього семестру від самих студентів 🙂

Щоденник із рекомендаціями фільмів

Хакатон DevDays'19 (частина 1): щоденник з рекомендаціями, генератор маршрутів для прогулянок та рідка демократія

Автор ідеї
Іван Ільчук
Склад команди
Іван Ільчук – парсинг сюжетів фільмів, сервер
Владислав Кораблінов – розробка моделей для порівняння близькості запису щоденника та сюжету фільму
Дмитро Вальчук – UI
Микита Винокуров – UI, дизайн

Метою нашого проекту було написати десктопну програму - щоденник, який би за записами в ньому рекомендував користувачеві фільми.

Така ідея спала мені на думку, коли я їхав в універ і думав про свої проблеми. «З якою б проблемою не зіштовхнулася людина, якийсь класик про це вже писав,— подумав я. — А якщо хтось писав, значить, хтось уже й екранізував». Тож бажання подивитися фільм про людину з тими ж душевними муками з'явилося само собою.

Очевидно, існує велика різноманітність окремо щоденників та окремо рекомендаційних сервісів (але зазвичай рекомендації ґрунтуються на тому, що людині раніше сподобалося). В принципі, даний проект має щось спільне з пошуком фільму за ключовими моментами, але все-таки насамперед наша програма надає функціональність щоденника.

Хакатон DevDays'19 (частина 1): щоденник з рекомендаціями, генератор маршрутів для прогулянок та рідка демократіяЯк ми це реалізували? При натисканні чарівної кнопки щоденник відправляє запис на сервер, де фільм підбирається на підставі опису взятого з Вікіпедії. Фронтенд у нас був зроблений на Electron (ми використовуємо його, а не сайт, тому спочатку вирішили зберігати дані користувача не на сервері, а локально на комп'ютері), а сервер і сама рекомендаційна система — на Python: за описами були отримані TF -IDF вектори, які порівнювалися на близькість до вектора щоденникового запису.

Один учасник команди займався лише моделлю, інший — повністю і повністю фронтендом (спочатку на пару з третім учасником, який пізніше перейшов на тестування). Я ж займався парсингом сюжетів фільму з Вікіпедії та сервером.

Крок за кроком ми наближалися до результату, долаючи низку проблем, починаючи з того, що модель спочатку вимагала багато оперативної пам'яті, закінчуючи складністю з передачею даних на сервер.

Тепер, щоб знайти кіно на вечір, не потрібно багато зусиль: результатом нашої триденної праці став десктопний додаток та сервер, до якого користувач звертається за https, отримуючи у відповідь добірку з 5 фільмів з коротким описом та постером.

Враження від проекту у мене дуже позитивні: робота захоплювала з раннього ранку і до пізньої ночі, а отриманий додаток періодично видає вкрай кумедні результати в стилі «Бесонна ніч» на щоденниковий запис про домівку в універі або фільм про перший шкільний день на розповідь про перший день на кафедрі.

Релевантні посилання, установники та інше можна знайти тут.

Route generator

Хакатон DevDays'19 (частина 1): щоденник з рекомендаціями, генератор маршрутів для прогулянок та рідка демократіяАвтор ідеї
Артем'єва Ірина
Склад команди
Артем'єва Ірина – тимлід, main loop
Гордєєва Людмила – музика
Платонов Владислав – маршрути

Мені дуже подобається гуляти містом: дивитися на будинки, на людей, розмірковувати про історію. Але, навіть змінюючи місце проживання, рано чи пізно я стикаюся з проблемою вибору маршруту: усі, які змогла вигадати, пройшла. Так виникла ідея автоматизувати генерацію маршрутів: вказуєш початкову точку і довжину маршруту, а програма видає варіант. Прогулянки можуть бути довгими, тому логічним розвитком ідеї здається додавання можливості вказувати проміжні точки для «привалу», де можна було б перекусити та відпочити. Іншою гілкою розвитку стала музика. Іти під музику завжди веселіше, тому було б чудово додати можливість підбору плейлиста за згенерованим маршрутом.

Серед існуючих програм подібних рішень знайти не вдалося. Найближчі аналоги – будь-які планувальники маршрутів: Google Maps, 2GIS тощо.

Така програма найзручніше мати на телефоні, тому хорошим варіантом стало використання Telegram. Він дозволяє відображати карти та відтворювати музику, а керувати всім цим можна, написавши бота. Основна робота з картами проводилася за допомогою Google Map API. Легко подружити обидві технології дозволяє Python.

У команді було три людини, тому завдання було поділено на дві підзавдання, що не перетинаються (робота з картами і робота з музикою), щоб хлопці могли працювати незалежно, а об'єднання результатів я взяла на себе.

Хакатон DevDays'19 (частина 1): щоденник з рекомендаціями, генератор маршрутів для прогулянок та рідка демократіяНіхто з нас ніколи не працював з Google Map API і не писав Telegram-ботів, тому основною проблемою стала кількість часу, відведена на реалізацію проекту: розібратися в чомусь завжди займає більше часу, ніж зробити те, що добре знаєш. Також було складно вибрати API Telegram-бота: через блокування працюють не всі і довелося помучитися, щоб налаштувати все.

Окремо варто сказати, як вирішувалося завдання створення маршрутів. Нескладно побудувати маршрут між двома локаціями, але що запропонувати користувачеві, якщо відома лише довжина маршруту? Нехай користувач має намір пройти 10 кілометрів. У довільному напрямку вибирається точка, відстань до якої по прямій дорівнює 10 кілометрів, після чого до цієї точки реальними дорогами будується маршрут. Швидше за все, він не буде прямим, тому вкоротимо його до заданих 10 кілометрів. Варіантів таких маршрутів дуже багато – отримали справжній генератор маршрутів!

Спочатку хотілося сегментувати карту на ділянки, що відповідають зеленим зонам: набережним, дворам, вулицям, щоб отримувати найприємніший маршрут для прогулянки, а також генерувати музику відповідно до цих ділянок. Але зробити це засобами Google Map API виявилося непросто (вирішити цю проблему не встигли). Однак вдалося реалізувати побудову маршруту через конкретні типи локацій (магазин, парк, бібліотека): якщо маршрут обійшов усі задані місця, але бажана відстань ще не пройдено, він добудовується до заданої користувачем відстані у випадковому напрямку. Також Google Map API дозволяє обчислювати передбачуваний час у дорозі, що допомагає підібрати плейлист точно на всю прогулянку.

У підсумку вдалося зробити генерацію маршрутів по початковій точці, відстані та проміжним точкам; було підготовлено все для класифікації музики згідно з дільницями маршруту, але через брак часу було вирішено залишити можливість підбору плейлиста просто у вигляді додаткової гілки UI. Таким чином, користувач отримав можливість самостійно вибирати музику для прослуховування.

Основна проблема роботи з музикою була в незнанні, звідки можна брати mp3-файли так, щоб не вимагати від користувача наявності облікового запису на якомусь сервісі. Вирішили запитувати музику у користувача (режим UserMusic). Це породжує нову проблему: не всі мають можливість завантажувати треки. Одне з рішень — створення сховища з музикою від користувачів (режим BotMusic) — можна генерувати музику незалежно від сервісів.

Нехай і не ідеально, але з поставленим завданням ми впоралися: вийшла програма, якою мені хотілося б користуватися. А взагалі це дуже здорово: ще три дні тому ти мала лише ідею і жодну думку, як саме її реалізувати, а тепер є працююче рішення. Для мене це були дуже важливі три дні. Я більше не боюся придумувати те, на реалізацію чого не вистачає знань, бути тимлідом було неймовірно цікаво, і я краще дізналася про чудових хлопців, які пішли до мене в команду!

Рідкісна демократія

Хакатон DevDays'19 (частина 1): щоденник з рекомендаціями, генератор маршрутів для прогулянок та рідка демократія

Автор ідеї
Станіслав Сичов
Склад команди
Станіслав Сичов – тимлід, база даних
Микола Ізюмов ​​– інтерфейс бота
Антон Рябушев – бекенд

Усередині різних груп часто виникає необхідність ухвалити якесь рішення чи проголосувати. Зазвичай у таких випадках вдаються до прямої демократіїПроте, коли група стає великою, можуть виникати проблеми. Так, наприклад, людина з групи може не мати бажання часто відповідати на запитання або відповідати на запитання на певні теми. У великих групах для уникнення проблем вдаються до представницької демократії, коли з усіх людей обирають окрему групу «депутатів», які звільняють решту від тягаря вибору. Але стати таким депутатом досить складно, і людина, яка стала ним, не обов'язково буде чесною і добропорядною, якою вона представлялася виборцям.

Для вирішення проблем обох систем Брайаном Фордом було запропоновано концепцію рідкої демократії. У такій системі кожен вільний вибрати собі роль звичайного користувача чи делегата, просто виявив бажання. Будь-яка людина може проголосувати самостійно або віддати свій голос делегату з одного або кількох питань. Віддавати свій голос може й делегат. При цьому якщо делегат перестав влаштовувати виборця, голос можна відкликати будь-якої миті.

Приклади використання рідкої демократії трапляються у політиці, а нам хотілося реалізувати подібну ідею для повсякденного використання всередині різних груп людей. На черговому хакатоні DevDays ми вирішили написати Telegram-бота для голосування за принципами рідкої демократії. При цьому хотілося уникнути частої проблеми подібних роботів - засмічення загального чату повідомленнями від робота. Рішення - винести якнайбільше функціонала в особисту бесіду.

Хакатон DevDays'19 (частина 1): щоденник з рекомендаціями, генератор маршрутів для прогулянок та рідка демократіяДля створення цього бота ми використовували API від Telegram. Для зберігання історії голосувань та делегувань вибрали базу даних PostgreSQL. Для спілкування робота з базою даних був піднятий Flask-сервер. Ми обрали ці технології, т.к. ми вже мали досвід взаємодії з ними під час навчання у магістратурі. Робота над трьома складовими частинами проекту – базою даних, сервером та ботом – вдало розподілилася між учасниками команди.

Звичайно, три дні — це малий термін, тож за час хакатону ми реалізували ідею рівня прототипу. У результаті ми створили бот, який пише у спільний чат лише інформацію про відкриття голосування та його анонімні результати. Можливості проголосувати та створити голосування реалізовані через особисте листування з ботом. Для голосування вводиться команда, яка виводить перелік питань, які потребують прямої уваги. В особистому листуванні можна переглянути список делегатів та їхні попередні голоси, а також віддати їм свій голос за однією з тем.

Відео з прикладом роботи.

Працювати над проектом було цікаво, ми засиджувалися в університеті до півночі. Нам здається, що це чудовий спосіб відволіктися від навчання, хоча це сильно вимотує. Залишився приємний досвід роботи у згуртованій команді.

PS. Набір до магістратури на майбутній навчальний рік відкритий. Приєднуйтесь!

Джерело: habr.com

Додати коментар або відгук