Kodim-pizza

Halo, Habr. Kami secara spontan mengadakan hackathon internal pertama kami. Saya memutuskan untuk berbagi dengan Anda rasa sakit dan kesimpulan saya tentang persiapannya dalam 2 minggu, serta proyek yang akan saya lakukan.

Kodim-pizza

Bagian yang membosankan bagi mereka yang tertarik dengan pemasaran

Saya akan mulai dengan sebuah cerita kecil.

Awal bulan April. Hackathon Komunitas MskDotNet pertama diadakan di kantor kami. Pertempuran Tatooine sedang berlangsung di galaksi kita kali ini. Sabtu. 20 tim. Pizza. Semuanya sangat tulus (bukti). R2-D2 tiup mengapung di sekitar aula. Tim menulis algoritma yang paling tepat untuk melewati perlombaan paling berbahaya di peta. Kami memindahkan peluncuran balapan pertama. Kue dan kopi adalah penyelamat. Saya dan pihak penyelenggara memperkirakan banyak orang akan pulang setelah makan siang pada hari Sabtu. Tapi tidak. 12 jam coding tertinggal. Akhir. Ada yang jatuh, ada yang tidak dimulai. Tapi semua orang senang. Tim kami menang. Kami bahagia dua kali lipat.

Saya berbagi kegembiraan saya di Slack dan muncul ide di benak saya: β€œKita perlu melakukan hackathon kita sendiri.” Saya menulis ke stasiun layanan kami Sasha. Kesunyian.

Pagi. Saya minum kopi di kantor. Saya melihat Sasha mendekat dari belakang. β€œLisa, ini bagus! Kami memiliki tanggal penting pada 21 April. Ayo lakukan!" Apa!? Sangat cepat? A? Apa? Saya harus terbang ke Syktyvkar untuk magang pada pertengahan April. Dan persetan dengan itu! Ayo.

2 minggu lagi. Saya tidak pernah menjadi satu-satunya penyelenggara hackathon. Biarlah itu bersifat internal. Saya membaca artikel tentang topik ini. Keras. Dibutuhkan beberapa bulan. Dibutuhkan beberapa orang. Anda perlu memikirkan merchandise, hadiah, ketentuan, jadwal, minat, memahami tujuan, anggaran. Atau mungkin bahkan mencari tahu arti hidup. Saya pasti tidak akan datang tepat waktu. Dan saat Anda membaca dan bersiap, seminggu telah berlalu. Saatnya melupakan artikel dan mulai melakukan sesuatu.

Lihat daftar periksa kami untuk mengadakan hackathon internal dalam 1 minggu

  • Rencana: Anda duduk dengan tenang dan menulis daftar apa yang perlu dilakukan untuk hackathon. 30 menit.
  • Tugas: Peserta mengusulkan dan memilih proyek yang ingin dibuat di Google Sheets. Tugas latar belakang, 2 jam.
  • Jadwal: di lutut Anda, Anda menulis rincian waktu singkat, dengan memperhitungkan 3 istirahat dan final. 20 menit.
  • Tim: mempublikasikan pesan tentang hackathon dengan jadwal dari stasiun layanan di saluran TI di Slack/mail/etc dan membuat saluran terpisah untuk hackathon. Di dalamnya, setiap orang dibagi menjadi beberapa tim, dan mereka yang ragu-ragu melakukan ini dalam 5 menit pertama hackathon. Tugas latar belakang, 2 jam.
  • Roti: Anda membuat merchandise dengan dua pengembang, memberikannya kepada desainer untuk dirender, dan menerimanya siap. Tugas latar belakang, 3 hari.
  • retason: Anda datang ke kantor, mengoordinasikan semua orang di awal, menjalankan bisnis Anda, membaca Reddit, yang penting mengumumkan setiap jeda tentang pizza segar, memotret matahari terbenam, mengumumkan final, memilih bersama, dan memilih pemenang. Hari 1.
  • Di bawah tanda bintang: Tentu saja, Anda selalu berpikir bahwa segala sesuatunya berjalan baik. Tentu saja, tidak semua orang akan melihat pesan Anda dan lebih baik berbicara langsung dengan beberapa orang. Tentu saja, jika seseorang membantu Anda, semuanya akan menjadi 2 kali lebih mudah (Alena yang luar biasa membantu saya).

Bagian yang tidak terlalu membosankan tentang tanggal hackathon

Mengapa 21 April? Hari ini penting bagi kami. Tepat setahun yang lalu, pada tanggal 21 April, kami mendapat banyak beban selama akhir pekan pertama setelah dimulainya Kampanye Periklanan Federal. Keesokan harinya, Minggu, tim kami mulai bekerja dari jam 8 pagi. Kemudian kami membuat papan Sundayhackathon di Trello dan satu minggu kerja shift dimulai, 12 jam sehari. Situasinya sangat kritis sehingga kami bahkan tidak punya waktu untuk makan dan kami diberi makan oleh orang-orang dari tim lain.

Kodim-pizza

Cerita lebih detailnya bisa Anda baca di Halaman Fyodor Ovchinnikov (CEO kami). Sejak itu, kami telah banyak berubah, tapi sekarang kami pasti tidak akan melupakan tanggalnya.

Tahun ini, kami memutuskan bahwa acara ini layak untuk diabadikan untuk mengenang anak cucu dan, dalam tradisi terbaik, kami menyelenggarakan hackathon internal pertama dalam sejarah Dodo, yang berlangsung selama 10 jam.

Bagian paling membosankan tentang proyek hackathon

Penafian: semua deskripsi ditulis oleh mereka sendiri, jadi penulis teksnya bukan milik saya.

Oleg Pembelajaran (pembelajaran mesin)

Dima Kochnev, Sasha Andronov (@alexandronov)

Mereka ingin membuat jaringan saraf yang dapat menentukan jenis pizza apa yang ada di foto tanpa sepengetahuan apa pun. Hasilnya, kami membuat yang sangat sederhana dan mainan - ia mengenali 10 pizza, kami secara kasar mengetahui cara kerja semuanya, sejauh mungkin dalam sehari (~10 jam).

Kodim-pizza

Secara khusus, kami menyadari bahwa industri ini telah mencapai tingkat di mana pengembang biasa dapat menggunakan perpustakaan yang sudah jadi, membaca dokumentasi, dan melatih jaringan sarafnya tanpa pengetahuan mendalam tentang subjeknya. Dan itu akan bekerja cukup baik untuk menyelesaikan masalah nyata.

Alat yang digunakan:

  • gambarai β€” perpustakaan yang nyaman dan sederhana untuk bekerja dengan pembelajaran mesin dan visi komputer.
  • Kami mencoba dua model - ResNet50, Yolo.
  • Tentu saja kodenya ditulis dengan Python.

Kami memiliki 11000 foto, tetapi hampir 3/4 di antaranya ternyata sampah, dan sisanya memiliki sudut pandang yang berbeda dan tidak sesuai. Hasilnya, kami mengambil model yang sudah jadi (yang hanya tahu cara menemukan pizza) dan menggunakannya untuk memisahkan sampah. Selanjutnya pada judul foto dicantumkan nama pizzanya - jadi kami sortir ke dalam folder, namun ternyata namanya tidak sesuai dengan kenyataan dan harus kami bersihkan secara manual. Pada akhirnya, tersisa sekitar 500-600 foto, yang jelas jumlahnya tidak seberapa, namun tetap saja, ini cukup untuk memisahkan 10 pizza satu sama lain.

Untuk melatih jaringan, kami menggunakan mesin virtual termurah di Azure pada NVIDIA Tesla K80. Mereka melatihnya selama 100 epoch, tetapi jelas bahwa jaringan menjadi terlalu jenuh setelah 50 epoch, karena faktanya terdapat kumpulan data yang kecil.

Sebenarnya, permasalahannya terletak pada kurangnya data yang baik.

Kodim-pizza

Kami mungkin sedikit bingung dengan istilah-istilahnya, tetapi kami harus ingat bahwa kami tidak memiliki pengalaman sama sekali dalam menangani semua masalah ini.

GUI untuk NOOBS (konsol untuk memesan pizza)

Misha Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Kami telah menyusun prototipe aplikasi konsol untuk para geek, berkat itu Anda dapat memesan pizza melalui terminal atau baris perintah, atau bahkan mengintegrasikannya ke dalam jalur penerapan dan, setelah rilis berhasil, mengantarkan pizza ke kantor.

Kodim-pizza

Pekerjaan ini dibagi menjadi beberapa bagian: kami mengetahui cara kerja API untuk aplikasi seluler, merakit CLI kami sendiri menggunakan ocif dan mengonfigurasi publikasi paket yang kami kumpulkan. Tugas terakhir melibatkan beberapa menit yang tidak menyenangkan menjelang akhir hackathon. Semuanya berfungsi secara lokal untuk kami, dan bahkan versi lama yang diterbitkan dari paket tersebut berfungsi, tetapi versi baru (yang menambahkan lebih banyak fitur dan emotikon keren) menolak untuk berfungsi. Kami menghabiskan sekitar 40 menit untuk mencoba mencari tahu apa yang salah, tetapi pada akhirnya semuanya berjalan dengan sendirinya secara ajaib).

Program maksimum kami untuk hackathon adalah pemesanan pizza nyata ke kantor melalui CLI kami. Kami menjalankan semuanya belasan kali di bangku pengujian, namun tangan saya masih gemetar saat saya memasukkan perintah dalam produksi.

Kodim-pizza

Hasilnya, kami akhirnya berhasil!

Kodim-pizza

KurirGo

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

Kami mengambil ide β€œAplikasi untuk Kurir”.

Latar belakang tentang persiapan.Awalnya saya bertanya-tanya, fitur apa saja yang bisa ada di aplikasi tersebut? Daftar fungsi berikut muncul:

  • Aplikasi login ke kasir pengiriman menggunakan kode.
  • Aplikasi segera menampilkan pesanan yang tersedia dan pesanan yang perlu diambil.
  • Kurir mencatat pesanan dan membawanya dalam perjalanan.
  • Dia diperlihatkan perkiraan waktu dan apakah dia tepat waktu atau tidak.
  • Menunjukkan kepada klien bahwa kurir telah pergi.
  • Klien mulai diperlihatkan titik kurir di peta dan perkiraan waktu.
  • Kurir dapat menulis kepada klien dalam obrolan dari aplikasi.
  • Klien dapat menulis kepada kurir melalui chat dari aplikasi.
  • Lima menit sebelum kedatangan, klien menerima pesan bahwa kurir sudah dekat, bersiaplah.
  • Kurir mencatat dalam aplikasi bahwa dia telah tiba dan sedang menunggu.
  • Kurir menelepon dari aplikasi dengan satu klik dan melaporkan bahwa (meningkat, telah tiba, dll.)
  • Klien menerima pesanan dan memasukkan kode PIN dari aplikasi atau SMS untuk konfirmasi pengiriman (sebagai tanda tangan) Sehingga kurir tidak dapat menyelesaikan pengiriman terlebih dahulu jika terlambat.
  • Pesanan ditandai sebagai terkirim dalam sistem.

Ditambah beberapa skenario alternatif:

  • Kurir dapat menandai pesanan sebagai tidak terkirim dan memilih alasannya.
  • Jika terlambat, kurir dapat menerbitkan sertifikat elektronik melalui SMS dengan satu tombol. Atau sertifikat tiba secara otomatis jika batas waktu pengiriman tidak terpenuhi.

Perasaan akan janji dan perlunya proyek ini, tentu saja, memberi semangat.

Keesokan harinya kami pergi makan siang bersama tim dan mendiskusikan seperti apa fungsionalitas minimum aplikasi tersebut.

Hasilnya, daftar hal-hal yang harus dilakukan di hackathon berikut ini terbentuk:

  • Login ke kasir pengiriman.
  • Menampilkan posisi saat ini.
  • Kirim data ke API eksternal (koordinat, terima pesanan, kirimkan pesanan).
  • Menerima data dari API eksternal (pesanan kurir saat ini).
  • Kirim acara yang menunjukkan bahwa Anda telah menerima pesanan untuk pengiriman/pengantaran.
  • Tampilkan posisi kurir saat ini pada peta di website.

Pekerjaan utama, tampaknya, terletak pada pembuatan backend, aplikasi itu sendiri (setelah berdiskusi, kami memilih ReactNative untuk mengembangkan aplikasi, atau lebih tepatnya kerangka untuk itu - pameran.io, yang memungkinkan Anda untuk tidak menulis kode asli sama sekali). Dalam hal backend, awalnya ada harapan pada Vanya Zverev, karena dia berpengalaman bekerja dengan template layanan kami dan k8s (pekerjaan apa yang dia ambil). Andrey Sarafanov dan saya mencoba ReactNative.

Saya memutuskan untuk mencoba segera membuat repositori yang berfungsi untuk proyek itu sendiri. Pada jam 12 malam saya menemukan fakta bahwa geolokasi di latar belakang tidak berfungsi dengan baik di ReactNative, jika Anda tidak menulis kode asli, saya sedikit frustrasi. Lalu saya melepaskannya ketika saya menyadari bahwa saya sedang membaca dokumentasi bukan kerangka expo.io, tetapi ReactNative. Hasilnya, sepanjang malam saya sudah memahami cara mendapatkan posisi saat ini di expo.io dan menggambar layar terpisah (untuk login, tampilan pesanan, dll.).

Kodim-pizza

Di pagi hari saat hackathon, mereka memikat Gleb ke dalam proyek mereka yang sangat menjanjikan. Mereka dengan cepat membuat rencana tentang apa yang perlu dilakukan.

Kodim-pizza

Kami melakukan kesalahan ketika, sesuai dengan template proyek, kami mencoba berkomunikasi bukan melalui HTTP, tetapi melalui GRPC, karena tidak ada yang tahu cara membuat klien GRPC untuk JavaScript. Pada akhirnya, setelah menghabiskan sekitar satu setengah jam untuk hal ini, kami meninggalkan ide ini. Karena itu, orang-orang di back-end mulai membuat ulang server yang sudah selesai dari GRPC ke WebApi. Setelah setengah jam, kami akhirnya dapat mengatur komunikasi antara aplikasi dan backend, lihatlah. Namun pada saat yang sama, Gleb hampir menyelesaikan penerapan ke k8s dan ditambah penerapan otomatis komitmen ke master. πŸ™‚

Kami memilih MySQL sebagai penyimpanan agar tidak mengambil risiko setidaknya dengan database (kami punya pemikiran tentang CosmosDb).

Kodim-pizza

Singkatnya:

  • Diimplementasikan menyimpan koordinat kurir saat ini dari aplikasi ke database.
  • Kami menginstal RabbitMQ dan berlangganan pesan tentang kurir yang mengambil pesanan untuk segera menampilkan pesanan dari kurir di aplikasi.
  • Kami mulai menyimpan waktu pengiriman pesanan ke dalam database kami setelah kurir menekan tombol di aplikasi. Kami tidak sempat menambahkan acara pengiriman kembali ke rebbit pesanan telah terkirim.
  • Saya membuat tampilan peta pada halaman pemesanan saat ini di website dengan posisi kurir saat ini. Namun fungsi ini masih sedikit belum selesai, karena CORS tidak dapat dikonfigurasi di lingkungan untuk menerima koordinat dari layanan baru kami.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Kami ingin mengimplementasikan penyedia OpenID Connect, karena saat ini kami menggunakan protokol otentikasi yang kami desain sendiri, dan ini menimbulkan sejumlah kesulitan: pustaka klien khusus, pekerjaan yang tidak nyaman di pihak mitra eksternal, kemungkinan masalah keamanan (bagaimanapun juga , OAuth2.0 dan OpenID Connect dalam implementasi referensi dapat dianggap aman, tapi saya tidak yakin dengan solusi kami).

Kodim-pizza

Kami membuat layanan terpisah yang meniru layanan untuk menyimpan data pribadi untuk membuat model kecil Country-Agnostic dari penyedia otentikasi yang akan menuju ke layanan terpisah untuk data pribadi (ini di masa depan akan memungkinkan untuk memiliki satu layanan dengan yang mana seseorang dapat masuk dengan pendaftaran akun di negara mana pun, dan pada saat yang sama mematuhi GDPR dan undang-undang federal lainnya). Kami melakukan bagian ini, seperti yang dilakukan penyedia, dan berhasil menghubungkannya satu sama lain. Selanjutnya, penting untuk membuat API yang akan dilindungi oleh token yang dikeluarkan oleh penyedia, mendukung introspeksi mereka melalui penyedia dan mengembalikan data yang dilindungi jika permintaan memenuhi kebijakan otorisasi (kami memeriksa apakah pengguna diautentikasi sesuai dengan skema Pembawa , tokennya berisi cakupan tertentu + y Pengguna sendiri memiliki izin yang memungkinkan panggilan dilakukan). Bagian ini juga telah selesai. Komponen terakhir adalah klien JavaScript, yang akan diberi token, yang dengannya ia akan memanggil API yang dilindungi. Kami tidak punya waktu untuk melakukan bagian ini. Artinya, seluruh bagian fungsional sudah siap, tetapi bagian front-end belum siap untuk mendemonstrasikan fungsionalitas keseluruhan sistem.

E-E-E (mainan)

Dima Afonchenko, Sasha Konovalov

Kami membuat mainan mini di yunka di mana tangan lincah melemparkan sosis ke atas pizza. Jika Anda salah memasukkan sosis, pesan sedih β€œDitolak” akan muncul di layar, dan jika semua sosis dimasukkan dengan benar, fakta acak tentang pizza akan muncul.

Kodim-pizza

Kami ingin membuat level kedua dengan melempar tomat, tapi kami tidak punya waktu.

Kodim-pizza

Kelanjutan singkat: siapa yang menang?

Sebelum hackathon, kami berbicara dengan teman-teman dan saya bertanya hadiah apa yang ingin mereka terima jika menang. Ternyata hadiah yang paling berharga adalah β€œjalan menuju makanan”.

Kodim-pizza

Oleh karena itu, harap kami segera mengumumkan permainan tangan yang menaruh pepperon di atas pizza.

Seperti yang mungkin diketahui oleh pembaca yang penuh perhatian, tim β€œE-E-E (mainan)” menang. Selamat teman-teman!

Hanya pengguna terdaftar yang dapat berpartisipasi dalam survei. Masuk, silakan.

Proyek mana yang paling Anda sukai?

  • Oleg Pembelajaran (pembelajaran mesin)

  • GUI untuk NOOBS

  • KurirGo

  • M87

  • E-E-E

5 pengguna memilih. 3 pengguna abstain.

Sumber: www.habr.com

Tambah komentar