Kodim-pizza

Salom, Xabr. Biz o'z-o'zidan birinchi ichki xakatonimizni o'tkazdik. Men siz bilan 2 hafta ichida unga tayyorgarlik ko'rish haqidagi og'riqlarim va xulosalarimni, shuningdek, amalga oshirilgan loyihalarni baham ko'rishga qaror qildim.

Kodim-pizza

Marketingga qiziquvchilar uchun zerikarli qism

Men kichik bir hikoyadan boshlayman.

Aprel oyining boshi. Bizning ofisimizda birinchi MskDotNet Community hakatoni bo'lib o'tmoqda. Tatuin jangi bu safar galaktikamizda qizgβ€˜in davom etmoqda. shanba. 20 ta jamoa. Pizza. Hammasi juda samimiy (dalillar). R2-D2 shamollatiladigan zalda suzib yuradi. Jamoalar xaritadagi eng xavfli poygadan o'tish uchun eng to'g'ri algoritmlarni yozadilar. Biz birinchi poygalarni ishga tushirmoqdamiz. Pechene va qahva hayotni qutqaruvchidir. Tashkilotchilar va men shanba kuni tushlikdan keyin ko'p odamlar ketishlarini kutgandik. Lekin yoq. 12 soat kodlash orqasida. Final. Biror narsa yiqilib, nimadir boshlanmayapti. Lekin hamma baxtli. Jamoamiz g'alaba qozonadi. Ikki karra xursandmiz.

Men Slackdagi quvonchimni baham ko'raman va xayolimga bir fikr keladi: "Biz o'z xakatonimizni o'tkazishimiz kerak". Men Sasha xizmat ko'rsatish stantsiyamizga yozyapman. Sukunat.

Ertalab. Men ofisda kofe ichaman. Men orqadan kelayotgan Sashani ko'raman. "Liza, bu ajoyib! 21 aprelda bizda muhim sana bor. Keling buni bajaramiz!" WTF!? Juda tez? A? Nima? Aprel oyining o'rtalarida amaliyot o'tash uchun Syktyvkarga uchishim kerak. Va jahannamga! Keling.

2 hafta qoldi. Men hech qachon hakatonning yagona tashkilotchisi bo'lmaganman. Bu ichki bo'lsin. Men ushbu mavzu bo'yicha maqolalarni o'qidim. Qattiq. Bir necha oy davom etadi. Bir necha kishi kerak. Siz tovar, sovg'alar, shartlar, jadval, qiziqish, maqsad, byudjetlar haqida o'ylashingiz kerak. Yoki hatto hayotning ma'nosini tushunib eting. Men, albatta, o'z vaqtida erisha olmayman. Va siz o'qish va tayyorgarlik ko'rayotganingizda, bir hafta allaqachon o'tdi. Maqolalar haqida unutish va biror narsa qilishni boshlash vaqti keldi.

1 hafta ichida ichki xakaton o'tkazish bo'yicha bizning nazorat ro'yxatini oling

  • Reja: Siz xotirjam o'tirasiz va hackathon uchun nima qilish kerakligi ro'yxatini yozasiz. 30 daqiqa.
  • Maqsad: Ishtirokchilar Google Sheets-da yaratmoqchi bo'lgan loyihalarni taklif qiladilar va tanlaydilar. Asosiy vazifa, 2 soat.
  • Jadval: tizzangizda siz 3 ta tanaffus va finalni hisobga olgan holda qisqa vaqt taqsimotini yozasiz. 20 daqiqa.
  • Buyruqlar: Slack/mail/etc-dagi AT-kanallarda xizmat ko'rsatish stantsiyasidan jadval bilan xakaton haqida xabarni nashr eting va xakaton uchun alohida kanal yarating. Unda hamma jamoalarga bo'lingan va bir qarorga kelmaganlar buni hakatonning dastlabki 5 daqiqasida amalga oshiradilar. Asosiy vazifa, 2 soat.
  • bulochka: siz ikkita ishlab chiquvchi bilan tovar taklif qilasiz, uni renderlash uchun dizaynerga berasiz va tayyor holda qabul qilasiz. Asosiy vazifa, 3 kun.
  • Hackathon: siz ofisga kelasiz, boshida hammani muvofiqlashtirasiz, o'z ishingiz bilan shug'ullaning, Reddit-ni o'qing, muhimi, yangi pizza haqida har bir tanaffusni e'lon qiling, quyosh botishini suratga oling, finalni e'lon qiling, birgalikda ovoz bering va g'olibni tanlang. 1 kuni.
  • Yulduzcha ostida: Albatta, siz doimo hamma narsa yaxshi ketayotgani haqida o'ylaysiz. Albatta, sizning xabaringizni hamma ham ko'rmaydi va kimdir bilan shaxsan gaplashish yaxshiroqdir. Albatta, agar kimdir sizga yordam bersa, hamma narsa 2 baravar osonlashadi (ajoyib Alena menga yordam berdi).

Hackathon sanasi haqida kamroq zerikarli qism

Nega 21 aprel? Bu kun biz uchun muhim. Bundan roppa-rosa bir yil oldin, 21-aprel kuni biz Federal reklama kampaniyasi boshlanganidan keyingi birinchi dam olish kunlarida yuk ostida qoldik. Ertasi kuni, yakshanba kuni bizning jamoamiz ertalab soat 8 dan ishda edi. Keyin biz Trelloda sundayhackathon kengashini yaratdik va bir haftalik smenali ish boshlandi, kuniga 12 soat. Vaziyat shu qadar og'ir ediki, ovqatlanishga ham ulgurmadik va bizni boshqa jamoalarning yigitlari ovqatlantirishdi.

Kodim-pizza

Batafsilroq hikoyani o'qishingiz mumkin Fyodor Ovchinnikov sahifasi (bizning bosh direktorimiz). O'shandan beri biz juda ko'p o'zgarganmiz, lekin endi biz sanani albatta unutmaymiz.

Bu yil biz ushbu tadbirni avlodlar xotirasida abadiylashtirishga arziydi, deb qaror qildik va eng yaxshi an'analarga ko'ra, Dodo tarixida 10 soat davom etgan birinchi ichki xakatonni tashkil etdik.

Hackathon loyihalarining eng zerikarli qismi

Rad etish: barcha tavsiflar yigitlarning o'zlari tomonidan yozilgan, shuning uchun matn muallifligi meniki emas.

Oleg Learning (mashinani o'rganish)

Dima Kochnev, Sasha Andronov (@alexandronov)

Ular hech qanday ma'lumotga ega bo'lmagan holda fotosuratda qanday pitsa borligini aniqlaydigan neyron tarmoq yaratmoqchi bo'lishdi. Natijada, biz juda oddiy va o'yinchoq tayyorladik - u 10 ta pitsani taniydi, biz bir kunda (~ 10 soat) iloji boricha hamma narsa qanday ishlashini taxminan aniqladik.

Kodim-pizza

Xususan, biz sanoat oddiy dasturchi tayyor kutubxonalarni olib, hujjatlarni o'qishi va mavzuni chuqur bilmasdan o'z neyron tarmog'ini o'rgatishi mumkin bo'lgan darajaga etganini angladik. Va u haqiqiy muammolarni hal qilish uchun etarli darajada ishlaydi.

Ishlatilgan asboblar:

  • imageai β€” mashinani o'rganish va kompyuterni ko'rish bilan ishlash uchun qulay va oddiy kutubxona.
  • Biz ikkita modelni sinab ko'rdik - ResNet50, Yolo.
  • Kod, albatta, Pythonda yozilgan.

Bizda 11000 3 ta fotosurat bor edi, ammo ularning deyarli 4/500 qismi axlat bo'lib chiqdi, qolganlari esa turli xil, mos bo'lmagan burchaklarga ega edi. Natijada, biz tayyor modelni oldik (bu oddiygina pizza topishni biladi) va uning yordami bilan biz axlatni ajratdik. Keyinchalik, fotosuratning sarlavhasida pitssa nomi bor edi - shuning uchun biz uni papkalarga ajratdik, ammo nomlar haqiqatga to'g'ri kelmasligi ma'lum bo'ldi va biz uni qo'lda tozalashimiz kerak edi. Oxir-oqibat 600-10 ga yaqin fotosuratlar qoldi, bu arzimas miqdor ekanligi aniq, ammo shunga qaramay, bu XNUMX ta pitssani bir-biridan ajratish uchun etarli edi.

Tarmoqni o'rgatish uchun biz NVIDIA Tesla K80-da Azure-dagi eng arzon virtual mashinani oldik. Ular 100 epox davomida mashq qilishdi, ammo kichik ma'lumotlar to'plami mavjudligi sababli tarmoq 50 davrdan keyin to'yinganligi aniq edi.

Aslida, butun muammo yaxshi ma'lumotlarning etishmasligi.

Kodim-pizza

Biz atamalarni biroz chalkashtirib yuborgan bo'lishimiz mumkin, ammo shuni hisobga olishimiz kerakki, bu masalalar bilan ishlashda bizda umuman tajriba yo'q.

NOOBS uchun GUI (pitsa buyurtma qilish uchun konsol)

Misha Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasilev

Biz geeks uchun konsol ilovasining prototipini tayyorladik, buning yordamida siz terminal yoki buyruq satri orqali pizza buyurtma qilishingiz yoki hatto uni tarqatish quvuriga qo'shishingiz va muvaffaqiyatli chiqarilgandan so'ng, ofisga pizza yetkazib berishingiz mumkin.

Kodim-pizza

Ish bir necha qismlarga bo'lingan: biz mobil ilovalar uchun API qanday ishlashini aniqladik, o'z CLI-ni yig'dik. oklif va biz to'plagan paketning nashr etilishini sozladik. Oxirgi vazifa hakaton oxiriga kelib bir necha noxush daqiqalarni o'z ichiga oldi. Biz uchun hamma narsa mahalliy darajada ishladi va hatto paketning eski nashr etilgan versiyalari ham ishladi, lekin yangilari (ko'proq ajoyib xususiyatlar va kulgichlar qo'shdi) ishlashdan bosh tortdi. Biz nima noto'g'ri bo'lganini aniqlash uchun taxminan 40 daqiqa vaqt sarfladik, lekin oxirida hamma narsa sehrli tarzda o'z-o'zidan ishladi).

Hackathon uchun maksimal dasturimiz CLI orqali ofisga pitsa buyurtma qilish edi. Sinov skameykasida biz hamma narsani o'nlab marta yugurdik, lekin men ishlab chiqarishga buyruqlarni kiritganimda qo'llarim hali ham titrardi.

Kodim-pizza

Natijada, biz nihoyat buni qildik!

Kodim-pizza

CourierGo

Anton Brujmelev (muallif), Vanya Zverev, Gleb Lesnikov (muallif).entropiya), Andrey Sarafanov

Biz "Kuryer uchun ilova" g'oyasini oldik.

Tayyorgarlik haqida ma'lumot.Dastlab, ilovada qanday xususiyatlar bo'lishi mumkinligi haqida o'ylab qoldim? Quyidagi funktsiyalar ro'yxati paydo bo'ldi:

  • Ilova kod yordamida etkazib berish kassasiga kiradi.
  • Ilova darhol mavjud buyurtmalar va qabul qilinishi kerak bo'lgan buyurtmalarni ko'rsatadi.
  • Kuryer buyurtmani qayd qiladi va uni safarga olib boradi.
  • Unga taxminiy vaqt ko'rsatiladi va u o'z vaqtida keladimi yoki yo'qmi.
  • Mijozga kurerning ketganligini ko'rsatadi.
  • Xaritada mijozga kurerning nuqtasi va taxminiy vaqt ko'rsatila boshlaydi.
  • Kuryer mijozga ilovadan chat orqali yozishi mumkin.
  • Mijoz dasturdan chat orqali kurerga yozishi mumkin.
  • Kelishdan besh daqiqa oldin mijoz kuryer yaqinligi haqida xabar oladi, tayyor bo'ling.
  • Kuryer arizada u kelganini va kutayotganini qayd etadi.
  • Kuryer bir marta bosish bilan ilovadan qo'ng'iroq qiladi va bu haqda xabar beradi (ko'tarilmoqda, keldi va hokazo).
  • Mijoz buyurtmani qabul qiladi va yetkazib berishni tasdiqlash uchun ariza yoki SMS dan PIN-kodni kiritadi.(imzo sifatida) Kuryer kechikib qolsa yetkazib berishni oldindan bajara olmasligi uchun.
  • Buyurtma tizimda yetkazib berilgan deb belgilangan.

Bundan tashqari, bir nechta muqobil stsenariylar:

  • Kuryer buyurtmani yetkazib berilmagan deb belgilashi va sababini tanlashi mumkin.
  • Agar siz kechiksangiz, kurer bir tugma orqali SMS orqali elektron sertifikat berishi mumkin. Yoki yetkazib berish muddati bajarilmasa, sertifikat avtomatik ravishda keladi.

Ushbu loyihaning va'dasi va zarurligi, albatta, kuch bag'ishladi.

Ertasi kuni biz jamoa bilan tushlikka bordik va dasturning minimal funksionalligi qanday ko'rinishini muhokama qildik.

Natijada, xakatonda bajarilishi kerak bo'lgan ishlar ro'yxati shakllantirildi:

  • Yetkazib berish kassasiga kiring.
  • Joriy pozitsiyani ko'rsatish.
  • Ma'lumotlarni tashqi API ga yuboring (koordinatalar, buyurtma qabul qilindi, buyurtma yetkazib berildi).
  • Tashqi API dan ma'lumotlarni oling (joriy kurerlik buyurtmalari).
  • Yetkazib berish/etkazib berish uchun buyurtma olganingizni ko'rsatadigan voqeani yuboring.
  • Veb-saytdagi xaritada kurerning joriy holatini ko'rsating.

Aftidan, asosiy ish orqa tomonni, dasturning o'zini yaratishda edi (muhokamalardan so'ng biz dasturni ishlab chiqish uchun ReactNative-ni, aniqrog'i uning ramkasini tanladik - expo.io, bu sizga asl kodni yozmaslikka imkon beradi). Backend nuqtai nazaridan, dastlab Vanya Zverevda umid bor edi, chunki u bizning xizmat shablonimiz va k8s bilan ishlashda tajribaga ega edi (u qaysi ishni o'z zimmasiga oldi). Andrey Sarafanov va men ReactNative dasturini tomosha qildik.

Men darhol loyihaning o'zi uchun ishlaydigan omborni yaratishga qaror qildim. Kechasi 12 da men ReactNative-da fonda geolokatsiya yaxshi ishlamayotganiga duch keldim, agar siz ona kodini yozmasangiz, biroz xafa bo'ldim. Keyin men expo.io ramkasi emas, balki ReactNative hujjatlarini o'qiyotganimni anglab, qo'yib yubordim. Natijada, kechqurun men expo.io-da joriy pozitsiyani qanday olish va alohida ekranlarni (kirish, buyurtma ko'rsatish va h.k.) chizishni tushundim.

Kodim-pizza

Ertalab xakatonda ular Glebni o'zlarining istiqbolli loyihalariga jalb qilishdi. Ular tezda nima qilish kerakligi haqida reja tuzdilar.

Kodim-pizza

Biz loyiha shabloniga muvofiq HTTP orqali emas, balki GRPC orqali muloqot qilishga harakat qilganimizda xato qildik, chunki hech kim JavaScript uchun GRPC mijozini qanday yaratishni bilmas edi. Oxir-oqibat, bunga bir yarim soat vaqt sarflaganimizdan so'ng, biz bu fikrdan voz kechdik. Shu sababli, orqa tomondagi yigitlar tayyor serverni GRPC-dan WebApi-ga qayta ishlashni boshladilar. Yarim soatdan so'ng, biz nihoyat dastur va backend o'rtasida aloqa o'rnatishga muvaffaq bo'ldik. Ammo shu bilan birga, Gleb k8-larga o'rnatishni va qo'shimcha ravishda masterga majburiyatni avtomatik ravishda joylashtirishni deyarli tugatdi. πŸ™‚

Biz hech bo'lmaganda ma'lumotlar bazasi bilan tavakkal qilmaslik uchun MySQL-ni saqlash sifatida tanladik (bizda CosmosDb haqida fikrimiz bor edi).

Kodim-pizza

Natijada:

  • Ilovadan ma'lumotlar bazasiga kurerning joriy koordinatalarini saqlash amalga oshirildi.
  • Biz RabbitMQ-ni o'rnatdik va kurerdan buyurtmani dasturda darhol ko'rsatish uchun buyurtmani qabul qilish haqidagi xabarlarga obuna bo'ldik.
  • Kuryer ilovadagi tugmani bosgandan soβ€˜ng, buyurtmani yetkazib berish vaqtini ma’lumotlar bazamizga saqlashni boshladik. Buyurtma yetkazib berilgan rebbitga voqeani yuborishni qo'shishga vaqtimiz yo'q edi.
  • Men veb-saytdagi joriy buyurtma sahifasida kurerning joriy pozitsiyasi bilan xaritani namoyish qildim. Ammo bu funksionallik biroz tugallanmagan bo'lib qoldi, chunki bizning yangi xizmatimizdan koordinatalarni olish uchun muhitda CORS-ni sozlash mumkin emas edi.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Biz OpenID Connect provayderini joriy qilmoqchi edik, chunki hozirda biz o'z dizaynimizning autentifikatsiya protokolidan foydalanamiz va bu bir qator qiyinchiliklarni keltirib chiqaradi: shaxsiy mijozlar kutubxonalari, tashqi hamkorlar tomonidan noqulay ish, mumkin bo'lgan xavfsizlik muammolari (oxir-oqibat). , OAuth2.0 va OpenID Connect mos yozuvlarni amalga oshirishda xavfsiz deb hisoblanishi mumkin, ammo men yechimimizga ishonchim komil emas).

Kodim-pizza

Shaxsiy ma'lumotlar uchun alohida xizmatga o'tadigan autentifikatsiya provayderining kichik Country-Agnostic modelini yaratish uchun shaxsiy ma'lumotlarni saqlash xizmatiga taqlid qiluvchi alohida xizmat yaratdik (bu kelajakda bitta xizmatga ega bo'lish imkonini beradi). istalgan mamlakatda hisob qaydnomasi bilan tizimga kirishi va shu bilan birga GDPR va boshqa federal qonunlarga mos kelishi mumkin). Biz provayder kabi bu qismni qildik va ularni bir-birimiz bilan muvaffaqiyatli bog'ladik. Keyinchalik, provayder tomonidan chiqarilgan tokenlar bilan himoyalanadigan API yaratish, provayder orqali ularning introspektsiyasini qo'llab-quvvatlash va agar so'rov avtorizatsiya siyosatiga javob bersa, himoyalangan ma'lumotlarni qaytarish kerak edi (biz foydalanuvchi Bearer sxemasiga muvofiq autentifikatsiya qilinganligini tekshiramiz) , uning tokeni ma'lum doirani o'z ichiga oladi + y Foydalanuvchining o'zi qo'ng'iroq qilish imkonini beruvchi ruxsatga ega). Bu qism ham yakunlandi. Oxirgi komponent JavaScript mijozi bo'lib, unga token beriladi, uning yordamida himoyalangan API deb ataladi. Bu qismni bajarishga vaqtimiz yo'q edi. Ya'ni, butun funktsional qism tayyor edi, lekin oldingi qism butun tizimning funksionalligini namoyish etishga tayyor emas edi.

E-E-E (o'yinchoq)

Dima Afonchenko, Sasha Konovalov

Biz yunkada mini-o'yinchoq yasadik, u erda qo'llar pizza ustiga kolbasa tashlaydi. Agar siz kolbasani noto'g'ri qo'ygan bo'lsangiz, ekranda qayg'uli "Rad etilgan" xabari paydo bo'ladi va agar barcha kolbasa to'g'ri qo'yilgan bo'lsa, pizza haqida tasodifiy fakt paydo bo'ladi.

Kodim-pizza

Biz pomidorlarni tashlash bilan ikkinchi darajani qilishni xohladik, ammo vaqtimiz yo'q edi.

Kodim-pizza

Qisqacha davom: kim g'alaba qozondi?

Hackathon oldidan biz yigitlar bilan suhbatlashdik va agar ular g'olib bo'lishsa, qanday mukofot olishni xohlashlarini so'radim. Ma'lum bo'lishicha, eng qimmat mukofot "oziq-ovqatga yo'l" bo'ladi.

Kodim-pizza

Shuning uchun, tez orada pizza ustiga qalampir qo'yadigan qo'llar bilan o'yin e'lon qilishimizni kuting.

Diqqatli o'quvchi e'tibor bergan bo'lishi mumkin, "E-E-E (o'yinchoq)" jamoasi g'alaba qozondi. Tabriklaymiz yigitlar!

So'rovda faqat ro'yxatdan o'tgan foydalanuvchilar ishtirok etishlari mumkin. tizimga kirishiltimos.

Qaysi loyiha sizga ko'proq yoqdi?

  • Oleg Learning (mashinani o'rganish)

  • NOOBS uchun GUI

  • CourierGo

  • M87

  • E-E-E

5 nafar foydalanuvchi ovoz berdi. 3 nafar foydalanuvchi betaraf qolgan.

Manba: www.habr.com

a Izoh qo'shish