Tere, Habr. Me korraldasime spontaanselt oma esimese sisemise hackathoni. Otsustasin jagada teiega oma muresid ja jÀreldusi selle ettevalmistusest kahe nÀdala jooksul ning ka projekte, mis vÀlja tulid.

Igav osa neile, kes huvituvad turundusest
Alustan vÀikese looga.
Aprilli algus. Meie kontoris toimub MskDotNet Community esimene hackathon. Lahing Tatooine'i nimel kĂ€ib, seekord meie galaktikas. LaupĂ€ev. 20 meeskonda. Pitsa. KĂ”ik on vĂ€ga soe (). Inflatable R2-D2 on saalis siluett. Meeskonnad kirjutavad kĂ”ige Ă”igemad algoritmid, et lĂ€bida kĂ”ige ohtlikum vĂ”idusĂ”it kaardil. LĂ”uatame esimesi stardivĂ”istlusi. KĂŒpsised ja kohvi pÀÀstavad meid. Ootasime korraldajatega, et laupĂ€eval lahkub palju pĂ€rastlĂ”unal. Aga ei. 12 tundi kodeerimist on möödas. Finaal. Midagi kukub vĂ€lja, midagi ei kĂ€ivitu. Aga kĂ”ik on Ă”nnelikud. Meie meeskond vĂ”idab. Me oleme kahekordselt Ă”nnelikud.
Jagame rÔÔmu Slackis ja pÀhe tuleb idee: "Peame korraldama oma hackathoni". Kirjutan meie CTO-le Sashale. Vaikus.
Hommik. Joon kontoris kohvi. NÀen, et Sasha lÀhestikku tuleb. "Liza, see on suurepÀrane! Meil on 21. aprillil oluline kuupÀev. Teeme!" Mis iganes!? Nii kiiresti? Mida? Mul on vaja aprilli keskel Syktyvkarisse praktikale lennata. Ja las olla! Teeme.
JÀÀnud on 2 nĂ€dalat. Ma pole kunagi olnud hackathoni ainuorganisaator. Olgu see sisemine. Loe selle kohta artikleid. Kohutav. Vajalik on mitu kuud. Vajalik on mitu inimest. Vajalik on vĂ€lja mĂ”elda sĂ€rk, auhinnad, tingimused, ajakava, huvi pakkuda, eesmĂ€rk mĂ”ista, eelarved. VĂ”ib-olla peab isegi elu mĂ”tte ĂŒle jĂ€rele mĂ”tlema. Ma kindlasti ei jĂ”ua. Ja samal ajal, kui sa lugesid ja valmistasid end ette, on juba nĂ€dal möödas. Parim aeg artiklitest loobuda ja midagi ette vĂ”tta.
Siin on meie nÀdalase sisemise hackathoni kontrollnimekiri
- Plaani: rahulikult istud ja kirjutad nimekirja sellest, mida hackathoni jaoks teha tuleb. 30 minutit.
- Ălesanne: osalejad pakuvad ja valivad ise projektid, mida nad soovivad Google Sheetsis luua. TaustĂŒlesanne, 2 tundi.
- Ajakava: kirjutad pĂ”lve peal lĂŒhikese ajakava kolme pausiga ja finaaliga. 20 minutit.
- KĂ€sklused: avaldad hackathoni teadet ajakava kohta CTO-lt IT-kanalites Slackis/e-kirjas/jne ja lood eraldi kanali hackathoni jaoks. Seal jagunevad kĂ”ik meeskondadesse ja need, kes pole veel otsustanud, teevad seda hackathoni esimeses 5 minutis. TaustĂŒlesanne, 2 tundi.
- Bonused.: sa mÔtled vÀlja kaubamÀrgi koos kahe arendajaga, annad selle disainerile joonistamiseks ja saad valmis toote. Taustategevus, 3 pÀeva.
- HÀkathon: tuled kontorisse, koordineerid kÔiki alguses, tegeled oma asjadega, loed Redditi, teatad tÔsise nÀoga iga pausi ajal vÀrskest pitsast, pildistad loodust, kuulutad vÀlja finaali, hÀÀletame koos ja valime vÔitja. 1 pÀev.
- TÀhtede all: muidugi mÔtled pidevalt, et kÔik lÀheks hÀsti. Loomulikult ei nÀe kÔik sinu sÔnumit ja mÔnega on parem rÀÀkida isiklikult. Loomulikult, kui sul on keegi abiks, muutub kÔik kaks korda lihtsamaks (mind aitas imeline Aljona).
VÀhem igav osa hÀkatoni kuupÀeva kohta
Miks 21. aprill? See pĂ€ev on meie jaoks oluline. Just aasta tagasi, 21. aprillil, kukkusime koormuse all kokku esimestel nĂ€dalavahetustel pĂ€rast Föderaalse Reklaamikampaania algust. JĂ€rgmine pĂ€ev, pĂŒhapĂ€eval, oli meie meeskond tööl alates kella 8-st hommikul. Siis lĂ”ime Trellos laua sundayhackathon ja algas 12 tunni vahetustega töö nĂ€dal. Olukord oli nii kriitiline, et meil ei olnud aega isegi sĂŒĂŒa ja meid toitsid teiste meeskondade poisid.

Ăksikasjalikumat juttu saad lugeda (meie SEO). Sellest ajast alates oleme palju muutnud, kuid seda kuupĂ€eva ei unusta kindlasti.
Sel aastal otsustasime, et see sĂŒndmus vÀÀrib mĂ€lestamist ja korraldasime esmakordselt Dodo ajaloos sisemise hĂ€katoni, mis kestis 10 tundi.
KÔige vÀhem igav osa hÀkatoni projektidest
Vastutusest loobumine: kÔik kirjeldused on kirjutanud poisid ise, seega pole teksti autorlus minu enda.
Oleg Lörning (masinÔpe)
Dima Kohtnev, Sasha Andronov (@alexandronov)
Tahtsime teha nĂ€rvivĂ”rku, mis suudab tuvastada, milline pizza on pildil ilma igasuguste teadmisteta. Tulemuseks on vĂ€ga lihtne ja mĂ€nguline mudel â see tunnustab 10 erinevat pitsat, saime enam-vĂ€hem aru, kuidas kĂ”ik töötab, nii palju kui vĂ”imalik ĂŒhe pĂ€eva jooksul (~10 tundi).

EelkĂ”ige mĂ”istsime, et tööstus on jĂ”udnud tasemele, kus tavaline arendaja saab kasutada valmis teeke, lugeda dokumentatsiooni ja Ă”petada oma nĂ€rvivĂ”rku ilma sĂŒgavate teadmisteta, ning see töötab piisavalt hĂ€sti reaalse probleemide lahendamiseks.
Kasutatud tööriistad:
- â mugav ja lihtne teeg, millega töötada masinĂ”ppe ja arvutinĂ€gemisega.
- Proovisime kahte mudelit â ResNet50, Yolo.
- Kood kirjutati selgelt Pythonis.
Meil oli 11000 fotot, kuid neist peaaegu 3/4 osutusid prĂŒgi, ning ĂŒlejÀÀnud olid erinevates, sobimatutes nurkades. LĂ”puks kasutasime valmis mudelit (mis lihtsalt oskab leida pitsat) ja selle abil eraldasime kĂ”ige halvemad fotod. Edasi, kui fotol oli pitsanimi â jagasime need kaustadesse, kuid osutus, et nimed ei kattunud tegelikkusega ja tuli ise kĂ€sitsi puhastada. LĂ”puks jĂ€i umbes 500-600 fotot, mis on selgelt kĂŒllaltki vĂ€ike number, kuid sellest siiski piisab, et eristada 10 pitsat ĂŒksteisest.
Treeninguks kasutasime Azure'i kĂ”ige odavamat virtuaalset masinat NVIDIA Tesla K80-ga. Sellel treenisime 100 epohhi, kuid juba pĂ€rast 50 epohhi oli nĂ€ha, et vĂ”rk oli ĂŒlekoormatud, kuna andmestik oli vĂ€ike.
Esmalt â kogu probleem seisneb heade andmete puudumises.

VĂ”ib-olla me mĂ”ned terminid segamini ajasime, kuid tuleb arvestada, et meil ei ole ĂŒldse kogemust kĂ”igi nende asjadega.
GUI for NOOBS (kontrollimiseks pitsade tellimiseks)
Misha Kumachev (), Zhenya Bikkinin, Zhenya Vasiliev
Koondasime prototĂŒĂŒbi konsooli rakendusest geek'idele, mille abil saab tellida pitsat terminali vĂ”i kĂ€surea kaudu, vĂ”i isegi integreerida rakenduste juurutamise torusse ja edastada pitsat kontorisse pĂ€rast edukat vĂ€ljaandmist.

Töö jagunes mitmeks osaks: uurisime, kuidas meie API on loodud mobiilirakendustele, koostasime oma CLI abi ja seadistasime loodud paketi avaldamise. Viimase ĂŒlesandega seoses oli hackathon'i lĂ”pupoole mitu ebameeldivat minutit. KĂ”ik toimis meil kohalikult ja isegi vanad avaldatud versioonid paketist töötasid, kuid uued (millesse oli lisatud rohkem Ă€gedaid funktsioone ja emotikone) keeldusid töötamast. Kulutasime umbes 40 minutit, et aru saada, mis valesti lĂ€ks, kuid lĂ”puks töötas kĂ”ik maagiliselt ise.)
Meie maksimumprogramm hackathon'il oli tĂ”eline pitsade tellimine kontorisse meie CLI kaudu. Testisime kĂ”ik kĂŒmme korda katsetustel, kuid mul olid siiski kĂ€ed vĂ€risedes, kui ma produtsoonis kĂ€ske sisestasin.

KokkuvĂ”ttes â me tegime selle ikkagi Ă€ra!

CourierGo
Anton Bruzmelyov (autor), Vanja Zverevi, Gleb Lesnikov (), Andrei Sarafanov
VÔtsime idee «Kullerirakendus».
Eellugu ettevalmistusest.Alguses mÔtlesin, milliseid funktsioone vÔiks rakenduses olla. Tuli vÀlja umbes selline funktsionaalsuse loetelu:
- Rakendus siseneb kohaletoimetamise kassasse koodiga.
- Rakenduses on kohe nÀhtavad saadaval olevad tellimused ja tellimused, mida tuleks vÔtta.
- Kuller mÀrgib tellimuse ja vÔtab selle teele.
- Tal kuvatakse arvutatud aeg ja jÔuab ta kohale vÔi mitte.
- Kliendile nÀitab, et kuller on teel.
- Kliendile hakkab kuvatakse kulleri asukoht kaardil ja arvutatud aeg.
- Kuller saab rakenduse kaudu kliendile vestluses kirjutada.
- Klient saab rakenduse kaudu kullerile vestluses kirjutada.
- Viie minuti jooksul enne saabumist saadab klientidele sÔnumi, et kuller on lÀhedal, olge valmis.
- Kuller mÀrgib rakenduses, et ta on saabunud ja ootab.
- Kuller helistab rakendusest ĂŒhe klikiga ja teatab, et (tĂ”useb, on kohal jne).
- Klient kinnitab tellimuse ja sisestab rakendusest vÔi SMS-ist pin-koodi, et kinnitada tarnimist. (nagu allkiri) Et kuller ei saaks tarnimist enneaegselt lÔpetada, kui ta viibib hiljaks.
- Tellimus mĂ€rgitakse sĂŒsteemis tarnituks.
Lisaks paar alternatiivset stsenaariumi:
- Kuller saab tellimuse mÀrkida mitte-tarnituks ja valida pÔhjuse.
- Kuller, kui ta hilineb, saab ĂŒhe nupuvajutusega saata elektroonilise sertifikaadi SMS-iga. VĂ”i sertifikaat saadetakse automaatselt, kui tarnimise tĂ€htaega ei jĂ€rgita.
Projektist oli kindlasti tunda perspektiivi ja vajalikku tunnet.
JÀrgmisel pÀeval lÀksime meeskonnaga lÔunale ja arutasime, kuidas rakenduse minimaalne funktsionaalsus vÀlja nÀeb.
Kokku tuli jÀrgmine loetelu sellest, mida tuli hackathonil lÔpetada:
- Sisselogimine kohaletoimetamise kassasse.
- Kuvada praegune asukoht.
- Saata andmed vÀlisele API-le (koordinaadid, tellimuse vÔtmine, tellimuse toimetamine).
- Saada andmed vÀlisest API-st (kullerite praegused tellimused).
- Saata sĂŒndmus, et tellimus on vĂ”etud kohaletoimetamiseks / toimetatud.
- Kuvada kulleri praegune asukoht kaardil veebisaidil.
Peamine töö, nagu arvestati, pidi toimuma tagaplaani loomisel, rakenduse loomiseks (aruteludest valiti rakenduse arendamiseks ReactNative, tĂ€psemalt selle kohalduse jaoks â , vĂ”imaldades ĂŒldse mitte kirjutada nativet koodi). Backend'i plaanis oli algselt lootus Vanya Zverevi peale, kui kogenud meie teenuse ja k8s malliga töötaja (mille ta endale vĂ”ttis). ReactNative'iga hakkasime koos proovima mina ja Andrei Sarafanov.
Otsustasin proovida kohe luua tööalust repot projekti jaoks. Kell 12 öösel sattusin arusaamisele, et ReactNative'is ei tööta geolokatsioon taustal hÀsti, kui mitte kirjutada nativet koodi, natuke frustreerisin. Siis leevendus olukord, kui sain aru, et loen dokumentatsiooni mitte expo.io raamistiku, vaid ReactNative'i kohta. LÔpuks sain Ôhtuga selgeks, kuidas saada expo.io kaudu praegune asukoht ja joonistada eraldi ekraanid (logimise, tellimuse kuvamise jne jaoks).

Hommikul hackathon'il meelitasime Gleb'i oma ĂŒlivĂ€gevasse projekti. Kiiresti viskasime kokku plaani, mida teha on vaja.

Tehtud viga, kui pĂŒĂŒdsime projekti malliga teha suhtlust mitte HTTP kaudu, vaid GRPC kaudu, kuna keegi ei osanud GRPC klienti JavaScriptile kokku panna. LĂ”puks, kulutades sellele umbes poolteist tundi, loobusime sellest ideest. SeetĂ”ttu hakkasid inimesed backend'is juba valmis serverit GRPC'lta WebApi'le ĂŒmberehitama. Pool tunni pĂ€rast saime lĂ”puks seadistada rakenduse suhtlemise backendiga, oh imet. Kuid samal ajal töötas Gleb peaaegu juba k8s-is deploy lĂ”petamas, lisaks automaatne deploy commit'i jĂ€rgi masterisse. đ
SÀilitamiseks valisime MySQL, et mitte riskida vÀhemalt andmebaasiga (olid mÔtted CosmosDb kohta).

Tulemus:
- Rakendasime rakendusest kursori praeguste koordinaatide salvestamise andmebaasi.
- Lisainime RabbitMQ ja liitusime sÔnumitega, kui kuller vÔtab tellimuse, et kohe kuvada tellimus kullerile rakenduses.
- Alustasime enda andmebaasi salvestamise tellimuse kohaletoimetamise ajast, peale seda, kui kuller vajutas rakenduses nuppu. Ei saanud Ôigeaegselt lisada sÔnumi saatmist tagasi rabbit'i, et tellimus on kohaletoimetatud.
- Tehtud kaardi kuvamine currentorder lehe peal veebis koos kulleri praeguse asukohaga. Kuid see funktsioon jÀi veidi poolikuks, kuna keskkonnas ei Ônnestunud seadistada CORS'i, et saada koordinaate meie uuest teenusest.
M87
Roma Bukin, Gosha Polevoy (), Artyom Trofimushkin
Soovisime rakendada OpenID Connect pakkujat, kuna praegu kasutame oma arendatud autentimise protokolli, mis tekitab mitmeid raskusi: kohandatud klienditeegid, ebamugav koostöö vÀliste partneritega, vÔimalikud turvalisuse probleemid (kuigi OAuth2.0 ja OpenID Connect ideaalversioonis vÔib pidada turvaliseks, siis meie lahenduse osas ma ei ole kindel).

Oleme loonud eraldi teenuse, mis emuleerib isikuandmete salvestamise teenust, et luua vĂ€ike riigist sĂ”ltumatu autentimise pakkuja mudel, mis kĂŒsib isikuandmeid eraldi teenusest (see looks tulevikus vĂ”imaluse omada ĂŒhte teenust, millega saaks siseneda konto kaudu igas riigis, samal ajal jĂ€rgides GDPR-i ja muid seadusi). Selle osa tegime, nagu ka pakkuja, ja seostasime need omavahel. Edasi tuli luua API, mis oleks kaitstud pakkuja vĂ€ljastatud tokenitega, toetada nende introspektsiooni pakkuja kaudu ja anda vĂ€lja kaitstud andmeid, kui pĂ€ring vastab autendipoliitikale (kontrollime, et kasutaja on autentitud Bearer skeemi kaudu, tema tokenis on kindel ulatus + kasutajal endal on luba, mis lubab kutse teostamist). See osa oli samuti lĂ”pule viidud. Viimane komponent oli JavaScript klient, kellele vĂ€ljastatakse token, millega ta kutsuks vĂ€lja kaitstud API. Selle osa me valmis ei saanud. See tĂ€hendab, et kogu funktsionaalne osa oli valmis, kuid esipaneeli osa, et demonstreerida kogu sĂŒsteemi toimimist, ei olnud valmis.
E-E-E (mÀng)
Dima Afonchenko, Sasha Konovalov
Me tegime mini-mĂ€ngu Unitys, kus vilkad kĂ€ed viskavad vorsti pitsale. Kui sa viskad vorsti valesti, ilmub ekraanile kurb teade "Tagasi lĂŒkatud", ja kui kogu vorst on Ă”igesti visatud, ilmub juhuslik fakt pitsa kohta.

Soovisime teha teist taset tomatite viskamiseks, kuid ei jÔudnud.

LĂŒhike jĂ€tk: kes vĂ”itis?
Enne hackatoni rÀÀkisime noortega ja ma kĂŒsisin, millist preemiat nad tahaksid saada, kui vĂ”idavad. Selgus, et kĂ”ige vÀÀrtuslikum preemia oleks "tee tootmisse".

Seega oodake meielt peagi mÀngu reklaami, kus kÀed viskavad pitsa peale Piperroni.
Kuidas vÔis tÀhelepanelik lugeja mÀrgata, vÔitis meeskond «E-E-E (mÀng)». Palju Ônne, poisid!
Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. , palun.
Milline projekt teile rohkem meeldis?
Oleg Lörning (masinÔpe)
GUI NOOB-idele
CourierGo
M87
E-E-E
HÀÀletas 5 kasutajat. 3 kasutajat jÀid erapooletuks.
Allikas: habr.com
