Kodim-pizza

Salam, Habr. Biz kortəbii olaraq ilk daxili hakatonumuzu keçirdik. Qərara gəldim ki, 2 həftə ərzində ona hazırlaşmaqla bağlı ağrılarımı və gəldiyim qənaətləri, eləcə də ortaya çıxan layihələri sizinlə bölüşüm.

Kodim-pizza

Marketinqlə maraqlananlar üçün darıxdırıcı hissə

Kiçik bir hekayə ilə başlayacağam.

Aprelin əvvəli. Ofisimizdə ilk MskDotNet Community hakatonu keçirilir. Tatooine döyüşü bu dəfə qalaktikamızda tam sürətlə davam edir. şənbə. 20 komanda. Pizza. Hər şey çox səmimidir (sübutlar). Zalın ətrafında bir şişmə R2-D2 üzür. Komandalar xəritədə ən təhlükəli yarışı keçmək üçün ən düzgün alqoritmləri yazır. İlk yarışların startını irəliləyirik. Peçenye və qəhvə həyat xilasediciləridir. Təşkilatçılar və mən gözləyirdik ki, şənbə günü nahardan sonra çox adam gedəcək. Amma yox. 12 saat arxada kodlaşdırma. Son. Bir şey düşür, bir şey başlamır. Amma hamı xoşbəxtdir. Komandamız qalib gəlir. Biz ikiqat xoşbəxtik.

Slack-də sevincimi bölüşürəm və ağlıma belə bir fikir gəlir: “Biz öz hackathonumuzu etməliyik”. Mən Sasha xidmət stansiyasına yazıram. Sükut.

Səhər. Ofisdə qəhvə içirəm. Arxadan Saşanın yaxınlaşdığını görürəm. "Lisa, bu əladır! Aprelin 21-də önəmli bir tariximiz var. Gəl edək!" WTF!? Çox sürətli? A? Nə? Aprelin ortalarında təcrübə keçmək üçün Syktyvkar'a uçmalıyam. Və cəhənnəmə! Gəlin.

2 həftə qalıb. Mən heç vaxt hakatonun yeganə təşkilatçısı olmamışam. Qoy daxili olsun. Bu mövzuda məqalələr oxuyuram. Sərt. Bir neçə ay çəkir. Bir neçə nəfər lazımdır. Siz mallar, mükafatlar, şərtlər, cədvəl, maraqlar haqqında düşünməli, məqsədi, büdcələri başa düşməlisiniz. Və ya bəlkə həyatın mənasını anlaya bilərsiniz. Mütləq vaxtında bacarmayacağam. Və siz oxuyub hazırlaşarkən artıq bir həftə keçmişdi. Məqalələri unudub nəsə etməyə başlamağın vaxtıdır.

1 həftə ərzində daxili hakaton keçirmək üçün yoxlama siyahımızı əldə edin

  • Planı: Siz sakit oturun və hakaton üçün edilməli olanların siyahısını yazın. 30 dəqiqə.
  • Tapşırıq: İştirakçılar Google Cədvəldə yaratmaq istədikləri layihələri təklif edir və seçirlər. Əsas tapşırıq, 2 saat.
  • Cədvəl: dizinizdə 3 fasilə və finalı nəzərə alaraq qısa bir vaxt bölgüsü yazırsınız. 20 dəqiqə.
  • Komanda: Slack/mail/etc-də İT kanallarında xidmət stansiyasından cədvəllə hakaton haqqında mesaj dərc edin və hakaton üçün ayrıca kanal yaradın. Orada hər kəs komandalara bölünür və qərarsız olanlar bunu hakatonun ilk 5 dəqiqəsində edirlər. Əsas tapşırıq, 2 saat.
  • bulkalar: iki tərtibatçı ilə məhsul tapırsınız, onu dizayn üçün dizaynerə verirsiniz və hazır şəkildə qəbul edirsiniz. Əsas tapşırıq, 3 gün.
  • Hackathon: ofisə gəlirsən, hər kəsi əvvəldən koordinasiya edirsən, öz işinlə məşğul olursan, Reddit oxuyursan, ən əsası təzə pizza haqqında hər fasiləni elan edirsən, gün batımının şəkillərini çəkirsən, finalı elan edirsən, birlikdə səs verirsən və qalibi seçirsən. 1 gün.
  • Ulduz işarəsi altında: Əlbəttə, siz daim hər şeyin yaxşı getdiyini düşünürsünüz. Əlbəttə ki, hər kəs mesajınızı görməyəcək və bəziləri ilə şəxsən danışmaq daha yaxşıdır. Əlbəttə ki, kimsə sizə kömək etsə, hər şey 2 dəfə asanlaşacaq (gözəl Alena mənə kömək etdi).

Hackathon tarixi ilə bağlı daha az darıxdırıcı hissə

Niyə 21 aprel? Bu gün bizim üçün əlamətdardır. Düz bir il əvvəl, aprelin 21-də, Federal Reklam Kampaniyasının başlamasından sonra ilk həftə sonu yükün altına düşdük. Ertəsi gün, bazar günü komandamız səhər saat 8-dən işdə idi. Sonra biz Trelloda sundayhackathon board yaratdıq və bir həftəlik növbəli iş başladı, gündə 12 saat. Vəziyyət o qədər kritik idi ki, yeməyə belə vaxtımız yox idi və bizi başqa komandaların oğlanları yedizdirirdi.

Kodim-pizza

Daha ətraflı hekayəni burada oxuya bilərsiniz Fyodor Ovçinnikovun səhifəsi (baş direktorumuz). O vaxtdan bəri biz çox dəyişmişik, amma indi tarixi mütləq unutmayacağıq.

Bu il biz qərara gəldik ki, bu tədbir nəsillərin yaddaşında əbədiləşdirilməyə dəyər və ən yaxşı ənənələrə uyğun olaraq Dodo tarixində 10 saat davam edən ilk daxili hakatonu təşkil etdik.

Hackathon layihələrinin ən darıxdırıcı hissəsi

İmtina: bütün təsvirlər uşaqların özləri tərəfindən yazılmışdır, buna görə də mətnin müəllifliyi mənim deyil.

Oleq Öyrənmə (maşın öyrənmə)

Dima Koçnev, Saşa Andronov (@alexandronov)

Onlar heç bir məlumatı olmadan fotoşəkildə hansı pizzanın olduğunu müəyyən edən neyron şəbəkəsi yaratmaq istəyirdilər. Nəticədə biz çox sadə və oyuncaq hazırladıq - o, 10 pizza tanıyır, bir gündə (~10 saat) mümkün qədər hər şeyin necə işlədiyini təxmini olaraq anladıq.

Kodim-pizza

Xüsusilə, sənayenin adi bir tərtibatçının mövzunu dərindən bilmədən hazır kitabxanaları götürə, sənədləri oxuya və neyron şəbəkəsini öyrədə biləcəyi səviyyəyə çatdığını başa düşdük. Və real problemləri həll etmək üçün kifayət qədər yaxşı işləyəcək.

İstifadə olunan alətlər:

  • imageai — maşın öyrənməsi və kompüter görmə ilə işləmək üçün rahat və sadə kitabxana.
  • İki modeli sınadıq - ResNet50, Yolo.
  • Kod, əlbəttə ki, Python-da yazılmışdır.

11000 fotoşəkilimiz var idi, amma demək olar ki, 3/4-ü zibil oldu, qalanları isə fərqli, uyğun olmayan bucaqlara sahib idi. Nəticədə hazır bir model götürdük (sadəcə pizzanı necə tapacağını bilir) və onun köməyi ilə zibil qutusunu ayırdıq. Sonra şəklin başlığında pizzanın adı var idi - ona görə də biz onu qovluqlara ayırdıq, lakin məlum oldu ki, adlar reallıqla üst-üstə düşmür və biz onu əlimizlə təmizləməli olduq. Sonda 500-600-ə yaxın foto qaldı, aydındır ki, bu, cüzi bir məbləğdir, lakin buna baxmayaraq, bu, 10 pizzanı bir-birindən ayırmağa kifayət edirdi.

Şəbəkəni öyrətmək üçün NVIDIA Tesla K80-də Azure-da ən ucuz virtual maşını götürdük. Onlar 100 dövr ərzində bunun üzərində məşq etdilər, lakin kiçik bir məlumat dəstinin olması səbəbindən şəbəkənin 50 epoxdan sonra həddindən artıq doyduğu aydın oldu.

Əslində, bütün problem yaxşı məlumatların olmamasıdır.

Kodim-pizza

Ola bilsin, biz terminləri bir az qarışdırmışıq, lakin nəzərə almalıyıq ki, bütün bu məsələlərlə işləmək təcrübəmiz ümumiyyətlə yoxdur.

NOOBS üçün GUI (pizza sifarişi üçün konsol)

Misha Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Geeks üçün konsol tətbiqinin prototipini bir araya gətirdik, bunun sayəsində siz terminal və ya komanda xətti vasitəsilə pizza sifariş edə və ya hətta onu yerləşdirmə boru kəmərinə birləşdirə və uğurla buraxıldıqdan sonra pizzanı ofisə çatdıra bilərsiniz.

Kodim-pizza

İş bir neçə hissəyə bölündü: mobil proqramlar üçün API-mizin necə işlədiyini anladıq, istifadə edərək öz CLI-mizi yığdıq. oclif və topladığımız paketin nəşrini konfiqurasiya etdik. Son tapşırıq hakatonun sonuna doğru bir neçə xoşagəlməz dəqiqə ilə bağlı idi. Hər şey bizim üçün yerli olaraq işlədi və hətta paketin köhnə nəşr edilmiş versiyaları da işlədi, lakin yeniləri (daha gözəl xüsusiyyətlər və ifadələr əlavə etdi) işləməkdən imtina etdi. Nəyin səhv olduğunu anlamaq üçün təxminən 40 dəqiqə sərf etdik, amma sonunda hər şey sehrli şəkildə öz-özünə işlədi).

Hackathon üçün maksimum proqramımız CLI vasitəsilə ofisə pizza sifarişi idi. Test skamyasında hər şeyi onlarla dəfə qaçırdıq, amma istehsalda əmrlərə girəndə əllərim hələ də titrəyirdi.

Kodim-pizza

Nəticədə, biz nəhayət bunu bacardıq!

Kodim-pizza

CourierGo

Anton Brujmelev (müəllif), Vanya Zverev, Qleb Lesnikov (entropi), Andrey Sarafanov

“Kuryer üçün proqram” ideyasını götürdük.

Hazırlıq haqqında məlumat.Başlanğıcda tətbiqdə hansı funksiyaların ola biləcəyi ilə maraqlandım? Aşağıdakı funksionallıq siyahısı ortaya çıxdı:

  • Tətbiq koddan istifadə edərək çatdırılma kassasına daxil olur.
  • Tətbiq dərhal mövcud sifarişləri və qəbul edilməli olan sifarişləri göstərir.
  • Kuryer sifarişi qeyd edir və onu səfərə aparır.
  • Ona təxmini vaxt göstərilir və vaxtında olub-olmaması göstərilir.
  • Müştəriyə kuryerin getdiyini göstərir.
  • Müştəriyə xəritədə kuryer nöqtəsi və təxmini vaxt göstərilməyə başlayır.
  • Kuryer proqramdan çatda müştəriyə yaza bilər.
  • Müştəri proqramdan çat vasitəsilə kuryerə yaza bilər.
  • Gəlməzdən beş dəqiqə əvvəl müştəri kuryerin yaxın olduğu xəbərini alır, hazır olun.
  • Kuryer ərizədə qeyd edir ki, gəlib və gözləyir.
  • Kuryer bir kliklə proqramdan zəng edir və bildirir ki, (artır, gəlib və s.)
  • Müştəri sifarişi qəbul edir və çatdırılmanı təsdiq etmək üçün ərizədən və ya SMS-dən PİN kodu daxil edir.(imza kimi) Belə ki, kuryer gecikdiyi halda çatdırılmanı əvvəlcədən başa çatdıra bilməsin.
  • Sifariş sistemdə çatdırıldığı kimi qeyd olunur.

Üstəlik bir neçə alternativ ssenari:

  • Kuryer sifarişi çatdırılmamış kimi qeyd edə və səbəbi seçə bilər.
  • Gecikdiyiniz halda kuryer bir düymə ilə SMS vasitəsilə elektron arayış verə bilər. Yaxud çatdırılma müddəti yerinə yetirilmədikdə sertifikat avtomatik olaraq gəlir.

Bu layihənin vəd və zərurət hissi təbii ki, enerji verirdi.

Ertəsi gün komanda ilə nahara getdik və tətbiqin minimum funksionallığının necə olacağını müzakirə etdik.

Nəticədə, hakatonda edilməli olanların aşağıdakı siyahısı formalaşdırıldı:

  • Çatdırılma kassasına daxil olun.
  • Cari vəziyyəti göstərin.
  • Xarici API-yə məlumat göndərin (koordinatlar, sifariş qəbul edildi, sifariş çatdırıldı).
  • Xarici API-dən məlumat alın (cari kuryer sifarişləri).
  • Çatdırılma/çatdırılma üçün sifariş aldığınızı göstərən hadisə göndərin.
  • Kuryerin cari mövqeyini veb saytında xəritədə göstərin.

Əsas iş, göründüyü kimi, arxa planın, tətbiqin özünün yaradılmasında idi (müzakirələrdən sonra tətbiqi, daha doğrusu onun üçün çərçivəni hazırlamaq üçün ReactNative-i seçdik - expo.io, bu, ümumiyyətlə doğma kodu yazmamağa imkan verir). Backend baxımından əvvəlcə Vanya Zverevdə ümid var idi, çünki o, bizim xidmət şablonumuz və k8-lərlə (hansı işi öz üzərinə götürdü) işləməkdə təcrübəli idi. Andrey Sarafanov və mən bir spin üçün ReactNative-i götürdük.

Dərhal layihənin özü üçün işləyən bir depo yaratmağa cəhd etmək qərarına gəldim. Gecə saat 12-də ReactNative-də arxa planda geolokasiyanın yaxşı işləmədiyinə rast gəldim, doğma kod yazmasanız, bir az incidim. Sonra expo.io çərçivəsinin deyil, ReactNative-in sənədlərini oxuduğumu anlayanda buraxdım. Nəticədə, axşam ərzində mən artıq expo.io-da cari mövqeyi necə əldə edəcəyimi və ayrı ekranlar çəkməyi (giriş, sifariş ekranı və s. üçün) başa düşdüm.

Kodim-pizza

Səhər hakatonda Qlebi öz super perspektivli layihələrinə cəlb etdilər. Tezliklə görülməli olan işlərin planını hazırladılar.

Kodim-pizza

Layihə şablonuna uyğun olaraq HTTP vasitəsilə deyil, GRPC vasitəsilə əlaqə yaratmağa çalışarkən səhv etdik, çünki heç kim JavaScript üçün GRPC müştəri qurmağı bilmirdi. Nəhayət, buna təxminən saat yarım vaxt sərf etdikdən sonra bu fikrimizdən əl çəkdik. Buna görə də arxa tərəfdəki uşaqlar hazır serveri GRPC-dən WebApi-yə çevirməyə başladılar. Yarım saatdan sonra, nəhayət, proqram və arxa plan arasında əlaqə qura bildik. Lakin eyni zamanda, Gleb demək olar ki, k8-lərə yerləşdirməni və üstəlik master üçün öhdəliyin avtomatik yerləşdirilməsini demək olar ki, bitirirdi. 🙂

Heç olmasa verilənlər bazası ilə bağlı risk almamaq üçün MySQL-i saxlama yeri kimi seçdik (CosmosDb haqqında fikirlərimiz var idi).

Kodim-pizza

Xülasə:

  • Kuryerin cari koordinatlarının proqramdan verilənlər bazasına saxlanması həyata keçirilir.
  • Biz RabbitMQ-u quraşdırdıq və kuryerdən sifarişi tətbiqdə dərhal göstərmək üçün sifarişi götürən kuryer haqqında mesajlara abunə olduq.
  • Kuryer proqramdakı düyməni basdıqdan sonra sifarişin çatdırılma vaxtını verilənlər bazamıza qənaət etməyə başladıq. Sifarişin çatdırıldığı rebbitə bir hadisə göndərilməsini əlavə etməyə vaxtımız yox idi.
  • Kuryerin cari mövqeyi ilə veb saytında cari sifariş səhifəsində xəritə göstərdim. Lakin bu funksionallıq bir az yarımçıq qaldı, çünki yeni xidmətimizdən koordinatları almaq üçün mühitdə CORS-u konfiqurasiya etmək mümkün deyildi.

M87

Roma Bukin, Qoşa Polevoy (georgepolevoy), Artyom Trofimuşkin

Biz OpenID Connect provayderini tətbiq etmək istədik, çünki hazırda öz dizaynımızın autentifikasiya protokolundan istifadə edirik və bu, bir sıra çətinliklər yaradır: fərdi müştəri kitabxanaları, xarici tərəfdaşlar tərəfindən əlverişsiz iş, mümkün təhlükəsizlik problemləri (hər şeydən sonra) , OAuth2.0 və istinad tətbiqində OpenID Connect təhlükəsiz hesab edilə bilər, lakin həllimizə əmin deyiləm).

Kodim-pizza

Fərdi məlumatlar üçün ayrıca xidmətə keçəcək identifikasiya provayderinin kiçik Ölkə-Aqnostik modelini yaratmaq üçün fərdi məlumatların saxlanması xidmətini təqlid edən ayrıca xidmət yaratdıq (bu, gələcəkdə bir xidmətə sahib olmağı mümkün edəcək). hər hansı bir ölkədə hesab qeydiyyatı ilə daxil ola bilər və eyni zamanda GDPR və digər federal qanunlara uyğun gəlir). Biz provayder kimi bu hissəni etdik və onları bir-biri ilə uğurla əlaqələndirdik. Bundan sonra, provayder tərəfindən buraxılan tokenlərlə qorunacaq, provayder vasitəsilə onların introspeksiyasını dəstəkləyəcək və sorğu avtorizasiya siyasətlərinə cavab verərsə, qorunan məlumatları qaytaracaq bir API yaratmaq lazım idi (biz istifadəçinin Bearer sxeminə uyğun olaraq autentifikasiya olunduğunu yoxlayırıq) , onun işarəsi müəyyən bir əhatə dairəsini ehtiva edir + y İstifadəçinin özü zəng etməyə icazə verən icazəyə malikdir). Bu hissə də tamamlandı. Son komponent JavaScript klienti idi, ona işarə veriləcək və onun köməyi ilə qorunan API adlandırılacaq. Bu hissəni etməyə vaxtımız yox idi. Yəni bütün funksional hissə hazır idi, lakin ön hissə bütün sistemin funksionallığını nümayiş etdirməyə hazır deyildi.

E-E-E (oyuncaq)

Dima Afonçenko, Saşa Konovalov

Yunkada mini-oyuncaq düzəltdik, burada əllər pizzanın üzərinə kolbasa atdı. Kolbasanı səhv qoyursanız, ekranda kədərli "Rədd edildi" mesajı görünür və bütün kolbasa düzgün qoyulubsa, pizza haqqında təsadüfi bir fakt görünür.

Kodim-pizza

Biz pomidor atmaqla ikinci səviyyə etmək istəyirdik, amma vaxtımız yox idi.

Kodim-pizza

Qısa davam: kim qazandı?

Hakatondan əvvəl biz uşaqlarla danışdıq və mən soruşdum ki, onlar qalib gəlsələr, hansı mükafatı almaq istəyirlər. Məlum oldu ki, ən qiymətli mükafat “yeməyə gedən yol” olacaq.

Kodim-pizza

Ona görə də tezliklə pizzaya bibər qoyan əllərlə oyun elan etməyimizi gözləyin.

Diqqətli oxucunun fərqinə vardığı kimi, “E-E-E (oyuncaq)” komandası qalib gəldi. Təbrik edirik uşaqlar!

Sorğuda yalnız qeydiyyatdan keçmiş istifadəçilər iştirak edə bilər. Daxil olunxahiş edirəm.

Hansı layihəni daha çox bəyəndiniz?

  • Oleq Öyrənmə (maşın öyrənmə)

  • NOOBS üçün GUI

  • CourierGo

  • M87

  • E-E-E

5 istifadəçi səs verib. 3 istifadəçi bitərəf qalıb.

Mənbə: www.habr.com

Добавить комментарий