Përshëndetje, Habr. Ne spontaneisht organizuam hackathonin e parë të brendshëm. Vendosa të ndaj me ju shqetësimet dhe përfundimet e mia rreth përgatitjeve për të, për dy javë, si dhe projektet që rezultuan.

Pjesa e mërzitshme për ata që janë të interesuar në marketing.
Do ta filloj me një histori të vogël.
Fillimi i prillit. Në zyrën tonë po zhvillohet hackathoni i parë i Komunitetit MskDotNet. Lufta për Tatuin është në kulmin e saj, kësaj rradhe në galaksinë tonë. E shtunë. 20 ekipe. Pizza. Të gjithë së bashku (). R2-D2 i fryrë lëviz në sallë. Ekipet po shkruajnë algoritmet më të mira për të kaluar garën më të rrezikshme në hartë. Po e shtyjmë nisjen e gara të para. Biskotat dhe kafeja na shpëtojnë. Ne, si organizatorë, prisnim se shumë do të iknin pasdite. Por jo. 12 orë kodim të kaluar. Finalja. Disa gjëra dështojnë, disa nuk startojnë. Por të gjithë janë të lumtur. Ekipi ynë fiton. Ne jemi dyfish të lumtur.
Po ndaj gëzimin në Slack dhe më vjen një ide në kokë: «Duhet të bëjmë hackathonin tonë». I shkruaj CTO-së sonë Sasha. Heshtje.
MĂ«ngjesi. Pij kafe nĂ« zyrĂ«. PashĂ« SashĂ«n qĂ« afrohej pas shpine. "Liza, kjo Ă«shtĂ« shkĂ«lqyer! 21 prilli Ă«shtĂ« njĂ« datĂ« e rĂ«ndĂ«sishme pĂ«r ne. Le tĂ« veprojmĂ«!" ĂfarĂ«!? NjĂ« shpejtĂ«si kaq e madhe? ĂfarĂ«? Duhet tĂ« fluturoj pĂ«r nĂ« Syktyvkar pĂ«r njĂ« praktikĂ« nĂ« mes tĂ« prillit. Po, dhe çfarĂ«! Le tĂ« shkojmĂ«.
Mbeten 2 javë. Nuk kam qenë kurrë organizatore e vetme për një hackathon. Edhe pse të brendshëm. Po lexoj artikuj mbi këtë temë. E tmerrshme. Duhet disa muaj. Duhet disa njerëz. Duhet të mendoj për merchandise, çmime, kushte, orar, të tërheq interesin, të kuptoj qëllimin, buxhetet. Ndoshta madje të merrem me kuptimin e jetës. Padyshim që nuk do t'i arrij dot. Dhe ndërsa ti lexoje dhe përgatiteshe, tashmë kaloi një javë. Koha më e mirë për të lënë pas artikujt dhe për të filluar diçka.
Këtu është lista jonë kontrolli për organizimin e një hackathoni të brendshëm brenda 1 jave.
- Plani: ulesh në qetësi dhe shkruan një listë të atyre që duhet të bëhen për hackathon. 30 minuta.
- Detyra: pjesëmarrësit propozojnë dhe zgjedhin vetë projektet që duan të krijojnë në Google Sheets. Detyrë në background, 2 orë.
- Orari: shkruan shpejt një përmbledhje të shkurtër të orarit duke marrë parasysh 3 pushime dhe fina. 20 minuta.
- Ekipet: publikoni një mesazh për hackathon-in me orarin nga CTO në kanalet IT në Slack/email/etc dhe krijon një kanal të veçantë për hackathon-in. Në të, të gjithë ndahen në grupe, ndërsa ata që nuk janë vendosur e bëjnë këtë gjatë 5 minutave të para të hackathon-it. Detyrë në background, 2 orë.
- Buxhetet: krijon merchandise me dy zhvillues, ia jep dizajnerit për dizajnim, merr materialin e gatshëm. Detyrë sfondi, 3 ditë.
- Hackathon: vjen në zyrë, koordinon të gjithë në fillim, merret me gjërat e tua, lexon Reddit, me një pamje të rëndësishme njofton çdo pauzë për pizzën e re, fotografinë e perëndimit, shpall finalen, votojmë së bashku dhe zgjedhim fituesin. 1 ditë.
- Nën yll: sigurisht, ti vazhdimisht mendon për të siguruar që gjithçka të shkojë mirë. Sigurisht, jo të gjithë do ta shohin mesazhin tënd dhe me disa është më mirë të flasësh personalisht. Sigurisht, nëse dikush të ndihmon, gjithçka bëhet dyfish më e lehtë (më ndihmoi e mrekullueshme Aljona).
Një pjesë më pak e mërzitshme rreth datës së hackathon-it
Pse 21 prilli? Ky ditë është e rëndësishme për ne. Pikërisht një vit më parë, më 21 prill përballuam një ngarkesë gjatë fundjavës së parë pas fillimit të Kampanjës Federale Reklamuese. Të nesërmen, në të diel, ekipi ynë ishte në punë që nga ora 8 e mëngjesit. Atëherë krijuam një bord në Trello të quajtur sundayhackathon dhe filloi një javë pune me turne 12-orëshe në ditë. Situata ishte kaq kritike, saqë nuk kishim kohë as të hanim dhe na ndihmonin djemtë nga ekipet e tjera.

Një rrëfim më të detajuar mund ta lexoni në (CEO ynë). Që atëherë, kemi bërë shumë ndryshime, por këtë datë tani me siguri nuk do ta harrojmë.
Të këtij viti vendosëm që kjo ngjarje meriton të përkujtoset dhe, në traditat më të mira, organizuam hackathonin e parë të brendshëm në historinë e Dodo, i cili zgjati 10 orë.
Pjesa më interesante rreth projekteve të hackathonit
Disklaimer: të gjitha përshkrimet janë shkruar nga djemtë vetë, kështu që autori i tekstit nuk jam unë.
Oleg Lërning (makinë mësimi)
Dima Kochnev, Sasha Andronov (@alexandronov)
Deshëm që të krijonim një rrjet nervor që do të përcaktonte se çfarë pizze është në një fotografi pa ndonjë njohuri të mëparshme. Në fund, bëmë një model shumë të thjeshtë dhe juguç - ai njeh 10 lloje pizze, përfundimisht mësuam se si funksionon gjithçka, sa është e mundur për një ditë (~10 orë).

Në veçanti, kuptuam se industria ka arritur në një nivel ku një zhvillues i zakonshëm mund të marrë biblioteka të gatshme, të lexojë dokumentacionin dhe të trajnojë rrjetin e tij nervor pa njohuri të thella në lëndë. Ai do të funksionojë mjaft mirë për të zgjidhur probleme reale.
Mjetet që përdorëm:
- â njĂ« bibliotekĂ« e lehtĂ« dhe e thjeshtĂ« pĂ«r tĂ« punuar me mĂ«simin makina dhe shikimin kompjuterik.
- Provuan dy modele â ResNet50, Yolo.
- Kodi u shkrua, natyrisht, në Python.
I kishim 11000 foto, por pothuaj 3/4 e tyre ishin plehra, ndĂ«rsa nĂ« tĂ« mbetura kishte pamje tĂ« ndryshme dhe tĂ« papĂ«rshtatshme. NĂ« pĂ«rfundim, morĂ«m njĂ« model tĂ« gatshĂ«m (i cili thjesht di tĂ« gjejĂ« pica) dhe me tĂ« ndarĂ«m pjesĂ«n mĂ« tĂ« keqe. Pastaj, nĂ« emrin e fotos ishte emri i picĂ«s â kĂ«shtu qĂ« i vendosĂ«m nĂ« dosje, por doli se emrat nuk pĂ«rputheshin me realitetin dhe aty na duhej tĂ« pastronim me dorĂ«. NĂ« fund mbetĂ«n rreth 500-600 foto, e qartĂ« se kjo Ă«shtĂ« njĂ« sasi e vogĂ«l, por megjithatĂ«, kjo ishte e mjaftueshme pĂ«r tĂ« ndarĂ« 10 pica nga njĂ«ra-tjetra.
Për të trajnuar rrjetin morëm makinën më të lirë virtuale në Azure me NVIDIA Tesla K80. Ajo u përdor për të mësuar për 100 epoka, por ishte e dukshme se rrjeti ishte mbipërkëqyer pas 50 epokave, për shkak të madhësisë së vogël të të dhënave.
NĂ« thelbâkĂ«tu qĂ«ndron e gjithĂ« problemi qĂ«ndron nĂ« mungesĂ«n e tĂ« dhĂ«nave tĂ« mira.

Ndoshta kemi ngatërruar paksa terma, por duhet të merret parasysh se ne në përgjithësi nuk kemi përvojë në punën me gjithë këto çështje.
GUI për NOOBS (konsola për porosinë e picës)
Misha Kumachev (), Zhenya Bikkinin, Zhenya Vasiliev
Kemi mbledhur një prototip aplikacioni shumëplatformë për geek-at, që mundëson porositjen e pizzës nëpërmjet terminalit ose komandës, madje edhe ta integrosh në pipeline-in e vendosjes dhe të sjellësh pizzën në zyrë pas një publikimi të suksesshëm.

Puna u ndan në disa pjesë: kuptuam si funksionon API-ja jonë për aplikacionet mobile, ndërtuam CLI-në tonë me ndihmën e dhe konfigurua publikimi i paketës që ndërtuam. Me detyrën e fundit u lidhën disa minuta të pakëndshme në fund të hackathon-it. Gjithçka punonte lokal dhe madje ishim të sigurt që versionet e vjetra të paketës ishin të publikuara, por ato të reja (ku ishin shtuar më shumë karakteristika të shkëlqyera dhe emoji) refuzonin të funksiononin. Kemi shpenzuar rreth 40 minuta për të kuptuar se çfarë kishte shkuar keq, por në fund gjithçka funksionoi magjikisht vetë).
Objektivi ynë maksimal për hackathon ishte një porosi e vërtetë pizze në zyrë përmes CLI-së tonë. E kontrolluam dhjetë herë në skenarin testues, por prapë kisha duar të dridhura kur shkruaja komandat në prodhim.

Si pĂ«rfundim â e bĂ«mĂ« kĂ«tĂ«!

CourierGo
Anton BruĆŸmelĂ«v (autori), Vanya Zverev, Gleb Lesnikov (), Andrey Sarafanov
Mori idenë "Aplikacioni për kurierin."
Historia përgatitore.Fillimisht, mendoja cfarë veçorash mund të ketë aplikacioni? Kështu lindi një listë e tillë funksionalitetesh:
- Aplikacioni identifikohet në kasën e shpërndarjes me një kod.
- Në aplikacion, porositë e disponueshme dhe ato që duhen marrë shihen menjëherë.
- Kurierët e shënojnë porosinë dhe e marrin me vete.
- Atij i tregohen koha e llogaritur dhe nëse arrin apo jo.
- Klienti sheh që kurieri ka nisa.
- Klienti fillon të shikojë pikën e kurierit në hartë dhe kohën e llogaritur.
- Kurierët mund të shkruajnë në chat me klientin nga aplikacioni.
- Klientët mund të shkruajnë në chat me kurierin nga aplikacioni.
- Pesë minuta para mbërritjes, klienti merr një mesazh që kurieri është afër, pra bëhu gati.
- Kurierët shënojnë në aplikacion se kanë mbërritur dhe presin.
- Kurierët telefonojnë nga aplikacioni me një klik dhe njoftojnë se (ngjiten, kanë arritur, etj.)
- Klienti pranon porosinë dhe fut kodin PIN nga aplikacioni ose SMS për të konfirmuar dorëzimin. (si një nënshkrim) Në mënyrë që kurieri të mos mund të përfundojë dorëzimin më herët, nëse vonohet.
- Porosia shënohet në sistem si e dorëzuar.
Përveç disa skenarëve alternativë:
- Kurieri mund të shënojë porosinë si të papërfunduar dhe të zgjedhë arsyen.
- Kurieri, nĂ« rast vonese, mund tĂ« lĂ«shojĂ« njĂ« certificat elektronike pĂ«rmes SMS me njĂ« dĂŒshku. Ose certifikata vjen automatikisht nĂ« rast tĂ« mosrespektimit tĂ« afatit tĂ« dorĂ«zimit.
Ndjenja e perspektivës dhe e nevojës për këtë projekt, sigurisht që jepte energji.
Të nesërmen shkuam me ekipin për drekë dhe diskutuam se si do të dukej funksionaliteti minimal i aplikacionit.
Si rezultat, u krijua lista e mëposhtme për atë që duhej të përfundonim në hackathon:
- Hyrja në kasën e dorëzimit.
- TĂ« shfaqet pozita aktuale.
- Të dërgojnë të dhënat në API-në e jashtme (koho, mori porosinë, dorëzoi porosinë).
- Të marrin të dhëna nga API-ja e jashtme (porositë aktuale të kurierit).
- Të dërgojnë një ngjarje që tregon se ka marrë porosinë për dorëzim/dorëzoi.
- Të shfaqet pozita aktuale e kurierit në hartë në faqe.
Puna kryesore, siç dukej, duhej tĂ« pĂ«rqendrohej nĂ« krijimin e backend-it, tĂ« aplikacionit (pas diskutimeve u zgjodh ReactNative pĂ«r zhvillimin e aplikacionit, mĂ« saktĂ« lidhja mbi tĂ« â , e cila lejon qĂ« nuk nevojitet tĂ« shkruash kod natyror. NĂ« planin e backend-it, fillimisht kishte shpresa nĂ« Vanya Zverev, si njĂ« ekspert nĂ« punĂ«n me shablonin tonĂ« tĂ« shĂ«rbimit dhe k8s (punĂ«t qĂ« ai mori pĂ«rsipĂ«r). UnĂ« dhe Andrei Sarafanov provuam t'i luajmĂ« ReactNative.
Vendosa të provoj të krijoj menjëherë një depo funksionuese për projektin. Në 12 të natës, u ndesha me faktin se gjeolokacioni në ReactNative punon keq në sfond, nëse nuk shkruan kod natyror, u ndjeva disi i frustruar. Më pas, më kaloi kur e kuptova se po lexoj dokumentacionin e framework-ut expo.io, jo atë të ReactNative. Në fund të mbrëmjes, më kishte bërë të qartë se si të merrja pozitat aktuale në expo.io dhe si të dizajnoja ekrane të veçanta (për identifikimin, shfaqjen e porosisë etj.).

Në mëngjes, në hackathon, e tërhoqa Glebin në projektin tonë me perspektiva të mëdha. Shkurtimisht, hartuam një plan për atë që duhej të bënim.

BĂ«mĂ« njĂ« gabim kur pĂ«rpiqeshim tĂ« komunikonim jo pĂ«rmes HTTP, por pĂ«rmes GRPC, pasi askush nuk dinte tĂ« ndĂ«rtonte njĂ« klient GRPC pĂ«r JavaScript. NĂ« fund, pasi shpenzuam rreth njĂ« orĂ« e gjysmĂ«, e braktisĂ«m kĂ«tĂ« ide. PĂ«r kĂ«tĂ« arsyen, djemtĂ« filluan tĂ« ripunonin serverin e gatshĂ«m nga GRPC nĂ« WebApi nĂ« backend. Pas gjysmĂ« ore, pĂ«rfundimisht arritĂ«m tĂ« vendosnim komunikimin midis aplikacionit dhe backend-it, si njĂ« mrekulli. Por nĂ« tĂ« njĂ«jtĂ«n kohĂ«, Gleb ishte pothuajse duke e pĂ«rfunduar deploy-in nĂ« k8s dhe gjithashtu automatikun e deploy-it me commit nĂ« master. đ
Si depo, zgjodhëm MySQL për të mos rrezikuar të paktën me bazën (kishim mendime për CosmosDb).

Si përfundim:
- Implementuam ruajtjen e koordinatave aktuale të kurierit nga aplikacioni në bazë.
- E lidhëm RabbitMQ dhe u abonuar në mesazhet e kurierit për marrjen e porosisë, që të tregohej menjëherë porosia te kurieri në aplikacion.
- Filluam të ruajmë në bazë kohën e dorëzimit të porosisë, pasi kurieri shtypte butonin në aplikacion. Nuk arritëm të përfshijmë dërgimin e ngjarjes përsëri në Rabbit për atë që porosia ishte dorëzuar.
- Kam bëra një shfaqje të hartës në faqen currentorder në sit me pozicionin aktual të kurierit. Por ky funksionalitet mbeti paksa i papërfunduar, pasi në mjedis nuk arritëm të konfigurojmë CORS për të marrë koordinatat nga shërbimi ynë të ri.
M87
Roma Bukin, Gosha Polevoy (), Artyom Trofimushkin
Ne dĂ«shironim tĂ« realizonim njĂ« ofrues tĂ« OpenID Connect, pasi aktualisht pĂ«rdorim njĂ« protokoll autentikimi tĂ« krijuar nga ne, dhe kjo krijon disa vĂ«shtirĂ«si: biblioteka tĂ« personalizuara tĂ« klientĂ«ve, punĂ« e papĂ«rshtatshme nga partnerĂ«t e jashtme, ndoshta probleme me sigurinĂ« (pavarĂ«sisht se OAuth2.0 dhe OpenID Connect nĂ« implementimin e tyre referues mund tĂ« konsiderohen tĂ« sigurta, pĂ«r zgjidhjen tonĂ« â nuk jam i sigurt).

Ne kemi krijuar një shërbim të veçantë që emulon shërbimin e ruajtjes së të dhënave personale, për të krijuar një model të vogël të ofruesit të autentikimit Country-Agnostic, i cili do të kërkonte të dhënat personale nga një shërbim të veçantë (kjo në perspektivë do të ofronte mundësinë për të pasur një shërbim me të cilin mund të identifikoheshin me llogari në çdo vend dhe në të njëjtën kohë përputheshin me GDPR dhe legjislacionin përkatës). Kjo pjesë e kemi realizuar, si dhe ofruesin, dhe i kemi lidhur me sukses me njëri-tjetrin. Më pas duhej të krijonim një API, i cili do të ishte i mbrojtur me tokene që jep ofruesi, të mbështesë introspeksionin e tyre përmes ofruesit dhe të japë të dhëna të mbrojtura, nëse kërkesa përputhej me politikat e autorizimit (kontrollojmë që përdoruesi të jetë autentikuar sipas skemës Bearer, se në token e tij përmban një scope të caktuar + që vetë përdoruesi ka një leje që lejon kryerjen e thirrjes). Kjo pjesë gjithashtu është realizuar. Komponenti përfundimtar ishte klienti JavaScript, i cili do të merrte një token, me të cilin do të thërriste API-në e mbrojtur. Kjo pjesë nuk arritëm ta përfundojmë. Pra, ishte përfunduar e gjithë pjesa funksionale, por nuk ishte përfunduar pjesa front-end për të demonstruar funksionalitetin e gjithë sistemit.
E-E-E (lojë)
Dima Afonchenko, Sasha Konovalov
Krijuam një mini-lojë në junë ku duar të shpejta hedhin sallam në pizzë. Në rast se e hedh keq sallamin, në ekran shfaqet një mesazh i trishtuar 'E refuzuar', ndërsa nëse gjithçka është hedhur siç duhet, shfaqet një fakt rastësor rreth pizzës.

Deshëm të bënim një nivel të dytë me hedhjen e domateve, por nuk patëm kohë.

Një vazhdim i shkurtër: kush fitoi?
Para hackathon-it, biseduam me djemtë dhe pyeta se çfarë çmimi do të dëshironin të merrnin nëse do të fitonin. Duke u treguar, çmimi më i çmuar do të ishte 'shkaku për në prodhim'.

Prandaj, së shpejti prisni nga ne një njoftim për lojën me duar që hedhin peperoni në pizzë.
Siç mund ta ketë vërejtur një lexues i vëmendshëm, ekipi 'E-E-E (lojë)' fitoi. Urime djemve!
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. , ju lutemi.
Cili projekt ju pëlqeu më shumë?
Oleg Lërning (makinë mësimi)
GUI për NOOBS
CourierGo
M87
E-E-E
5 përdorues votuan. 3 përdorues abstenuan.
Burimi: habr.com
