Kodim-pizza

Hello, Habr. Kami secara spontan mengadakan hackathon dalaman pertama kami. Saya memutuskan untuk berkongsi dengan anda kesakitan dan kesimpulan saya tentang penyediaannya dalam masa 2 minggu, serta projek-projek yang ternyata.

Kodim-pizza

Bahagian yang membosankan bagi mereka yang berminat dalam pemasaran

Saya akan mulakan dengan sedikit cerita.

Awal bulan April. Hackathon Komuniti MskDotNet yang pertama sedang berlangsung di pejabat kami. Pertempuran Tatooine sedang berlangsung di galaksi kita kali ini. Sabtu. 20 pasukan. Pizza. Semuanya sangat ikhlas (bukti). R2-D2 boleh kembung terapung di sekeliling dewan. Pasukan menulis algoritma yang paling betul untuk melepasi perlumbaan paling berbahaya pada peta. Kami menggerakkan pelancaran perlumbaan pertama. Kuki dan kopi adalah penyelamat. Saya dan pihak penganjur menjangkakan ramai yang akan keluar selepas makan tengah hari pada hari Sabtu. Tetapi tidak. 12 jam pengekodan di belakang. Perlawanan akhir. Sesuatu jatuh, sesuatu tidak bermula. Tetapi semua orang gembira. Pasukan kami menang. Kami gembira berganda.

Saya berkongsi kegembiraan saya dalam Slack dan idea terlintas di fikiran: "Kita perlu melakukan hackathon kita sendiri." Saya menulis surat kepada stesen servis kami Sasha. senyap.

Pagi. Saya minum kopi di pejabat. Aku nampak Sasha menghampiri dari belakang. β€œLisa, ini hebat! Kami ada tarikh penting pada 21 April. Mari lakukannya!" WTF!? Sangat laju? A? Apa? Saya perlu terbang ke Syktyvkar untuk latihan pada pertengahan April. Dan ke neraka dengannya! Jom.

2 minggu lagi. Saya tidak pernah menjadi penganjur tunggal hackathon. Biarlah dalaman. Saya membaca artikel mengenai topik ini. lasak. Ia mengambil masa beberapa bulan. Beberapa orang diperlukan. Anda perlu memikirkan tentang barang niaga, hadiah, syarat, jadual, minat, memahami matlamat, belanjawan. Atau mungkin juga memahami erti kehidupan. Saya pasti tidak akan sampai pada masanya. Dan semasa anda membaca dan membuat persediaan, seminggu telah berlalu. Sudah tiba masanya untuk melupakan artikel dan mula melakukan sesuatu.

Tangkap senarai semak kami untuk mengadakan hackathon dalaman dalam masa 1 minggu

  • Plane: Anda duduk dengan tenang dan tulis senarai perkara yang perlu dilakukan untuk hackathon itu. 30 minit.
  • Petugas: Peserta mencadangkan dan memilih projek yang mereka ingin buat dalam Helaian Google. Tugas latar belakang, 2 jam.
  • Jadual Waktu: pada lutut anda anda menulis pecahan masa yang singkat, dengan mengambil kira 3 rehat dan yang terakhir. 20 minit.
  • Pasukan: menerbitkan mesej tentang hackathon dengan jadual dari stesen servis dalam saluran IT dalam Slack/mail/etc dan buat saluran berasingan untuk hackathon. Di dalamnya, semua orang dibahagikan kepada pasukan, dan mereka yang belum membuat keputusan melakukan ini dalam 5 minit pertama hackathon. Tugas latar belakang, 2 jam.
  • Roti: anda menghasilkan barang niaga dengan dua pembangun, berikan kepada pereka bentuk untuk dipamerkan, dan terimanya sedia. Tugasan latar belakang, 3 hari.
  • Hackathon: anda datang ke pejabat, menyelaraskan semua orang pada mulanya, menjalankan perniagaan anda, membaca Reddit, yang penting mengumumkan setiap rehat tentang pizza segar, mengambil gambar matahari terbenam, mengumumkan perlawanan akhir, mengundi bersama dan memilih pemenang. Hari 1.
  • Di bawah asterisk: Sudah tentu, anda sentiasa berfikir tentang semuanya berjalan lancar. Sudah tentu, tidak semua orang akan melihat mesej anda dan lebih baik bercakap dengan beberapa orang secara peribadi. Sudah tentu, jika seseorang membantu anda, semuanya akan menjadi 2 kali lebih mudah (Alena yang hebat membantu saya).

Bahagian yang kurang membosankan tentang tarikh hackathon

Kenapa 21 April? Hari ini bermakna bagi kami. Tepat setahun yang lalu, pada 21 April, kami mengalami beban semasa hujung minggu pertama selepas bermulanya Kempen Pengiklanan Persekutuan. Keesokan harinya, Ahad, pasukan kami berada di tempat kerja dari jam 8 pagi. Kemudian kami mencipta papan sundayhackathon di Trello dan seminggu kerja syif bermula, 12 jam sehari. Keadaan sangat kritikal sehingga kami tidak sempat makan pun dan kami telah diberi makan oleh lelaki dari pasukan lain.

Kodim-pizza

Anda boleh membaca cerita yang lebih terperinci di Halaman Fyodor Ovchinnikov (CEO kami). Sejak itu, kami telah banyak berubah, tetapi kini kami pasti tidak akan melupakan tarikh itu.

Tahun ini, kami memutuskan bahawa acara ini patut dikekalkan dalam ingatan anak cucu dan, dalam tradisi terbaik, kami menganjurkan hackathon dalaman pertama dalam sejarah Dodo, yang berlangsung selama 10 jam.

Bahagian yang paling membosankan tentang projek hackathon

Penafian: semua huraian ditulis oleh lelaki itu sendiri, jadi kepengarangan teks itu bukan milik saya.

Pembelajaran Oleg (pembelajaran mesin)

Dima Kochnev, Sasha Andronov (@alexandronov)

Mereka ingin membuat rangkaian saraf yang akan menentukan jenis piza dalam foto tanpa pengetahuan. Hasilnya, kami membuat satu yang sangat mudah dan mainan - ia mengiktiraf 10 piza, secara kasar kami mengetahui cara semuanya berfungsi, sejauh mungkin dalam sehari (~10 jam).

Kodim-pizza

Khususnya, kami menyedari bahawa industri telah mencapai tahap di mana pembangun biasa boleh mengambil perpustakaan siap pakai, membaca dokumentasi dan melatih rangkaian sarafnya tanpa pengetahuan mendalam tentang subjek itu. Dan ia akan berfungsi dengan cukup baik untuk menyelesaikan masalah sebenar.

Alat yang digunakan:

  • imageai β€” perpustakaan yang mudah dan ringkas untuk bekerja dengan pembelajaran mesin dan penglihatan komputer.
  • Kami mencuba dua model - ResNet50, Yolo.
  • Kod itu ditulis, sudah tentu, dalam Python.

Kami mempunyai 11000 gambar, tetapi hampir 3/4 daripadanya ternyata sampah, dan selebihnya mempunyai sudut yang berbeza dan tidak sesuai. Akibatnya, kami mengambil model siap pakai (yang hanya tahu cara mencari piza) dan dengan bantuannya kami mengasingkan sampah. Seterusnya, tajuk foto termasuk nama pizza - jadi kami menyusunnya ke dalam folder, tetapi ternyata nama itu tidak bertepatan dengan realiti dan kami terpaksa membersihkannya dengan tangan kami. Pada akhirnya, terdapat kira-kira 500-600 gambar yang tinggal, jelas bahawa ini adalah jumlah yang tidak penting, tetapi bagaimanapun, ini sudah cukup untuk memisahkan 10 piza dari satu sama lain.

Untuk melatih grid, kami menggunakan mesin maya termurah di Azure pada NVIDIA Tesla K80. Mereka melatihnya selama 100 zaman, tetapi jelas bahawa rangkaian itu terlebih tepu selepas 50 zaman, disebabkan fakta bahawa terdapat set data kecil.

Sebenarnya, keseluruhan masalah adalah kekurangan data yang baik.

Kodim-pizza

Kami mungkin telah mengelirukan sedikit terma, tetapi kami harus mengambil kira bahawa kami tidak mempunyai pengalaman langsung dalam mengendalikan semua perkara ini.

GUI untuk NOOBS (konsol untuk memesan pizza)

Misha Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Kami telah mengumpulkan prototaip aplikasi konsol untuk geeks, yang mana anda boleh memesan piza melalui terminal atau baris arahan, atau bahkan menyepadukannya ke dalam saluran paip penggunaan dan, setelah berjaya dikeluarkan, menghantar piza ke pejabat.

Kodim-pizza

Kerja ini dibahagikan kepada beberapa bahagian: kami mengetahui cara API kami untuk aplikasi mudah alih berfungsi, memasang CLI kami sendiri menggunakan oclif dan mengkonfigurasi penerbitan pakej yang kami kumpulkan. Tugas terakhir melibatkan beberapa minit yang tidak menyenangkan menjelang akhir hackathon. Semuanya berfungsi secara tempatan untuk kami, malah versi pakej lama yang diterbitkan berfungsi, tetapi yang baharu (yang menambah ciri dan emotikon yang lebih hebat) enggan berfungsi. Kami menghabiskan kira-kira 40 minit untuk mencari tahu apa yang salah, tetapi pada akhirnya semuanya secara ajaib berfungsi dengan sendirinya).

Program maksimum kami untuk hackathon ialah pesanan sebenar pizza ke pejabat melalui CLI kami. Kami menjalankan segala-galanya sedozen kali di bangku ujian, tetapi tangan saya masih menggigil apabila saya memasukkan arahan dalam pengeluaran.

Kodim-pizza

Akibatnya, kami akhirnya berjaya!

Kodim-pizza

CourierGo

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

Kami mengambil idea "Aplikasi untuk Kurier".

Latar belakang tentang penyediaan.Pada mulanya, saya tertanya-tanya apakah jenis ciri yang boleh ada dalam aplikasi? Senarai fungsi berikut muncul:

  • Aplikasi log masuk ke daftar tunai penghantaran menggunakan kod.
  • Aplikasi itu segera menunjukkan pesanan yang tersedia dan pesanan yang perlu diambil.
  • Kurier mencatat pesanan dan membawanya dalam perjalanan.
  • Dia ditunjukkan anggaran masa dan sama ada dia menepati masa atau tidak.
  • Menunjukkan kepada pelanggan bahawa kurier telah pergi.
  • Pelanggan mula ditunjukkan titik kurier pada peta dan anggaran masa.
  • Kurier boleh menulis kepada pelanggan dalam sembang dari aplikasi.
  • Pelanggan boleh menulis kepada kurier melalui sembang dari aplikasi.
  • Lima minit sebelum ketibaan, pelanggan menerima mesej bahawa kurier sudah dekat, bersedia.
  • Pihak kurier mencatat dalam permohonan bahawa dia telah tiba dan sedang menunggu.
  • Kurier membuat panggilan dari aplikasi dengan satu klik dan melaporkan bahawa (sedang meningkat, telah tiba, dsb.)
  • Pelanggan menerima tempahan dan memasukkan kod PIN dari aplikasi atau SMS untuk mengesahkan penghantaran.(sebagai tandatangan) Supaya kurier tidak dapat menyelesaikan penghantaran lebih awal jika dia lewat.
  • Pesanan ditandakan sebagai dihantar dalam sistem.

Ditambah beberapa senario alternatif:

  • Kurier boleh menandakan pesanan sebagai tidak dihantar dan pilih sebabnya.
  • Jika anda lewat, kurier boleh mengeluarkan sijil elektronik melalui SMS dengan satu butang. Atau sijil tiba secara automatik jika tarikh akhir penghantaran tidak dipenuhi.

Perasaan janji dan keperluan projek ini, sudah tentu, memberi tenaga.

Keesokan harinya kami pergi makan tengah hari dengan pasukan dan membincangkan rupa kefungsian minimum aplikasi itu.

Akibatnya, senarai berikut tentang perkara yang perlu dilakukan di hackathon telah dibentuk:

  • Log masuk ke daftar tunai penghantaran.
  • Paparkan kedudukan semasa.
  • Hantar data ke API luaran (koordinat, menerima pesanan, menghantar pesanan).
  • Terima data daripada API luaran (pesanan kurier semasa).
  • Hantar acara yang menunjukkan bahawa anda telah menerima pesanan untuk penghantaran/penghantaran.
  • Paparkan kedudukan semasa kurier pada peta di laman web.

Kerja utama, nampaknya, terletak pada penciptaan bahagian belakang, aplikasi itu sendiri (selepas perbincangan, kami memilih ReactNative untuk membangunkan aplikasi, atau lebih tepat rangka kerja untuknya - expo.io, yang membolehkan anda tidak menulis kod asli sama sekali). Dari segi bahagian belakang, pada mulanya ada harapan pada Vanya Zverev, kerana dia berpengalaman dalam bekerja dengan templat perkhidmatan dan k8s kami (kerja mana yang dia ambil). Andrey Sarafanov dan saya mengambil ReactNative untuk berputar.

Saya memutuskan untuk mencuba segera membuat repositori yang berfungsi untuk projek itu sendiri. Pada pukul 12 malam saya mendapati fakta bahawa geolokasi di latar belakang tidak berfungsi dengan baik dalam ReactNative, jika anda tidak menulis kod asli, saya agak kecewa. Kemudian saya melepaskan apabila saya menyedari bahawa saya sedang membaca dokumentasi bukan rangka kerja expo.io, tetapi ReactNative. Akibatnya, sepanjang petang saya sudah memahami cara mendapatkan kedudukan semasa dalam expo.io dan melukis skrin berasingan (untuk log masuk, paparan pesanan, dll.).

Kodim-pizza

Pada waktu pagi di hackathon, mereka memikat Gleb ke dalam projek mereka yang sangat menjanjikan. Mereka segera membuat rancangan tentang apa yang perlu dilakukan.

Kodim-pizza

Kami membuat kesilapan apabila, mengikut templat projek, kami cuba berkomunikasi bukan melalui HTTP, tetapi melalui GRPC, kerana tiada siapa yang tahu cara membina klien GRPC untuk JavaScript. Akhirnya, selepas menghabiskan kira-kira satu setengah jam untuk perkara ini, kami meninggalkan idea ini. Disebabkan ini, lelaki di bahagian belakang mula membuat semula pelayan siap dari GRPC ke WebApi. Selepas setengah jam, kami akhirnya dapat menyediakan komunikasi antara aplikasi dan bahagian belakang, lihat dan lihat. Tetapi pada masa yang sama, Gleb hampir menamatkan penggunaan ke k8 dan ditambah dengan penggunaan auto komit kepada induk. πŸ™‚

Kami memilih MySQL sebagai storan supaya tidak mengambil risiko sekurang-kurangnya dengan pangkalan data (kami mempunyai pemikiran tentang CosmosDb).

Kodim-pizza

Secara ringkasnya:

  • Dilaksanakan menyimpan koordinat semasa kurier dari aplikasi ke pangkalan data.
  • Kami memasang RabbitMQ dan melanggan mesej tentang kurier mengambil pesanan untuk segera memaparkan pesanan daripada kurier dalam aplikasi.
  • Kami mula menyimpan masa penghantaran pesanan ke dalam pangkalan data kami selepas kurier menekan butang dalam aplikasi. Kami tidak mempunyai masa untuk menambah menghantar acara kembali ke rebbit yang pesanan itu dihantar.
  • Saya membuat paparan peta pada halaman pesanan semasa di laman web dengan kedudukan semasa kurier. Tetapi fungsi ini masih belum selesai sedikit, kerana tidak mungkin untuk mengkonfigurasi CORS dalam persekitaran untuk menerima koordinat daripada perkhidmatan baharu kami.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Kami ingin melaksanakan pembekal OpenID Connect, kerana pada masa ini kami menggunakan protokol pengesahan reka bentuk kami sendiri, dan ini menimbulkan beberapa kesukaran: perpustakaan pelanggan tersuai, kerja yang menyusahkan di pihak rakan kongsi luaran, kemungkinan masalah keselamatan (lagipun , OAuth2.0 dan OpenID Connect dalam pelaksanaan rujukan boleh dianggap selamat, tetapi saya tidak pasti tentang penyelesaian kami).

Kodim-pizza

Kami membuat perkhidmatan berasingan yang mencontohi perkhidmatan untuk menyimpan data peribadi untuk mencipta model kecil Country-Agnostic bagi pembekal pengesahan yang akan pergi ke perkhidmatan berasingan untuk data peribadi (ini pada masa hadapan akan memungkinkan untuk mempunyai satu perkhidmatan dengan yang mana satu boleh log masuk dengan pendaftaran akaun di mana-mana negara, dan pada masa yang sama mematuhi GDPR dan undang-undang persekutuan yang lain). Kami melakukan bahagian ini, seperti yang dilakukan oleh pembekal, dan berjaya memautkannya antara satu sama lain. Seterusnya, adalah perlu untuk mencipta API yang akan dilindungi oleh token yang dikeluarkan oleh pembekal, menyokong introspeksi mereka melalui pembekal dan mengembalikan data yang dilindungi jika permintaan itu memenuhi dasar kebenaran (kami menyemak bahawa pengguna disahkan mengikut skema Pembawa , tokennya mengandungi skop tertentu + y Pengguna sendiri mempunyai kebenaran yang membolehkan panggilan dibuat). Bahagian ini juga telah disiapkan. Komponen terakhir ialah klien JavaScript, yang akan diberikan token, dengan bantuannya ia akan memanggil API yang dilindungi. Kami tidak sempat membuat bahagian ini. Iaitu, keseluruhan bahagian berfungsi telah sedia, tetapi bahagian bahagian hadapan tidak bersedia untuk menunjukkan kefungsian keseluruhan sistem.

E-E-E (mainan)

Dima Afonchenko, Sasha Konovalov

Kami membuat mainan mini pada yunka di mana tangan lincah membuang sosej ke atas pizza. Jika anda meletakkan sosej secara salah, mesej sedih "Ditolak" muncul pada skrin, dan jika semua sosej dipasang dengan betul, fakta rawak tentang piza muncul.

Kodim-pizza

Kami mahu membuat tahap kedua dengan membaling tomato, tetapi kami tidak mempunyai masa.

Kodim-pizza

Sambungan pendek: siapa yang menang?

Sebelum hackathon, kami berbincang dengan lelaki dan saya bertanya apakah hadiah yang mereka ingin terima jika mereka menang. Ternyata hadiah yang paling berharga ialah "jalan ke makanan."

Kodim-pizza

Oleh itu, harap kami akan mengumumkan permainan dengan tangan yang meletakkan lada pada pizza tidak lama lagi.

Sebagai pembaca yang penuh perhatian mungkin perasan, pasukan "E-E-E (mainan)" menang. Tahniah guys!

Hanya pengguna berdaftar boleh mengambil bahagian dalam tinjauan. Log masuk, Sama-sama.

Projek mana yang paling anda sukai?

  • Pembelajaran Oleg (pembelajaran mesin)

  • GUI untuk NOOBS

  • CourierGo

  • M87

  • E-E-E

5 pengguna mengundi. 3 pengguna berpantang.

Sumber: www.habr.com

Tambah komen