Mesin Wiki Keluarga Bonsai: Hasil 2019

Pada awal tahun lalu, saya berbicara tentang proyek Bonsai , sebuah mesin untuk membuat wiki keluarga dan album foto open source. Sejak itu, proyek ini terus berkembang. Sepanjang tahun, beberapa fitur telah dibuat, berkat mesin yang sekarang jauh lebih mudah untuk dicoba sendiri dan lebih menyenangkan untuk digunakan di masa depan.



Di bawah cut - details, rencana untuk masa depan dan sedikit hadiah.

Gambar buruh pelabuhan


Menginstal Bonsai versi pertama adalah proses yang sangat melelahkan karena banyaknya dependensi: memerlukan .NET Core, PostgreSQL, runtime Elasticsearch (yang berarti Java Runtime dan plug-in untuk mendukung morfologi Rusia), perakitan juga memerlukan .NET Core SDK, dan NodeJS untuk membangun depan ... Bahkan dengan latar belakang kompleksitas global pengembangan web modern, ini adalah tugas hanya untuk yang berkemauan keras dan banyak pengguna yang awalnya tertarik melemparkannya di tengah jalan.

Hentikan itu!

Sekarang Bonsai meningkat dalam tiga aksi dasar per menit:

  1. Unduh docker-compose.yml .
  2. Masukkan @@YOUR_EMAIL@@ dan @@YOUR_IP@@ diperlukan.
  3. Jalankan docker-compose up -d

Otorisasi Kata Sandi


Di versi pertama, hanya satu jenis otorisasi yang digunakan - melalui jejaring sosial. Ada banyak alasan untuk ini:

  • Login dengan satu klik
  • Di luar kotak diberikan 2FA, pemulihan kata sandi, dan pemeriksaan keamanan lainnya
  • Hanya pertahankan kode bonsai
  • Anda bisa mendapatkan beberapa data dari profil selama pendaftaran

Sayangnya, ini menyebabkan sejumlah masalah:

  • Langkah ekstra rumit selama instalasi awal
  • Anda tidak dapat memberikan akses ke orang yang tidak memiliki jejaring sosial (misalnya, kerabat lanjut usia)
  • Untuk beberapa data (jenis kelamin, usia) jejaring sosial memerlukan verifikasi manual aplikasi Anda

Oleh karena itu, jenis otorisasi kedua ditambahkan - dengan login dan kata sandi, yang diaktifkan secara default.

Sekarang Anda dapat melewati langkah membuat aplikasi otorisasi di jejaring sosial. Setelah mulai, Bonsai akan menawarkan untuk mendaftarkan akun administrator, di mana Anda harus memasukkan kata sandi yang diinginkan - dan itu akan berhasil.


Anda dapat membuat akun baru dengan kata sandi di panel admin:


Ada beberapa hal yang perlu diingat ketika menggunakan otentikasi kata sandi:

  • Pengguna tidak dapat mengembalikan kata sandi sendiri - hanya administrator yang dapat melakukan ini. Jika hanya ada satu administrator, ia diotorisasi dengan kata sandi dan lupa kata sandi ini - Anda harus menggunakan skrip untuk mengatur ulang, yang harus dijalankan langsung dalam database.
  • Setelah 10 upaya gagal berturut-turut, akun juga diblokir. Untuk membuka kunci, Anda harus mengubah kata sandi. Selain tindakan Anda sendiri, bot perayap jahat dapat secara otomatis memblokir kata sandi Anda.
  • Satu akun hanya dapat memiliki satu jenis otorisasi per waktu. Pertama, Anda tidak dapat membuat akun dengan kata sandi, dan kemudian menambahkan login tambahan ke sana melalui jejaring sosial atau Anda tidak dapat menggantinya dengan cara biasa sama sekali - hanya melalui manipulasi manual dengan database.

Render pohon keluarga sisi server


Secara otomatis membangun pohon keluarga adalah salah satu fitur terpenting Bonsai, tetapi juga yang paling sulit.


Seperti yang saya katakan di artikel sebelumnya, secara otomatis mengatur blok secara optimal adalah tugas yang sangat sulit. Orang-orang menulis makalah ilmiah tentang hal itu, menginvestasikan ribuan jam manusia dan menjual komponen rak untuk uang gila. Untungnya, saya berhasil menemukan perpustakaan ELK.js gratis, yang memberikan hasil yang cukup baik.

Masalah dengan ELK.js adalah ia bekerja untuk pustaka klien untuk waktu yang sangat lama. Anda dapat menyesuaikan hasilnya melalui properti thoroughness - semakin besar nilainya, semakin baik jadwal, tetapi semakin lama. Untuk membuat pohon yang dapat dimengerti untuk 50 orang, saya harus menunggu sekitar 30-40 detik untuk setiap halaman yang dibuka dengan pohon!

Sekarang rendering tidak terjadi pada klien setiap kali dibuka, tetapi pada server setiap kali itu berubah. Pertama kali setelah memperbarui konten harus menunggu seperti sebelumnya, tetapi kemudian halaman terbuka secara instan.

Dari sudut pandang teknis, transfer perhitungan dari klien ke server menyebabkan beberapa kesulitan. Bagaimana menjalankan kode JS di dalam .NET Core? Pikiran pertama saya adalah menggunakan perpustakaan Javascript Engine Switcher yang ditulis oleh Taritsyn . Sayangnya, itu tidak sesuai dengan tugas saya: tidak ada mesin yang bisa mencerna ELK.js. Alih-alih, mekanisme NodeServices digunakan, di mana semuanya langsung bekerja seperti jam.

Ya, sekarang Bonsai membutuhkan dua runtime, tapi terima kasih kepada buruh pelabuhan, itu tidak begitu menakutkan. Ya, NodeServices akan pensiun di salah satu versi ASP.NET Core berikutnya, tetapi komunitas akan mendukungnya. Dan ke mana harus pergi? Pengembangan web modern seluruhnya terdiri dari pertukaran semacam itu. Yang utama adalah ini memberikan hasil.

Unduh Dokumen


Sekarang, selain foto dan video, Bonsai mendukung pengunduhan file PDF. Hal ini sesuai untuk dokumen - khususnya, akte kelahiran, pernikahan atau kematian.

Awalnya dimaksudkan untuk membuat pratinjau kecil untuk dokumen. Sayangnya, ide ini menabrak tebing realitas yang keras: tidak ada perpustakaan yang ada yang cocok dengan satu kriteria atau yang lain. Telah diperiksa:

  • iText7 - ketidakcocokan lisensi dengan MIT
  • PDF.js - sejumlah besar dependensi, wadahnya berlipat ganda
  • Pembungkus GhostScript juga masalah lisensi, ditambah hampir semua ditinggalkan dan tidak mendukung .NET Core

Jika saya melewatkan sesuatu dan grail suci konversi PDF ke gambar masih ada - silakan tulis di komentar!

Berita utama


Pada halaman utama di bawah kalender, halaman terakhir yang dimodifikasi dan file media yang diunduh sekarang ditampilkan:



Penafian Wajib


Proyek ini bersifat nirlaba dan disediakan "apa adanya". Ada bug di dalamnya. Suatu ketika, melalui pengawasan dangkal di master, kode tergelincir yang hampir membersihkan database. Oleh karena itu, jika Anda menghargai data yang Anda masukkan di Bonsai, maka secara berkala, dan terutama dengan setiap pembaruan:

Buat cadangan.
MEMBUAT CADANGAN!
D E L A T E B E K A P S! ! !

Apa selanjutnya


Masih ada banyak tugas menarik yang ingin saya lakukan di tahun berikutnya:

  • Pemeringkatan halaman : satu metrik otomatis yang memungkinkan Anda untuk mengurutkan halaman berdasarkan kelengkapan data mereka. Ini akan membuatnya mudah untuk menjawab pertanyaan "halaman mana yang dapat ditampilkan sebagai standar" dan, sebaliknya, "halaman mana yang masih perlu dikerjakan."
  • Mendesain ulang halaman utama panel admin : perubahan akan ditampilkan dalam bentuk yang mirip dengan "umpan berita" di jejaring sosial.
  • Tugas teknis : transisi ke .NET Core 3, berbagai refactoring

Ada juga tugas yang ingin saya lakukan, tetapi saya tidak punya cukup waktu dan kompetensi untuk itu. Saya berharap bantuan dari komunitas - jika tidak gratis, maka setidaknya untuk hadiah simbolis. Jika Anda yakin dengan kemampuan Anda dan ingin berpartisipasi - silakan menulis kepada saya di telegram dan berdiskusi.

  • Komponen kalender : standar digunakan, tetapi sedikit bengkok dan tidak mendukung nilai yang tidak akurat ( 2019.??.?? ): Anda perlu menulis yang lengkap.
  • Peningkatan Pencarian : Pencarian di ElasticSearch terkadang memberikan hasil yang aneh . Kemungkinan besar, saya hanya tidak tahu cara menggunakan elastis - Anda perlu menulis ulang konfigurasi infernal dengan pengetahuan tentang masalah ini.
  • Pengenalan wajah : alangkah baiknya jika secara otomatis mengenali wajah pada foto yang diunggah dan memotretnya ke halaman. Saya belum menemukan solusi pada .NET Core yang terbuka dan memberikan hasil yang waras.

Repositori proyek tersedia di:

https://github.com/impworks/bonsai .

Jika Anda menggunakan Bonsai - silakan beri tahu kami tentang hal itu di komentar. Saya akan senang menerima kritik dan saran.

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


All Articles