Kodim-pizza

Pozdrav, Habr. Spontano smo održali prvi interni hackathon. Odlučio sam s vama podijeliti svoje muke i zaključke o pripremama za to u 2 tjedna, kao i projektima koji su se pokazali.

Kodim-pizza

Dosadni dio za one koje zanima marketing

Počet ću s malom pričom.

Početak travnja. U našem uredu održava se prvi MskDotNet Community hackathon. Bitka za Tatooine ovaj je put u punom jeku u našoj galaksiji. Subota. 20 ekipa. Pizza. Sve je vrlo iskreno (dokazi). Dvoranom pluta gumenjak R2-D2. Timovi pišu najispravnije algoritme za prolazak najopasnije utrke na karti. Pomičemo lansiranje prvih utrka. Kolačići i kava su spas. Organizatori i ja smo očekivali da će u subotu nakon ručka puno ljudi otići. Ali ne. 12 sati kodiranja iza. Konačni. Nešto pada, nešto se ne pokreće. Ali svi su sretni. Naš tim pobjeđuje. Dvostruko smo sretni.

Dijelim svoju radost u Slacku i pada mi na pamet ideja: "Moramo napraviti vlastiti hackathon." Pišem našoj servisnoj stanici Sasha. Tišina.

Jutro. Pijem kavu u uredu. Vidim Sasha kako prilazi s leđa. “Lisa, ovo je super! Imamo važan datum 21. travnja. Učinimo to!" WTF!? Tako brzo? A? Što? Trebam letjeti u Syktyvkar na stažiranje sredinom travnja. I kvragu s tim! Hajdemo.

Još 2 tjedna. Nikada nisam bio jedini organizator hackathona. Neka bude interno. Čitao sam članke o ovoj temi. Tvrd. Traje nekoliko mjeseci. Potrebno je nekoliko ljudi. Morate razmišljati o robi, nagradama, uvjetima, rasporedu, interesu, razumjeti cilj, proračune. Ili možda čak shvatiti smisao života. Definitivno neću stići na vrijeme. I dok ste čitali i pripremali, već je prošao tjedan dana. Vrijeme je da zaboravite na članke i počnete nešto raditi.

Pogledajte naš kontrolni popis za održavanje internog hackathona za 1 tjedan

  • plan: Mirno sjedneš i napišeš popis onoga što treba napraviti za hackathon. 30 minuta.
  • Zadatak: Sudionici predlažu i biraju projekte koje žele izraditi u Google tablicama. Pozadinski zadatak, 2 sata.
  • Raspored: na koljenu pišete kratku analizu vremena, uzimajući u obzir 3 pauze i finale. 20 minuta.
  • naredbe: objaviti poruku o hackathonu s rasporedom iz servisa u IT kanalima u Slack/mail/etc i napraviti zaseban kanal za hackathon. U njemu su svi podijeljeni u timove, a oni koji su neodlučni to rade u prvih 5 minuta hackathona. Pozadinski zadatak, 2 sata.
  • lepinje: s dva programera smislite robu, dajte je dizajneru na renderiranje i primite je spremnu. Pozadinski zadatak, 3 dana.
  • Hackathon: dođeš u ured, koordiniraš sve na početku, ideš svojim poslom, čitaš Reddit, važno najavljuješ svaku pauzu o svježoj pizzi, slikaš zalazak sunca, najaviš finale, zajedno glasamo i izaberemo pobjednika. 1 dan.
  • Pod zvjezdicom: Naravno, stalno razmišljate o tome da sve ide dobro. Naravno, neće svi vidjeti vašu poruku i bolje je s nekima razgovarati osobno. Naravno, ako vam netko pomogne, sve će postati 2 puta lakše (meni je pomogla divna Alena).

Manje dosadan dio o datumu hackathona

Zašto 21. travnja? Ovaj dan je značajan za nas. Prije točno godinu dana, 21. travnja, pali smo pod opterećenjem prvog vikenda nakon početka Federalne reklamne kampanje. Sutradan, u nedjelju, naš tim je bio na poslu od 8 ujutro. Zatim smo napravili ploču sundayhackathon u Trellu i počeo je tjedan smjenskog rada, 12 sati dnevno. Situacija je bila toliko kritična da nismo imali vremena ni jesti, a hranili su nas momci iz drugih ekipa.

Kodim-pizza

Opširniju priču možete pročitati na Stranica Fjodora Ovčinnikova (naš glavni izvršni direktor). Od tada smo se dosta promijenili, ali sada sigurno nećemo zaboraviti datum.

Ove godine odlučili smo da ovaj događaj vrijedi ovjekovječiti u sjećanju potomaka te smo, u najboljoj tradiciji, organizirali prvi interni hackathon u povijesti Dodoa koji je trajao 10 sati.

Najdosadniji dio o hackathon projektima

Disclaimer: sve opise napisali su sami dečki, tako da autorstvo teksta nije moje.

Oleg Učenje (strojno učenje)

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

Htjeli su napraviti neuronsku mrežu koja bi bez ikakvog znanja odredila kakva je pizza na fotografiji. Kao rezultat, napravili smo vrlo jednostavnu i igračku - prepoznaje 10 pizza, otprilike smo skužili kako sve funkcionira, koliko je to moguće u jednom danu (~10 sati).

Kodim-pizza

Konkretno, shvatili smo da je industrija dosegla razinu na kojoj obični programer može uzeti gotove biblioteke, pročitati dokumentaciju i trenirati svoju neuronsku mrežu bez dubljeg poznavanja teme. I radit će dovoljno dobro da riješi stvarne probleme.

Korišteni alati:

  • imageai — praktična i jednostavna biblioteka za rad sa strojnim učenjem i računalnim vidom.
  • Isprobali smo dva modela - ResNet50, Yolo.
  • Kod je napisan, naravno, u Pythonu.

Imali smo 11000 fotografija, ali je gotovo 3/4 ispalo smeće, a ostale su imale drugačije, neprikladne kutove. Kao rezultat toga, uzeli smo gotov model (koji jednostavno zna pronaći pizzu) i uz njegovu pomoć odvojili smo smeće. Zatim je u naslovu fotografije stajalo ime pizze - pa smo je razvrstali u mape, ali pokazalo se da nazivi ne odgovaraju stvarnosti i morali smo to čistiti rukama. Na kraju je ostalo oko 500-600 fotografija, jasno je da je to beznačajna količina, ali je ipak bilo dovoljno da se odvoji 10 pizza jedna od druge.

Za treniranje mreže uzeli smo najjeftiniji virtualni stroj u Azureu na NVIDIA Tesla K80. Na njemu su trenirali 100 epoha, ali je bilo jasno da je mreža bila prezasićena nakon 50 epoha, zbog činjenice da je postojao mali skup podataka.

Zapravo, cijeli problem je nedostatak dobrih podataka.

Kodim-pizza

Možda smo malo pobrkali pojmove, ali moramo uzeti u obzir da nemamo nikakvog iskustva u radu sa svim tim stvarima.

GUI za NOOBS (konzola za naručivanje pizze)

Miša Kumačev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Sastavili smo prototip konzolne aplikacije za geekove, zahvaljujući kojoj možete naručiti pizzu putem terminala ili naredbenog retka, ili je čak integrirati u cjevovod za implementaciju i, nakon uspješnog izdavanja, dostaviti pizzu u ured.

Kodim-pizza

Posao je bio podijeljen u nekoliko dijelova: shvatili smo kako funkcionira naš API za mobilne aplikacije, sastavili vlastiti CLI pomoću oclif i konfigurirali objavljivanje paketa koji smo prikupili. Posljednji zadatak uključivao je nekoliko neugodnih minuta pred kraj hackathona. Kod nas je sve radilo lokalno, čak su i stare objavljene verzije paketa radile, ali nove (koje su dodale više cool značajki i emotikona) nisu radile. Proveli smo oko 40 minuta pokušavajući shvatiti što je pošlo po zlu, ali na kraju je sve magično radilo samo od sebe).

Naš maksimum programa za hackathon bila je prava narudžba pizze u ured preko našeg CLI-ja. Sve smo pokrenuli desetak puta na testnom stolu, ali ruke su mi se i dalje tresle kad sam unosio naredbe u proizvodnji.

Kodim-pizza

Kao rezultat toga, konačno smo uspjeli!

Kodim-pizza

CourierGo

Anton Bruzhmelev (autor), Vanja Zverev, Gleb Lesnikov (entropija), Andrej Sarafanov

Preuzeli smo ideju "Aplikacije za kurira".

Pozadina pripreme.U početku sam se pitao kakve bi značajke mogle biti u aplikaciji? Pojavio se sljedeći popis funkcija:

  • Aplikacija se šifrom prijavljuje na dostavnu blagajnu.
  • Aplikacija odmah prikazuje dostupne narudžbe i narudžbe koje je potrebno preuzeti.
  • Kurir bilježi narudžbu i nosi je na put.
  • Prikazuje mu se predviđeno vrijeme i je li stigao na vrijeme ili ne.
  • Pokazuje klijentu da je kurir otišao.
  • Klijentu se počinje prikazivati ​​kurirova točka na karti i predviđeno vrijeme.
  • Kurir može pisati klijentu u chatu iz aplikacije.
  • Klijent može pisati kuriru putem chata iz aplikacije.
  • Pet minuta prije dolaska klijent dobiva poruku da je dostavljač blizu, pripremite se.
  • Kurir u prijavi napominje da je stigao i da čeka.
  • Kurir zove iz aplikacije jednim klikom i javlja da (diže, stigao je itd.)
  • Klijent prihvaća narudžbu i upisuje PIN kod iz aplikacije ili SMS za potvrdu dostave.(kao potpis) Tako da kurir ne može izvršiti dostavu unaprijed ako kasni.
  • Narudžba je u sustavu označena kao isporučena.

Plus nekoliko alternativnih scenarija:

  • Kurir može označiti narudžbu kao neisporučenu i odabrati razlog.
  • Ako kasnite, kurir može izdati elektroničku potvrdu putem SMS-a jednim gumbom. Ili potvrda stiže automatski ako se ne poštuje rok isporuke.

Osjećaj obećanja i nužnosti ovog projekta bio je, naravno, poticajan.

Sljedeći dan smo s ekipom otišli na ručak i razgovarali o tome kako bi izgledala minimalna funkcionalnost aplikacije.

Kao rezultat toga, formiran je sljedeći popis onoga što je trebalo učiniti na hackathonu:

  • Prijava na dostavnu blagajnu.
  • Prikaz trenutne pozicije.
  • Pošaljite podatke vanjskom API-ju (koordinate, primljena narudžba, isporučena narudžba).
  • Primanje podataka iz vanjskog API-ja (trenutni kurirski nalogi).
  • Pošaljite događaj koji pokazuje da ste preuzeli narudžbu za isporuku/isporuku.
  • Prikažite trenutnu poziciju kurira na karti web stranice.

Glavni posao, kako se činilo, ležao je u stvaranju pozadine, same aplikacije (nakon razgovora, odabrali smo ReactNative za razvoj aplikacije, odnosno okvira za nju - expo.io, što vam omogućuje da uopće ne pišete izvorni kod). Što se tiče pozadine, u početku se nada polagala u Vanju Zvereva, jer je imao iskustva u radu s našim servisnim predloškom i k8s (koji je posao preuzeo). Andrey Sarafanov i ja isprobali smo ReactNative.

Odlučio sam pokušati odmah stvoriti radni repozitorij za sam projekt. U 12 sati navečer naišao sam na činjenicu da geolokacija u pozadini ne radi dobro u ReactNativeu, ako ne napišete izvorni kod, bio sam malo frustriran. Onda sam pustio kad sam shvatio da ne čitam dokumentaciju okvira expo.io, već ReactNativea. Kao rezultat toga, tijekom večeri već sam shvatio kako dobiti trenutnu poziciju u expo.io i nacrtati zasebne ekrane (za prijavu, prikaz narudžbi itd.).

Kodim-pizza

Ujutro na hackathonu namamili su Gleba u svoj super obećavajući projekt. Brzo su smislili plan što treba učiniti.

Kodim-pizza

Pogriješili smo kada smo u skladu s predloškom projekta pokušali komunicirati ne putem HTTP-a, već putem GRPC-a, jer nitko nije znao kako napraviti GRPC klijent za JavaScript. Na kraju, nakon što smo na to potrošili oko sat i pol, odustali smo od te ideje. Zbog toga su dečki na pozadini počeli prepravljati gotov poslužitelj iz GRPC-a u WebApi. Nakon pola sata konačno smo uspjeli uspostaviti komunikaciju između aplikacije i backenda, gle čuda. Ali u isto vrijeme, Gleb je skoro dovršavao implementaciju na k8s i plus automatsku implementaciju predaje na master. 🙂

Odabrali smo MySQL kao pohranu kako ne bismo riskirali barem s bazom podataka (razmišljali smo o CosmosDb-u).

Kodim-pizza

U sažetku:

  • Implementirano spremanje trenutnih koordinata kurira iz aplikacije u bazu podataka.
  • Instalirali smo RabbitMQ i pretplatili se na poruke o preuzimanju narudžbe od strane kurira kako bismo odmah prikazali narudžbu od kurira u aplikaciji.
  • Počeli smo spremati vrijeme isporuke narudžbe u našu bazu nakon što je kurir pritisnuo gumb u aplikaciji. Nismo imali vremena dodati slanje događaja natrag na rebbit da je narudžba isporučena.
  • Napravio sam prikaz karte na stranici trenutne narudžbe na web stranici s trenutnom pozicijom kurira. Ali ova je funkcionalnost ostala malo nedovršena, jer nije bilo moguće konfigurirati CORS u okruženju za primanje koordinata od naše nove usluge.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artjom Trofimuškin

Željeli smo implementirati OpenID Connect providera, budući da trenutno koristimo autentifikacijski protokol vlastitog dizajna, a to stvara brojne poteškoće: prilagođene klijentske biblioteke, nezgodan rad od strane vanjskih partnera, moguće sigurnosne probleme (uostalom , OAuth2.0 i OpenID Connect u referentnoj implementaciji mogu se smatrati sigurnima, ali nisam siguran za naše rješenje).

Kodim-pizza

Napravili smo zasebnu uslugu koja emulira uslugu za pohranjivanje osobnih podataka kako bismo stvorili mali Country-Agnostic model pružatelja autentifikacije koji bi išao u zasebnu uslugu za osobne podatke (ovo bi u budućnosti omogućilo da imamo jednu uslugu s na koji se možete prijaviti s registracijom računa u bilo kojoj zemlji, a istovremeno biti u skladu s GDPR-om i drugim saveznim zakonima). Taj dio smo mi odradili, kao i provajder i uspješno ih međusobno povezali. Zatim je bilo potrebno izraditi API koji bi bio zaštićen tokenima koje izdaje pružatelj, podržavao njihovu introspekciju kroz pružatelja i vraćao zaštićene podatke ako zahtjev zadovoljava pravila autorizacije (provjeravamo je li korisnik autentificiran prema Bearer shemi , njegov token sadrži određeni opseg + y Sam korisnik ima dopuštenje koje omogućuje upućivanje poziva). I ovaj dio je završen. Posljednja komponenta je bio JavaScript klijent, koji bi dobio token, uz pomoć kojeg bi pozvao zaštićeni API. Nismo imali vremena za ovaj dio. Odnosno, cijeli funkcionalni dio je bio spreman, ali front-end dio nije bio spreman da demonstrira funkcionalnost cijelog sustava.

E-E-E (igračka)

Dima Afončenko, Saša Konovalov

Napravili smo mini-igračku na yunka gdje žustre ruke bacaju kobasice na pizzu. Ako nepravilno stavite kobasicu, na ekranu se pojavljuje tužna poruka “Odbijeno”, a ako je sva kobasica pravilno stavljena, pojavljuje se nasumična činjenica o pizzi.

Kodim-pizza

Htjeli smo napraviti drugu razinu s bacanjem rajčica, ali nismo imali vremena.

Kodim-pizza

Kratki nastavak: tko je pobijedio?

Prije hackathona razgovarali smo s dečkima i pitao sam koju bi nagradu htjeli dobiti ako pobijede. Ispostavilo se da će najvrijednija nagrada biti “put do hrane”.

Kodim-pizza

Stoga očekujte da uskoro najavimo igru ​​rukama koje stavljaju paprenjake na pizzu.

Kao što je pažljivi čitatelj mogao primijetiti, pobijedio je tim “E-E-E (igračka)”. Svaka čast dečki!

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Koji vam se projekt najviše svidio?

  • Oleg Učenje (strojno učenje)

  • GUI za NOOBS

  • CourierGo

  • M87

  • E-E-E

Glasovalo je 5 korisnika. Suzdržana su bila 3 korisnika.

Izvor: www.habr.com

Dodajte komentar