{"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\/sl\/blog\/news\/kodim-pitstsa","title":{"rendered":"Kodim \u2013 pica","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Pozdravljen, Habr. Nepredvideno smo izvedli na\u0161 prvi interni hackathon. Odlo\u010dila sem se deliti z vami svoje te\u017eave in ugotovitve o pripravi nanj v 2 tednih, pa tudi o projektih, ki so nastali.<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" 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>Dolga \u010drtica za tiste, ki jih zanima marketing.<\/h2>\n<p>\nZa\u010dela bom z majhno zgodbo. <\/p>\n<p>Za\u010detek aprila. V na\u0161em uradu poteka prvi hackathon MskDotNet Community. Bitka za Tatooine je v polnem teku, tokrat v na\u0161i galaksiji. Sobota. 20 ekip. Pica. Vse zelo prijetno (<noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/album-125321990_262572840\">dokazi<\/a><\/noindex>). Napihljivi R2-D2 se maje po dvorani. Ekipe pi\u0161ejo najbolj pravilne algoritme, da premagajo najnevarnej\u0161o dirko na zemljevidu. Za\u010denjamo s prvimi vo\u017enjami. Pi\u0161koti in kava re\u0161ujejo situacijo. V pri\u010dakovanju smo bili, da bodo mnogi v soboto od\u0161li po kosilu. A ne. 12 ur kodiranja je za nami. Finale. Nekaj se izklaplja, nekaj ne deluje. A vsi so sre\u010dni. Na\u0161a ekipa zmaga. Sre\u010dni smo dvakrat. <\/p>\n<p>Delim sre\u010do v Slacku in mi pride na misel ideja: \u201eMoramo izvesti svoj hackathon\u201c. Pi\u0161em na\u0161emu CTO Sa\u0161i. Ti\u0161ina. <\/p>\n<p>Jutro. Pijem kavo v pisarni. Vidim, da se Sa\u0161a pribli\u017euje zadaj. \u201eLiza, to je super! Imamo prav 21. aprila pomemben datum. Pojdimo ga izvesti!\u201d Kak\u0161ne vragolije!? Tako hitro? Kaj? Moram poleteti v Syktyvkar na prakso sredi aprila. Pa kaj. Pojdimo.<\/p>\n<p>Ostaja 2 tedna. Nikoli \u0161e nisem bila edina organizatorka hackathona. Naj bo \u0161e notranjega. Berem \u010dlanke na to temo. Groza. Potrebnih je ve\u010d mesecev. Potrebujem ve\u010d ljudi. Potrebno je premisliti mer\u010d, nagrade, pogoje, razpored, pridobiti zanimanje, razumeti cilj, prora\u010dune. Morda celo razjasniti smisel \u017eivljenja. Gotovo ne bom uspela. In medtem ko si bral in se pripravljal, je \u017ee minil teden. Zdaj je pravi \u010das, da neham s \u010dlanki in za\u010dnem nekaj po\u010deti. <\/p>\n<p><b class=\"spoiler_title\">Tukaj je na\u0161 kontrolni seznam za izvedbo notranjega hackathona v 1 tednu.<\/b><\/p>\n<ul>\n<li><b>Na\u010drt<\/b>: mirno se usede\u0161 in napi\u0161e\u0161 seznam stvari, ki jih je treba storiti za hackathon. <i>30 minut<\/i>.<\/li>\n<li><b>Naloga<\/b>: udele\u017eenci sami predlagajo in izberejo projekte, ki jih \u017eelijo ustvariti v Google Sheets. <i>Ozadna naloga, 2 uri<\/i>.<\/li>\n<li><b>Razpored<\/b>: na hitro napi\u0161e\u0161 kratek \u010dasovni razpored z ve\u010d kot 3 odmori in finalom. <i>20 minut<\/i>.<\/li>\n<li><b>Ukazi<\/b>: objavi\u0161 sporo\u010dilo o hackathonu z razporedom od CTO v IT kanalih v Slacku\/elektronski po\u0161ti\/itd. in ustvari\u0161 poseben kanal za hackathon. V njem se vsi razdelijo v ekipe, tisti, ki se niso odlo\u010dili, pa to storijo v prvih 5 minutah hackathona. <i>Ozadna naloga, 2 uri<\/i>.<\/li>\n<li><b>Pogodnosti.<\/b>: ustvarite blagovno znamko s tremi razvijalci, jo po\u0161ljete oblikovalcu za grafi\u010dno obdelavo, dobite kon\u010dni izdelek. <i>Ozadna naloga, 3 dni<\/i>.<\/li>\n<li><b>Hackathon<\/b>: pridete v pisarno, na za\u010detku usklajujete vse, ukvarjate se s svojimi nalogami, berete Reddit, z resnim izrazom na obrazu sporo\u010date o novi pici ob vsakem odmoru, fotografirate son\u010dni zahod, razgla\u0161ate finale, skupaj glasujete in izberete zmagovalca. <i>1 dan<\/i>.<\/li>\n<li><b>Pod zvezdico<\/b>: seveda, nenehno razmi\u0161ljate o tem, da bi vse potekalo dobro. Seveda, vsi ne bodo videli va\u0161ega sporo\u010dila in z nekaterimi je bolje govoriti osebno. Seveda, \u010de vam bo kdo pomagal, bo vse dvakrat la\u017eje (pomagala mi je \u010dudovita Alena).<\/li>\n<\/ul>\n<h2>Manj dolgo\u010dasen del o datumu hackathona<\/h2>\n<p>\nZakaj 21. april? Ta dan je zame pomemben. Natanko pred letom dni, 21. aprila, smo se pod pravno te\u017eo zru\u0161ili med prvimi vikendi po za\u010detku Zvezne ogla\u0161evalske kampanje. Dan po tem, v nedeljo, je bila na\u0161a ekipa na delu \u017ee od 8. ure zjutraj. Takrat smo ustvarili Trello plo\u0161\u010do sundayhackathon in se je za\u010del teden izmeni\u010dnega dela po 12 ur na dan. Situacija je bila tako kriti\u010dna, da ni bilo \u010dasa za jedo, na\u0161i kolegi iz drugih ekip so nas oskrbovali z hrano.<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/9d611c134267d1377a95f21a57c69687.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPodrobnej\u0161i opis lahko preberete na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/story.php?story_fbid=10215961419809495&amp;id=1267477281\">strani F\u00ebdora Ov\u010dinnikova<\/a><\/noindex> (na\u0161ega CEO-ja). Od takrat smo veliko spremenili, vendar te datume zdaj zagotovo ne bomo pozabili.<\/p>\n<p>Letos smo se odlo\u010dili, da je to dogodek, ki ga je vredno obele\u017eiti za prihodnje rodove, in v najbolj\u0161ih tradicijah smo organizirali prvi notranji hackathon Dodo v zgodovini, ki je trajal 10 ur. <\/p>\n<h2>Najmanj dolgo\u010dasen del o projektih hackathona<\/h2>\n<p>\n<i>Pripomba: vse opise so napisali sami fantje, zato avtorstvo besedila ni moje.<\/i><\/p>\n<h4>Oleg L\u00f6rning (strojno u\u010denje)<\/h4>\n<p>\n<i>Dima Ko\u010dnev, Sa\u0161a Andronov (@alexandronov)<\/i><\/p>\n<p>\u017deleli so narediti nevronsko omre\u017eje, ki bi dolo\u010dilo, katera pizza je na fotografiji brez kakr\u0161nih koli znanj. Na koncu smo naredili zelo preprosto in igrajo\u010do \u2013 prepoznava 10 pic, pribli\u017eno smo se lotili, kako vse deluje, kolikor je mogo\u010de v enem dnevu (~10 ur).<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/361e89bc6084abdc0e3ac3fdfb7863d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZlasti smo spoznali, da je industrija dosegla raven, ko lahko obi\u010dajen razvijalec vzame obstoje\u010de knji\u017enice, prebere dokumentacijo in trenira svoje nevronsko omre\u017eje brez globokih znanj o predmetu. In delovalo bo dovolj dobro za re\u0161evanje realnih nalog.<\/p>\n<p>Orodja, ki smo jih uporabili: <\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/imageai.readthedocs.io\/en\/latest\/index.html\">imageai<\/a><\/noindex> \u2014 priro\u010dna in enostavna knji\u017enica za delo z obdelavo podatkov in ra\u010dunalni\u0161kim vidom.<\/li>\n<li>Preizkusili smo dve modeli \u2013 ResNet50 in Yolo.<\/li>\n<li>Kod smo pisali, seveda, v Pythonu.<\/li>\n<\/ul>\n<p>\nImeli smo 11000 fotografij, a skoraj 3\/4 je bilo neuporabnih, v preostalih pa so bili razli\u010dni, neprimerne koti. Na koncu smo vzeli pripravljeno model (ki preprosto zna najti pico) in z njeno pomo\u010djo lo\u010dili najneprimernej\u0161e. Kasneje je bilo v imenu fotografije navedeno ime pice \u2014 tako smo razporedili po mapah, a se je izkazalo, da imena ne ustrezajo dejanskosti in smo morali ro\u010dno urediti. Na koncu je ostalo okoli 500-600 fotografij, kar je seveda zanemarljivo \u0161tevilo, a kljub temu dovolj, da smo lo\u010dili 10 pic med seboj.<\/p>\n<p>Za usposabljanje omre\u017eja smo vzeli najcenej\u0161o virtualno napravo v Azure na NVIDIA Tesla K80. U\u010dili smo jo 100 epoh, a \u017ee po 50 epohah je bilo videti, da je omre\u017eje preobremenjeno, saj je bil sklop podatkov premajhen.<\/p>\n<p>Pravzaprav je cela te\u017eava v pomanjkanju dobrih podatkov.<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/b89ba378674df1b3e899a93fc0fce86c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMorda smo malo zmedli v izrazih, a treba je upo\u0161tevati, da nimamo izku\u0161enj z vsemi temi stvarmi.<\/p>\n<h4>GUI for NOOBS (terminal za naro\u010danje pice)<\/h4>\n<p>\n<i>Mi\u0161a Kumaje\u010dov (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/ceridan\/\" class=\"user_link\">Ceridan<\/a><\/noindex>), \u017denja Bikinjin, \u017denja Vasiljev<\/i><\/p>\n<p>Pripravili smo prototip konzolne aplikacije za geeky, s katero lahko naro\u010dite pico preko terminala ali ukazne vrstice, ali pa jo celo vklju\u010dite v deploy pipeline in ob uspe\u0161nem izdajanju dostavite pico v pisarno.<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/14186ccb66d074923f89c1da47d594a1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDelo se je razdelilo na ve\u010d delov: raziskovali smo, kako deluje na\u0161 API za mobilne aplikacije, razvijali svoj CLI s pomo\u010djo <noindex><a rel=\"nofollow\" href=\"https:\/\/oclif.io\">oclif<\/a><\/noindex> in nastavili objavo paketa, ki smo ga zbrali. S to zadnjo nalogo smo imeli nekaj neprijetnih trenutkov bli\u017eje koncu hackatona. Vse je delovalo lokalno, tudi stare objavljene razli\u010dice paketa, a nove (v katerih je bilo dodanih ve\u010d kul funkcij in emotikonov) niso delovale. Porabili smo 40 minut, da smo ugotovili, kaj je \u0161lo narobe, a na koncu je vse na \u010darobni na\u010din delovalo.<\/p>\n<p>Na\u0161 cilj za hackathon je bil pravi naro\u010dilo pice v pisarno preko na\u0161ega CLI. Ve\u010dkrat smo vse preizkusili na testnem okolju, a kljub temu so mi roke tresle, ko sem vna\u0161al ukaze v produkciji.<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/5392e269446fcd09ceb9e16a8f9c4101.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKot rezultat \u2014 to smo le naredili!<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" 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 Bruzhmelyov (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 a 'Courier Application'.<\/p>\n<p><b class=\"spoiler_title\">Background on the preparation.<\/b>Initially, I estimated what features might be included in the application. I came up with roughly the following functionality list:<\/p>\n<ul>\n<li>The application logs into the delivery system using a code.<\/li>\n<li>The application immediately shows available orders and orders that need to be taken.<\/li>\n<li>The courier marks the order and takes it for the trip.<\/li>\n<li>It displays the estimated time and whether he can make it or not.<\/li>\n<li>The client sees that the courier has set off.<\/li>\n<li>It starts showing the courier's location on the map and the estimated time to arrival.<\/li>\n<li>The courier can message the client in chat from the application.<\/li>\n<li>The client can message the courier in chat from the application.<\/li>\n<li>Five minutes before arrival, the client receives a message that the courier is nearby, be ready.<\/li>\n<li>The courier marks in the application that he has arrived and is waiting.<\/li>\n<li>The courier can call from the application with one click and inform that (he is arriving, has arrived, etc.)<\/li>\n<li>The client accepts the order and enters the pin code from the application or SMS for delivery confirmation (like a signature) so that the courier cannot complete the delivery early if he is delayed.<\/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>In case of delay, the courier can issue an electronic certificate via SMS with one button. Or the certificate is automatically sent if the delivery time is not met.<\/li>\n<\/ul>\n<p>\nThe feeling of the potential and necessity of this project certainly charged us with enthusiasm.<\/p>\n<p>The next day, the team and I went out for lunch and discussed how the minimum functionality of the application would look. <\/p>\n<p>As a result, the following list emerged of what we needed to accomplish during the hackathon:<\/p>\n<ul>\n<li>Login to the delivery system.<\/li>\n<li>Display current location.<\/li>\n<li>Send data to external API (coordinates, order taken, order delivered).<\/li>\n<li>Receive data from external API (current orders of the courier).<\/li>\n<li>Send an event that the order was taken for delivery\/delivered.<\/li>\n<li>Display the current position of the courier on the map on the website.<\/li>\n<\/ul>\n<p>\nThe main work, as it seemed, lay in creating the backend, the application itself (after discussions, we chose ReactNative for application development, more precisely a wrapper around it \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/expo.io\/\">expo.io<\/a><\/noindex>, ki omogo\u010da popolno izogibanje pisanju izvorne kode). Glede backend-a smo prvotno upali na Vanjo Zvereva, ki ima izku\u0161nje z na\u0161o predlogo storitve in k8s (da bi prevzel dolo\u010dene naloge). ReactNative sem preizkusil s Andrejem Sarafanovim.<\/p>\n<p>Odlo\u010dil sem se, da takoj ustvarim delovni repozitorij za sam projekt. Ob 12. uri pono\u010di sem naletel na problem, da geolokacija v ReactNative slabo deluje v ozadju, \u010de ne pi\u0161em izvorne kode, kar me je malo razo\u010daralo. Kasneje me je minilo, ko sem ugotovil, da berem dokumentacijo ne za framework expo.io, temve\u010d za ReactNative. Na koncu sem \u017ee tisto ve\u010der razumel, kako pridobiti trenutno lokacijo v expo.io in risati lo\u010dene zaslone (za prijavo, prikaz naro\u010dila itd.).<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/2412edc5937b44e141d719269565dfee.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZjutraj so nas na hackathonu pritegnili, da se pridru\u017eimo njihovemu izredno perspektivnemu projektu. Hitro smo zasnovali na\u010drt, kaj je treba narediti.<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/4bc0ebef3ed6b661bd25ef75ac6d536d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNaredili smo napako, ko smo se posku\u0161ali povezovati ne prek HTTP, ampak prek GRPC, saj nih\u010de ni znal sestaviti GRPC odjemalca za JavaScript. Na koncu smo po pribli\u017eno eni uri obupa nad to idejo. Zaradi tega so fantje na backendu morali predelati obstoje\u010di stre\u017enik iz GRPC na WebApi. \u010cez pol ure smo kon\u010dno uspeli nastaviti komunikacijo aplikacije z backendom, kar je bilo za \u010dudo. V tem \u010dasu je Gleb skoraj dokon\u010dal deploy v k8s in avtomatski deploy ob commit-u v master. \ud83d\ude42<\/p>\n<p>Kot shrambo smo izbrali MySQL, da ne bi tvegali s podatkovno bazo (imeli smo misli o CosmosDb).<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/2ae381b2006330915ae38d55f2ac08cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa kraju: <\/p>\n<ul>\n<li>Uresni\u010dili smo shranjevanje trenutnih koordinat kurirja iz aplikacije v bazo.<\/li>\n<li>Priklju\u010dili smo RabbitMQ in se prijavili na sporo\u010dila o prevzemu naro\u010dila s strani kurirja, da bi takoj prikazali naro\u010dilo v aplikaciji kurirja.<\/li>\n<li>Za\u010deli smo shranjevati v bazo \u010das dostave naro\u010dila, potem ko je kurir pritisnil gumb v aplikaciji. Nismo uspeli dodati po\u0161iljanja dogodka nazaj v RabbitMQ, da bi sporo\u010dili, da je naro\u010dilo dostavljeno.<\/li>\n<li>Na strani currentorder na spletni strani sem prikazal zemljevid s trenutno lokacijo kurirja. Vendar je ta funkcionalnost ostala malo nedokon\u010dana, saj na okolju ni bilo mo\u017eno nastaviti CORS za pridobivanje koordinat iz na\u0161e nove storitve.<\/li>\n<\/ul>\n<p><\/p>\n<h4>M87<\/h4>\n<p>\n<i>Roma Bukin, Gosha Polevoy (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/georgepolevoy\/\" class=\"user_link\">georgepolevoy<\/a><\/noindex>), \u0410\u0440\u0442\u0451\u043c \u0422\u0440\u043e\u0444\u0438\u043c\u0443\u0448\u043a\u0438\u043d<\/i><\/p>\n<p>\u017deleli smo implementirati OpenID Connect provajdera, jer trenutno koristimo protokol autentifikacije vlastite izrade, \u0161to stvara niz pote\u0161ko\u0107a: prilago\u0111ene klijentske biblioteke, nezgodan rad sa strane spoljnih partnera, mogu\u0107e bezbednosne probleme (kako god, OAuth2.0 i OpenID Connect u standardnoj implementaciji smatraju se bezbednima, dok za na\u0161e re\u0161enje \u2013 nisam siguran).<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/b7247acfc91045f1040535d1f404c64a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNapravili smo posebnu uslugu koja emulira servis za \u010duvanje li\u010dnih podataka, kako bismo stvorili malu Country-Agnostic autentifikaciju, koja bi pristupala li\u010dnim podacima u zasebnoj usluzi (to bi u budu\u0107nosti omogu\u0107ilo imati jedan servis, putem kojeg bi se moglo prijaviti koriste\u0107i nalog iz bilo koje zemlje, dok bi u isto vreme bilo uskla\u0111eno sa GDPR-om i drugim zakonima). Ovu deo smo realizovali, kao i provajdera, i uspe\u0161no ih povezali. Zatim je trebalo napraviti API, koji bi bio za\u0161ti\u0107en tokenima koje izdaje provajder, podr\u017eavati njihovu introspekciju kroz provajdera i vra\u0107ati za\u0161ti\u0107ene podatke ako bi zahtev ispunjavao politike autorizacije (proveravamo da li je korisnik autentifikovan po Bearer \u0161emi, da li njegov token sadr\u017ei odre\u0111eni scope + da li korisnik ima dozvolu koja omogu\u0107ava poziv). Ovaj deo je tako\u0111e zavr\u0161en. Poslednja komponenta bio je JavaScript klijent, kojem bi se izdavao token, pomo\u0107u kojeg je pozivao za\u0161ti\u0107eni API. Ovu deo nismo stigli da uradimo. Dakle, cela funkcionalna komponenta je bila gotova, ali frontend deo za demonstraciju funkcionalnosti celog sistema nije.<\/p>\n<h4>E-E-E (igrica)<\/h4>\n<p>\n<i>Dima Afon\u010denko, Sa\u0161a Konovalov<\/i><\/p>\n<p>Napravili smo mini-igricu na junjku gde brze ruke bacaju kobasicu na picu. Ako si pogre\u0161no bacio kobasicu, na ekranu se pojavljuje tu\u017ena poruka \"Odbijeno\", a ako je cela kobasica pravilno ba\u010dena, pojavljuje se slu\u010dajna \u010dinjenica o pici.<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/1c9daf62d4907f9a13de07ac0dd2a14e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u017deleli smo da napravimo drugi nivo sa bacanjem paradajza, ali nismo stigli.<\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/e3d5028c8043ab1192bbb8cb31918def.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Kratak nastavak: ko je pobedio?<\/h2>\n<p>\nPre hackatona smo pri\u010dali sa de\u010dkom i pitala sam ih koji bi poklon \u017eeleli da dobiju ako pobede. Ispostavilo se da bi najvrednija nagrada bila \"put u produkciju\". <\/p>\n<p><img decoding=\"async\" alt=\"Kodim \u2013 pica\" src=\"\/wp-content\/uploads\/2019\/05\/814f28de3020cc16ce0108efdbbd963d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZato kmalu pri\u010dakujte od nas napoved igre, kjer boste s pomo\u010djo ro\u010dajev dodajali peko\u010de paprike na pico.<\/p>\n<blockquote><p>Kot je lahko opazil pozorni bralec, je zmagala ekipa \"E-E-E (igra)\". \u010cestitamo fantom!<\/p><\/blockquote>\n<p class=\"for_users_only_msg\">Samo registrovani korisnici mogu u\u010destvovati u anketi. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Prijavite se<\/a><\/noindex>, molim vas.<\/p>\n<h2 class=\"default-block__polling-title\">Kateri projekt vam je bil najbolj v\u0161e\u010d?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Oleg L\u00f6rning (strojno u\u010denje)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    GUI za 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>    Glasovalo je 5 uporabnikov. 3 uporabniki so se vzdr\u017eali.<br \/>\n<br \/>Izvor: <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.4 - 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\/sl\/blog\/news\/kodim-pitstsa\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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\udd47Kodiramo\u2013pica | ProHoster","description":"Pozdravljen, Habr. Nenadoma smo izvedli na\u0161 prvi notranji hackathon.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/news\/kodim-pitstsa","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/34626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=34626"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/34626\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/26093"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=34626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=34626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=34626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}