Hackathon DevDays'19 (del 1): en dagbog med anbefalinger, en vandrerutegenerator og flydende demokrati

For nylig vi fortalt om corporate masteruddannelsen for JetBrains og ITMO University "Software Development / Software Engineering". Vi inviterer alle interesserede til åben dag mandag den 29. april. Vi vil fortælle dig om fordelene ved vores kandidatuddannelse, hvilke bonusser vi tilbyder studerende og hvad vi kræver til gengæld. Derudover vil vi helt sikkert svare på spørgsmål fra vores gæster.

Hackathon DevDays'19 (del 1): en dagbog med anbefalinger, en vandrerutegenerator og flydende demokratiÅbent dagen afholdes på JetBrains kontor i Times Business Center, hvor vores masterstuderende studerer. Starter kl 17. Du kan finde ud af alle detaljer og tilmelde dig begivenheden på hjemmesiden mse.itmo.ru. Kom og du vil ikke fortryde det!

En af hovedkomponenterne i programmet er praksis. Studerende har meget af det: ugentlige lektier, semesterprojekter og hackathons. Takket være fuldstændig fordybelse i moderne udviklingsmetoder og -teknologier under deres studier, integreres kandidater hurtigt i arbejdsprocesserne i store it-virksomheder.

I dette indlæg vil vi tale mere detaljeret om DevDays hackathons, som finder sted hvert halve år. Reglerne er enkle: Hold på 3-4 personer samles og i tre dage bringer eleverne deres egne ideer ud i livet. Hvad kan der komme ud af dette? Læs første del af historier om dette semesters hackathon-projekter fra de studerende selv :)

Dagbog med filmanbefalinger

Hackathon DevDays'19 (del 1): en dagbog med anbefalinger, en vandrerutegenerator og flydende demokrati

Idéforfatter
Ivan Ilchuk
Stå på række
Ivan Ilchuk – parsing af filmplot, server
Vladislav Korablinov - udvikling af modeller til at sammenligne nærheden af ​​en dagbogspost og plottet af en film
Dmitry Valchuk – UI
Nikita Vinokurov – UI, design

Målet med vores projekt var at skrive en desktop-applikation - en dagbog, der ville anbefale film til brugeren baseret på indtastningerne i den.

Denne idé kom til mig, da jeg var på vej til universitetet og tænkte over mine problemer. "Uanset hvilket problem en person står over for, har en eller anden klassisk forfatter allerede skrevet om det," tænkte jeg. "Og siden nogen skrev det, betyder det, at nogen allerede har filmet det." Så ønsket om at se en film om en person med samme mentale pine opstod naturligt.

Det er klart, at der er en bred vifte af separate dagbøger og separate anbefalingstjenester (men normalt er anbefalingerne baseret på, hvad personen tidligere kunne lide). I princippet har dette projekt noget tilfælles med at søge efter en film efter nøglepunkter, men alligevel giver vores applikation først og fremmest funktionaliteten som en dagbog.

Hackathon DevDays'19 (del 1): en dagbog med anbefalinger, en vandrerutegenerator og flydende demokratiHvordan implementerede vi dette? Når du trykker på den magiske knap, sender dagbogen et opslag til serveren, hvor filmen udvælges ud fra beskrivelsen hentet fra Wikipedia. Vores frontend blev lavet i Electron (vi bruger det, ikke hjemmesiden, fordi vi oprindeligt besluttede at gemme brugerdata ikke på serveren, men lokalt på computeren), og selve serveren og anbefalingssystemet blev lavet i Python: TF'er var opnået fra beskrivelserne -IDF vektorer, der blev sammenlignet for nærhed til dagbogsindtastningsvektoren.

Et teammedlem arbejdede kun på modellen, det andet arbejdede udelukkende på front-end (i første omgang sammen med et tredje medlem, som senere skiftede til test). Jeg var engageret i at analysere filmplot fra Wikipedia og serveren.

Trin for trin kom vi tættere på resultatet og overvandt en række problemer, begyndende med det faktum, at modellen oprindeligt krævede meget RAM, og endte med vanskeligheden ved at overføre data til serveren.

Nu, for at finde en film til aftenen, behøver du ikke den store indsats: Resultatet af vores tre-dages arbejde er en desktop-applikation og en server, som brugeren tilgår via https, og som svar modtager et udvalg på 5 film med en kort beskrivelse og en plakat.

Mit indtryk af projektet er meget positivt: arbejdet var fængslende fra tidlig morgen til sent om aftenen, og den resulterende applikation giver med jævne mellemrum ekstremt sjove resultater i stil med "Søvnløs nat" til en dagbogsoptegnelse om lektier på universitetet eller en film om første skoledag til en fortælling om første dag på afdelingen.

Relevante links, installatører osv. kan findes her.

Rutegenerator

Hackathon DevDays'19 (del 1): en dagbog med anbefalinger, en vandrerutegenerator og flydende demokratiIdéforfatter
Artemyeva Irina
Stå på række
Artemyeva Irina – holdleder, hovedsløjfe
Gordeeva Lyudmila – musik
Platonov Vladislav – ruter

Jeg kan virkelig godt lide at gå rundt i byen: se på bygninger, mennesker, tænke på historien. Men selv når jeg skifter bopæl, står jeg før eller siden over for problemet med at vælge en rute: Jeg har gennemført alle dem, jeg kunne komme i tanke om. Sådan opstod ideen om at automatisere genereringen af ​​ruter: Du angiver startpunktet og længden af ​​ruten, og programmet giver dig en mulighed. Gåture kan være lange, så en logisk udvikling af ideen ser ud til at tilføje muligheden for at angive mellemliggende punkter for et "stop", hvor du kan få en snack og hvile. En anden gren af ​​udviklingen var musikken. At gå til musik er altid sjovere, så det ville være fantastisk at tilføje muligheden for at vælge en afspilningsliste baseret på en genereret rute.

Det var ikke muligt at finde sådanne løsninger blandt eksisterende applikationer. De nærmeste analoger er eventuelle ruteplanlæggere: Google Maps, 2GIS osv.

Det er mest praktisk at have sådan en applikation på din telefon, så det var en god mulighed at bruge Telegram. Det giver dig mulighed for at vise kort og spille musik, og du kan styre alt dette ved at skrive en bot. Hovedarbejdet med kort blev udført ved hjælp af Google Map API. Python gør det nemt at kombinere begge teknologier.

Der var tre personer i teamet, så opgaven blev delt op i to ikke-overlappende delopgaver (arbejde med kort og arbejde med musik), så fyrene kunne arbejde selvstændigt, og jeg påtog mig at kombinere resultaterne.

Hackathon DevDays'19 (del 1): en dagbog med anbefalinger, en vandrerutegenerator og flydende demokratiIngen af ​​os havde nogensinde arbejdet med Google Map API eller skrevet Telegram-bots, så hovedproblemet var mængden af ​​tid, der blev afsat til at implementere projektet: at forstå noget tager altid mere tid end at gøre noget, du kender godt. Det var også svært at vælge Telegram bot API: På grund af blokering virkede ikke alle af dem, og jeg måtte kæmpe for at sætte alt op.

Det er værd at nævne separat, hvordan problemet med at generere ruter blev løst. Det er nemt at bygge en rute mellem to lokationer, men hvad kan du tilbyde brugeren, hvis kun rutens længde er kendt? Lad brugeren gerne gå 10 kilometer. Et punkt vælges i en vilkårlig retning, hvortil afstanden i en lige linje er 10 kilometer, hvorefter der bygges en rute til dette punkt ad rigtige veje. Mest sandsynligt vil det ikke være lige, så vi vil forkorte det til de angivne 10 kilometer. Der er rigtig mange muligheder for sådanne ruter – vi har fået en rigtig rutegenerator!

I første omgang ønskede jeg at segmentere kortet i områder svarende til grønne områder: volde, gårdhaver, gader, for at få den mest behagelige rute til en gåtur, og også generere musik i overensstemmelse med disse områder. Men at gøre dette ved hjælp af Google Map API viste sig at være svært (vi havde ikke tid til at løse dette problem). Det var dog muligt at implementere konstruktionen af ​​en rute gennem bestemte typer lokationer (butik, park, bibliotek): hvis ruten gik rundt om alle de angivne steder, men den ønskede afstand endnu ikke er tilbagelagt, gennemføres den til en brugerspecificeret afstand i en tilfældig retning. Google Map API giver dig også mulighed for at beregne den estimerede rejsetid, hvilket hjælper dig med at vælge en playliste nøjagtigt for hele turen.

Som følge heraf formået at lave en generation ruter efter startpunkt, afstand og mellemliggende punkter; alt var forberedt til at klassificere musik efter sektioner af ruten, men på grund af mangel på tid blev det besluttet at lade muligheden for at vælge en afspilningsliste blot være en ekstra UI-gren. Således var brugeren i stand til selvstændigt at vælge den musik, der skulle lyttes til.

Det største problem med at arbejde med musik var ikke at vide, hvor man skulle hente mp3-filer fra uden at kræve, at brugeren skulle have en konto på nogen tjeneste. Det blev besluttet at anmode om musik fra brugeren (UserMusic-tilstand). Dette skaber et nyt problem: ikke alle har mulighed for at downloade numre. En løsning er at lave et lager med musik fra brugere (BotMusic-tilstand) - fra det kan du generere musik uanset tjenester.

Selvom det ikke var perfekt, fuldførte vi opgaven: vi endte med en applikation, som jeg gerne vil bruge. Generelt er dette meget fedt: For tre dage siden havde du kun en idé og ikke en eneste tanke om, hvordan den præcist skulle implementeres, men nu er der en fungerende løsning. Det var meget vigtige tre dage for mig. Jeg er ikke længere bange for at finde på noget, jeg ikke har nok viden til at implementere, at være teamleder var utrolig interessant, og jeg lærte de vidunderlige fyre at kende, der sluttede sig til mit team bedre!

Flydende demokrati

Hackathon DevDays'19 (del 1): en dagbog med anbefalinger, en vandrerutegenerator og flydende demokrati

Idéforfatter
Stanislav Sychev
Stå på række
Stanislav Sychev – teamleder, database
Nikolay Izyumov – bot-grænseflade
Anton Ryabushev – backend

Inden for forskellige grupper er der ofte behov for at træffe en beslutning eller stemme. Normalt tyr de i sådanne tilfælde til direkte demokratiMen når gruppen bliver stor, kan der opstå problemer. For eksempel vil en person i en gruppe måske ikke besvare spørgsmål ofte eller besvare spørgsmål om bestemte emner. I store grupper, for at undgå problemer, de tyr til repræsentativt demokrati, når en særskilt gruppe af "deputerede" vælges blandt alle de mennesker, som frigør resten fra valgbyrden. Men det er ret svært at blive sådan en stedfortræder, og den person, der bliver det, vil ikke nødvendigvis være ærlig og respektabel, som han så ud for vælgerne.

For at løse problemerne med begge systemer foreslog Brian Ford konceptet flydende demokrati. I et sådant system kan enhver frit vælge rollen som en almindelig bruger eller en delegeret, blot ved at udtrykke deres ønske. Enhver kan stemme selvstændigt eller give en stemme til en delegeret i et eller flere spørgsmål. En delegeret kan også afgive sin stemme. Desuden, hvis den delegerede ikke længere passer vælgeren, kan afstemningen til enhver tid trækkes tilbage.

Eksempler på brugen af ​​flydende demokrati findes i politik, og vi ønskede at implementere en lignende idé til hverdagsbrug inden for alle slags grupper af mennesker. Ved det næste DevDays hackathon besluttede vi at skrive en Telegram-bot til at stemme efter principperne for flydende demokrati. Samtidig ville jeg undgå et almindeligt problem med sådanne bots - at tilstoppe den generelle chat med beskeder fra botten. Løsningen er at bringe så meget funktionalitet som muligt ind i en personlig samtale.

Hackathon DevDays'19 (del 1): en dagbog med anbefalinger, en vandrerutegenerator og flydende demokratiFor at oprette denne bot brugte vi API fra Telegram. En PostgreSQL-database blev valgt til at gemme historikken for afstemninger og delegationer. For at kommunikere med botten blev der installeret en Flask-server. Vi valgte disse teknologier, fordi... vi havde allerede erfaring med at interagere med dem under vores kandidatuddannelse. Arbejdet med de tre komponenter i projektet – databasen, serveren og botten – blev fordelt med succes blandt teammedlemmerne.

Selvfølgelig er tre dage kort tid, så under hackathonet implementerede vi ideen til prototypeniveau. Som et resultat oprettede vi en bot, der kun skriver oplysninger til den generelle chat om åbningen af ​​afstemningen og dens anonyme resultater. Muligheden for at stemme og oprette en afstemning implementeres gennem personlig korrespondance med botten. For at stemme skal du indtaste en kommando, der viser en liste over emner, der kræver direkte opmærksomhed. I personlig korrespondance kan du se listen over delegerede og deres tidligere stemmer, og også give dem din stemme om et af emnerne.

Video med et eksempel på arbejde.

Det var interessant at arbejde på projektet, vi blev på universitetet til midnat.Vi synes, at det er en god måde at tage en pause fra studiet på, selvom det er meget udmattende. Det var en behagelig oplevelse at arbejde i et tæt sammentømret team.

PS. Tilmelding til kandidatuddannelser for det næste akademiske år er allerede nu åben... Kom med os!

Kilde: www.habr.com

Tilføj en kommentar