Koding–pizza

Hej, Habr. Vi genomförde spontant vÄr första interna hackathon. Jag ville dela med mig av mina smÀrtor och insikter om förberedelserna under tvÄ veckor, samt de projekt som kom till stÄnd.

Koding–pizza

TrÄkiga delen för dem som Àr intresserade av marknadsföring

Jag börjar med en liten historia.

Början av april. PÄ vÄrt kontor pÄgÄr den första hackathonen för MskDotNet Community. Slaget om Tatooine Àr i full gÄng, i vÄr galax den hÀr gÄngen. Lördag. 20 lag. Pizza. Allt Àr mycket gemytligt (bevis). En uppblÄsbar R2-D2 syns i rummet. Lag skriver de mest korrekta algoritmerna för att klara av det farligaste loppet pÄ kartan. Vi skjuter pÄ starten för de första loppen. Kakor och kaffe rÀddar oss. Vi, arrangörerna, trodde att mÄnga skulle gÄ hem efter lunch pÄ lördagen. Men nej. 12 timmar kodning bakom oss. Finalen. NÄgot faller bort, nÄgot startar inte. Men alla Àr glada. VÄrt lag vinner. Vi Àr glada dubbelt.

Jag delar glÀdjen i Slack och fÄr en idé: "Vi mÄste göra vÄr egen hackathon". Jag skriver till vÄr CTO Sasja. Tystnad.

Morgon. Jag dricker kaffe pÄ kontoret. Jag ser Sasja nÀrma sig bakifrÄn. "Liza, det hÀr Àr utmÀrkt! Vi har precis den 21 april en viktig datum. LÄt oss göra det!" Vad!? SÄ snabbt? Va? Jag mÄste flyga till Syktyvkar för praktik i mitten av april. Men skit i det! LÄt oss köra.

TvĂ„ veckor kvar. Jag har aldrig varit ensam arrangör av en hackathon. Även om det Ă€r en intern. Jag lĂ€ser artiklar om det. Hep. Det krĂ€vs flera mĂ„nader. Det krĂ€vs flera personer. Man mĂ„ste tĂ€nka pĂ„ merch, priser, förutsĂ€ttningar, schema, intressera, förstĂ„ syftet, budgetar. Kanske till och med grĂ€va i livets mening. Jag kommer definitivt inte att hinna. Och medan du lĂ€ste och förberedde dig har redan en vecka gĂ„tt. Det Ă€r hög tid att sluta lĂ€sa artiklar och börja göra nĂ„got.

HÀr Àr vÄr checklist för att arrangera en intern hackathon pÄ en vecka

  • Plan: sĂ€tt dig lugnt ner och skriv en lista över vad som mĂ„ste göras för hackathonen. 30 minuter.
  • Uppgift: deltagarna föreslĂ„r sjĂ€lva och vĂ€ljer projekt de vill skapa i Google Sheets. Bakgrundsuppgift, 2 timmar.
  • Schema: skriver snabbt en kort tidsplan med hĂ€nsyn till 3 pauser och finalen. 20 minuter.
  • Kommandon: publicera meddelandet om hackathonen med schemat frĂ„n CTO i IT-kanaler i Slack/e-post/etc och skapa en separat kanal för hackathonen. I den delar alla upp sig i lag, och de som Ă€r osĂ€kra gör det inom de första 5 minuterna av hackathonen. Bakgrundsuppgift, 2 timmar.
  • Fördelar: du kommer pĂ„ merch med tvĂ„ utvecklare, ger det till designern för illustration, fĂ„r det klart. Bakgrundsuppgift, 3 dagar.
  • Hackathon: du kommer till kontoret, koordinerar alla i början, sysslar med dina grejer, lĂ€ser Reddit, med ett viktigt uttryck meddelar du varje paus om ny pizza, fotograferar solnedgĂ„ngen, annonserar finalen, röstar tillsammans och vĂ€ljer vinnaren. 1 dag.
  • Under stjĂ€rnorna: sjĂ€lvklart tĂ€nker du hela tiden pĂ„ att allt ska gĂ„ bra. SjĂ€lvklart fĂ„r inte alla se ditt meddelande och med vissa Ă€r det bĂ€ttre att prata personligen. SjĂ€lvklart, om nĂ„gon hjĂ€lper dig, blir allt dubbelt sĂ„ enkelt (jag fick fantastisk hjĂ€lp av Alena).

Mindre trÄkig del om hackathonets datum

Varför den 21 april? Denna dag Àr viktig för oss. Exakt ett Är sedan, den 21 april, kollapsade vi under belastning under de första helgerna efter starten av den Federala Reklamekampanjen. Dagen efter, pÄ söndagen, var vÄrt team pÄ jobbet frÄn klockan 8 pÄ morgonen. DÄ skapade vi en Trello-tavla som hette sundayhackathon och veckan av 12 timmars skiftarbete började. Situationen var sÄ kritisk att vi inte ens hade tid att Àta och andra team matade oss.

Koding–pizza

En mer detaljerad berÀttelse kan du lÀsa pÄ Fjodor Ovtsjinnikovs sida (vÄr CEO). Sedan dess har vi förÀndrat mycket, men datumet kommer vi definitivt inte att glömma.

I Är bestÀmde vi oss för att detta evenemang förtjÀnar att bli ihÄgkommet och i bÀsta tradition arrangerade vi det första interna hackathonet i Dodo-historien som pÄgick i 10 timmar.

Den mest spÀnnande delen om hackathonprojekten

Disclaimer: alla beskrivningar skrevs av killarna sjÀlva, sÄ textens författarskap Àr inte mitt.

Oleg Learning (maskininlÀrning)

Dima Kochnev, Sasha Andronov (@alexandronov)

Vi ville skapa ett neuronnĂ€t som kunde avgöra vilken pizza som fanns pĂ„ fotot utan nĂ„gra förkunskaper. Slutresultatet blev en vĂ€ldigt enkel och leksaksliknande – den kĂ€nner igen 10 olika pizzor, vi fick en ungefĂ€rlig förstĂ„else för hur allt fungerar, sĂ„ lĂ„ngt det Ă€r möjligt pĂ„ en dag (~10 timmar).

Koding–pizza

Specifikt förstod vi att industrin har nÄtt en nivÄ dÀr en vanlig utvecklare kan ta fÀrdiga bibliotek, lÀsa dokumentationen och trÀna sitt neuronnÀt utan djupgÄende Àmneskunskaper. Och det fungerar tillrÀckligt bra för att lösa verkliga problem.

Verktygen som anvÀndes:

  • imageai — ett bekvĂ€mt och enkelt bibliotek för arbete med maskininlĂ€rning och datorseende.
  • Vi testade tvĂ„ modeller – ResNet50, Yolo.
  • Koden skrevs, förstĂ„s, i Python.

Vi hade 11000 bilder, men bland dem visade sig nĂ€stan 3/4 vara skrĂ€p, och bland de Ă„terstĂ„ende var det olika, olĂ€mpliga vinklar. SĂ„ smĂ„ningom anvĂ€nde vi en fĂ€rdig modell (som bara kan hitta pizza) och med dess hjĂ€lp sorterade vi ut det mest usla. Dessutom, i bildens namn fanns namnet pĂ„ pizzan — sĂ„ vi delade upp dem i mappar, men det visade sig att namnen inte överensstĂ€mde med verkligheten och hĂ€r fick vi hĂ„lla pĂ„ och rensa för hand. I slutĂ€ndan Ă„terstod cirka 500-600 bilder, det Ă€r uppenbart att detta Ă€r en försvinnande liten mĂ€ngd, men Ă€ndĂ„ var det tillrĂ€ckligt för att sĂ€rskilja 10 pizzor frĂ„n varandra.

För att trÀna nÀtverket anvÀnde vi den billigaste virtuella maskinen i Azure pÄ NVIDIA Tesla K80. Vi trÀnade den i 100 epoker, men det var tydligt att nÀtverket översvÀmmat redan efter 50 epoker, pÄ grund av att datasetet var litet.

Problemet ligger helt enkelt i bristen pÄ bra data.

Koding–pizza

Vi kanske blandade ihop termerna lite, men man mÄste ta hÀnsyn till att vi överhuvudtaget inte har nÄgon erfarenhet av att arbeta med allt detta.

GUI för NOOBS (terminal för att bestÀlla pizza)

Misha Kumachev (Ceridan), Zhenya Bikinin, Zhenya Vasiliev

Vi byggde en prototyp av en konsolapplikation för nördar, som gör att man kan bestÀlla pizza via terminalen eller kommandoraden, eller till och med integrera den i deploy-pipelinen och vid framgÄngsrik release leverera pizza till kontoret.

Koding–pizza

Arbetet delades upp i flera delar: vi hade problem med att förstÄ hur vÄr API för mobilappar var uppbyggd, vi samlade vÄrt eget CLI med hjÀlp av oclif och konfigurerade publiceringen av vÄrt skapade paket. Den senaste uppgiften var relaterad till nÄgra obehagliga minuter nÀra slutet av hackathonet. Allt fungerade lokalt och till och med Àldre publicerade versioner av paketet fungerade, men de nya (dÀr fler coola funktioner och emojis lades till) ville inte fungera. Vi spenderade ungefÀr 40 minuter för att förstÄ vad som hade gÄtt fel, men till slut fungerade allt magiskt av sig sjÀlv).

VÄrt maxmÄl för hackathonet var att göra en verklig pizzaorder till kontoret via vÄrt CLI. Vi testade det flera gÄnger pÄ testservern, men jag var fortfarande nervös nÀr jag skrev in kommandon pÄ produkten.

Koding–pizza

Som resultat – vi gjorde det faktiskt!

Koding–pizza

CourierGo

Anton Bruzhmelëv (författare), Vanya Zverev, Gleb Lesnikov (entropy), Andrey Sarafanov

Vi tog idén "App för kuriren".

Bakgrundshistorien om förberedelserna.Jag började med att tÀnka pÄ vilka funktioner som kan finnas i appen? Det blev ungefÀr en sÄdan lista med funktioner:

  • Appen loggar in i leveranssystemet med en kod.
  • I appen syns omedelbart tillgĂ€ngliga bestĂ€llningar, de bestĂ€llningar som mĂ„ste hĂ€mtas.
  • Kuriren markerar bestĂ€llningen och tar den med pĂ„ resan.
  • Han fĂ„r se berĂ€knad tid och om han hinner eller inte.
  • Kunden ser att kuriren har gett sig av.
  • Kunden börjar se kurirens position pĂ„ kartan och berĂ€knad tid.
  • Kuriren kan skriva till kunden i chatten frĂ„n appen.
  • Kunden kan skriva till kuriren i chatten frĂ„n appen.
  • Fem minuter innan ankomst fĂ„r kunden ett meddelande att kuriren Ă€r nĂ€ra, var beredd.
  • Kuriren markerar i appen att han har anlĂ€nt och vĂ€ntar.
  • Kuriren kan ringa frĂ„n appen med ett klick och informera att (han kommit, Ă€r pĂ„ vĂ€g, etc.)
  • Kunden accepterar bestĂ€llningen och anger pin-koden frĂ„n appen eller SMS för att bekrĂ€fta leveransen. (som ett digitalt kvitto) SĂ„ att kuriren inte kan avsluta leveransen i förvĂ€g om han Ă€r sen.
  • BestĂ€llningen markeras som levererad i systemet.

Plus ett par alternativa scenarier:

  • Kuriren kan markera bestĂ€llningen som ej levererad och vĂ€lja anledning.
  • Kuriren kan, vid försening, skicka ett elektroniskt certifikat via SMS med ett klick. Eller sĂ„ kommer certifikatet automatiskt vid överskridande av leveranstiden.

KĂ€nslan av potential och behovet av detta projekt gav verkligen energi.

NÀsta dag gick vi med teamet pÄ lunch och diskuterade hur den minimala funktionen av appen skulle se ut.

Resultatet blev följande lista över vad som skulle göras under hackathonet:

  • Inloggning i leveranssystemet.
  • Visa aktuell position.
  • Skicka data till extern API (koordinater, plockade bestĂ€llningar, levererade bestĂ€llningar).
  • HĂ€mta data frĂ„n extern API (aktuella bestĂ€llningar för kuriren).
  • Skicka en hĂ€ndelse om att en bestĂ€llning har tagits för leverans/levert.
  • Visa kurirens aktuella position pĂ„ kartan pĂ„ webbplatsen.

Huvudarbetet, som jag sĂ„g det, skulle vara att skapa backend, sjĂ€lva appen (efter diskussioner valde vi ReactNative för utveckling av appen, nĂ€rmare bestĂ€mt ett paket ovanför det — expo.io, vilket gör att man nĂ€stan inte behöver skriva nĂ„gon egen kod). NĂ€r det gĂ€ller backend fanns det frĂ„n början förhoppningar pĂ„ Vanya Zverev, som Ă€r erfaren i arbetet med vĂ„r tjĂ€nstmall och k8s (det arbete som han tog pĂ„ sig). ReactNative testade jag och Andrei Sarafanov.

Jag beslutade mig för att försöka skapa ett arbetsrepository för sjÀlva projektet direkt. Vid midnatt stötte jag pÄ problemet att geolokalisering fungerar dÄligt i bakgrunden i ReactNative utan att skriva nativ kod, vilket gjorde mig lite frustrerad. Men jag lugnade mig nÀr jag insÄg att jag lÀste dokumentationen för expo.io-ramverket istÀllet för ReactNative. I slutet av kvÀllen förstod jag hur jag skulle fÄ den aktuella positionen i expo.io och rita separata skÀrmar (för inloggning, visning av bestÀllningar osv.).

Koding–pizza

PÄ morgonen pÄ hackathonet drogs Gleb in i deras superlovande projekt. De skissade snabbt upp en plan för vad som behövde göras.

Koding–pizza

Vi gjorde ett misstag nĂ€r vi, enligt projektmallen, försökte kommunicera inte via HTTP utan via GRPC, eftersom ingen visste hur man skulle bygga en GRPC-klient för JavaScript. Till slut, efter att ha lagt cirka en och en halv timme pĂ„ det, övergav vi den idĂ©n. PĂ„ grund av detta började killarna i backend renovera den fĂ€rdiga servern frĂ„n GRPC till WebApi. Efter en halvtimme lyckades vi Ă€ntligen stĂ€lla in kommunikationen mellan applikationen och backend, vilket var en otrolig lĂ€ttnad. Men under samma tid höll Gleb pĂ„ att fĂ„ klar sin deployment till k8s, plus autodeployment vid commit till master. 🙂

Som lagring valde vi MySQL för att inte riskera med databasen (vi hade tankar om CosmosDb).

Koding–pizza

Slutsatsen:

  • Vi implementerade sparandet av kurirens aktuella koordinater frĂ„n applikationen till databasen.
  • Vi kopplade in RabbitMQ och anmĂ€lde oss till meddelanden om att kuriren tagit emot en bestĂ€llning, för att omedelbart visa bestĂ€llningen för kuriren i applikationen.
  • Vi började spara tiden för leverans av bestĂ€llningen i vĂ„r databas, efter att kuriren tryckt pĂ„ knappen i applikationen. Vi hann inte lĂ€gga till att skicka tillbaka hĂ€ndelsen till RabbitMQ om att bestĂ€llningen var levererad.
  • Jag gjorde en kartvisning pĂ„ sidan currentorder pĂ„ webbplatsen med kurirens aktuella position. Men denna funktionalitet förblev nĂ„got ofullstĂ€ndig, eftersom vi pĂ„ miljön inte lyckades stĂ€lla in CORS för att hĂ€mta koordinater frĂ„n vĂ„r nya tjĂ€nst.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Vi ville implementera en OpenID Connect-leverantör, eftersom vi för nÀrvarande anvÀnder ett autentiseringsprotokoll av egen utveckling, vilket skapar en rad svÄrigheter: skrÀddarsydda klientbibliotek, besvÀrlig hantering frÄn externa partners och eventuella sÀkerhetsproblem (Àven om OAuth2.0 och OpenID Connect i sin standardimplementation anses vara sÀkra, Àr jag osÀker pÄ vÄr lösning).

Koding–pizza

Vi skapade en separat tjÀnst som emulerar en tjÀnst för lagring av personuppgifter, för att skapa en liten modell av en land-agnostisk autentiseringstjÀnst, som skulle hÀmta personuppgifter frÄn en separat tjÀnst (detta skulle i framtiden möjliggöra att ha en tjÀnst med vilken man kan logga in med ett konto i vilket land som helst, samtidigt som man följer GDPR och andra lagar). Denna del byggde vi, liksom leverantören, och kopplade dem framgÄngsrikt samman. NÀsta steg var att göra ett API som skulle skyddas med tokens som tillhandahÄlls av leverantören, stödja deras introspektion via leverantören och ge ut skyddade data om förfrÄgan uppfyllde behörighetsvillkoren (vi verifierar att anvÀndaren Àr autentiserad enligt Bearer-schemat, att deras token innehÄller en specifik scope + att anvÀndaren har tillstÄndet som tillÄter anropet). Denna del genomfördes ocksÄ. Den sista komponenten var en JavaScript-klient, som skulle fÄ en token, med hjÀlp av vilken den skulle anropa det skyddade API:et. Denna del hann vi inte klart med. Det vill sÀga, hela den funktionella delen var förberedd, men den front-end del som behövdes för att demonstrera systemets funktionalitet var inte klar.

E-E-E (spel)

Dima Afontjenko, Sasha Konovalov

Vi gjorde en mini-lek pÄ Unity dÀr snabba hÀnder slÀnger korv pÄ pizzan. Om du slÀnger korven felaktigt visas en sorglig text pÄ skÀrmen "Ogiltig", men om hela korven slÀngs korrekt dyker en slumpmÀssig faktum om pizza upp.

Koding–pizza

Vi ville göra en andra nivÄ dÀr man slÀnger tomater, men hann inte.

Koding–pizza

Kort fortsÀttning: vem vann?

Innan hackathonet pratade vi med killarna och jag frÄgade vad för pris de skulle vilja ha om de vann. Det visade sig att det mest vÀrdefulla priset skulle vara "vÀgen till produktion".

Koding–pizza

DÀrför kan ni snart förvÀnta er en tillkÀnnagivande av spelet med kontrollen som kastar pepperoni pÄ pizzan.

Som uppmÀrksamma lÀsare kanske har lagt mÀrke till, vann laget "E-E-E (spelet)". Grattis till grabbarna!

Endast registrerade anvÀndare kan delta i omröstningen. Logga in, tack.

Vilket projekt gillade du mest?

  • Oleg Learning (maskininlĂ€rning)

  • GUI för NOOBS

  • CourierGo

  • M87

  • E-E-E

5 anvÀndare röstade. 3 anvÀndare avstod.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster