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

Nedavno smo rekao o korporativnom magistarskom programu JetBrainsa i ITMO Sveučilišta “Razvoj softvera / softversko inženjerstvo”. Pozivamo sve zainteresirane na Dan otvorenih vrata u ponedjeljak, 29. travnja. Reći ćemo vam koje su prednosti našeg magistarskog programa, koje bonuse nudimo studentima i što tražimo zauzvrat. Osim toga, svakako ćemo odgovoriti na pitanja naših gostiju.

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačke rute i tekuća demokracijaDan otvorenih vrata održat će se u uredu JetBrainsa u Times Business Centeru, gdje studiraju naši magistranti. Početak u 17:00 sati. Sve detalje i prijave 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 mnogo toga: tjedne zadaće, semestralne projekte i hackathone. Zahvaljujući potpunom uronjenju u suvremene razvojne metodologije i tehnologije tijekom studija, maturanti se brzo integriraju u radne procese velikih IT kompanija.

U ovom postu želimo detaljnije govoriti o DevDays hackathonima koji se održavaju svakih šest mjeseci. Pravila su jednostavna: okupljaju se timovi od 3-4 osobe i studenti tri dana oživljavaju vlastite ideje. Što bi moglo proizaći iz ovoga? Pročitajte prvi dio priča o hackathon projektima ovog semestra od samih studenata :)

Dnevnik s filmskim preporukama

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

Autor ideje
Ivan Iljčuk
Sastav tima
Ivan Ilchuk – raščlanjivanje radnje filma, poslužitelj
Vladislav Korablinov – razvoj modela za usporedbu blizine dnevničkog zapisa i radnje filma
Dmitry Valchuk – UI
Nikita Vinokurov – korisničko sučelje, dizajn

Cilj našeg projekta bio je napisati desktop aplikaciju - dnevnik koji bi korisniku na temelju unosa preporučivao filmove.

Ova mi je ideja pala na pamet kad sam bio na putu za fakultet i razmišljao o svojim problemima. “S kakvim god problemom se osoba susreće, neki je klasični pisac već pisao o tome”, pomislio sam. “A budući da je to netko napisao, znači da je to netko već snimio.” Tako se prirodno javila želja da pogledam film o osobi s istim duševnim mukama.

Očito, postoji veliki izbor zasebnih dnevnika i zasebnih usluga preporuke (ali obično se preporuke temelje na onome što se osobi prethodno svidjelo). U principu, ovaj projekt ima nešto zajedničko s traženjem filma po ključnim točkama, ali ipak, prije svega, naša aplikacija pruža funkcionalnost dnevnika.

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačke rute i tekuća demokracijaKako smo ovo implementirali? Kada pritisnete čarobni gumb, dnevnik šalje unos na poslužitelj, gdje se film odabire na temelju opisa preuzetog s Wikipedije. Naše sučelje je napravljeno u Electronu (mi ga koristimo, a ne web mjesto, jer smo inicijalno odlučili korisničke podatke ne pohranjivati ​​na poslužitelju, već lokalno na računalu), a poslužitelj i sam sustav preporuka napravljeni su u Pythonu: TF-ovi su dobiveni iz opisa -IDF vektora koji su uspoređeni na blizinu vektora unosa u dnevnik.

Jedan član tima radio je samo na modelu, drugi je radio u potpunosti 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 s Wikipedije i poslužitelja.

Korak po korak približavali smo se rezultatu, prevladavajući niz problema, počevši od činjenice da je model u početku zahtijevao puno RAM-a, do poteškoća u prijenosu podataka na poslužitelj.

Sada, da biste pronašli film za večer, ne treba vam puno truda: rezultat našeg trodnevnog rada je desktop aplikacija i poslužitelj, kojima korisnik pristupa putem https-a, dobivajući kao odgovor izbor od 5 filmova s kratak opis i plakat.

Moji dojmovi o projektu su vrlo pozitivni: rad je bio zadivljujući od ranog jutra do kasno u noć, a rezultirajuća aplikacija povremeno daje iznimno smiješne rezultate u stilu "Besane noći" za dnevnički zapis o zadaći na fakultetu ili film o prvom danu škole za priču o prvom danu na odjelu.

Mogu se pronaći relevantni linkovi, instalateri itd здесь.

Generator rute

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačke rute i tekuća demokracijaAutor ideje
Artemjeva Irina
Sastav tima
Artemjeva Irina – voditeljica tima, glavna petlja
Gordeeva Lyudmila – glazba
Platonov Vladislav – rute

Jako volim šetati gradom: promatrati zgrade, ljude, razmišljati o povijesti. No, čak i kad mijenjam mjesto stanovanja, prije ili kasnije suočim se s problemom odabira rute: sve koje sam mogao smisliti prošao sam. Tako je došlo do ideje da automatiziramo generiranje ruta: označite početnu točku i duljinu rute, a program vam da opciju. Šetnje mogu biti duge, pa se logičnim razvojem ideje čini dodavanje mogućnosti označavanja međutočaka za "zaustavljanje", gdje možete prezalogajiti i odmoriti se. Druga grana razvoja bila je glazba. Hodanje uz glazbu uvijek je zabavnije, pa bi bilo sjajno dodati mogućnost odabira playliste na temelju generirane 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.

Najprikladnije je imati takvu aplikaciju na telefonu, pa je korištenje Telegrama bila dobra opcija. Omogućuje vam prikaz karata i reprodukciju glazbe, a sve to možete kontrolirati pisanjem bota. Glavni rad s kartama obavljen je pomoću Google Map API-ja. Python olakšava kombiniranje obje tehnologije.

U timu je bilo troje ljudi, tako da je zadatak podijeljen na dva podzadatka koji se ne preklapaju (rad s mapama i rad s glazbom) kako bi dečki mogli raditi samostalno, a ja sam preuzeo na sebe spajanje rezultata.

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačke rute i tekuća demokracijaNitko od nas nikada nije radio s Google Map API-jem ili pisanim Telegram botovima, pa je glavni problem bila količina vremena dodijeljena za implementaciju projekta: razumijevanje nečega uvijek zahtijeva više vremena nego raditi nešto što dobro poznajete. Također je bilo teško odabrati Telegram bot API: zbog blokiranja ne rade svi i morao sam se namučiti da sve postavim.

Vrijedno je posebno spomenuti kako je riješen problem generiranja ruta. Lako je izgraditi rutu između dvije lokacije, ali što možete ponuditi korisniku ako je poznata samo duljina rute? Neka korisnik želi hodati 10 kilometara. Odabire se točka u proizvoljnom smjeru, čija je udaljenost u ravnoj liniji 10 kilometara, nakon čega se do ove točke gradi ruta uz stvarne ceste. Najvjerojatnije neće biti ravna pa ćemo je skratiti na navedenih 10 kilometara. Postoji mnogo opcija za takve rute - dobili smo pravi generator ruta!

U početku sam želio segmentirati kartu na područja koja odgovaraju zelenim površinama: nasipi, dvorišta, ulice, kako bih dobio najugodniju rutu za šetnju, ali i generirati glazbu u skladu s tim područjima. No pokazalo se da je to učiniti pomoću Google Map API-ja teško (nismo imali vremena riješiti ovaj problem). Međutim, bilo je moguće implementirati konstrukciju rute kroz određene vrste lokacija (trgovina, park, knjižnica): ako je ruta obišla sva navedena mjesta, ali željena udaljenost još nije prijeđena, dovršava se do udaljenost koju odredi korisnik u slučajnom smjeru. Google Map API također vam omogućuje izračunavanje procijenjenog vremena putovanja, što vam pomaže da odaberete popis pjesama točno za cijelu šetnju.

Kao rezultat toga, uspio napraviti generaciju rute prema početnoj točki, udaljenosti i međutočkama; sve je bilo pripremljeno za klasificiranje glazbe prema dijelovima rute, ali zbog nedostatka vremena odlučeno je ostaviti opciju odabira playliste jednostavno kao dodatnu UI granu. Tako je korisnik mogao samostalno odabrati glazbu koju će slušati.

Glavni problem u radu s glazbom bio je nepoznavanje odakle nabaviti mp3 datoteke bez potrebe da korisnik ima račun na bilo kojem servisu. Odlučeno je da se traži glazba od korisnika (način UserMusic). To stvara novi problem: nemaju svi mogućnost preuzimanja zapisa. Jedno od rješenja je kreiranje repozitorija s glazbom korisnika (BotMusic način) - iz njega možete generirati glazbu bez obzira na usluge.

Iako ne savršeno, izvršili smo zadatak: dobili smo aplikaciju koju bih želio koristiti. Općenito, ovo je vrlo cool: prije tri dana ste imali samo ideju i niste razmišljali o tome kako je točno implementirati, ali sada postoji radno rješenje. Bila su to jako važna tri dana za mene, više se ne bojim smisliti nešto što nemam dovoljno znanja da provedem, biti team lead je bilo nevjerojatno zanimljivo, a upoznao sam i divne dečke koji su se pridružili mom timu bolje!

Tekuća demokracija

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

Autor ideje
Stanislav Sychev
Sastav tima
Stanislav Sychev – voditelj tima, baza podataka
Nikolay Izyumov – bot sučelje
Anton Ryabushev – backend

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

Kako bi riješio probleme oba sustava, Brian Ford je predložio koncept tečna demokracija. U takvom sustavu svatko je slobodan izabrati ulogu običnog korisnika ili delegata, jednostavnom izražavanjem svoje želje. Svatko može glasovati samostalno ili dati glas delegatu za jedno ili više pitanja. Svoj glas može dati i delegat. Štoviše, ako delegat više ne odgovara biraču, glas se može povući u bilo kojem trenutku.

Primjeri korištenja tekuće demokracije nalaze se u politici, a mi smo željeli implementirati sličnu ideju za svakodnevnu upotrebu unutar svih vrsta grupa ljudi. Na sljedećem DevDays hackathonu odlučili smo napisati Telegram bot za glasovanje po principima tekuće demokracije. U isto vrijeme, želio sam izbjeći čest problem s takvim botovima - začepljenje općeg chata porukama bota. Rješenje je unijeti što više funkcionalnosti u osobni razgovor.

Hackathon DevDays'19 (1. dio): dnevnik s preporukama, generator pješačke rute i tekuća demokracijaZa izradu ovog bota koristili smo se API iz Telegrama. Baza podataka PostgreSQL odabrana je za pohranjivanje povijesti glasovanja i izaslanstava. Za komunikaciju s botom instaliran je Flask poslužitelj. Odabrali smo ove tehnologije jer... već smo imali iskustva u interakciji s njima tijekom magistarskog studija. Rad na tri komponente projekta — bazi podataka, poslužitelju i botu — uspješno je raspoređen među članovima tima.

Naravno, tri dana su malo vrijeme, pa smo tijekom hackathona implementirali ideju do razine prototipa. Kao rezultat toga, stvorili smo bota koji u opći chat piše samo informacije o otvaranju glasovanja i njegovim anonimnim rezultatima. Mogućnost glasovanja i kreiranja ankete implementirana je kroz osobnu korespondenciju s botom. Za glasanje unesite naredbu koja prikazuje popis pitanja koja zahtijevaju izravnu pozornost. U osobnoj korespondenciji možete vidjeti popis delegata i njihove dosadašnje glasove te im također dati svoj glas za neku od tema.

Video s primjerom rada.

Bilo je zanimljivo raditi na projektu, ostali smo na fakultetu do ponoći, smatramo da je ovo odličan način za predah od učenja, iako je jako iscrpljujući. Bilo je ugodno iskustvo raditi u uskom timu.

P.S. Upisi u magistarske programe za sljedeću akademsku godinu već su u tijeku otvoren... Pridruži nam se!

Izvor: www.habr.com

Dodajte komentar