{"id":34626,"date":"2019-10-31T21:59:30","date_gmt":"2019-10-31T18:59:30","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kodim-pitstsa\/"},"modified":"2019-10-31T21:59:30","modified_gmt":"2019-10-31T18:59:30","slug":"kodim-pitstsa","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sk\/blog\/news\/kodim-pitstsa","title":{"rendered":"K\u00f3dujeme - pizza","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ahoj, Habr. N\u00e1hodou jsme uspo\u0159\u00e1dali n\u00e1\u0161 prvn\u00ed intern\u00ed hackathon. Rozhodla jsem se pod\u011blit o sv\u00e9 pot\u00ed\u017ee a z\u00e1v\u011bry z p\u0159\u00edpravy na n\u011bj b\u011bhem 2 t\u00fddn\u016f a tak\u00e9 o projektech, kter\u00e9 vznikly.<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/938168da11e489bcf2112a11bc3f220e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Nudn\u00e1 \u010d\u00e1st pro ty, kdo se zaj\u00edmaj\u00ed o marketing<\/h2>\n<p>\nZa\u010dnu mal\u00fdm p\u0159\u00edb\u011bhem. <\/p>\n<p>Za\u010d\u00e1tek dubna. Na na\u0161em kancel\u00e1\u0159sk\u00e9m prostoru prob\u00edh\u00e1 prvn\u00ed hackathon MskDotNet Community. Bitva o Tatooine je v pln\u00e9m proudu, tentokr\u00e1t v na\u0161\u00ed galaxii. Sobota. 20 t\u00fdm\u016f. Pizza. V\u0161echno je velmi p\u0159\u00e1telsk\u00e9 (<noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/album-125321990_262572840\">d\u016fkazy<\/a><\/noindex>). Nafukovac\u00ed R2-D2 se potuluje po m\u00edstnosti. T\u00fdmy p\u00ed\u0161\u00ed ty nejp\u0159esn\u011bj\u0161\u00ed algoritmy, aby zvl\u00e1dly nejnebezpe\u010dn\u011bj\u0161\u00ed z\u00e1vod na map\u011b. Posouv\u00e1me start prvn\u00edch z\u00e1vod\u016f. Su\u0161enky a k\u00e1va zachra\u0148uj\u00ed. S organiz\u00e1tory jsme o\u010dek\u00e1vali, \u017ee v sobotu mnoz\u00ed odejdou po ob\u011bd\u011b. Ale ne. 12 hodin k\u00f3dov\u00e1n\u00ed je za n\u00e1mi. Fin\u00e1le. N\u011bco vypad\u00e1v\u00e1, n\u011bco se nespou\u0161t\u00ed. Ale v\u0161ichni jsou \u0161\u0165astn\u00ed. Na\u0161e t\u00fdm v\u00edt\u011bz\u00ed. Jsme \u0161\u0165astn\u00ed dvojn\u00e1sob. <\/p>\n<p>Sd\u00edl\u00edm radost na Slacku a do hlavy se mi dere my\u0161lenka: \u201eMus\u00edme uspo\u0159\u00e1dat sv\u016fj hackathon.\u201c P\u00ed\u0161u na\u0161emu CTO Sa\u0161ovi. Ticho. <\/p>\n<p>R\u00e1no. Piji k\u00e1vu v kancel\u00e1\u0159i. Vid\u00edm Sa\u0161u p\u0159ich\u00e1zej\u00edc\u00edho zezadu. \u201eLiza, to je skv\u011bl\u00e9! Pr\u00e1v\u011b m\u00e1me 21. dubna d\u016fle\u017eit\u00fd datum. D\u011blejme to!\u201c Co\u017ee!? Tak rychle? Co? Mus\u00edm let\u011bt do Syktyvkaru na st\u00e1\u017e v polovin\u011b dubna. A co na tom z\u00e1le\u017e\u00ed! Jdeme do toho.<\/p>\n<p>Zb\u00fdvaj\u00ed 2 t\u00fddny. Nikdy jsem nebyla jedin\u00fdm organiz\u00e1torem hackathonu. A\u0165 u\u017e je intern\u00ed. \u010ctu \u010dl\u00e1nky na toto t\u00e9ma. Hr\u016fza. Pot\u0159ebuje to n\u011bkolik m\u011bs\u00edc\u016f. Pot\u0159ebuje to n\u011bkolik lid\u00ed. Je pot\u0159eba promyslet mer\u010d, ceny, podm\u00ednky, rozvrh, zaujmout, pochopit c\u00edl, rozpo\u010dty. Mo\u017en\u00e1 se dokonce i vyrovnat se smyslem \u017eivota. Ur\u010dit\u011b to nestihnu. A zat\u00edmco jsi \u010dten\u00ed a p\u0159ipravoval se, u\u017e uplynul t\u00fdden. Je nejvy\u0161\u0161\u00ed \u010das hodit \u010dl\u00e1nky za hlavu a za\u010d\u00edt n\u011bco d\u011blat. <\/p>\n<p><b class=\"spoiler_title\">Tady m\u00e1te n\u00e1\u0161 checklist pro kon\u00e1n\u00ed intern\u00edho hackathonu za 1 t\u00fdden<\/b><\/p>\n<ul>\n<li><b>Pl\u00e1n<\/b>: v klidu si sednete a nap\u00ed\u0161ete seznam toho, co je t\u0159eba ud\u011blat pro hackathon. <i>30 minut<\/i>.<\/li>\n<li><b>\u00daloha<\/b>: \u00fa\u010dastn\u00edci sami navrhuj\u00ed a vyb\u00edraj\u00ed projekty, kter\u00e9 cht\u011bj\u00ed vytvo\u0159it, v Google Sheets. <i>Pozad\u00ed \u00fakolu, 2 hodiny<\/i>.<\/li>\n<li><b>Rozvrh<\/b>: na koleni p\u00ed\u0161ete kr\u00e1tk\u00e9 \u010dasov\u00e9 roz\u010dlen\u011bn\u00ed s ohledem na 3 p\u0159est\u00e1vky a fin\u00e1le. <i>20 minut<\/i>.<\/li>\n<li><b>Pr\u00edkazy<\/b>: publikujete zpr\u00e1vu o hackathonu s rozvrhem od CTO v IT kan\u00e1lech na Slacku\/po\u0161t\u011b\/etc a vytv\u00e1\u0159\u00edte zvl\u00e1\u0161tn\u00ed kan\u00e1l pro hackathon. V n\u011bm se v\u0161ichni rozd\u011bluj\u00ed do t\u00fdm\u016f, zat\u00edmco ti, kdo se nerozhodli, to ud\u011blaj\u00ed b\u011bhem prvn\u00edch 5 minut hackathonu. <i>Pozad\u00ed \u00fakolu, 2 hodiny<\/i>.<\/li>\n<li><b>D\u00e1re\u010dky<\/b>: vymysl\u00ed\u0161 merch s dvoma v\u00fdvoj\u00e1rmi, odovzd\u00e1\u0161 ho dizajn\u00e9rovi na spracovanie, dostane\u0161 hotov\u00fd. <i>Pozadia \u00faloha, 3 dni<\/i>.<\/li>\n<li><b>Hackathon<\/b>: pr\u00edde\u0161 do kancel\u00e1rie, na za\u010diatku koordinuje\u0161 v\u0161etk\u00fdch, venuje\u0161 sa svojim z\u00e1le\u017eitostiam, \u010d\u00edta\u0161 Reddit, s d\u00f4le\u017eit\u00fdm v\u00fdrazom oznamuje\u0161 po\u010das ka\u017ed\u00e9ho prest\u00e1vku \u010derstv\u00fa pizzu, fotografuje\u0161 z\u00e1pad slnka, vyhlasuje\u0161 fin\u00e1le, spolo\u010dne hlasujete a vyber\u00e1te v\u00ed\u0165aza. <i>1 de\u0148<\/i>.<\/li>\n<li><b>Pod hviezdi\u010dkou<\/b>: samozrejme, neust\u00e1le mysl\u00ed\u0161 na to, aby v\u0161etko prebehlo hladko. Samozrejme, nie v\u0161etci uvidia tvoju spr\u00e1vu a s niektor\u00fdmi je lep\u0161ie hovori\u0165 osobne. Samozrejme, ak ti niekto pom\u00f4\u017ee, v\u0161etko bude dvakr\u00e1t jednoduch\u0161ie (pomoc mi poskytla skvel\u00e1 Alena).<\/li>\n<\/ul>\n<h2>Menej nudn\u00e1 \u010das\u0165 o d\u00e1tume hackathonu<\/h2>\n<p>\nPre\u010do 21. apr\u00edla? Tento de\u0148 je pre n\u00e1s v\u00fdznamn\u00fd. Presne pred rokom, 21. apr\u00edla, sme zlyhali pod z\u00e1\u0165a\u017eou po\u010das prv\u00e9ho v\u00edkendu po spusten\u00ed Feder\u00e1lnej Reklamnej Kampane. Na druh\u00fd de\u0148, v nede\u013eu, bola na\u0161a t\u00edm v pr\u00e1ci od 8 r\u00e1no. Vtedy sme v Trello vytvorili n\u00e1stenku sundayhackathon a za\u010dal t\u00fd\u017ede\u0148 zmennej pr\u00e1ce po 12 hod\u00edn denne. Situ\u00e1cia bola tak kritick\u00e1, \u017ee sme nemali \u010das ani na jedlo a boli sme k\u0155men\u00ed chlapcami z in\u00fdch t\u00edmov.<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/9d611c134267d1377a95f21a57c69687.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPodrobnej\u0161\u00ed pr\u00edbeh si m\u00f4\u017eete pre\u010d\u00edta\u0165 na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/story.php?story_fbid=10215961419809495&amp;id=1267477281\">str\u00e1nke Fiodora Ov\u010dinnikova<\/a><\/noindex> (n\u00e1\u0161ho CEO). Odvtedy sme ve\u013ea zmenili, ale na tento d\u00e1tum ur\u010dite nezabudneme.<\/p>\n<p>Tento rok sme sa rozhodli, \u017ee tento event stoj\u00ed za to uchova\u0165 v pam\u00e4ti bud\u00facich gener\u00e1ci\u00ed a v najlep\u0161\u00edch trad\u00edci\u00e1ch sme usporiadali prv\u00fd v hist\u00f3rii Dodo intern\u00fd hackathon, ktor\u00fd trval 10 hod\u00edn. <\/p>\n<h2>Najz\u00e1bavnej\u0161ia \u010das\u0165 o projektoch hackathonu<\/h2>\n<p>\n<i>N\u00e1vrh: v\u0161etky popisy p\u00edsali samotn\u00ed chalani, tak\u017ee autorsk pr\u00e1vny text nie je m\u00f4j.<\/i><\/p>\n<h4>Oleg L\u00f6rning (strojov\u00e9 u\u010denie)<\/h4>\n<p>\n<i>Dima Kochnyev, Sasha Andronov (@alexandronov)<\/i><\/p>\n<p>Chceli sme vytvori\u0165 neur\u00f3nov\u00fa sie\u0165, ktor\u00e1 by ur\u010dovala, ak\u00e1 pizza je na fotografii bez ak\u00fdchko\u013evek znalost\u00ed. Nakoniec sme vytvorili ve\u013emi jednoduch\u00fa a hra\u010dku \u2013 rozpozn\u00e1va 10 pizz, zhruba sme sa zorientovali, ako to v\u0161etko funguje, \u010do je mo\u017en\u00e9 za de\u0148 (~10 hod\u00edn).<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/361e89bc6084abdc0e3ac3fdfb7863d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKonkr\u00e9tne sme pochopili, \u017ee priemysel dosiahol \u00farove\u0148, ke\u010f be\u017en\u00fd v\u00fdvoj\u00e1r m\u00f4\u017ee vzia\u0165 hotov\u00e9 kni\u017enice, pre\u010d\u00edta\u0165 si dokument\u00e1ciu a vytr\u00e9nova\u0165 svoju neur\u00f3nov\u00fa sie\u0165 bez hlbok\u00fdch znalost\u00ed predmetu. A bude dostato\u010dne dobre fungova\u0165 pri rie\u0161en\u00ed re\u00e1lnych \u00faloh.<\/p>\n<p>N\u00e1stroje, ktor\u00e9 sme pou\u017e\u00edvali: <\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/imageai.readthedocs.io\/en\/latest\/index.html\">imageai<\/a><\/noindex> \u2014 pohodln\u00e1 a jednoduch\u00e1 kni\u017enica na pr\u00e1cu s strojov\u00fdm u\u010den\u00edm a po\u010d\u00edta\u010dov\u00fdm viden\u00edm.<\/li>\n<li>Vysk\u00fa\u0161ali sme modely \u2013 ResNet50, Yolo.<\/li>\n<li>K\u00f3d sme p\u00edsali, samozrejme, v Pythone.<\/li>\n<\/ul>\n<p>\nMali sme 11000 fotiek, ale medzi nimi sa takmer 3\/4 uk\u00e1zali ako odpad, a v t\u00fdch zost\u00e1vaj\u00facich boli r\u00f4zne nevhodn\u00e9 uhly. Nakoniec sme zobrali hotov\u00fd model (ktor\u00fd len dok\u00e1\u017ee n\u00e1js\u0165 pizzu) a s jeho pomocou sme oddelili ten najhor\u0161\u00ed materi\u00e1l. N\u00e1sledne sme pod\u013ea n\u00e1zvu fotky, ktor\u00fd obsahoval n\u00e1zov pizze, rozdelili do prie\u010dinkov, ale uk\u00e1zalo sa, \u017ee n\u00e1zvy sa s realitou nezhoduj\u00fa, a tak sme museli popracova\u0165 ru\u010dne. Nakoniec ostalo asi 500-600 fotiek, \u010do je jasne zanedbate\u013en\u00e9 mno\u017estvo, ale aj tak to bolo dos\u0165 na to, aby sme oddelili 10 p\u00edz z jednej od druhej.<\/p>\n<p>Na \u0161kolenie siete sme vzali najlacnej\u0161iu virtu\u00e1lnu ma\u0161inu v Azure s NVIDIA Tesla K80. Na nej sme tr\u00e9novali po\u010das 100 epoch, ale bolo vidno, \u017ee sie\u0165 u\u017e po 50 epoch\u00e1ch stratila svoju kapacitu, kv\u00f4li mal\u00e9mu d\u00e1tov\u00e9mu s\u00faboru.<\/p>\n<p>Vlastne \u2013 cel\u00fdm probl\u00e9mom je nedostatok kvalitn\u00fdch d\u00e1t.<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/b89ba378674df1b3e899a93fc0fce86c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017eno sme tro\u0161ku zamie\u0148ali term\u00edny, ale treba bra\u0165 do \u00favahy, \u017ee v\u00f4bec nem\u00e1me sk\u00fasenosti so v\u0161etk\u00fdmi t\u00fdmito vecami.<\/p>\n<h4>GUI for NOOBS (termin\u00e1l pre objedn\u00e1vku pizze)<\/h4>\n<p>\n<i>Misha Kuma\u010dov (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/ceridan\/\" class=\"user_link\">Ceridan<\/a><\/noindex>), \u017denya Bikkinin, \u017denya Vasiliev<\/i><\/p>\n<p>Vytvorili sme prototyp konzolovej aplik\u00e1cie pre geekov, v\u010faka ktorej si m\u00f4\u017eete objedna\u0165 pizzu cez termin\u00e1l alebo pr\u00edkazov\u00fd riadok, alebo ju dokonca integrova\u0165 do deploy pipeline a pri \u00faspe\u0161nom releese doru\u010dova\u0165 pizzu do kancel\u00e1rie.<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/14186ccb66d074923f89c1da47d594a1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPr\u00e1ca sa rozdelila na nieko\u013eko \u010dast\u00ed: zaoberali sme sa t\u00fdm, ako funguje n\u00e1\u0161 API pre mobiln\u00e9 aplik\u00e1cie, vytvorili sme vlastn\u00fd CLI s pomocou <noindex><a rel=\"nofollow\" href=\"https:\/\/oclif.io\">oclif<\/a><\/noindex> a nastavovali zverejnenie n\u00e1mi vytvoren\u00e9ho bal\u00edka. S poslednou \u00falohou bolo nieko\u013eko nepr\u00edjemn\u00fdch min\u00fat bli\u017e\u0161ie ku koncu hackathonu. V\u0161etko n\u00e1m fungovalo lok\u00e1lne a dokonca aj star\u00e9 publikovan\u00e9 verzie bal\u00edka, ale nov\u00e9 (v ktor\u00fdch bolo pridan\u00fdch viac skvel\u00fdch funkci\u00ed a smajl\u00edkov) nechceli fungova\u0165. Str\u00e1vili sme asi 40 min\u00fat sna\u017een\u00edm sa pochopi\u0165, \u010do sa pokazilo, ale nakoniec to magicky za\u010dalo fungova\u0165 samo).<\/p>\n<p>Na\u0161im maxim\u00e1lnym cie\u013eom po\u010das hackathonu bola skuto\u010dn\u00e1 objedn\u00e1vka pizze do kancel\u00e1rie cez na\u0161u CLI. Desa\u0165kr\u00e1t sme v\u0161etko prehnali na testovacom prostred\u00ed, ale aj tak sa mi trasli ruky, ke\u010f som zad\u00e1val pr\u00edkazy v produkcii.<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/5392e269446fcd09ceb9e16a8f9c4101.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAko v\u00fdsledok \u2013 predsa sme to dok\u00e1zali!<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/c966b190a6fe8a2f88a3973305cd03fb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>CourierGo<\/h4>\n<p>\n<i>Anton Bruzmel\u00ebv (author), Vanya Zverev, Gleb Lesnikov (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/entropy\/\" class=\"user_link\">entropy<\/a><\/noindex>), Andrey Sarafanov<\/i><\/p>\n<p>We took the idea of \"Courier Application.\"<\/p>\n<p><b class=\"spoiler_title\">Background preparation.<\/b>Initially, I considered what features could be in the application. A list of functionalities emerged:<\/p>\n<ul>\n<li>The application logs into the delivery service with a code.<\/li>\n<li>Available orders and orders that need to be picked up are displayed in the app.<\/li>\n<li>The courier marks the order and takes it on the trip.<\/li>\n<li>They are shown the estimated time and whether they will make it on time.<\/li>\n<li>The client sees that the courier has departed.<\/li>\n<li>The client starts seeing the courier's location on the map and the estimated time.<\/li>\n<li>The courier can chat with the client from the app.<\/li>\n<li>The client can chat with the courier from the app.<\/li>\n<li>Five minutes before arrival, the client receives a message that the courier is close, please be ready.<\/li>\n<li>The courier marks in the application that they have arrived and are waiting.<\/li>\n<li>The courier can call from the app with one click and inform that they are arriving.<\/li>\n<li>The client accepts the order and enters the pin code from the app or SMS to confirm delivery (like a signature). This is to prevent the courier from completing the delivery early if they are late.<\/li>\n<li>The order is marked as delivered in the system.<\/li>\n<\/ul>\n<p>Plus a couple of alternative scenarios:<\/p>\n<ul>\n<li>The courier can mark the order as undelivered and choose a reason.<\/li>\n<li>If the courier is late, they can issue an electronic certificate via SMS with one button. Or the certificate is automatically sent if the delivery deadline is not met.<\/li>\n<\/ul>\n<p>\nThe sense of the project's potential and necessity surely energized us.<\/p>\n<p>The next day, we went to lunch with the team and discussed what the minimal functionality of the application would look like. <\/p>\n<p>In the end, the following list of tasks that needed to be accomplished at the hackathon emerged:<\/p>\n<ul>\n<li>Login to the delivery service.<\/li>\n<li>Display the current location.<\/li>\n<li>Send data to the external API (coordinates, order picked up, order delivered).<\/li>\n<li>Receive data from the external API (current orders of the courier).<\/li>\n<li>Send an event indicating that the order has been picked up for delivery\/delivered.<\/li>\n<li>Display the current location of the courier on the map on the website.<\/li>\n<\/ul>\n<p>\nThe main work, as it seemed, was to create the backend, the application itself (after discussions, we chose ReactNative for the application development, specifically a framework over it \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/expo.io\/\">expo.io<\/a><\/noindex>, \u010do umo\u017e\u0148uje v\u00f4bec nep\u00edsa\u0165 nat\u00edvny k\u00f3d). Z h\u013eadiska backendu bola p\u00f4vodne n\u00e1dej na Vaniu Zvereva, ako sk\u00fasen\u00e9ho v pr\u00e1ci s na\u0161ou \u0161abl\u00f3nou slu\u017eby a k8s (\u010do si vzal na seba). ReactNative sme vysk\u00fa\u0161ali s Andrejom Sarafanovom.<\/p>\n<p>Rozhodol som sa okam\u017eite vytvori\u0165 pracovn\u00fd repozit\u00e1r pre samotn\u00fd projekt. O polnoci som narazil na probl\u00e9m, \u017ee geolok\u00e1cia v ReactNative zle funguje na pozad\u00ed, ak nep\u00ed\u0161ete nat\u00edvny k\u00f3d, trochu ma to frustrovalo. Potom ma to pustilo, ke\u010f som si uvedomil, \u017ee \u010d\u00edtam dokument\u00e1ciu nie pre framework expo.io, ale pre ReactNative. Nakoniec som u\u017e v ten ve\u010der pochopil, ako z\u00edska\u0165 aktu\u00e1lnu polohu v expo.io a vykresli\u0165 samostatn\u00e9 obrazovky (pre prihl\u00e1senie, zobrazenie objedn\u00e1vky at\u010f.).<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/2412edc5937b44e141d719269565dfee.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nR\u00e1no n\u00e1s na hackathone do svojho ultraperspekt\u00edvneho projektu vtiahol Gleb. R\u00fdchlo sme sp\u00edsali pl\u00e1n toho, \u010do je potrebn\u00e9 urobi\u0165.<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/4bc0ebef3ed6b661bd25ef75ac6d536d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUrobili sme chybu, ke\u010f sme sa v s\u00falade so \u0161abl\u00f3nou projektu pok\u00fasili robi\u0165 komunik\u00e1ciu nie cez HTTP, ale cez GRPC, preto\u017ee nikto nevedel zostavi\u0165 GRPC klienta pre JavaScript. Nakoniec, po pribli\u017ene hodine a pol, sme t\u00fato my\u0161lienku opustili. Z tohto d\u00f4vodu chlapci za\u010dali na backende prestavova\u0165 existuj\u00faci server z GRPC na WebApi. Po pol hodine sme nakoniec dok\u00e1zali nastavi\u0165 komunik\u00e1ciu aplik\u00e1cie s backendom, \u00f3 z\u00e1zrak. Ale z\u00e1rove\u0148 Gleb takmer dokon\u010dil nasadenie do k8s a automatick\u00e9 nasadenie po commite do masteru. \ud83d\ude42<\/p>\n<p>Ako \u00falo\u017eisko sme si vybrali MySQL, aby sme aspo\u0148 neriskovali s datab\u00e1zou (mali sme my\u0161lienky na CosmosDb).<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/2ae381b2006330915ae38d55f2ac08cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNakoniec: <\/p>\n<ul>\n<li>Realizovali sme ukladanie aktu\u00e1lnych s\u00faradn\u00edc kuri\u00e9ra z aplik\u00e1cie do datab\u00e1zy.<\/li>\n<li>Pripojili sme RabbitMQ a prihl\u00e1sili sa na spr\u00e1vy o prevzat\u00ed objedn\u00e1vky kuri\u00e9rom, aby sme ju ihne\u010f zobrazili kuri\u00e9rovi v aplik\u00e1cii.<\/li>\n<li>Za\u010dali sme si do datab\u00e1zy uklada\u0165 \u010das doru\u010denia objedn\u00e1vky, po tom, \u010do kuri\u00e9r stla\u010dil tla\u010didlo v aplik\u00e1cii. Nestihli sme prida\u0165 odosielanie udalosti sp\u00e4\u0165 do RabbitMQ o tom, \u017ee objedn\u00e1vka bola doru\u010den\u00e1.<\/li>\n<li>Urobil som zobrazenie mapy na str\u00e1nke currentorder na str\u00e1nke s aktu\u00e1lnou polohou kuri\u00e9ra. Ale t\u00e1to funkcia zostala trochu nedokon\u010den\u00e1, preto\u017ee sa n\u00e1m na prostred\u00ed nepodarilo nastavi\u0165 CORS na z\u00edskanie s\u00faradn\u00edc z na\u0161ej novej slu\u017eby.<\/li>\n<\/ul>\n<p><\/p>\n<h4>M87<\/h4>\n<p>\n<i>Roma Bukin, Go\u0161a Polevoj (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/georgepolevoy\/\" class=\"user_link\">georgepolevoy<\/a><\/noindex>), Artyom Trofimushkin<\/i><\/p>\n<p>Chceli sme implementova\u0165 poskytovate\u013ea OpenID Connect, preto\u017ee moment\u00e1lne pou\u017e\u00edvame vlastn\u00fd autentifika\u010dn\u00fd protokol, \u010do sp\u00f4sobuje nieko\u013eko \u0165a\u017ekost\u00ed: prisp\u00f4soben\u00e9 klientsk\u00e9 kni\u017enice, nepr\u00edjemn\u00e1 spolupr\u00e1ca zo strany extern\u00fdch partnerov a potenci\u00e1lne probl\u00e9my s bezpe\u010dnos\u0165ou (napokon, OAuth2.0 a OpenID Connect v \u0161tandardnej implement\u00e1cii m\u00f4\u017eeme pova\u017eova\u0165 za bezpe\u010dn\u00e9, ale \u010do sa t\u00fdka n\u00e1\u0161ho rie\u0161enia, nie som si ist\u00fd).<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/b7247acfc91045f1040535d1f404c64a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVytvorili sme samostatn\u00fa slu\u017ebu, ktor\u00e1 emuluje slu\u017ebu na ukladanie osobn\u00fdch \u00fadajov, aby sme vytvorili mal\u00fd model Country-Agnostic poskytovate\u013ea autentifik\u00e1cie, ktor\u00fd by z\u00edskaval osobn\u00e9 \u00fadaje z oddelenej slu\u017eby (toto by v bud\u00facnosti umo\u017enilo ma\u0165 jednu slu\u017ebu, prostredn\u00edctvom ktorej by bolo mo\u017en\u00e9 prihl\u00e1si\u0165 sa pomocou \u00fa\u010dtu v akejko\u013evek krajine a z\u00e1rove\u0148 splni\u0165 GDPR a in\u00e9 z\u00e1kony). T\u00fato \u010das\u0165 sme urobili, rovnako ako poskytovate\u013ea, a \u00faspe\u0161ne ich prepojili. \u010ealej bolo potrebn\u00e9 vytvori\u0165 API, ktor\u00e9 by bolo chr\u00e1nen\u00e9 tokenmi vyd\u00e1van\u00fdmi poskytovate\u013eom, podporova\u0165 ich introspekciu cez poskytovate\u013ea a odovzd\u00e1va\u0165 chr\u00e1nen\u00e9 \u00fadaje, ak by po\u017eiadavka vyhovovala autoriza\u010dn\u00fdm politik\u00e1m (kontrolujeme, \u017ee pou\u017e\u00edvate\u013e je autentifikovan\u00fd pod\u013ea sch\u00e9my Bearer, v jeho tokene sa nach\u00e1dza ur\u010dit\u00fd scope + s\u00e1m pou\u017e\u00edvate\u013e m\u00e1 povolenie na vykonanie volania). T\u00e1to \u010das\u0165 bola tie\u017e \u00faspe\u0161ne dokon\u010den\u00e1. Poslednou s\u00fa\u010das\u0165ou bol JavaScript klient, ktor\u00fd by bol vybaven\u00fd tokenom, ktor\u00fd by pou\u017e\u00edval na volanie chr\u00e1nen\u00e9ho API. T\u00fato \u010das\u0165 sme nestihli urobi\u0165. To znamen\u00e1, \u017ee cel\u00e1 funk\u010dn\u00e1 \u010das\u0165 bola pripraven\u00e1, ale nebola hotov\u00e1 front-endov\u00e1 \u010das\u0165 na demon\u0161tr\u00e1ciu funk\u010dnosti cel\u00e9ho syst\u00e9mu.<\/p>\n<h4>E-E-E (hra\u010dka)<\/h4>\n<p>\n<i>Dima Afon\u010denko, Sasha Konovalov<\/i><\/p>\n<p>Vytvorili sme mini-hra\u010dku na yunke, kde hrav\u00e9 ruky h\u00e1d\u017eu klob\u00e1sku na pizzu. Ak si klob\u00e1sku hodil nespr\u00e1vne, na obrazovke sa objav\u00ed smutn\u00fd n\u00e1pis 'Zamietnut\u00e9', a ak je cel\u00e1 klob\u00e1sa spr\u00e1vne pridan\u00e1, objav\u00ed sa n\u00e1hodn\u00fd fakt o pizzi.<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/1c9daf62d4907f9a13de07ac0dd2a14e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nChceli sme spravi\u0165 druh\u00fa \u00farove\u0148 s prid\u00e1van\u00edm paradajok, ale nestihli sme to.<\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/e3d5028c8043ab1192bbb8cb31918def.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Kr\u00e1tke pokra\u010dovanie: kto vyhral?<\/h2>\n<p>\nPred hackat\u00f3nom sme sa rozpr\u00e1vali s chlapcami a p\u00fdtala som sa, ak\u00fa cenu by chceli z\u00edska\u0165, ak vyhraj\u00fa. Uk\u00e1zalo sa, \u017ee najcennej\u0161ou cenou by bola 'cesta do produkcie'. <\/p>\n<p><img decoding=\"async\" alt=\"K\u00f3dujeme - pizza\" src=\"\/wp-content\/uploads\/2019\/05\/814f28de3020cc16ce0108efdbbd963d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPreto v bl\u00edzkej dobe o\u010dak\u00e1vajte od n\u00e1s ozn\u00e1menie hry so z\u00e1palkami, ktor\u00e9 posyp\u00e1vaj\u00fa pizzu pepperon\u00edm.<\/p>\n<blockquote><p>Ako mohol v\u0161imn\u00fa\u0165 pozorn\u00fd \u010ditate\u013e, vyhral t\u00edm \u201eE-E-E (hra)\u201c. Gratulujeme chlapcom!<\/p><\/blockquote>\n<p class=\"for_users_only_msg\">Len registrovan\u00ed pou\u017e\u00edvatelia sa m\u00f4\u017eu z\u00fa\u010dastni\u0165 prieskumu. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prihl\u00e1ste sa<\/a><\/noindex>, pros\u00edm.<\/p>\n<h2 class=\"default-block__polling-title\">Ktor\u00fd projekt sa v\u00e1m p\u00e1\u010dil najviac?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Oleg L\u00f6rning (strojov\u00e9 u\u010denie)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    GUI pre NOOBs<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    CourierGo<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    M87<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    E-E-E<\/p>\n<\/li>\n<\/ul>\n<p>    Hlasovalo 5 pou\u017e\u00edvate\u013eov. Zdr\u017eali sa 3 pou\u017e\u00edvatelia.<br \/>\n<br \/>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/449344\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u044b \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d. \u0420\u0435\u0448\u0438\u043b\u0430 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0431\u043e\u043b\u044f\u043c\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438 \u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043a \u043d\u0435\u043c\u0443 \u0437\u0430 2 \u043d\u0435\u0434\u0435\u043b\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c. \u0421\u043a\u0443\u0447\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u043c \u041d\u0430\u0447\u043d\u0443 \u0441 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u041d\u0430\u0447\u0430\u043b\u043e \u0430\u043f\u0440\u0435\u043b\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0432 \u043e\u0444\u0438\u0441\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d MskDotNet Community. \u0411\u0438\u0442\u0432\u0430 \u0437\u0430 \u0422\u0430\u0442\u0443\u0438\u043d \u0432 \u0440\u0430\u0437\u0433\u0430\u0440\u0435, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26093,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-34626","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.5 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u044b \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sk\/blog\/news\/kodim-pitstsa\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u0434\u0438\u043c\u2013\u043f\u0438\u0446\u0446\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u044b \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sk\/blog\/news\/kodim-pitstsa\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:59:30+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:59:30+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47K\u00f3dujeme\u2013pizzou | ProHoster","description":"Ahoj, Habr. N\u00e1hodne sme usporiadali prv\u00fd intern\u00fd hackathon.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/news\/kodim-pitstsa","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u0434\u0438\u043c\u2013\u043f\u0438\u0446\u0446\u0430 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u044b \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d.","og:url":"https:\/\/prohoster.info\/sk\/blog\/news\/kodim-pitstsa","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:59:30+00:00","article:modified_time":"2019-10-31T18:59:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34626","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 19:59:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:17:24","updated":"2026-01-21 19:59:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/34626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=34626"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/34626\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/26093"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=34626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=34626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=34626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}