Kodim-pizza

Zdravo, Habr. Spontano smo održali prvi interni hakaton. Odlučio sam sa vama podijeliti svoje muke i zaključke o pripremi za 2 sedmice, kao i projektima koji su se ispostavili.

Kodim-pizza

Dosadni dio za one koje zanima marketing

Počeću sa malom pričom.

Početak aprila. U našoj kancelariji održava se prvi hakaton MskDotNet zajednice. Bitka za Tatooine je ovog puta u punom jeku u našoj galaksiji. Subota. 20 timova. Pizza. Sve je veoma iskreno (dokazi). Halom pluta R2-D2 na naduvavanje. Timovi pišu najispravnije algoritme kako bi prošli najopasniju utrku na mapi. Pomeramo lansiranje prvih trka. Kolačići i kafa su spasioci. Organizatori i ja smo očekivali da će mnogo ljudi otići nakon ručka u subotu. Ali ne. 12 sati kodiranja iza. Finale. Nešto pada, nešto ne počinje. Ali svi su sretni. Naš tim pobjeđuje. Dvostruko smo sretni.

Dijelim svoju radost u Slack-u i ideja mi pada na pamet: “Moramo napraviti svoj vlastiti hakaton.” Pišem našem servisu Saša. Tišina.

Jutro. Pijem kafu u kancelariji. Vidim Sašu kako prilazi s leđa. “Lisa, ovo je sjajno! Imamo važan datum 21. aprila. Uradimo to!" WTF!? Tako brzo? A? Šta? Moram da odletim u Siktivkar na praksu sredinom aprila. I dođavola s tim! Hajdemo.

2 sedmice preostale. Nikada nisam bio jedini organizator hakatona. Neka bude interno. Čitao sam članke na ovu temu. Tough. Traje nekoliko mjeseci. Potrebno je nekoliko ljudi. Treba razmišljati o robi, nagradama, uslovima, rasporedu, interesu, razumjeti cilj, budžete. Ili možda čak i shvatiti smisao života. Definitivno neću stići na vreme. I dok ste čitali i pripremali se, već je prošla sedmica. Vrijeme je da zaboravite na članke i počnete nešto raditi.

Pogledajte našu kontrolnu listu za održavanje internog hakatona za 1 sedmicu

  • Plan: Sjedneš mirno i napišeš listu šta treba uraditi za hakaton. 30 minuta.
  • Cilj: Učesnici predlažu i biraju projekte koje žele kreirati u Google Sheets. Pozadinski zadatak, 2 sata.
  • Raspored: na koljenu ispisujete kratak pregled vremena, uzimajući u obzir 3 pauze i finale. 20 minuta.
  • Komande: objaviti poruku o hakatonu sa rasporedom sa servisa na IT kanalima u Slack/mail/itd i kreirati poseban kanal za hakaton. U njemu su svi podijeljeni u timove, a oni koji su neodlučni to rade u prvih 5 minuta hakatona. Pozadinski zadatak, 2 sata.
  • Lepinje: osmislite robu sa dva programera, date je dizajneru na renderovanje i primite je spremno. Pozadinski zadatak, 3 dana.
  • Hackathon: dođeš u kancelariju, koordiniraš sve na početku, ideš svojim poslom, čitaš Reddit, bitno najaviš svaku pauzu oko svježe pizze, slikaš zalazak sunca, najaviš finale, zajedno glasamo i izaberemo pobjednika. 1 dan.
  • Ispod zvjezdice: Naravno, stalno mislite da sve ide kako treba. Naravno, neće svi vidjeti vašu poruku i bolje je s nekima razgovarati lično. Naravno, ako vam neko pomogne, sve će postati 2 puta lakše (pomogla mi je divna Alena).

Manje dosadan dio o datumu hakatona

Zašto 21. april? Ovaj dan je značajan za nas. Prije tačno godinu dana, 21. aprila, pali smo pod opterećenje tokom prvog vikenda nakon početka Federalne reklamne kampanje. Sutradan, u nedjelju, naša ekipa je bila na poslu od 8 sati ujutro. Zatim smo napravili sundayhackathon tablu u Trellu i počela je sedmica smjenskog rada, 12 sati dnevno. Situacija je bila toliko kritična da nismo imali vremena ni za jelo, a hranili su nas momci iz drugih ekipa.

Kodim-pizza

Detaljniju priču možete pročitati na Stranica Fjodora Ovčinnikova (naš generalni direktor). Od tada smo se dosta promenili, ali sada definitivno nećemo zaboraviti datum.

Ove godine smo odlučili da ovaj događaj vrijedi ovekovečiti u sjećanju potomaka i u najboljoj tradiciji organizovali smo prvi interni hakaton u istoriji Dodoa, koji je trajao 10 sati.

Najdosadniji dio o hackathon projektima

Disclaimer: sve opise su napisali sami momci, tako da autorstvo teksta nije moje.

Oleg Learning (mašinsko 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 toga, napravili smo vrlo jednostavnu i igračku - prepoznaje 10 pica, otprilike smo shvatili kako sve funkcionira, koliko je to moguće u jednom danu (~10 sati).

Kodim-pizza

Konkretno, shvatili smo da je industrija dostigla nivo na kojem običan programer može uzeti gotove biblioteke, čitati dokumentaciju i trenirati svoju neuronsku mrežu bez dubokog poznavanja teme. I radit će dovoljno dobro da riješi stvarne probleme.

Korišteni alati:

  • imageai — zgodna i jednostavna biblioteka za rad sa mašinskim učenjem i kompjuterskim vidom.
  • Isprobali smo dva modela - ResNet50, Yolo.
  • Kôd je, naravno, napisan u Pythonu.

Imali smo 11000 fotografija, ali je skoro 3/4 njih ispalo kao smeće, a ostale su imale različite, neprikladne uglove. Kao rezultat toga, uzeli smo gotov model (koji jednostavno zna kako pronaći pizzu) i uz njegovu pomoć odvojili smeće. Dalje, naslov fotografije je uključivao naziv pizze - pa smo je sortirali u fascikle, ali se ispostavilo da se nazivi ne poklapaju sa stvarnošću i morali smo to ručno očistiti. Na kraju je ostalo oko 500-600 fotografija, jasno je da je to beznačajna količina, ali je to ipak bilo dovoljno da se 10 pica odvoji jedna od druge.

Da bismo trenirali mrežu, uzeli smo najjeftiniju virtuelnu mašinu u Azure-u na NVIDIA Tesla K80. Na njoj su trenirali 100 epoha, ali je bilo jasno da je mreža postala 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 štreberke, zahvaljujući kojoj možete naručiti pizzu putem terminala ili komandne linije, ili je čak integrirati u cevovod za implementaciju i, nakon uspješnog puštanja, isporučiti pizzu u ured.

Kodim-pizza

Rad je bio podijeljen u nekoliko dijelova: shvatili smo kako funkcionira naš API za mobilne aplikacije, sastavili vlastiti CLI koristeći oclif i konfigurisali objavljivanje paketa koji smo prikupili. Posljednji zadatak uključivao je nekoliko neugodnih minuta pred kraj hakatona. Sve nam je funkcionisalo lokalno, čak su i stare objavljene verzije paketa radile, ali nove (koje su dodale više cool funkcija i emotikona) su odbile da rade. Proveli smo oko 40 minuta pokušavajući da shvatimo šta je pošlo po zlu, ali na kraju je sve magično funkcionisalo samo od sebe).

Naš maksimalni program za hakaton bila je prava narudžba pizze u ured preko našeg CLI-a. Sve smo izvodili desetak puta na testnom stolu, ali ruke su mi se i dalje tresle kada sam unosio komande u produkciju.

Kodim-pizza

Kao rezultat toga, konačno smo to uspjeli!

Kodim-pizza

CourierGo

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

Uzeli smo ideju o „Aplikaciji za kurira“.

Pozadina o pripremi.U početku sam se pitao kakve bi karakteristike mogle biti u aplikaciji? Pojavila se sljedeća lista funkcionalnosti:

  • Aplikacija se prijavljuje u dostavnu kasu pomoću koda.
  • Aplikacija odmah prikazuje dostupne narudžbe i naloge koje je potrebno poduzeti.
  • Kurir zabilježi narudžbu i nosi je na put.
  • Prikazuje mu se predviđeno vrijeme i da li je na vrijeme ili ne.
  • Pokazuje klijentu da je kurir otišao.
  • Klijentu počinje da se prikazuje kurirska tačka na mapi i predviđeno vreme.
  • Kurir može pisati klijentu u chatu iz aplikacije.
  • Klijent može pisati kuriru putem chata iz aplikacije.
  • Pet minuta prije dolaska klijent dobija poruku da je kurir blizu, budite spremni.
  • Kurir u prijavi napominje da je stigao i da čeka.
  • Kurir jednim klikom poziva iz aplikacije i javlja da (postaje, stigao, itd.)
  • Klijent prihvata porudžbinu i unosi PIN kod iz aplikacije ili SMS za potvrdu isporuke (kao potpis) Kako kurir ne bi mogao da izvrši isporuku unapred ako kasni.
  • Narudžba je u sistemu označena kao isporučena.

Plus nekoliko alternativnih scenarija:

  • Kurir može označiti narudžbu kao neisporučenu i odabrati razlog.
  • Ako zakasnite, kurir može izdati elektronski sertifikat putem SMS-a jednim dugmetom. Ili sertifikat stiže automatski ako se ne ispoštuje rok isporuke.

Osjećaj obećanja i neophodnosti ovog projekta je, naravno, bio pun energije.

Sutradan smo otišli na ručak s timom i razgovarali o tome kako će izgledati minimalna funkcionalnost aplikacije.

Kao rezultat, formirana je sljedeća lista onoga što je trebalo uraditi na hakatonu:

  • Prijavite se na dostavnu kasu.
  • Prikaz trenutne pozicije.
  • Pošaljite podatke vanjskom API-ju (koordinate, primio narudžbu, isporučio narudžbu).
  • Primanje podataka od eksternog API-ja (trenutne kurirske narudžbe).
  • Pošaljite događaj koji označava da ste preuzeli narudžbu za isporuku/isporuku.
  • Prikažite trenutnu poziciju kurira na mapi na web stranici.

Glavni posao, kako se činilo, ležao je u kreiranju pozadine, same aplikacije (nakon diskusija, odabrali smo ReactNative za razvoj aplikacije, odnosno okvira za nju - expo.io, što vam omogućava da uopće ne pišete izvorni kod). Što se tiče backenda, u početku je postojala nada u Vanji Zverevu, pošto je imao iskustva u radu sa našim šablonom servisa i k8s-ima (čiji posao je preuzeo). Andrey Sarafanov i ja smo uzeli ReactNative za okretanje.

Odlučio sam pokušati odmah stvoriti radno spremište za sam projekat. U 12 uveče naišao sam na činjenicu da geolokacija u pozadini ne radi dobro u ReactNative-u, ako ne pišete native kod, bio sam malo frustriran. Onda sam pustio kada sam shvatio da čitam dokumentaciju ne expo.io framework-a, već ReactNative-a. Kao rezultat toga, tokom večeri sam već shvatio kako da dobijem trenutnu poziciju u expo.io i nacrtam odvojene ekrane (za prijavu, prikaz naloga, itd.).

Kodim-pizza

Ujutro na hakatonu namamili su Gleba u svoj super obećavajući projekat. Brzo su smislili plan šta treba uraditi.

Kodim-pizza

Napravili smo grešku kada smo, u skladu sa šablonom projekta, pokušali da komuniciramo ne preko HTTP-a, već preko GRPC-a, jer niko nije znao kako da napravi GRPC klijent za JavaScript. Na kraju, nakon što smo potrošili oko sat i po vremena na ovo, odustali smo od ove ideje. Zbog toga su momci sa back-enda počeli da prepravljaju gotov server sa GRPC na WebApi. Nakon pola sata konačno smo uspjeli uspostaviti komunikaciju između aplikacije i backenda, eto. Ali u isto vrijeme, Gleb je skoro završavao implementaciju na k8s i plus auto-deployment urezivanja na master. 🙂

Odabrali smo MySQL kao skladište kako ne bismo rizikovali barem sa bazom podataka (razmišljali smo o CosmosDb).

Kodim-pizza

Kao rezultat:

  • Implementirano čuvanje trenutnih koordinata kurira iz aplikacije u bazu podataka.
  • Instalirali smo RabbitMQ i pretplatili se na poruke da kurir preuzima narudžbu kako bismo odmah prikazali narudžbu od kurira u aplikaciji.
  • Vrijeme isporuke narudžbe počeli smo čuvati u našoj bazi podataka nakon što je kurir pritisnuo dugme u aplikaciji. Nismo imali vremena da dodamo slanje događaja nazad u rebbit da je narudžba isporučena.
  • Napravio sam prikaz karte na stranici trenutne narudžbe na web stranici sa trenutnom pozicijom kurira. Ali ova funkcionalnost je ostala malo nedovršena, budući da nije bilo moguće konfigurirati CORS u okruženju da prima koordinate od našeg novog servisa.

M87

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

Htjeli smo implementirati OpenID Connect provajdera, jer trenutno koristimo protokol autentikacije vlastitog dizajna, a to stvara brojne poteškoće: prilagođene klijentske biblioteke, nezgodan rad od strane vanjskih partnera, mogući sigurnosni problemi (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 zaseban servis koji emulira servis za pohranjivanje ličnih podataka kako bismo kreirali mali Country-Agnostic model provajdera autentifikacije koji bi išao na poseban servis za lične podatke (ovo bi u budućnosti omogućilo da imamo jednu uslugu sa koji bi se mogao prijaviti sa registracijom naloga u bilo kojoj zemlji, a u isto vrijeme biti u skladu sa GDPR i drugim saveznim zakonima). Ovaj dio smo uradili, kao i provajder, i uspješno ih međusobno povezali. Zatim je bilo potrebno kreirati API koji bi bio zaštićen tokenima koje je izdao provajder, podržavao njihovu introspekciju kroz provajdera i vraćao zaštićene podatke ako je zahtjev zadovoljavao politike autorizacije (provjeravamo da li je korisnik autentificiran prema Bearer shemi , njegov token sadrži određeni opseg + y Sam korisnik ima dozvolu koja dozvoljava 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 da uradimo ovaj deo. Odnosno, cijeli funkcionalni dio je bio spreman, ali front-end dio nije bio spreman da demonstrira funkcionalnost cijelog sistema.

E-E-E (igračka)

Dima Afončenko, Saša Konovalov

Napravili smo mini-igračku na junki u kojoj živahne ruke bacaju kobasicu na pizzu. Ako neispravno 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 drugi nivo sa bacanjem paradajza, ali nismo imali vremena.

Kodim-pizza

Kratak nastavak: ko je pobedio?

Prije hackathona razgovarali smo sa momcima i pitao sam koju bi nagradu željeli dobiti ako pobijede. Ispostavilo se da bi najvrednija nagrada bila “put do hrane”.

Kodim-pizza

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

Kao što je pažljiv čitalac mogao primijetiti, pobijedio je tim “E-E-E (igračka)”. Čestitamo momci!

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Koji vam se projekat najviše dopao?

  • Oleg Learning (mašinsko učenje)

  • GUI za NOOBS

  • CourierGo

  • M87

  • E-E-E

Glasalo je 5 korisnika. 3 korisnika je bila uzdržana.

izvor: www.habr.com

Dodajte komentar