Kodim-pizza

Ahoj Habr. Spontánne sme usporiadali náš prvý interný hackathon. Rozhodol som sa s vami podeliť o moje bolesti a závery o príprave na to za 2 týždne, ako aj o projekty, ktoré sa ukázali byť.

Kodim-pizza

Nudná časť pre záujemcov o marketing

Začnem malým príbehom.

Začiatok apríla. V našej kancelárii sa koná prvý hackathon komunity MskDotNet. Bitka o Tatooine je tentoraz v našej galaxii v plnom prúde. sobota. 20 tímov. Pizza. Všetko je veľmi úprimné (dôkazy). Po hale pláva nafukovačka R2-D2. Tímy píšu najsprávnejšie algoritmy, aby prešli najnebezpečnejšími pretekmi na mape. Posúvame spustenie prvých pretekov. Sušienky a káva sú záchranou života. S organizátormi sme očakávali, že v sobotu po obede veľa ľudí odíde. Ale nie. 12 hodín kódovania pozadu. Finálny. Niečo odpadne, niečo sa nespustí. Ale všetci sú šťastní. Náš tím vyhráva. Tešíme sa dvojnásobne.

Zdieľam svoju radosť v Slacku a napadá ma myšlienka: „Musíme urobiť vlastný hackathon.“ Píšem našej čerpacej stanici Sasha. Ticho.

ráno. Pijem kávu v kancelárii. Vidím, ako sa zozadu blíži Saša. „Lisa, to je skvelé! Máme dôležitý dátum 21. apríla. Poďme na to!" WTF!? Tak rýchlo? A? Čo? V polovici apríla potrebujem letieť do Syktyvkaru na stáž. A do čerta s tým! Poďme.

Zostávajú 2 týždne. Nikdy som nebol jediným organizátorom hackathonu. Nech je to vnútorné. Čítal som články na túto tému. Tvrdý. Trvá to niekoľko mesiacov. Je potrebných niekoľko ľudí. Musíte myslieť na tovar, ceny, podmienky, harmonogram, záujem, pochopiť cieľ, rozpočty. Alebo možno aj zistiť zmysel života. Určite to nestihnem. A kým ste čítali a pripravovali, ubehol už týždeň. Je čas zabudnúť na články a začať niečo robiť.

Pozrite si náš kontrolný zoznam na usporiadanie interného hackathonu o 1 týždeň

  • Plán: Pokojne si sadnete a napíšete zoznam toho, čo treba pre hackathon urobiť. 30 minút.
  • Úloha: Účastníci navrhujú a vyberajú projekty, ktoré chcú vytvoriť v Tabuľkách Google. Úloha na pozadí, 2 hodiny.
  • Cestovný poriadok: na koleno si napíšete krátky rozpis času s prihliadnutím na 3 prestávky a záverečnú. 20 minút.
  • príkazy: publikovať správu o hackathone s harmonogramom od čerpacej stanice v IT kanáloch v Slack/mail/atď a vytvoriť samostatný kanál pre hackathon. V ňom sú všetci rozdelení do tímov a tí, ktorí sú nerozhodní, to robia v prvých 5 minútach hackathonu. Úloha na pozadí, 2 hodiny.
  • Buchty: vymyslíte tovar s dvoma vývojármi, dáte ho dizajnérovi na vykreslenie a dostanete ho pripravený. Úloha na pozadí, 3 dni.
  • Hackathon: prídeš do kancelárie, na začiatku všetkých skoordinuješ, ideš si po svojom, prečítaš si Reddit, dôležité oznámiť každú prestávku o čerstvej pizzi, odfotiť západ slnka, oznámiť finále, spoločne hlasovať a vybrať víťaza. 1 deň.
  • Pod hviezdičkou: Samozrejme, neustále myslíš na to, aby všetko dobre dopadlo. Samozrejme, nie každý uvidí vašu správu a je lepšie sa s niektorými porozprávať osobne. Samozrejme, ak vám niekto pomôže, všetko bude 2-krát jednoduchšie (mne pomohla úžasná Alena).

Menej nudná časť o rande na hackathone

Prečo 21. apríl? Tento deň je pre nás významný. Presne pred rokom, 21. apríla, sme počas prvého víkendu po spustení Federálnej reklamnej kampane prepadli záťaži. Na druhý deň, v nedeľu, bol náš tím od 8. hodiny ráno v práci. Potom sme vytvorili sundayhackathon board v Trello a začal sa týždeň práce na zmeny, 12 hodín denne. Situácia bola taká kritická, že sme sa ani nestihli najesť a kŕmili nás chalani z iných tímov.

Kodim-pizza

Podrobnejší príbeh si môžete prečítať na Stránka Fjodora Ovčinnikova (náš generálny riaditeľ). Odvtedy sme sa veľa zmenili, no teraz na dátum určite nezabudneme.

Tento rok sme sa rozhodli, že toto podujatie sa oplatí zvečniť v pamäti potomkov a podľa najlepších tradícií sme zorganizovali prvý interný hackathon v histórii Dodo, ktorý trval 10 hodín.

Najnudnejšia časť o projektoch hackathonu

Upozornenie: všetky popisy napísali chalani sami, takže autorstvo textu nie je moje.

Oleg Learning (strojové učenie)

Dima Kochnev, Sasha Andronov (@alexandronov)

Chceli vyrobiť neurónovú sieť, ktorá by bez akýchkoľvek znalostí určila, aká pizza je na fotke. Výsledkom bolo, že sme vyrobili veľmi jednoduchú a hračku - rozpozná 10 pízz, zhruba sme prišli na to, ako všetko funguje, v rámci možností za deň (~10 hodín).

Kodim-pizza

Predovšetkým sme si uvedomili, že toto odvetvie sa dostalo na úroveň, kedy si bežný vývojár môže zobrať hotové knižnice, čítať dokumentáciu a trénovať svoju neurónovú sieť bez hlbokých znalostí problematiky. A bude to fungovať dostatočne dobre na riešenie skutočných problémov.

Použité nástroje:

  • imageai — pohodlná a jednoduchá knižnica na prácu so strojovým učením a počítačovým videním.
  • Vyskúšali sme dva modely - ResNet50, Yolo.
  • Kód bol napísaný, samozrejme, v Pythone.

Mali sme 11000 3 fotiek, no takmer 4/500 z nich boli odpadky a zvyšok mal iné, nevhodné uhly. V dôsledku toho sme vzali hotový model (ktorý jednoducho vie, ako nájsť pizzu) a s jeho pomocou sme oddelili odpadky. Ďalej sa v názve fotky objavil názov pizze – roztriedili sme ju teda do priečinkov, no ukázalo sa, že názvy sa nezhodujú so skutočnosťou a museli sme ju vyčistiť ručne. Nakoniec ostalo asi 600-10 fotiek, je jasné, že je to zanedbateľné množstvo, no napriek tomu to stačilo na oddelenie XNUMX pízz od seba.

Na trénovanie siete sme vzali najlacnejší virtuálny stroj v Azure na NVIDIA Tesla K80. Trénovali na ňom 100 epoch, ale bolo jasné, že sieť sa po 50 epochách presýtila, pretože tam bol malý súbor údajov.

V skutočnosti je celý problém v nedostatku dobrých údajov.

Kodim-pizza

Možno sme si trochu poplietli pojmy, no musíme brať do úvahy, že s prácou so všetkými týmito záležitosťami nemáme vôbec žiadne skúsenosti.

GUI pre NOOBS (konzola na objednávanie pizze)

Misha Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Zostavili sme prototyp konzolovej aplikácie pre geekov, vďaka ktorej si môžete objednať pizzu cez terminál alebo príkazový riadok, prípadne ju dokonca integrovať do nasadzovacieho potrubia a po úspešnom vydaní doručiť pizzu do kancelárie.

Kodim-pizza

Práca bola rozdelená do niekoľkých častí: prišli sme na to, ako funguje naše API pre mobilné aplikácie, zostavili sme vlastné CLI pomocou oclif a nakonfigurovali zverejnenie balíka, ktorý sme zhromaždili. Posledná úloha zahŕňala pár nepríjemných minút pred koncom hackathonu. Všetko pre nás fungovalo lokálne a dokonca aj staré publikované verzie balíka fungovali, ale nové (ktoré pridali ďalšie skvelé funkcie a emotikony) odmietli fungovať. Asi 40 minút sme sa snažili zistiť, čo sa pokazilo, ale nakoniec všetko magicky fungovalo samo).

Náš maximálny program na hackathon bola skutočná objednávka pizze do kancelárie cez naše CLI. Spustili sme všetko desaťkrát na skúšobnej stolici, ale ruky sa mi stále triasli, keď som zadával príkazy vo výrobe.

Kodim-pizza

V dôsledku toho sme to konečne urobili!

Kodim-pizza

CourierGo

Anton Bruzhmelev (autor), Vanya Zverev, Gleb Lesnikov (entropia), Andrej Sarafanov

Vzali sme myšlienku „aplikácie pre kuriéra“.

Pozadie o príprave.Spočiatku som sa pýtal, aké funkcie by mohla aplikácia obsahovať? Objavil sa nasledujúci zoznam funkcií:

  • Aplikácia sa pomocou kódu prihlási do doručovacej pokladne.
  • Aplikácia okamžite zobrazuje dostupné objednávky a objednávky, ktoré je potrebné prijať.
  • Kuriér zaznamená objednávku a vezme ju na cestu.
  • Zobrazuje sa mu odhadovaný čas a či ide načas alebo nie.
  • Ukáže klientovi, že kuriér odišiel.
  • Klientovi sa začne na mape zobrazovať bod kuriéra a odhadovaný čas.
  • Kuriér môže písať klientovi do chatu z aplikácie.
  • Klient môže písať kuriérovi cez chat z aplikácie.
  • Päť minút pred príchodom dostane klient správu, že kuriér je blízko, buď pripravený.
  • Kuriér do prihlášky poznamená, že prišiel a čaká.
  • Kuriér zavolá z aplikácie jedným kliknutím a ohlási, že (stúpa, dorazil atď.)
  • Klient akceptuje objednávku a zadá PIN kód z aplikácie alebo SMS pre potvrdenie doručenia.(ako podpis) Aby kuriér nemohol v prípade meškania dokončiť doručenie vopred.
  • Objednávka je v systéme označená ako doručená.

Plus pár alternatívnych scenárov:

  • Kuriér môže označiť objednávku ako nedoručenú a vybrať dôvod.
  • Ak meškáte, kuriér vám jedným tlačidlom vystaví elektronický certifikát cez SMS. Alebo certifikát príde automaticky, ak nie je dodržaný termín dodania.

Pocit prísľubu a nevyhnutnosti tohto projektu bol, samozrejme, energizujúci.

Na druhý deň sme išli s tímom na obed a diskutovali o tom, ako bude vyzerať minimálna funkcionalita aplikácie.

V dôsledku toho bol vytvorený nasledujúci zoznam toho, čo bolo potrebné urobiť na hackathone:

  • Prihláste sa do doručovacej pokladne.
  • Zobrazenie aktuálnej polohy.
  • Odoslanie údajov do externého API (koordinuje, prijal objednávku, doručil objednávku).
  • Prijímať údaje z externého API (aktuálne objednávky kuriérov).
  • Odošlite udalosť označujúcu, že ste objednávku prevzali na doručenie/doručenie.
  • Zobrazte aktuálnu polohu kuriéra na mape na webovej stránke.

Hlavná práca, ako sa zdalo, spočívala vo vytvorení backendu, samotnej aplikácie (po diskusiách sme si na vývoj aplikácie, respektíve jej frameworku, vybrali ReactNative - expo.io, čo vám umožňuje vôbec nepísať natívny kód). Pokiaľ ide o backend, spočiatku bola nádej vo Vanya Zverev, pretože mal skúsenosti s prácou s našou šablónou služby a k8s (ktorú prácu prevzal). Andrey Sarafanov a ja sme si dali na otočku ReactNative.

Rozhodol som sa, že sa pokúsim okamžite vytvoriť funkčné úložisko pre samotný projekt. V noci o 12 som narazil na to, že geolokácia na pozadí v ReactNative nefunguje dobre, ak nepíšete natívny kód, trochu ma to zamrzelo. Potom som to pustil, keď som si uvedomil, že nečítam dokumentáciu rámca expo.io, ale ReactNative. Výsledkom je, že v priebehu večera som už pochopil, ako získať aktuálnu pozíciu v expo.io a kresliť samostatné obrazovky (na prihlásenie, zobrazenie objednávky atď.).

Kodim-pizza

Ráno na hackathone nalákali Gleba do svojho supersľubného projektu. Rýchlo prišli s plánom, čo treba urobiť.

Kodim-pizza

Urobili sme chybu, keď sme sa v súlade so šablónou projektu pokúšali komunikovať nie cez HTTP, ale cez GRPC, keďže nikto nevedel postaviť GRPC klienta pre JavaScript. Nakoniec, po asi hodine a pol, sme túto myšlienku opustili. Z tohto dôvodu začali chlapci na back-ende prerábať hotový server z GRPC na WebApi. Po pol hodine sme konečne mohli nastaviť komunikáciu medzi aplikáciou a backendom, hľa. Ale v tom istom čase Gleb takmer dokončoval nasadenie na k8s a plus automatické nasadenie odovzdania na master. 🙂

Ako úložisko sme zvolili MySQL, aby sme neriskovali aspoň s databázou (napadlo nás CosmosDb).

Kodim-pizza

V súhrne:

  • Implementované ukladanie aktuálnych súradníc kuriéra z aplikácie do databázy.
  • Nainštalovali sme RabbitMQ a prihlásili sme sa na odber správ o vyzdvihnutí objednávky kuriérom, aby sa objednávka od kuriéra okamžite zobrazila v aplikácii.
  • Čas doručenia objednávky sme začali ukladať do našej databázy po stlačení tlačidla kuriérom v aplikácii. Nemali sme čas pridať odoslanie udalosti späť na rebbit, že objednávka bola doručená.
  • Urobil som zobrazenie mapy na stránke aktuálnej objednávky na webe s aktuálnou pozíciou kuriéra. Táto funkcionalita však zostala trochu nedokončená, keďže nebolo možné nakonfigurovať CORS v prostredí na príjem súradníc z našej novej služby.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Arťom Trofimushkin

Chceli sme implementovať poskytovateľa OpenID Connect, keďže v súčasnosti používame autentifikačný protokol vlastnej konštrukcie, čo spôsobuje množstvo ťažkostí: vlastné klientske knižnice, nepohodlná práca zo strany externých partnerov, možné bezpečnostné problémy (napokon , OAuth2.0 a OpenID Connect v referenčnej implementácii možno považovať za bezpečné, ale nie som si istý našim riešením).

Kodim-pizza

Vytvorili sme samostatnú službu emulujúcu službu na ukladanie osobných údajov, aby sme vytvorili malý Country-Agnostic model poskytovateľa autentifikácie, ktorý by prešiel na samostatnú službu pre osobné údaje (to by v budúcnosti umožnilo mať jednu službu s do ktorého by ste sa mohli prihlásiť registráciou účtu v ktorejkoľvek krajine a zároveň dodržiavať GDPR a ďalšie federálne zákony). Urobili sme túto časť, rovnako ako poskytovateľ, a úspešne sme ich navzájom prepojili. Ďalej bolo potrebné vytvoriť API, ktoré by bolo chránené tokenmi vydanými poskytovateľom, podporovalo ich introspekciu cez poskytovateľa a vracalo chránené údaje, ak požiadavka spĺňala autorizačné politiky (kontrolujeme, či je používateľ autentifikovaný podľa schémy nositeľa , jeho token obsahuje určitý rozsah + y Samotný používateľ má povolenie, ktoré umožňuje uskutočniť hovor). Aj táto časť bola dokončená. Posledným komponentom bol JavaScript klient, ktorý by dostal token, pomocou ktorého by zavolal chránené API. Na túto časť sme nemali čas. To znamená, že celá funkčná časť bola pripravená, ale front-endová časť nebola pripravená na demonštráciu funkčnosti celého systému.

E-E-E (hračka)

Dima Afonchenko, Sasha Konovalov

Vyrobili sme mini-hračku na yunke, kde šikovné ruky hádžu klobásu na pizzu. Ak si klobásu nasadíte nesprávne, na obrazovke sa zobrazí smutná správa „Odmietnuté“ a ak bola celá klobása nasadená správne, objaví sa náhodný fakt o pizzi.

Kodim-pizza

Chceli sme urobiť druhú úroveň s hádzaním paradajok, ale nemali sme čas.

Kodim-pizza

Krátke pokračovanie: kto vyhral?

Pred hackathonom sme sa s chalanmi rozprávali a spýtal som sa, akú cenu by chceli dostať, ak vyhrajú. Ukázalo sa, že najcennejšou cenou bude „cesta k jedlu“.

Kodim-pizza

Očakávajte preto, že už čoskoro ohlásime hru s rukami, ktoré dávajú feferónky na pizzu.

Ako si pozorný čitateľ mohol všimnúť, vyhral tím „E-E-E (hračka)“. Gratulujem chalani!

Do prieskumu sa môžu zapojiť iba registrovaní užívatelia. Prihlásiť saProsím.

Ktorý projekt sa vám páčil najviac?

  • Oleg Learning (strojové učenie)

  • GUI pre NOOBS

  • CourierGo

  • M87

  • E-E-E

Hlasovalo 5 užívateľov. 3 používatelia sa zdržali hlasovania.

Zdroj: hab.com

Pridať komentár