Hackathon DevDays'19 (1 dalis): dienoraštis su rekomendacijomis, pėsčiųjų maršruto generatorius ir skysta demokratija

Neseniai mes pasakojo apie JetBrains ir ITMO universiteto verslo magistrantūros programą „Programinės įrangos kūrimas / Programinės įrangos inžinerija“. Kviečiame visus besidominčius į atvirų durų dieną pirmadienį, balandžio 29 d. Papasakosime apie mūsų magistrantūros programos privalumus, kokius priedus siūlome studentams ir ko reikalaujame mainais. Be to, būtinai atsakysime į svečių klausimus.

Hackathon DevDays'19 (1 dalis): dienoraštis su rekomendacijomis, pėsčiųjų maršruto generatorius ir skysta demokratijaAtvirų durų diena vyks JetBrains biure Times verslo centre, kur mokosi mūsų magistrantai. Pradžia 17:00. Sužinoti visą informaciją ir užsiregistruoti į renginį galite svetainėje mse.itmo.ru. Ateik ir nepasigailėsi!

Vienas iš pagrindinių programos komponentų yra praktika. Studentai to turi labai daug: savaitės namų darbų, semestro projektų ir hakatonų. Dėl visiško pasinėrimo į šiuolaikines plėtros metodikas ir technologijas studijų metu absolventai greitai integruojasi į didelių IT įmonių darbo procesus.

Šiame įraše norime plačiau pakalbėti apie DevDays hakatonus, vykstančius kas šešis mėnesius. Taisyklės paprastos: susirenka 3-4 žmonių komandos ir tris dienas studentai įgyvendina savo idėjas. Kas iš to gali išeiti? Pirmąją pasakojimų dalį apie šio semestro hakatono projektus skaitykite iš pačių studentų :)

Dienoraštis su filmų rekomendacijomis

Hackathon DevDays'19 (1 dalis): dienoraštis su rekomendacijomis, pėsčiųjų maršruto generatorius ir skysta demokratija

Idėjos autorius
Ivanas Ilčiukas
Rikiuotė
Ivan Ilchuk – filmo siužeto analizavimas, serveris
Vladislavas Korablinovas – modelių, skirtų palyginti dienoraščio įrašo artumą ir filmo siužetą, kūrimas
Dmitrijus Valčukas – UI
Nikita Vinokurovas – UI, dizainas

Mūsų projekto tikslas buvo parašyti darbalaukio aplikaciją – dienoraštį, kuris pagal jame esančius įrašus rekomenduotų vartotojui filmus.

Ši idėja man kilo, kai ėjau į universitetą ir galvojau apie savo problemas. „Kad ir su kokia problema susidurtų žmogus, koks nors klasikinis rašytojas jau yra apie tai parašęs“, – pagalvojau. „Ir kadangi kažkas tai parašė, vadinasi, kažkas jau nufilmavo“. Taigi noras pažiūrėti filmą apie žmogų, turintį tokią pat psichikos kančią, atsirado natūraliai.

Akivaizdu, kad yra daugybė atskirų dienoraščių ir atskirų rekomendacijų paslaugų (tačiau dažniausiai rekomendacijos remiasi tuo, kas žmogui anksčiau patiko). Iš esmės šis projektas turi kažką bendro su filmo paieška pagal pagrindinius taškus, bet vis tiek, visų pirma, mūsų programa suteikia dienoraščio funkcionalumą.

Hackathon DevDays'19 (1 dalis): dienoraštis su rekomendacijomis, pėsčiųjų maršruto generatorius ir skysta demokratijaKaip mes tai įgyvendinome? Paspaudus stebuklingą mygtuką dienoraštis siunčia įrašą į serverį, kuriame pagal aprašymą, paimtą iš Vikipedijos, parenkamas filmas. Mūsų frontend buvo padaryta Electron (naudojame ją, o ne svetainę, nes iš pradžių nusprendėme saugoti vartotojo duomenis ne serveryje, o lokaliai kompiuteryje), o serveris ir pati rekomendacijų sistema – Python: TF buvo gauti iš aprašymų -IDF vektoriai, kurie buvo lyginami dėl artumo dienoraščio įrašo vektoriaus.

Vienas komandos narys dirbo tik prie modelio, kitas dirbo tik priekinėje dalyje (iš pradžių kartu su trečiuoju nariu, kuris vėliau perėjo prie testavimo). Aš užsiėmiau filmų siužetų analize iš Vikipedijos ir serverio.

Žingsnis po žingsnio priartėjome prie rezultato, įveikdami daugybę problemų, pradedant tuo, kad modeliui iš pradžių reikėjo daug RAM, baigiant duomenų perdavimo į serverį sunkumais.

Dabar, norint rasti filmą vakarui, jums nereikia daug pastangų: mūsų trijų dienų darbo rezultatas yra darbalaukio programa ir serveris, kurį vartotojas pasiekia per https, atsakydamas gaudamas 5 filmų pasirinkimą su trumpas aprašymas ir plakatas.

Mano įspūdžiai apie projektą labai teigiami: darbas žavėjo nuo ankstaus ryto iki vėlyvo vakaro, o gauta aplikacija periodiškai duoda itin juokingų „Bemiegės nakties“ stiliaus rezultatų dienoraščio įrašui apie namų darbus universitete ar filmui. apie pirmą dieną mokykloje pasakojimui apie pirmą dieną skyriuje.

Galima rasti atitinkamas nuorodas, montuotojus ir pan čia.

Maršruto generatorius

Hackathon DevDays'19 (1 dalis): dienoraštis su rekomendacijomis, pėsčiųjų maršruto generatorius ir skysta demokratijaIdėjos autorius
Artemjeva Irina
Rikiuotė
Artemjeva Irina – komandos lyderis, pagrindinė kilpa
Gordeeva Liudmila – muzika
Platonovas Vladislavas – maršrutai

Man labai patinka vaikščioti po miestą: žiūrėti į pastatus, žmones, galvoti apie istoriją. Bet, net ir keičiant gyvenamąją vietą, anksčiau ar vėliau susiduriu su maršruto pasirinkimo problema: įveikiau visus, kuriuos tik sugalvojau. Taip kilo mintis automatizuoti maršrutų generavimą: nurodote maršruto pradžios tašką ir ilgį, o programa suteikia galimybę. Pasivaikščiojimai gali būti ilgi, todėl atrodo, kad logiškai plėtojant idėją, atsiranda galimybė nurodyti tarpinius taškus „stotelėje“, kur galėtumėte užkąsti ir pailsėti. Kita raidos šaka buvo muzika. Vaikščioti pagal muziką visada smagiau, todėl būtų puiku pridėti galimybę pasirinkti grojaraštį pagal sugeneruotą maršrutą.

Tokių sprendimų tarp esamų programų rasti nepavyko. Artimiausi analogai yra bet kokie maršrutų planuotojai: Google Maps, 2GIS ir kt.

Patogiausia turėti tokią programą telefone, todėl naudoti Telegram buvo geras pasirinkimas. Tai leidžia rodyti žemėlapius ir leisti muziką, o visa tai galite valdyti rašydami robotą. Pagrindinis darbas su žemėlapiais buvo atliktas naudojant Google Map API. „Python“ leidžia lengvai derinti abi technologijas.

Komandoje buvo trys žmonės, todėl užduotis buvo suskirstyta į dvi nepersidengiančias papildomas užduotis (darbas su žemėlapiais ir darbas su muzika), kad vaikinai galėtų dirbti savarankiškai, o aš ėmiau derinti rezultatus.

Hackathon DevDays'19 (1 dalis): dienoraštis su rekomendacijomis, pėsčiųjų maršruto generatorius ir skysta demokratijaNė vienas iš mūsų niekada nebuvo dirbęs su Google Map API ar rašytais Telegram robotais, todėl pagrindinė problema buvo projektui įgyvendinti skirtas laikas: ką nors suprasti visada užtrunka ilgiau nei daryti tai, ką gerai išmanai. Taip pat buvo sunku pasirinkti „Telegram“ roboto API: dėl blokavimo ne visi jie veikia ir turėjau sunkiai viską nustatyti.

Atskirai verta paminėti, kaip buvo išspręsta maršrutų generavimo problema. Nesunku sukurti maršrutą tarp dviejų vietų, bet ką galite pasiūlyti vartotojui, jei žinomas tik maršruto ilgis? Leiskite vartotojui nueiti 10 kilometrų. Savavališka kryptimi pasirenkamas taškas, iki kurio atstumas tiesia linija yra 10 kilometrų, po kurio į šį tašką tiesiamas maršrutas tikrais keliais. Greičiausiai jis nebus tiesus, todėl sutrumpinsime iki nurodytų 10 kilometrų. Tokiems maršrutams yra daugybė variantų – gavome tikrą maršrutų generatorių!

Iš pradžių norėjau suskirstyti žemėlapį į želdynus atitinkančias zonas: krantines, kiemus, gatves, kad pasivaikščioti būtų kuo maloniau, o taip pat pagal šias zonas generuoti muziką. Tačiau tai padaryti naudojant „Google Map“ API pasirodė sudėtinga (neturėjome laiko išspręsti šios problemos). Tačiau buvo galima įgyvendinti maršrutą per tam tikro tipo vietas (parduotuvę, parką, biblioteką): jei maršrutas apėjo visas nurodytas vietas, bet norimas atstumas dar nenuvažiuotas, jis baigiamas iki vartotojo nurodytas atstumas atsitiktine kryptimi. „Google Map“ API taip pat leidžia apskaičiuoti numatomą kelionės laiką, o tai padeda pasirinkti grojaraštį tiksliai visam pasivaikščiojimui.

Kaip rezultatas, pavyko sukurti kartą maršrutai pagal pradinį tašką, atstumą ir tarpinius taškus; viskas buvo paruošta klasifikuoti muziką pagal maršruto atkarpas, tačiau dėl laiko stokos buvo nuspręsta grojaraščio pasirinkimo galimybę palikti tiesiog kaip papildomą UI šaką. Taigi vartotojas galėjo savarankiškai pasirinkti muziką, kurios klausytis.

Pagrindinė problema dirbant su muzika buvo nežinojimas, iš kur gauti mp3 failus, nereikalaujant, kad vartotojas turėtų paskyrą bet kurioje paslaugoje. Buvo nuspręsta paprašyti vartotojo muzikos (UserMusic režimas). Tai sukuria naują problemą: ne visi turi galimybę atsisiųsti takelius. Vienas iš sprendimų yra sukurti saugyklą su muzika iš vartotojų (BotMusic režimas) – iš jos galite generuoti muziką nepriklausomai nuo paslaugų.

Nors ir netobulai, užduotį atlikome: gavome aplikaciją, kurią norėčiau panaudoti. Apskritai tai labai šaunu: prieš tris dienas turėjai tik idėją, o ne minties, kaip tiksliai ją įgyvendinti, bet dabar yra veikiantis sprendimas. Šios trys dienos man buvo labai svarbios, nebebijau sugalvoti tai, ko įgyvendinti neturiu pakankamai žinių, būti komandos lyderiu buvo neįtikėtinai įdomu, ir aš susipažinau su nuostabiais vaikinais, kurie prisijungė prie mano komandos. geriau!

Skysta demokratija

Hackathon DevDays'19 (1 dalis): dienoraštis su rekomendacijomis, pėsčiųjų maršruto generatorius ir skysta demokratija

Idėjos autorius
Stanislavas Sičevas
Rikiuotė
Stanislav Sychev – komandos vadovas, duomenų bazė
Nikolajus Izyumovas – boto sąsaja
Antonas Ryabushevas – backend

Įvairiose grupėse dažnai reikia priimti sprendimą arba balsuoti. Paprastai tokiais atvejais jie griebiasi tiesioginė demokratijaTačiau, kai grupė tampa didelė, gali kilti problemų. Pavyzdžiui, žmogus iš grupės gali nenorėti dažnai atsakyti į klausimus arba atsakyti į klausimus tam tikromis temomis. Didelėse grupėse, norėdami išvengti problemų, jie griebiasi atstovaujamoji demokratija, kai iš visų žmonių parenkama atskira „deputatų“ grupė, kuri išlaisvina likusius nuo pasirinkimo naštos. Bet tokiu deputatu tapti gana sunku, o juo tapęs žmogus nebūtinai bus sąžiningas ir garbingas, kaip atrodė rinkėjams.

Kad išspręstų abiejų sistemų problemas, Brianas Fordas pasiūlė šią koncepciją skysta demokratija. Tokioje sistemoje kiekvienas gali laisvai pasirinkti eilinio vartotojo ar delegato vaidmenį, tiesiog išreikšdamas savo norą. Kiekvienas gali balsuoti savarankiškai arba duoti balsą delegatui vienu ar keliais klausimais. Delegatas taip pat gali balsuoti. Be to, jei delegatas rinkėjui nebetinka, balsavimas gali būti bet kada atšauktas.

Likvidios demokratijos panaudojimo pavyzdžių galima rasti politikoje, ir mes norėjome įgyvendinti panašią idėją kasdieniam naudojimui įvairiose žmonių grupėse. Kitame DevDays hakatone nusprendėme parašyti Telegram botą, skirtą balsavimui pagal likvidžios demokratijos principus. Tuo pačiu norėjau išvengti su tokiais botais įprastos problemos – bendro pokalbio užkimšimo žinutėmis iš boto. Sprendimas – į asmeninį pokalbį įtraukti kuo daugiau funkcionalumo.

Hackathon DevDays'19 (1 dalis): dienoraštis su rekomendacijomis, pėsčiųjų maršruto generatorius ir skysta demokratijaNorėdami sukurti šį robotą, naudojome API iš „Telegram“.. Balsavimo ir delegacijų istorijai saugoti pasirinkta PostgreSQL duomenų bazė. Norint susisiekti su robotu, buvo įdiegtas Flask serveris. Šias technologijas pasirinkome, nes... bendravimo su jais patirties jau turėjome magistrantūros studijų metu. Darbas su trimis projekto komponentais – duomenų baze, serveriu ir robotu – buvo sėkmingai paskirstytas komandos nariams.

Žinoma, trys dienos yra trumpas laikas, todėl hakatono metu idėją įgyvendinome iki prototipo lygio. Dėl to sukūrėme robotą, kuris į bendrą pokalbį rašo tik informaciją apie balsavimo pradžią ir anoniminius jo rezultatus. Galimybė balsuoti ir sudaryti apklausą įgyvendinama per asmeninį susirašinėjimą su robotu. Norėdami balsuoti, įveskite komandą, kuri rodo problemų, į kurias reikia atkreipti dėmesį, sąrašą. Asmeniniame susirašinėjime galite pamatyti delegatų sąrašą ir ankstesnius jų balsus, taip pat suteikti jiems savo balsą viena iš temų.

Video su darbo pavyzdžiu.

Buvo įdomu dirbti su projektu, iki vidurnakčio išbuvome universitete. Manome, kad tai puikus būdas pailsėti nuo studijų, nors ir labai vargina. Tai buvo maloni patirtis dirbti glaudžioje komandoje.

PS. Jau vyksta registracija į kitų mokslo metų magistrantūros programas atviras... Prisijunk prie mūsų!

Šaltinis: www.habr.com

Добавить комментарий