Hackathon DevDays'19 (1. del): dnevnik s priporočili, generator peš poti in tekoča demokracija

Pred kratkim smo povedal o korporativnem magistrskem programu JetBrains in Univerze ITMO “Razvoj programske opreme / programsko inženirstvo”. Vse zainteresirane vabimo na dan odprtih vrat v ponedeljek, 29. aprila. Povedali vam bomo o prednostih našega magistrskega programa, kakšne bonuse ponujamo študentom in kaj zahtevamo v zameno. Poleg tega bomo zagotovo odgovorili na vprašanja naših gostov.

Hackathon DevDays'19 (1. del): dnevnik s priporočili, generator peš poti in tekoča demokracijaDan odprtih vrat bo potekal v pisarni JetBrains v poslovnem centru Times, kjer študirajo naši magistrski študenti. Začetek ob 17. Vse podrobnosti in prijavo na dogodek lahko izveste na spletni strani mse.itmo.ru. Pridite in ne bo vam žal!

Ena glavnih sestavin programa je praksa. Študenti imajo veliko tega: tedenske domače naloge, semestralne projekte in hackathone. Zahvaljujoč popolni poglobitvi v sodobne razvojne metodologije in tehnologije v času študija se diplomanti hitro vključijo v delovne procese velikih IT podjetij.

V tej objavi želimo podrobneje govoriti o DevDays hackathonih, ki potekajo vsakih šest mesecev. Pravila so preprosta: zberejo se ekipe 3-4 ljudi in študenti tri dni uresničujejo svoje ideje. Kaj bi lahko prišlo iz tega? Preberite prvi del zgodb študentov samih o projektih hackathona tega semestra :)

Dnevnik s filmskimi priporočili

Hackathon DevDays'19 (1. del): dnevnik s priporočili, generator peš poti in tekoča demokracija

Avtor ideje
Ivan Ilčuk
Poravnaj
Ivan Ilchuk – razčlenjevanje filmskega zapleta, strežnik
Vladislav Korablinov – razvoj modelov za primerjavo bližine dnevniškega zapisa in zapleta filma
Dmitry Valchuk – UI
Nikita Vinokurov – UI, oblikovanje

Cilj našega projekta je bil napisati namizno aplikacijo - dnevnik, ki bi uporabniku na podlagi vnosov v njem priporočal filme.

Ta ideja se mi je porodila, ko sem bila na poti na univerzo in sem razmišljala o svojih težavah. »S kakršno koli težavo se človek sooči, je o tem že pisal kakšen klasični pisatelj,« sem si mislil. "In ker je to nekdo napisal, pomeni, da je to nekdo že posnel." Tako se je želja po ogledu filma o osebi z enakimi duševnimi mukami pojavila sama po sebi.

Očitno obstaja veliko različnih ločenih dnevnikov in ločenih priporočilnih storitev (vendar običajno priporočila temeljijo na tem, kaj je osebi prej všeč). Načeloma ima ta projekt nekaj skupnega z iskanjem filma po ključnih točkah, a kljub temu naša aplikacija najprej zagotavlja funkcionalnost dnevnika.

Hackathon DevDays'19 (1. del): dnevnik s priporočili, generator peš poti in tekoča demokracijaKako smo to implementirali? Ko pritisnete čarobni gumb, dnevnik pošlje vnos na strežnik, kjer se na podlagi opisa iz Wikipedije izbere film. Naš frontend je bil izdelan v Electronu (uporabljamo ga mi, ne spletne strani, ker smo se sprva odločili, da uporabniških podatkov ne bomo shranjevali na strežniku, ampak lokalno na računalniku), strežnik in sam sistem priporočil pa v Pythonu: TF-ji so bili pridobljeni iz vektorjev opisov - IDF, ki smo jih primerjali glede bližine vektorju dnevniškega vnosa.

En član ekipe je delal samo na modelu, drugi pa v celoti na front-endu (sprva skupaj s tretjim članom, ki je kasneje prešel na testiranje). Ukvarjal sem se z razčlenjevanjem filmskih zapletov iz Wikipedije in strežnika.

Korak za korakom smo se približevali rezultatu, pri čemer smo premagali vrsto težav, od tega, da je model na začetku zahteval veliko RAM-a, do težav pri prenosu podatkov na strežnik.

Za iskanje večernega filma se zdaj ni treba veliko truditi: rezultat našega tridnevnega dela sta namizna aplikacija in strežnik, do katerega uporabnik dostopa prek https, v odgovor pa prejme izbor 5 filmov z kratek opis in plakat.

Moji vtisi o projektu so zelo pozitivni: delo je bilo očarljivo od zgodnjega jutra do pozne noči, nastala aplikacija pa občasno ustvari izjemno smešne rezultate v slogu »Neprespana noč« za dnevniški zapis o domačih nalogah na univerzi ali film o prvem šolskem dnevu za zgodbo o prvem dnevu na oddelku.

Najdete lahko ustrezne povezave, namestitvene programe itd tukaj.

Generator poti

Hackathon DevDays'19 (1. del): dnevnik s priporočili, generator peš poti in tekoča demokracijaAvtor ideje
Artemjeva Irina
Poravnaj
Artemjeva Irina – vodja ekipe, glavna zanka
Gordejeva Ljudmila – glasba
Platonov Vladislav – poti

Zelo rada hodim po mestu: gledam zgradbe, ljudi, razmišljam o zgodovini. Toda tudi ob menjavi kraja bivanja se prej ali slej soočim s problemom izbire poti: opravil sem vse, ki sem si jih zamislil. Tako se je porodila ideja, da avtomatiziramo generiranje poti: označite izhodišče in dolžino poti, program pa vam ponudi možnost. Sprehodi so lahko dolgi, zato se zdi logičen razvoj ideje dodajanje možnosti označevanja vmesnih točk za »postanek«, kjer bi lahko prigriznili in počivali. Druga veja razvoja je bila glasba. Hoja ob glasbi je vedno bolj zabavna, zato bi bilo super dodati možnost izbire seznama predvajanja na podlagi ustvarjene poti.

Med obstoječimi aplikacijami takih rešitev ni bilo mogoče najti. Najbližji analogi so kateri koli načrtovalci poti: Google Maps, 2GIS itd.

Najbolj priročno je imeti takšno aplikacijo na telefonu, zato je bila uporaba Telegrama dobra možnost. Omogoča prikaz zemljevidov in predvajanje glasbe, vse to pa lahko nadzorujete s pisanjem bota. Glavno delo z zemljevidi je bilo opravljeno z uporabo Google Map API. Python omogoča preprosto združevanje obeh tehnologij.

V ekipi so bili trije ljudje, tako da je bila naloga razdeljena na dve podnalogi, ki se ne prekrivata (delo z zemljevidi in delo z glasbo), da so fantje lahko delali samostojno, jaz pa sem prevzel združevanje rezultatov.

Hackathon DevDays'19 (1. del): dnevnik s priporočili, generator peš poti in tekoča demokracijaNihče od nas ni nikoli delal z Google Map API ali pisnimi Telegram roboti, zato je bila glavna težava količina časa, dodeljenega za izvedbo projekta: razumevanje nečesa vedno vzame več časa kot početje nečesa, kar dobro poznate. Prav tako je bilo težko izbrati API za Telegram bot: zaradi blokade ne delujejo vsi in moral sem se mučiti, da sem vse nastavil.

Ločeno je treba omeniti, kako je bil rešen problem generiranja poti. Preprosto je zgraditi pot med dvema lokacijama, a kaj lahko ponudite uporabniku, če je znana samo dolžina poti? Naj uporabnik želi prehoditi 10 kilometrov. Točka je izbrana v poljubni smeri, razdalja do katere v ravni črti je 10 kilometrov, po kateri je zgrajena pot do te točke po pravih cestah. Najverjetneje ne bo ravna, zato jo bomo skrajšali na navedenih 10 kilometrov. Obstaja veliko možnosti za takšne poti - dobili smo pravi generator poti!

Sprva sem zemljevid želel segmentirati na območja, ki ustrezajo zelenim površinam: nabrežja, dvorišča, ulice, da bi dobili najprijetnejšo pot za sprehod in tudi ustvarjati glasbo v skladu s temi površinami. Vendar se je izkazalo, da je to težko narediti z API-jem Google Map (nismo imeli časa za rešitev te težave). Vendar pa je bilo mogoče izvesti konstrukcijo poti skozi določene vrste lokacij (trgovina, park, knjižnica): če je pot obšla vsa določena mesta, vendar želena razdalja še ni bila prevožena, je dokončana do uporabniško določeno razdaljo v naključni smeri. Google Map API vam omogoča tudi izračun predvidenega časa potovanja, kar vam pomaga izbrati seznam predvajanja natančno za celoten sprehod.

Kot rezultat, uspelo narediti generacijo poti po izhodišču, razdalji in vmesnih točkah; vse je bilo pripravljeno za razvrščanje glasbe glede na odseke poti, vendar je bilo zaradi pomanjkanja časa odločeno, da pustimo možnost izbire seznama predvajanja preprosto kot dodatno vejo uporabniškega vmesnika. Tako je uporabnik lahko samostojno izbiral glasbo za poslušanje.

Glavna težava pri delu z glasbo je bila nevednost, od kod dobiti datoteke mp3, ne da bi uporabnik moral imeti račun na kateri koli storitvi. Odločeno je bilo zahtevati glasbo od uporabnika (način UserMusic). To ustvarja novo težavo: vsi nimajo možnosti prenosa skladb. Ena od rešitev je ustvariti repozitorij z glasbo uporabnikov (način BotMusic) - iz njega lahko ustvarjate glasbo ne glede na storitve.

Čeprav ne popolno, smo opravili nalogo: dobili smo aplikacijo, ki bi jo rad uporabljal. Na splošno je to zelo kul: pred tremi dnevi ste imeli samo idejo in niti ene misli o tem, kako bi jo uresničili, zdaj pa obstaja delujoča rešitev. To so bili zame zelo pomembni trije dnevi. Ni me več strah izmisliti nečesa, za kar nimam dovolj znanja, da bi ga uresničil, biti team lead je bilo neverjetno zanimivo in spoznal sem čudovite fante, ki so se pridružili moji ekipi. boljši!

Tekoča demokracija

Hackathon DevDays'19 (1. del): dnevnik s priporočili, generator peš poti in tekoča demokracija

Avtor ideje
Stanislav Sychev
Poravnaj
Stanislav Sychev – vodja ekipe, zbirka podatkov
Nikolay Izyumov – bot vmesnik
Anton Ryabushev – backend

Znotraj različnih skupin je pogosto treba sprejeti odločitev ali glasovati. Običajno se v takih primerih zatečejo k neposredna demokracija, ko pa se skupina poveča, lahko pride do težav. Na primer, oseba v skupini morda ne želi pogosto odgovarjati na vprašanja ali odgovarjati na vprašanja o določenih temah. V velikih skupinah, da bi se izognili težavam, h katerim se zatekajo predstavniško demokracijo, ko se izmed vseh ljudi izbere ločena skupina »poslancev«, ki ostale razbremenijo bremena izbire. Toda takšen poslanec je precej težko postati in oseba, ki to postane, ne bo nujno poštena in ugledna, kot se je zdela volivcem.

Za rešitev težav obeh sistemov je Brian Ford predlagal koncept tekoča demokracija. V takšnem sistemu si lahko vsak sam izbere vlogo navadnega uporabnika ali delegata, preprosto tako, da izrazi željo. Vsakdo lahko glasuje samostojno ali da glas delegatu o enem ali več vprašanjih. Svoj glas lahko odda tudi delegat. Še več, če delegat volivcu ne ustreza več, lahko glas kadarkoli prekliče.

Primere uporabe tekoče demokracije najdemo v politiki, mi pa smo želeli podobno idejo implementirati za vsakodnevno rabo znotraj najrazličnejših skupin ljudi. Na naslednjem DevDays hackathonu smo se odločili napisati Telegram bota za glasovanje po načelih tekoče demokracije. Hkrati sem se želel izogniti pogostemu problemu takšnih botov - zamašitvi splošnega klepeta s sporočili bota. Rešitev je, da v osebni pogovor vnesete čim več funkcionalnosti.

Hackathon DevDays'19 (1. del): dnevnik s priporočili, generator peš poti in tekoča demokracijaZa ustvarjanje tega bota smo uporabili API iz Telegrama. Za shranjevanje zgodovine glasovanja in delegacij je bila izbrana baza podatkov PostgreSQL. Za komunikacijo z botom je bil nameščen strežnik Flask. Te tehnologije smo izbrali, ker... z njimi smo imeli izkušnje že med magistrskim študijem. Delo na treh komponentah projekta – bazi podatkov, strežniku in robotu – je bilo uspešno porazdeljeno med člane ekipe.

Seveda so trije dnevi malo časa, zato smo med hackathonom idejo implementirali do nivoja prototipa. Kot rezultat smo ustvarili bota, ki v splošni klepet piše le informacije o začetku glasovanja in njegovih anonimnih rezultatih. Možnost glasovanja in ustvarjanja ankete se izvaja prek osebne korespondence z botom. Če želite glasovati, vnesite ukaz, ki prikaže seznam vprašanj, ki zahtevajo neposredno pozornost. V osebni korespondenci si lahko ogledate seznam delegatov in njihove dosedanje glasove ter jim tudi podate svoj glas pri eni izmed tem.

Video s primerom dela.

Delo na projektu je bilo zanimivo, na fakulteti smo ostali do polnoči, mislimo, da je to odličen način za oddih od študija, čeprav je zelo naporen. Delo v tesni ekipi je bila prijetna izkušnja.

PS. Vpisi v magistrske programe za naslednje študijsko leto že potekajo odprto... Pridruži se nam!

Vir: www.habr.com

Dodaj komentar