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

Нядаўна мы расказвалі аб карпаратыўнай магістарскай праграме JetBrains і Універсітэта ІЦМА "Распрацоўка праграмнага забеспячэння / Software Engineering". Запрашаем усіх, хто цікавіцца на дзень адчыненых дзвярэй у панядзелак 29 красавіка. Мы раскажам аб перавагах нашай магістратуры, аб тым, якія бонусы прапануем студэнтам і што патрабуем наўзамен. Акрамя таго, мы абавязкова адкажам на пытанні нашых гасцей.

Хакатон DevDays'19 (частка 1): дзённік з рэкамендацыямі, генератар маршрутаў для прагулак і вадкая дэмакратыяДзень адчыненых дзвярэй пройдзе ў офісе JetBrains у БЦ «Таймс», дзе вучацца студэнты нашай магістратуры. Пачатак у 17. Даведацца пра ўсе падрабязнасці і зарэгістравацца на мерапрыемства можна на сайце 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

Дадаць каментар