Kodim-pizza

Hei, Habr. Vi holdt spontant vårt første interne hackathon. Jeg bestemte meg for å dele mine smerter og konklusjoner med å forberede meg på det om 2 uker, samt prosjektene som viste seg å være.

Kodim-pizza

Den kjedelige delen for de som er interessert i markedsføring

Jeg starter med en liten historie.

Begynnelsen av april. Det første MskDotNet Community hackathonet finner sted på kontoret vårt. Slaget ved Tatooine er i full gang i galaksen vår denne gangen. Lørdag. 20 lag. Pizza. Alt er veldig oppriktig (bevis). En oppblåsbar R2-D2 flyter rundt i hallen. Lagene skriver de mest korrekte algoritmene for å passere det farligste løpet på kartet. Vi flytter lanseringen av de første løpene. Kaker og kaffe er livreddere. Arrangørene og jeg forventet at mange skulle reise etter lunsj på lørdag. Men nei. 12 timer med koding bak. Finalen. Noe faller av, noe starter ikke. Men alle er fornøyde. Laget vårt vinner. Vi er dobbelt fornøyde.

Jeg deler gleden min i Slack, og ideen dukker opp: "Vi må gjøre vårt eget hackathon." Jeg skriver til vår bensinstasjon Sasha. Stillhet.

Morgen. Jeg drikker kaffe på kontoret. Jeg ser Sasha nærme seg bakfra. "Lisa, dette er flott! Vi har en viktig dato 21. april. La oss gjøre det!" WTF!? Så fort? EN? Hva? Jeg må fly til Syktyvkar på praksisplass i midten av april. Og til helvete med det! La oss.

2 uker igjen. Jeg har aldri vært den eneste arrangøren av et hackathon. La det være internt. Jeg leste artikler om dette emnet. Vanskelig. Det tar flere måneder. Det trengs flere personer. Du må tenke på varer, premier, betingelser, tidsplan, interesse, forstå målet, budsjetter. Eller kanskje til og med finne ut meningen med livet. Jeg kommer definitivt ikke til i tide. Og mens du leste og forberedte deg, hadde det allerede gått en uke. Det er på tide å glemme artiklene og begynne å gjøre noe.

Se vår sjekkliste for å holde et internt hackathon om 1 uke

  • plan: Du setter deg rolig ned og skriver en liste over hva som må gjøres til hackathon. 30 minutter.
  • Oppgave: Deltakerne foreslår og velger prosjektene de vil lage i Google Regneark. Bakgrunnsoppgave, 2 timer.
  • Rutetider: på kneet skriver du en kort oversikt over tid, tar hensyn til 3 pauser og finalen. 20 minutter.
  • kommandoer: publiser melding om hackathon med tidsplan fra bensinstasjonen i IT-kanaler i Slack/mail/etc og lag en egen kanal for hackathon. I den er alle delt inn i lag, og de som er usikre gjør dette i de første 5 minuttene av hackathon. Bakgrunnsoppgave, 2 timer.
  • Boller: du kommer opp med varer med to utviklere, gir det til designeren for gjengivelse og mottar det klart. Bakgrunnsoppgave, 3 dager.
  • Hackathon: du kommer til kontoret, koordinerer alle i begynnelsen, går i gang med virksomheten din, leser Reddit, kunngjør hver pause om fersk pizza, tar bilder av solnedgangen, kunngjør finalen, stem sammen og velg vinneren. 1 dag.
  • Under stjernen: Selvfølgelig tenker du hele tiden på at alt går bra. Selvfølgelig vil ikke alle se meldingen din, og det er bedre å snakke med noen personlig. Selvfølgelig, hvis noen hjelper deg, vil alt bli 2 ganger enklere (den fantastiske Alena hjalp meg).

Den mindre kjedelige delen om hackathon-datoen

Hvorfor 21. april? Denne dagen er viktig for oss. For nøyaktig et år siden, 21. april, ble vi under belastning den første helgen etter starten av den føderale reklamekampanjen. Dagen etter, søndag, var teamet vårt på jobb fra kl. Så laget vi et sundayhackathon-brett i Trello og en uke med skiftarbeid begynte, 8 timer om dagen. Situasjonen var så kritisk at vi ikke engang hadde tid til å spise, og vi ble matet av gutter fra andre lag.

Kodim-pizza

Du kan lese en mer detaljert historie på Fjodor Ovchinnikovs side (vår administrerende direktør). Siden den gang har vi forandret oss mye, men nå glemmer vi definitivt ikke datoen.

I år bestemte vi oss for at denne begivenheten var verdt å forevige i ettertidens minne, og i beste tradisjon arrangerte vi det første interne hackathonet i Dodo-historien, som varte i 10 timer.

Den kjedeligste delen om hackathon-prosjekter

Ansvarsfraskrivelse: alle beskrivelsene er skrevet av gutta selv, så forfatterskapet til teksten er ikke mitt.

Oleg Learning (maskinlæring)

Dima Kochnev, Sasha Andronov (@alexandronov)

De ønsket å lage et nevralt nettverk som ville bestemme hva slags pizza som er på et bilde uten kunnskap. Som et resultat laget vi en veldig enkel og leken - den gjenkjenner 10 pizzaer, vi fant omtrent ut hvordan alt fungerer, så langt som mulig på en dag (~10 timer).

Kodim-pizza

Spesielt innså vi at industrien har nådd et nivå der en vanlig utvikler kan ta ferdige biblioteker, lese dokumentasjonen og trene sitt nevrale nettverk uten dyp kunnskap om emnet. Og det vil fungere godt nok til å løse reelle problemer.

Verktøy som brukes:

  • imageai — et praktisk og enkelt bibliotek for arbeid med maskinlæring og datasyn.
  • Vi prøvde to modeller - ResNet50, Yolo.
  • Koden ble selvfølgelig skrevet i Python.

Vi hadde 11000 3 bilder, men nesten 4/500 av dem viste seg å være søppel, og resten hadde andre, upassende vinkler. Som et resultat tok vi en ferdig modell (som rett og slett vet hvordan man finner pizza) og med dens hjelp skilte vi søppelet. Deretter inkluderte tittelen på bildet navnet på pizzaen - så vi sorterte den i mapper, men det viste seg at navnene ikke falt sammen med virkeligheten, og vi måtte rydde opp med hendene. Til slutt var det ca 600-10 bilder igjen, det er tydelig at dette er en ubetydelig mengde, men likevel var dette nok til å skille XNUMX pizzaer fra hverandre.

For å trene rutenettet tok vi den billigste virtuelle maskinen i Azure på en NVIDIA Tesla K80. De trente på det i 100 epoker, men det var tydelig at nettverket var overmettet etter 50 epoker, på grunn av at det var et lite datasett.

Faktisk er hele problemet mangelen på gode data.

Kodim-pizza

Vi har kanskje forvirret begrepene litt, men vi må ta høyde for at vi overhodet ikke har erfaring med å jobbe med alle disse sakene.

GUI for NOOBS (konsoll for bestilling av pizza)

Misha Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Vi har satt sammen en prototype av en konsollapplikasjon for nerder, takket være den kan du bestille pizza via terminalen eller kommandolinjen, eller til og med integrere den i distribusjonsrørledningen og, etter vellykket utgivelse, levere pizza til kontoret.

Kodim-pizza

Arbeidet var delt inn i flere deler: vi fant ut hvordan API-en vår for mobilapplikasjoner fungerer, satte sammen vår egen CLI ved hjelp av oclif og konfigurerte publiseringen av pakken vi samlet inn. Den siste oppgaven innebar noen ubehagelige minutter mot slutten av hackathonet. Alt fungerte lokalt for oss, og til og med de gamle publiserte versjonene av pakken fungerte, men de nye (som la til flere kule funksjoner og uttrykksikoner) nektet å fungere. Vi brukte omtrent 40 minutter på å finne ut hva som gikk galt, men til slutt fungerte alt på magisk vis av seg selv).

Vårt maksimale program for hackathon var en ekte bestilling av pizza til kontoret gjennom vår CLI. Vi kjørte alt et dusin ganger på testbenken, men hendene mine skalv fortsatt da jeg la inn kommandoer i produksjonen.

Kodim-pizza

Som et resultat klarte vi det endelig!

Kodim-pizza

CourierGo

Anton Bruzhmelev (forfatter), Vanya Zverev, Gleb Lesnikov (entropi), Andrey Sarafanov

Vi tok ideen om en "App for Courier".

Bakgrunn om forberedelse.Til å begynne med lurte jeg på hva slags funksjoner som kunne være i applikasjonen? Følgende liste over funksjoner dukket opp:

  • Applikasjonen logger seg på leveringskassa med koden.
  • Applikasjonen viser umiddelbart tilgjengelige bestillinger og bestillinger som må tas.
  • Budet noterer bestillingen og tar den med på reisen.
  • Han får vist beregnet tid og om han er i tide eller ikke.
  • Viser klienten at kureren har gått.
  • Klienten begynner å bli vist kurerens punkt på kartet og estimert tid.
  • Kureren kan skrive til klienten i chat fra applikasjonen.
  • Klienten kan skrive til budet via chat fra applikasjonen.
  • Fem minutter før ankomst mottar klienten en melding om at kureren er nær, vær forberedt.
  • Budet noterer i søknaden at han har kommet og venter.
  • Kureren ringer fra applikasjonen med ett klikk og rapporterer at (stiger, har ankommet osv.)
  • Klienten aksepterer bestillingen og taster inn PIN-kode fra applikasjonen eller SMS for å bekrefte levering.(som signatur) Slik at kureren ikke kan fullføre leveringen på forhånd dersom han er forsinket.
  • Ordren merkes som levert i systemet.

Pluss et par alternative scenarier:

  • Budet kan merke bestillingen som ikke levert og velge årsak.
  • Hvis du er forsinket, kan budet utstede et elektronisk sertifikat via SMS med én knapp. Eller attesten kommer automatisk dersom leveringsfristen ikke overholdes.

Følelsen av løfte og nødvendighet av dette prosjektet var selvfølgelig energigivende.

Dagen etter dro vi til lunsj med teamet og diskuterte hvordan minimumsfunksjonaliteten til applikasjonen ville se ut.

Som et resultat ble følgende liste over hva som måtte gjøres på hackathonet dannet:

  • Logg inn i leveringskassa.
  • Vis gjeldende posisjon.
  • Send data til en ekstern API (koordinater, mottok bestillingen, leverte bestillingen).
  • Motta data fra ekstern API (gjeldende budordre).
  • Send en hendelse som indikerer at du har tatt bestillingen for levering/levert.
  • Vis gjeldende posisjon til kureren på kartet på nettsiden.

Hovedarbeidet, som det så ut, lå i å lage backend, selve applikasjonen (etter diskusjoner valgte vi ReactNative for å utvikle applikasjonen, eller snarere rammeverket for det - expo.io, som lar deg ikke skrive innfødt kode i det hele tatt). Når det gjelder backend, var det i utgangspunktet håp i Vanya Zverev, da han hadde erfaring med å jobbe med vår servicemal og k8-er (som han tok på seg). Andrey Sarafanov og jeg tok ReactNative en tur.

Jeg bestemte meg for å prøve å umiddelbart lage et fungerende depot for selve prosjektet. Klokken 12 om natten kom jeg over at geolokalisering i bakgrunnen ikke fungerer bra i ReactNative, hvis du ikke skriver innfødt kode ble jeg litt frustrert. Så slapp jeg da jeg skjønte at jeg leste dokumentasjonen ikke av expo.io-rammeverket, men av ReactNative. Som et resultat forsto jeg allerede i løpet av kvelden hvordan jeg skulle få den nåværende posisjonen i expo.io og tegne separate skjermer (for pålogging, ordrevisning osv.).

Kodim-pizza

Om morgenen på hackathonet lokket de Gleb inn i sitt superlovende prosjekt. De kom raskt med en plan for hva som måtte gjøres.

Kodim-pizza

Vi gjorde en feil da vi, i samsvar med prosjektmalen, prøvde å kommunisere ikke via HTTP, men via GRPC, siden ingen visste hvordan vi skulle bygge en GRPC-klient for JavaScript. Til slutt, etter å ha brukt omtrent en og en halv time på dette, forlot vi denne ideen. På grunn av dette begynte gutta på back-end å gjøre om den ferdige serveren fra GRPC til WebApi. Etter en halvtime kunne vi endelig sette opp kommunikasjon mellom applikasjonen og backend, se og se. Men samtidig var Gleb nesten i ferd med å fullføre distribusjonen til k8s og pluss auto-distribusjonen av en commit til masteren. 🙂

Vi valgte MySQL som lagring for ikke å ta risiko i det minste med databasen (vi hadde tanker om CosmosDb).

Kodim-pizza

Oppsummert:

  • Implementert lagring av gjeldende koordinater til kureren fra applikasjonen til databasen.
  • Vi installerte RabbitMQ og abonnerte på meldinger om at kureren henter en ordre for umiddelbart å vise bestillingen fra kureren i applikasjonen.
  • Vi begynte å lagre ordreleveringstiden i databasen vår etter at kureren trykket på en knapp i applikasjonen. Vi hadde ikke tid til å legge til å sende en hendelse tilbake til rebbiten om at bestillingen ble levert.
  • Jeg laget en kartvisning på gjeldende bestillingsside på nettsiden med gjeldende posisjon til kureren. Men denne funksjonaliteten forble litt uferdig, siden det ikke var mulig å konfigurere CORS i miljøet for å motta koordinater fra vår nye tjeneste.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Vi ønsket å implementere en OpenID Connect-leverandør, siden vi for øyeblikket bruker en autentiseringsprotokoll av vårt eget design, og dette skaper en rekke vanskeligheter: tilpassede klientbiblioteker, ubeleilig arbeid fra eksterne partnere, mulige sikkerhetsproblemer (tross alt , OAuth2.0 og OpenID Connect i referanseimplementeringen kan betraktes som trygge, men jeg er ikke sikker på løsningen vår).

Kodim-pizza

Vi laget en egen tjeneste som emulerer en tjeneste for lagring av personopplysninger for å lage en liten landagnostisk modell av en autentiseringsleverandør som vil gå til en egen tjeneste for personopplysninger (dette vil i fremtiden gjøre det mulig å ha én tjeneste med som man kan logge på med en kontoregistrering i hvilket som helst land, og samtidig overholde GDPR og andre føderale lover). Vi gjorde denne delen, det samme gjorde leverandøren, og koblet dem til hverandre. Deretter var det nødvendig å opprette en API som ville være beskyttet av tokens utstedt av leverandøren, støtte deres introspeksjon gjennom leverandøren og returnere beskyttede data hvis forespørselen tilfredsstiller autorisasjonspolicyene (vi sjekker at brukeren er autentisert i henhold til bærerskjemaet , hans token inneholder et visst omfang + y Brukeren har selv en tillatelse som lar anropet utføres). Denne delen ble også fullført. Den siste komponenten var en JavaScript-klient, som ville bli gitt et token, ved hjelp av hvilken den ville kalle et beskyttet API. Vi hadde ikke tid til å gjøre denne delen. Det vil si at hele funksjonsdelen var klar, men frontdelen var ikke klar til å demonstrere funksjonaliteten til hele systemet.

E-E-E (leketøy)

Dima Afonchenko, Sasha Konovalov

Vi lagde en minileke på yunka der sprelske hender kaster pølse på pizza. Hvis du legger pølsen feil, vises en trist "Avvist"-melding på skjermen, og hvis all pølsen ble satt på riktig, dukker det opp et tilfeldig faktum om pizza.

Kodim-pizza

Vi ønsket å lage et andre nivå med å kaste tomater, men vi hadde ikke tid.

Kodim-pizza

Kort fortsettelse: hvem vant?

Før hackathonet snakket vi med gutta og jeg spurte hvilken premie de kunne tenke seg å motta hvis de vinner. Det viste seg at den mest verdifulle premien ville være «veien til mat».

Kodim-pizza

Forvent derfor at vi snart kunngjør et spill med hender som setter pepperons på pizza.

Som en oppmerksom leser kanskje har lagt merke til, vant laget "E-E-E (leketøy)". Gratulerer gutter!

Kun registrerte brukere kan delta i undersøkelsen. Logg inn, vær så snill.

Hvilket prosjekt likte du best?

  • Oleg Learning (maskinlæring)

  • GUI for NOOBS

  • CourierGo

  • M87

  • E-E-E

5 brukere stemte. 3 brukere avsto.

Kilde: www.habr.com

Legg til en kommentar