Kodim – pica

Pozdravljen, Habr. Nepredvideno smo izvedli naš prvi interni hackathon. Odločila sem se deliti z vami svoje težave in ugotovitve o pripravi nanj v 2 tednih, pa tudi o projektih, ki so nastali.

Kodim – pica

Dolga črtica za tiste, ki jih zanima marketing.

Začela bom z majhno zgodbo.

Začetek aprila. V našem uradu poteka prvi hackathon MskDotNet Community. Bitka za Tatooine je v polnem teku, tokrat v naši galaksiji. Sobota. 20 ekip. Pica. Vse zelo prijetno (dokazi). Napihljivi R2-D2 se maje po dvorani. Ekipe pišejo najbolj pravilne algoritme, da premagajo najnevarnejšo dirko na zemljevidu. Začenjamo s prvimi vožnjami. Piškoti in kava rešujejo situacijo. V pričakovanju smo bili, da bodo mnogi v soboto odšli po kosilu. A ne. 12 ur kodiranja je za nami. Finale. Nekaj se izklaplja, nekaj ne deluje. A vsi so srečni. Naša ekipa zmaga. Srečni smo dvakrat.

Delim srečo v Slacku in mi pride na misel ideja: „Moramo izvesti svoj hackathon“. Pišem našemu CTO Saši. Tišina.

Jutro. Pijem kavo v pisarni. Vidim, da se Saša približuje zadaj. „Liza, to je super! Imamo prav 21. aprila pomemben datum. Pojdimo ga izvesti!” Kakšne vragolije!? Tako hitro? Kaj? Moram poleteti v Syktyvkar na prakso sredi aprila. Pa kaj. Pojdimo.

Ostaja 2 tedna. Nikoli še nisem bila edina organizatorka hackathona. Naj bo še notranjega. Berem članke na to temo. Groza. Potrebnih je več mesecev. Potrebujem več ljudi. Potrebno je premisliti merč, nagrade, pogoje, razpored, pridobiti zanimanje, razumeti cilj, proračune. Morda celo razjasniti smisel življenja. Gotovo ne bom uspela. In medtem ko si bral in se pripravljal, je že minil teden. Zdaj je pravi čas, da neham s članki in začnem nekaj početi.

Tukaj je naš kontrolni seznam za izvedbo notranjega hackathona v 1 tednu.

  • Načrt: mirno se usedeš in napišeš seznam stvari, ki jih je treba storiti za hackathon. 30 minut.
  • Naloga: udeleženci sami predlagajo in izberejo projekte, ki jih želijo ustvariti v Google Sheets. Ozadna naloga, 2 uri.
  • Razpored: na hitro napišeš kratek časovni razpored z več kot 3 odmori in finalom. 20 minut.
  • Ukazi: objaviš sporočilo o hackathonu z razporedom od CTO v IT kanalih v Slacku/elektronski pošti/itd. in ustvariš poseben kanal za hackathon. V njem se vsi razdelijo v ekipe, tisti, ki se niso odločili, pa to storijo v prvih 5 minutah hackathona. Ozadna naloga, 2 uri.
  • Pogodnosti.: ustvarite blagovno znamko s tremi razvijalci, jo pošljete oblikovalcu za grafično obdelavo, dobite končni izdelek. Ozadna naloga, 3 dni.
  • Hackathon: pridete v pisarno, na začetku usklajujete vse, ukvarjate se s svojimi nalogami, berete Reddit, z resnim izrazom na obrazu sporočate o novi pici ob vsakem odmoru, fotografirate sončni zahod, razglašate finale, skupaj glasujete in izberete zmagovalca. 1 dan.
  • Pod zvezdico: seveda, nenehno razmišljate o tem, da bi vse potekalo dobro. Seveda, vsi ne bodo videli vašega sporočila in z nekaterimi je bolje govoriti osebno. Seveda, če vam bo kdo pomagal, bo vse dvakrat lažje (pomagala mi je čudovita Alena).

Manj dolgočasen del o datumu hackathona

Zakaj 21. april? Ta dan je zame pomemben. Natanko pred letom dni, 21. aprila, smo se pod pravno težo zrušili med prvimi vikendi po začetku Zvezne oglaševalske kampanje. Dan po tem, v nedeljo, je bila naša ekipa na delu že od 8. ure zjutraj. Takrat smo ustvarili Trello ploščo sundayhackathon in se je začel teden izmeničnega dela po 12 ur na dan. Situacija je bila tako kritična, da ni bilo časa za jedo, naši kolegi iz drugih ekip so nas oskrbovali z hrano.

Kodim – pica

Podrobnejši opis lahko preberete na strani Fëdora Ovčinnikova (našega CEO-ja). Od takrat smo veliko spremenili, vendar te datume zdaj zagotovo ne bomo pozabili.

Letos smo se odločili, da je to dogodek, ki ga je vredno obeležiti za prihodnje rodove, in v najboljših tradicijah smo organizirali prvi notranji hackathon Dodo v zgodovini, ki je trajal 10 ur.

Najmanj dolgočasen del o projektih hackathona

Pripomba: vse opise so napisali sami fantje, zato avtorstvo besedila ni moje.

Oleg Lörning (strojno učenje)

Dima Kočnev, Saša Andronov (@alexandronov)

Želeli so narediti nevronsko omrežje, ki bi določilo, katera pizza je na fotografiji brez kakršnih koli znanj. Na koncu smo naredili zelo preprosto in igrajočo – prepoznava 10 pic, približno smo se lotili, kako vse deluje, kolikor je mogoče v enem dnevu (~10 ur).

Kodim – pica

Zlasti smo spoznali, da je industrija dosegla raven, ko lahko običajen razvijalec vzame obstoječe knjižnice, prebere dokumentacijo in trenira svoje nevronsko omrežje brez globokih znanj o predmetu. In delovalo bo dovolj dobro za reševanje realnih nalog.

Orodja, ki smo jih uporabili:

  • imageai — priročna in enostavna knjižnica za delo z obdelavo podatkov in računalniškim vidom.
  • Preizkusili smo dve modeli – ResNet50 in Yolo.
  • Kod smo pisali, seveda, v Pythonu.

Imeli smo 11000 fotografij, a skoraj 3/4 je bilo neuporabnih, v preostalih pa so bili različni, neprimerne koti. Na koncu smo vzeli pripravljeno model (ki preprosto zna najti pico) in z njeno pomočjo ločili najneprimernejše. Kasneje je bilo v imenu fotografije navedeno ime pice — tako smo razporedili po mapah, a se je izkazalo, da imena ne ustrezajo dejanskosti in smo morali ročno urediti. Na koncu je ostalo okoli 500-600 fotografij, kar je seveda zanemarljivo število, a kljub temu dovolj, da smo ločili 10 pic med seboj.

Za usposabljanje omrežja smo vzeli najcenejšo virtualno napravo v Azure na NVIDIA Tesla K80. Učili smo jo 100 epoh, a že po 50 epohah je bilo videti, da je omrežje preobremenjeno, saj je bil sklop podatkov premajhen.

Pravzaprav je cela težava v pomanjkanju dobrih podatkov.

Kodim – pica

Morda smo malo zmedli v izrazih, a treba je upoštevati, da nimamo izkušenj z vsemi temi stvarmi.

GUI for NOOBS (terminal za naročanje pice)

Miša Kumaječov (Ceridan), Ženja Bikinjin, Ženja Vasiljev

Pripravili smo prototip konzolne aplikacije za geeky, s katero lahko naročite pico preko terminala ali ukazne vrstice, ali pa jo celo vključite v deploy pipeline in ob uspešnem izdajanju dostavite pico v pisarno.

Kodim – pica

Delo se je razdelilo na več delov: raziskovali smo, kako deluje naš API za mobilne aplikacije, razvijali svoj CLI s pomočjo oclif in nastavili objavo paketa, ki smo ga zbrali. S to zadnjo nalogo smo imeli nekaj neprijetnih trenutkov bližje koncu hackatona. Vse je delovalo lokalno, tudi stare objavljene različice paketa, a nove (v katerih je bilo dodanih več kul funkcij in emotikonov) niso delovale. Porabili smo 40 minut, da smo ugotovili, kaj je šlo narobe, a na koncu je vse na čarobni način delovalo.

Naš cilj za hackathon je bil pravi naročilo pice v pisarno preko našega CLI. Večkrat smo vse preizkusili na testnem okolju, a kljub temu so mi roke tresle, ko sem vnašal ukaze v produkciji.

Kodim – pica

Kot rezultat — to smo le naredili!

Kodim – pica

CourierGo

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

We took the idea of a 'Courier Application'.

Background on the preparation.Initially, I estimated what features might be included in the application. I came up with roughly the following functionality list:

  • The application logs into the delivery system using a code.
  • The application immediately shows available orders and orders that need to be taken.
  • The courier marks the order and takes it for the trip.
  • It displays the estimated time and whether he can make it or not.
  • The client sees that the courier has set off.
  • It starts showing the courier's location on the map and the estimated time to arrival.
  • The courier can message the client in chat from the application.
  • The client can message the courier in chat from the application.
  • Five minutes before arrival, the client receives a message that the courier is nearby, be ready.
  • The courier marks in the application that he has arrived and is waiting.
  • The courier can call from the application with one click and inform that (he is arriving, has arrived, etc.)
  • The client accepts the order and enters the pin code from the application or SMS for delivery confirmation (like a signature) so that the courier cannot complete the delivery early if he is delayed.
  • The order is marked as delivered in the system.

Plus a couple of alternative scenarios:

  • The courier can mark the order as undelivered and choose a reason.
  • In case of delay, the courier can issue an electronic certificate via SMS with one button. Or the certificate is automatically sent if the delivery time is not met.

The feeling of the potential and necessity of this project certainly charged us with enthusiasm.

The next day, the team and I went out for lunch and discussed how the minimum functionality of the application would look.

As a result, the following list emerged of what we needed to accomplish during the hackathon:

  • Login to the delivery system.
  • Display current location.
  • Send data to external API (coordinates, order taken, order delivered).
  • Receive data from external API (current orders of the courier).
  • Send an event that the order was taken for delivery/delivered.
  • Display the current position of the courier on the map on the website.

The main work, as it seemed, lay in creating the backend, the application itself (after discussions, we chose ReactNative for application development, more precisely a wrapper around it — expo.io, ki omogoča popolno izogibanje pisanju izvorne kode). Glede backend-a smo prvotno upali na Vanjo Zvereva, ki ima izkušnje z našo predlogo storitve in k8s (da bi prevzel določene naloge). ReactNative sem preizkusil s Andrejem Sarafanovim.

Odločil sem se, da takoj ustvarim delovni repozitorij za sam projekt. Ob 12. uri ponoči sem naletel na problem, da geolokacija v ReactNative slabo deluje v ozadju, če ne pišem izvorne kode, kar me je malo razočaralo. Kasneje me je minilo, ko sem ugotovil, da berem dokumentacijo ne za framework expo.io, temveč za ReactNative. Na koncu sem že tisto večer razumel, kako pridobiti trenutno lokacijo v expo.io in risati ločene zaslone (za prijavo, prikaz naročila itd.).

Kodim – pica

Zjutraj so nas na hackathonu pritegnili, da se pridružimo njihovemu izredno perspektivnemu projektu. Hitro smo zasnovali načrt, kaj je treba narediti.

Kodim – pica

Naredili smo napako, ko smo se poskušali povezovati ne prek HTTP, ampak prek GRPC, saj nihče ni znal sestaviti GRPC odjemalca za JavaScript. Na koncu smo po približno eni uri obupa nad to idejo. Zaradi tega so fantje na backendu morali predelati obstoječi strežnik iz GRPC na WebApi. Čez pol ure smo končno uspeli nastaviti komunikacijo aplikacije z backendom, kar je bilo za čudo. V tem času je Gleb skoraj dokončal deploy v k8s in avtomatski deploy ob commit-u v master. 🙂

Kot shrambo smo izbrali MySQL, da ne bi tvegali s podatkovno bazo (imeli smo misli o CosmosDb).

Kodim – pica

Na kraju:

  • Uresničili smo shranjevanje trenutnih koordinat kurirja iz aplikacije v bazo.
  • Priključili smo RabbitMQ in se prijavili na sporočila o prevzemu naročila s strani kurirja, da bi takoj prikazali naročilo v aplikaciji kurirja.
  • Začeli smo shranjevati v bazo čas dostave naročila, potem ko je kurir pritisnil gumb v aplikaciji. Nismo uspeli dodati pošiljanja dogodka nazaj v RabbitMQ, da bi sporočili, da je naročilo dostavljeno.
  • Na strani currentorder na spletni strani sem prikazal zemljevid s trenutno lokacijo kurirja. Vendar je ta funkcionalnost ostala malo nedokončana, saj na okolju ni bilo možno nastaviti CORS za pridobivanje koordinat iz naše nove storitve.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Артём Трофимушкин

Želeli smo implementirati OpenID Connect provajdera, jer trenutno koristimo protokol autentifikacije vlastite izrade, što stvara niz poteškoća: prilagođene klijentske biblioteke, nezgodan rad sa strane spoljnih partnera, moguće bezbednosne probleme (kako god, OAuth2.0 i OpenID Connect u standardnoj implementaciji smatraju se bezbednima, dok za naše rešenje – nisam siguran).

Kodim – pica

Napravili smo posebnu uslugu koja emulira servis za čuvanje ličnih podataka, kako bismo stvorili malu Country-Agnostic autentifikaciju, koja bi pristupala ličnim podacima u zasebnoj usluzi (to bi u budućnosti omogućilo imati jedan servis, putem kojeg bi se moglo prijaviti koristeći nalog iz bilo koje zemlje, dok bi u isto vreme bilo usklađeno sa GDPR-om i drugim zakonima). Ovu deo smo realizovali, kao i provajdera, i uspešno ih povezali. Zatim je trebalo napraviti API, koji bi bio zaštićen tokenima koje izdaje provajder, podržavati njihovu introspekciju kroz provajdera i vraćati zaštićene podatke ako bi zahtev ispunjavao politike autorizacije (proveravamo da li je korisnik autentifikovan po Bearer šemi, da li njegov token sadrži određeni scope + da li korisnik ima dozvolu koja omogućava poziv). Ovaj deo je takođe završen. Poslednja komponenta bio je JavaScript klijent, kojem bi se izdavao token, pomoću kojeg je pozivao zaštićeni API. Ovu deo nismo stigli da uradimo. Dakle, cela funkcionalna komponenta je bila gotova, ali frontend deo za demonstraciju funkcionalnosti celog sistema nije.

E-E-E (igrica)

Dima Afončenko, Saša Konovalov

Napravili smo mini-igricu na junjku gde brze ruke bacaju kobasicu na picu. Ako si pogrešno bacio kobasicu, na ekranu se pojavljuje tužna poruka "Odbijeno", a ako je cela kobasica pravilno bačena, pojavljuje se slučajna činjenica o pici.

Kodim – pica

Želeli smo da napravimo drugi nivo sa bacanjem paradajza, ali nismo stigli.

Kodim – pica

Kratak nastavak: ko je pobedio?

Pre hackatona smo pričali sa dečkom i pitala sam ih koji bi poklon želeli da dobiju ako pobede. Ispostavilo se da bi najvrednija nagrada bila "put u produkciju".

Kodim – pica

Zato kmalu pričakujte od nas napoved igre, kjer boste s pomočjo ročajev dodajali pekoče paprike na pico.

Kot je lahko opazil pozorni bralec, je zmagala ekipa "E-E-E (igra)". Čestitamo fantom!

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite se, molim vas.

Kateri projekt vam je bil najbolj všeč?

  • Oleg Lörning (strojno učenje)

  • GUI za NOOBS

  • CourierGo

  • M87

  • E-E-E

Glasovalo je 5 uporabnikov. 3 uporabniki so se vzdržali.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster