Kodim-pizza

Salutami, Habr. Avemu fattu spontaneamente u nostru primu hackathon internu. Aghju decisu di sparte cun voi u mo dulore è e cunclusioni nantu à a preparazione per questu in 2 settimane, è ancu i prughjetti chì sò diventati.

Kodim-pizza

A parte noiosa per quelli interessati à u marketing

Cumincià cù una piccula storia.

Principiu d'aprile. U primu hackathon di a Comunità MskDotNet si svolge in u nostru uffiziu. A Battaglia di Tatooine hè in piena evoluzione in a nostra galaxia sta volta. Sabatu. 20 squadre. Pizza. Tuttu hè assai sinceru (prove). Un R2-D2 gonfiabile fluttua intornu à a sala. E squadre scrivenu l'algoritmi più curretti per passà a razza più periculosa nantu à a mappa. Si move u lanciamentu di e prime corse. I cookies è u caffè sò salvatori. L'urganizatori è aghju aspittatu chì parechje persone partianu dopu à pranzu u sabbatu. Ma nò. 12 ore di codificazione daretu. A finale. Qualcosa casca, qualcosa ùn principia micca. Ma tutti sò felici. A nostra squadra vince. Semu doppiamente felici.

Aghju sparte a mo gioia in Slack è l'idea vene in mente: "Avemu bisognu di fà u nostru hackathon". Scrivu à a nostra stazione di serviziu Sasha. Silenziu.

Mane. Beiu caffè in l'uffiziu. Vecu chì Sasha si avvicina da daretu. "Lisa, questu hè grande! Avemu una data impurtante u 21 d'aprile. Facemu ! WTF!? Cusì prestu? A? Chì ? Aghju bisognu di volà à Syktyvkar per un stage à a mità d'aprili. È à l'infernu cun ella! Andemu.

Restanu 2 settimane. Ùn sò mai statu l'unicu organizatore di un hackathon. Chì sia internu. Aghju lettu articuli nantu à questu tema. Duru. Ci vole parechji mesi. Ci vole parechje persone. Avete bisognu di pensà à merch, premii, cundizioni, calendariu, interessu, capisce u scopu, budgets. O forse ancu capisce u significatu di a vita. Di sicuru, ùn ne farò micca in tempu. È mentre leghjite è preparavate, una settimana era digià passata. Hè ora di scurdà di l'articuli è cumincià à fà qualcosa.

Pigliate a nostra lista di cuntrollu per fà un hackathon internu in 1 settimana

  • Pianu: Siate tranquillamente è scrive una lista di ciò chì deve esse fattu per l'hackathon. 30 minuti.
  • Objettivu: I participanti pruponi è sceglienu i prughjetti chì volenu creà in Google Sheets. Funzione di fondo, 2 ore.
  • Schedule: nantu à u to ghjinochju scrivite un brevi spartimentu di u tempu, tenendu in contu 3 pause è a finale. 20 minuti.
  • Команды: pubblicà un missaghju annantu à l'hackathon cù un schedariu da a stazione di serviziu in i canali IT in Slack/mail/etc è crea un canale separatu per l'hackathon. In questu, ognunu hè divisu in squadre, è quelli chì sò indecisi facenu questu in i primi 5 minuti di l'hackathon. Funzione di fondo, 2 ore.
  • Panini: vi vene cun merch cù dui sviluppatori, dà à u designer per rende, è ricevi prontu. U travagliu di fondo, 3 ghjorni.
  • Hackathon: venite à l'uffiziu, coordinate tutti à u principiu, andate in a vostra attività, leghjite Reddit, annunzià impurtante ogni pausa di pizza fresca, pigliate foto di u tramontu, annunziate a finale, votate inseme è sceglite u vincitore. Ghjornu di 1.
  • Sottu à l'asteriscu: Di sicuru, pensate constantemente à chì tuttu va bè. Di sicuru, micca tutti vi vede u vostru missaghju è hè megliu à parlà à qualchi in persona. Di sicuru, se qualchissia vi aiuta, tuttu diventerà 2 volte più faciule (a maravigliosa Alena m'hà aiutatu).

A parte menu noiosa di a data di l'hackathon

Perchè u 21 d'aprile ? Stu ghjornu hè significativu per noi. Esattamente un annu fà, u 21 d'aprile, avemu cascatu sottumessu durante u primu weekend dopu l'iniziu di a Campagna Federale di Publicità. U ghjornu dopu, dumenica, a nostra squadra era à u travagliu da 8 ore. Dopu avemu criatu una tavola di Sundayhackathon in Trello è hà cuminciatu una settimana di travagliu di turnu, 12 ore à ghjornu. A situazione era cusì critica chì ùn avemu mancu tempu di manghjà è eramu alimentati da ragazzi di altre squadre.

Kodim-pizza

Pudete leghje una storia più dettagliata à Pagina di Fëdor Ovchinnikov (u nostru CEO). Da tandu, avemu cambiatu assai, ma avà ùn ci scurderemu di sicuru a data.

Quist'annu, avemu decisu chì questu avvenimentu vale a pena perpetuà in a memoria di a pusterità è, in i migliori tradizioni, avemu urganizatu u primu hackathon internu in a storia di Dodo, chì durò 10 ore.

A parte più noiosa di i prughjetti di hackathon

Disclaimer: tutte e descrizzioni sò state scritte da i picciotti stessi, cusì l'autore di u testu ùn hè micca a mo.

Oleg Learning (apprendimentu automaticu)

Dima Kochnev, Sasha Andronov (@alexandronov)

Vulenu fà una rete neurale chì determina quale tipu di pizza hè in una foto senza sapè. In u risultatu, avemu fattu un assai simplice è di ghjoculu - ricunnosce 10 pizze, avemu apprussimatamente capitu cumu tuttu funziona, quantu pussibule in un ghjornu (~ 10 ore).

Kodim-pizza

In particulare, avemu capitu chì l'industria hà righjuntu un livellu induve un sviluppatore ordinariu pò piglià biblioteche pronti, leghje a documentazione è furmà a so rete neurale senza cunniscenza prufonda di u sughjettu. È funziona abbastanza bè per risolve i prublemi veri.

Strumenti utilizati:

  • imagineai - una libreria còmuda è simplice per travaglià cù l'apprendimentu automaticu è a visione per computer.
  • Avemu pruvatu dui mudelli - ResNet50, Yolo.
  • U codice hè statu scrittu, sicuru, in Python.

Avemu avutu 11000 3 ritratti, ma quasi 4/500 d'elli sò diventati basura, è u restu avianu anguli diffirenti, inappropriati. In u risultatu, avemu pigliatu un mudellu ready-made (chì sà solu truvà pizza) è cù u so aiutu avemu separatu a basura. In seguitu, u titulu di a foto include u nome di a pizza - cusì l'avemu ordinatu in cartulare, ma hè risultatu chì i nomi ùn coincidevanu micca cù a realità è avemu avutu a pulizziari manualmente. À a fine, ci sò stati circa 600-10 ritratti, hè chjaru chì questu hè una quantità insignificante, ma in ogni modu, questu era abbastanza per separà XNUMX pizze l'una di l'altru.

Per furmà a griglia, avemu pigliatu a macchina virtuale più economica in Azure nantu à una NVIDIA Tesla K80. Anu furmati annantu à l'epica 100, ma era chjaru chì a reta hè diventata oversaturated after 50 epochs, per u fattu chì ci era un picculu dataset.

In fatti, tuttu u prublema hè a mancanza di boni dati.

Kodim-pizza

Pudemu avè cunfunditu i termini un pocu, ma duvemu piglià in contu chì ùn avemu micca spirienza in tuttu in u travagliu cù tutte queste cose.

GUI per NOOBS (console per l'ordine di pizza)

Misha Kumachev (Ceridanu), Zhenya Bikkinin, Zhenya Vasiliev

Avemu riunitu un prototipu di una applicazione di cunsola per i geeks, grazie à quale pudete urdinà pizza à traversu u terminal o a linea di cummanda, o ancu integrà in u pipeline di implementazione è, dopu a liberazione successu, furnisce pizza à l'uffiziu.

Kodim-pizza

U travagliu hè statu divisu in parechje parte: avemu capitu cumu funziona a nostra API per l'applicazioni mobili, assemblatu a nostra propria CLI utilizendu oclif è cunfigurà a publicazione di u pacchettu chì avemu cullatu. L'ultimu compitu implicava uni pochi di minuti spiacevoli versu a fine di l'hackathon. Tuttu hà travagliatu in u locu per noi, è ancu i vechji versioni publicati di u pacchettu hà travagliatu, ma i novi (chì aghjunghjenu più funzioni cool è emoticons) rifiutanu di travaglià. Avemu passatu circa 40 minuti per pruvà à capisce ciò chì hè andatu male, ma à a fine tuttu hà travagliatu magicamente per sè stessu).

U nostru prugramma massimu per l'hackathon era un veru ordine di pizza à l'uffiziu attraversu u nostru CLI. Avemu currettu tuttu una decina di volte nantu à u bancu di prova, ma e mo mani tremavanu sempre quandu aghju intrutu cumandamenti in produzzione.

Kodim-pizza

In u risultatu, avemu finalmente fattu!

Kodim-pizza

CourierGo

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

Avemu pigliatu l'idea di una "App per Courier".

Sfondate nantu à a preparazione.Inizialmente, mi dumandava chì tipu di funziunalità puderia esse in l'applicazione? Emerge a seguente lista di funziunalità:

  • L'applicazione accede à u cash register di spedizione utilizendu u codice.
  • L'applicazione mostra immediatamente ordini dispunibuli è ordini chì deve esse pigliatu.
  • U curriere nota l'ordine è u porta in viaghju.
  • Hè mostratu u tempu stimatu è s'ellu hè puntuale o micca.
  • Mostra à u cliente chì u corriere hè partutu.
  • U cliente principia à esse mostratu u puntu di u corriere nantu à a mappa è u tempu stimatu.
  • U corriere pò scrive à u cliente in chat da l'applicazione.
  • U cliente pò scrive à u corriere via chat da l'applicazione.
  • Cinque minuti prima di l'arrivu, u cliente riceve un missaghju chì u corriere hè vicinu, esse preparatu.
  • U curieru nota in l'applicazione chì hè ghjuntu è aspetta.
  • U curieru chjama da l'applicazione cun un clic è informa chì (hè in crescita, hè ghjuntu, etc.)
  • U cliente accetta l'ordine è inserisce un codice PIN da l'applicazione o SMS per cunfirmà a consegna (cum'è una firma) In modu chì u corriere ùn pò micca cumpiendu a consegna in anticipu s'ellu hè tardi.
  • L'ordine hè marcatu cum'è mandatu in u sistema.

In più un paru di scenarii alternativi:

  • U corriere pò marcà l'ordine cum'è micca consegnatu è selezziunate u mutivu.
  • Sè vo site in ritardo, u corriere pò emette un certificatu elettronicu via SMS cù un buttone. O u certificatu ghjunghje automaticamente se u termini di consegna ùn hè micca rispettatu.

U sensu di prumessa è a necessità di stu prughjettu era, sicuru, energizante.

U ghjornu dopu, andemu à pranzu cù a squadra è discutemu ciò chì a funziunalità minima di l'appiecazione pareva.

In u risultatu, a seguente lista di ciò chì deve esse fattu à l'hackathon hè stata formata:

  • Accedi à u cash register di spedizione.
  • Mostra a pusizione attuale.
  • Mandate dati à una API esterna (coordenate, ricevutu l'ordine, mandatu l'ordine).
  • Riceve dati da API esterni (ordini di corriere attuali).
  • Mandate un avvenimentu indicà chì avete pigliatu l'ordine per a consegna / consegna.
  • Mostra a pusizione attuale di u corriere nantu à a mappa di u situ web.

U travagliu principale, cum'è paria, stava in a creazione di u backend, l'applicazione stessa (dopu à discussioni, avemu sceltu ReactNative per sviluppà l'applicazione, o megliu u quadru per questu - expo.io, chì vi permette micca di scrive codice nativu in tuttu). In quantu à u backend, inizialmente ci era una speranza in Vanya Zverev, cum'è hà avutu l'esperienza di travaglià cù u nostru mudellu di serviziu è k8s (chì travagliu hà pigliatu). Andrey Sarafanov è aghju pigliatu ReactNative per un spinu.

Aghju decisu di pruvà à creà immediatamente un repository di travagliu per u prughjettu stessu. A 12 di notte aghju scontru u fattu chì a geolocation in u fondu ùn viaghja micca bè in ReactNative, se ùn scrive micca codice nativu, era un pocu frustratu. Allora aghju lasciatu quandu aghju realizatu chì stava leghjendu a documentazione micca di u framework expo.io, ma di ReactNative. In u risultatu, in u cursu di a sera, aghju digià capitu cumu uttene a pusizione attuale in expo.io è disegnà schermi separati (per u login, l'ordine di visualizazione, etc.).

Kodim-pizza

A matina à l'hackathon, anu attiratu Gleb in u so prughjettu super-prumessu. Anu prestu prestu cun un pianu di ciò chì ci vole à fà.

Kodim-pizza

Avemu fattu un sbagliu quandu, in cunfurmità cù u mudellu di prughjettu, avemu pruvatu à cumunicà micca via HTTP, ma via GRPC, postu chì nimu ùn sapia cumu custruisce un cliente GRPC per JavaScript. In fine, dopu avè passatu circa un'ora è mezu nantu à questu, avemu abbandunatu sta idea. Per via di questu, i picciotti nantu à u back-end cuminciaru à rifà u servitore finitu da GRPC à WebApi. Dopu à una meza ora, avemu statu infine capace di stabilisce a cumunicazione trà l'applicazione è u backend, eccu. Ma à u stessu tempu, Gleb era guasi finitu di a implementazione à k8s è più l'auto-implementazione di un impegnu à u maestru. 🙂

Avemu sceltu MySQL cum'è almacenamiento per ùn piglià risichi almenu cù a basa di dati (avemu avutu pinsamenti nantu à CosmosDb).

Kodim-pizza

In resume:

  • Implementatu salvamentu di e coordenate attuali di u corriere da l'applicazione à a basa di dati.
  • Avemu installatu RabbitMQ è abbonatu à i missaghji nantu à u corriere chì piglia un ordine per vede immediatamente l'ordine da u corriere in l'applicazione.
  • Avemu cuminciatu à salvà u tempu di consegna di l'ordine in a nostra basa di dati dopu chì u corriere hà pressatu un buttone in l'applicazione. Ùn avemu micca u tempu di aghjunghje l'inviu di un avvenimentu à u rebbit chì l'ordine hè statu mandatu.
  • Aghju fattu una visualizazione di a mappa in a pagina di l'ordine attuale nantu à u situ web cù a pusizione attuale di u corriere. Ma sta funziunalità ferma un pocu infinitu, postu chì ùn era micca pussibule di cunfigurà CORS in l'ambiente per riceve coordenate da u nostru novu serviziu.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Vulemu implementà un fornitore OpenID Connect, postu chì in u mumentu avemu usatu un protokollu di autentificazione di u nostru propiu disignu, è questu crea una quantità di difficultà: biblioteche di clientele persunalizate, travagliu sconveniente da parte di i partenarii esterni, pussibuli prublemi di sicurezza (dopu tuttu. , OAuth2.0 è OpenID Connect in l'implementazione di riferimentu pò esse cunsideratu sicuru, ma ùn sò micca sicuru di a nostra suluzione).

Kodim-pizza

Avemu fattu un serviziu separatu chì emula un serviziu per almacenà e dati persunali in modu di creà un picculu mudellu Country-Agnostic di un fornitore di autentificazione chì andarà à un serviziu separatu per i dati persunali (chì in u futuru permetterà di avè un serviziu cù quale unu puderia login cun un registratu di cuntu in ogni paese, è à u stessu tempu rispettà u GDPR è altre lege federale). Avemu fattu sta parte, cum'è u fornitore, è li hà cunnessu cù l'altri. In seguitu, era necessariu di creà una API chì seria prutetta da i tokens emessi da u fornitore, sustene a so introspezione per mezu di u fornitore è rinvià e dati prutetti se a dumanda soddisfava e pulitiche d'autorizazione (verificà chì l'utilizatore hè autentificatu secondu u schema Bearer). , u so token cuntene un certu scopu + y L'utilizatore stessu hà un permessu chì permette di fà a chjama). Sta parte hè stata ancu finita. L'ultimu cumpunente era un cliente JavaScript, chì saria datu un token, cù l'aiutu di quale chjamà una API prutetta. Ùn avemu micca u tempu di fà sta parte. Questu hè, tutta a parte funziunale era pronta, ma a parte frontale ùn era micca pronta per dimustrà a funziunalità di tuttu u sistema.

E-E-E (giocattolo)

Dima Afonchenko, Sasha Konovalov

Avemu fattu un mini-juguettu nantu à a yunka induve e mani fresche tiranu salsiccia nantu à a pizza. Se mette a salsiccia in modu incorrectu, un tristu missaghju "Rejected" apparisce nantu à u screnu, è se tutta a salsiccia hè stata messa currettamente, un fattu aleatoriu nantu à a pizza appare.

Kodim-pizza

Vulemu fà un secondu livellu cù i pumati, ma ùn avemu micca tempu.

Kodim-pizza

Cuntinuu brevi : quale hà vintu ?

Prima di l'hackathon, avemu parlatu cù i picciotti è aghju dumandatu quale premiu vulianu riceve si vincenu. Hè risultatu chì u premiu più preziosu seria "a strada di l'alimentariu".

Kodim-pizza

Dunque, aspittemu di annunzià un ghjocu cù e mani chì mettenu pepite nantu à a pizza prestu.

Cum'è un lettore attentu puderia avè nutatu, a squadra "E-E-E (juguettu)" hà vintu. Felicitazioni ragazzi !

Solu l'utilizatori registrati ponu participà à l'indagine. Firmà lu, per piacè.

Qualessu prughjettu ti piace più ?

  • Oleg Learning (apprendimentu automaticu)

  • GUI per NOOBS

  • CourierGo

  • M87

  • E-E-E

5 utilizatori anu vutatu. 3 utilizatori si sò astenuti.

Source: www.habr.com

Add a comment