Pizza Kodim

Ciao, Habr. Abbiamo organizzato spontaneamente il nostro primo hackathon interno. Ho deciso di condividere con voi i miei dolori e le mie conclusioni sulla preparazione in 2 settimane, così come i progetti che si sono rivelati.

Pizza Kodim

La parte noiosa per chi è interessato al marketing

Inizierò con una piccola storia.

Inizio aprile. Il primo hackathon della MskDotNet Community si sta svolgendo nel nostro ufficio. Questa volta la battaglia di Tatooine è in pieno svolgimento nella nostra galassia. Sabato. 20 squadre. Pizza. Tutto è molto sincero (prova). Un R2-D2 gonfiabile fluttua per la sala. Le squadre scrivono gli algoritmi più corretti per superare la corsa più pericolosa sulla mappa. Stiamo spostando il lancio delle prime gare. Biscotti e caffè sono salvavita. Io e gli organizzatori ci aspettavamo che sabato dopo pranzo partissero molte persone. Ma no. 12 ore di codifica alle spalle. Il finale. Qualcosa cade, qualcosa non si avvia. Ma tutti sono felici. La nostra squadra vince. Siamo doppiamente felici.

Sto condividendo la mia gioia in Slack e mi viene in mente l'idea: "Dobbiamo fare il nostro hackathon". Scrivo alla nostra stazione di servizio Sasha. Silenzio.

Mattina. Bevo il caffè in ufficio. Vedo Sasha avvicinarsi da dietro. “Lisa, è fantastico! Abbiamo una data importante il 21 aprile. Facciamolo!" WTF!? Così veloce? UN? Che cosa? Devo volare a Syktyvkar per uno stage a metà aprile. E al diavolo! Andiamo.

2 settimane rimaste. Non sono mai stato l'unico organizzatore di un hackathon. Lascia che sia interno. Ho letto articoli su questo argomento. Difficile. Ci vogliono diversi mesi. Sono necessarie diverse persone. Devi pensare al merchandising, ai premi, alle condizioni, al programma, agli interessi, comprendere l'obiettivo, i budget. O forse anche capire il significato della vita. Sicuramente non farò in tempo. E mentre leggevi e ti preparavi era già passata una settimana. È ora di dimenticare gli articoli e iniziare a fare qualcosa.

Consulta la nostra lista di controllo per organizzare un hackathon interno in 1 settimana

  • План: Ti siedi con calma e scrivi un elenco di ciò che deve essere fatto per l'hackathon. minuti 30.
  • Compito: i partecipanti propongono e scelgono i progetti che desiderano creare in Fogli Google. Attività in background, 2 ore.
  • orario: in ginocchio scrivi un breve riassunto del tempo, tenendo conto di 3 pause e della finale. minuti 20.
  • comandi: pubblicare un messaggio sull'hackathon con un programma dalla stazione di servizio nei canali IT in Slack/mail/etc e creare un canale separato per l'hackathon. In esso tutti sono divisi in squadre e chi è indeciso lo fa nei primi 5 minuti dell'hackathon. Attività in background, 2 ore.
  • Panini: crei il merchandising con due sviluppatori, lo dai al designer per il rendering e lo ricevi pronto. Attività in background, 3 giorni.
  • Hackaton: venite in ufficio, coordinate tutti all'inizio, fate i fatti vostri, leggete Reddit, soprattutto annunciate ogni pausa sulla pizza fresca, scattate foto al tramonto, annunciate la finale, votate insieme e scegliete il vincitore. 1 giorno.
  • Sotto l'asterisco: Certo, pensi costantemente che tutto vada bene. Naturalmente non tutti vedranno il tuo messaggio ed è meglio parlare con alcuni di persona. Certo, se qualcuno ti aiuta, tutto diventerà 2 volte più semplice (mi ha aiutato la meravigliosa Alena).

La parte meno noiosa dell'appuntamento dell'hackathon

Perché il 21 aprile? Questo giorno è significativo per noi. Esattamente un anno fa, il 21 aprile, durante il primo fine settimana dopo l'inizio della campagna pubblicitaria federale, eravamo sotto carico. Il giorno successivo, domenica, la nostra squadra era al lavoro dalle 8 del mattino. Poi abbiamo creato una bacheca del Sundayhackathon in Trello ed è iniziata una settimana di lavoro a turni, 12 ore al giorno. La situazione era così critica che non abbiamo avuto nemmeno il tempo di mangiare e siamo stati nutriti da ragazzi di altre squadre.

Pizza Kodim

Puoi leggere una storia più dettagliata su La pagina di Fëdor Ovchinnikov (il nostro amministratore delegato). Da allora siamo cambiati molto, ma ora sicuramente non dimenticheremo la data.

Quest'anno abbiamo deciso che questo evento valeva la pena di essere perpetuato nella memoria dei posteri e, nella migliore tradizione, abbiamo organizzato il primo hackathon interno nella storia di Dodo, della durata di 10 ore.

La parte più noiosa dei progetti di hackathon

Disclaimer: tutte le descrizioni sono state scritte dai ragazzi stessi, quindi la paternità del testo non è mia.

Oleg Learning (apprendimento automatico)

Dima Kochnev, Sasha Andronov (@alexandronov)

Volevano creare una rete neurale che determinasse quale tipo di pizza c'è in una foto senza alcuna conoscenza. Di conseguenza, ne abbiamo realizzato uno molto semplice e giocattolo: riconosce 10 pizze, abbiamo capito approssimativamente come funziona il tutto, per quanto possibile in un giorno (~ 10 ore).

Pizza Kodim

In particolare, ci siamo resi conto che l'industria ha raggiunto un livello in cui un normale sviluppatore può prendere librerie già pronte, leggere la documentazione e addestrare la propria rete neurale senza una profonda conoscenza dell'argomento. E funzionerà abbastanza bene da risolvere problemi reali.

Strumenti utilizzati:

  • imageai — una libreria comoda e semplice per lavorare con l'apprendimento automatico e la visione artificiale.
  • Abbiamo provato due modelli: ResNet50, Yolo.
  • Il codice è stato scritto, ovviamente, in Python.

Avevamo 11000 foto, ma quasi 3/4 di esse si sono rivelate spazzatura e il resto aveva angolazioni diverse e inappropriate. Di conseguenza, abbiamo preso un modello già pronto (che sa semplicemente come trovare la pizza) e con il suo aiuto abbiamo separato la spazzatura. Successivamente, il titolo della foto includeva il nome della pizza, quindi l'abbiamo ordinata in cartelle, ma si è scoperto che i nomi non coincidevano con la realtà e abbiamo dovuto ripulirli manualmente. Alla fine erano rimaste circa 500-600 foto, è chiaro che si tratta di una quantità insignificante, ma comunque sufficiente per separare 10 pizze l'una dall'altra.

Per addestrare la rete, abbiamo preso la macchina virtuale più economica di Azure su una NVIDIA Tesla K80. Si sono addestrati su di esso per 100 epoche, ma era chiaro che la rete era sovrasaturata dopo 50 epoche, a causa del fatto che il set di dati era piccolo.

In realtà, l’intero problema è la mancanza di dati validi.

Pizza Kodim

Forse abbiamo un po' confuso i termini, ma dobbiamo tenere presente che non abbiamo alcuna esperienza nel lavorare con tutte queste questioni.

GUI per NOOBS (console per ordinare pizza)

Misha Kumachev (Ceridano), Zhenya Bikkinin, Zhenya Vasiliev

Abbiamo messo insieme un prototipo di un'applicazione console per geek, grazie alla quale puoi ordinare la pizza tramite il terminale o la riga di comando, o addirittura integrarla nella pipeline di implementazione e, una volta rilasciato con successo, consegnare la pizza in ufficio.

Pizza Kodim

Il lavoro è stato diviso in più parti: abbiamo capito come funziona la nostra API per applicazioni mobili, abbiamo assemblato la nostra CLI utilizzando oclif e configurato la pubblicazione del pacchetto che abbiamo raccolto. L'ultimo compito ha comportato alcuni minuti spiacevoli verso la fine dell'hackathon. Tutto funzionava localmente per noi, e anche le vecchie versioni pubblicate del pacchetto funzionavano, ma quelle nuove (che aggiungevano funzionalità ed emoticon più interessanti) si rifiutavano di funzionare. Abbiamo impiegato circa 40 minuti cercando di capire cosa fosse andato storto, ma alla fine tutto ha magicamente funzionato da solo).

Il nostro programma massimo per l'hackathon è stato un vero e proprio ordine di pizza in ufficio tramite la nostra CLI. Abbiamo eseguito tutto una dozzina di volte sul banco di prova, ma mi tremavano ancora le mani quando ho inserito i comandi in produzione.

Pizza Kodim

Di conseguenza, finalmente ce l'abbiamo fatta!

Pizza Kodim

CorriereVai

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

Abbiamo preso l'idea di una “App for Courier”.

Informazioni sulla preparazione.Inizialmente, mi chiedevo che tipo di funzionalità potrebbero essere presenti nell'applicazione? È emerso il seguente elenco di funzionalità:

  • L'applicazione accede al registratore di cassa di consegna utilizzando il codice.
  • L'applicazione mostra immediatamente gli ordini disponibili e gli ordini che devono essere presi.
  • Il corriere annota l'ordine e lo porta in viaggio.
  • Gli viene mostrato il tempo stimato e se è puntuale o meno.
  • Mostra al cliente che il corriere è partito.
  • Al cliente inizia a essere mostrato il punto del corriere sulla mappa e l'orario stimato.
  • Il corriere può scrivere al cliente in chat dall'applicazione.
  • Il cliente può scrivere al corriere tramite chat dall'applicazione.
  • Cinque minuti prima dell'arrivo, il cliente riceve un messaggio che il corriere è vicino, sii preparato.
  • Il corriere annota nella domanda che è arrivato e sta aspettando.
  • Il corriere chiama dall'applicazione con un clic e segnala che (sta salendo, è arrivato, ecc.)
  • Il cliente accetta l'ordine e inserisce un codice PIN dall'applicazione o un SMS per confermare la consegna (come firma) In modo che il corriere non possa completare la consegna in anticipo se è in ritardo.
  • L'ordine è contrassegnato come consegnato nel sistema.

Più un paio di scenari alternativi:

  • Il corriere potrà contrassegnare l'ordine come non consegnato e selezionarne il motivo.
  • Se sei in ritardo, il corriere può emettere un certificato elettronico via SMS con un solo pulsante. Oppure il certificato arriva automaticamente se il termine di consegna non viene rispettato.

Il sentimento di promessa e necessità di questo progetto è stato, ovviamente, energizzante.

Il giorno successivo siamo andati a pranzo con il team e abbiamo discusso di come sarebbero state le funzionalità minime dell'applicazione.

Di conseguenza, è stato formato il seguente elenco di ciò che doveva essere fatto durante l'hackathon:

  • Accedi al registratore di cassa di consegna.
  • Visualizza la posizione attuale.
  • Invia dati a un'API esterna (coordinate, ricevuto l'ordine, consegnato l'ordine).
  • Ricevi dati da API esterne (ordini correnti del corriere).
  • Invia un evento indicando che hai preso l'ordine per la consegna/consegnato.
  • Visualizza la posizione attuale del corriere sulla mappa del sito.

Il lavoro principale, a quanto pare, consisteva nel creare il backend, l'applicazione stessa (dopo aver discusso, abbiamo scelto ReactNative per sviluppare l'applicazione, o meglio il relativo framework - expo.io, che ti consente di non scrivere affatto codice nativo). In termini di backend, inizialmente c'era speranza in Vanya Zverev, poiché aveva esperienza nel lavorare con il nostro modello di servizio e k8 (lavoro che ha accettato). Andrey Sarafanov e io abbiamo provato ReactNative.

Ho deciso di provare a creare immediatamente un repository funzionante per il progetto stesso. A mezzanotte mi sono accorto che la geolocalizzazione in background non funziona bene in ReactNative, se non scrivi codice nativo ero un po' frustrato. Poi ho lasciato andare quando mi sono reso conto che stavo leggendo la documentazione non del framework expo.io, ma di ReactNative. Di conseguenza, nel corso della serata ho già capito come ottenere la posizione attuale in expo.io e disegnare schermate separate (per il login, la visualizzazione degli ordini, ecc.).

Pizza Kodim

La mattina all'hackathon hanno attirato Gleb nel loro progetto super promettente. Hanno rapidamente elaborato un piano di ciò che doveva essere fatto.

Pizza Kodim

Abbiamo commesso un errore quando, secondo il modello di progetto, abbiamo provato a comunicare non tramite HTTP, ma tramite GRPC, poiché nessuno sapeva come costruire un client GRPC per JavaScript. Alla fine, dopo aver dedicato circa un'ora e mezza a questo, abbiamo abbandonato questa idea. Per questo motivo, i ragazzi del back-end hanno iniziato a rifare il server finito da GRPC a WebApi. Dopo mezz'ora siamo finalmente riusciti a stabilire la comunicazione tra l'applicazione e il backend, ecco. Ma allo stesso tempo, Gleb stava quasi completando la distribuzione su k8 e inoltre la distribuzione automatica di un commit sul master. 🙂

Abbiamo scelto MySQL come storage per non correre rischi almeno con il database (avevamo pensato a CosmosDb).

Pizza Kodim

In sintesi:

  • Implementato il salvataggio delle coordinate attuali del corriere dall'applicazione al database.
  • Abbiamo installato RabbitMQ e ci siamo iscritti ai messaggi sul ritiro dell'ordine da parte del corriere per visualizzare immediatamente l'ordine del corriere nell'applicazione.
  • Abbiamo iniziato a salvare i tempi di consegna dell'ordine nel nostro database dopo che il corriere ha premuto un pulsante nell'applicazione. Non abbiamo avuto il tempo di aggiungere l'invio di un evento alla notifica della consegna dell'ordine.
  • Ho fatto visualizzare una mappa nella pagina dell'ordine corrente sul sito con la posizione attuale del corriere. Ma questa funzionalità è rimasta un po' incompiuta, poiché non era possibile configurare CORS nell'ambiente per ricevere le coordinate dal nostro nuovo servizio.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Volevamo implementare un provider OpenID Connect, poiché al momento utilizziamo un protocollo di autenticazione di nostra progettazione, e questo crea una serie di difficoltà: librerie client personalizzate, lavoro scomodo da parte di partner esterni, possibili problemi di sicurezza (dopo tutto , OAuth2.0 e OpenID Connect nell'implementazione di riferimento possono essere considerati sicuri, ma non sono sicuro della nostra soluzione).

Pizza Kodim

Abbiamo creato un servizio separato che emula un servizio per la memorizzazione dei dati personali al fine di creare un piccolo modello Country-Agnostic di un fornitore di autenticazione che andrebbe a un servizio separato per i dati personali (questo consentirebbe in futuro di avere un servizio con a cui è possibile accedere con la registrazione di un account in qualsiasi paese e allo stesso tempo rispettare il GDPR e le altre leggi federali). Abbiamo fatto questa parte, così come il fornitore, e li abbiamo collegati tra loro con successo. Successivamente è stato necessario creare un'API che fosse protetta dai token emessi dal provider, ne supportasse l'introspezione tramite il provider e restituisse dati protetti se la richiesta soddisfaceva le policy di autorizzazione (verifichiamo che l'utente sia autenticato secondo lo schema Bearer , il suo token contiene un certo ambito + y L'utente stesso ha un permesso che consente di effettuare la chiamata). Anche questa parte è stata completata. L'ultimo componente era un client JavaScript, al quale sarebbe stato assegnato un token, con l'aiuto del quale avrebbe richiamato un'API protetta. Non abbiamo avuto tempo per fare questa parte. Cioè, l'intera parte funzionale era pronta, ma la parte front-end non era pronta per dimostrare la funzionalità dell'intero sistema.

EEE (giocattolo)

Dima Afonchenko, Sasha Konovalov

Abbiamo realizzato un mini-giocattolo su Yunka in cui mani allegre lanciano salsicce sulla pizza. Se metti la salsiccia in modo sbagliato, sullo schermo appare il triste messaggio "Rifiutato" e se tutta la salsiccia è stata messa correttamente, appare un fatto casuale sulla pizza.

Pizza Kodim

Volevamo realizzare un secondo livello lanciando pomodori, ma non avevamo tempo.

Pizza Kodim

Breve seguito: chi ha vinto?

Prima dell'hackathon abbiamo parlato con i ragazzi e ho chiesto quale premio avrebbero voluto ricevere se vincessero. Si è scoperto che il premio più prezioso sarebbe stato “la strada verso il cibo”.

Pizza Kodim

Aspettatevi quindi che presto annunceremo un gioco con le mani che metta i peperoni sulla pizza.

Come un lettore attento avrà notato, ha vinto la squadra “E-E-E (giocattolo)”. Congratulazioni ragazzi!

Solo gli utenti registrati possono partecipare al sondaggio. AccediPer favore.

Quale progetto ti è piaciuto di più?

  • Oleg Learning (apprendimento automatico)

  • GUI per NOOBS

  • CorriereVai

  • M87

  • uh-uh

5 utenti hanno votato. 3 utenti si sono astenuti.

Fonte: habr.com

Aggiungi un commento