1 poin oleh GN⁺ 2024-05-02 | 1 komentar | Bagikan ke WhatsApp

ffs: alat untuk memasang data semi-terstruktur seperti JSON sebagai sistem file UNIX

  • ffs adalah singkatan dari File Filesystem, yang memungkinkan data semi-terstruktur dipasang sebagai sistem file sehingga format modern berbasis pohon seperti JSON dan YAML dapat ditangani dengan alat shell yang sudah familiar
  • Karena mengedit JSON dengan pemrosesan string seperti sed bukan cara yang baik, lebih baik menggunakan ffs
  • Saat ini ffs mendukung JSON, YAML, dan TOML, dan akan mendukung lebih banyak format di masa depan

Contoh penggunaan ffs

  • Perintah ffs [file] memasang file.blah ke mount point bernama file, lalu versi akhir yang sudah diubah akan dicetak ke stdout
  • Dengan ffs -m MOUNT file Anda dapat menentukan mount point secara eksplisit
  • Dengan ffs -o OUTPUT Anda dapat menentukan file output
  • Dengan ffs -i file Anda dapat mengedit file secara langsung, dan saat volume dilepas, hasilnya akan ditulis kembali ke file
  • Saat mengedit, Anda bisa melihat nilai kunci nose menjadi angka, bukan string, dan direktori pockets berubah menjadi objek

Cara memasang ffs

  • Di Linux, FUSE dibutuhkan; di macOS, dibutuhkan macFUSE
  • Anda dapat mengunduh berkas eksekusi tunggal
  • Dapat juga membangun dari sumber

Pelajari lebih lanjut tentang ffs

  • Lihat makalah "Files-as-Filesystems for POSIX Shell Data Processing" di PLOS 2021
  • Menyediakan video demo dan video presentasi

Perbandingan dengan alat lain

  • jq, gron, dan sejenisnya adalah alat yang bagus untuk menangani JSON di CLI
  • Kelebihan ffs antara lain: dukungan format yang beragam, dapat diedit dengan alat shell yang familiar, dan tidak perlu mempelajari bahasa baru
  • Namun, Windows tidak didukung, FUSE tidak dapat digunakan, ketika hanya diperlukan pencarian, dan untuk file yang sangat besar, ffs mungkin tidak cocok

Opini GN⁺

  • Data semi-terstruktur seperti JSON, YAML, TOML, yang banyak digunakan dalam pengembangan web modern, terlihat berguna. Terutama untuk automasi dengan skrip shell, ini tampak sangat kuat
  • Namun, karena berbasis FUSE, mungkin ada isu performa, dan ketidakadaan dukungan Windows agak menyedihkan. Tidak yakin apakah dapat digunakan di WSL
  • Keuntungannya adalah sebagai open source, Anda dapat berkontribusi agar mendukung format yang lebih banyak. Dari sisi pengguna, sepertinya ini akan membantu meningkatkan kenyamanan dan produktivitas
  • Jika Anda adalah engineer yang sudah terbiasa dengan alat pemrosesan teks klasik seperti sed atau awk, Anda bisa langsung menerapkannya tanpa biaya belajar
  • Sepertinya berguna untuk menyimpan respons API secara lokal saat debugging, atau saat sering perlu mengedit file konfigurasi semi-terstruktur

1 komentar

 
GN⁺ 2024-05-02
Komentar Hacker News
  • Saya membungkus libfuse buatan sendiri dengan Nim lalu mem-porting contoh filesystem "hello", membuat versi yang mengalirkan data lewat pipa dan menyediakan mount point. Setelah selesai, hasilnya ditulis ke stdout. Hal ini memungkinkan untuk dipakai secara inline dalam rantai pipe, tetapi outputnya harus diambil dengan benar.

  • Saat ini saya sedang mengeksplorasi apa lagi yang bisa dibuat sebagai filesystem. Saya membuat status bar untuk window manager Nimdow yang menghasilkan bilah dengan blok saat menulis konten ke file tertentu. Isi status bar sangat mudah diganti, sehingga sangat praktis.

  • Saya juga membuat pemutar musik yang menggunakan libvlc. Ia membaca media dengan tag ID3 dan membuat folder seperti "per-artis" dan "per-album". Setiap file dinamai "<nomor trek> - <judul lagu>" dan menyertakan path lengkap dari file aslinya. Untuk memutar lagu, cat salah satu file tersebut ke control/current dan menulis kata play ke control/command. Masih ada fitur playlist dan perintah lain, tetapi idenya begini. Tujuannya adalah membuat pemutar musik yang sangat bisa di-skrip.

  • OS mirip Unix bisa melakukan mount image disk untuk menjelajahi isinya. Namun format file yang berguna untuk menelusuri isi file lebih banyak lagi. Arsip terkompresi adalah salah satunya. Beberapa file manager mendukung ini, tetapi tingkat aplikasi bukan lapisan paling ideal untuk menambahkan fitur ini. Ini bisa diimplementasikan sebagai driver berbasis tipe file.

  • Saya sedang mencari filesystem FUSE yang berjalan di memori saat di-mount (seperti tmpfs) lalu saat di-unmount diserialkan menjadi satu file di disk. Driver FUSE yang mount file arsip paling mirip, tetapi tidak bisa mendapatkan hal-hal seperti tautan simbolik.

  • Bisa juga mount commit Git sebagai filesystem. (lihat tautan)

  • Ada juga Parts-of-file File System. (lihat tautan Usenix)

  • Mengingatkan saya pada TabFS milik Omar Rizwan. (lihat tautan)

  • Pernah mencoba hal ini pada 2003. Ternyata cepat dan mudah membuat locking yang sangat terinci. Saya menggunakannya sebagai database per-pengguna untuk bahasa template web pada alat pembuatan website besar.

  • Pertanyaan tentang apa yang terjadi jika kunci JSON berisi slash.

  • Ini membuka kemungkinan untuk commit file sebagai struktur direktori. Penasaran bagaimana ini memengaruhi merge dan konflik.

  • Menarik, dan saya rasa ini harus dicoba secepat mungkin. Sepertinya ini akan sangat berguna untuk mencari dan menelusuri isi file JSON.