Tidak mungkin untuk sepenuhnya menguji dan men-debug aplikasi seluler tanpa perangkat uji. Seharusnya ada banyak perangkat seperti itu, karena kode yang sama pada model yang berbeda berperilaku berbeda. Tetapi bagaimana mengatur akuntansi perangkat? Bagaimana membuat pengembang dan penguji dengan cepat dan tanpa birokrasi mendapatkan smartphone tertentu dalam konfigurasi yang diperlukan?
Nama saya Alexey Lavrenyuk. Anda dapat mengenal saya sebagai salah satu penulis Yandex.Tank dan pembicara pada topik pengujian beban . Kemudian saya mengukur konsumsi daya ponsel. Sekarang saya melakukan Yandex. Jelajahi dalam tim kendaraan tak berawak (dan kadang-kadang cahaya bulan sebagai Sinterklas ). Dan antara ponsel dan Rover adalah Hypercube.
Beberapa tahun yang lalu, kepala pengembangan ponsel datang ke departemen pengujian beban kami dan mengeluh tentang situasi dengan perangkat uji. Ponsel berkeliaran dari tangan ke tangan, untuk memilih dan dengan cepat menemukan telepon adalah masalah. Kami sudah memiliki pengalaman dengan perangkat seluler: kami membuat ammeter digital untuk mengukur konsumsi energi mereka. Oleh karena itu, kami memutuskan untuk membantu kolega dan dengan cepat melakukan hal yang keren: sepertinya hanya bekerja selama tiga bulan. Saya menertawakan diri sendiri, naif, dari tahun 2020 dan memberi tahu apa yang sebenarnya menunggu kami.

Konsep layanan dan ide pertama
Kami adalah satu dari sedikit di Yandex yang merakit perangkat besi. Selain itu, kami fasih menggunakan ponsel. Bagi saya, ide layanan itu muncul di permukaan: Anda perlu menghubungkan ponsel ke hub dan melacak ketersediaan dan pergerakannya di kantor melalui USB. Desainnya pas di kabinet server.
Inilah yang saya bayangkan prosesnya:
- Kami menyimpan catatan ponsel melalui USB. Semua telepon di kabinet terhubung melalui USB. Telepon sedang diisi, dan kami melihat informasi tentang itu, termasuk Device ID - pengidentifikasi unik (pada kenyataannya, untuk beberapa perangkat Cina itu tidak selalu unik), di mana Anda dapat membedakan satu telepon dari yang lain. Ngomong-ngomong, dengan pengidentifikasi - yang dimiliki oleh semua perangkat USB - Anda dapat melacak apa saja: pasang drive flash USB biasa ke kunci mobil Anda, misalnya, dan simpan catatan kunci otomatis.
- Kami membaca pengguna di lencana. Kami mengidentifikasi semua orang yang mengambil telepon dari lemari menggunakan lencana (kartu pass yang dengannya Anda dapat mengenali karyawan Yandex). Setelah seorang karyawan membuka kabinet, diyakini bahwa ia membuat semua gerakan telepon di kabinet.
- Semua informasi pergerakan disimpan secara terpusat dalam layanan. Kami melihat di mana dan dengan siapa setiap ponsel berada. Kami dapat melacak statistik: model mana yang lebih populer, telepon mana yang hilang.
Mungkin ada banyak lemari seperti itu, tetapi informasi tentang semua perangkat seluler di dalamnya ada di satu tempat. Semua kubus (kabinet) digabungkan dan terhubung secara logis, dan bersama-sama mereka membentuk Hypercube besar (karenanya nama internal layanan).
Semua orang menyukai ide itu, kami mulai bekerja.
Hypercube. Mulai
Kami menerima helpdesk pembaca RFID dan komputer mini Intel NUC. Kami membeli arduino, kunci listrik, kabinet untuk peralatan jaringan (lebih kecil dari kabinet server, tetapi dengan "rel" yang sama untuk memperbaiki peralatan).

Tentu saja, kami tidak diberi TK dan daftar belanja. Kami tidak tahu persis model kabinet mana yang cocok, berapa banyak baut dan meter kawat yang dibutuhkan. Persyaratan untuk kabinet berubah saat bepergian sesuai dengan keinginan tim. Kami sepakat, misalnya, bahwa kami akan menyimpan 40 ponsel di satu kabinet, dan kami akan meletakkan kabinet di meja samping tempat tidur, karena itu kecil dan tidak nyaman untuk condong ke arah itu.

Rak untuk telepon
Kami sudah lama berpikir bagaimana membuat rak-rak itu nyaman. Yandex memiliki rak untuk menunjukkan ponsel atau menguji antarmuka. Kami berpikir untuk menggunakan kembali rak-rak itu, tetapi mereka tidak cocok dengan kami: telepon-telepon di sana memasang layar ke pengguna, seperti di jendela toko - kami tidak membutuhkannya. Kami ingin mengoptimalkan ruang di dalam lemari, jadi kami memutuskan untuk membuat rak sendiri.
Ada ide untuk meletakkan telepon di dalam, seperti buku. Untuk melakukan ini, kami mencari pembagi di toko alat tulis, mencoba menggunakan pemegang CD-ROM, rak toko - semuanya oleh. Secara eksperimental, sudut-sudut plastik dari pemisah cut-off dari saluran kabel direkatkan ke rak dengan perekat lelehan panas. "Tata letak buku" ternyata sangat sukses dan kami menyukainya.

Beberapa tempat dan banyak hub
Di bagian bawah kabinet ada sedikit ruang untuk empat hub 10-port dan Intel NUC - kami jauh dari upaya pertama untuk mendorong mereka ke sana. Pintu kabinet tidak dimaksudkan untuk mengunci kunci - kami menggunakan banyak lem panas, balok kayu dan gergaji besi. Biarkan saya mengingatkan Anda: proyek ini dilakukan oleh kelompok pengujian beban, tidak ada dari kita yang punya pengalaman dengan penggiling di titik kopi.

Prototipe layanan
Kami segera menangani ini: kami membuat halaman yang menunjukkan lokasi telepon, dan menempatkannya langsung di layanan pengujian beban kami. Hanya karena itu memungkinkan Anda untuk dengan cepat dan hampir tanpa kesulitan mencoba apa yang terjadi.
Prototipe kerja pertama
Kami mengumpulkan Hypercube pertama dalam tiga minggu. Dia terlihat seperti ini:

Pada awalnya, kami memutuskan untuk menguji prototipe di kantor Yandex kami di Moskow (pelanggan di Yekaterinburg). Dia melakukan run-in ke tim Yandex mobile. Browser - kami sudah mengenalnya dari proyek Yandex Volta (versi laporan yang lebih baru ada di sini ). Orang-orang ini berpengalaman dalam konsumsi daya.
Tes pertama
Rak lagi
Ternyata lem panas tidak menahan sudut plastik dengan baik di rak logam. Kami kembali ke ide dudukan telepon. Saya sudah lama berpikir tentang bagaimana tampilan rak yang ideal di lemari. Sekarang sepertinya bisa menggambar dalam 15 menit. Pada akhirnya, ternyata tidak seperti pada sketsa pertama, tetapi inilah yang saya gambar saat itu:

Kami mengambil rak yang dibeli untuk lemari server, dan di atas kami menempatkan pembagi giling yang terbuat dari plastik lembaran, yang kami buat sesuai pesanan. Desain ini bertahan sampai hari ini.

Hub yang tidak nyaman
Hub untuk kabinet pertama dengan saklar daya, tombol tanpa penguncian, dimatikan secara default. Karena itu, setelah setiap reboot, saya harus menyalakan keempat hub dengan tangan saya. Kami menghubungkan Yandex SpeechKit sehingga kubus diucapkan jika hub terbang keluar: "Saya tidak baik, silakan hubungi orang yang bertanggung jawab." Ketika seseorang masuk, suara itu memberitahu Anda untuk memeriksa hub. Dan asisten suara mulai memanggil karyawan dengan nama dan suara yang mengambil berapa banyak telepon.
Masalah kunci
Ada beberapa iterasi dengan kastil. Ketika saya sedang mencari kunci untuk prototipe di awal, saya menemukan satu-satunya pilihan yang cocok untuk saya - "Sheriff": kecil, kuat dan sangat cerdas dibuat (saya belum melihat analog) Itu menutup dengan sempurna, tetapi untuk membuka lemari, itu diperlukan untuk menekan pintu sedikit. Tidak semua pengguna memahami ini, jadi kami memutuskan untuk mengubah kunci.
Mereka mengambil "Sheriff" dengan pegas yang mendorong pintu. Kabinet terbuka dengan sempurna - tetapi mulai menutup dengan buruk dan tetap terbuka (dan menganggap dirinya tertutup). Ini karena sensor penutup dipasang secara terpisah dari kunci, pintu memiliki serangan balik dan sensor kadang-kadang bekerja sampai pintu ditutup. Menyiapkannya tidak realistis.
Sekali lagi kami mengubah kunci ke "Sheriff" berikutnya, yang bukan lagi desain yang cerdas, tetapi di sisi lain, sensor penutupan dibangun langsung ke dalamnya. Kunci bekerja pada prototipe, tetapi setelah dioperasikan di kabinet pertama, ia mulai mengambil. Saya harus menari dengan rebana: membongkar, melumasi, file dengan file. Dengan kesedihan menjadi dua, dia berakhir.
Setelah tes pertama, menjadi jelas: pengembang dan penguji menyukai kabinet, mereka secara aktif menggunakannya. Ini nyaman: Anda dapat memonitor perangkat dan mencari yang tepat di layanan web, daripada bertanya pada rekan Anda: "Siapa yang memiliki ponsel ini sekarang?". Kami mengidentifikasi masalah yang paling penting: hub USB yang tidak nyaman yang harus Anda hidupkan dengan tangan Anda, kabel USB panjang dengan kualitas buruk (konektornya putus, dan kabelnya kusut), kunci yang buruk dan pembagi rak yang tidak dapat diandalkan yang terjatuh setiap saat. Pekerjaan berlanjut.
Ekspansi hyperspace
Manajer dari departemen manajemen proyek - ia juga membantu kami mengatur outsourcing untuk rak - secara aktif terlibat dalam PR internal di Yandex: ia pergi ke tim yang berbeda dan berbicara tentang layanan kami yang luar biasa. Kami bertemu dengan perwakilan dari departemen lain dan secara tak terduga mulai menerima pesanan internal untuk beberapa lusin kabinet. Sebuah gambar suram muncul: memuat penguji selama berminggu-minggu dengan seluruh tim secara manual memasang kabinet dari apa yang ada di tangan.
Kami menyadari bahwa kami membutuhkan bantuan dalam kebaktian. Sebelum itu, perlu untuk mengoptimalkan biaya satu contoh kabinet dan desainnya untuk produksi skala kecil.
Trainee
Selama satu setengah bulan musim panas kami berhasil mendapatkan magang yang tahu cara menyolder, mengebor dan sedikit kode. Dengan itu, kami memasang kembali kabinet lama pada Raspberry Pi (untuk menyingkirkan NUC Intel yang mahal dan tidak perlu) dan mengumpulkan satu kabinet lagi untuk instalasi di meja bantuan di Moskow dan St. Petersburg (ada orang-orang pintar di sana yang akan membantu pengguna kami mengatasi prototipe dan memberikan umpan balik yang bermanfaat).
Alternatif anggaran
Untuk mengoptimalkan biaya, kami mengganti komponen yang paling tidak masuk akal dalam prototipe: komputer mini Intel NUC (25 ribu rubel) dan pembaca RFID (5 ribu). Mereka menemukan pembaca alternatif di Ali Express untuk 150 rubel, dan dari komputer mini mereka pindah ke Raspberry Pi untuk 3,5 ribu rubel.
Di platform baru, kami mengalami beberapa masalah. Pada awalnya ternyata relay untuk kunci tidak beralih, karena RPi memberikan 3,3 V, dan relay mekanik dirancang untuk 5 V. Saya harus beralih ke keadaan padat. Kemudian kami mengetahui bahwa tidak ada jam di papan tulis, dan Anda tidak akan dapat meluangkan waktu menggunakan NTP: Anda tidak dapat mengautentikasi di jaringan kantor tanpa waktu yang tepat (kami menemukan papan ekstensi khusus dengan jam untuk RPi).
Masalah yang paling mempesona adalah dengan iPhone. Segera setelah iPhone keenam dimasukkan ke dalam RPi, itu menjadi tidak tersedia melalui jaringan. Seorang manajer proyek yang lewat (dan di masa lalu admin yang keras) membantu kami mencari tahu. Ternyata kartu jaringan pada RPi diceraikan melalui USB, dan iPhone memicu satu layanan kereta untuk menyelesaikan bus USB. Masalah ini pertama kali muncul di kantor Minsk, mereka dapat dengan cepat mereproduksi dan memberikan umpan balik, yang banyak membantu kami. Mereka memecahkan masalah ketika mereka menghancurkan antarmuka grafis (jika saya ingat dengan benar), karena layanan terintegrasi ke dalamnya.
Lemari tumbuh
Ada perdebatan tentang ukuran kabinet. Seseorang berpikir bahwa perlu meletakkan telepon dua kali lebih banyak di lemari, seseorang - bahwa lemari besar tidak nyaman digunakan di kantor. Dan kemudian kami menemukan bahwa kami telah membeli semua lemari kecil dari toko-toko Moskow, dan pengiriman berikutnya hanya dalam tiga bulan. Perdebatan berakhir dengan sendirinya.
Mereka memutuskan untuk membuat semua kabinet berikut menjadi besar. Ke depan, saya akan mengatakan: itu ternyata keputusan yang tepat. Atas dasar kabinet besar, menjadi lebih mudah untuk menempatkan elektronik, 80 telepon tidak lagi ditempatkan di dalamnya. Di dalamnya, di antara rel ada server standar 19 inci. Di sebuah kabinet kecil, jarak antara rel tidak cukup.

Pengembangan Web dan UX
Kami menyodokkan tongkat kami ke salah satu kerangka kerja pengembangan web internal, menyadari bahwa itu bagus, dan menyeret pelat telepon dari Django ke React. Tetapi jelas bahwa tablet saja tidak cocok untuk siapa pun. Departemen geo-layanan memikirkan dan memberi kami tugas pada beberapa layar.
Saya harus menghubungkan tim pengembangan web. Kami ditugaskan seorang desainer produk yang sepenuhnya memikirkan interaksi pengguna dengan layanan. Dia membuat stiker yang nyaman di lemari, meletakkan lemari di peta kantor, mempelajari obrolan dukungan untuk lebih memahami apa yang diinginkan pengguna. Singkatnya, saya mengambil proyek di bawah sayap saya dalam hal pengalaman pengguna.
Pengembang web mengambil ujung depan dan dengan cepat mengimplementasikan tata letak desain. Kami mendapat sesuatu yang mirip dengan Yandex.Market dalam skala yang lebih kecil: Anda datang, memilih telepon, Anda pergi untuk mengambilnya di lemari. Mimpinya sederhana.

Di suatu tempat di sini kami menyadari bahwa proyek itu harus diluncurkan ke seluruh Yandex. Kami menyetujui pengeluaran untuk memperbaiki kesalahan dan secara serius meningkatkan kualitas layanan: ada anggaran umum untuk pembelian lemari, suku cadang, dan peralatan. Dengan bantuan Pasha Melnikov, kepala kelompok proyek RnD besi (pada waktu itu, dan sekarang ia bergerak di Yandex.Station), kami berhasil menyepakati perusahaan eksternal mengenai produksi kabinet seri dengan mempertimbangkan persyaratan kami.
Versi hub baru
Kami membeli hub versi lain, tanpa tombol daya. Sekarang tidak perlu naik ke dalam kabinet dan menyalakan hub setelah reboot. Kami merakit satu prototipe secara manual - ini bekerja dengan sempurna. Tetapi ketika kami mengirimnya ke Yekaterinburg, kami segera mulai menerima keluhan bahwa kabinet tidak melihat beberapa telepon. Memahami ini hanya di tempat. Ternyata hub baru memiliki topologi yang berbeda (bahkan untuk model hub yang sama dalam seri yang berbeda, topologi dapat bervariasi).
Hub 10-port lama dan baru di dalam terdiri dari tiga chip USB dengan empat port. Tetapi di hub lama dengan tombol power, dua chip terjebak dalam satu, dan di baru mereka dihubungkan oleh "karangan bunga". Jumlah portnya sama, tetapi kedalaman nesting berbeda. Ponsel lama tidak terdeteksi di port dengan kedalaman bersarang yang besar. Adalah baik bahwa mereka sudah tua dan tidak terlalu perlu. Kami memecahkan masalah sakit kepala dengan memenggal kepalanya: kami hanya mengambil model telepon baru untuk kabinet, yah, kami sedang menunggu implementasi hub kami sendiri. Benar, perangkat lunak harus memungkinkan untuk mengatur konfigurasi topologi USB yang berbeda untuk kabinet yang berbeda.
Hub sendiri
Bersama Pasha, kami mulai mengembangkan hub USB eksternal kami sendiri. Itu diperlukan untuk menyelesaikan masalah hub yang dibeli, dan juga untuk menyoroti perangkat yang pengguna datangi dan mempercepat pengisian daya ponsel modern: untuk ini kami mengambil catu daya yang kuat dan mempertahankan standar terbaru. Hub memiliki kemampuan untuk menghubungkan sensor suhu eksternal - sehingga kami dapat mengontrolnya di setiap rak. Ukurannya dipilih sehingga dua kartu hub yang dipasang dalam satu kasing tepat masuk ke rak server 19 inci. Hub mendapat profil rendah untuk menghemat ruang di antara rak - secara umum, mereka ternyata keren dan modern. Pasha akan menceritakan lebih detail tentang proyek ini di Habré.

Majelis
Perakitan komponen berdasarkan lemari yang dibeli juga digunakan untuk melakukan outsourcing. Menurut perhitungan kami, tim perakitan seharusnya mengatasi beberapa malam, tetapi karena banyaknya tenaga kerja manual, itu berlangsung selama beberapa minggu. Kabel yang terhubung dengan cara yang tidak standar sesuai dengan skema yang digambar dengan pena pada selebaran, penyolderan manual, kurangnya kursi yang sudah jadi untuk komponen dan komponen jadi sendiri ... Lemari itu selesai dalam arti kata: lubang dibor untuk kunci dan dikira dipotong oleh penggiling untuk komponen lain.
Lebih dekat dengan Produksi
Kami sudah bermimpi memberikan lemari untuk produksi. Kami memutuskan untuk mempercepat itu perlu menyederhanakan produksi dan meningkatkan pangsa outsourcing.
Papan tepi
Merancang papan periferal dan memperbarui komponen. Sekarang terhubung ke Raspberry Pi dengan satu kabel, dan semua komponen lainnya dengan konektor standar.
Kami menyiapkan jam untuk RPi di papan tulis: sebelumnya, kami menempelkan komponen siap pakai yang terpisah, dibeli di toko. Kami juga menempatkan konverter DC / DC (dulu ada unit catu daya terpisah) dan antarmuka RS-485: ini memungkinkan kami untuk menyingkirkan jaringan kabel. Sebelumnya, kami menghubungkannya secara manual dari titik ke titik dengan menyolder atau menempel ke salah satu pin RPi. Kami memeriksa diagram, melihat titik masuk untuk kawat, mencari lubang yang diinginkan - dan demikian pula dengan masing-masing kawat pada gilirannya. Itu sangat memakan waktu dan memancing kesalahan perakitan. Papan baru menggunakan jack telepon.

Ternyata kemudian: ketika kabel, saya tidak memperhitungkan bahwa Anda perlu menghubungkan chip RS-485 ke kaki RPi yang terdefinisi dengan baik. Saya harus memperbarui versi board. Ketika saya menggambar komponen decoupling daya RS-485, saya tidak memperhatikan fakta bahwa lembar data pada rangkaian mikro memberi tampilan dari bawah, bukan dari atas, dan ketika saya pertama kali menyalakannya, itu membuat "Bang!" Dengan aroma khas. Saya harus menyolder ulang chip di bagian belakang papan untuk seluruh seri papan pertama.

Versi kabinet baru
Lemari yang dibeli tidak lagi sesuai untuk kita. Mereka tampak aneh, karena mereka ditujukan untuk server, dan bukan kantor, dan mereka juga perlu dimodifikasi dengan tangan. Butuh banyak waktu, dan hasilnya adalah buatan tangan. Kami memutuskan untuk membuat lemari sendiri di pabrik di Arzamas.
Kami meminta pabrik untuk memasang kabinet yang dimodifikasi berdasarkan kabinet server standar mereka: ubah ukuran, pasang kunci, keluarkan konektor yang diperlukan, buat lubang untuk memperbaiki elemen. Mereka membuat sketsa rak, membuat kasing untuk unit elektronik (RPi dan teman-temannya), kasing untuk hub. Ketika datang ke kastil, insinyur desain dari pabrik sedikit mengubah opsi yang dibeli, dan mulai bekerja lebih baik. Laporan bug dengan permintaan tarik untuk menyelesaikan setrika dikirim ke penulis Sheriff.
Sangat mudah bahwa semua elektronik kontrol kabinet sekarang terkonsentrasi di satu rumah, yang dipasang pada empat baut. Itu dapat dirakit secara terpisah dari kabinet, mudah untuk menghapus dan mengganti keseluruhan ketika rusak.



Di lemari uji, kabel-kabel itu bingung, konektornya terbang keluar dari hub dan putus, dan kadang-kadang karyawan membawa kabel itu bersama mereka. Kami memutuskan untuk memasang kabel dengan kuat di rak, sambil meninggalkan kemampuan untuk mengubah kabel. Saya membuat sketsa - dan pabrik menjualnya kepada kami dengan besi.


Tentu saja, kami pergi ke Arzamas beberapa kali: untuk bernegosiasi, membuat produksi, untuk menerima hasilnya. Alhasil, lemari kami hampir sepenuhnya siap, tetap untuk dioperasikan. Tapi ini cerita lain.

By the way, jika Anda kebetulan mengunjungi Arzamas, pergi ke burger di tengah: itu keren.
Di seri selanjutnya
Sekarang kubus kami secara aktif digunakan di perusahaan. Kami bahkan menemukan nama untuk mereka: Stanley Cube, Maggi Cube, Arnie Cube (Arnold Schwarzenegger, enam potong), dll.
Dalam waktu dekat, kolega akan berbagi cerita dengan Anda tentang nasib layanan ini. Misalnya, tentang bagaimana Yandex.Hub dikembangkan. Atau tentang bagaimana beberapa port hub mulai "mati rasa." Pada port "numbed" Anda tidak dapat melihat pemutusan perangkat USB, bahkan dalam pesan kernel tidak ada. Tapi semuanya menjadi normal jika Anda melepas ponsel dari port dan menempelkannya kembali. Sementara itu, para lelaki menulis artikel untuk Anda - coba tebak sendiri mengapa ini bisa terjadi.