Cara membuat layanan perbandingan dokumen prototipe dalam 28 jam dan menangkan hackathon

Hai Setelah istirahat panjang, kami memutuskan untuk kembali ke Habr dan ingin berbagi pengalaman berpartisipasi dalam hackathon. Pada bulan September, Moskow menjadi tuan rumah Diversity.Hack , mitra di antaranya adalah Dostavista, Waves, dan kami, New Cloud Technologies. Partisipasi dalam hackathon yang diselenggarakan oleh Phystech.Genesis, sebuah proyek dari Inkubator Bisnis MIPT, adalah pengalaman sukses pertama dan pada saat yang sama untuk perusahaan kami. Tapi jangan maju dulu - mari kita lihat bagaimana semuanya berjalan dan hal-hal menarik apa yang berhasil dibuat oleh para peserta.



Bagaimana Keanekaragaman. Hack


208 orang dari 44 tim berkumpul untuk hackathon di rekan kerja GrowUp, yang merupakan rekor bagi penyelenggara. Tentang bagaimana tim dibentuk, detail dapat ditemukan dalam artikel oleh Phystech.Genesis. Peserta menyelesaikan salah satu dari tiga tugas yang diusulkan dari masing-masing perusahaan sedikit lebih dari sehari, memiliki kesempatan untuk menginap tepat di tempat dan dengan makanan dari panitia. Dana hadiah 300.000 rubel dibagi rata di antara trek. Selain menghasilkan ide dan pengkodean, para peserta dapat menghadiri secara intensif tentang cara untuk menang di hackathons .



Pada awal acara, semua perusahaan mitra menggambarkan kondisi tugas mereka - sebelum itu, hanya kata-kata umum dan serangkaian teknologi yang harus digunakan oleh para peserta yang diketahui. Tim-tim mendistribusikan waktu untuk pengembangan prototipe sesuai kebijakan mereka, dengan mempertimbangkan poin-poin utama : analisis pasar dari ide-ide yang ada, badai otak, identifikasi fitur-fitur utama dari prototipe, peran dalam tim dan pengkodean.

Di antara pesertanya adalah mahasiswa dan spesialis berpengalaman, orang-orang yang sangat menjanjikan bertemu. Akibatnya, kami dan perusahaan mitra lainnya berhasil menggambar ide-ide baru. Misalnya, Waves mengusulkan pengembangan aplikasi seluler menggunakan bahasa Ride dan Platform Waves. Untuk layanan pengiriman Dostavista, tim mengembangkan sistem untuk mengoptimalkan rute kurir.

Di bawah bimbingan rekan-rekan kami dari New Cloud Technologies, penting untuk menghasilkan alat yang nyaman (algoritma, UI) untuk menganalisis perubahan dalam dokumen ketika membandingkan dua atau lebih versi.

Kenapa tepatnya tugas ini?


Sejak 2013, perusahaan kami telah mengembangkan MyOffice , satu set aplikasi kantor yang berjalan di semua sistem operasi utama, termasuk seluler. Awalnya, kami memiliki 7-8 pilihan pekerjaan, dan untuk memilih satu untuk hackathon, kami bahkan mengadakan pemungutan suara pribadi di dalam perusahaan. Di antara opsi-opsi itu, misalnya, membandingkan dua atau lebih dokumen (pengembangan teknologi itu sendiri dan UX), perbandingan otomatis kualitas dokumen rendering (menggunakan contoh ekspor ke PDF dari dua editor berbeda), ada juga ide yang berkaitan dengan analisis font dalam dokumen. Kami juga ingin memberikan tugas untuk mengumpulkan informasi dari obrolan tentang tanggal rapat untuk penambahan otomatis ke kalender ponsel cerdas (menarik untuk, misalnya, menulis bot di Telegram) dan beberapa lainnya.

Sebagai hasilnya, kami memutuskan untuk membandingkan dua dokumen atau lebih. Secara global, idenya adalah bahwa dengan menggunakan office suite di komputer mereka, karyawan yang berbeda dapat membuat perubahan mereka sendiri ke file sumber yang sama. Anda perlu membuat teknologi yang memungkinkan Anda membandingkan beberapa versi dokumen yang sama, dan kemudian menerima salah satu pengeditan yang diusulkan. Hasil edit belum diperiksa untuk kontradiksi satu sama lain, setelah itu satu dokumen final akan diperoleh.



Tampaknya bagaimana tugas semacam itu bisa relevan sama sekali? Berbagai awan sekarang tersedia di mana seluruh sejarah perubahan ditampilkan - siapa yang mengedit apa, kapan. Namun, banyak perusahaan tidak mengizinkan dokumen disimpan di cloud untuk alasan keamanan. Untuk alasan ini atau lainnya, pengeditan file dapat dilakukan offline, tanpa menggunakan cloud, dan versi dokumen ini atau itu biasanya dikirim ke kolega melalui surat. Pengeditan dapat dilakukan oleh lebih dari satu orang, dan sebagai akibat dari versi dokumen menjadi sangat banyak sehingga timbul kebingungan.

Jadi kita dihadapkan dengan kebutuhan untuk menggunakan alat untuk secara bersamaan membandingkan lebih dari dua dokumen. Tapi nasib buruk! Tidak ada solusi untuk masalah ini di pasar, hanya ada layanan untuk membandingkan dua dokumen, dan pilihan yang ada tidak bersinar dengan beragam. Jadi, ada ABBYY Comparator, yang dapat membandingkan dokumen tidak hanya dalam format teks, tetapi juga PDF, pindaian dan foto. Kerugian menggunakan layanan ini mungkin adalah biayanya. Layanan lain adalah Bandingkan Teks! - dan yang serupa memungkinkan Anda untuk menyisipkan teks ke dalam dua jendela khusus. Dan ini sangat membatasi kemungkinan - bahkan file tidak dapat diunduh, tetapi hanya Ctrl + C dan Ctrl + V !

Perusahaan kami memutuskan untuk mencari obat untuk "rasa sakit" dari pengembang berbakat dari seluruh Rusia, menghilangkan pembatasan pada format dokumen. Kami mengusulkan menggunakan html yang akrab - struktur pohon dokumen dengan mudah diwakili di dalamnya. Semua peserta merespons tawaran ini. Kami tertarik untuk mendapatkan teknologi perbandingan itu sendiri, serta antarmuka yang nyaman dan interaktif.

Keputusan Tim Pemenang


Di Habré ada banyak artikel wawancara tentang bagaimana peserta membangun alur kerja selama hackathon, bagaimana mereka berhasil menang. Delapan tim memecahkan masalah kami, tiga di antaranya memenangkan hadiah: yang pertama membawa ZenDocs , yang kedua dibagikan oleh SerotoninMix dan SegFault . Kami memilih pemenang sesuai dengan kriteria berikut: user-friendly dari antarmuka pengguna (interaktivitas dan minimalismenya), kualitas berbagai kasus dalam antarmuka ini (bagaimana perbandingan tabel - perubahan struktural dan perubahan teks di dalam, diagram, gambar akan terlihat seperti), algoritma perbandingan itu sendiri (kompleksitas waktu, kemampuan untuk mengenali berbagai jenis suntingan). Prototipe yang berfungsi dengan baik dianggap sebagai nilai tambah besar :)

Solusi antarmuka untuk sebagian besar tim ternyata sangat mirip. Mungkin ini menunjukkan bahwa antarmuka ternyata ramah pengguna jika semua pengembang melakukan hal yang sama. Rincian kasus khusus dan kualitas prototipe berbeda - seseorang berhasil berbuat lebih banyak, seseorang kurang.



Namun demikian, setelah presentasi solusi, favorit didefinisikan dengan jelas - itu ternyata tim ZenDocs , yang menekankan bagian algoritmik. Mereka melakukan studi yang efektif dari pendekatan yang tersedia dan menemukan artikel ilmiah dengan algoritma untuk membandingkan pohon xml. Algoritma ini memiliki skala yang baik untuk dokumen N: jika Anda membandingkan dokumen berpasangan, seperti banyak algoritma lainnya, kompleksitasnya akan bertambah secara polinomi dalam jumlah dokumen, dan dengan pendekatan ini akan meningkat secara linear. Algoritme mengembalikan id elemen pohon yang telah berubah, dan jenis perubahannya adalah menyisipkan, menghapus, mengganti.

Lebih mudah untuk memberikan format respons seperti itu ke frontend - Anda tidak perlu memprosesnya lebih lanjut. Gambar, baris, dan kolom tabel adalah blok struktural dokumen yang biasa, sama seperti paragraf, sehingga algoritme ini memungkinkan Anda mendeteksi perubahan dalam gambar, struktur tabel atau kontennya, yaitu, mengatasi banyak kasus pengguna, dan ini merupakan kriteria evaluasi yang penting. Tim mengusulkan optimasi lebih lanjut dari algoritma menggunakan pohon Merkle. Optimalisasi seperti itu akan memungkinkan memeriksa hanya subtree yang hash telah berubah, yang mempercepat algoritme. Prototipe tersedia di: https://zendocs.ru





Memilih tempat kedua dan ketiga lebih sulit, karena tiga keputusan yang layak diklaim untuk mereka. Pada akhirnya, kami memilih SerotoninMix dan SegFault. Beberapa dari mereka lebih baik untuk interaktivitas, yang lain untuk navigasi, dan ini adalah situasi yang normal: dalam dua hari sulit untuk mengembangkan solusi yang ideal. Beberapa tim hampir sepenuhnya mengimplementasikan algoritma pada model sederhana, di antaranya adalah ZenDocs dan SerotoninMix.

Kami memilih yang terakhir, termasuk untuk pendekatan kreatif mereka - menghargai humor mereka (mereka menyebut proyek mereka "NeMoy office", dan ada banyak momen menyenangkan dalam presentasi mereka) dan terkesan oleh fakta bahwa mereka berhasil membuat prototipe lengkap.




Orang-orang dari SegFault telah menemukan pendekatan yang sangat orisinal. Saat mengembangkan prototipe, mereka menggunakan Vue.js ; server ditulis dalam Python menggunakan Flask dan Docker , Word2Vec dan algoritma Crochemore digunakan . Setelah meninjau sedikit algoritma, para peserta membandingkan dokumen utama dengan yang lainnya, menyoroti bagian-bagian yang umum dan berbeda. Di lingkungan yang dibuat, ada blok pengeditan tempat fragmen dari berbagai dokumen ditampilkan. Anda dapat memilih salah satunya dan mengeditnya jika perlu. Di panel kontrol, Anda dapat menerima hasil edit atau melihat yang diterima sebelumnya. Tim juga membandingkan gambar, membandingkannya sebagai encoding base64 dan mengonversi gambar ke format base64 , dan menyusun metode membandingkan tabel dan menampilkan perubahan di dalamnya.

Ada beberapa desainer di hackathon, dan tugas kami untuk persentase besar terdiri dari membuat prototip antarmuka dan membuat layout, yang melibatkan penggunaan alat-alat seperti Sketch dan Figma. Tim Talestorm tenggelam dalam hati kami, salah satu peserta yang belajar cara bekerja dari awal di sepanjang malam.

Posting interaksi hackathon


Pada akhir September, pertemuan para pemenang, perwakilan dari New Cloud Technologies, termasuk CEO Dmitry Komissarov , dan Phystech.Genesis berlangsung. Pada pertemuan tersebut, mereka membahas tugas-tugas perusahaan, di mana para pemenang hackathon dapat ambil bagian. Kami berharap dapat bekerja dengan tim!

Source: https://habr.com/ru/post/id475006/


All Articles