Sveiki, Habr. MÄs spontÄni sarÄ«kojÄm savu pirmo iekÅ”Äjo hakatonu. NolÄmu padalÄ«ties ar savÄm sÄpÄm un secinÄjumiem par gatavoÅ”anos tam 2 nedÄļu laikÄ, kÄ arÄ« par projektiem, kas tÄdi izrÄdÄ«jÄs.
GarlaicÄ«gÄ daļa mÄrketinga interesentiem
SÄkÅ”u ar nelielu stÄstu.
Aprīļa sÄkums. MÅ«su birojÄ notiek pirmais MskDotNet kopienas hakatons. TatuÄ«nas kauja Å”oreiz mÅ«su galaktikÄ rit pilnÄ sparÄ. sestdiena. 20 komandas. Pica. Viss ir ļoti patiesi (pierÄdÄ«jumi). Pa zÄli peld piepÅ«Å”amais R2-D2. Komandas uzraksta vispareizÄkos algoritmus, lai izturÄtu bÄ«stamÄkÄs sacÄ«kstes kartÄ. PÄrceļam pirmo sacensÄ«bu startu. Cepumi un kafija ir dzÄ«vÄ«bas glÄbÄji. MÄs ar organizatoriem gaidÄ«jÄm, ka sestdien pÄc pusdienÄm daudzi dosies prom. Bet nÄ. 12 stundas kodÄÅ”anas aiz muguras. FinÄls. Kaut kas nokrÄ«t, kaut kas nesÄkas. Bet visi ir laimÄ«gi. MÅ«su komanda uzvar. MÄs esam divtik laimÄ«gi.
Es dalos savÄ priekÄ par Slack, un man nÄk prÄtÄ doma: "Mums ir jÄdara savs hakatons." Es rakstu mÅ«su degvielas uzpildes stacijai SaÅ”a. Klusums.
RÄ«ts. Es dzeru kafiju birojÄ. Es redzu, ka SaÅ”a tuvojas no aizmugures. āLisa, tas ir lieliski! Mums ir svarÄ«gs datums 21. aprÄ«lÄ«. DarÄ«sim to!" WTF!? Tik Ätri? A? Kas? Man jÄlido uz Siktivkaru stažÄties aprīļa vidÅ«. Un pie velna! pieÅemsim.
2 nedÄļas palikuÅ”as. Es nekad neesmu bijis vienÄ«gais hakatona organizators. Lai tas ir iekÅ”Äji. Es lasÄ«ju rakstus par Å”o tÄmu. GrÅ«ti. Tas aizÅem vairÄkus mÄneÅ”us. Ir vajadzÄ«gi vairÄki cilvÄki. JÄdomÄ par precÄm, balvÄm, nosacÄ«jumiem, grafiku, procentiem, jÄsaprot mÄrÄ·is, budžeti. Vai varbÅ«t pat izdomÄt dzÄ«ves jÄgu. Es noteikti nepaspÄÅ”u laikÄ. Un kamÄr tu lasÄ«ji un gatavojies, bija jau pagÄjusi nedÄļa. Ir pienÄcis laiks aizmirst par rakstiem un sÄkt kaut ko darÄ«t.
Skatiet mÅ«su kontrolsarakstu par iekÅ”ÄjÄ hakatona rÄ«koÅ”anu vienas nedÄļas laikÄ
PlÄns: Tu mierÄ«gi apsÄdies un uzraksti sarakstu, kas jÄdara hakatonam. 30 minÅ«tes.
Uzdevums: dalÄ«bnieki piedÄvÄ un izvÄlas projektus, ko viÅi vÄlas izveidot Google izklÄjlapÄs. Fona uzdevums, 2 stundas.
saraksts: uz ceļgala uzraksti Ä«su laika sadalÄ«jumu, Åemot vÄrÄ 3 pÄrtraukumus un finÄlu. 20 minÅ«tes.
Komandas: publicÄjiet ziÅu par hakatonu ar grafiku no servisa stacijas IT kanÄlos Slack/mail/etc un izveidojiet atseviŔķu kanÄlu hakatonam. TajÄ visi ir sadalÄ«ti komandÄs, un tie, kuri nav izlÄmuÅ”i, to dara pirmajÄs 5 hakatona minÅ«tÄs. Fona uzdevums, 2 stundas.
MaizÄ«tes: jÅ«s izdomÄjat preces ar diviem izstrÄdÄtÄjiem, nododat to dizainerim renderÄÅ”anai un saÅemat gatavu. Fona uzdevums, 3 dienas.
Hakatons: jÅ«s atnÄkat uz biroju, sÄkumÄ saskaÅojiet visus, ejiet savÄs darÄ«Å”anÄs, lasiet Reddit, svarÄ«gi ir paziÅot par katru pÄrtraukumu par svaigu picu, fotografÄjiet saulrietu, paziÅojiet finÄlu, balsojiet kopÄ un izvÄlaties uzvarÄtÄju. 1 diena.
Zem zvaigznÄ«tes: Protams, jÅ«s pastÄvÄ«gi domÄjat, ka viss norit labi. Protams, ne visi redzÄs jÅ«su ziÅojumu, un labÄk ar dažiem runÄt klÄtienÄ. Protams, ja kÄds jums palÄ«dzÄs, viss kļūs 2 reizes vieglÄk (brÄ«niŔķīgÄ Alena man palÄ«dzÄja).
MazÄk garlaicÄ«ga daļa par hakatona datumu
KÄpÄc 21. aprÄ«lis? Å Ä« diena mums ir nozÄ«mÄ«ga. TieÅ”i pirms gada, 21. aprÄ«lÄ«, pirmajÄ nedÄļas nogalÄ pÄc federÄlÄs reklÄmas kampaÅas sÄkuma nokļuvÄm zem slodzes. NÄkamajÄ dienÄ, svÄtdien, mÅ«su komanda bija darbÄ no pulksten 8. Tad mÄs Trello izveidojÄm sundayhackathon dÄli un sÄkÄs maiÅu darba nedÄļa, 12 stundas dienÄ. SituÄcija bija tik kritiska, ka mums pat nebija laika paÄst un mÅ«s pabaroja puiÅ”i no citÄm komandÄm.
SÄ«kÄku stÄstu varat lasÄ«t vietnÄ Fjodora OvÄiÅÅikova lapa (mÅ«su izpilddirektors). KopÅ” tÄ laika esam daudz mainÄ«juÅ”ies, bet tagad noteikti neaizmirsÄ«sim datumu.
Å ogad nolÄmÄm, ka Å”o notikumu ir vÄrts iemūžinÄt pÄcnÄcÄju atmiÅÄ un pÄc labÄkajÄm tradÄ«cijÄm sarÄ«kojÄm pirmo iekÅ”Äjo hakatonu Dodo vÄsturÄ, kas ilga 10 stundas.
GarlaicÄ«gÄkÄ daļa par hakatona projektiem
Atruna: visus aprakstus rakstÄ«juÅ”i paÅ”i puiÅ”i, tÄpÄc teksta autorÄ«ba nav mana.
Oļega mÄcÄ«Å”anÄs (maŔīnmÄcÄ«ba)
Dima KoÄÅevs, SaÅ”a Andronovs (@alexandronov)
ViÅi vÄlÄjÄs izveidot neironu tÄ«klu, kas bez jebkÄdÄm zinÄÅ”anÄm noteiktu, kÄda pica ir fotoattÄlÄ. RezultÄtÄ uztaisÄ«jÄm ļoti vienkÄrÅ”u un rotaļīgu - tÄ atpazÄ«st 10 picas, aptuveni izdomÄjÄm, kÄ viss strÄdÄ, cik vien iespÄjams diennaktÄ« (~10h).
Jo Ä«paÅ”i mÄs sapratÄm, ka nozare ir sasniegusi lÄ«meni, kurÄ parasts izstrÄdÄtÄjs var Åemt gatavas bibliotÄkas, lasÄ«t dokumentÄciju un apmÄcÄ«t savu neironu tÄ«klu bez dziļÄm priekÅ”meta zinÄÅ”anÄm. Un tas darbosies pietiekami labi, lai atrisinÄtu reÄlas problÄmas.
Izmantotie rīki:
imageai ā Ärta un vienkÄrÅ”a bibliotÄka darbam ar maŔīnmÄcÄ«bu un datorredzi.
IzmÄÄ£inÄjÄm divus modeļus - ResNet50, Yolo.
Kods, protams, tika uzrakstÄ«ts Python valodÄ.
Mums bija 11000 3 fotogrÄfiju, bet gandrÄ«z 4/500 no tÄm izrÄdÄ«jÄs atkritumi, bet pÄrÄjÄm bija dažÄdi, nepiemÄroti rakursi. RezultÄtÄ paÅÄmÄm gatavu modeli (kurÅ” vienkÄrÅ”i prot atrast picu) un ar tÄ palÄ«dzÄ«bu atdalÄ«jÄm miskasti. TÄlÄk bildes nosaukumÄ bija iekļauts picas nosaukums - tÄpÄc sakÄrtojÄm mapÄs, bet izrÄdÄ«jÄs, ka nosaukumi nesakrÄ«t ar realitÄti un nÄcÄs to sakopt ar rokÄm. BeigÄs palika ap 600-10 fotogrÄfiju, skaidrs, ka tas ir niecÄ«gs daudzums, bet tomÄr ar to pietika, lai XNUMX picas atdalÄ«tu vienu no otras.
Lai apmÄcÄ«tu tÄ«klu, mÄs izmantojÄm lÄtÄko virtuÄlo maŔīnu Azure, izmantojot NVIDIA Tesla K80. ViÅi to apmÄcÄ«ja 100 laikus, taÄu bija skaidrs, ka tÄ«kls bija pÄrsÄtinÄts pÄc 50 epohiem, jo āābija neliela datu kopa.
PatiesÄ«bÄ visa problÄma ir labu datu trÅ«kums.
IespÄjams, esam nedaudz sajaukuÅ”i terminus, taÄu jÄÅem vÄrÄ, ka mums vispÄr nav pieredzes darbÄ ar visÄm Ŕīm lietÄm.
MÄs esam izveidojuÅ”i konsoles lietojumprogrammas prototipu dÄ«kiem, pateicoties kuriem jÅ«s varat pasÅ«tÄ«t picu caur terminÄli vai komandrindu vai pat integrÄt to izvietoÅ”anas konveijerÄ un pÄc veiksmÄ«gas izlaiÅ”anas piegÄdÄt picu birojÄ.
Darbs tika sadalÄ«ts vairÄkÄs daļÄs: mÄs izdomÄjÄm, kÄ darbojas mÅ«su API mobilajÄm lietojumprogrammÄm, salikÄm savu CLI, izmantojot oklifs un konfigurÄja apkopotÄs pakotnes publikÄciju. PÄdÄjais uzdevums ietvÄra dažas nepatÄ«kamas minÅ«tes, tuvojoties hakatona beigÄm. Mums viss darbojÄs lokÄli, un pat vecÄs publicÄtÄs pakotnes versijas darbojÄs, taÄu jaunÄs (kas pievienoja vairÄk forÅ”u funkciju un emocijzÄ«mes) atteicÄs darboties. MÄs pavadÄ«jÄm apmÄram 40 minÅ«tes, mÄÄ£inot izdomÄt, kas nogÄja greizi, bet beigÄs viss maÄ£iski strÄdÄja pats no sevis).
MÅ«su maksimÄlÄ programma hakatonam bija Ä«sta picas pasÅ«tÄ«Å”ana uz biroju, izmantojot mÅ«su CLI. MÄs visu pÄrdesmit reižu palaidÄm uz pÄrbaudes stenda, bet man joprojÄm trÄ«cÄja rokas, kad ievadÄ«ju komandas ražoÅ”anÄ.
RezultÄtÄ mÄs beidzot to paveicÄm!
CourierGo
Antons Bružmeļevs (autors), VaÅa Zverevs, Gļebs Ä»esÅikovs (entropija), Andrejs Sarafanovs
MÄs izmantojÄm ideju par āAplikÄciju kurjeramā.
PriekÅ”vÄsture par sagatavoÅ”anos.SÄkotnÄji es prÄtoju, kÄdas funkcijas varÄtu bÅ«t lietojumprogrammÄ? Tika parÄdÄ«ts Å”Äds funkcionalitÄtes saraksts:
Lietojumprogramma piesakÄs piegÄdes kasÄ, izmantojot kodu.
Lietojumprogramma uzreiz parÄda pieejamos pasÅ«tÄ«jumus un pasÅ«tÄ«jumus, kas ir jÄpieÅem.
Kurjers atzÄ«mÄ pasÅ«tÄ«jumu un paÅem to ceļojumÄ.
ViÅam tiek parÄdÄ«ts paredzamais laiks un tas, vai viÅÅ” ir vai nÄ.
ParÄda klientam, ka kurjers ir aizgÄjis.
Klientam sÄk parÄdÄ«t kartÄ kurjera punktu un paredzamo laiku.
Kurjers var rakstÄ«t klientam ÄatÄ no aplikÄcijas.
Klients var rakstÄ«t kurjeram caur tÄrzÄÅ”anu no aplikÄcijas.
Piecas minÅ«tes pirms ieraÅ”anÄs klients saÅem ziÅu, ka kurjers ir tuvu, esiet gatavi.
Kurjers pieteikumÄ atzÄ«mÄ, ka ir ieradies un gaida.
Kurjers zvana no aplikÄcijas ar vienu klikŔķi un ziÅo, ka (pieaug, ir ieradies utt.)
Klients pieÅem pasÅ«tÄ«jumu un ievada PIN kodu no aplikÄcijas vai SMS, lai apstiprinÄtu piegÄdi.(kÄ paraksts) Lai kurjers nevarÄtu iepriekÅ” pabeigt piegÄdi, ja kavÄjas.
PasÅ«tÄ«jums sistÄmÄ tiek atzÄ«mÄts kÄ piegÄdÄts.
TurklÄt daži alternatÄ«vi scenÄriji:
Kurjers var atzÄ«mÄt pasÅ«tÄ«jumu kÄ nepiegÄdÄtu un izvÄlÄties iemeslu.
Ja kavÄjat, kurjers ar vienu pogu var izsniegt elektronisku sertifikÄtu, izmantojot SMS. Vai arÄ« sertifikÄts pienÄk automÄtiski, ja netiek ievÄrots piegÄdes termiÅÅ”.
Å Ä« projekta solÄ«juma un nepiecieÅ”amÄ«bas sajÅ«ta, protams, rosinÄja enerÄ£iju.
NÄkamajÄ dienÄ ar komandu devÄmies pusdienÄs un pÄrrunÄjÄm, kÄ izskatÄ«sies aplikÄcijas minimÄlÄ funkcionalitÄte.
NosÅ«tÄ«t datus uz ÄrÄju API (koordinÄtas, saÅemts pasÅ«tÄ«jums, piegÄdÄts pasÅ«tÄ«jums).
SaÅemiet datus no ÄrÄjÄ API (paÅ”reizÄjie kurjerpasta pasÅ«tÄ«jumi).
NosÅ«tiet notikumu, kas norÄda, ka esat pieÅÄmis pasÅ«tÄ«jumu piegÄdei/piegÄdei.
ParÄdiet kurjera paÅ”reizÄjo atraÅ”anÄs vietu vietnes kartÄ.
Galvenais darbs, kÄ Å”Ä·ita, bija aizmugursistÄmas, paÅ”as lietojumprogrammas izveidÄ (pÄc diskusijÄm mÄs izvÄlÄjÄmies ReactNative, lai izstrÄdÄtu lietojumprogrammu vai drÄ«zÄk tÄs ietvaru - expo.io, kas ļauj vispÄr nerakstÄ«t vietÄjo kodu). RunÄjot par aizmuguri, sÄkotnÄji bija cerÄ«ba uz Vanju Zverevu, jo viÅam bija pieredze darbÄ ar mÅ«su servisa veidni un k8s (kuru darbu viÅÅ” uzÅÄmÄs). Andrejs Sarafanovs un es paÅÄmÄm ReactNative, lai pagrieztos.
Es nolÄmu mÄÄ£inÄt nekavÄjoties izveidot darba repozitoriju paÅ”am projektam. 12 naktÄ« es saskÄros ar faktu, ka Ä£eogrÄfiskÄ atraÅ”anÄs vieta fonÄ nedarbojas labi ReactNative, ja jÅ«s nerakstat vietÄjo kodu, es biju nedaudz neapmierinÄts. Tad es atlaidos, kad sapratu, ka lasu nevis expo.io ietvara, bet gan ReactNative dokumentÄciju. RezultÄtÄ vakara gaitÄ es jau sapratu, kÄ iegÅ«t paÅ”reizÄjo pozÄ«ciju expo.io un uzzÄ«mÄt atseviŔķus ekrÄnus (pieteikÅ”anÄs, pasÅ«tÄ«juma attÄloÅ”anai utt.).
No rÄ«ta hakatonÄ viÅi ievilinÄja Glebu savÄ Ä¼oti daudzsoloÅ”ajÄ projektÄ. ViÅi Ätri izstrÄdÄja plÄnu, kas jÄdara.
MÄs pieļÄvÄm kļūdu, kad saskaÅÄ ar projekta veidni mÄÄ£inÄjÄm sazinÄties nevis caur HTTP, bet gan caur GRPC, jo neviens nezinÄja, kÄ izveidot GRPC klientu JavaScript. Galu galÄ, tam veltÄ«juÅ”i apmÄram pusotru stundu, mÄs no Ŕīs idejas atteicÄmies. Å Ä« iemesla dÄļ aizmugures puiÅ”i sÄka pÄrveidot gatavo serveri no GRPC uz WebApi. PÄc pusstundas mÄs beidzot varÄjÄm izveidot saziÅu starp lietojumprogrammu un aizmuguri, lÅ«k, lÅ«k. Bet tajÄ paÅ”Ä laikÄ Gļebs gandrÄ«z pabeidza izvietoÅ”anu uz k8s un plus automÄtisku apÅemÅ”anÄs izvietoÅ”anu kapteinim. š
IzvÄlÄjÄmies MySQL kÄ krÄtuvi, lai neriskÄtu vismaz ar datu bÄzi (bija domas par CosmosDb).
RezumÄjot:
ÄŖstenota aktuÄlo kurjera koordinÄtu saglabÄÅ”ana no aplikÄcijas datu bÄzÄ.
MÄs instalÄjÄm RabbitMQ un abonÄjÄm ziÅojumus par kurjera pasÅ«tÄ«juma saÅemÅ”anu, lai aplikÄcijÄ nekavÄjoties parÄdÄ«tu pasÅ«tÄ«jumu no kurjera.
PasÅ«tÄ«juma piegÄdes laiku sÄkÄm saglabÄt savÄ datubÄzÄ pÄc tam, kad kurjers aplikÄcijÄ nospieda pogu. Mums nebija laika pievienot notikuma nosÅ«tÄ«Å”anu atpakaļ rebbit, ka pasÅ«tÄ«jums tika piegÄdÄts.
VietnÄ paÅ”reizÄjÄ pasÅ«tÄ«juma lapÄ izveidoju kartes attÄlojumu ar kurjera paÅ”reizÄjo atraÅ”anÄs vietu. Bet Ŕī funkcionalitÄte palika nedaudz nepabeigta, jo nebija iespÄjams konfigurÄt CORS vidÄ, lai saÅemtu koordinÄtas no mÅ«su jaunÄ pakalpojuma.
M87
Roma Bukins, GoŔa Polevojs (Džordžpolevojs), Artjoms TrofimuŔkins
MÄs vÄlÄjÄmies ieviest OpenID Connect nodroÅ”inÄtÄju, jo Å”obrÄ«d izmantojam mÅ«su paÅ”u izstrÄdÄtu autentifikÄcijas protokolu, un tas rada vairÄkas grÅ«tÄ«bas: pielÄgotas klientu bibliotÄkas, neÄrts darbs no ÄrÄjo partneru puses, iespÄjamas droŔības problÄmas (galu galÄ , OAuth2.0 un OpenID Connect atsauces ievieÅ”anÄ var uzskatÄ«t par droÅ”iem, taÄu es neesmu pÄrliecinÄts par mÅ«su risinÄjumu).
MÄs izveidojÄm atseviŔķu pakalpojumu, kas emulÄ personas datu glabÄÅ”anas pakalpojumu, lai izveidotu nelielu autentifikÄcijas nodroÅ”inÄtÄja Country-Agnostic modeli, kas pÄrietu uz atseviŔķu personas datu pakalpojumu (tas nÄkotnÄ Ä¼autu izveidot vienu pakalpojumu ar kurÄ var pieteikties, reÄ£istrÄjot kontu jebkurÄ valstÄ«, un tajÄ paÅ”Ä laikÄ ievÄrot GDPR un citus federÄlos likumus). MÄs veicÄm Å”o daļu, tÄpat kÄ pakalpojumu sniedzÄjs, un veiksmÄ«gi saistÄ«jÄm tos savÄ starpÄ. PÄc tam bija jÄizveido API, kas bÅ«tu aizsargÄta ar pakalpojumu sniedzÄja izsniegtiem marÄ·ieriem, atbalstÄ«tu viÅu ieskatu caur pakalpojumu sniedzÄju un atgrieztu aizsargÄtus datus, ja pieprasÄ«jums atbilst autorizÄcijas politikÄm (mÄs pÄrbaudÄm, vai lietotÄjs ir autentificÄts saskaÅÄ ar nesÄja shÄmu , viÅa marÄ·ieris satur noteiktu darbÄ«bas jomu + y LietotÄjam paÅ”am ir atļauja, kas ļauj veikt zvanu). ArÄ« Ŕī daļa tika pabeigta. PÄdÄjais komponents bija JavaScript klients, kuram tiktu pieŔķirts marÄ·ieris, ar kura palÄ«dzÄ«bu tas izsauktu aizsargÄtu API. Mums nebija laika izpildÄ«t Å”o daļu. Tas ir, visa funkcionÄlÄ daļa bija gatava, bet priekÅ”ÄjÄ daļa nebija gatava demonstrÄt visas sistÄmas funkcionalitÄti.
E-E-E (rotaļlieta)
Dima AfonÄenko, SaÅ”a Konovalovs
MÄs uz jukas uztaisÄ«jÄm minirotaļlietu, kur smailas rokas met desu uz picas. Nepareizi uzliekot desu, ekrÄnÄ parÄdÄs skumjÅ” ziÅojums āNoraidÄ«tsā, un, ja visa desa ir uzlikta pareizi, parÄdÄs nejauÅ”s fakts par picu.
MÄs gribÄjÄm izveidot otro lÄ«meni ar tomÄtu meÅ”anu, bet mums nebija laika.
ÄŖss turpinÄjums: kurÅ” uzvarÄja?
Pirms hakatona aprunÄjÄmies ar puiÅ”iem un jautÄju, kÄdu balvu viÅi vÄlÄtos saÅemt, ja uzvarÄs. IzrÄdÄ«jÄs, ka visvÄrtÄ«gÄkÄ balva bÅ«s āceļŔ uz pÄrtikuā.
TÄpÄc drÄ«zumÄ mÄs paziÅosim par spÄli ar rokÄm, kas uzliks piparus uz picas.
KÄ jau vÄrÄ«gs lasÄ«tÄjs varÄja pamanÄ«t, uzvarÄja komanda āE-E-E (rotaļlieta)ā. Apsveicam puiÅ”i!
AptaujÄ var piedalÄ«ties tikai reÄ£istrÄti lietotÄji. Ielogoties, lÅ«dzu.