Kategori bukan direktori, atau sistem file Semantic untuk Linux

Klasifikasi data itu sendiri merupakan topik yang menarik untuk penelitian. Saya suka mengumpulkan informasi yang tampaknya perlu, dan saya selalu mencoba membuat hierarki logis direktori untuk file saya, dan sekali dalam mimpi saya melihat program yang indah dan nyaman untuk menetapkan tag ke file, dan memutuskan bahwa tidak mungkin untuk tetap seperti itu.


Masalah sistem file hirarkis


Pengguna sering mengalami masalah dalam memilih tempat menyimpan file baru berikutnya dan masalah menemukan file mereka sendiri (kadang-kadang nama file sama sekali tidak dimaksudkan untuk penyimpanan manusia).


Jalan keluar dari situasi ini dapat berupa sistem file semantik, yang biasanya merupakan tambahan untuk sistem file tradisional. Direktori di dalamnya digantikan oleh atribut semantik, juga disebut tag, kategori, metadata. Saya akan menggunakan istilah "kategori" lebih sering, sebagai dalam konteks sistem file, kata "tag" kadang-kadang aneh, terutama ketika "subtags" dan "tag alias" muncul.


Menetapkan kategori ke file sebagian besar menghilangkan masalah penyimpanan dan pencarian file: jika Anda mengingat (atau menebak) setidaknya satu kategori yang ditugaskan pada file, file tersebut tidak akan pernah hilang.


Sebelumnya di Habrรฉ topik ini diangkat lebih dari satu kali ( satu , dua , tiga , empat , dll), di sini saya menggambarkan keputusan saya.


Jalur implementasi


Segera setelah mimpi yang disebutkan di atas, saya menjelaskan di notebook antarmuka perintah yang menyediakan pekerjaan yang diperlukan dengan kategori. Lalu saya memutuskan bahwa dalam satu atau dua minggu Anda dapat menulis prototipe menggunakan Python atau Bash, dan kemudian Anda harus bekerja membuat shell grafis pada Qt atau GTK. Kenyataannya, seperti biasa, ternyata jauh lebih parah, dan perkembangan terus berlanjut.


Ide awalnya adalah membuat program dengan antarmuka baris perintah yang mudah dan ringkas yang akan membuat, menghapus kategori, menetapkan kategori ke file, dan menghapus kategori dari file. Saya menelepon program vitis .


Upaya pertama untuk membuat vitis berakhir tanpa hasil, karena banyak waktu mulai bekerja dan kuliah. Upaya kedua sudah sesuatu: dengan tesis master kami berhasil menyelesaikan proyek yang direncanakan dan bahkan membuat prototipe dari shell GTK. Tetapi versi itu sangat tidak dapat diandalkan dan tidak nyaman sehingga saya harus banyak memikirkan kembali.


Saya sudah benar-benar menggunakan versi ketiga untuk waktu yang sangat lama, menerjemahkan beberapa ribu file saya ke dalam kategori. Ini, antara lain, sangat difasilitasi oleh pelengkapan otomatis bash yang diterapkan. Tetapi beberapa masalah, seperti kurangnya kategori otomatis dan kemampuan untuk menyimpan file dengan nama yang sama, masih tetap ada, dan program sudah bengkok di bawah kompleksitasnya sendiri. Jadi saya sampai pada kebutuhan untuk menyelesaikan masalah pengembangan perangkat lunak yang kompleks: menulis persyaratan terperinci, mengembangkan sistem pengujian fungsional, mempelajari instruksi pengemasan dan banyak lagi. Sekarang saya telah sampai pada suatu rencana, sehingga kreasi sederhana ini dapat disajikan kepada komunitas bebas. Manajemen file spesifik tersebut, seperti manajemen melalui konsep kategori, menyentuh pertanyaan dan masalah yang tidak terduga, dan dalam menyelesaikannya vitis menghasilkan lima proyek lagi di sekitarnya, beberapa di antaranya akan disebutkan dalam artikel. Sampai sekarang, vitis belum memperoleh shell grafis, tetapi kenyamanan menggunakan kategori file dari baris perintah sudah mencakup bagi saya setiap plus dari manajer file grafis biasa.


Contoh Penggunaan


Mari kita mulai dengan yang sederhana - buat kategori:


vitis create  

Mari kita tambahkan beberapa komposisi sebagai contoh:


 vitis assign  -f "The Ink Spots - I Don't Want To Set The World On Fire.mp3" 

Anda dapat melihat konten dari kategori Musik dengan perintah show:


 vitis show  

Anda dapat memainkannya menggunakan sub perintah "terbuka"


 vitis open  

Karena kami hanya memiliki satu file dalam kategori "Musik", maka hanya itu yang akan dimulai. Untuk tujuan membuka file dengan program mereka, secara default saya membuat utilitas terpisah vts-fs-open (alat standar seperti xdg-open atau mimeopen tidak cocok untuk saya karena sejumlah alasan; tetapi, jika ada, dalam pengaturan Anda dapat menentukan utilitas lain untuk membuka file universal) . Utilitas ini berfungsi baik pada distribusi yang berbeda dengan lingkungan kerja yang berbeda, jadi saya sarankan untuk menginstalnya bersama dengan vitis.


Anda juga dapat secara langsung menentukan program untuk membuka file:


 vitis open  --app qmmp 


Mari kita membuat lebih banyak kategori dan menambahkan file menggunakan "assign". Jika file ditugaskan ke kategori yang belum ada, permintaan dikeluarkan untuk pembuatannya. Anda dapat menghindari permintaan yang tidak perlu dengan menggunakan flag - ya.


 vitis assign  R -f "  R.pdf" "  R:    .pdf" --yes 

Sekarang kita ingin menambahkan kategori "Matematika" ke file "Paket statistik R: teori probabilitas dan statistik .pdf". Kita tahu bahwa file ini sudah memiliki kategori "R" dan oleh karena itu kita dapat menggunakan jalur kategoris dari sistem Vitis:


 vitis assign  -v "R/  R:    .pdf" 

Untungnya, bash penyelesaian otomatis akan membuat ini mudah dilakukan.


Lihatlah apa yang terjadi menggunakan flag --categories untuk melihat daftar kategori untuk setiap file:


 vitis show R --categories 


Perhatikan bahwa file juga diberikan kategori otomatis berdasarkan format, tipe (menggabungkan format) dan ekstensi file. Kategori-kategori ini secara opsional dinonaktifkan. Nantinya saya pasti akan melakukan lokalisasi nama mereka.


Kami akan menambahkan sesuatu yang lain ke "Matematika" untuk perubahan:


 vitis assign  -f "  - 1984.pdf" ___1927.djvu 

Dan sekarang kesenangan dimulai. Alih-alih kategori, Anda dapat menulis ekspresi dengan operasi penyatuan, persimpangan dan pengurangan, yaitu, gunakan operasi pada set. Misalnya, persimpangan "Matematika" dengan "R" akan menghasilkan satu file.


 vitis show R i:  

Kurangi dari referensi "Matematika" ke bahasa "R":


 vitis show  \\ R # vitis show  c: R 

Kami dapat menggabungkan musik dan bahasa R dengan mulus:


 vitis show  u: R 

Bendera -n memungkinkan Anda untuk "menarik" file yang diinginkan dari hasil kueri dengan angka dan / atau rentang, misalnya, -n 3-7 , atau lebih rumit: -n 1,5,8-10,13 . Seringkali berguna dengan sub-perintah terbuka, yang memungkinkan Anda untuk membuka file yang diperlukan dari daftar.



Meskipun kami menjauh dari menggunakan hierarki direktori yang biasa, sering kali berguna untuk memiliki kategori bersarang. Buat subkategori "Statistik" untuk kategori "Matematika" dan tambahkan kategori ini ke file yang sesuai:


 vitis create / vitis assign / -v "R/  R.pdf" vitis show  --categories 


Kita dapat melihat bahwa file ini sekarang memiliki kategori "Matematika / Statistik" bukan "Matematika" (tautan tambahan dilacak).


Mengakses path lengkap dapat merepotkan, buat alias "global":


 vitis assign / -a  vitis show  


Bukan hanya file biasa


Tautan internet


Untuk menyatukan penyimpanan informasi apa pun, akan berguna setidaknya untuk mengategorikan tautan ke sumber daya Internet. Dan itu mungkin:


 vitis assign   -i https://habr.com/ru/company/sfe_ru/blog/437304/ --yes 

Di tempat khusus, file dengan header halaman HTML dan dengan ekstensi .desktop akan dibuat. Ini adalah format jalan pintas tradisional di GNU / Linux. Cara pintas semacam itu mendapatkan kategori Bookmark Jaringan otomatis.


Secara alami, pintasan dibuat untuk menggunakannya:


 vitis open  

Eksekusi perintah mengarah ke pembukaan tautan yang baru saja disimpan di browser. Pintasan yang dikategorikan ke sumber Internet dapat menggantikan bookmark browser.


File fragmen


Ini juga berguna untuk memiliki kategori untuk setiap fragmen file. Tawaran yang bagus, ya? Tetapi implementasi saat ini sejauh ini hanya mempengaruhi file teks biasa, file audio dan video. Katakanlah Anda perlu mencatat bagian tertentu dari konser atau momen lucu dalam film, maka saat menggunakan assign Anda dapat menggunakan flag --fragname, --start, --finish. Simpan screensaver dari Duck Tales:


 vitis assign -c  -f Duck_Tales/s01s01.avi --finish 00:00:59 --fragname "Duck Tales intro" vitis open  

Sebenarnya, tidak ada kliping file terjadi, sebagai gantinya, file-pointer ke sebuah fragmen dibuat, yang menggambarkan jenis file, path ke file, awal dan akhir fragmen. Penciptaan dan pembukaan pointer ke fragmen didelegasikan ke utilitas khusus yang dibuat oleh saya untuk tujuan ini - ini adalah mediafragmenter dan fragplayer. Yang pertama menciptakan, yang kedua terbuka. Dalam hal rekaman audio dan video, peluncuran file media dari posisi tertentu ke posisi tertentu terjadi menggunakan pemutar VLC, sehingga juga harus ada dalam sistem. Pada awalnya saya ingin melakukan ini atas dasar mplayer, tetapi untuk beberapa alasan itu sangat bengkok di sana dengan posisi pada saat yang tepat.
Dalam contoh kami, file "Duck Tales intro.fragpointer" dibuat (ditempatkan di tempat khusus), dan kemudian sebuah fragmen dimainkan dari awal file (karena --mulai tidak ditentukan saat penciptaan) hingga tanda dalam 59 detik, setelah itu VLC menutup.


Contoh lain - kami memutuskan untuk mengkategorikan pertunjukan terpisah di konser beberapa artis terkenal:


 vitis assign  "  " -f \ c\ -\ \ \ -\ \ \ .mp4 --fragname "  " --start 00:32:18 --finish 00:36:51 vitis open "  " 

Ketika Anda membuka file akan dimasukkan dalam posisi yang diinginkan dan setelah empat setengah menit akan menutup.


Cara kerjanya + fitur tambahan


Penyimpanan Kategori


Pada awal memikirkan organisasi sistem file semantik, saya menemukan tiga cara: dengan menyimpan tautan simbolis, melalui database, melalui deskripsi dalam XML. Metode pertama menang karena di satu sisi, mudah diimplementasikan, dan di sisi lain, pengguna memiliki kesempatan untuk melihat kategori langsung dari sistem file (dan ini nyaman dan penting). Pada awal menggunakan vitis , direktori "Vitis" dan file konfigurasi ".config / vitis / vitis.conf" dibuat di direktori home pengguna. ~ / Vitis membuat direktori yang sesuai dengan kategori, dan dalam kategori ini direktori membuat tautan simbolis ke file asli. Alias โ€‹โ€‹Kategori juga hanya tautan ke mereka. Tentu saja, keberadaan direktori "Vitis" di direktori home mungkin tidak cocok untuk seseorang. Kami dapat beralih ke tempat lain:


 vitis service set path /mnt/MyFavoriteDisk/Vitis/ 

Pada titik tertentu, menjadi jelas bahwa file yang tersebar di tempat yang berbeda tidak bermakna untuk dikategorikan, karena lokasinya dapat berubah. Karena itu, sebagai permulaan, saya membuat direktori untuk diri saya sendiri, di mana saya dengan bodoh membuang semuanya dan memberikan kategori untuknya. Kemudian dia memutuskan bahwa akan menyenangkan untuk memformalkan momen ini di tingkat perangkat lunak. Jadi konsep "ruang file" muncul. Pada awal menggunakan vitis , tidak ada salahnya untuk segera mengatur tempat seperti itu (semua file yang kita perlukan akan disimpan di sana) dan mengaktifkan penyimpanan otomatis:


 vitis service add filespace /mnt/MyFavoriteDisk/Filespace/ vitis service set autosave yes 

Tanpa penyimpanan otomatis, menggunakan subcommand "assign" akan memerlukan tanda --save jika Anda ingin menyimpan file yang ditambahkan ke ruang file.


Selain itu, Anda dapat menambahkan beberapa ruang file dan mengubah prioritasnya, ini dapat berguna ketika ada banyak file dan mereka disimpan di media yang berbeda. Di sini saya tidak akan mempertimbangkan kemungkinan ini, rinciannya dapat ditemukan dalam bantuan untuk program ini.


Migrasi sistem file semantik


Dengan satu atau lain cara, direktori Vitis dan ruang file terkadang secara teoritis dapat berpindah dari satu tempat ke tempat lain. Untuk membuatnya berfungsi, saya membuat utilitas tautan-editor terpisah yang dapat mengedit tautan secara massal, mengganti bagian-bagian jalan dengan yang lain:


 cp -r /mnt/MyFavoriteDisk/Vitis/ ~/Vitis link-editor -d ~/Vitis/ -f /mnt/MyFavoriteDisk/Vitis/ -r ~/Vitis/ -R cp -r /mnt/MyFavoriteDisk/Filespace/ ~/MyFiles link-editor -d ~/Vitis/ -f /mnt/FlashDrive-256/Filespace/ -r ~/MyFiles -R 

Dalam kasus pertama, setelah kami pindah dari / mnt / MyFavoriteDisk / Vitis / ke direktori home, tautan simbolik yang terkait dengan alias diedit. Dalam kasus kedua, setelah mengubah lokasi ruang file, semua tautan di Vitis berubah menjadi yang baru sesuai dengan permintaan untuk mengganti bagian dari jalurnya.


Kategori Otomatis


Jika Anda menjalankan vitis service get autocategorization , Anda dapat melihat bahwa pengaturan default kategori otomatis adalah dengan format (Format dan Jenis) dan ekstensi file (Ekstensi).


Ini berguna ketika, misalnya, Anda perlu menemukan sesuatu di antara PDF atau melihat apa yang telah Anda simpan dari MOBI dan FB2, Anda cukup menjalankan permintaan


 vitis show Format/MOBI u: Format/FB2 

Kebetulan alat-alat standar GNU / Linux seperti file atau mimetype tidak cocok untuk saya karena mereka tidak selalu menentukan format dengan benar, saya harus melakukan implementasi sendiri berdasarkan tanda tangan dan ekstensi file. Secara umum, topik untuk menentukan format file adalah topik yang menarik untuk penelitian dan layak mendapatkan artikel terpisah. Untuk saat ini, saya dapat mengatakan bahwa, mungkin, tidak untuk semua format di dunia, saya memberikan pengakuan yang benar, tetapi secara umum itu berfungsi cukup baik sekarang. Benar, format EPUB sekarang didefinisikan sebagai ZIP (secara umum, itu dibenarkan, tetapi dalam praktiknya ini tidak boleh dianggap sebagai perilaku normal). Sampai sekarang, pertimbangkan fitur ini eksperimental, laporkan bug. Dalam situasi yang aneh, Anda selalu dapat menggunakan kategori dengan ekstensi file, misalnya, Extension / epub.


Jika kategori otomatis menurut format disertakan, kategori otomatis juga disertakan, menggabungkan beberapa format berdasarkan jenis: "Arsip", "Gambar", "Video", "Audio" dan "Dokumen". Nama yang dilokalkan juga akan dibuat untuk subkategori ini.


Apa yang tidak dikatakan


vitis ternyata menjadi alat yang sangat beragam, dan sulit untuk menutup semuanya sekaligus. Sebutkan secara singkat apa lagi yang dapat Anda lakukan:


  • Kategori dapat dihapus dan dihapus dari file;
  • hasil kueri untuk ekspresi dapat disalin ke direktori yang ditentukan;
  • file dapat dijalankan sebagai program;
  • show show memiliki banyak opsi, misalnya menyortir berdasarkan nama / tanggal perubahan atau akses / ukuran / ekstensi, memperlihatkan properti file dan jalur ke dokumen asli, menyalakan tampilan file tersembunyi, dll.;
  • Saat Anda menyimpan tautan ke sumber-sumber Internet, Anda juga dapat menyimpan salinan halaman HTML lokal.

Semua detail dapat ditemukan di bantuan pengguna.


Prospek


Seringkali, skeptis mengatakan bahwa "tidak seorang pun akan menempatkan tag ini sendiri." Dengan menggunakan contoh saya, saya dapat membuktikan sebaliknya: Saya telah mengategorikan lebih dari enam ribu file, membuat lebih dari seribu kategori dan alias, dan itu sangat berharga. Ketika Anda vitis open daftar urusan Anda dengan satu tim vitis open atau ketika Anda vitis open LaTeX buku Stolyarov tentang sistem tata letak LaTeX dengan satu perintah vitis open LaTeX , secara moral sulit untuk menggunakan sistem file "kuno".


Atas dasar ini, sejumlah gagasan muncul. Misalnya, Anda dapat membuat radio otomatis yang menyertakan musik tema sesuai dengan cuaca saat ini, hari libur, hari dalam seminggu, waktu hari atau tahun. Masih dekat dengan topik adalah pemutar musik yang tahu tentang kategori dan dapat memutar musik dengan ekspresi dengan operasi pada kategori seperti pada set. Berguna untuk membuat daemon yang akan melacak direktori Unduhan dan menawarkan untuk mengkategorikan file baru. Yah, tentu saja, Anda harus membuat manajer file semantik grafis normal. Suatu kali saya bahkan membuat layanan web untuk perusahaan untuk berbagi file, tetapi itu bukan prioritas dan menjadi tidak relevan, meskipun mencapai tingkat kinerja yang tinggi. (Karena perubahan besar dalam vitis itu sendiri, itu sudah tidak dapat digunakan.)


ini demonstrasi kecil


Kesimpulan


Vitis bukanlah upaya pertama untuk secara radikal mengubah gaya bekerja dengan data, tetapi saya menganggap penting untuk mengimplementasikan ide-ide saya dan meletakkan implementasinya dalam domain publik di bawah lisensi GNU GPL. Untuk kenyamanan, paket deb untuk x86-64 telah dibuat, ia harus bekerja pada semua distribusi Debian modern. Pada ARM, ada kesulitan kecil (sementara semua program lain yang terkait dengan vitis berfungsi dengan baik), tetapi di masa depan, paket kerja akan dibangun untuk platform ini (armhf) juga. Sejauh ini saya telah berhenti membuat paket RPM karena masalah pada Fedora 30 dan sulitnya menyemprotkan ke banyak distribusi RPM, tetapi nantinya setidaknya beberapa dari mereka akan membuat paket. Sementara itu, Anda dapat menggunakan make && make install atau checkinstall .


Terima kasih atas perhatian Anda! Saya harap artikel ini dan proyek ini dapat bermanfaat.


Tautan ke repositori proyek

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


All Articles