{"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\/news\/kodim-pitstsa","title":{"rendered":"Codiamo\u2013pizza","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao, Habr. Abbiamo tenuto il nostro primo hackathon interno in modo spontaneo. Ho deciso di condividere con voi le mie difficolt\u00e0 e le conclusioni sulla preparazione, a partire da due settimane fa, oltre ai progetti che sono nati.<\/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>\nInizier\u00f2 con una piccola storia. <\/p>\n<p>Inizio aprile. Nel nostro ufficio si svolge il primo hackathon della MskDotNet Community. La battaglia per Tatooine \u00e8 in pieno svolgimento, questa volta nella nostra galassia. Sabato. 20 squadre. Pizza. \u00c8 tutto molto rassicurante (<noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/album-125321990_262572840\">prove<\/a><\/noindex>). Un R2-D2 gonfiabile si aggira nella sala. I team scrivono gli algoritmi pi\u00f9 corretti per affrontare la corsa pi\u00f9 pericolosa della mappa. Ritardiamo il lancio delle prime gare. Biscotti e caff\u00e8 sono un salvataggio. Con gli organizzatori, ci aspettavamo che molte persone se ne andassero dopo pranzo, ma no. 12 ore di codifica alle spalle. Finale. Qualcosa si blocca, qualcosa non si avvia. Ma tutti sono felici. La nostra squadra vince. Siamo felici doppiamente. <\/p>\n<p>Condivido la gioia su Slack e mi viene in mente un'idea: \u00abDobbiamo fare il nostro hackathon\u00bb. Scrivo al nostro CTO Sasha. Silenzio. <\/p>\n<p>Mattina. Bevo caff\u00e8 in ufficio. Vedo Sasha avvicinarsi da dietro. \u00abLiza, \u00e8 fantastico! Abbiamo una data importante il 21 aprile. Facciamolo!\u00bb Cosa?! Cos\u00ec in fretta? Ah? Cosa? Devo volare a Syktyvkar per uno stage a met\u00e0 aprile. E chi se ne frega! Facciamolo.<\/p>\n<p>Restano due settimane. Non sono mai stata l'unica organizzatrice di un hackathon. Anche se interno. Leggo articoli a riguardo. \u00c8 un caos. Ci vogliono mesi. Ci vogliono diverse persone. Devo pensare a merchandising, premi, condizioni, programma, coinvolgere le persone, capire l\u2019obiettivo, i budget. Magari anche capire il senso della vita. Non ce la far\u00f2. E mentre leggi e ti prepari, \u00e8 gi\u00e0 passata una settimana. \u00c8 tempo di smettere di leggere articoli e iniziare a fare qualcosa. <\/p>\n<p><b class=\"spoiler_title\">Ecco la nostra checklist per organizzare un hackathon interno in una settimana<\/b><\/p>\n<ul>\n<li><b>Piano<\/b>: ti siedi con calma e scrivi un elenco di ci\u00f2 che deve essere fatto per l'hackathon. <i>30 minuti<\/i>.<\/li>\n<li><b>Compito<\/b>: i partecipanti propongono e scelgono i progetti che desiderano creare in Google Sheets. <i>Compito secondario, 2 ore<\/i>.<\/li>\n<li><b>Programma<\/b>: scrivi rapidamente una breve programmazione temporale considerando 3 pause e la finale. <i>20 minuti<\/i>.<\/li>\n<li><b>Team<\/b>: pubblichi un messaggio riguardante l'hackathon con il programma dal CTO nei canali IT su Slack\/email\/etc e crei un canale separato per l'hackathon. In esso, tutti si dividono in squadre, e quelli che non hanno ancora deciso lo fanno nei primi 5 minuti dell'hackathon. <i>Compito secondario, 2 ore<\/i>.<\/li>\n<li><b>Caratteristiche<\/b>: crei merchandising con due sviluppatori, lo dai al designer per la realizzazione, ricevi il prodotto finito. <i>Compito secondario, 3 giorni<\/i>.<\/li>\n<li><b>Hackathon<\/b>: arrivi in ufficio, coordini tutti all'inizio, ti occupi delle tue faccende, leggi Reddit, informi con un'aria importante durante ogni pausa riguardo alla pizza fresca, fotografi il tramonto, annunzi il finale, votate insieme e scegliete il vincitore. <i>1 giorno<\/i>.<\/li>\n<li><b>Con un asterisco<\/b>: certo, pensi sempre a come far s\u00ec che tutto vada per il meglio. Naturalmente, non tutti vedranno il tuo messaggio e con alcuni \u00e8 meglio parlare di persona. Certo, se qualcuno ti aiuta, tutto diventa il doppio pi\u00f9 semplice (mi ha aiutata l'ottima Alena).<\/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, abbiamo ceduto sotto pressione durante i primi weekend dopo l'inizio della Campagna Pubblicitaria Federale. Il giorno successivo, domenica, la nostra squadra era al lavoro dalle 8 del mattino. Allora abbiamo creato su Trello la bacheca sundayhackathon e ha avuto inizio una settimana di turni di lavoro di 12 ore al giorno. La situazione era cos\u00ec critica che non avevamo nemmeno tempo per mangiare e siamo stati sostenuti dai 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\">pagina di F\u00ebdor Ovkinnikov<\/a><\/noindex> (il nostro CEO). Da allora, abbiamo cambiato molto, ma ora non dimenticheremo sicuramente questa data.<\/p>\n<p>Quest'anno abbiamo deciso che questo evento meritava di essere ricordato per le generazioni future e, seguendo le migliori tradizioni, abbiamo organizzato il primo hackathon interno della storia di Dodo, della durata di 10 ore. <\/p>\n<h2>La parte meno noiosa riguardo ai progetti dell'hackathon<\/h2>\n<p>\n<i>Disclaimer: tutte le descrizioni sono state scritte dai ragazzi, quindi l'autore del testo non sono io.<\/i><\/p>\n<h4>Oleg Learning (machine learning)<\/h4>\n<p>\n<i>Dima Kocnev, Sasha Andronov (@alexandronov)<\/i><\/p>\n<p>Volevamo realizzare una rete neurale in grado di identificare che tipo di pizza c'\u00e8 in foto senza alcuna conoscenza pregressa. In fin dei conti, abbiamo realizzato qualcosa di molto semplice e giocattoloso: riconosce 10 tipi di pizza, abbiamo pi\u00f9 o meno capito come funziona, per quanto sia possibile farlo 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 capito che l'industria \u00e8 diventata cos\u00ec accessibile che un normale sviluppatore pu\u00f2 prendere librerie pronte, leggere la documentazione e addestrare la propria rete neurale senza conoscenze approfondite. E funzioner\u00e0 abbastanza bene per risolvere problemi reali.<\/p>\n<p>Strumenti utilizzati: <\/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 il machine learning e la visione artificiale.<\/li>\n<li>Abbiamo provato due modelli: ResNet50, Yolo.<\/li>\n<li>Il codice \u00e8 stato ovviamente scritto in Python.<\/li>\n<\/ul>\n<p>\nAvevamo 11000 foto, ma tra di esse quasi 3\/4 si sono rivelate spazzatura, mentre nelle rimanenti c'erano angolazioni diverse e inappropriate. Alla fine, abbiamo preso un modello pronto (che semplicemente riesce a trovare la pizza) e con il suo aiuto abbiamo separato la maggior parte delle immagini di scarto. Inoltre, nel nome della foto era contenuto il nome della pizza; cos\u00ec le abbiamo catalogate in cartelle, ma ci siamo resi conto che i nomi non corrispondevano alla realt\u00e0 e quindi abbiamo dovuto pulire a mano. Alla fine sono rimaste circa 500-600 foto, \u00e8 chiaro che si tratta di un numero esiguo, ma comunque era sufficiente per distinguere 10 pizze l'una dall'altra.<\/p>\n<p>Per addestrare la rete abbiamo preso la macchina virtuale pi\u00f9 economica su Azure con NVIDIA Tesla K80. L\u00ec abbiamo addestrato la rete per 100 epoche, ma era chiaro che la rete era gi\u00e0 satura dopo 50 epoche, a causa di un dataset troppo ridotto.<\/p>\n<p>In effetti, il problema principale \u00e8 l'assenza di buoni dati.<\/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 ci siamo confusi un po' nei termini, ma bisogna considerare che non abbiamo esperienza in tutti questi aspetti.<\/p>\n<h4>GUI for NOOBS (console per ordinare pizza)<\/h4>\n<p>\n<i>Misha Kuma\u010dev (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/ceridan\/\" class=\"user_link\">Ceridan<\/a><\/noindex>), Zen'ja Bikkinin, Zen'ja Vasil'ev<\/i><\/p>\n<p>Abbiamo realizzato un prototipo di applicazione console per nerd, grazie al quale \u00e8 possibile ordinare pizza tramite terminale o linea di comando, o addirittura integrarlo nel pipeline di distribuzione e far consegnare la pizza in ufficio al successo del rilascio.<\/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 si \u00e8 suddiviso in diverse parti: abbiamo analizzato come funziona la nostra API per le applicazioni mobili, abbiamo creato il nostro CLI utilizzando <noindex><a rel=\"nofollow\" href=\"https:\/\/oclif.io\">oclif<\/a><\/noindex> e abbiamo configurato la pubblicazione del pacchetto che abbiamo creato. Con quest'ultimo compito ci sono stati alcuni momenti spiacevoli verso la fine dell'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 interessanti e emoticon) 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 principale per l'hackathon era fare un vero ordine di pizza in ufficio tramite la nostra CLI. Lo abbiamo testato decine di volte su un ambiente di prova, ma avevo comunque le mani tremanti quando 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 \/>\nIn conclusione, ce l'abbiamo fatta!<\/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 Bruzhmel\u00ebv (autore), Vanya Zverev, Gleb Lesnikov (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/entropy\/\" class=\"user_link\">entropia<\/a><\/noindex>), Andrey Sarafanov<\/i><\/p>\n<p>Abbiamo preso l'idea dell'\u00abApp per corrieri\u00bb.<\/p>\n<p><b class=\"spoiler_title\">La storia preliminare sulla preparazione.<\/b>Inizialmente ho considerato quali funzionalit\u00e0 potrebbero esserci nell'app. \u00c8 emersa all'incirca questa lista di funzionalit\u00e0:<\/p>\n<ul>\n<li>L'app si collega alla cassa di consegna tramite un codice.<\/li>\n<li>Nell'app sono visibili immediatamente gli ordini disponibili e gli ordini da prendere.<\/li>\n<li>Il corriere segna l'ordine e lo prende in viaggio.<\/li>\n<li>Viene mostrato il tempo stimato e se ce la fa o meno.<\/li>\n<li>Al cliente viene mostrato che il corriere \u00e8 partito.<\/li>\n<li>Al cliente viene mostrata la posizione del corriere sulla mappa e il tempo stimato.<\/li>\n<li>Il corriere pu\u00f2 scrivere al cliente in chat tramite l'app.<\/li>\n<li>Il cliente pu\u00f2 scrivere al corriere in chat tramite l'app.<\/li>\n<li>Cinque minuti prima dell'arrivo, il cliente riceve un messaggio che il corriere \u00e8 vicino, sii pronto.<\/li>\n<li>Il corriere segna nell'app che \u00e8 arrivato e aspetta.<\/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 codice PIN dall'app o SMS per confermare la consegna. (come una firma) Affinch\u00e9 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, alcune alternative:<\/p>\n<ul>\n<li>Il corriere pu\u00f2 segnare l'ordine come non consegnato e scegliere la ragione.<\/li>\n<li>Il corriere, in caso di ritardo, pu\u00f2 emettere un certificato elettronico tramite SMS con un clic. Oppure il certificato arriva automaticamente in caso di mancato rispetto dei tempi di consegna.<\/li>\n<\/ul>\n<p>\nLa sensazione di potenzialit\u00e0 e necessit\u00e0 di questo progetto, naturalmente, era stimolante.<\/p>\n<p>Il giorno dopo siamo andati a pranzo con il team e abbiamo discusso di come dovrebbe apparire il minimo indispensabile dell'app. <\/p>\n<p>Alla fine si \u00e8 formata la seguente lista di cose da realizzare durante il hackathon:<\/p>\n<ul>\n<li>Accesso alla cassa 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 che l'ordine \u00e8 stato preso in consegna \/ \u00e8 stato consegnato.<\/li>\n<li>Visualizzare la posizione attuale del corriere sulla mappa del sito.<\/li>\n<\/ul>\n<p>\nIl lavoro principale, come si vedeva, sarebbe stato nella creazione del backend e dell'app stessa (dopo discussioni abbiamo scelto ReactNative per lo sviluppo dell'app, per essere precisi un'impostazione sopra di esso \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/expo.io\/\">expo.io<\/a><\/noindex>, permettendo di non scrivere codice nativo). Per quanto riguarda il backend, inizialmente c'era speranza in Vanya Zverev, come esperto nel lavorare con il nostro modello di servizio e k8s (che lavoro ha preso su di s\u00e9). Io e Andrey Sarafanov abbiamo iniziato a esplorare ReactNative.<\/p>\n<p>Ho deciso di provare subito a creare un repository funzionante per il progetto. A mezzanotte, mi sono reso conto che in ReactNative la geolocalizzazione funziona male in background, se non si scrive codice nativo, il che mi ha un po' frustrato. Poi mi sono sentito meglio, quando ho capito che stavo leggendo la documentazione del framework expo.io e non quella di ReactNative. Alla fine della serata, era chiaro come ottenere la posizione attuale in expo.io e come creare schermate separate (per il login, visualizzazione 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 all'hackathon, abbiamo coinvolto Gleb nel nostro progetto super promettente. Abbiamo rapidamente abbozzato un piano su ci\u00f2 che doveva essere fatto.<\/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 quando, seguendo il modello di progetto, abbiamo cercato di comunicare non tramite HTTP, ma tramite GRPC, poich\u00e9 nessuno sapeva come costruire un client GRPC per JavaScript. Dopo aver speso circa un'ora e mezza su questo, abbiamo abbandonato l'idea. Per questo motivo, i ragazzi hanno iniziato a rifare il server esistente dal GRPC a WebApi. Dopo mezz'ora, finalmente, siamo riusciti a configurare la comunicazione tra l'applicazione e il backend, oh miracolo. Ma nello stesso momento, Gleb stava quasi completando il deployment su k8s e anche l'autodeploy al commit nel master. \ud83d\ude42<\/p>\n<p>Per lo storage abbiamo scelto MySQL per non rischiare con il database (c'erano pensieri 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 \/>\nAlla fine: <\/p>\n<ul>\n<li>Abbiamo implementato il salvataggio delle coordinate attuali del corriere dall'app nell'archivio.<\/li>\n<li>Abbiamo integrato RabbitMQ e ci siamo iscritti ai messaggi di accettazione dell'ordine da parte del corriere, in modo da mostrarlo immediatamente nell'app del corriere.<\/li>\n<li>Abbiamo iniziato a registrare nel nostro 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 al rabbit riguardo alla consegna dell'ordine.<\/li>\n<li>Ho creato la visualizzazione della mappa nella pagina currentorder del sito con la posizione attuale del corriere. Tuttavia, questa funzionalit\u00e0 \u00e8 rimasta leggermente incompleta, poich\u00e9 nell'ambiente non siamo riusciti a configurare CORS per ricevere 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, dato che attualmente utilizziamo un protocollo di autenticazione di nostra creazione, il che crea una serie di difficolt\u00e0: librerie client personalizzate, lavoro scomodo da parte di partner esterni, possibili problemi di sicurezza (sappiamo che OAuth2.0 e OpenID Connect nella loro implementazione standard possono essere considerati sicuri, ma riguardo alla nostra soluzione, 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 separato che emula un servizio di archiviazione dei dati personali, per sviluppare un piccolo modello di provider di autenticazione Country-Agnostic, che estraesse i dati personali da un servizio separato (questo darebbe la possibilit\u00e0 di avere un unico servizio con cui autenticarsi da qualsiasi paese, rimanendo comunque conforme al GDPR e ad altre leggi). Questa parte \u00e8 stata completata, insieme al provider, e li abbiamo legati con successo. Successivamente, dovevamo creare un'API protetta da token forniti dal provider, supportare la loro introspezione attraverso il provider e restituire dati protetti quando la richiesta soddisfaceva le politiche di autorizzazione (verifichiamo che l'utente sia autenticato secondo lo schema Bearer, che il suo token contenga uno scope specifico + che l'utente stesso abbia il permesso di effettuare la chiamata). Anche questa parte \u00e8 stata completata. L'ultimo componente era un client JavaScript che riceveva un token, con il quale invocava l'API protetta. Questa parte non siamo riusciti a completarla. Quindi, tutta la parte funzionale era pronta, ma non \u00e8 stata completata 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 creato un mini-gioco in cui mani reattive devono lanciare una salsiccia sulla pizza. Se lanci la salsiccia in modo errato, appare sullo schermo la scritta triste \u00abScartato\u00bb, mentre se tutte le salsicce sono lanciate 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 in cui lanciare pomodori, ma non siamo riusciti.<\/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>Un breve seguito: chi ha vinto?<\/h2>\n<p>\nPrima dell'hackathon abbiamo parlato con i ragazzi e ho chiesto quale premio avrebbero voluto ricevere in caso di vittoria. \u00c8 risultato che il premio pi\u00f9 prezioso sarebbe \u00abla strada per la produzione\u00bb. <\/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, aspettatevi a breve un annuncio riguardo al gioco con i manici che distribuiscono peperoni sulla pizza.<\/p>\n<blockquote><p>Come potrebbe aver notato un lettore attento, ha vinto il team \u00abE-E-E (giochetto)\u00bb. 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 vi \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-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - 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\/it\/blog\/news\/kodim-pitstsa\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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\udd47Codiamo\u2013pizza | ProHoster","description":"Ciao, Habr. Abbiamo organizzato spontaneamente il nostro primo hackathon interno.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/news\/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.","og:url":"https:\/\/prohoster.info\/it\/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\/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}]}}