Hackathon DevDays'19 (parto 1): taglibro kun rekomendoj, promen-itinera generatoro kaj likva demokratio

Lastatempe ni rakontis pri la kompania majstra programo de JetBrains kaj ITMO-Universitato "Programevoluo / Programaro-Inĝenierado". Ni invitas ĉiujn interesatojn al malferma tago lunde la 29-an de aprilo. Ni rakontos al vi pri la avantaĝoj de nia majstra programo, kiajn gratifikojn ni ofertas al studentoj kaj kion ni postulas kontraŭe. Krome, ni certe respondos demandojn de niaj gastoj.

Hackathon DevDays'19 (parto 1): taglibro kun rekomendoj, promen-itinera generatoro kaj likva demokratioLa malferma tago okazos ĉe la oficejo de JetBrains en la Komerca Centro de Times, kie studas niaj majstraj studentoj. Komencas je 17:00. Vi povas ekscii ĉiujn detalojn kaj registriĝi por la evento en la retejo mse.itmo.ru. Venu kaj vi ne bedaŭros!

Unu el la ĉefaj komponantoj de la programo estas praktiko. Studentoj havas multe da ĝi: semajnaj hejmtaskoj, semestraj projektoj kaj hakatonoj. Danke al kompleta mergo en modernaj evoluaj metodaroj kaj teknologioj dum siaj studoj, diplomiĝintoj rapide integriĝas en la laborprocezojn de grandaj IT-kompanioj.

En ĉi tiu afiŝo ni volas paroli pli detale pri DevDays-hakatonoj, kiuj okazas ĉiujn ses monatojn. La reguloj estas simplaj: teamoj de 3-4 homoj kunvenas kaj dum tri tagoj studentoj vivigas siajn proprajn ideojn. Kio povus veni el ĉi tio? Legu la unuan parton de rakontoj pri la hakatonprojektoj de ĉi tiu semestro de la studentoj mem :)

Taglibro kun filmrekomendoj

Hackathon DevDays'19 (parto 1): taglibro kun rekomendoj, promen-itinera generatoro kaj likva demokratio

Aŭtoro de la ideo
Ivan Ilĉuk
Komando-strukturo
Ivan Ilchuk - filma intrigo analizo, servilo
Vladislav Korablinov - evoluo de modeloj por kompari la proksimecon de taglibro kaj la intrigo de filmo
Dmitry Valchuk - UI
Nikita Vinokurov - UI, dezajno

La celo de nia projekto estis verki labortablan aplikaĵon - taglibron, kiu rekomendus filmojn al la uzanto surbaze de la enskriboj en ĝi.

Ĉi tiu ideo venis al mi kiam mi estis survoje al universitato kaj pensis pri miaj problemoj. "Kiu ajn problemo alfrontas homo, iu klasika verkisto jam skribis pri ĝi," mi pensis. "Kaj ĉar iu skribis ĝin, tio signifas ke iu jam filmis ĝin." Do la deziro spekti filmon pri homo kun la sama mensa turmento aperis nature.

Evidente, ekzistas tre diversaj apartaj taglibroj kaj apartaj rekomendaj servoj (sed kutime la rekomendoj baziĝas sur tio, kion la persono antaŭe ŝatis). En principo, ĉi tiu projekto havas ion komunan kun serĉado de filmo laŭ ŝlosilaj punktoj, sed tamen, antaŭ ĉio, nia aplikaĵo provizas la funkciojn de taglibro.

Hackathon DevDays'19 (parto 1): taglibro kun rekomendoj, promen-itinera generatoro kaj likva demokratioKiel ni efektivigis ĉi tion? Kiam vi premas la magian butonon, la taglibro sendas enskribon al la servilo, kie la filmo estas elektita laŭ la priskribo prenita el Vikipedio. Nia fasado estis farita en Electron (ni uzas ĝin, ne la retejon, ĉar ni komence decidis konservi uzantdatenojn ne en la servilo, sed loke en la komputilo), kaj la servilo kaj la rekomendsistemo mem estis faritaj en Python: TF-oj estis akirita de la priskriboj -IDF-vektoroj kiuj estis komparitaj por proksimeco al la taglibro-enirvektoro.

Unu teamano laboris nur pri la modelo, la alia laboris tute pri la antaŭa finaĵo (komence kune kun tria membro, kiu poste ŝanĝis al testado). Mi okupiĝis pri analizado de filmaj intrigoj el Vikipedio kaj la servilo.

Paŝon post paŝo ni alproksimiĝis al la rezulto, venkante kelkajn problemojn, komencante de la fakto, ke la modelo komence postulis multe da RAM, finiĝante kun la malfacileco translokigi datumojn al la servilo.

Nun, por trovi filmon por la vespero, oni ne bezonas multe da peno: rezulto de nia tritaga laboro estas labortabla aplikaĵo kaj servilo, kiujn la uzanto aliras per https, ricevante responde elekton de 5 filmoj kun mallonga priskribo kaj afiŝo.

Miaj impresoj pri la projekto estas tre pozitivaj: la laboro estis alloga de frua mateno ĝis malfrue en la nokto, kaj la rezulta aplikaĵo periode produktas ege amuzajn rezultojn en la stilo de "Sendorma Nokto" por taglibro pri hejmtasko en la universitato aŭ filmo. pri la unua lerneja tago por rakonto pri la unua tago en la fako.

Koncernaj ligiloj, instaliloj ktp troveblas tie.

Itinera generatoro

Hackathon DevDays'19 (parto 1): taglibro kun rekomendoj, promen-itinera generatoro kaj likva demokratioAŭtoro de la ideo
Artemieva Irina
Komando-strukturo
Artemyeva Irina - teamgvidanto, ĉefa buklo
Gordeeva Lyudmila - muziko
Platonov Vladislav - vojoj

Mi tre ŝatas promeni ĉirkaŭ la urbo: rigardi konstruaĵojn, homojn, pensi pri historio. Sed, eĉ kiam mi ŝanĝas mian loĝlokon, pli aŭ malpli frue mi alfrontas la problemon elekti itineron: mi plenumis ĉiujn, kiujn mi povis pensi. Jen kiel aperis la ideo aŭtomatigi la generacion de itineroj: vi indikas la deirpunkton kaj longecon de la itinero, kaj la programo donas al vi eblon. Promenoj povas esti longaj, do logika evoluo de la ideo ŝajnas aldoni la kapablon indiki mezajn punktojn por "halto", kie vi povus manĝi manĝeton kaj ripozi. Alia branĉo de evoluo estis muziko. Promenado al muziko ĉiam estas pli amuza, do estus bonege aldoni la kapablon elekti ludliston bazitan sur generita itinero.

Ne eblis trovi tiajn solvojn inter ekzistantaj aplikoj. La plej proksimaj analogoj estas iuj ajn itineroplanistoj: Google Maps, 2GIS, ktp.

Estas plej oportune havi tian aplikaĵon en via telefono, do uzi Telegramon estis bona elekto. Ĝi permesas vin montri mapojn kaj ludi muzikon, kaj vi povas kontroli ĉion ĉi skribante bot. La ĉefa laboro kun mapoj estis farita per la Google Map API. Python faciligas kombini ambaŭ teknologiojn.

Estis tri homoj en la teamo, do la tasko estis dividita en du neinterkovritaj subtaskoj (labori kun mapoj kaj labori kun muziko) por ke la uloj povu labori sendepende, kaj mi prenis sur min kombini la rezultojn.

Hackathon DevDays'19 (parto 1): taglibro kun rekomendoj, promen-itinera generatoro kaj likva demokratioNeniu el ni iam laboris kun la API de Google Map aŭ verkis Telegram-botojn, do la ĉefa problemo estis la kvanto da tempo asignita por efektivigi la projekton: kompreni ion ĉiam bezonas pli da tempo ol fari ion, kion vi bone scias. Ankaŭ estis malfacile elekti la Telegram-bot API: pro blokado, ne ĉiuj funkcias kaj mi devis barakti por agordi ĉion.

Menciindas aparte kiel la problemo de generado de itineroj estis solvita. Estas facile konstrui itineron inter du lokoj, sed kion vi povas proponi al la uzanto se nur la longeco de la itinero estas konata? Lasu la uzanton voli marŝi 10 kilometrojn. Punkto estas elektita en arbitra direkto, la distanco al kiu en rekta linio estas 10 kilometroj, post kiu vojo estas konstruita al ĉi tiu punkto laŭ realaj vojoj. Plej verŝajne ĝi ne estos rekta, do ni mallongigos ĝin al la specifitaj 10 kilometroj. Estas multaj ebloj por tiaj itineroj - ni havas veran itineran generatoron!

Komence, mi volis segmenti la mapon en areojn respondajn al verdaj areoj: riverdigoj, kortoj, stratoj, por akiri la plej agrablan vojon por promenado, kaj ankaŭ generi muzikon konforme al ĉi tiuj areoj. Sed fari tion uzante la Google Map API montriĝis malfacila (ni ne havis tempon por solvi ĉi tiun problemon). Tamen, eblis efektivigi la konstruadon de itinero tra specifaj specoj de lokoj (butiko, parko, biblioteko): se la itinero ĉirkaŭiris ĉiujn specifitajn lokojn, sed la dezirata distanco ankoraŭ ne estis vojaĝita, ĝi estas kompletigita al uzant-specifita distanco en hazarda direkto. La Google Map API ankaŭ permesas kalkuli la laŭtaksan vojaĝdaŭron, kio helpas vin elekti ludliston ĝuste por la tuta promenado.

En la fino sukcesis krei generacion itineroj laŭ deirpunkto, distanco kaj mezaj punktoj; ĉio estis preta por klasifiki muzikon laŭ sekcioj de la itinero, sed pro manko de tempo, oni decidis lasi la eblon elekti ludliston simple kiel plian UI-branĉon. Tiel, la uzanto povis sendepende elekti la muzikon por aŭskulti.

La ĉefa problemo pri laboro kun muziko estis ne scii de kie akiri mp3-dosierojn sen postuli la uzanton havi konton pri iu ajn servo. Oni decidis peti muzikon de la uzanto (UserMusic-reĝimo). Ĉi tio kreas novan problemon: ne ĉiuj havas la kapablon elŝuti trakojn. Unu solvo estas krei deponejon kun muziko de uzantoj (reĝimo BotMusic) - el ĝi vi povas generi muzikon sendepende de servoj.

Kvankam ne perfektaj, ni plenumis la taskon: ni finis kun aplikaĵo, kiun mi ŝatus uzi. Ĝenerale tio estas tre mojosa: antaŭ tri tagoj vi nur havis ideon kaj eĉ ne unu penson pri kiel ĝuste efektivigi ĝin, sed nun ekzistas funkcianta solvo. Ĉi tiuj estis tre gravaj tri tagoj por mi. Mi ne plu timas elpensi ion, kion mi ne havas sufiĉe da scioj por efektivigi, esti teamgvidanto estis nekredeble interesa, kaj mi ekkonis la mirindajn ulojn kiuj aliĝis al mia teamo. pli bone!

Likva Demokratio

Hackathon DevDays'19 (parto 1): taglibro kun rekomendoj, promen-itinera generatoro kaj likva demokratio

Aŭtoro de la ideo
Stanislav Sychev
Komando-strukturo
Stanislav Sychev - teamgvidanto, datumbazo
Nikolay Izyumov - bot-interfaco
Anton Ryabushev - backend

Ene de malsamaj grupoj, ofte estas bezono fari decidon aŭ voĉdoni. Kutime en tiaj kazoj ili recurre al rekta demokratio, tamen, kiam la grupo grandiĝas, problemoj povas ekesti. Ekzemple, persono en grupo eble ne volas respondi demandojn ofte aŭ respondi demandojn pri certaj temoj. En grandaj grupoj, por eviti problemojn ili recurre reprezenta demokratio, kiam aparta grupo de "deputitoj" estas elektita inter ĉiuj homoj, kiuj liberigas la ceterajn de la elektŝarĝo. Sed estas sufiĉe malfacile fariĝi tia deputito, kaj la homo, kiu iĝas tia, ne nepre estos honesta kaj estiminda, kiel li ŝajnis al balotantoj.

Por solvi la problemojn de ambaŭ sistemoj, Brian Ford proponis la koncepton likva demokratio. En tia sistemo, ĉiu rajtas elekti la rolon de kutima uzanto aŭ delegito, simple esprimante sian deziron. Ĉiu povas voĉdoni sendepende aŭ doni voĉdonon al delegito pri unu aŭ pluraj aferoj. Delegito ankaŭ povas doni sian voĉon. Krome, se la delegito ne plu konvenas al la balotanto, la voĉdono povas esti retirita en ajna momento.

Ekzemploj de la uzo de likva demokratio troviĝas en politiko, kaj ni volis efektivigi similan ideon por ĉiutaga uzo ene de ĉiaj grupoj de homoj. Ĉe la sekva DevDays hackathon, ni decidis skribi Telegram-bot por voĉdonado laŭ la principoj de likva demokratio. Samtempe, mi volis eviti komunan problemon kun tiaj robotoj - ŝtopi la ĝeneralan babilejon per mesaĝoj de la roboto. La solvo estas alporti kiel eble plej multe da funkcieco en personan konversacion.

Hackathon DevDays'19 (parto 1): taglibro kun rekomendoj, promen-itinera generatoro kaj likva demokratioPor krei ĉi tiun roboton ni uzis API de Telegram. PostgreSQL-datumbazo estis elektita por stoki la historion de voĉdonado kaj delegacioj. Por komuniki kun la bot, Flask-servilo estis instalita. Ni elektis ĉi tiujn teknologiojn ĉar... ni jam havis sperton interagi kun ili dum nia majstra studado. Laboro pri la tri komponantoj de la projekto—la datumbazo, la servilo kaj la bot— estis sukcese distribuita inter la teamanoj.

Kompreneble, tri tagoj estas mallonga tempo, do dum la hakatono ni efektivigis la ideon al la prototipa nivelo. Kiel rezulto, ni kreis bot, kiu skribas al la ĝenerala babilejo nur informojn pri la malfermo de voĉdonado kaj ĝiaj anonimaj rezultoj. La kapablo voĉdoni kaj krei balotenketon estas efektivigita per persona korespondado kun la bot. Por voĉdoni, enigu komandon kiu montras liston de aferoj, kiuj postulas rektan atenton. En persona korespondado, vi povas vidi la liston de delegitoj kaj iliajn antaŭajn voĉojn, kaj ankaŭ doni al ili vian voĉon pri unu el la temoj.

Video kun ekzemplo de laboro.

Estis interese prilabori la projekton, ni restis en la universitato ĝis noktomezo.Ni opinias, ke tio estas bonega rimedo por ripozi de studado, kvankam ĝi estas tre elĉerpa. Estis agrabla sperto labori en kuna teamo.

PS. Jam estas aliĝo al majstraj programoj por la venonta akademia jaro malfermi... Aliĝu al ni!

Fonto: www.habr.com

Aldoni komenton