Hackathon DevDays'19 (bahagi 1): isang talaarawan na may mga rekomendasyon, isang generator ng ruta ng paglalakad at likidong demokrasya

Kamakailan lang kami sinabi tungkol sa corporate master's program ng JetBrains at ITMO University "Software Development / Software Engineering". Inaanyayahan namin ang lahat na interesado sa isang bukas na araw sa Lunes, ika-29 ng Abril. Sasabihin namin sa iyo ang tungkol sa mga pakinabang ng programa ng aming master, kung anong mga bonus ang inaalok namin sa mga mag-aaral at kung ano ang hinihiling namin bilang kapalit. Bilang karagdagan, tiyak na sasagutin namin ang mga tanong mula sa aming mga bisita.

Hackathon DevDays'19 (bahagi 1): isang talaarawan na may mga rekomendasyon, isang generator ng ruta ng paglalakad at likidong demokrasyaAng bukas na araw ay gaganapin sa opisina ng JetBrains sa Times Business Center, kung saan nag-aaral ang mga estudyante ng aming master. Magsisimula sa 17:00. Maaari mong malaman ang lahat ng mga detalye at magparehistro para sa kaganapan sa website mse.itmo.ru. Halika at hindi ka magsisisi!

Isa sa mga pangunahing bahagi ng programa ay pagsasanay. Marami ang mga estudyante: lingguhang takdang-aralin, mga proyekto sa semestre at hackathon. Salamat sa kumpletong pagsasawsaw sa mga modernong pamamaraan ng pag-unlad at teknolohiya sa panahon ng kanilang pag-aaral, ang mga nagtapos ay mabilis na sumasama sa mga proseso ng trabaho ng malalaking kumpanya ng IT.

Sa post na ito gusto naming pag-usapan nang mas detalyado ang tungkol sa DevDays hackathons, na nagaganap tuwing anim na buwan. Ang mga patakaran ay simple: ang mga koponan ng 3-4 na tao ay nagtitipon at sa loob ng tatlong araw ang mga mag-aaral ay binibigyang buhay ang kanilang sariling mga ideya. Ano ang maaaring dumating dito? Basahin ang unang bahagi ng mga kwento tungkol sa mga proyekto ng hackathon ng semester na ito mula sa mga mag-aaral mismo :)

Diary na may mga rekomendasyon sa pelikula

Hackathon DevDays'19 (bahagi 1): isang talaarawan na may mga rekomendasyon, isang generator ng ruta ng paglalakad at likidong demokrasya

Ang may-akda ng ideya
Ivan Ilchuk
Komposisyon ng Koponan
Ivan Ilchuk – pag-parse ng plot ng pelikula, server
Vladislav Korablinov - pagbuo ng mga modelo para sa paghahambing ng kalapitan ng isang talaarawan na entry at ang balangkas ng isang pelikula
Dmitry Valchuk - UI
Nikita Vinokurov – UI, disenyo

Ang layunin ng aming proyekto ay magsulat ng desktop application - isang talaarawan na magrerekomenda ng mga pelikula sa user batay sa mga entry dito.

Ang ideyang ito ay dumating sa akin noong ako ay patungo sa unibersidad at iniisip ang aking mga problema. "Anuman ang problema na kinakaharap ng isang tao, may ilang klasikong manunulat na nagsulat tungkol dito," naisip ko. "At dahil may nagsulat nito, ibig sabihin ay may nakapag-film na nito." Kaya natural na lumitaw ang pagnanais na manood ng isang pelikula tungkol sa isang taong may parehong pagdurusa sa isip.

Malinaw, mayroong isang malawak na iba't ibang mga hiwalay na diary at hiwalay na mga serbisyo ng rekomendasyon (ngunit kadalasan ang mga rekomendasyon ay batay sa kung ano ang nagustuhan ng tao noon). Sa prinsipyo, ang proyektong ito ay may isang bagay na karaniwan sa paghahanap para sa isang pelikula sa pamamagitan ng mga pangunahing punto, ngunit pa rin, una sa lahat, ang aming application ay nagbibigay ng pag-andar ng isang talaarawan.

Hackathon DevDays'19 (bahagi 1): isang talaarawan na may mga rekomendasyon, isang generator ng ruta ng paglalakad at likidong demokrasyaPaano natin ito ipinatupad? Kapag pinindot mo ang magic button, ang talaarawan ay nagpapadala ng isang entry sa server, kung saan ang pelikula ay pinili batay sa paglalarawan na kinuha mula sa Wikipedia. Ang aming frontend ay ginawa sa Electron (ginagamit namin ito, hindi ang website, dahil una naming napagpasyahan na mag-imbak ng data ng user hindi sa server, ngunit lokal sa computer), at ang server at ang sistema ng rekomendasyon ay ginawa sa Python: Ang mga TF ay nakuha mula sa mga paglalarawan -IDF vectors na inihambing para sa kalapitan sa diary entry vector.

Ang isang miyembro ng koponan ay nagtrabaho lamang sa modelo, ang isa ay ganap na nagtrabaho sa front-end (sa una kasama ang isang ikatlong miyembro, na kalaunan ay lumipat sa pagsubok). Ako ay nakikibahagi sa pag-parse ng mga plot ng pelikula mula sa Wikipedia at sa server.

Hakbang-hakbang na kami ay mas malapit sa resulta, pagtagumpayan ang isang bilang ng mga problema, simula sa katotohanan na ang modelo sa una ay nangangailangan ng maraming RAM, na nagtatapos sa kahirapan ng paglilipat ng data sa server.

Ngayon, upang makahanap ng pelikula para sa gabi, hindi mo na kailangan ng maraming pagsisikap: ang resulta ng aming tatlong araw na trabaho ay isang desktop application at isang server, na ina-access ng user sa pamamagitan ng https, na tumatanggap bilang tugon ng isang seleksyon ng 5 pelikula na may isang maikling paglalarawan at isang poster.

Ang aking mga impression sa proyekto ay napaka-positibo: ang trabaho ay nakakabighani mula maagang umaga hanggang huli ng gabi, at ang nagresultang aplikasyon ay pana-panahong gumagawa ng labis na nakakatawang mga resulta sa estilo ng "Sleepless Night" para sa isang talaarawan na entry tungkol sa araling-bahay sa unibersidad o isang pelikula. tungkol sa unang araw ng pasukan para sa isang kuwento tungkol sa unang araw sa departamento.

Matatagpuan ang mga nauugnay na link, installer, atbp dito.

Generator ng ruta

Hackathon DevDays'19 (bahagi 1): isang talaarawan na may mga rekomendasyon, isang generator ng ruta ng paglalakad at likidong demokrasyaAng may-akda ng ideya
Artemyeva Irina
Komposisyon ng Koponan
Artemyeva Irina - pinuno ng koponan, pangunahing loop
Gordeeva Lyudmila - musika
Platonov Vladislav – mga ruta

Gusto ko talagang maglakad sa paligid ng lungsod: tumitingin sa mga gusali, mga tao, nag-iisip tungkol sa kasaysayan. Ngunit, kahit na nagbabago ang aking lugar ng paninirahan, sa malao't madali ay nahaharap ako sa problema sa pagpili ng isang ruta: Nakumpleto ko na ang lahat ng naiisip ko. Ito ay kung paano nabuo ang ideya upang i-automate ang pagbuo ng mga ruta: ipinapahiwatig mo ang panimulang punto at haba ng ruta, at binibigyan ka ng programa ng isang opsyon. Maaaring mahaba ang mga paglalakad, kaya ang lohikal na pag-unlad ng ideya ay tila nagdaragdag ng kakayahang magpahiwatig ng mga intermediate na punto para sa isang "paghinto," kung saan maaari kang magkaroon ng meryenda at magpahinga. Ang isa pang sangay ng pag-unlad ay ang musika. Palaging mas masaya ang paglalakad sa musika, kaya magandang magdagdag ng kakayahang pumili ng playlist batay sa nabuong ruta.

Hindi posible na makahanap ng mga ganitong solusyon sa mga umiiral nang application. Ang pinakamalapit na mga analogue ay anumang mga tagaplano ng ruta: Google Maps, 2GIS, atbp.

Ito ay pinaka-maginhawang magkaroon ng ganoong application sa iyong telepono, kaya ang paggamit ng Telegram ay isang magandang opsyon. Pinapayagan ka nitong magpakita ng mga mapa at magpatugtog ng musika, at makokontrol mo ang lahat ng ito sa pamamagitan ng pagsusulat ng bot. Ang pangunahing gawain sa mga mapa ay ginawa gamit ang Google Map API. Pinapadali ng Python na pagsamahin ang parehong mga teknolohiya.

Mayroong tatlong tao sa koponan, kaya ang gawain ay nahahati sa dalawang hindi magkakapatong na mga subtask (paggawa gamit ang mga mapa at pagtatrabaho gamit ang musika) upang ang mga lalaki ay makapagtrabaho nang nakapag-iisa, at kinuha ko ang aking sarili na pagsamahin ang mga resulta.

Hackathon DevDays'19 (bahagi 1): isang talaarawan na may mga rekomendasyon, isang generator ng ruta ng paglalakad at likidong demokrasyaWala sa amin ang nakatrabaho kailanman sa Google Map API o mga nakasulat na Telegram bots, kaya ang pangunahing problema ay ang dami ng oras na inilalaan upang ipatupad ang proyekto: ang pag-unawa sa isang bagay ay palaging tumatagal ng mas maraming oras kaysa sa paggawa ng isang bagay na alam mo nang mabuti. Mahirap ding piliin ang Telegram bot API: dahil sa pagharang, hindi lahat ng mga ito ay gumagana at kailangan kong magpumilit na i-set up ang lahat.

Ito ay nagkakahalaga ng pagbanggit nang hiwalay kung paano nalutas ang problema sa pagbuo ng mga ruta. Madaling gumawa ng ruta sa pagitan ng dalawang lokasyon, ngunit ano ang maiaalok mo sa user kung alam lang ang haba ng ruta? Hayaang maglakad ang gumagamit ng 10 kilometro. Ang isang punto ay pinili sa isang di-makatwirang direksyon, ang distansya kung saan sa isang tuwid na linya ay 10 kilometro, pagkatapos kung saan ang isang ruta ay binuo sa puntong ito sa kahabaan ng mga tunay na kalsada. Malamang na hindi ito tuwid, kaya paikliin natin ito sa tinukoy na 10 kilometro. Mayroong maraming mga pagpipilian para sa mga naturang ruta - nakakuha kami ng isang tunay na generator ng ruta!

Sa una, nais kong i-segment ang mapa sa mga lugar na tumutugma sa mga berdeng lugar: mga pilapil, mga patyo, mga kalye, upang makuha ang pinaka-kaaya-ayang ruta para sa paglalakad, at makabuo din ng musika alinsunod sa mga lugar na ito. Ngunit ang paggawa nito gamit ang Google Map API ay naging mahirap (wala kaming oras upang malutas ang problemang ito). Gayunpaman, posible na ipatupad ang pagtatayo ng isang ruta sa pamamagitan ng mga tiyak na uri ng mga lokasyon (shop, parke, library): kung ang ruta ay lumibot sa lahat ng mga tinukoy na lugar, ngunit ang nais na distansya ay hindi pa nalalakbay, ito ay nakumpleto sa isang distansya na tinukoy ng user sa isang random na direksyon. Ang Google Map API ay nagpapahintulot din sa iyo na kalkulahin ang tinantyang oras ng paglalakbay, na tumutulong sa iyong pumili ng isang playlist nang eksakto para sa buong paglalakad.

Bilang isang resulta, nagawang gumawa ng henerasyon mga ruta sa pamamagitan ng panimulang punto, distansya at intermediate na mga punto; ang lahat ay inihanda upang pag-uri-uriin ang musika ayon sa mga seksyon ng ruta, ngunit dahil sa kakulangan ng oras, napagpasyahan na iwanan ang opsyon na pumili ng isang playlist bilang isang karagdagang sangay ng UI. Kaya, nakapag-iisa ang user na pumili ng musikang pakikinggan.

Ang pangunahing problema sa pagtatrabaho sa musika ay hindi alam kung saan kukuha ng mga mp3 file nang hindi nangangailangan ng user na magkaroon ng account sa anumang serbisyo. Napagpasyahan na humiling ng musika mula sa gumagamit (UserMusic mode). Lumilikha ito ng bagong problema: hindi lahat ay may kakayahang mag-download ng mga track. Ang isang solusyon ay ang lumikha ng isang repository na may musika mula sa mga user (BotMusic mode) - mula dito maaari kang bumuo ng musika anuman ang mga serbisyo.

Bagama't hindi perpekto, natapos namin ang gawain: natapos namin ang isang application na gusto kong gamitin. Sa pangkalahatan, ito ay napaka-cool: tatlong araw na ang nakalipas mayroon ka lamang isang ideya at hindi isang solong pag-iisip kung paano eksaktong ipatupad ito, ngunit ngayon ay may isang gumaganang solusyon. Napakahalaga ng tatlong araw na ito para sa akin. Hindi na ako natatakot na makabuo ng isang bagay na wala akong sapat na kaalaman upang ipatupad, ang pagiging pinuno ng koponan ay hindi kapani-paniwalang kawili-wili, at nakilala ko ang mga mahuhusay na lalaki na sumali sa aking koponan mas mabuti!

Demokrasya ng likido

Hackathon DevDays'19 (bahagi 1): isang talaarawan na may mga rekomendasyon, isang generator ng ruta ng paglalakad at likidong demokrasya

Ang may-akda ng ideya
Stanislav Sychev
Komposisyon ng Koponan
Stanislav Sychev - pinuno ng koponan, database
Nikolay Izyumov – interface ng bot
Anton Ryabushev – backend

Sa loob ng iba't ibang grupo, kadalasan ay kailangang gumawa ng desisyon o pagboto. Kadalasan sa mga ganitong kaso ay nilalapitan nila direktang demokrasya, gayunpaman, kapag lumaki ang grupo, maaaring lumitaw ang mga problema. Halimbawa, maaaring hindi gustong sagutin ng isang tao sa isang grupo ang mga tanong nang madalas o sagutin ang mga tanong tungkol sa ilang partikular na paksa. Sa malalaking grupo, upang maiwasan ang mga problema na kanilang dinadaanan kinatawan ng demokrasya, kapag ang isang hiwalay na grupo ng "mga kinatawan" ay pinili mula sa lahat ng mga tao, na nagpapalaya sa iba mula sa pasanin ng pagpili. Ngunit medyo mahirap maging isang representante, at ang taong nagiging isa ay hindi kinakailangang maging tapat at kagalang-galang, tulad ng sa tingin niya sa mga botante.

Upang malutas ang mga problema ng parehong mga sistema, iminungkahi ni Brian Ford ang konsepto likidong demokrasya. Sa ganitong sistema, ang lahat ay malayang pumili ng tungkulin ng isang regular na gumagamit o isang delegado, sa pamamagitan lamang ng pagpapahayag ng kanilang pagnanais. Kahit sino ay maaaring bumoto nang nakapag-iisa o magbigay ng boto sa isang delegado sa isa o higit pang mga isyu. Ang isang delegado ay maaari ding bumoto. Bukod dito, kung ang delegado ay hindi na nababagay sa botante, ang boto ay maaaring bawiin anumang oras.

Ang mga halimbawa ng paggamit ng likidong demokrasya ay matatagpuan sa pulitika, at gusto naming ipatupad ang isang katulad na ideya para sa pang-araw-araw na paggamit sa loob ng lahat ng uri ng grupo ng mga tao. Sa susunod na DevDays hackathon, nagpasya kaming magsulat ng Telegram bot para sa pagboto ayon sa mga prinsipyo ng likidong demokrasya. Kasabay nito, nais kong maiwasan ang isang karaniwang problema sa mga naturang bot - pagbara sa pangkalahatang chat na may mga mensahe mula sa bot. Ang solusyon ay magdala ng mas maraming functionality hangga't maaari sa isang personal na pag-uusap.

Hackathon DevDays'19 (bahagi 1): isang talaarawan na may mga rekomendasyon, isang generator ng ruta ng paglalakad at likidong demokrasyaUpang likhain ang bot na ito na ginamit namin API mula sa Telegram. Pinili ang isang database ng PostgreSQL upang iimbak ang kasaysayan ng pagboto at mga delegasyon. Upang makipag-ugnayan sa bot, isang Flask server ang na-install. Pinili namin ang mga teknolohiyang ito dahil... nagkaroon na kami ng karanasan sa pakikipag-ugnayan sa kanila noong nag-aaral ang aming master. Ang pagtatrabaho sa tatlong bahagi ng proyektoβ€”ang database, ang server, at ang botβ€”ay matagumpay na naipamahagi sa mga miyembro ng koponan.

Siyempre, ang tatlong araw ay isang maikling panahon, kaya sa panahon ng hackathon ipinatupad namin ang ideya sa antas ng prototype. Bilang resulta, lumikha kami ng bot na nagsusulat sa pangkalahatang chat lamang ng impormasyon tungkol sa pagbubukas ng pagboto at ang mga hindi kilalang resulta nito. Ang kakayahang bumoto at gumawa ng poll ay ipinapatupad sa pamamagitan ng personal na pakikipag-ugnayan sa bot. Para bumoto, maglagay ng command na nagpapakita ng listahan ng mga isyu na nangangailangan ng direktang atensyon. Sa personal na sulat, makikita mo ang listahan ng mga delegado at ang kanilang mga nakaraang boto, at ibigay din sa kanila ang iyong boto sa isa sa mga paksa.

Video na may halimbawa ng trabaho.

Nakatutuwang gawin ang proyekto, nanatili kami sa unibersidad hanggang hatinggabi. Sa tingin namin ito ay isang mahusay na paraan upang magpahinga mula sa pag-aaral, bagaman ito ay lubhang nakakapagod. Ito ay isang kaaya-ayang karanasan sa pagtatrabaho sa isang malapit na koponan.

PS. Ang pagpapatala para sa mga programa ng master para sa susunod na taon ng akademiko ay na bukas... Sumali ka!

Pinagmulan: www.habr.com

Magdagdag ng komento