Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačkih ruta i tekuća demokracija

Nedavno smo rekao je o korporativnom master programu JetBrains i ITMO Univerziteta „Razvoj softvera / Softversko inženjerstvo“. Pozivamo sve zainteresovane na dan otvorenih vrata u ponedeljak, 29. aprila. Reći ćemo vam o prednostima našeg master programa, koje bonuse nudimo studentima i šta tražimo zauzvrat. Osim toga, svakako ćemo odgovoriti na pitanja naših gostiju.

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačkih ruta i tekuća demokracijaDan otvorenih vrata održat će se u uredu JetBrains u poslovnom centru Times, gdje studiraju naši studenti master studija. Počinje u 17:00. Sve detalje i prijavu za događaj možete saznati na web stranici mse.itmo.ru. Dođite i nećete požaliti!

Jedna od glavnih komponenti programa je praksa. Studenti imaju puno toga: sedmične domaće zadatke, semestralne projekte i hakatone. Zahvaljujući potpunom uživljavanju u savremene razvojne metodologije i tehnologije tokom studija, diplomci se brzo integrišu u radne procese velikih IT kompanija.

U ovom postu želimo detaljnije govoriti o DevDays hackatonima, koji se održavaju svakih šest mjeseci. Pravila su jednostavna: okupljaju se timovi od 3-4 osobe i tri dana učenici ostvaruju svoje ideje. Šta bi moglo biti od ovoga? Pročitajte prvi dio priča o hackaton projektima ovog semestra od samih studenata :)

Dnevnik sa preporukama filmova

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačkih ruta i tekuća demokracija

Autor ideje
Ivan Ilchuk
Poredati
Ivan Ilčuk – raščlanjivanje radnje filma, server
Vladislav Korablinov – razvoj modela za poređenje blizine dnevničkog zapisa i radnje filma
Dmitrij Valčuk – UI
Nikita Vinokurov – UI, dizajn

Cilj našeg projekta je bio da napišemo desktop aplikaciju – dnevnik koji bi na osnovu zapisa u njemu preporučivao filmove korisniku.

Ova ideja mi je pala na pamet kada sam bio na putu za fakultet i razmišljao o svojim problemima. „S kojim god problemom se osoba suočila, neki klasični pisac je već pisao o tome“, pomislio sam. “A pošto ga je neko napisao, znači da ga je neko već snimio.” Tako se prirodno pojavila želja za gledanjem filma o osobi sa istim psihičkim mukama.

Očigledno, postoji širok izbor zasebnih dnevnika i zasebnih usluga preporuka (ali obično se preporuke zasnivaju na onome što se osobi prethodno svidjelo). U principu, ovaj projekat ima nešto zajedničko sa traženjem filma po ključnim tačkama, ali ipak, prije svega, naša aplikacija pruža funkcionalnost dnevnika.

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačkih ruta i tekuća demokracijaKako smo ovo implementirali? Kada pritisnete magično dugme, dnevnik šalje zapis na server, gde se film bira na osnovu opisa preuzetog sa Wikipedije. Naš frontend je napravljen u Electronu (mi ga koristimo, a ne web stranicu, jer smo prvobitno odlučili da korisničke podatke ne skladištimo na serveru, već lokalno na računaru), a server i sam sistem preporuka napravljeni su u Pythonu: TF-ovi su bili dobijeno iz opisa -IDF vektora koji su upoređeni zbog blizine vektoru unosa u dnevnik.

Jedan član tima je radio samo na modelu, drugi je u potpunosti radio na front-endu (u početku zajedno s trećim članom, koji je kasnije prešao na testiranje). Bavio sam se raščlanjivanjem filmskih zapleta sa Wikipedije i servera.

Korak po korak približavali smo se rezultatu, prevazilazeći niz problema, počevši od činjenice da je model u početku zahtijevao puno RAM-a, završavajući s teškoćom prijenosa podataka na server.

Sada, da biste pronašli film za večer, ne treba vam mnogo truda: rezultat našeg trodnevnog rada je desktop aplikacija i server, kojem korisnik pristupa putem https, a kao odgovor dobija izbor od 5 filmova sa kratak opis i poster.

Moji utisci o projektu su vrlo pozitivni: rad je bio zadivljujući od ranog jutra do kasno u noć, a rezultirajuća aplikacija povremeno daje izuzetno smiješne rezultate u stilu “Nespavane noći” za dnevnički zapis o domaćem zadatku na fakultetu ili film o prvom danu škole za priču o prvom danu na odjeljenju.

Relevantne veze, instalateri itd. mogu se pronaći ovdje.

Generator rute

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačkih ruta i tekuća demokracijaAutor ideje
Artemyeva Irina
Poredati
Artemyeva Irina – vođa tima, glavna petlja
Gordeeva Ljudmila – muzika
Platonov Vladislav – rute

Zaista volim da šetam gradom: gledam zgrade, ljude, razmišljam o istoriji. Ali, čak i kada promijenim mjesto stanovanja, prije ili kasnije se susrećem s problemom odabira rute: završio sam sve što sam mogao smisliti. Ovako je nastala ideja da se automatizuje generisanje ruta: vi naznačite početnu tačku i dužinu rute, a program vam daje opciju. Šetnje mogu biti duge, pa se čini da je logičan razvoj ideje dodavanje mogućnosti da se naznače međutačke za "stanicu", gdje biste mogli užiti i odmoriti se. Druga grana razvoja bila je muzika. Hodanje uz muziku je uvijek zabavnije, pa bi bilo sjajno dodati mogućnost odabira liste za reprodukciju na osnovu generisane rute.

Takva rješenja nije bilo moguće pronaći među postojećim aplikacijama. Najbliži analozi su bilo koji planeri ruta: Google Maps, 2GIS, itd.

Najzgodnije je imati takvu aplikaciju na telefonu, pa je korištenje Telegrama bila dobra opcija. Omogućava vam da prikazujete mape i puštate muziku, a sve to možete kontrolisati pisanjem bota. Glavni rad sa mapama obavljen je korištenjem Google Map API-ja. Python olakšava kombinovanje obe tehnologije.

U timu su bile tri osobe, tako da je zadatak bio podijeljen u dva podzadatka koji se ne preklapaju (rad sa mapama i rad sa muzikom) kako bi momci mogli samostalno raditi, a ja sam preuzeo na sebe da kombinujem rezultate.

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačkih ruta i tekuća demokracijaNiko od nas nikada nije radio sa Google Map API-jem ili pisanim Telegram botovima, tako da je glavni problem bila količina vremena izdvojenog za implementaciju projekta: za razumijevanje nečega uvijek je potrebno više vremena nego za raditi nešto što dobro znate. Također je bilo teško odabrati API za Telegram bot: zbog blokiranja ne rade svi i morao sam se mučiti da sve podesim.

Vrijedi posebno spomenuti kako je riješen problem generiranja ruta. Lako je napraviti rutu između dvije lokacije, ali što možete ponuditi korisniku ako je poznata samo dužina rute? Neka korisnik želi hodati 10 kilometara. Odabire se tačka u proizvoljnom smjeru, udaljenost do koje je u pravoj liniji 10 kilometara, nakon čega se pravi ruta do ove točke pravim putevima. Najvjerovatnije neće biti ravno, pa ćemo ga skratiti na navedenih 10 kilometara. Postoji mnogo opcija za takve rute - dobili smo pravi generator ruta!

Prvobitno sam želio da segmentiram mapu na područja koja odgovaraju zelenim površinama: nasipi, dvorišta, ulice, kako bih dobila što ugodniju rutu za šetnju, a ujedno i generirala muziku u skladu s tim područjima. Ali ispostavilo se da je to učiniti pomoću Google Map API-ja teško (nismo imali vremena da riješimo ovaj problem). Međutim, bilo je moguće realizirati izgradnju rute kroz određene tipove lokacija (trgovina, park, biblioteka): ako je ruta obišla sva navedena mjesta, ali još nije prijeđena željena udaljenost, ona se završava do udaljenost koju je odredio korisnik u slučajnom smjeru. Google Map API vam također omogućava da izračunate procijenjeno vrijeme putovanja, što vam pomaže da odaberete playlistu tačno za cijelu šetnju.

Kao rezultat toga, uspeo da napravi generaciju rute po početnoj tački, udaljenosti i međutočkama; sve je bilo pripremljeno da se muzika klasifikuje po deonicama rute, ali zbog nedostatka vremena odlučeno je da se ostavi opcija izbora plejliste jednostavno kao dodatne UI grane. Tako je korisnik mogao samostalno birati muziku koju će slušati.

Glavni problem u radu sa muzikom bio je nepoznavanje odakle da preuzme mp3 fajlove bez potrebe da korisnik ima nalog na bilo kom servisu. Odlučeno je da se traži muzika od korisnika (režim UserMusic). Ovo stvara novi problem: nemaju svi mogućnost preuzimanja pjesama. Jedno rešenje je kreiranje repozitorija sa muzikom od korisnika (BotMusic režim) - iz njega možete generisati muziku bez obzira na servise.

Iako ne savršeno, završili smo zadatak: na kraju smo dobili aplikaciju koju bih želio koristiti. Općenito, ovo je jako cool: prije tri dana ste imali samo ideju i nijednu ideju kako to tačno implementirati, ali sada postoji rješenje koje radi. Ovo su mi bila jako važna tri dana. Više se ne plašim da smislim nešto što nemam dovoljno znanja da implementiram, biti vođa tima je bilo neverovatno zanimljivo, a upoznao sam divne momke koji su se pridružili mom timu bolje!

Tečna demokratija

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačkih ruta i tekuća demokracija

Autor ideje
Stanislav Sychev
Poredati
Stanislav Sychev – vođa tima, baza podataka
Nikolay Izyumov – bot interfejs
Anton Ryabushev – backend

Unutar različitih grupa često postoji potreba za donošenjem odluke ili glasanjem. Obično u takvim slučajevima pribjegavaju direktna demokratija, međutim, kada se grupa poveća, mogu nastati problemi. Na primjer, osoba u grupi možda neće htjeti često odgovarati na pitanja ili odgovarati na pitanja o određenim temama. U velikim grupama, kako bi izbjegli probleme kojima pribjegavaju predstavnička demokratija, kada se između svih ljudi bira posebna grupa „poslanika“, koji ostale oslobađaju tereta izbora. Ali, prilično je teško postati takav poslanik, a osoba koja to postane neće nužno biti poštena i ugledna, kako se činilo biračima.

Da bi riješio probleme oba sistema, Brian Ford je predložio koncept tekuća demokratija. U takvom sistemu, svako je slobodan da izabere ulogu redovnog korisnika ili delegata, jednostavno izražavajući svoju želju. Svako može samostalno glasati ili dati glas delegatu o jednom ili više pitanja. Delegat takođe može dati svoj glas. Štaviše, ako delegat više ne odgovara glasaču, glasanje se može povući u bilo koje vrijeme.

Primeri upotrebe likvidne demokratije nalaze se u politici, a mi smo želeli da implementiramo sličnu ideju za svakodnevnu upotrebu u svim grupama ljudi. Na sljedećem DevDays hackathonu odlučili smo da napišemo Telegram bota za glasanje po principima likvidne demokratije. U isto vrijeme, želio sam izbjeći uobičajeni problem sa takvim botovima - začepljenje općeg chata porukama od bota. Rješenje je unijeti što više funkcionalnosti u lični razgovor.

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačkih ruta i tekuća demokracijaZa kreiranje ovog bota koristili smo se API iz Telegrama. PostgreSQL baza podataka je odabrana za čuvanje istorije glasanja i delegacija. Za komunikaciju sa botom instaliran je Flask server. Izabrali smo ove tehnologije jer... već smo imali iskustva u interakciji sa njima tokom master studija. Rad na tri komponente projekta – bazi podataka, serveru i botu – uspješno je raspoređen među članovima tima.

Naravno, tri dana su kratko vrijeme, tako da smo tokom hakatona ideju implementirali do nivoa prototipa. Kao rezultat toga, kreirali smo bota koji u opći chat piše samo informacije o otvaranju glasanja i njegovim anonimnim rezultatima. Mogućnost glasanja i kreiranja ankete se implementira kroz ličnu prepisku sa botom. Da biste glasali, unesite naredbu koja prikazuje listu pitanja koja zahtijevaju direktnu pažnju. U ličnoj korespondenciji možete vidjeti listu delegata i njihove prethodne glasove, a također im dati svoj glas za neku od tema.

Video sa primjerom rada.

Bilo je zanimljivo raditi na projektu, ostali smo na fakultetu do ponoći, mislimo da je ovo odličan način da se odmorimo od studiranja, iako je jako iscrpljujuće. Bilo je to ugodno iskustvo raditi u zbijenom timu.

PS. Već je upis na master programe za narednu akademsku godinu otvoren. Pridruži nam se!

Izvor: www.habr.com

Dodajte komentar