Kodim-pizza

Hallo, Habr. Wy hawwe spontaan ús earste ynterne hackathon hâlden. Ik besleat om myn pine en konklúzjes mei jo te dielen oer de tarieding foar it yn 2 wiken, lykas de projekten dy't bliken te wêzen.

Kodim-pizza

It saaie diel foar dyjingen dy't ynteressearre binne yn marketing

Ik sil begjinne mei in lyts ferhaal.

Begjin april. De earste MskDotNet Community hackathon fynt plak yn ús kantoar. De Slach by Tatooine is dizze kear yn folle gong yn ús galaxy. Sneon. 20 teams. Pizza. Alles is heul oprjocht (bewizen). In opblaasbare R2-D2 driuwt om 'e hal. Teams skriuwe de meast korrekte algoritmen om de gefaarlikste race op 'e kaart troch te jaan. Wy ferpleatse de lansearring fan 'e earste races. Koekjes en kofje binne lifesavers. De organisatoaren en ik hienen ferwachte dat der sneon in protte minsken fuort soene nei de middei. Mar nee. 12 oeren fan kodearring efter. De finale. Der falt wat ôf, wat begjint net. Mar elkenien is bliid. Us team wint. Wy binne dûbel bliid.

Ik diel myn freugde yn Slack en it idee komt yn 't sin: "Wy moatte ús eigen hackathon dwaan." Ik skriuw nei ús tankstasjon Sasha. Stilte.

Moarn. Ik drink kofje op kantoar. Ik sjoch Sasha fan efteren oankommen. "Lisa, dit is geweldich! Wy hawwe in wichtige datum op 21 april. Litte wy it dwaan!" WTF!? Sa gau? IN? Wat? Ik moat heal april nei Syktyvkar fleane foar in staazje. En nei de hel mei it! Litte wy.

Noch 2 wiken. Ik haw nea west de ienige organisator fan in hackathon. Lit it ynterne wêze. Ik lês artikels oer dit ûnderwerp. Taai. It duorret ferskate moannen. Der binne ferskate minsken nedich. Jo moatte tinke oer merch, prizen, betingsten, skema, belangstelling, begripe it doel, budzjetten. Of miskien sels de sin fan it libben útfine. Ik kom it perfoarst net op 'e tiid. En wylst jo oan it lêzen en tariede, wie der al in wike foarby. It is tiid om de artikels te ferjitten en wat te begjinnen te dwaan.

Fang ús checklist foar it hâlden fan in ynterne hackathon yn 1 wike

  • Plan: Jo sitte rêstich en skriuwe in list fan wat der dien wurde moat foar de hackathon. 30 minuten.
  • Objective: Dielnimmers stelle en kieze de projekten dy't se wolle meitsje yn Google Blêden. Eftergrûntaak, 2 oeren.
  • Schedule: op jo knibbel skriuwe jo in koarte tiidútdieling, rekken hâldend mei 3 pauzes en de finale. 20 minuten.
  • Kommando's: publisearje in berjocht oer de hackathon mei in skema fan it tsjinststasjon yn IT-kanalen yn Slack/mail/etc en meitsje in apart kanaal foar de hackathon. Dêryn is elkenien ferdield yn teams, en dyjingen dy't net beslute binne, dogge dit yn 'e earste 5 minuten fan' e hackathon. Eftergrûntaak, 2 oeren.
  • Buns: jo komme mei merch mei twa ûntwikkelders, jou it oan de ûntwerper foar rendering, en ûntfange it klear. Eftergrûntaak, 3 dagen.
  • Hackathon: jo komme nei it kantoar, koördinearje elkenien oan it begjin, gean oer jo bedriuw, lês Reddit, kundigje wichtich elke brek oer farske pizza oan, meitsje foto's fan 'e sinne, kundigje de finale oan, stimme tegearre en kies de winner. 1 dei.
  • Under it asterisk: Jo tinke fansels hieltyd oer dat alles goed giet. Fansels sil net elkenien jo berjocht sjen en it is better om persoanlik mei guon te praten. Fansels, as immen jo helpt, sil alles 2 kear makliker wurde (de prachtige Alena holp my).

De minder saai part oer de hackathon datum

Wêrom 21 april? Dizze dei is wichtich foar ús. Krekt in jier lyn, op 21 april, foelen wy yn it earste wykein nei it begjin fan 'e Federal Advertising Campaign ûnder lading. De oare deis, snein, wie ús team fan 8 oere ôf oan it wurk. Doe makken wy in Sundayhackathon-boerd yn Trello en in wike fan skiftwurk begon, 12 oeren deis. De sitewaasje wie sa kritysk dat wy net iens tiid hiene om te iten en waarden fiede troch jonges fan oare teams.

Kodim-pizza

Jo kinne in mear detaillearre ferhaal lêze op Fjodor Ovchinnikov's side (ús CEO). Sûnt dy tiid binne wy ​​in protte feroare, mar no sille wy de datum perfoarst net ferjitte.

Dit jier hawwe wy besletten dat dit barren it wurdich wie te behâlden yn it ûnthâld fan it neiteam en, yn 'e bêste tradysjes, organisearren wy de earste ynterne hackathon yn' e Dodo-skiednis, dy't 10 oeren duorre.

It saaiste diel oer hackathon-projekten

Disclaimer: alle beskriuwingen binne skreaun troch de jonges sels, dus it skriuwerskip fan de tekst is net fan my.

Oleg Learning (machine learning)

Dima Kochnev, Sasha Andronov (@alexandronov)

Se woene in neuraal netwurk meitsje dat sûnder kennis bepale hokker soarte pizza op in foto is. As gefolch hawwe wy in heul ienfâldich en boartersguod makke - it herkent 10 pizza's, wy hawwe rûchwei útfûn hoe't alles wurket, sa fier mooglik yn in dei (~ 10 oeren).

Kodim-pizza

Benammen wy realisearre dat de yndustry hat berikt in nivo dêr't in gewoane ûntwikkelder kin nimme ready-made biblioteken, lêze de dokumintaasje en traine syn neurale netwurk sûnder djippe kennis fan it ûnderwerp. En it sil goed genôch wurkje om echte problemen op te lossen.

Brûkte ark:

  • imageai - in handige en ienfâldige bibleteek foar wurkjen mei masine learen en kompjûterfisy.
  • Wy hawwe twa modellen besocht - ResNet50, Yolo.
  • De koade is skreaun, fansels, yn Python.

Wy hiene 11000 foto's, mar hast 3/4 fan harren die bliken garbage, en de rest hie ferskillende, ûnskiklik hoeken. As resultaat namen wy in klear model (dat gewoan wit hoe't jo pizza fine kinne) en mei har help hawwe wy it jiskefet skieden. Dêrnei befette de titel fan 'e foto de namme fan' e pizza - dus wy sorteare it yn mappen, mar it die bliken dat de nammen net oerienkomme mei de realiteit en wy moasten it mei de hân skjinmeitsje. Uteinlik wiene der noch sa'n 500-600 foto's oer, it is dúdlik dat dit in ûnbelangryk bedrach is, mar dochs wie dit genôch om 10 pizza's fan elkoar te skieden.

Om it raster te trenen, namen wy de goedkeapste firtuele masine yn Azure op in NVIDIA Tesla K80. Se trainden der 100 epoken op, mar it wie dúdlik dat it netwurk nei 50 epochs oersêd wie, trochdat der in lytse dataset wie.

Eigentlik is it hiele probleem it gebrek oan goede gegevens.

Kodim-pizza

Wy kinne de termen in bytsje yn 'e war hawwe, mar wy moatte der rekken mei hâlde dat wy hielendal gjin ûnderfining hawwe yn it wurkjen mei al dizze saken.

GUI foar NOOBS (konsole foar it bestellen fan pizza)

Misha Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Wy hawwe in prototype gearstald fan in konsole-applikaasje foar geeks, wêrtroch jo pizza kinne bestelle fia de terminal of kommandorigel, of sels yntegrearje yn 'e ynsetpipeline en, nei suksesfolle frijlitting, pizza leverje oan it kantoar.

Kodim-pizza

It wurk wie ferdield yn ferskate dielen: wy fûnen út hoe't ús API foar mobile applikaasjes wurket, sammele ús eigen CLI mei oclif en konfigureare de publikaasje fan it pakket dat wy sammele. De lêste taak befette in pear onaangename minuten nei de ein fan 'e hackathon. Alles wurke lokaal foar ús, en sels de âlde publisearre ferzjes fan it pakket wurken, mar de nije (dy't mear coole funksjes en emoticons tafoege) wegere te wurkjen. Wy hawwe sawat 40 minuten besocht om út te finen wat der mis gie, mar op it lêst wurke alles op magyske wize op har eigen).

Us maksimale programma foar de hackathon wie in echte bestelling fan pizza nei it kantoar fia ús CLI. Wy rûnen alles in tsiental kear op 'e testbank, mar myn hannen trilde noch doe't ik kommando's yn' e produksje ynfierde.

Kodim-pizza

As gefolch hawwe wy it einliks dien!

Kodim-pizza

CourierGo

Anton Bruzhmelev (auteur), Vanya Zverev, Gleb Lesnikov (entropy), Andrey Sarafanov

Wy namen it idee fan in "App foar koerier".

Eftergrûn oer tarieding.Yn it earstoan frege ik my ôf hokker soarte funksjes yn 'e applikaasje kinne wêze? De folgjende list mei funksjonaliteit ûntstie:

  • De applikaasje logt yn 'e kassa foar levering mei de koade.
  • De applikaasje toant fuortendaliks beskikbere oarders en oarders dy't moatte wurde nommen.
  • De koerier noteart de bestelling en nimt it mei op reis.
  • Hy wurdt de rûsde tiid toand en oft er op tiid is of net.
  • Toant de klant dat de koerier fuort is.
  • De klant begjint it punt fan 'e koerier op' e kaart te sjen en de rûsde tiid.
  • De koerier kin skriuwe nei de klant yn petear fanút de applikaasje.
  • De klant kin skriuwe nei de koerier fia petear út de applikaasje.
  • Fiif minuten foar oankomst krijt de klant in berjocht dat de koerier tichtby is, wurde taret.
  • De koerier notearret yn de oanfraach dat er oankommen is en wachtet.
  • De koerier ropt mei ien klik fan 'e applikaasje en meldt dat (stiet, is oankommen, ensfh.)
  • De klant akseptearret de bestelling en fiert in PIN-koade yn fan 'e applikaasje of sms om de levering te befêstigjen (as hantekening) Sadat de koerier de levering net foarôf kin foltôgje as hy te let is.
  • De bestelling wurdt markearre as levere yn it systeem.

Plus in pear alternative senario's:

  • De koerier kin de bestelling markearje as net levere en de reden selektearje.
  • As jo ​​​​te let binne, kin de koerier in elektroanysk sertifikaat útjaan fia SMS mei ien knop. Of it sertifikaat komt automatysk as de leveringstermyn net helle wurdt.

It gefoel fan belofte en needsaak fan dit projekt wie fansels enerzjysunich.

De oare deis gongen wy mei it team nei lunch en bepraten hoe't de minimale funksjonaliteit fan 'e applikaasje der útsjen soe.

As gefolch, de folgjende list fan wat dien wurde moast op de hackathon waard foarme:

  • Oanmelde by de levering kassa.
  • Toan aktuele posysje.
  • Stjoer gegevens nei in eksterne API (koördinaten, ûntfongen de bestelling, levere de bestelling).
  • Ûntfange gegevens fan eksterne API (aktuele koerier oarders).
  • Stjoer in evenemint oanjout dat jo hawwe nommen de bestelling foar levering / levere.
  • Toan de hjoeddeistige posysje fan 'e koerier op' e kaart op 'e webside.

It haadwurk, sa't it like, lei yn it meitsjen fan de backend, de applikaasje sels (nei diskusjes hawwe wy ReactNative keazen om de applikaasje te ûntwikkeljen, of leaver it ramt dêrfoar - expo.io, wêrtroch jo hielendal gjin native koade kinne skriuwe). Yn termen fan de backend, yn earste ynstânsje wie der hope yn Vanya Zverev, sa't hy hie ûnderfining yn it wurkjen mei ús tsjinst sjabloan en k8s (hokker baan hy naam op). Andrey Sarafanov en ik namen ReactNative foar in spin.

Ik besleat om te besykjen om fuortendaliks in wurkjend repository foar it projekt sels te meitsjen. Om 12 nachts kaam ik oer it feit dat geolokaasje op 'e eftergrûn net goed wurket yn ReactNative, as jo gjin native koade skriuwe, wie ik in bytsje frustrearre. Doe liet ik gean doe't ik realisearre dat ik de dokumintaasje net fan it expo.io-kader lies, mar fan ReactNative. As gefolch hie ik yn 'e rin fan' e jûn al begrepen hoe't ik de aktuele posysje yn expo.io krige en aparte skermen tekenje (foar oanmelding, werjaan fan bestelling, ensfh.).

Kodim-pizza

Moarns by de hackathon lokke se Gleb yn har superbelovende projekt. Se kamen gau mei in plan fan wat der dien wurde moast.

Kodim-pizza

Wy hawwe in flater makke doe't wy, yn oerienstimming mei it projektsjabloan, besochten te kommunisearjen net fia HTTP, mar fia GRPC, om't gjinien wist hoe't jo in GRPC-kliïnt foar JavaSkript bouwe. Uteinlik, nei't wy hjir sa'n oardel oere oan bestege hawwe, hawwe wy dit idee ferlitten. Hjirtroch begon de jonges de ôfmakke server fan GRPC nei WebApi op 'e efterkant te ferwurkjen. Nei in healoere koenen wy einliks de kommunikaasje opsette tusken de applikaasje en de backend, sjoch. Mar tagelyk wie Gleb hast klear de ynset nei k8s en plus de auto-ynset fan in commit oan de master. 🙂

Wy hawwe MySQL keazen as opslach om op syn minst gjin risiko's te nimmen mei de databank (wy hiene gedachten oer CosmosDb).

Kodim-pizza

Yn gearfetting:

  • Implementearre bewarjen fan de hjoeddeistige koördinaten fan 'e koerier fan' e applikaasje nei de database.
  • Wy hawwe RabbitMQ ynstalleare en ynskreaun op berjochten oer de koerier dy't in bestelling ophelje om de bestelling fan 'e koerier daliks yn 'e applikaasje wer te jaan.
  • Wy begûnen de leveringstiid foar bestelling te bewarjen yn ús database nei't de koerier op in knop yn 'e applikaasje drukke. Wy hiene gjin tiid om ta te foegjen it ferstjoeren fan in evenemint werom nei de rebbit dat de bestelling waard levere.
  • Ik makke in kaart werjefte op 'e hjoeddeistige bestelling side op' e webside mei de hjoeddeistige posysje fan 'e koerier. Mar dizze funksjonaliteit bleau in bytsje ûnfoltôge, om't it net mooglik wie om CORS yn 'e omjouwing te konfigurearjen om koördinaten fan ús nije tsjinst te ûntfangen.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Wy woenen in OpenID Connect-provider ymplementearje, om't wy op it stuit in autentikaasjeprotokol fan ús eigen ûntwerp brûke, en dit soarget foar in oantal swierrichheden: oanpaste kliïntbiblioteken, ûngemaklik wurk fan 'e kant fan eksterne partners, mooglike feiligensproblemen (nei alle gedachten) , OAuth2.0 en OpenID Connect yn de referinsje ymplemintaasje kinne wurde beskôge feilich, mar ik bin net wis oer ús oplossing).

Kodim-pizza

Wy hawwe in aparte tsjinst makke dy't in tsjinst foar it opslaan fan persoanlike gegevens emulearret om in lyts Country-Agnostyske model te meitsjen fan in autentikaasjeprovider dy't nei in aparte tsjinst foar persoanlike gegevens gean soe (dit soe it yn 'e takomst mooglik meitsje om ien tsjinst te hawwen mei dy't men koe ynlogge mei in akkount registraasje yn elk lân, en tagelyk foldogge oan GDPR en oare federale wetten). Wy hawwe dit diel dien, lykas de provider, en se mei sukses keppele oan elkoar. Folgjende wie it nedich om in API te meitsjen dy't soe wurde beskerme troch tokens útjûn troch de provider, stypje harren yntrospeksje fia de provider en werombeskerme gegevens as it fersyk foldie oan it autorisaasjebelied (wy kontrolearje dat de brûker is authentisearre neffens it Bearer-skema , syn token befettet in bepaalde omfang + y De brûker sels hat in tastimming wêrtroch de oprop kin wurde makke). Dit diel waard ek ôfmakke. De lêste komponint wie in JavaSkript client, dat soe wurde jûn in token, mei help fan dat soe neame in beskerme API. Wy hiene gjin tiid om dit diel te dwaan. Dat is, it hiele funksjonele diel wie klear, mar it front-end diel wie net klear om de funksjonaliteit fan it hiele systeem te demonstrearjen.

E-E-E (boartersguod)

Dima Afonchenko, Sasha Konovalov

Wy makken in mini-boartersguod op yunka wêr't frisse hannen woarst op pizza smite. As jo ​​​​de woarst ferkeard sette, ferskynt in tryst "ôfwiisd" berjocht op it skerm, en as alle woarst goed is pleatst, ferskynt in willekeurige feit oer pizza.

Kodim-pizza

Wy woene in twadde nivo meitsje mei tomaten gooien, mar wy hiene gjin tiid.

Kodim-pizza

Koarte ferfolch: wa hat wûn?

Foar de hackathon hawwe wy mei de jonges praat en ik frege hokker priis se graach krije wolle as se winne. It die bliken dat de meast weardefolle priis "de wei nei iten" wêze soe.

Kodim-pizza

Ferwachtsje dêrom dat wy gau in spultsje mei hannen oankundigje dy't pepperons op pizza sette.

As in opmerksume lêzer miskien opmurken hat, wûn it team "E-E-E (boartersguod)". Lokwinske jonges!

Allinnich registrearre brûkers kinne meidwaan oan 'e enkête. Ynlogge, asjebleaft.

Hokker projekt fûnen jo it bêste?

  • Oleg Learning (machine learning)

  • GUI foar NOOBS

  • CourierGo

  • M87

  • E-E-E

5 brûkers stimden. 3 brûkers ûntholden har.

Boarne: www.habr.com

Add a comment