Kódoljunk–pizza

Helló, Habr. Spontán módon lebonyolítottuk az első belső hackathonunkat. Úgy döntöttem, megosztom veletek a fájdalmamat és a következtetéseimet a két hetes felkészülésről, valamint az elkészült projektekről.

Kódoljunk–pizza

Unalmas rész azoknak, akiket a marketing érdekel

Kis történettel kezdem.

Április eleje. Az irodánkban zajlik az első hackathon a MskDotNet Közösség szervezésében. A csata Tatuinért éppen folyik a mi galaxisunkban. Szombat. 20 csapat. Pizza. Minden nagyon baráti hangulatú (bizonyítékok). A felfújható R2-D2 bóklászik a teremben. A csapatok a lehető legjobb algoritmusokat írják, hogy megnyerjék a legveszélyesebb versenyt a térképen. Elhalasztjuk az első futamok kezdését. A keksz és a kávé ment meg minket. A szervezőkkel azt vártuk, hogy szombaton sokan hazamennek dél után. De nem. 12 óra kódolás mögöttünk. A finálé. Valami elromlik, valami nem indul el. De mindenki boldog. A mi csapatunk nyer. Két szerencsénk van.

Megosztom az örömömet a Slack-en, és eszembe jut egy ötlet: "Kellene csinálnunk egy saját hackathont." Írok a CTO-nknak, Sashának. Csend.

Reggel. Kávét iszom az irodában. Látom, hogy Sasha közeledik mögülem. "Lisa, ez nagyszerű! Április 21-én fontos időpontunk van. Csináljuk!" WTF!? Ilyen gyorsan? Hogy? Középen áprilisban utaznom kell Syktyvkarba egy gyakorlatra. De kit érdekel! Menjünk.

Két hét van hátra. Soha nem voltam egyedüli szervezője egy hackathonnak. Akkor se, ha belső. Olvasok cikkeket erről. Ciki. Több hónap szükséges. Pár ember kell. Ki kell találni a merch-et, a díjakat, a körülményeket, az ütemtervet, érdeklődést kelteni, megérteni a célt, a költségvetéseket. Talán még az élet értelmét is kideríteni. Tuti, hogy nem fogok elkészülni. És míg te olvastál és készültél, már eltelt egy hét. Itt az ideje, hogy feladj mindent, és elkezdj valamit csinálni.

Itt a checklistünk belső hackathon lebonyolításához egy hét alatt

  • Terv: nyugodtan leülsz, és írsz egy listát arról, hogy mit kell megtenni a hackathonhoz. 30 perc.
  • Feladat: a résztvevők maguk javasolják és választják ki a projekteket, amelyeket Google Sheets-ben szeretnének létrehozni. Háttérfeladat, 2 óra.
  • Ütemterv: időbeosztást írsz össze a térdeden, figyelembe véve 3 szünetet és a finálét. 20 perc.
  • Csapatok: közzéteszed a hackathonról szóló üzenetet a CTO időbeosztásával az IT-csatornákban Slack-en/emailben/egyéb helyeken, és létrehozol egy külön csatornát a hackathonhoz. Ebben mindenki csapatokra oszlik, a határozatlanok pedig az első 5 percben csinálják meg ezt a hackathon alatt. Háttérfeladat, 2 óra.
  • Extraságok: Két fejlesztővel merchandiset találsz ki, átadod a tervezőnek, majd megkapod a kész változatot. Háttérfeladat, 3 nap.
  • Hackathon: Megérkezel az irodába, koordinálod mindenki munkáját a kezdeteknél, utána a saját dolgaiddal foglalkozol, olvasol Redditet, komoly arccal minden szünetben bejelented az új pizzát, fényképezed a naplementét, kihirdeted a döntőt, közösen szavaztok és kiválasztjátok a győztest. 1 nap.
  • Csillag alatt: Természetesen folyamatosan azon jár az eszed, hogy minden jól sikerüljön. Természetesen nem mindenki látja az üzenetedet, és egyesekkel jobb személyesen beszélni. Természetesen, ha lenne valaki, aki segít, minden kétszer olyan egyszerű lenne (nekem csodálatos Aléna segített).

A hackathon dátumáról a kevésbé unalmas rész

Miért április 21.? Ez a nap fontos számunkra. Pont egy évvel ezelőtt, április 21-én terhelés alatt összeomlottunk az első hétvégén a Szövetségi Reklámkampány kezdetén. Másnap, vasárnap, csapatunk reggel 8-tól dolgozott. Akkor létrehoztuk a Trello táblát a sundayhackathon néven, és megkezdődött a 12 órás váltott munkák hete. A helyzet annyira kritikus volt, hogy még enni sem volt időnk, és a többi csapat fiataljai tápláltak minket.

Kódoljunk–pizza

Bővebb beszámolót olvashat az Fjodor Ovcsinnyikov oldalán (a CEO-nk). Azóta sok minden változott, de ezt a dátumot biztosan nem felejtjük el.

Idén úgy döntöttünk, hogy ezt az eseményt meg kell örökíteni az utókor számára, és a legjobb hagyományok szerint megszerveztük a Dodo történetének első belső hackathonját, amely 10 órán át tartott.

A hackathon projektek legizgalmasabb része

Megjegyzés: Minden leírást a fiúk írtak, így a szöveg szerzője nem én vagyok.

Oleg Learning (gépi tanulás)

Dima Kocnev, Sasha Andronov (@alexandronov)

Olyan neurális hálót akartunk létrehozni, amely képes felismerni, hogy milyen pizza látható a fényképen, bármiféle előzetes tudás nélkül. Végül egy nagyon egyszerű és játékos verziót készítettünk – felismeri 10 fajtát, körülbelül megértettük, hogyan működik, amennyire lehetséges egy nap alatt (~10 órában).

Kódoljunk–pizza

Különösen azt értettük meg, hogy az ipar eljutott arra a szintre, amikor egy átlagos fejlesztő képes kész könyvtárakat igénybe venni, elolvasni a dokumentációt és neurális hálót tanítani mélyebb tudás nélkül. És elég jól működik a valós feladatok megoldására.

A használt eszközök:

  • imageai — kényelmes és egyszerű könyvtár a gépi tanulás és a számítógépes látás területén.
  • Két modellt próbáltunk ki – ResNet50, Yolo.
  • A kód természetesen Pythonban készült.

11000 fotónk volt, de ezek közül majdnem 3/4-ük szemétnek bizonyult, az eltűnt képek különböző, nem megfelelő szögekkel. Végül egy kész modellt használtunk (ami egyszerűen csak képes pizzát találni), és ennek segítségével válogattuk ki a legrosszabbakat. Ezen kívül a fotók neve a pizza nevét tartalmazta – így rendszereztük őket mappákba, de kiderült, hogy a nevek nem egyeztek a valósággal, és itt már kézzel kellett tisztogatnunk. Végül körülbelül 500-600 fotó maradt, ami nyilvánvalóan elenyésző mennyiség, de így is elegendő volt ahhoz, hogy 10 pizzát megkülönböztessünk egymástól.

A hálózat betanításához a legolcsóbb virtuális gépet használtuk az Azure-ban, NVIDIA Tesla K80-cal. Ezen 100 epizódban tanítottuk, de már 50 epizód után látható volt, hogy a hálózat telítődött, mivel kicsi volt az adatbázis.

Valójában az egész probléma a jó adatok hiányában rejlik.

Kódoljunk–pizza

Lehet, hogy kissé összezavartuk a kifejezéseket, de figyelembe kell venni, hogy nekünk egyáltalán nincs tapasztalatunk ezekkel a dolgokkal kapcsolatban.

GUI for NOOBS (pizza rendelés konzol alkalmazás)

Misa Kumachyov (Ceridan), Zsófia Bikkinin, Zsófia Vasziljev

Összegyűjtöttünk egy prototípus konzol alkalmazást geekek számára, amellyel pizzát rendelhetünk a terminálon vagy a parancssoron keresztül, sőt be is építhetjük a telepítési folyamatba, és sikeres kiadás esetén pizzát szállíthatunk az irodába.

Kódoljunk–pizza

A munka több részre oszlott: foglalkoztunk azzal, hogy hogyan működik az API-nk a mobilalkalmazásokhoz, és összeraktuk a saját CLI-nket a oclif segítségével, és beállítottuk a saját csomagunk kiadását. Az utolsó feladat néhány kellemetlen percet okozott a hackathon végén. Minden helyben működött, sőt a régi kiadott verziók is működtek, de az új verziók (amelyek több menő funkciót és emotikont tartalmaztak) nem működtek. Körülbelül 40 percet töltöttünk el azzal, hogy kiderítsük, mi ment félre, de végül minden varázslatos módon elkezdett működni.

A hackathon fő célja az volt, hogy valódi pizzarendelést indítsunk az irodában a CLI-nk segítségével. Tíz alkalommal futtattuk le mindent a tesztkörnyezetben, de a kezemben még mindig remegett a kezem, amikor a termelési parancsokat írtam be.

Kódoljunk–pizza

A végén – mégis sikerült!

Kódoljunk–pizza

CourierGo

Anton Bruzhmelov (szerző), Vanya Zverev, Gleb Lesnikov (entropy), Andrey Sarafanov

Elkaptuk az ötletet a „Futár alkalmazás”-ból.

Előzmények a felkészülésről.Kezdetben arra gondoltam, hogy milyen funkciók lehetnek az alkalmazásban? Körülbelül egy ilyen funkciólista alakult ki:

  • Az alkalmazás bejelentkezik a kiszállítói kasszába kód segítségével.
  • Az alkalmazásban azonnal láthatók a rendelkezésre álló megrendelések, a felveendő megrendelések.
  • A futár megjelöli a rendelést és útra kel.
  • Megjelenik a becsült érkezési idő, és elkészül-e időben.
  • Az ügyfél számára látható, hogy a futár úton van.
  • Az ügyfél számára megjelenik a futár aktuális pozíciója a térképen és a becsült idő.
  • A futár írhat az ügyfélnek az alkalmazásból chat-en.
  • Az ügyfél írhat a futárnak az alkalmazásból chat-en.
  • Öt perccel az érkezés előtt az ügyfél üzenetet kap, hogy a futár közel van, készüljön!
  • A futár megjelöli az alkalmazásban, hogy megérkezett és vár.
  • A futár egy kattintással hívhatja az alkalmazásból, és jelzi, hogy (jön fel, megérkezett stb.)
  • Az ügyfél elfogadja a rendelést, és beírja a PIN-kódot az alkalmazásból vagy SMS-ből, hogy megerősítse a kiszállítást. (mint egy aláírás) Hogy a futár ne tudja előre befejezni a kiszállítást, ha késlekedik.
  • A rendelés a rendszerben kiszállítottnak számít.

Plusz néhány alternatív forgatókönyv:

  • A futár megjelölheti a rendelést nem kiszállítottnak, és választhatja az okot.
  • A futár késlekedés esetén egy gombnyomással elektronikus tanúsítványt küldhet SMS-ben. Vagy a tanúsítvány automatikusan érkezik a szállítási határidő be nem tartása esetén.

A projekttel kapcsolatos perspektíva és szükségesség érzése természetesen motivált.

Másnap elmentünk a csapattal ebédelni, és megbeszéltük, hogyan fog kinézni az alkalmazás minimális funkcionalitása.

Végül a következő lista alakult ki arról, amit a hackathon során el kellett végeznünk:

  • Bejelentkezés a kiszállítói kasszába.
  • Jelenlegi helyzet megjelenítése.
  • Adatok küldése egy külső API-val (koordináták, rendelés felvétele, rendelés kiszállítása).
  • Adatok fogadása egy külső API-ból (futár aktuális rendelései).
  • Esemény küldése arról, hogy a rendelést felvették a kiszállításra/kiszállították.
  • A futár aktuális helyzetének megjelenítése a weboldalon a térképen.

A fő munka, ahogy láttuk, a backend létrehozása volt, az alkalmazásé (megbeszélések után a ReactNative-t választottuk az alkalmazás fejlesztéséhez, pontosabban annak burkolatát — expo.io, amely lehetővé teszi a natív kód teljes elkerülését). A backend tervei között kezdetben volt remény Vanya Zverev-re, mint tapasztalt szakemberünkre a szolgáltatásunk sablonjával és a k8s-szel kapcsolatban (ezt a feladatot magára is vállalta). ReactNative-ot én és Andrey Sarafanov próbálgattuk.

Úgy döntöttem, hogy rögtön létrehozok egy működő repozitóriumot a projekt számára. Éjfél körül észrevettem, hogy a ReactNative-ban rosszul működik a geolokáció háttérben, ha nem írok natív kódot, ami eléggé frusztrált. Aztán megnyugodtam, amikor rájöttem, hogy nem az expo.io keretrendszer dokumentációját olvasom, hanem a ReactNative-ét. Végül estére már világos volt számomra, hogyan tudom az expo.io-ban lekérni a jelenlegi helyzetemet és külön képernyőket rajzolni (bejelentkezéshez, rendelés megjelenítéséhez stb.).

Kódoljunk–pizza

Reggel a hackathonon Gleb-et bevonták a szuper-prospektív projektjükbe. Gyorsan összedobták a tervet arról, hogy mi szükséges.

Kódoljunk–pizza

Hibát követtünk el, amikor a projekt sablonja szerint nem HTTP-n, hanem GRPC-n próbáltunk kommunikálni, mivel senki sem tudta összerakni a GRPC-klienst JavaScript-hez. Ennek eredményeként körülbelül másfél órát eltöltve végül feladtuk ezt az ötletet. Emiatt a srácok a backend-en is elkezdték átdolgozni a kész szervert GRPC-ről WebApi-ra. Fél óra múlva végre sikerült beállítanunk az alkalmazás kommunikációját a backend-del, csodák csodájára. De eközben Gleb majdnem befejezte a telepítést a k8s-ben, és az automatikus telepítést is beállította a mesterbe való elkötelezés alapján. 🙂

Tárhelyként a MySQL-t választottuk, hogy legalább a bázissal ne kockáztassunk (gondoltunk a CosmosDb-ra is).

Kódoljunk–pizza

Végül:

  • Megvalósítottuk a futár aktuális koordinátáinak mentését az alkalmazásból az adatbázisba.
  • Integráltuk a RabbitMQ-t, és feliratkoztunk a futár által a rendelés átvételéről szóló üzenetekre, hogy azonnal megjeleníthessük a rendelést a futár alkalmazásában.
  • Elkezdett az adatbázisunkban tárolni az ajánlat időpontját, miután a futár megnyomta a gombot az alkalmazásban. Nem tudtuk időben hozzáadni az esemény visszaküldését a rabbit-nek azzal, hogy a rendelés teljesítve lett.
  • Készítettem egy térképmegjelenítést a currentorder oldalon a weboldalon a futár aktuális helyzetével. De ez a funkció kissé hiányos maradt, mivel a környezetben nem sikerült beállítani a CORS-t az új szolgáltatásunkból származó koordináták lekérdezéséhez.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Szerettük volna megvalósítani az OpenID Connect szolgáltatót, mivel jelenleg a saját fejlesztésű hitelesítési protokollunkat használjuk, ami számos nehézséget okoz: testreszabott klienskönyvtárak, kényelmetlen együttműködés külső partnerekkel, esetleg biztonsági problémák (hiszen az OAuth2.0 és az OpenID Connect referenciakivitelezését biztonságosnak lehet tekinteni, a saját megoldásunkkal viszont nem vagyok biztos).

Kódoljunk–pizza

Készítettünk egy külön szolgáltatást, amely a személyes adatok tárolásának szolgáltatását utánozza, hogy létrehozzunk egy kicsi country-agnosztikus hitelesítési szolgáltatót, amely külön szolgáltatásból kéri el a személyes adatokat (ez a jövőben lehetőséget adna arra, hogy egyetlen szolgáltatással lehetne bejelentkezni bármely országban, miközben megfelel a GDPR-nak és más jogszabályoknak). Ezt a részt megvalósítottuk, akárcsak a szolgáltatót, és sikeresen összekapcsoltuk őket. Ezután egy API-t kellett létrehoznunk, amely tokenekkel védett, amelyeket a szolgáltató ad, támogatni kellett azok introspektálását a szolgáltatón keresztül, és vissza kellett adni a védett adatokat, ha a kérés megfelelt a hozzáférés-ellenőrzési politikáknak (ellenőrizzük, hogy a felhasználó a Bearer sémák szerint hitelesítve van, a tokenjében van egy adott scope + a felhasználónak van engedélye a hívás végrehajtásához). Ezt a részt is megvalósítottuk. Az utolsó komponens egy JavaScript kliens volt, amely egy tokenhez jutott, amellyel védett API-t hívhatott. Ezt a részt nem sikerült megvalósítanunk. Tehát az összes funkcionális rész készen állt, de a front-end rész nem volt kész a rendszer működésének bemutatására.

E-e-e (játék)

Dima Afonsenko, Sasha Konovalov

Készítettünk egy mini-játékot a Junki-n, ahol fürge kezek kolbászt dobnak a pizzára. Ha hibásan dobtad a kolbászt, a képernyőn megjelenik a szomorú felirat: "Elutasítva", míg ha a kolbász egészét helyesen dobtad, akkor egy véletlenszerű tény jelenik meg a pizzáról.

Kódoljunk–pizza

Szerettük volna elkészíteni a második szintet, ahol paradicsomot dobnak, de nem sikerült.

Kódoljunk–pizza

Rövid következmény: ki nyert?

A hackathon előtt beszélgettünk a fiúkkal, és megkérdeztem, milyen díjat szeretnének kapni, ha nyernek. Kiderült, hogy a legértékesebb díj a "jog a termelésre" lesz.

Kódoljunk–pizza

Hamarosan várható tőlünk egy bejelentés a játékhoz, ami a pizzára dobáló péksüteményekkel foglalkozik.

Ahogy azt a figyelmes olvasó észlelhette, az „E-E-E (a játék)” csapata nyert. Gratulálunk a fiataloknak!

Csak a regisztrált felhasználók vehetnek részt a szavazáson. Kérem, jelentkezzen be., kérem.

Melyik projekt tetszett a legjobban önnek?

  • Oleg Learning (gépi tanulás)

  • GUI kezdőknek

  • CourierGo

  • M87

  • E-E-E

5 felhasználó szavazott. 3 felhasználó tartózkodott.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster