Hackathon DevDays'19 (partea 1): un jurnal cu recomandări, un generator de trasee de mers pe jos și democrație lichidă

Recent noi a declarat despre programul de master corporativ al JetBrains și al Universității ITMO „Dezvoltare software / Inginerie software”. Invităm pe toți cei interesați la o zi a porților deschise luni, 29 aprilie. Vă vom spune despre avantajele programului nostru de master, ce bonusuri oferim studenților și ce cerem în schimb. În plus, cu siguranță vom răspunde la întrebările oaspeților noștri.

Hackathon DevDays'19 (partea 1): un jurnal cu recomandări, un generator de trasee de mers pe jos și democrație lichidăZiua porților deschise va avea loc la biroul JetBrains din Times Business Center, unde studiază studenții noștri de la master. Începe la ora 17:00. Puteți afla toate detaliile și vă puteți înscrie la eveniment pe site mse.itmo.ru. Vino și nu vei regreta!

Una dintre componentele principale ale programului este practica. Elevii au multe: teme săptămânale, proiecte semestriale și hackathon-uri. Datorită imersiunii complete în metodologiile și tehnologiile moderne de dezvoltare în timpul studiilor, absolvenții se integrează rapid în procesele de lucru ale marilor companii IT.

În această postare dorim să vorbim mai detaliat despre hackathoanele DevDays, care au loc la fiecare șase luni. Regulile sunt simple: se adună echipe de 3-4 persoane și timp de trei zile elevii își dau viață propriile idei. Ce ar putea veni din asta? Citiți prima parte a poveștilor despre proiectele hackaton din acest semestru de la studenți înșiși :)

Jurnal cu recomandari de filme

Hackathon DevDays'19 (partea 1): un jurnal cu recomandări, un generator de trasee de mers pe jos și democrație lichidă

Autorul ideii
Ivan Ilciuk
Alinia
Ivan Ilchuk – analiza intriga filmului, server
Vladislav Korablinov - dezvoltarea de modele pentru compararea proximității unei înregistrări în jurnal și a intrigii unui film
Dmitri Valchuk – UI
Nikita Vinokurov – UI, design

Scopul proiectului nostru a fost să scriem o aplicație desktop - un jurnal care să recomande filme utilizatorului pe baza intrărilor din ea.

Această idee mi-a venit când mă îndreptam spre universitate și mă gândeam la problemele mele. „Orice problemă cu care se confruntă o persoană, un scriitor clasic a scris deja despre asta”, m-am gândit. „Și din moment ce cineva a scris-o, înseamnă că cineva a filmat-o deja.” Așa că dorința de a viziona un film despre o persoană cu același chin mental a apărut firesc.

Evident, există o mare varietate de agende separate și servicii de recomandare separate (dar, de obicei, recomandările se bazează pe ceea ce i-a plăcut persoanei anterior). În principiu, acest proiect are ceva în comun cu căutarea unui film după puncte cheie, dar totuși, în primul rând, aplicația noastră oferă funcționalitatea unui jurnal.

Hackathon DevDays'19 (partea 1): un jurnal cu recomandări, un generator de trasee de mers pe jos și democrație lichidăCum am implementat asta? Când apăsați butonul magic, jurnalul trimite o intrare pe server, unde filmul este selectat pe baza descrierii preluate de pe Wikipedia. Frontend-ul nostru a fost realizat în Electron (noi îl folosim, nu site-ul web, pentru că inițial am decis să stocăm datele utilizatorului nu pe server, ci local pe computer), iar serverul și sistemul de recomandare în sine au fost realizate în Python: TF-urile erau obținut din descrierile -vectori IDF care au fost comparați pentru apropierea de vectorul de intrare în jurnal.

Un membru al echipei a lucrat doar la model, celălalt a lucrat în întregime la front-end (inițial împreună cu un al treilea membru, care ulterior a trecut la testare). Am fost angajat în analizarea intrigilor de film de pe Wikipedia și de pe server.

Pas cu pas ne-am apropiat de rezultat, depășind o serie de probleme, începând cu faptul că modelul necesita inițial multă memorie RAM, terminând cu dificultatea de a transfera date pe server.

Acum, pentru a găsi un film pentru seară, nu ai nevoie de mult efort: rezultatul muncii noastre de trei zile este o aplicație desktop și un server, pe care utilizatorul le accesează prin https, primind ca răspuns o selecție de 5 filme cu o scurtă descriere și un afiș.

Impresiile mele despre proiect sunt foarte pozitive: lucrarea a fost captivantă de dimineața devreme până seara târziu, iar aplicația rezultată produce periodic rezultate extrem de amuzante în stilul „Noapte fără somn” pentru o înregistrare în jurnal despre teme la universitate sau un film. despre prima zi de școală pentru o poveste despre prima zi la catedră.

Pot fi găsite link-uri relevante, instalatori etc aici.

Generator de rute

Hackathon DevDays'19 (partea 1): un jurnal cu recomandări, un generator de trasee de mers pe jos și democrație lichidăAutorul ideii
Artemieva Irina
Alinia
Artemyeva Irina – lider de echipă, buclă principală
Gordeeva Lyudmila – muzică
Platonov Vladislav – trasee

Îmi place foarte mult să mă plimb prin oraș: să mă uit la clădiri, oameni, să mă gândesc la istorie. Dar, chiar și atunci când îmi schimb locul de reședință, mai devreme sau mai târziu mă confrunt cu problema alegerii unui traseu: le-am terminat pe toate la care mi se putea gândi. Așa a venit ideea de a automatiza generarea de rute: tu indici punctul de plecare și lungimea traseului, iar programul îți oferă o opțiune. Plimbările pot fi lungi, așa că o dezvoltare logică a ideii pare să fie adăugarea capacității de a indica puncte intermediare pentru o „oprire”, unde ați putea să luați o gustare și să vă odihniți. O altă ramură a dezvoltării a fost muzica. Mersul pe jos în muzică este întotdeauna mai distractiv, așa că ar fi grozav să adăugați posibilitatea de a selecta o listă de redare pe baza unui traseu generat.

Nu a fost posibil să se găsească astfel de soluții printre aplicațiile existente. Cei mai apropiati analogi sunt orice planificator de rute: Google Maps, 2GIS etc.

Cel mai convenabil este să aveți o astfel de aplicație pe telefon, așa că utilizarea Telegram a fost o opțiune bună. Vă permite să afișați hărți și să redați muzică și puteți controla toate acestea scriind un bot. Principala activitate cu hărți a fost realizată folosind API-ul Google Map. Python facilitează combinarea ambelor tehnologii.

Erau trei oameni în echipă, așa că sarcina a fost împărțită în două subsarcini care nu se suprapun (lucrarea cu hărți și lucrul cu muzica), astfel încât băieții să poată lucra independent, iar eu m-am asumat să combin rezultatele.

Hackathon DevDays'19 (partea 1): un jurnal cu recomandări, un generator de trasee de mers pe jos și democrație lichidăNiciunul dintre noi nu lucrase vreodată cu API-ul Google Map sau cu roboții Telegram scris, așa că principala problemă a fost timpul alocat pentru implementarea proiectului: înțelegerea a ceva durează întotdeauna mai mult timp decât a face ceva pe care îl cunoașteți bine. De asemenea, a fost dificil să aleg API-ul bot Telegram: din cauza blocării, nu funcționează toate și a trebuit să mă chinui să configurez totul.

De menționat separat modul în care s-a rezolvat problema generării rutelor. Este ușor să construiești un traseu între două locații, dar ce poți oferi utilizatorului dacă se cunoaște doar lungimea traseului? Permiteți utilizatorului să dorească să meargă 10 kilometri. Un punct este selectat într-o direcție arbitrară, distanța până la care în linie dreaptă este de 10 kilometri, după care se construiește un traseu până în acest punct de-a lungul drumurilor reale. Cel mai probabil nu va fi drept, așa că îl vom scurta la cei 10 kilometri specificati. Există o mulțime de opțiuni pentru astfel de rute - avem un adevărat generator de rute!

Inițial mi-am dorit să segmentez harta în zone corespunzătoare zonelor verzi: terasamente, curți, străzi, pentru a obține cel mai plăcut traseu de plimbare și, de asemenea, să generez muzică în concordanță cu aceste zone. Dar a face acest lucru folosind API-ul Google Map s-a dovedit a fi dificil (nu am avut timp să rezolvăm această problemă). Cu toate acestea, a fost posibilă implementarea construcției unui traseu prin anumite tipuri de locații (magazin, parc, bibliotecă): dacă traseul a parcurs toate locurile specificate, dar distanța dorită nu a fost încă parcursă, se parcurge până la un distanța specificată de utilizator într-o direcție aleatorie. Google Map API vă permite, de asemenea, să calculați timpul estimat de călătorie, ceea ce vă ajută să alegeți un playlist exact pentru întreaga plimbare.

Ca urmare, a reusit sa faca o generatie trasee după punctul de plecare, distanță și puncte intermediare; totul a fost pregătit pentru a clasifica muzica în funcție de tronsoane ale traseului, dar din lipsă de timp s-a decis să se lase opțiunea de selectare a unui playlist pur și simplu ca ramură suplimentară a UI. Astfel, utilizatorul a putut alege în mod independent muzica pe care să o asculte.

Principala problemă cu lucrul cu muzică a fost să nu știi de unde să obții fișiere mp3 fără a cere utilizatorului să aibă un cont la orice serviciu. S-a decis să se solicite muzică de la utilizator (mod UserMusic). Acest lucru creează o nouă problemă: nu toată lumea are capacitatea de a descărca piese. O soluție este crearea unui depozit cu muzică de la utilizatori (modul BotMusic) - din acesta puteți genera muzică indiferent de servicii.

Deși nu perfect, am îndeplinit sarcina: am ajuns cu o aplicație pe care mi-ar plăcea să o folosesc. În general, acest lucru este foarte mișto: acum trei zile aveai doar o idee și nici măcar un gând despre cum să o implementezi, dar acum există o soluție de lucru. Aceste trei zile au fost foarte importante pentru mine. Nu îmi mai este frică să vin cu ceva pe care nu am suficiente cunoștințe pentru a implementa, a fi lider de echipă a fost incredibil de interesant și am cunoscut băieții minunați care s-au alăturat echipei mele. mai bine!

Democrație lichidă

Hackathon DevDays'19 (partea 1): un jurnal cu recomandări, un generator de trasee de mers pe jos și democrație lichidă

Autorul ideii
Stanislav Sichev
Alinia
Stanislav Sychev – lider de echipă, bază de date
Nikolay Izyumov – interfață bot
Anton Ryabushev – backend

În cadrul diferitelor grupuri, este adesea nevoie de a lua o decizie sau de a vota. De obicei, în astfel de cazuri se recurge la democrație directă, cu toate acestea, atunci când grupul devine mare, pot apărea probleme. De exemplu, o persoană dintr-un grup poate să nu dorească să răspundă la întrebări frecvent sau să nu răspundă la întrebări despre anumite subiecte. În grupuri mari, pentru a evita problemele la care apelează democratie reprezentativa, când dintre toți oamenii se alege un grup separat de „deputați”, care eliberează pe restul de povara alegerii. Dar este destul de dificil să devii un astfel de deputat, iar persoana care devine nu va fi neapărat onest și respectabil, așa cum le părea alegătorilor.

Pentru a rezolva problemele ambelor sisteme, Brian Ford a propus conceptul democrație lichidă. Într-un astfel de sistem, fiecare este liber să aleagă rolul unui utilizator obișnuit sau al unui delegat, pur și simplu exprimându-și dorința. Oricine poate vota independent sau poate acorda un vot unui delegat pe una sau mai multe probleme. Un delegat își poate exprima și votul. Mai mult, dacă delegatul nu mai convine alegătorului, votul poate fi retras oricând.

Exemple de utilizare a democrației lichide se găsesc în politică și am dorit să implementăm o idee similară pentru utilizarea de zi cu zi în cadrul tuturor tipurilor de grupuri de oameni. La următorul hackathon DevDays, am decis să scriem un bot Telegram pentru vot conform principiilor democrației lichide. În același timp, am vrut să evit o problemă comună cu astfel de roboți - înfundarea chatului general cu mesaje de la bot. Soluția este să aduci cât mai multă funcționalitate într-o conversație personală.

Hackathon DevDays'19 (partea 1): un jurnal cu recomandări, un generator de trasee de mers pe jos și democrație lichidăPentru a crea acest bot am folosit API de la Telegram. A fost aleasă o bază de date PostgreSQL pentru a stoca istoricul votării și al delegațiilor. Pentru a comunica cu botul, a fost instalat un server Flask. Am ales aceste tehnologii pentru că... am avut deja experiență de a interacționa cu ei în timpul studiilor noastre de master. Lucrările la cele trei componente ale proiectului – baza de date, serverul și botul – au fost distribuite cu succes între membrii echipei.

Desigur, trei zile sunt puțin timp, așa că în timpul hackatonului am implementat ideea la nivel de prototip. Drept urmare, am creat un bot care scrie în chatul general doar informații despre deschiderea votării și rezultatele anonime ale acestuia. Capacitatea de a vota și de a crea un sondaj este implementată prin corespondența personală cu botul. Pentru a vota, introduceți o comandă care afișează o listă de probleme care necesită atenție directă. În corespondența personală, puteți vedea lista delegaților și voturile lor anterioare și, de asemenea, le puteți oferi votul dvs. pe unul dintre subiecte.

Video cu un exemplu de lucru.

A fost interesant să lucrăm la proiect, am stat la universitate până la miezul nopții, considerăm că aceasta este o modalitate grozavă de a lua o pauză de la studii, deși este foarte obositoare. A fost o experiență plăcută să lucrezi într-o echipă strânsă.

PS. Înscrierea la programele de master pentru anul universitar următor este deja deschis... Alăturați-ne!

Sursa: www.habr.com

Adauga un comentariu