Hackathon DevDays'19 (pjesa 1): një ditar me rekomandime, një gjenerator i rrugës në këmbë dhe demokraci e lëngshme

Kohët e fundit ne tha në lidhje me programin master të korporatës të JetBrains dhe Universitetit ITMO “Zhvillimi i Softuerit / Inxhinieri Softuerësh”. Ftojmë të gjithë të interesuarit në një ditë të hapur të hënën, më 29 prill. Ne do t'ju tregojmë për avantazhet e programit tonë master, çfarë shpërblimesh u ofrojmë studentëve dhe çfarë kërkojmë në këmbim. Për më tepër, ne patjetër do t'u përgjigjemi pyetjeve të mysafirëve tanë.

Hackathon DevDays'19 (pjesa 1): një ditar me rekomandime, një gjenerator i rrugës në këmbë dhe demokraci e lëngshmeDita e hapur do të mbahet në zyrën e JetBrains në Qendrën e Biznesit Times, ku studiojnë studentët tanë të masterit. Fillon në orën 17:00. Ju mund të mësoni të gjitha detajet dhe të regjistroheni për ngjarjen në faqen e internetit mse.itmo.ru. Ejani dhe nuk do të pendoheni!

Një nga komponentët kryesorë të programit është praktika. Studentët kanë shumë prej tyre: detyra shtëpie javore, projekte semestrale dhe hackathons. Falë zhytjes së plotë në metodologjitë dhe teknologjitë moderne të zhvillimit gjatë studimeve, të diplomuarit integrohen shpejt në proceset e punës të kompanive të mëdha të IT.

Në këtë postim duam të flasim më në detaje për hakatonët DevDays, të cilat zhvillohen çdo gjashtë muaj. Rregullat janë të thjeshta: mblidhen ekipe prej 3-4 personash dhe për tre ditë studentët sjellin në jetë idetë e tyre. Çfarë mund të vijë nga kjo? Lexoni pjesën e parë të tregimeve për projektet hackathon të këtij semestri nga vetë studentët :)

Ditari me rekomandime për filma

Hackathon DevDays'19 (pjesa 1): një ditar me rekomandime, një gjenerator i rrugës në këmbë dhe demokraci e lëngshme

Autori i idesë
Ivan Ilchuk
Rreshtoj
Ivan Ilchuk – analiza e komplotit të filmit, server
Vladislav Korablinov - zhvillimi i modeleve për krahasimin e afërsisë së një shënimi ditar dhe komplotit të një filmi
Dmitry Valchuk - UI
Nikita Vinokurov – UI, dizajn

Qëllimi i projektit tonë ishte të shkruanim një aplikacion desktop - një ditar që do t'i rekomandonte filma përdoruesit bazuar në shënimet në të.

Kjo ide më lindi kur isha rrugës për në universitet dhe mendoja për problemet e mia. "Çfarëdo problemi që has një person, një shkrimtar klasik ka shkruar tashmë për të," mendova. “Dhe meqenëse dikush e ka shkruar, do të thotë se dikush e ka filmuar tashmë.” Kështu që dëshira për të parë një film për një person me të njëjtën mundim mendor u shfaq natyrshëm.

Natyrisht, ka një shumëllojshmëri të gjerë ditarësh të veçantë dhe shërbime të veçanta rekomandimi (por zakonisht rekomandimet bazohen në atë që personi i pëlqente më parë). Në parim, ky projekt ka diçka të përbashkët me kërkimin e një filmi sipas pikave kryesore, por megjithatë, para së gjithash, aplikacioni ynë ofron funksionalitetin e një ditari.

Hackathon DevDays'19 (pjesa 1): një ditar me rekomandime, një gjenerator i rrugës në këmbë dhe demokraci e lëngshmeSi e zbatuam këtë? Kur shtypni butonin magjik, ditari dërgon një hyrje në server, ku filmi zgjidhet bazuar në përshkrimin e marrë nga Wikipedia. Frontend ynë u krijua në Electron (ne e përdorim atë, jo faqen e internetit, sepse fillimisht vendosëm të ruanim të dhënat e përdoruesit jo në server, por në nivel lokal në kompjuter), dhe vetë serveri dhe sistemi i rekomandimeve u krijuan në Python: TF-të ishin të marra nga përshkrimet -Vektorët IDF që u krahasuan për afërsinë me vektorin e hyrjes në ditar.

Një anëtar i ekipit ka punuar vetëm në model, tjetri ka punuar tërësisht në pjesën e përparme (fillimisht së bashku me një anëtar të tretë, i cili më vonë kaloi në testim). Unë isha i angazhuar në analizimin e komploteve filmike nga Wikipedia dhe serveri.

Hap pas hapi iu afruam rezultatit, duke kapërcyer një sërë problemesh, duke filluar nga fakti që modeli fillimisht kërkonte shumë RAM, duke përfunduar me vështirësinë e transferimit të të dhënave në server.

Tani, për të gjetur një film për mbrëmjen, nuk keni nevojë për shumë përpjekje: rezultati i punës sonë treditore është një aplikacion desktop dhe një server, të cilit përdoruesi i qaset përmes https, duke marrë si përgjigje një përzgjedhje prej 5 filmash me një përshkrim të shkurtër dhe një poster.

Përshtypjet e mia për projektin janë shumë pozitive: puna ishte magjepsëse nga mëngjesi herët deri në orët e vona të natës, dhe aplikacioni që rezulton prodhon periodikisht rezultate jashtëzakonisht qesharake në stilin e "Natës pa gjumë" për një shënim në ditar për detyrat e shtëpisë në universitet ose një film. për ditën e parë të shkollës për një histori për ditën e parë në departament.

Mund të gjenden lidhjet përkatëse, instaluesit, etj këtu.

Gjenerator i rrugës

Hackathon DevDays'19 (pjesa 1): një ditar me rekomandime, një gjenerator i rrugës në këmbë dhe demokraci e lëngshmeAutori i idesë
Artemyeva Irina
Rreshtoj
Artemyeva Irina - drejtuesi i ekipit, cikli kryesor
Gordeeva Lyudmila - muzikë
Platonov Vladislav - rrugë

Më pëlqen shumë të eci nëpër qytet: të shikoj ndërtesa, njerëz, duke menduar për historinë. Por, edhe kur ndërroj vendbanimin, herët a vonë përballem me problemin e zgjedhjes së rrugës: i kam përfunduar të gjitha ato që mund të mendoja. Kështu lindi ideja për të automatizuar gjenerimin e rrugëve: ju tregoni pikën e fillimit dhe gjatësinë e itinerarit dhe programi ju jep një mundësi. Shëtitjet mund të jenë të gjata, kështu që një zhvillim logjik i idesë duket se po shton aftësinë për të treguar pikat e ndërmjetme për një "ndalim", ku mund të hani një meze të lehtë dhe të pushoni. Një degë tjetër e zhvillimit ishte muzika. Ecja në muzikë është gjithmonë më argëtuese, kështu që do të ishte mirë të shtoni aftësinë për të zgjedhur një listë dëgjimi bazuar në një rrugë të krijuar.

Nuk ishte e mundur të gjendeshin zgjidhje të tilla midis aplikacioneve ekzistuese. Analogët më të afërt janë çdo planifikues i rrugës: Google Maps, 2GIS, etj.

Është më e përshtatshme të kesh një aplikacion të tillë në telefonin tënd, kështu që përdorimi i Telegram ishte një opsion i mirë. Kjo ju lejon të shfaqni harta dhe të luani muzikë, dhe ju mund t'i kontrolloni të gjitha këto duke shkruar një bot. Puna kryesore me hartat është bërë duke përdorur Google Map API. Python e bën të lehtë kombinimin e të dyja teknologjive.

Ishin tre persona në ekip, kështu që detyra u nda në dy nëndetyra jo të mbivendosura (puna me harta dhe puna me muzikë) në mënyrë që djemtë të mund të punonin në mënyrë të pavarur, dhe unë mora përsipër të kombinoja rezultatet.

Hackathon DevDays'19 (pjesa 1): një ditar me rekomandime, një gjenerator i rrugës në këmbë dhe demokraci e lëngshmeAsnjëri prej nesh nuk kishte punuar ndonjëherë me API-në e Google Map ose me bots të shkruar Telegram, kështu që problemi kryesor ishte sasia e kohës së caktuar për zbatimin e projektit: të kuptuarit e diçkaje kërkon gjithmonë më shumë kohë sesa të bësh diçka që e di mirë. Ishte gjithashtu e vështirë të zgjidhja API-në e bot-it të Telegram: për shkak të bllokimit, jo të gjithë funksionojnë dhe më duhej të luftoja për të vendosur gjithçka.

Vlen të përmendet veçmas se si u zgjidh problemi i gjenerimit të rrugëve. Është e lehtë të ndërtosh një itinerar midis dy vendndodhjeve, por çfarë mund t'i ofroni përdoruesit nëse dihet vetëm gjatësia e itinerarit? Lëreni përdoruesin të dëshirojë të ecë 10 kilometra. Një pikë zgjidhet në një drejtim arbitrar, distanca në të cilën në një vijë të drejtë është 10 kilometra, pas së cilës ndërtohet një rrugë deri në këtë pikë përgjatë rrugëve reale. Me shumë mundësi nuk do të jetë i drejtë, kështu që do ta shkurtojmë në 10 kilometrat e specifikuar. Ka shumë opsione për rrugë të tilla - ne kemi një gjenerator të vërtetë të rrugës!

Fillimisht doja ta segmentoja hartën në zona që korrespondojnë me sipërfaqet e gjelbra: argjinaturat, oborret, rrugët, në mënyrë që të merrja rrugën më të këndshme për shëtitje, si dhe të gjeneroja muzikë në përputhje me këto zona. Por bërja e kësaj duke përdorur Google Map API doli të ishte e vështirë (ne nuk kishim kohë për ta zgjidhur këtë problem). Sidoqoftë, ishte e mundur të zbatohej ndërtimi i një itinerari përmes llojeve të veçanta të vendndodhjeve (dyqani, parku, biblioteka): nëse itinerari kalonte nëpër të gjitha vendet e specifikuara, por distanca e dëshiruar ende nuk është udhëtuar, ajo përfundon në një distancën e specifikuar nga përdoruesi në një drejtim të rastësishëm. Google Map API ju lejon gjithashtu të llogaritni kohën e parashikuar të udhëtimit, e cila ju ndihmon të zgjidhni një listë dëgjimi saktësisht për të gjithë shëtitjen.

Si rezultat i kësaj, arriti të bëjë një brez rrugët sipas pikës së nisjes, distancës dhe pikave të ndërmjetme; gjithçka ishte përgatitur për të klasifikuar muzikën sipas seksioneve të itinerarit, por për shkak të mungesës së kohës, u vendos që të lihej opsioni i zgjedhjes së listës së luajtjes thjesht si një degë shtesë e UI. Kështu, përdoruesi ishte në gjendje të zgjidhte në mënyrë të pavarur muzikën për të dëgjuar.

Problemi kryesor me punën me muzikë ishte të mos dije se ku të merreshin skedarët mp3 pa kërkuar që përdoruesi të kishte një llogari në ndonjë shërbim. U vendos që të kërkohej muzikë nga përdoruesi (modaliteti UserMusic). Kjo krijon një problem të ri: jo të gjithë kanë aftësinë për të shkarkuar këngë. Një zgjidhje është krijimi i një depoje me muzikë nga përdoruesit (modaliteti BotMusic) - prej tij mund të gjeneroni muzikë pavarësisht nga shërbimet.

Edhe pse jo perfekte, ne e përfunduam detyrën: përfunduam me një aplikacion që do të doja ta përdorja. Në përgjithësi, kjo është shumë e lezetshme: tre ditë më parë kishit vetëm një ide dhe jo një mendim të vetëm se si ta zbatoni saktësisht, por tani ka një zgjidhje funksionale. Këto ishin tre ditë shumë të rëndësishme për mua. Nuk kam më frikë të dal me diçka që nuk kam njohuri të mjaftueshme për ta zbatuar, të qenit drejtues i ekipit ishte tepër interesant dhe njoha djemtë e mrekullueshëm që iu bashkuan ekipit tim më mirë!

Demokracia e lëngshme

Hackathon DevDays'19 (pjesa 1): një ditar me rekomandime, një gjenerator i rrugës në këmbë dhe demokraci e lëngshme

Autori i idesë
Stanislav Sychev
Rreshtoj
Stanislav Sychev – drejtues i ekipit, baza e të dhënave
Nikolay Izyumov - ndërfaqe bot
Anton Ryabushev - backend

Brenda grupeve të ndryshme, shpesh lind nevoja për të marrë një vendim ose votim. Zakonisht në raste të tilla ata i drejtohen demokracisë së drejtpërdrejtë, megjithatë, kur grupi bëhet i madh, mund të shfaqen probleme. Për shembull, një person në një grup mund të mos dëshirojë t'u përgjigjet pyetjeve shpesh ose t'u përgjigjet pyetjeve rreth temave të caktuara. Në grupe të mëdha, ata drejtohen për të shmangur problemet demokracisë përfaqësuese, kur nga i gjithë populli zgjidhet një grup i veçantë “deputetësh”, të cilët e çlirojnë pjesën tjetër nga barra e zgjedhjes. Por është mjaft e vështirë të bëhesh një deputet i tillë dhe personi që bëhet nuk do të jetë domosdoshmërisht i ndershëm dhe i respektueshëm, siç iu duk votuesve.

Për të zgjidhur problemet e të dy sistemeve, Brian Ford propozoi konceptin demokraci likuide. Në një sistem të tillë, të gjithë janë të lirë të zgjedhin rolin e një përdoruesi të rregullt ose të deleguar, thjesht duke shprehur dëshirën e tyre. Çdokush mund të votojë në mënyrë të pavarur ose t'i japë një votë një delegati për një ose më shumë çështje. Një delegat gjithashtu mund të japë votën e tij. Për më tepër, nëse delegati nuk i përshtatet më votuesit, vota mund të tërhiqet në çdo kohë.

Shembuj të përdorimit të demokracisë likuide gjenden në politikë dhe ne donim të zbatonim një ide të ngjashme për përdorim të përditshëm brenda të gjitha llojeve të grupeve të njerëzve. Në hakatonin tjetër të DevDays, vendosëm të shkruajmë një bot Telegram për votim sipas parimeve të demokracisë likuide. Në të njëjtën kohë, doja të shmangja një problem të zakonshëm me robotë të tillë - bllokimi i bisedës së përgjithshme me mesazhe nga roboti. Zgjidhja është të sillni sa më shumë funksionalitet të jetë e mundur në një bisedë personale.

Hackathon DevDays'19 (pjesa 1): një ditar me rekomandime, një gjenerator i rrugës në këmbë dhe demokraci e lëngshmePër të krijuar këtë bot ne kemi përdorur API nga Telegram. Një bazë të dhënash PostgreSQL u zgjodh për të ruajtur historinë e votimit dhe delegacioneve. Për të komunikuar me robotin, u instalua një server Flask. Ne zgjodhëm këto teknologji sepse... ne tashmë kishim përvojë në bashkëveprim me ta gjatë studimeve tona master. Puna në tre komponentët e projektit - baza e të dhënave, serveri dhe boti - u shpërnda me sukses midis anëtarëve të ekipit.

Natyrisht, tre ditë janë një kohë e shkurtër, kështu që gjatë hackathon-it ne e zbatuam idenë në nivelin prototip. Si rezultat, ne krijuam një bot që shkruan në bisedën e përgjithshme vetëm informacione për hapjen e votimit dhe rezultatet anonime të tij. Mundësia për të votuar dhe krijuar një sondazh zbatohet përmes korrespondencës personale me bot. Për të votuar, futni një komandë që shfaq një listë çështjesh që kërkojnë vëmendje të drejtpërdrejtë. Në korrespondencën personale, ju mund të shihni listën e delegatëve dhe votat e tyre të mëparshme, si dhe t'u jepni atyre votën tuaj për një nga temat.

Video me një shembull pune.

Ishte interesante të punosh në projekt, qëndruam në universitet deri në mesnatë, mendojmë se kjo është një mënyrë e shkëlqyer për të marrë një pushim nga studimi, megjithëse është shumë rraskapitës. Ishte një përvojë e këndshme të punoja në një ekip të lidhur ngushtë.

PS. Regjistrimet për programet master për vitin e ardhshëm akademik janë tashmë e hapur. Bashkohu tani!

Burimi: www.habr.com

Shto një koment