{"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\/it\/blog\/novosti-interneta\/kodim-pitstsa","title":{"rendered":"Codiamo\u2013pizza","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao, Habr. Abbiamo tenuto spontaneamente il nostro primo hackathon interno. Ho deciso di condividere con voi le mie difficolt\u00e0 e le mie conclusioni sulla preparazione per questo evento in due settimane, cos\u00ec come i progetti che ne sono scaturiti.<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" 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>La parte noiosa per chi \u00e8 interessato al marketing<\/h2>\n<p>\nIniziamo con una piccola storia. <\/p>\n<p>Inizio aprile. Nel nostro ufficio si tiene il primo hackathon della MskDotNet Community. La battaglia per Tatooine \u00e8 in pieno svolgimento, questa volta nella nostra galassia. Sabato. 20 squadre. Pizza. Tutto molto accogliente (<noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/album-125321990_262572840\">prove<\/a><\/noindex>). Un R2-D2 gonfiabile si aggira per la sala. Le squadre scrivono gli algoritmi pi\u00f9 corretti per superare la gara pi\u00f9 pericolosa sulla mappa. Posticipiamo l'inizio delle prime gare. Biscotti e caff\u00e8 ci salvano. Noi, gli organizzatori, ci aspettavamo che molti se ne andassero dopo pranzo. Ma no. 12 ore di coding alle spalle. Finale. Qualcosa si rompe, qualcosa non si avvia. Ma tutti sono felici. La nostra squadra vince. Siamo doppiamente felici. <\/p>\n<p>Condivido la gioia su Slack e mi viene in mente un'idea: \u00abDobbiamo organizzare il nostro hackathon\u00bb. Scrivo al nostro CTO Sasha. Silenzio. <\/p>\n<p>Mattina. Bevo un caff\u00e8 in ufficio. Vedo Sasha avvicinarsi da dietro. \u00abLisa, \u00e8 fantastico! Abbiamo una data importante il 21 aprile. Facciamolo!\u00bb Cosa?! Cos\u00ec in fretta? Cosa? Devo partire per Syktyvkar per uno stage a met\u00e0 aprile. Ma che importa! Facciamo.<\/p>\n<p>Mancano 2 settimane. Non sono mai stata l'organizzatrice principale di un hackathon. Anche se interno. Leggo articoli in merito. \u00c8 una follia. Ci vogliono mesi. Servono diverse persone. Bisogna pensare a gadget, premi, regole, programma, coinvolgere tutti, capire l'obiettivo, budget. Potrei persino dover riflettere sul senso della vita. Di sicuro non ce la far\u00f2. E mentre tu leggi e ti prepari, \u00e8 gi\u00e0 passata una settimana. \u00c8 tempo di smettere di leggere e iniziare a fare qualcosa. <\/p>\n<p><b class=\"spoiler_title\">Ecco la nostra checklist per organizzare un hackathon interno in 1 settimana.<\/b><\/p>\n<ul>\n<li><b>Piano<\/b>: ti siedi con calma e scrivi un elenco di ci\u00f2 che devi fare per l'hackathon. <i>30 minuti<\/i>.<\/li>\n<li><b>Compito<\/b>: i partecipanti propongono e scelgono i progetti che vogliono realizzare in Google Sheets. <i>Compito secondario, 2 ore<\/i>.<\/li>\n<li><b>Programma<\/b>: scrivi rapidamente una ripartizione temporale considerando 3 pause e il finale. <i>20 minuti<\/i>.<\/li>\n<li><b>Comandi<\/b>: pubblichi un messaggio sul hackathon con il programma del CTO nei canali IT su Slack\/email\/etc. e crei un canale separato per l'hackathon. In questo canale tutti si dividono in squadre, e chi non si \u00e8 ancora deciso lo fa nei primi 5 minuti dell'hackathon. <i>Compito secondario, 2 ore<\/i>.<\/li>\n<li><b>Vantaggi<\/b>: pensi a del merchandise con due sviluppatori, lo dai al designer per il rendering, e ricevi il prodotto finito. <i>Attivit\u00e0 in background, 3 giorni<\/i>.<\/li>\n<li><b>Hackathon<\/b>: arrivi in ufficio, coordini tutti all'inizio, ti occupi delle tue cose, leggi Reddit, con aria importante comunichi ogni pausa riguardo la nuova pizza, fotografi il tramonto, annunci la finale, voti insieme e scegli il vincitore. <i>1 giorno<\/i>.<\/li>\n<li><b>Sotto le stelle<\/b>: certo, pensi costantemente che tutto vada per il verso giusto. Certo, non tutti vedranno il tuo messaggio e con alcuni \u00e8 meglio parlarne di persona. Certo, se qualcuno ti aiuta, tutto diventa due volte pi\u00f9 facile (mi ha aiutato la meravigliosa Al\u00ebna).<\/li>\n<\/ul>\n<h2>La parte meno noiosa riguardo alla data dell'hackathon<\/h2>\n<p>\nPerch\u00e9 il 21 aprile? Questa data \u00e8 significativa per noi. Esattamente un anno fa, il 21 aprile, siamo crollati sotto il carico durante il primo fine settimana dopo l'inizio della Campagna Pubblicitaria Federale. Il giorno dopo, domenica, il nostro team era al lavoro dalle 8 del mattino. Allora abbiamo creato su Trello una bacheca chiamata sundayhackathon e \u00e8 iniziata una settimana di lavoro a turni di 12 ore al giorno. La situazione era cos\u00ec critica che non avevamo nemmeno tempo per mangiare, e ci sono stati a supportarci ragazzi di altri team.<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/9d611c134267d1377a95f21a57c69687.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPuoi leggere una storia pi\u00f9 dettagliata su <noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/story.php?story_fbid=10215961419809495&amp;id=1267477281\">la pagina di F\u00ebdor Ov\u010dinnikov<\/a><\/noindex> (il nostro CEO). Da allora, abbiamo cambiato molto, ma non dimenticheremo mai questa data.<\/p>\n<p>Quest'anno abbiamo deciso che questo evento meritasse di essere ricordato per le generazioni future e, seguendo le migliori tradizioni, abbiamo organizzato il primo hackathon interno nella storia di Dodo, che \u00e8 durato 10 ore. <\/p>\n<h2>La parte pi\u00f9 interessante riguardo ai progetti dell'hackathon<\/h2>\n<p>\n<i>Disclaimer: tutte le descrizioni sono state scritte dai ragazzi, quindi la paternit\u00e0 del testo non \u00e8 mia.<\/i><\/p>\n<h4>Oleg Learning (machine learning)<\/h4>\n<p>\n<i>Dima Kochnev, Sasha Andronov (@alexandronov)<\/i><\/p>\n<p>Volevamo creare una rete neurale capace di identificare che tipo di pizza c'era in una fotografia senza alcuna conoscenza pregressa. Alla fine, abbiamo realizzato qualcosa di molto semplice e giocattoloso: riconosce 10 tipi di pizza e abbiamo pi\u00f9 o meno capito come funziona, per quanto sia possibile in un solo giorno (~10 ore).<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/361e89bc6084abdc0e3ac3fdfb7863d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn particolare, abbiamo compreso che l'industria \u00e8 arrivata a un punto in cui un normale sviluppatore pu\u00f2 utilizzare librerie pronte, leggere la documentazione e addestrare la propria rete neurale senza conoscenze approfondite dell'argomento. E sar\u00e0 sufficiente per risolvere problemi reali.<\/p>\n<p>Strumenti che abbiamo utilizzato: <\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/imageai.readthedocs.io\/en\/latest\/index.html\">imageai<\/a><\/noindex> \u2014 una libreria comoda e semplice per lavorare con l'apprendimento automatico e la visione artificiale.<\/li>\n<li>Abbiamo provato due modelli: ResNet50 e Yolo.<\/li>\n<li>Il codice \u00e8 stato scritto, ovviamente, in Python.<\/li>\n<\/ul>\n<p>\nAvevamo 11.000 foto, ma quasi 3\/4 di esse si sono rivelate scarti, mentre nelle rimanenti c'erano angolazioni varie e inadeguate. Alla fine, abbiamo utilizzato un modello predefinito (che sa semplicemente riconoscere la pizza) per separare i contenuti irrilevanti. Successivamente, nel nome della foto c'era il nome della pizza \u2014 cos\u00ec le abbiamo organizzate in cartelle, ma si \u00e8 scoperto che i nomi non corrispondevano alla realt\u00e0 ed \u00e8 stato necessario fare una pulizia manuale. Alla fine, sono rimaste circa 500-600 foto. \u00c8 evidente che si tratta di un numero esiguo, ma comunque \u00e8 stato sufficiente per distinguere 10 pizze l'una dall'altra.<\/p>\n<p>Per addestrare la rete, abbiamo utilizzato la macchina virtuale pi\u00f9 economica disponibile su Azure con una NVIDIA Tesla K80. L'addestramento \u00e8 stato eseguito per 100 epoche, ma era evidente che la rete era gi\u00e0 saturata dopo 50 epoche, a causa delle ridotte dimensioni del dataset.<\/p>\n<p>In sostanza, il problema principale \u00e8 la mancanza di dati di qualit\u00e0.<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/b89ba378674df1b3e899a93fc0fce86c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nForse abbiamo commesso qualche errore terminologico, ma \u00e8 importante considerare che non abbiamo esperienza in questo campo.<\/p>\n<h4>GUI for NOOBS (console per ordinare la pizza)<\/h4>\n<p>\n<i>Misha Kumachev (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/ceridan\/\" class=\"user_link\">Ceridan<\/a><\/noindex>), Evgeny Bikkunin, Evgeny Vasiliev<\/i><\/p>\n<p>Abbiamo creato un prototipo di un'applicazione console per veri appassionati, grazie alla quale \u00e8 possibile ordinare la pizza tramite terminale o linea di comando, o addirittura integrarla nel pipeline di deploy per far consegnare la pizza in ufficio dopo un rilascio riuscito.<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/14186ccb66d074923f89c1da47d594a1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl lavoro \u00e8 stato suddiviso in diverse parti: abbiamo studiato come funziona la nostra API per le applicazioni mobili e costruito la nostra CLI con l'aiuto di <noindex><a rel=\"nofollow\" href=\"https:\/\/oclif.io\">oclif<\/a><\/noindex> , e abbiamo configurato la pubblicazione del pacchetto che abbiamo creato. Con quest'ultima attivit\u00e0 abbiamo avuto alcuni momenti difficili verso la fine del hackathon. Tutto funzionava localmente e anche le vecchie versioni pubblicate del pacchetto funzionavano, ma le nuove (in cui erano state aggiunte pi\u00f9 funzionalit\u00e0 e faccine divertenti) si rifiutavano di funzionare. Abbiamo impiegato circa 40 minuti per capire cosa fosse andato storto, ma alla fine, tutto ha magicamente iniziato a funzionare da solo.<\/p>\n<p>Il nostro obiettivo massimo per l'hackathon era fare un vero ordine di pizza in ufficio tramite la nostra CLI. Abbiamo testato tutto una decina di volte su un ambiente di test, ma avevo comunque le mani tremanti mentre digitavo i comandi in produzione.<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/5392e269446fcd09ceb9e16a8f9c4101.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl risultato finale \u2014 ce l'abbiamo fatta davvero!<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" 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 (autore), 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>Abbiamo preso spunto dall'idea \"App per il corriere\".<\/p>\n<p><b class=\"spoiler_title\">Storia di fondo sulla preparazione.<\/b>Inizialmente, ho pensato a quali funzionalit\u00e0 potessero esserci nell'app. \u00c8 emersa pi\u00f9 o meno una lista di funzionalit\u00e0:<\/p>\n<ul>\n<li>L'app si autentica nel sistema di consegna con un codice.<\/li>\n<li>Nell'app sono subito visibili gli ordini disponibili, gli ordini da prendere.<\/li>\n<li>Il corriere segna l'ordine e lo prende in carico.<\/li>\n<li>Gli viene mostrato il tempo stimato e se arriver\u00e0 in tempo.<\/li>\n<li>Il cliente vede che il corriere \u00e8 partito.<\/li>\n<li>Al cliente inizia a essere mostrata la posizione del corriere sulla mappa e il tempo stimato.<\/li>\n<li>Il corriere pu\u00f2 scrivere al cliente in chat dall'app.<\/li>\n<li>Il cliente pu\u00f2 scrivere al corriere in chat dall'app.<\/li>\n<li>Cinque minuti prima dell'arrivo, il cliente riceve un messaggio che il corriere \u00e8 vicino, si prepari.<\/li>\n<li>Il corriere segna nell'app che \u00e8 arrivato e sta aspettando.<\/li>\n<li>Il corriere chiama dall'app con un clic e comunica che (sta salendo, \u00e8 arrivato, ecc.)<\/li>\n<li>Il cliente accetta l'ordine e inserisce il pin dall'app o SMS per confermare la consegna. (come una firma) In modo che il corriere non possa completare la consegna in anticipo, se \u00e8 in ritardo.<\/li>\n<li>L'ordine viene segnato nel sistema come consegnato.<\/li>\n<\/ul>\n<p>In aggiunta, un paio di scenari alternativi:<\/p>\n<ul>\n<li>Il corriere pu\u00f2 segnare l'ordine come non consegnato e scegliere una motivazione.<\/li>\n<li>In caso di ritardo, il corriere pu\u00f2 emettere un certificato elettronico tramite SMS con un solo clic. Oppure il certificato viene inviato automaticamente se non viene rispettato il termine di consegna.<\/li>\n<\/ul>\n<p>\nLa sensazione di opportunit\u00e0 e necessit\u00e0 di questo progetto, ovviamente, era motivante.<\/p>\n<p>Il giorno successivo, siamo andati a pranzo con il team e abbiamo discusso di come sarebbe dovuta apparire la funzionalit\u00e0 minima dell'applicazione. <\/p>\n<p>Di conseguenza, si \u00e8 formato il seguente elenco di ci\u00f2 che dovevamo completare durante l'hackathon:<\/p>\n<ul>\n<li>Login nel sistema di consegna.<\/li>\n<li>Visualizzare la posizione attuale.<\/li>\n<li>Inviare dati a un'API esterna (coordinate, ordine preso, ordine consegnato).<\/li>\n<li>Ricevere dati da un'API esterna (ordini attuali del corriere).<\/li>\n<li>Inviare un evento riguardante il ritiro dell'ordine per la consegna\/ritiro effettuato.<\/li>\n<li>Visualizzare la posizione attuale del corriere sulla mappa nel sito.<\/li>\n<\/ul>\n<p>\nIl lavoro principale, come si percepiva, sarebbe stato nella creazione del backend, dell'applicazione stessa (dopo discussioni abbiamo scelto ReactNative per lo sviluppo dell'app, pi\u00f9 precisamente la sua interfaccia \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/expo.io\/\">expo.io<\/a><\/noindex>, che consente di non scrivere affatto codice nativo). Per quanto riguarda il backend, inizialmente c'era speranza in Vanya Zverev, esperto nel lavorare con il nostro template di servizio e k8s (lavoro che ha preso su di s\u00e9). Io e Andrey Sarafanov ci siamo messi a provare ReactNative.<\/p>\n<p>Ho deciso di provare subito a creare un repository di lavoro per il progetto. A mezzanotte mi sono reso conto che in ReactNative la geolocalizzazione funziona male in background, a meno che non si scriva codice nativo, il che mi ha un po' frustrato. Poi mi sono calmato, quando ho capito che stavo leggendo la documentazione di ReactNative invece di quella del framework expo.io. Alla fine della serata, mi era gi\u00e0 chiaro come ottenere la posizione attuale in expo.io e disegnare diversi schermi (per il login, visualizzazione dell'ordine, ecc.).<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/2412edc5937b44e141d719269565dfee.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa mattina del hackathon ho coinvolto Gleb nel nostro progetto super promettente. Abbiamo rapidamente abbozzato un piano di ci\u00f2 che c'era da fare.<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/4bc0ebef3ed6b661bd25ef75ac6d536d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAbbiamo commesso un errore tentando di comunicare non tramite HTTP ma tramite GRPC, poich\u00e9 nessuno sapeva come assemblare un client GRPC per JavaScript. Dopo aver speso circa un'ora e mezza, abbiamo abbandonato questa idea. A causa di ci\u00f2, il team ha iniziato a rifare il server da GRPC a WebApi. Dopo mezz'ora, finalmente, siamo riusciti a configurare la comunicazione tra l'applicazione e il backend, che meraviglia. Ma nello stesso tempo, Gleb stava quasi completando il deployment in k8s e l'autodeployment al commit nel master. \ud83d\ude42<\/p>\n<p>Come database, abbiamo scelto MySQL per non rischiare almeno con la base (c'erano idee su CosmosDb).<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/2ae381b2006330915ae38d55f2ac08cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn sintesi: <\/p>\n<ul>\n<li>Abbiamo implementato il salvataggio delle coordinate attuali del corriere dall'app in database.<\/li>\n<li>Abbiamo integrato RabbitMQ e ci siamo iscritti ai messaggi riguardanti l'accettazione dell'ordine da parte del corriere, per visualizzare immediatamente l'ordine nell'app del corriere.<\/li>\n<li>Abbiamo iniziato a salvare nel database il tempo di consegna dell'ordine, dopo che il corriere premeva il pulsante nell'app. Non siamo riusciti ad aggiungere l'invio dell'evento di ritorno a RabbitMQ che segnala che l'ordine \u00e8 stato consegnato.<\/li>\n<li>Ho implementato una visualizzazione della mappa nella pagina currentorder del sito, mostrando la posizione attuale del corriere. Tuttavia, questa funzionalit\u00e0 \u00e8 rimasta leggermente incompleta, poich\u00e9 non siamo riusciti a configurare il CORS per ottenere le coordinate dal nostro nuovo servizio.<\/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>), Artyom Trofimushkin<\/i><\/p>\n<p>Volevamo implementare un provider OpenID Connect, poich\u00e9 attualmente utilizziamo un protocollo di autenticazione di nostra creazione, il che comporta diverse difficolt\u00e0: librerie client personalizzate, lavoro poco pratico da parte dei partner esterni e possibili problemi di sicurezza (dopo tutto, OAuth2.0 e OpenID Connect nella loro implementazione standard possono essere considerati sicuri, mentre riguardo alla nostra soluzione \u2014 non ne sono sicuro).<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/b7247acfc91045f1040535d1f404c64a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAbbiamo creato un servizio dedicato che emula un servizio di archiviazione dei dati personali, per sviluppare un modello di provider di autenticazione senza confini nazionali, in grado di richiedere dati personali da un servizio separato. Questo, nel lungo termine, permetterebbe di avere un unico servizio tramite il quale sarebbe possibile effettuare il login con un account in qualsiasi paese, rispettando nel contempo il GDPR e altre leggi locali. Questa parte \u00e8 stata completata, cos\u00ec come il provider, e abbiamo riuscito a collegarli con successo. Successivamente, era necessario realizzare un API protetto con token emessi dal provider, supportando l'introspezione tramite il provider e restituendo dati protetti se la richiesta soddisfacesse le politiche di autorizzazione (verifichiamo che l'utente sia autenticato tramite lo schema Bearer, il suo token contiene un determinato scope e l'utente stesso possiede un permesso che consente l'esecuzione della chiamata). Anche questa parte \u00e8 stata completata. L'ultimo componente era un client JavaScript, al quale sarebbe stato fornito un token, che utilizzava per richiamare l'API protetta. Questa parte non \u00e8 stata completata. In altre parole, tutta la parte funzionale era pronta, ma non era stata ancora ultimata la parte front-end per dimostrare il funzionamento dell'intero sistema.<\/p>\n<h4>E-E-E (gioco)<\/h4>\n<p>\n<i>Dima Afonchenko, Sasha Konovalov<\/i><\/p>\n<p>Abbiamo realizzato un mini-gioco dove le mani agili lanciano la salsiccia sulla pizza. Se lanci la salsiccia nel modo sbagliato, sullo schermo appare la triste scritta \"Scartata\", mentre se la salsiccia \u00e8 lanciata correttamente, appare un fatto casuale sulla pizza.<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/1c9daf62d4907f9a13de07ac0dd2a14e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVolevamo creare un secondo livello con i pomodori, ma non siamo riusciti in tempo.<\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/e3d5028c8043ab1192bbb8cb31918def.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Breve continuazione: chi ha vinto?<\/h2>\n<p>\nPrima del hackathon, abbiamo parlato con i ragazzi e io chiedevo quale premio avrebbero voluto ricevere in caso di vittoria. Si \u00e8 scoperto che il premio pi\u00f9 prezioso sarebbe stato \"il passaggio alla produzione\". <\/p>\n<p><img decoding=\"async\" alt=\"Codiamo\u2013pizza\" src=\"\/wp-content\/uploads\/2019\/05\/814f28de3020cc16ce0108efdbbd963d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPertanto, a breve aspettate da noi l'annuncio di un gioco con le mani che lanciano peperoni sulla pizza.<\/p>\n<blockquote><p>Come potrebbe notare un attento lettore, ha vinto il team \"E-E-E (gioco)\". Congratulazioni ragazzi!<\/p><\/blockquote>\n<p class=\"for_users_only_msg\">Solo gli utenti registrati possono partecipare al sondaggio. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Accedi<\/a><\/noindex>, per favore.<\/p>\n<h2 class=\"default-block__polling-title\">Quale progetto ti \u00e8 piaciuto di pi\u00f9?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Oleg Learning (machine learning)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    GUI per 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>    Hanno votato 5 utenti. 3 utenti si sono astenuti.<br \/>\n<br \/>Fonte: <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-novosti-interneta"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - 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. \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,\" \/>\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\/it\/blog\/novosti-interneta\/kodim-pitstsa\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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. \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,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/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\udd47Coding\u2013Pizza | ProHoster","description":"Ciao, Habr. Abbiamo appena tenuto il nostro primo hackathon interno. Volevo condividere con voi le mie difficolt\u00e0 e le conclusioni sulla preparazione per l'evento nelle ultime due settimane, oltre ai progetti che sono emersi. La parte noiosa per chi \u00e8 interessato al marketing. Inizio con una breve storia. Inizio di aprile. Nel nostro ufficio si svolge il primo hackathon della MskDotNet Community. La battaglia per Tatooine \u00e8 nel vivo.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/kodim-pitstsa","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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. \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,","og:url":"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/34626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=34626"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/34626\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/26093"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=34626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=34626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=34626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}