Kodojmë-pica

Përshëndetje, Habr. Së fundi organizuam spontanisht hackathon-in tonë të parë të brendshëm. Vendosa të ndaj me ju vështirësitë dhe përfundimet e mia rreth përgatitjes së tij brenda 2 javësh, si edhe projektet që dolën prej tij.

Kodojmë-pica

Pjesa e mërzitshme për ata që interesohen për marketingun

Do ta nis me një histori të shkurtër.

Fillimi i prillit. Në zyrën tonë po zhvillohet hackathon-i i parë i MskDotNet Community. Beteja për Tatooine është në kulm, këtë herë në galaktikën tonë. E shtunë. 20 ekipe. Pica. Gjithçka është shumë e ngrohtë e miqësore (provat). R2-D2 i fryrë shfaqet nëpër sallë. Ekipet shkruajnë algoritmet më të sakta për të kaluar garën më të rrezikshme në hartë. E shtyjmë nisjen e xhirove të para. Biskotat dhe kafeja na shpëtojnë. Unë dhe organizatorët prisnim që të shtunën shumë veta të largoheshin pas drekës. Por jo. 12 orë kodim kanë mbetur pas. Finalja. Diçka shkëputet, diçka nuk nis. Por të gjithë janë të lumtur. Fiton ekipi ynë. Ne jemi dyfish të lumtur.

E ndaj gëzimin në Slack dhe më lind një ide: «Duhet të bëjmë hackathon-in tonë». I shkruaj CTO-së tonë, Sashës. Heshtje.

MĂ«ngjes. Po pi kafe nĂ« zyrĂ«. Shoh SashĂ«n qĂ« po afrohet nga pas shpine. «Liza, kjo Ă«shtĂ« fantastike! PikĂ«risht mĂ« 21 prill kemi njĂ« datĂ« tĂ« rĂ«ndĂ«sishme. Hajde ta bĂ«jmĂ«!» WTF!? Kaq shpejt? A? ÇfarĂ«? MĂ« duhet tĂ« fluturoj pĂ«r nĂ« Syktyvkar pĂ«r praktikĂ« nĂ« mes tĂ« prillit. Po nĂ« djall tĂ« vejĂ«! Hajde.

KanĂ« mbetur 2 javĂ«. Nuk kam qenĂ« kurrĂ« organizatorja e vetme e njĂ« hackathoni. Edhe nĂ«se Ă«shtĂ« i brendshĂ«m. Lexoj artikuj pĂ«r kĂ«tĂ« temĂ«. E tmerrshme. Duhen disa muaj. Duhen disa njerĂ«z. Duhet tĂ« mendosh pĂ«r merch, çmimet, kushtet, programin, tĂ« ngjallĂ«sh interes, tĂ« kuptosh qĂ«llimin, buxhetet. Ndoshta madje edhe tĂ« sqarosh kuptimin e jetĂ«s. UnĂ« me siguri nuk do t’ia dal. Dhe ndĂ«rkohĂ« qĂ« ti lexoje e pĂ«rgatiteshe, tashmĂ« ka kaluar njĂ« javĂ«. ËshtĂ« koha ideale t’i lĂ«sh mĂ«njanĂ« artikujt dhe tĂ« fillosh tĂ« bĂ«sh diçka.

Ja checklist-i ynë për organizimin e një hackathoni të brendshëm në 1 javë

  • Plani: ulesh qetĂ«sisht dhe shkruan listĂ«n e gjĂ«rave qĂ« duhen bĂ«rĂ« pĂ«r hackathon-in. 30 minuta.
  • Detyra: pjesĂ«marrĂ«sit vetĂ« propozojnĂ« dhe zgjedhin projektet qĂ« duan tĂ« krijojnĂ« nĂ« Google Sheets. DetyrĂ« nĂ« sfond, 2 orĂ«.
  • Programi: me mjete minimale shkruan njĂ« ndarje tĂ« shkurtĂ«r tĂ« kohĂ«s duke marrĂ« parasysh 3 pushime dhe finalen. 20 minuta.
  • Komandat: publikon njĂ« njoftim pĂ«r hackathon-in me programin nga CTO nĂ« kanalet IT nĂ« Slack/postĂ«/etc dhe krijon njĂ« kanal tĂ« veçantĂ« pĂ«r hackathon-in. Aty tĂ« gjithĂ« ndahen nĂ« ekipe, ndĂ«rsa ata qĂ« nuk janĂ« pĂ«rcaktuar e bĂ«jnĂ« kĂ«tĂ« nĂ« 5 minutat e para tĂ« hackathon-it. DetyrĂ« nĂ« sfond, 2 orĂ«.
  • PĂ«rfitime: mendon merchandise me dy zhvillues, ia kalon dizajnerit pĂ«r ta vizatuar dhe e merr gati. DetyrĂ« nĂ« sfond, 3 ditĂ«.
  • Hackathon: vjen nĂ« zyrĂ«, koordinon tĂ« gjithĂ« nĂ« fillim, merresh me punĂ«t e tua, lexon Reddit, nĂ« çdo pushim njofton me rĂ«ndĂ«si pĂ«r picĂ«n e freskĂ«t, fotografon perĂ«ndimin, shpall finalen, pastaj votoni sĂ« bashku dhe zgjidhni fituesin. 1 ditĂ«.
  • Pjesa me yllth: sigurisht, mendon vazhdimisht 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 2 herĂ« mĂ« e lehtĂ« (mua mĂ« ndihmoi Aljona e mrekullueshme).

Pjesa më pak e mërzitshme për datën e hackathon-it

Pse 21 prilli? Kjo ditë ka rëndësi të veçantë për ne. Pikërisht një vit më parë, më 21 prill, sistemi ynë ra nën ngarkesë gjatë fundjavës së parë pas nisjes së Fushatës Federale të Reklamimit. Të nesërmen, të dielën, ekipi ynë ishte në punë që nga ora 8 e mëngjesit. Atëherë krijuam në Trello tabelën sundayhackathon dhe nisi një javë pune me turne prej 12 orësh në ditë. Situata ishte aq kritike, sa nuk kishim kohë as të hanim dhe djemtë nga ekipet e tjera na sillnin diçka për të ngrënë.

Kodojmë-pica

Një rrëfim më i detajuar mund ta lexoni në faqen e Fjodor Ovçinnikovit (CEO-së tonë). Që atëherë kemi ndryshuar shumë gjëra, por këtë datë tani me siguri nuk do ta harrojmë.

Këtë vit vendosëm që kjo ngjarje meriton të përjetësohet në kujtesën e brezave dhe, sipas traditës më të mirë, organizuam hackathon-in e parë të brendshëm në historinë e Dodo-s, i cili zgjati 10 orë.

Pjesa më pak e mërzitshme për projektet e hackathon-it

Disclaimer: të gjitha përshkrimet i kanë shkruar vetë djemtë, ndaj autorësia e tekstit nuk është e imja.

Oleg Learning (machine learning)

Dima Koçnev, Sasha Andronov (@alexandronov)

Donim të bënim një rrjet nervor që të përcaktonte çfarë pice ka në fotografi pa ndonjë njohuri paraprake. Në fund bëmë një version shumë të thjeshtë dhe eksperimental: ai njeh 10 pica, dhe afërsisht kuptuam si funksionon gjithçka, aq sa ishte e mundur për një ditë (~10 orë).

Kodojmë-pica

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 vet nervor pa njohuri të thella të fushës. Dhe ai do të funksionojë mjaft mirë për zgjidhjen e detyrave reale.

Mjetet që u përdorën:

  • imageai — njĂ« bibliotekĂ« e pĂ«rshtatshme dhe e thjeshtĂ« pĂ«r punĂ« me machine learning dhe computer vision.
  • Provuan dy modele — ResNet50 dhe Yolo.
  • Kodin, sigurisht, e shkruam nĂ« Python.

Kishim 11.000 foto, por pothuajse 3/4 prej tyre dolĂ«n tĂ« ishin tĂ« pavlefshme, ndĂ«rsa te pjesa e mbetur kishte kĂ«nde tĂ« ndryshme e tĂ« papĂ«rshtatshme. NĂ« fund morĂ«m njĂ« model tĂ« gatshĂ«m (qĂ« thjesht di tĂ« gjejĂ« pica) dhe me ndihmĂ«n e tij hoqĂ«m pjesĂ«n mĂ« problematike. MĂ« pas, nĂ« emrin e fotos ishte emri i picĂ«s — kĂ«shtu i ndamĂ« nĂ«pĂ«r dosje, por doli qĂ« emrat nuk pĂ«rputheshin me pĂ«rmbajtjen reale dhe kĂ«tu na u desh tĂ« pastronim gjithçka manualisht. Si rezultat mbetĂ«n rreth 500–600 foto; Ă«shtĂ« e qartĂ« qĂ« ky Ă«shtĂ« njĂ« numĂ«r shumĂ« i vogĂ«l, por megjithatĂ« mjaftoi pĂ«r tĂ« dalluar 10 pica nga njĂ«ra-tjetra.

Për trajnimin e rrjetit morëm virtual machine më të lirë në Azure me NVIDIA Tesla K80. Aty e trajnuam për 100 epoka, por shihej që rrjeti ishte mbingopur që pas 50 epokash, për shkak të dataset-it të vogël.

Në thelb, i gjithë problemi është mungesa e të dhënave cilësore.

Kodojmë-pica

Ndoshta i kemi ngatërruar pak termat, por duhet marrë parasysh se nuk kemi fare përvojë me gjithë këto gjëra.

GUI for NOOBS (konsolë për porositjen e picës)

Misha Kumachyov (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Ndërtuam një prototip të një aplikacioni console për geek-ët, me të cilin mund të porosisësh pica përmes terminalit ose command line, madje edhe ta integrosh në deploy pipeline që pas një release të suksesshëm të dërgohet pica në zyrë.

Kodojmë-pica

Puna u nda në disa pjesë: kuptuam si funksionon API ynë për aplikacionet mobile, ndërtuam CLI-në tonë me ndihmën e oclif dhe konfiguruam publikimin e paketës që krijuam. Me detyrën e fundit patëm disa minuta jo fort të këndshme afër fundit të hackathon-it. Gjithçka punonte lokalisht dhe madje funksiononin edhe versionet e vjetra të publikuara të paketës, por të rejat (ku kishim shtuar më shumë veçori të bukura dhe emoji) refuzonin të punonin. Shpenzuam rreth 40 minuta për të kuptuar çfarë kishte shkuar keq, por në fund gjithçka, në mënyrë disi magjike, filloi të punonte vetë).

Objektivi ynë maksimal për hackathon-in ishte një porosi reale pice në zyrë përmes CLI-së sonë. E testuam gjithçka dhjetëra herë në mjedisin e testimit, por prapëseprapë më dridheshin duart kur po shkruaja komandat në production.

Kodojmë-pica

Në fund, ia dolëm vërtet!

Kodojmë-pica

CourierGo

Anton Bruzhmelyov (autor), Vanya Zverev, Gleb Lesnikov (entropy), Andrey Sarafanov

Morëm idenë «Aplikacion për korrierin».

Pak histori rreth përgatitjes.Fillimisht mendova se çfarë funksionesh mund të kishte në përgjithësi aplikacioni. Doli afërsisht kjo listë funksionalitetesh:

  • Aplikacioni hyn nĂ« sistemin e arkĂ«s sĂ« dĂ«rgesave me kod.
  • NĂ« aplikacion shihen menjĂ«herĂ« porositĂ« e disponueshme, pra porositĂ« qĂ« duhen marrĂ«.
  • Korrieri e shĂ«non porosinĂ« dhe e merr pĂ«r dorĂ«zim.
  • I shfaqet koha e parashikuar dhe nĂ«se do t'ia dalĂ« apo jo.
  • Klientit i shfaqet qĂ« korrieri Ă«shtĂ« nisur.
  • Klientit fillon t’i shfaqet pika e korrierit nĂ« hartĂ« dhe koha e parashikuar.
  • Korrieri mund t’i shkruajĂ« klientit nĂ« chat nga aplikacioni.
  • Klienti mund t’i shkruajĂ« korrierit nĂ« chat nga aplikacioni.
  • PesĂ« minuta para mbĂ«rritjes, klientit i vjen njĂ« mesazh se korrieri Ă«shtĂ« afĂ«r, ju lutem bĂ«huni gati.
  • Korrieri e shĂ«non nĂ« aplikacion qĂ« ka mbĂ«rritur dhe po pret.
  • Korrieri telefonon nga aplikacioni me njĂ« klikim dhe njofton se (po ngjitet lart, ka mbĂ«rritur te dera etj.)
  • Klienti e pranon porosinĂ« dhe vendos PIN-in nga aplikacioni ose nga SMS pĂ«r tĂ« konfirmuar dorĂ«zimin. (si nĂ«nshkrim) QĂ« korrieri tĂ« mos mund ta pĂ«rfundojĂ« dorĂ«zimin para kohe, nĂ«se Ă«shtĂ« me vonesĂ«.
  • Porosia shĂ«nohet nĂ« sistem si e dorĂ«zuar.

Plus disa skenarë alternativë:

  • Korrieri mund ta shĂ«nojĂ« porosinĂ« si tĂ« padorĂ«zuar dhe tĂ« zgjedhĂ« arsyen.
  • NĂ« rast vonese, korrieri mund tĂ« lĂ«shojĂ« me njĂ« buton njĂ« certifikatĂ« elektronike pĂ«rmes SMS. Ose certifikata dĂ«rgohet automatikisht nĂ«se afati i dorĂ«zimit nuk respektohet.

Ndjesia se ky projekt kishte perspektivë dhe ishte vërtet i nevojshëm, sigurisht që na motivonte shumë.

Të nesërmen dolëm me ekipin për drekë dhe diskutuam si do të dukej funksionaliteti minimal i aplikacionit.

Si rezultat, u formua kjo listë e gjërave që duhej të arrinim të bënim gjatë hackathon-it:

  • Hyrja nĂ« sistemin e arkĂ«s sĂ« dĂ«rgesave.
  • TĂ« shfaqet pozicioni aktual.
  • TĂ« dĂ«rgohen tĂ« dhĂ«na nĂ« njĂ« API tĂ« jashtme (koordinatat, mori porosinĂ«, dorĂ«zoi porosinĂ«).
  • TĂ« merren tĂ« dhĂ«na nga njĂ« API e jashtme (porositĂ« aktuale tĂ« korrierit).
  • TĂ« dĂ«rgohet event-i qĂ« tregon se mori porosinĂ« pĂ«r dorĂ«zim / e dorĂ«zoi.
  • TĂ« shfaqet pozicioni aktual i korrierit nĂ« hartĂ« nĂ« sajt.

Siç dukej, puna kryesore do tĂ« ishte krijimi i backend-it dhe i vetĂ« aplikacionit (pas diskutimeve zgjodhĂ«m ReactNative pĂ«r zhvillimin e aplikacionit, mĂ« saktĂ« shtresĂ«n mbĂ«shtjellĂ«se mbi tĂ« — expo.io, qĂ« tĂ« mos na duhej fare tĂ« shkruanim kod nativ). PĂ«r backend-in, fillimisht shpresonim te Vanya Zverev, si person me pĂ«rvojĂ« nĂ« punĂ«n me shabllonin tonĂ« tĂ« shĂ«rbimit dhe me k8s (dhe pikĂ«risht kĂ«tĂ« pjesĂ« ai e mori pĂ«rsipĂ«r). ReactNative vendosĂ«m ta provonim unĂ« dhe Andrey Sarafanov.

Vendosa të përpiqesha menjëherë të krijoja një repository funksional për vetë projektin. Rreth orës 12 të natës hasa faktin që në ReactNative geolokacioni në sfond funksionon dobët nëse nuk shkruan kod nativ, gjë që më frustronte pak. Më pas u qetësova kur kuptova se nuk po lexoja dokumentacionin e framework-ut expo.io, por atë të ReactNative. Në fund, që atë mbrëmje e kisha tashmë të qartë si të merrja pozicionin aktual në expo.io dhe si të vizatoja ekrane të veçanta (për login, shfaqjen e porosisë etj.).

Kodojmë-pica

Në mëngjes, në hackathon, e tërhoqëm Gleb-in në projektin tonë superpremtues. Shpejt përgatitëm një plan për atë që duhej bërë.

Kodojmë-pica

BĂ«mĂ« njĂ« gabim kur, sipas shabllonit tĂ« projektit, u pĂ«rpoqĂ«m tĂ« realizonim komunikimin jo pĂ«rmes HTTP, por pĂ«rmes GRPC, pasi askush nuk dinte tĂ« ndĂ«rtonte njĂ« klient GRPC pĂ«r JavaScript. NĂ« fund, pasi humbĂ«m rreth njĂ« orĂ« e gjysmĂ« me kĂ«tĂ«, e lamĂ« fare si ide. PĂ«r shkak tĂ« kĂ«saj, edhe ekipi i backend-it nisi tĂ« ripunonte serverin e gatshĂ«m nga GRPC nĂ« WebApi. Pas gjysmĂ« ore, mĂ« nĂ« fund arritĂ«m tĂ« konfiguroni komunikimin e aplikacionit me backend-in, mrekulli e vĂ«rtetĂ«. Por pikĂ«risht nĂ« tĂ« njĂ«jtĂ«n kohĂ« Gleb pothuajse e kishte pĂ«rfunduar deploy-in nĂ« k8s, plus edhe autodeploy pas commit-it nĂ« master. 🙂

Për ruajtjen e të dhënave zgjodhëm MySQL, që të mos rrezikonim të paktën me bazën e të dhënave (kishte edhe mendime për CosmosDb).

Kodojmë-pica

NĂ« fund:

  • Implementuam ruajtjen e koordinatave aktuale tĂ« korrierit nga aplikacioni nĂ« bazĂ«n e tĂ« dhĂ«nave.
  • Integruam RabbitMQ dhe u abonuan te mesazhet pĂ«r marrjen e porosisĂ« nga korrieri, qĂ« porosia tĂ« shfaqej menjĂ«herĂ« nĂ« aplikacionin e korrierit.
  • NisĂ«m tĂ« ruanim nĂ« bazĂ«n tonĂ« tĂ« dhĂ«nash kohĂ«n e dorĂ«zimit tĂ« porosisĂ«, pasi korrieri shtypte butonin nĂ« aplikacion. Nuk arritĂ«m tĂ« shtonim dĂ«rgimin e event-it mbrapsht nĂ« RabbitMQ qĂ« porosia ishte dorĂ«zuar.
  • BĂ«ra shfaqjen e hartĂ«s nĂ« faqen currentorder nĂ« sajt me pozicionin aktual tĂ« korrierit. Por ky funksionalitet mbeti pak i papĂ«rfunduar, sepse nĂ« mjedis nuk arritĂ«m tĂ« konfiguroni CORS pĂ«r tĂ« marrĂ« koordinatat nga shĂ«rbimi ynĂ« i ri.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Donim të implementonim një ofrues OpenID Connect, pasi aktualisht përdorim një protokoll autentikimi të zhvilluar nga ne, dhe kjo krijon një sërë vështirësish: biblioteka klienti të personalizuara, punë jo të përshtatshme për partnerët e jashtëm dhe ndoshta edhe probleme sigurie (në fund të fundit, OAuth2.0 dhe OpenID Connect në implementimin standard mund të konsiderohen të sigurta, ndërsa për zgjidhjen tonë nuk jam i sigurt).

Kodojmë-pica

Krijuam njĂ« shĂ«rbim tĂ« veçantĂ« qĂ« emulon ruajtjen e tĂ« dhĂ«nave personale, pĂ«r tĂ« ndĂ«rtuar njĂ« model tĂ« vogĂ«l tĂ« njĂ« ofruesi autentikimi Country-Agnostic, i cili do t’i merrte tĂ« dhĂ«nat personale nga njĂ« shĂ«rbim i veçantĂ«. NĂ« perspektivĂ«, kjo do tĂ« jepte mundĂ«sinĂ« pĂ«r tĂ« pasur njĂ« shĂ«rbim tĂ« vetĂ«m me tĂ« cilin do tĂ« ishte e mundur tĂ« hyhej me njĂ« llogari nĂ« çdo vend, duke qenĂ« njĂ«kohĂ«sisht nĂ« pĂ«rputhje me GDPR dhe ligje tĂ« tjera. KĂ«tĂ« pjesĂ« e realizuam, ashtu si edhe ofruesin, dhe i integruam me sukses me njĂ«ri-tjetrin. MĂ« pas duhej tĂ« ndĂ«rtonim njĂ« API qĂ« do tĂ« mbrohej me tokenĂ«t e lĂ«shuar nga ofruesi, tĂ« mbĂ«shteste introspection-in e tyre pĂ«rmes ofruesit dhe tĂ« kthente tĂ« dhĂ«na tĂ« mbrojtura nĂ«se kĂ«rkesa pĂ«rmbushte politikat e autorizimit (verifikojmĂ« qĂ« pĂ«rdoruesi Ă«shtĂ« autentikuar sipas skemĂ«s Bearer, qĂ« tokeni i tij pĂ«rmban njĂ« scope tĂ« caktuar dhe qĂ« vetĂ« pĂ«rdoruesi ka permission-in qĂ« lejon ekzekutimin e thirrjes). Edhe kjo pjesĂ« u realizua. Komponenti i fundit ishte klienti JavaScript, tĂ« cilit do t’i jepej njĂ« token me tĂ« cilin ai do tĂ« thĂ«rriste API-n e mbrojtur. KĂ«tĂ« pjesĂ« nuk arritĂ«m ta pĂ«rfundonim. Pra, e gjithĂ« pjesa funksionale ishte gati, por mungonte pjesa front-end pĂ«r tĂ« demonstruar funksionimin e gjithĂ« sistemit.

E-E-E (lojë e vogël)

Dima Afonchenko, Sasha Konovalov

Krijuam një mini-lojë në Unity ku duar të shpejta hedhin sallam mbi pica. Nëse e hedh sallamin gabim, në ekran shfaqet mbishkrimi i trishtuar «Refuzuar», ndërsa nëse i gjithë sallami vendoset saktë, atëherë shfaqet një fakt i rastësishëm për picën.

Kodojmë-pica

Donim të bënim edhe një nivel të dytë me hedhjen e domateve, por nuk ia dolëm në kohë.

Kodojmë-pica

Një vazhdim i shkurtër: kush fitoi në fund?

Para hackathon-it po flisnim me djemtë dhe i pyeta se çfarë çmimi do të donin të merrnin nëse fitonin. Doli se çmimi më i vlefshëm do të ishte «rruga për në prod».

Kodojmë-pica

Prandaj, së shpejti prisni nga ne njoftimin e një loje me leva që hedhin pepperoni mbi picë.

Siç mund ta ketë vënë re lexuesi i vëmendshëm, fitoi ekipi «E-E-E (igruha)». I urojmë djemtë!

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, ju lutem.

Cili projekt ju pëlqeu më shumë?

  • Oleg Learning (machine learning)

  • GUI pĂ«r NOOBS

  • CourierGo

  • M87

  • E-E-E

Votuan 5 përdorues. Abstenuan 3 përdorues.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster