Kodim-pizza

Sugeng rawuh, Habr. Kita sacara spontan nganakake hackathon internal pisanan. Aku mutusake kanggo nuduhake rasa lara lan kesimpulan babagan nyiapake ing 2 minggu, uga proyek sing dadi.

Kodim-pizza

Sisih mboseni kanggo sing kasengsem ing marketing

Aku bakal miwiti karo crita sethitik.

Awal April. Hackathon Komunitas MskDotNet pisanan ditindakake ing kantor kita. Pertempuran Tatooine lagi aktif ing galaksi kita saiki. sabtu. 20 tim. Pizza. Kabeh iku ikhlas (bukti). Inflatable R2-D2 ngambang ngubengi bale. Tim nulis algoritma sing paling bener kanggo ngliwati balapan paling mbebayani ing peta. Kita ngobahake peluncuran balapan pisanan. Cookie lan kopi minangka penyelamat. Aku lan panitia ngarepake manawa akeh wong sing lunga sawise nedha awan dina Setu. Nanging ora. 12 jam coding konco. Pamungkas. Ana sing tiba, ana sing ora diwiwiti. Nanging kabeh wong seneng. Tim kita menang. We are pindho seneng.

Aku nuduhake kabungahan ing Slack lan ide kasebut: "Kita kudu nindakake hackathon dhewe." Aku nulis menyang stasiun layanan Sasha. meneng.

Enjing. Aku ngombe kopi ing kantor. Aku weruh Sasha nyedhaki saka mburi. "Lisa, iki apik tenan! Kita duwe tanggal penting tanggal 21 April. Ayo gawe!" WTF!? Dadi cepet? A? opo? Aku kudu mabur menyang Syktyvkar kanggo magang ing pertengahan April. Lan kanggo neraka karo! Ayo.

2 minggu maneh. Aku ora tau dadi siji-sijine penyelenggara hackathon. Ayo dadi internal. Aku maca artikel babagan topik iki. Tangguh. Butuh sawetara sasi. Saperangan wong dibutuhake. Sampeyan kudu mikir babagan barang dagangan, hadiah, kahanan, jadwal, kapentingan, ngerti tujuan, anggaran. Utawa bisa uga ngerteni makna urip. Aku mesthi ora bakal teka ing wektu. Lan nalika sampeyan maca lan nyiapake, seminggu wis liwat. Wektu kanggo lali babagan artikel lan miwiti nindakake apa wae.

Nyekel dhaptar priksa kanggo nganakake hackathon internal sajrone 1 minggu

  • Rencana: Sampeyan lungguh kanthi tenang lan nulis dhaptar apa sing kudu ditindakake kanggo hackathon. 30 menit.
  • Tujuan: Peserta ngusulake lan milih proyek sing arep digawe ing Google Sheets. Tugas latar mburi, 2 jam.
  • Jadwal: ing dhengkul sampeyan nulis risak cendhak wektu, njupuk menyang akun 3 break lan final. 20 menit.
  • Tim: nerbitake pesen babagan hackathon kanthi jadwal saka stasiun layanan ing saluran IT ing Slack/mail/etc lan nggawe saluran kapisah kanggo hackathon. Ing kono, kabeh wong dipérang dadi tim, lan wong-wong sing durung mutusake nindakake iki ing 5 menit pisanan hackathon. Tugas latar mburi, 2 jam.
  • roti: sampeyan teka munggah karo merch karo loro gawe, menehi kanggo desainer kanggo Rendering, lan nampa siap. Tugas latar mburi, 3 dina.
  • Hackathon: sampeyan teka ing kantor, koordinasi kabeh wong ing wiwitan, bukak bisnis sampeyan, maca Reddit, sing penting ngumumake saben istirahat babagan pizza seger, njupuk gambar sunset, ngumumake final, milih bebarengan lan milih pemenang. 1 day.
  • Ing sangisore tanda bintang: Mesthi, sampeyan terus-terusan mikir babagan kabeh sing apik. Mesthine, ora kabeh wong bakal weruh pesen sampeyan lan luwih becik ngobrol karo sawetara wong. Mesthi wae, yen ana wong sing nulungi sampeyan, kabeh bakal luwih gampang 2 kali (Alena sing apik banget nulungi aku).

Sisih kurang mboseni babagan tanggal hackathon

Kenapa tanggal 21 April? Dina iki penting kanggo kita. Persis setahun kepungkur, tanggal 21 April, kita tiba ing beban nalika akhir minggu pisanan sawise wiwitan Kampanye Iklan Federal. Esuke, Minggu, tim kita kerja wiwit jam 8 esuk. Banjur kita nggawe papan sundayhackathon ing Trello lan minggu kerja shift diwiwiti, 12 jam saben dina. Kahanan kasebut kritis banget nganti ora duwe wektu kanggo mangan lan dipangan dening wong lanang saka tim liyane.

Kodim-pizza

Sampeyan bisa maca crita sing luwih rinci ing Kaca Fyodor Ovchinnikov (CEO kita). Wiwit kuwi, kita wis akeh owah-owahan, nanging saiki kita mesthi ora bakal lali tanggal kasebut.

Ing taun iki, kita mutusake manawa acara iki kudu dilestarikake ing memori keturunan lan, ing tradhisi sing paling apik, kita ngatur hackathon internal pisanan ing sejarah Dodo, sing suwene 10 jam.

Sisih paling mboseni babagan proyek hackathon

Penafian: kabeh deskripsi ditulis dening wong lanang dhewe, mula panulis teks kasebut dudu aku.

Oleg Learning (machine learning)

Dima Kochnev, Sasha Andronov (@alexandronov)

Dheweke pengin nggawe jaringan saraf sing bakal nemtokake apa jenis pizza ing foto tanpa kawruh. Akibaté, kita nggawe sing prasaja lan dolanan - iku ngenali 10 pizza, kita kira-kira carane kabeh bisa digunakake, sabisa-bisa ing dina (~ 10 jam).

Kodim-pizza

Utamane, kita nyadari yen industri wis tekan tingkat ing ngendi pangembang biasa bisa njupuk perpustakaan sing wis siap, maca dokumentasi lan nglatih jaringan saraf tanpa kawruh jero babagan subyek. Lan bakal bisa uga cukup kanggo ngatasi masalah nyata.

Piranti sing digunakake:

  • gambare - perpustakaan sing trep lan prasaja kanggo nggarap pembelajaran mesin lan visi komputer.
  • Kita nyoba rong model - ResNet50, Yolo.
  • Kode iki ditulis, mesthi, ing Python.

Kita duwe 11000 foto, nanging meh 3/4 mau dadi sampah, lan liyane duwe sudut sing ora cocog. Akibaté, kita njupuk model siap-digawe (sing mung ngerti carane golek pizza) lan karo bantuan kita misahake sampah. Sabanjure, judhul foto kasebut kalebu jeneng pizza - mula diurutake menyang folder, nanging ternyata jeneng kasebut ora cocog karo kasunyatan lan kita kudu ngresiki nganggo tangan. Pungkasane, ana udakara 500-600 foto sing isih ana, jelas yen jumlah kasebut ora pati penting, nanging iki cukup kanggo misahake 10 pizza saka siji liyane.

Kanggo nglatih kothak, kita njupuk mesin virtual paling murah ing Azure ing NVIDIA Tesla K80. Padha dilatih ing kanggo 100 epochs, nanging cetha yen jaringan wis oversaturated sawise 50 epochs, amarga kasunyatan sing ana dataset cilik.

Bener, kabeh masalah yaiku kekurangan data sing apik.

Kodim-pizza

Kita bisa uga rada bingung babagan istilah kasebut, nanging kita kudu nganggep manawa kita ora duwe pengalaman babar pisan kanggo nggarap kabeh perkara kasebut.

GUI kanggo NOOBS (konsol kanggo pesen pizza)

Misha Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Kita wis sijine bebarengan prototipe saka aplikasi console kanggo geeks, thanks kanggo sampeyan bisa order pizza liwat terminal utawa baris printah, utawa malah nggabungake menyang pipeline penyebaran lan, sawise sukses release, ngirim pizza menyang kantor.

Kodim-pizza

Karya kasebut dipérang dadi pirang-pirang bagean: kita ngerti kepiye cara kerja API kanggo aplikasi seluler, ngrakit CLI dhewe nggunakake oclif lan ngatur publikasi paket sing diklumpukake. Tugas pungkasan melu sawetara menit sing ora nyenengake ing pungkasan hackathon. Kabeh bisa digunakake sacara lokal kanggo kita, lan malah versi lawas sing diterbitake saka paket kasebut bisa digunakake, nanging sing anyar (sing nambahake fitur lan emotikon sing luwih apik) ora gelem. We ngginakaken bab 40 menit nyoba kanggo tokoh metu apa salah, nanging ing pungkasan kabeh gaib makarya ing dhewe).

Program maksimal kanggo hackathon yaiku pesenan pizza nyata menyang kantor liwat CLI. We mlayu kabeh kaping rolas ing bench test, nanging tangan isih goyang nalika aku ngetik printah ing produksi.

Kodim-pizza

Akibaté, kita pungkasanipun nindakaken!

Kodim-pizza

KurirGo

Anton Bruzhmelev (pengarang), Vanya Zverev, Gleb Lesnikov (entropi), Andrey Sarafanov

Kita njupuk gagasan "Aplikasi kanggo Kurir".

Latar mburi babagan persiapan.Kaping pisanan, aku kepingin weruh apa fitur sing bisa ana ing aplikasi kasebut? Dhaptar fungsi ing ngisor iki muncul:

  • Aplikasi mlebu menyang kasir pangiriman nggunakake kode kasebut.
  • Aplikasi kasebut langsung nuduhake pesenan sing kasedhiya lan pesenan sing kudu ditindakake.
  • Kurir nyathet pesenan lan njupuk ing perjalanan.
  • Dheweke dituduhake wektu sing dikira-kira lan apa dheweke tepat wektu utawa ora.
  • Nuduhake klien yen kurir wis lunga.
  • Klien wiwit ditampilake titik kurir ing peta lan wektu sing dikira.
  • Kurir bisa nulis menyang klien ing obrolan saka aplikasi kasebut.
  • Klien bisa nulis menyang kurir liwat chatting saka aplikasi.
  • Limang menit sadurunge rawuh, klien nampa pesen yen kurir wis cedhak, disiapake.
  • Kurir nyathet ing aplikasi yen dheweke wis teka lan ngenteni.
  • Kurir nelpon saka aplikasi kanthi siji klik lan laporan yen (mundhak, wis teka, lsp.)
  • Klien nampa pesenan lan ngetik kode PIN saka aplikasi utawa SMS kanggo konfirmasi pangiriman.(minangka tandha tangan) Dadi kurir ora bisa ngrampungake kiriman luwih dhisik yen telat.
  • Pesenan ditandhani minangka dikirim ing sistem.

Plus sawetara skenario alternatif:

  • Kurir bisa menehi tandha pesen ora dikirim lan milih alesan.
  • Yen sampeyan telat, kurir bisa ngetokake sertifikat elektronik liwat SMS kanthi tombol siji. Utawa sertifikat teka kanthi otomatis yen tenggat wektu pangiriman ora ketemu.

Perasaan janji lan kabutuhan proyek iki, mesthi, energizing.

Dina sabanjure kita nedha awan karo tim lan ngrembug babagan apa fungsi minimal aplikasi kasebut.

Akibaté, dhaptar ing ngisor iki sing kudu ditindakake ing hackathon dibentuk:

  • Login menyang kasir pangiriman.
  • Tampilake posisi saiki.
  • Ngirim data menyang API eksternal (koordinat, nampa pesenan, ngirim pesenan).
  • Nampa data saka API eksternal (pesenan kurir saiki).
  • Kirimi acara sing nuduhake yen sampeyan wis njupuk pesenan kanggo pangiriman / dikirim.
  • Tampilake posisi kurir saiki ing peta ing situs web.

Karya utama, kaya sing katon, yaiku nggawe backend, aplikasi kasebut dhewe (sawise diskusi, kita milih ReactNative kanggo ngembangake aplikasi kasebut, utawa kerangka kerja kasebut - expo.io, sing ngidini sampeyan ora nulis kode asli). Ing babagan backend, wiwitane ana pangarep-arep ing Vanya Zverev, amarga dheweke duwe pengalaman nggarap template layanan lan k8s (sing ditindakake). Andrey Sarafanov lan aku njupuk ReactNative kanggo muter.

Aku mutusake kanggo nyoba nggawe repositori kerja kanggo proyek kasebut dhewe. Jam 12 wengi aku nemoni kasunyatan manawa geolokasi ing latar mburi ora bisa digunakake ing ReactNative, yen sampeyan ora nulis kode asli, aku rada frustasi. Banjur aku ngeculake nalika aku ngerti yen aku maca dokumentasi dudu kerangka expo.io, nanging saka ReactNative. Akibaté, ing wayah sore aku wis ngerti carane entuk posisi saiki ing expo.io lan nggambar layar sing kapisah (kanggo login, tampilan pesenan, lsp).

Kodim-pizza

Ing wayah esuk ing hackathon, dheweke nggodha Gleb menyang proyek super-janji. Dheweke cepet nggawe rencana apa sing kudu ditindakake.

Kodim-pizza

Kita nggawe kesalahan nalika, miturut cithakan proyek, kita nyoba komunikasi ora liwat HTTP, nanging liwat GRPC, amarga ora ana sing ngerti carane nggawe klien GRPC kanggo JavaScript. Pungkasane, sawise ngentekake babagan siji setengah jam babagan iki, kita nolak ide iki. Amarga iki, wong lanang ing mburi wiwit nggawe maneh server sing wis rampung saka GRPC menyang WebApi. Sawise setengah jam, kita pungkasanipun bisa nyetel komunikasi antarane aplikasi lan backend, lah. Nanging ing wektu sing padha, Gleb meh rampung panyebaran menyang k8s lan ditambah karo panyebaran otomatis komitmen menyang master. 🙂

Kita milih MySQL minangka panyimpenan supaya ora njupuk risiko paling ora karo database (kita duwe pikirane babagan CosmosDb).

Kodim-pizza

Ringkesan:

  • Dilaksanakake nyimpen koordinat saiki kurir saka aplikasi menyang database.
  • Kita nginstal RabbitMQ lan langganan pesen babagan kurir njupuk pesenan supaya bisa langsung nampilake pesenan saka kurir ing aplikasi kasebut.
  • Kita miwiti nyimpen wektu pangiriman pesenan menyang database sawise kurir menet tombol ing aplikasi. Kita ora duwe wektu kanggo nambah ngirim acara bali menyang rebbit sing pesenan dikirim.
  • Aku nggawe tampilan peta ing kaca pesenan saiki ing situs web kanthi posisi kurir saiki. Nanging fungsi iki tetep rada durung rampung, amarga ora bisa ngatur CORS ing lingkungan kanggo nampa koordinat saka layanan anyar kita.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Kita pengin ngleksanakake panyedhiya OpenID Connect, amarga saiki nggunakake protokol otentikasi saka desain kita dhewe, lan iki nggawe sawetara kesulitan: perpustakaan klien khusus, karya sing ora trep saka mitra eksternal, masalah keamanan sing bisa ditindakake (sawise kabeh). , OAuth2.0 lan OpenID Connect ing implementasine referensi bisa dianggep aman, nanging aku ora yakin babagan solusi kita).

Kodim-pizza

Kita nggawe layanan kapisah sing niru layanan kanggo nyimpen data pribadhi supaya bisa nggawe model Country-Agnostic cilik saka panyedhiya otentikasi sing bakal pindhah menyang layanan sing kapisah kanggo data pribadhi (iki ing mangsa ngarep bakal nggawe siji layanan karo sing bisa mlebu nganggo registrasi akun ing negara endi wae, lan ing wektu sing padha tundhuk karo GDPR lan hukum federal liyane). Kita nindakake bagean iki, kaya panyedhiya, lan kasil nyambungake siji liyane. Sabanjure, perlu kanggo nggawe API sing bakal dilindhungi dening token sing ditanggepi panyedhiya, ndhukung introspeksi liwat panyedhiya lan bali data sing dilindhungi yen panyuwunan marem karo kabijakan wewenang (kita mriksa manawa pangguna wis dikonfirmasi miturut skema Bearer. , token dheweke ngemot ruang lingkup tartamtu + y Pangguna dhewe duwe ijin sing ngidini telpon bisa ditindakake). Bagian iki uga rampung. Komponen pungkasan yaiku klien JavaScript, sing bakal diwenehi token, kanthi bantuan kasebut bakal nelpon API sing dilindhungi. Kita ora duwe wektu kanggo nindakake bagean iki. Yaiku, kabeh bagean fungsional wis siyap, nanging bagean ngarep durung siap kanggo nuduhake fungsi kabeh sistem.

E-E-E (dolanan)

Dima Afonchenko, Sasha Konovalov

Kita nggawe mini-dolanan ing yunka ngendi frisky tangan uncalan sosis ing pizza. Yen sampeyan salah sijine sosis, pesen sedih "Ditolak" katon ing layar, lan yen kabeh sosis dilebokake kanthi bener, kasunyatan acak babagan pizza katon.

Kodim-pizza

Kita pengin nggawe tingkat kapindho kanthi mbuwang tomat, nanging ora duwe wektu.

Kodim-pizza

Lanjutan singkat: sapa sing menang?

Sadurunge hackathon, kita ngomong karo wong lanang lan aku takon hadiah apa sing bakal ditampa yen menang. Pranyata hadiah sing paling aji yaiku "dalan menyang panganan".

Kodim-pizza

Mulane, nyana kita ngumumake game karo tangan sing sijine pepperons ing pizza rauh.

Minangka maca sing ati-ati bisa uga ngerteni, tim "E-E-E (dolanan)" menang. Sugeng ndalu!

Mung pangguna pangguna sing bisa melu survey. mlebunggih.

Proyek endi sing paling disenengi?

  • Oleg Learning (machine learning)

  • GUI kanggo NOOBS

  • KurirGo

  • M87

  • E-E-E

5 pangguna milih. 3 pangguna abstain.

Source: www.habr.com

Add a comment