Tere, Habr. Me korraldasime spontaanselt esimese sisemise hackathoni. Tahtsin jagada teiega oma muresid ja jÀreldusi selle kahe nÀdalase ettevalmistuse kohta, samuti projekte, mis selle kÀigus tekkisid.

Igav osa neile, kes huvituvad turundusest
Alustan vÀikese looga.
Aprilli algus. Meie kontoris toimub esimene hackathon MskDotNet Community. Tatuini lahing on kĂ€imas, meie galaktikas seekord. LaupĂ€ev. 20 meeskonda. Pizza. KĂ”ik on vĂ€ga kodune (). Ăhupall R2-D2 piilub saalis. Meeskonnad kirjutavad kĂ”ige Ă”iget algoritmi, et lĂ€bida kĂ”ige ohtlikum vĂ”idusĂ”it kaardil. Me lĂŒkkame esimesed sĂ”idud edasi. KĂŒpsised ja kohv pÀÀstavad pĂ€eva. Ootasime korraldajatega, et laupĂ€eval lahkub palju inimesi pĂ€rast lĂ”una. Aga ei. 12 tundi kodeerimist on möödas. Finaal. Midagi lĂ€heb katki, midagi ei kĂ€ivitu. Kuid kĂ”ik on Ă”nnelikud. Meie meeskond vĂ”idab. Oleme kahe korda Ă”nnelikud.
Jagame rÔÔmu Slacks ja mulle tuleb mÔte: "Peame korraldama oma hackathoni." Kirjutan oma CTO-le Saƥale. Vaikus.
Hommik. Joon kohvi kontoris. NÀen selja tagant tulemas Sashat. "Liza, see on suurepÀrane! 21. aprillil on meil oluline kuupÀev. Alustame!" Mis? Nii kiiresti? Mida? Olen keset aprilli Syktyvkarisse praktikale sÔitmas. Ja olgu selle kÔigega. Teeme Àra.
Kaks nĂ€dalat on jÀÀnud. Ma pole kunagi olnud ainuĂŒksi hacketoni korraldaja. Isegi mitte siseĂŒrituse puhul. Loe artikleid selle teema kohta. Kohutav. Vaja on mitu kuud. Vaja on mitu inimest. Tuleb vĂ€lja mĂ”elda mĂ€lestusesemed, auhinnad, tingimused, ajakava, kaasata inimesi, mĂ”ista eesmĂ€rki, eelarvet. VĂ”ib-olla isegi elutĂ€henduses selguse saamiseks. Ma kindlasti ei saa hakkama. Ja kuni sina lugesid ja valmistusid, on juba nĂ€dal möödunud. On viimane aeg jĂ€tta artiklid kĂ”rvale ja midagi ette vĂ”tta.
Siin on meie kontrollnimekiri siseĂŒrituse hacketoni lĂ€biviimiseks ĂŒhe nĂ€dalaga.
- Plaani: rahulikult istud ja kirjutad nimekirja sellest, mida on hacketoni jaoks vajalik teha. 30 minutit.
- Ălesanne: osalejad esitavad ja valivad ise projektid, mida nad tahavad luua Google Sheetsis. Taustateenus, 2 tundi.
- Ajakava: kirjutad kiire ajajaotuse, arvestades 3 pausi ja lÔpetamist. 20 minutit.
- Meeskonnad: postitat sÔnum hackathonist koos CDO ajakava ja IT-kanalitega Slackis/e-kirjades jne ning lood eraldi kanali hackathoniks. Seal kÔik jagunevad meeskondadesse, samas kui mÀÀramata jÀÀnud teevad seda hackathoni esimeses 5 minutit. Taustateenus, 2 tundi.
- Tee mudelid: mÔtleme merchandise'i kahe arendajaga, saadame disainerile joonistamiseks, saad valmis. Taustaprojekt, 3 pÀeva.
- Hackathon: tuled kontorisse, koordineerid alguses kÔiki, teed oma asju, loed Redditi, rÀÀgid uhke nÀoga igast pausist vÀrskest pitsast, pildistad pÀikeseloojangut, kuulutad finaali vÀlja, hÀÀlestate koos ja valite vÔitja. 1 pÀev.
- TÀhtede all: muidugi mÔtled pidevalt sellele, et kÔik lÀheks hÀsti. Loomulikult ei nÀe kÔik sinu sÔnumit ja mÔnega on parem isiklikult rÀÀkida. Loomulikult, kui keegi sind aitaks, oleks kÔik ka kaks korda lihtsam (mind aitas imeline Aljona).
Mugavam osa hackathoni kuupÀevast
Miks 21. aprill? See pĂ€ev on meie jaoks eriline. TĂ€pselt aasta tagasi, 21. aprillil, kukkusime koormuse all esmakordselt pĂ€rast Föderaalse Reklaamikampaania kĂ€ivitamist. JĂ€rgmisel pĂ€eval, pĂŒhapĂ€eval, oli meie meeskond tööl alates kella 8. Siis lĂ”ime Trello's tahvli `sundayhackathon` ja algas nĂ€dal, mil töötasime vahetustega 12 tundi pĂ€evas. Olukord oli nii kriitiline, et meil ei olnud isegi aega sĂŒĂŒa, ja meid toitsid teised meeskonna liikmed.

Rohkem detailset juttu saate lugeda (meie CEO). Alates sellest ajast on palju muutunud, kuid seda kuupÀeva me kindlasti ei unusta.
Sel aastal otsustasime, et see sĂŒndmus vÀÀrib mĂ€lestamiseks jÀÀdvustamist ning parimates traditsioonides korraldasime esmakordselt Dodo sisemise hackathon'i, mis kestis 10 tundi.
Selle hackathon'i projektide kÔige vÀhem igav osa
Disclaimer: kÔik kirjeldused on kirjutanud meie inimesed, seega ei ole teksti autorlus minu.
Oleg LŃrnigin (masinĂ”pe)
Dima Kochnjev, Sasha Andronov (@alexandronov)
Soovisime luua nĂ€rvivĂ”rku, mis suudaks pildi pealt teada saada, milline pits on. LĂ”puks tegime vĂ€ga lihtsa ja mĂ€ngulise â see tuvastab 10 pitsat, saime umbes pĂ€evaga (~10 tundi) asja toimimise osas pĂ€ris hĂ€sti aru.

Me mĂ”istsime, et tööstus on jĂ”udnud tasemele, kus tavaline arendaja vĂ”ib vĂ”tta valmis raamatukogud, lugeda dokumentatsiooni ja koolitada oma nĂ€rvivĂ”rku ilma sĂŒgavate teadmiste omamata. Ja see töötab piisavalt hĂ€sti reaalses probleemide lahendamiseks.
Kasutasime tööriistu:
- â mugav ja lihtne raamatukogu masinĂ”ppe ja nutika nĂ€gemise jaoks.
- Proovisime kahte mudelit â ResNet50, Yolo.
- Koodi kirjutasime loomulikult Pythonis.
Meil oli 11000 fotot, kuid nende seas osutus peaaegu 3/4 prĂŒgi. JÀÀnud piltides olid erinevad, sobimatud nurgad. LĂ”puks valisime vĂ€lja valmis mudeli (mis lihtsalt oskab pitsat leida) ja selle abil eemaldasime kĂ”ige halvemad. SeejĂ€rel, pildi nimetuses oli pitsanimi - nii korraldasime need kaustadesse, kuid selgus, et nimed ei lange kokku tegelikkusega ja tuli juba kĂ€sitsi puhastada. LĂ”puks jĂ€i umbes 500-600 fotot, mĂ”istetavalt on see tĂŒhine kogus, kuid siiski oli seda piisavalt, et 10 pitsat ĂŒksteisest eristada.
Ketta treenimiseks kasutasime Azure'is odavaimat virtuaalmasinat NVIDIA Tesla K80-l. Sellel treenisime 100 ajast, kuid oli selge, et vĂ”rk oli juba pĂ€rast 50 ajast kĂŒllastunud, kuna andmestik oli liiga vĂ€ike.
Tegelikult on kogu probleem hea andmete puudumine.

Me, vĂ”ib-olla, segasime natuke termineid, kuid tuleb arvesse vĂ”tta, et meil pole ĂŒldse kogemust kĂ”igi nende asjadega töötamisel.
GUI for NOOBS (pitsade tellimise konsool)
Misha Kumachyov (), Zhena Bikkinin, Zhena Vasiliev
Me olime valmis loonud konsooli rakenduse prototĂŒĂŒbi, mille abil saab tellida pitsat terminali vĂ”i kĂ€surea kaudu, vĂ”i isegi integreerida selle deploy pipeline'i, et edukal vĂ€ljalaskmisel tuua pitsat kontorisse.

Töö jagunes mitmeks osaks: uurisime, kuidas meie API mobiilirakendustele toimib, ja viisime kokku oma CLI kasutades ja seadistasime loodud paketi avaldamise. Viimase ĂŒlesandega seotud mĂ”ned ebameeldivad minutid hakathon'i lĂ”pus. KĂ”ik töötas meil kohapeal ning isegi vanad avaldatud versioonid töötasid, kuid uued (kus oli lisatud rohkem Ă€gedaid funktsioone ja emotikone) ei hakanud tööle. Me kulutasime umbes 40 minutit, et mĂ”ista, mis valesti lĂ€ks, kuid lĂ”puks hakkas kĂ”ik maagiliselt ise töötama).
Meie maksimaalsed eesmĂ€rgid hakathon'iks olid tĂ”eline pitsatellimus meie CLI kaudu. Testisime seda kĂŒmneid kordi katse keskkonnas, kuid mul olid siiski kĂ€ed vĂ€risevad, kui ma tellimusi tootmisesse sisestasin.

KokkuvĂ”ttes â me saime sellega hakkama!

CourierGo
Anton BruĆŸmelĂ«v (autor), Vanja Zverevi, Gleb Lesnikov (), Andrej Sarafanov
VÔtsime inspiratsiooni "Kuriiri rakendusest".
Eellugu ettevalmistusest.Alguses mÔtlesin, millised funktsioonid vÔiks rakenduses olla? Tekkis selline funktsioonide nimekiri:
- Rakendus logib sisse kohaletoimetamise kassasse koodi abil.
- Rakenduses on kohe nÀhtavad saadaval olevad tellimused ja tellimused, mida tuleb vÔtta.
- Kuriir mÀrgib tellimuse ja vÔtab selle sÔiduks.
- Kuriirile kuvatakse arvutatud aeg ja kas ta jÔuab kohale vÔi mitte.
- Klient nÀeb, et kuriir on teele asunud.
- Kliendile hakkab kuvatakse kuriiri asukoht kaardil ja arvutatud aeg.
- Kuriir saab rakendusest kirjutada kliendile vestluses.
- Klient saab rakendusest kirjutada kuriirile vestluses.
- Viie minuti jooksul enne saabumist saab klient sÔnumi, et kuriir on lÀhedal, olge valmis.
- Kuriir mÀrgib rakenduses, et ta on kohal ja ootab.
- Kuriir helistab rakendusest ĂŒhe klikkiga ja teatab, et (tuleb, on lĂ€henemas jne).
- Klient aktsepteerib tellimuse ja sisestab rakendusest vÔi SMS-iga saadud PIN-koodi, et kinnitada kohaletoimetamist (nagu allkiri). Et kuriir ei saaks kohaletoimetamist enne tÀhtaega lÔpetada, kui viibib.
- Tellimus mĂ€rgitakse sĂŒsteemis kohaletoimetatuks.
Lisaks paar alternatiivset stsenaariumi:
- Kuller saab tellimuse mÀrgata kui mitte kohale toimetatud ning valida pÔhjuse.
- Kuller vĂ”ib hilinemise korral ĂŒhe nupuvajutusega saata elektroonilise sertifikaadi SMS-i kaudu. VĂ”i sertifikaat saadetakse automaatselt, kui tarne tĂ€htaega ei tĂ€ideta.
Tunde perspektiivsuse ja projekti vajalikkusest laadis kindlasti energiat.
JÀrgmisel pÀeval kÀisime meeskonnaga lÔunal ja arutasime, milline vÔiks olla rakenduse minimaalne funktsionaalsus.
Tulemuseks tekkis jÀrgmine nimekiri asjadest, mida hackathonil pidime Àra tegema:
- Logi sisse kohaletoimetamise kassasse.
- Kuva praegune asukoht.
- Saata andmed vÀlishaudele (koordinaadid, tellimus vÔetud, tellimus toimetatud).
- Saada andmed vÀlishaudele (kulleri praegused tellimused).
- Saada teade, et tellimus on vÔetud toimetamiseks/toimetatud.
- Kuva kulleri praegune asukoht kaardil veebisaidil.
PĂ”hitöö, nagu tundus, seisnes tagaplaani loomises, rakenduse endi (pĂ€rast arutelusid valisime rakenduse arendamiseks ReactNative, tĂ€psemalt ĂŒmber selle â , mis ei vaja kirjutada natiivset koodi). Backend'i osas oli alguses lootus Vanya Zverevi peale, kes oli meie teenuse ja k8s'i malli osas kogenud (mida ta endale ka vĂ”ttis). ReactNative'i katsuda hakkasime mina ja Andrei Sarafanov.
Otsustasin kohe proovida luua töötavat repot projekti jaoks. Kell 12 öösel sattusin sellele, et ReactNative'is töötab geolokatsioon taustal halvasti, kui ei kirjuta natiivset koodi, ja olin pisut frustreeritud. Siis mÔistsin, et loen mitte expo.io raamistikku, vaid ReactNative'i dokumentatsiooni. LÔpuks sain Ôhtuks juba aru, kuidas saada expo.io kaudu praegust asukohta ja joonistada eraldi ekraanid (nt sisselogimise, tellimuse kuvamiseks jne).

Hommikul hackathon'il meelitasime Gleb'i oma ĂŒlipotentsiaalsesse projekti. Kiirelt koostasime plaani, mida teha.

Tehtud viga, kui proovisime projekti malliga suhtlust korraldada mitte HTTP kaudu, vaid GRPC kaudu, kuna keegi ei osanud JavaScripti jaoks GRPC-klienti kokku panna. LĂ”puks, kulutades sellele umbes poolteist tundi, loobusime sellest ideest. Selle tĂ”ttu asusid poisid ka backendis valmis GRPC-serveri ĂŒmber tegema WebApi peale. Poolteise tunni pĂ€rast saime lĂ”puks rakenduse suhtlemise backendiga seadistatud, imet. Kuid sel ajal lĂ”petas Gleb peaaegu k8s-is deploy'i ja lisaks automaatse deploy'i masterisse commitide pĂ”hjal. đ
Andmehoidjana valisime MySQL, et vÀhemalt andmebaasi osas ei riskiks (olid mÔtted CosmosDb peale).

KokkuvÔttes:
- Realisime kohalike koordinaatide salvestamise kullerist rakenduses andmebaasi.
- Lisatud on RabbitMQ ja tellitud teated kulleri tellimuse vÔtmise kohta, et kuvada tellimus kohe rakenduses kullerile.
- Alustasime tellimuse kohaletoimetamise aja salvestamist andmebaasi, pĂ€rast seda kui kuller vajutas rakenduses nuppu. Ei jĂ”udnud lisada sĂŒndmuste edastamist tagasi Rabbiti, et tellimus on kohaletoimetatud.
- Tehtud on kaartide kuvamine lehe currentorder peal, kus on kuvatud kulleri praegune asukoht. Kuid see funktsionaalsus jÀi veidi poolikuks, kuna keskkonnas ei Ônnestunud CORS-i seadistada, et saada koordinaate meie uuest teenusest.
M87
Roma Bukin, Gosha Polevoy (), Artyom Trofimushkin
Soovisime rakendada OpenID Connect pakkujat, kuna hetkel kasutame enda arendatud autentimise protokolli, mis toob kaasa mitmeid raskusi: kohandatud klienditeegid, ebamugav koostöö vÀliste partneritega ja vÔimalikud turvaprobleemid (ikka on OAuth2.0 ja OpenID Connect standardse rakenduse puhul ohutud, meie lahenduse osas pole ma kindel).

Oleme loonud eraldi teenuse, mis jĂ€ljendab isikuandmete salvestamisteenust, et luua vĂ€ike Country-Agnostic autentimise teenuse mudel, mis kĂ€sitleks isikuandmeid eraldi teenuses (see looks tulevikus vĂ”imaluse luua ĂŒks teenus, mille abil saaks logida sisse mis tahes riigis ning samal ajal vastata GDPR-ile ja teistele seadustele). Selle osa tegime nagu teenusepakkuja ja seostasime need edukalt. Edasi pidi olema loodud API, mis oleks kaitstud teenusepakkuja vĂ€ljastatud tokenitega, toetama nende introspektsiooni teenusepakkuja kaudu ja edastama kaitstud andmeid, kui pĂ€ring vastas autoriseerimise poliitikatele (kontrollime, et kasutaja on autentitud Bearer skeemi jĂ€rgi, tema tokenis on mÀÀratud ulatus ja kasutajal on luba, mis lubab kutse tegemist). See osa tehti samuti Ă€ra. Viimaseks komponendiks oli JavaScripti klient, kellele vĂ€ljastati token, millega ta kutsus esile kaitstud API. Seda osa me teha ei jĂ”udnud. See tĂ€hendab, et kogu funktsionaalne osa oli valmis, kuid esikĂŒlg, et demonstreerida kogu sĂŒsteemi toimimist, ei olnud valmis.
E-E-E (mÀng)
Dima AfontĆĄenko, Sasha Konovalov
Loome vĂ€ikse mĂ€ngu, kus sinised kĂ€ed viskavad viili pitsale. Kui viskad viili valesti, ilmub ekraanile kurb tekst âTagasi lĂŒkatudâ, ja kui viil on Ă”igesti visatud, siis kuulete juhuslikku fakti pitsa kohta.

Soovisime teha teise taseme tomatite viskamiseks, aga ei jÔudnud.

LĂŒhike jĂ€tk: kes vĂ”itis?
Enne hackathonit rÀÀkisime noortega ja kĂŒsisin, millist auhinda nad sooviksid saada, kui nad vĂ”idavad. Selgus, et kĂ”ige vÀÀrtuslikum auhind oleks âtee produktsiooniâ.

Seega oodake varsti meilt mÀngu, kus kÀed viskavad pepperoni pitsale.
Kuidas tĂ€helepanelik lugeja on mĂ€rganud, vĂ”itis meeskond âE-E-E (mĂ€ng)â. Palju Ă”nne neile!
Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. , palun.
Milline projekt meeldis teile kÔige rohkem?
Oleg LŃrnigin (masinĂ”pe)
GUI for NOOBS
CourierGo
M87
E-E-E
HÀÀletas 5 kasutajat. 3 kasutajat eemaldasid end.
Allikas: habr.com
