Hackathon DevDays'19 (deel 1): 'n dagboek met aanbevelings, 'n staproetegenerator en vloeibare demokrasie

Onlangs het ons vertel oor die korporatiewe meestersgraadprogram van JetBrains en ITMO Universiteit “Sagteware-ontwikkeling / Sagteware-ingenieurswese”. Ons nooi almal wat belangstel na 'n opedag op Maandag, 29 April. Ons sal jou vertel van die voordele van ons meestersgraadprogram, watter bonusse ons aan studente bied en wat ons in ruil daarvoor eis. Daarbenewens sal ons beslis vrae van ons gaste beantwoord.

Hackathon DevDays'19 (deel 1): 'n dagboek met aanbevelings, 'n staproetegenerator en vloeibare demokrasieDie opedag sal by die JetBrains-kantoor in die Times Business Centre gehou word, waar ons meestersgraadstudente studeer. Begin om 17:00. Jy kan al die besonderhede uitvind en vir die geleentheid registreer op die webwerf mse.itmo.ru. Kom en jy sal nie spyt wees nie!

Een van die hoofkomponente van die program is oefening. Studente het baie daarvan: weeklikse huiswerk, semesterprojekte en hackathons. Danksy volledige onderdompeling in moderne ontwikkelingsmetodologieë en -tegnologieë tydens hul studies, integreer gegradueerdes vinnig in die werksprosesse van groot IT-maatskappye.

In hierdie pos wil ons in meer besonderhede praat oor DevDays hackathons, wat elke ses maande plaasvind. Die reëls is eenvoudig: spanne van 3-4 mense kom bymekaar en vir drie dae bring studente hul eie idees tot lewe. Wat kan hiervan kom? Lees die eerste deel van stories oor hierdie semester se hackathon-projekte van die studente self :)

Dagboek met fliekaanbevelings

Hackathon DevDays'19 (deel 1): 'n dagboek met aanbevelings, 'n staproetegenerator en vloeibare demokrasie

Skrywer van die idee
Ivan Ilchuk
Span samestelling
Ivan Ilchuk – filmplotontleding, bediener
Vladislav Korablinov - ontwikkeling van modelle om die nabyheid van 'n dagboekinskrywing en die plot van 'n film te vergelyk
Dmitri Valchuk – UI
Nikita Vinokurov – UI, ontwerp

Die doel van ons projek was om 'n rekenaartoepassing te skryf - 'n dagboek wat films aan die gebruiker sou aanbeveel op grond van die inskrywings daarin.

Hierdie idee het by my opgekom toe ek op pad universiteit toe was en aan my probleme gedink het. "Watter probleem 'n persoon ook al in die gesig staar, een of ander klassieke skrywer het reeds daaroor geskryf," het ek gedink. "En aangesien iemand dit geskryf het, beteken dit iemand het dit reeds verfilm." So die begeerte om 'n film te kyk oor 'n persoon met dieselfde geestelike kwelling het natuurlik verskyn.

Uiteraard is daar 'n wye verskeidenheid afsonderlike dagboeke en afsonderlike aanbevelingsdienste (maar gewoonlik is die aanbevelings gebaseer op wat die persoon voorheen gehou het). In beginsel het hierdie projek iets in gemeen met die soeke na 'n fliek volgens sleutelpunte, maar tog, eerstens, bied ons toepassing die funksionaliteit van 'n dagboek.

Hackathon DevDays'19 (deel 1): 'n dagboek met aanbevelings, 'n staproetegenerator en vloeibare demokrasieHoe het ons dit geïmplementeer? Wanneer jy die towerknoppie druk, stuur die dagboek 'n inskrywing na die bediener, waar die film gekies word op grond van die beskrywing wat uit Wikipedia geneem is. Ons frontend is in Electron gemaak (ons gebruik dit, nie die webwerf nie, want ons het aanvanklik besluit om gebruikersdata nie op die bediener nie, maar plaaslik op die rekenaar te stoor), en die bediener en die aanbevelingstelsel self is in Python gemaak: TF's was verkry uit die beskrywings -IDF vektore wat vergelyk is vir nabyheid aan die dagboek inskrywing vektor.

Een spanlid het net aan die model gewerk, die ander het heeltemal aan die voorkant gewerk (aanvanklik saam met 'n derde lid, wat later na toetsing oorgeskakel het). Ek was besig met die ontleding van filmplotte vanaf Wikipedia en die bediener.

Stap vir stap het ons nader aan die resultaat gekom en 'n aantal probleme oorkom, begin met die feit dat die model aanvanklik baie RAM benodig het, wat eindig met die moeilikheid om data na die bediener oor te dra.

Nou, om 'n fliek vir die aand te vind, het jy nie veel moeite nodig nie: die resultaat van ons driedaagse werk is 'n lessenaartoepassing en 'n bediener, wat die gebruiker via https toegang verkry, wat in reaksie 'n seleksie van 5 films ontvang met 'n kort beskrywing en 'n plakkaat.

My indrukke van die projek is baie positief: die werk was boeiend van vroegoggend tot laataand, en die gevolglike toepassing lewer periodiek uiters snaakse resultate in die styl van "Slaaplose Nag" vir 'n dagboekinskrywing oor huiswerk by die universiteit of 'n film oor die eerste skooldag vir 'n storie oor die eerste dag by die departement.

Relevante skakels, installeerders, ens. kan gevind word hier.

Roete kragopwekker

Hackathon DevDays'19 (deel 1): 'n dagboek met aanbevelings, 'n staproetegenerator en vloeibare demokrasieSkrywer van die idee
Artemyeva Irina
Span samestelling
Artemyeva Irina – spanleier, hooflus
Gordeeva Lyudmila – musiek
Platonov Vladislav – roetes

Ek hou baie daarvan om in die stad rond te stap: kyk na geboue, mense, dink oor geskiedenis. Maar, selfs wanneer ek van woonplek verander, word ek vroeër of later gekonfronteer met die probleem om 'n roete te kies: ek het al die een voltooi waaraan ek kon dink. Dit is hoe die idee ontstaan ​​het om die generering van roetes te outomatiseer: jy dui die beginpunt en lengte van die roete aan, en die program gee jou 'n opsie. Staptogte kan lank wees, so 'n logiese ontwikkeling van die idee blyk die vermoë by te voeg om tussenpunte vir 'n "stop" aan te dui, waar jy 'n peuselhappie kan eet en rus. Nog 'n vertakking van ontwikkeling was musiek. Om na musiek te stap is altyd lekkerder, so dit sal wonderlik wees om die vermoë by te voeg om 'n snitlys te kies gebaseer op 'n gegenereerde roete.

Dit was nie moontlik om sulke oplossings onder bestaande toepassings te vind nie. Die naaste analoë is enige roetebeplanners: Google Maps, 2GIS, ens.

Dit is die gerieflikste om so 'n toepassing op jou foon te hê, so die gebruik van Telegram was 'n goeie opsie. Dit laat jou toe om kaarte te vertoon en musiek te speel, en jy kan dit alles beheer deur 'n bot te skryf. Die hoofwerk met kaarte is met behulp van die Google Map API gedoen. Python maak dit maklik om beide tegnologieë te kombineer.

Daar was drie mense in die span, so die taak is opgedeel in twee nie-oorvleuelende subtake (werk met kaarte en werk met musiek) sodat die ouens onafhanklik kon werk, en ek het op myself geneem om die resultate te kombineer.

Hackathon DevDays'19 (deel 1): 'n dagboek met aanbevelings, 'n staproetegenerator en vloeibare demokrasieNie een van ons het ooit met die Google Map API gewerk of Telegram-bots geskryf nie, so die grootste probleem was die hoeveelheid tyd wat toegeken is om die projek te implementeer: om iets te verstaan, neem altyd meer tyd as om iets te doen wat jy goed ken. Dit was ook moeilik om die Telegram bot API te kies: as gevolg van blokkering werk nie almal nie en ek moes sukkel om alles op te stel.

Dit is die moeite werd om afsonderlik te noem hoe die probleem van die opwekking van roetes opgelos is. Dit is maklik om 'n roete tussen twee liggings te bou, maar wat kan jy die gebruiker bied as net die lengte van die roete bekend is? Laat die gebruiker 10 kilometer wil stap. 'n Punt word in 'n arbitrêre rigting gekies, waartoe die afstand in 'n reguit lyn 10 kilometer is, waarna 'n roete na hierdie punt langs regte paaie gebou word. Heel waarskynlik sal dit nie reguit wees nie, so ons sal dit verkort tot die gespesifiseerde 10 kilometer. Daar is baie opsies vir sulke roetes - ons het 'n regte roetegenerator gekry!

Aanvanklik wou ek die kaart segmenteer in gebiede wat ooreenstem met groen gebiede: walle, binnehowe, strate, om die lekkerste roete vir 'n stap te kry, en ook musiek te genereer in ooreenstemming met hierdie gebiede. Maar om dit met die Google Map API te doen, blyk moeilik te wees (ons het nie tyd gehad om hierdie probleem op te los nie). Dit was egter moontlik om die konstruksie van 'n roete deur spesifieke tipe liggings (winkel, park, biblioteek) te implementeer: as die roete om al die gespesifiseerde plekke gegaan het, maar die verlangde afstand nog nie afgelê is nie, word dit voltooi na 'n gebruiker-gespesifiseerde afstand in 'n ewekansige rigting. Die Google Map API laat jou ook toe om die geskatte reistyd te bereken, wat jou help om 'n snitlys presies vir die hele stap te kies.

Uiteindelik daarin geslaag om 'n generasie te maak roetes volgens beginpunt, afstand en tussenpunte; alles was voorberei om musiek volgens dele van die roete te klassifiseer, maar weens 'n gebrek aan tyd is daar besluit om die opsie om 'n snitlys te kies bloot as 'n bykomende UI-tak te verlaat. Die gebruiker kon dus onafhanklik die musiek kies om na te luister.

Die grootste probleem met die werk met musiek was om nie te weet waar om mp3-lêers vandaan te kry sonder dat die gebruiker 'n rekening op enige diens moes hê nie. Daar is besluit om musiek van die gebruiker aan te vra (UserMusic-modus). Dit skep 'n nuwe probleem: nie almal het die vermoë om snitte af te laai nie. Een oplossing is om 'n bewaarplek te skep met musiek van gebruikers (BotMusic-modus) - daaruit kan jy musiek genereer ongeag die dienste.

Alhoewel dit nie perfek was nie, het ons die taak voltooi: ons het uiteindelik 'n toepassing gekry wat ek graag wil gebruik. Oor die algemeen is dit baie gaaf: drie dae gelede het jy net 'n idee gehad en nie 'n enkele gedagte oor hoe om dit presies te implementeer nie, maar nou is daar 'n werkende oplossing. Dit was baie belangrike drie dae vir my.Ek is nie meer bang om met iets vorendag te kom wat ek nie genoeg kennis het om te implementeer nie, om 'n spanleier te wees was ongelooflik interessant, en ek het die wonderlike ouens leer ken wat by my span aangesluit het. beter!

Liquid Democracy

Hackathon DevDays'19 (deel 1): 'n dagboek met aanbevelings, 'n staproetegenerator en vloeibare demokrasie

Skrywer van die idee
Stanislav Sychev
Span samestelling
Stanislav Sychev – spanleier, databasis
Nikolay Izyumov – bot-koppelvlak
Anton Ryabushev – agterkant

Binne verskillende groepe is daar dikwels 'n behoefte om 'n besluit te neem of te stem. Gewoonlik in sulke gevalle wend hulle hulle tot direkte demokrasie, maar wanneer die groep groot word, kan probleme ontstaan. Byvoorbeeld, 'n persoon in 'n groep wil dalk nie gereeld vrae beantwoord of vrae oor sekere onderwerpe beantwoord nie. In groot groepe, om probleme wat hulle toevlug te vermy verteenwoordigende demokrasie, wanneer ’n aparte groep “deputate” uit al die mense gekies word, wat die res van die keuselas bevry. Maar dit is nogal moeilik om so 'n adjunk te word, en die persoon wat een word, sal nie noodwendig eerlik en respekvol wees soos hy vir kiesers gelyk het nie.

Om die probleme van beide stelsels op te los, het Brian Ford die konsep voorgestel vloeibare demokrasie. In so 'n stelsel is almal vry om die rol van 'n gereelde gebruiker of 'n afgevaardigde te kies, bloot deur hul begeerte uit te spreek. Enigeen kan onafhanklik stem of 'n stem aan 'n afgevaardigde gee oor een of meer kwessies. 'n Afgevaardigde kan ook sy stem uitbring. Verder, as die afgevaardigde nie meer die kieser pas nie, kan die stemming te eniger tyd teruggetrek word.

Voorbeelde van die gebruik van vloeibare demokrasie word in die politiek gevind, en ons wou 'n soortgelyke idee vir alledaagse gebruik binne allerhande groepe mense implementeer. By die volgende DevDays-hackaton het ons besluit om 'n Telegram-bot te skryf om te stem volgens die beginsels van vloeibare demokrasie. Terselfdertyd wou ek 'n algemene probleem met sulke bots vermy - om die algemene klets te verstop met boodskappe van die bot. Die oplossing is om soveel moontlik funksionaliteit in 'n persoonlike gesprek te bring.

Hackathon DevDays'19 (deel 1): 'n dagboek met aanbevelings, 'n staproetegenerator en vloeibare demokrasieOm hierdie bot te skep het ons gebruik API van Telegram. 'n PostgreSQL-databasis is gekies om die geskiedenis van stemming en afvaardigings te stoor. Om met die bot te kommunikeer, is 'n Flask-bediener geïnstalleer. Ons het hierdie tegnologieë gekies omdat... ons het reeds ondervinding gehad in interaksie met hulle tydens ons meestersgraadstudies. Werk aan die drie komponente van die projek - die databasis, die bediener en die bot - is suksesvol onder die spanlede versprei.

Natuurlik is drie dae 'n kort tydjie, so tydens die hackathon het ons die idee na die prototipe-vlak geïmplementeer. As gevolg hiervan het ons 'n bot geskep wat slegs inligting aan die algemene klets skryf oor die opening van stemming en die anonieme resultate daarvan. Die vermoë om te stem en 'n meningspeiling te skep, word geïmplementeer deur persoonlike korrespondensie met die bot. Om te stem, voer 'n opdrag in wat 'n lys kwessies vertoon wat direkte aandag vereis. In persoonlike korrespondensie kan jy die lys van afgevaardigdes en hul vorige stemme sien, en ook vir hulle jou stem gee oor een van die onderwerpe.

Video met 'n voorbeeld van werk.

Dit was interessant om aan die projek te werk, ons het tot middernag by die universiteit gebly.Ons dink dat dit 'n goeie manier is om 'n blaaskans van studie te neem, alhoewel dit baie uitputtend is. Dit was 'n aangename ervaring om in 'n hegte span te werk.

PS. Inskrywing vir meestersgraadprogramme vir die volgende akademiese jaar is reeds is oop. Sluit by ons aan!

Bron: www.habr.com

Voeg 'n opmerking