- File foto ingin diurutkan secara alfabetis, tetapi hasil pengurutan sistem operasi dan pengelola file berbeda-beda
- Di Linux
ls, file terurut normal, tetapi sebagian besar file manager GUI seperti Windows, Google Drive, dan KDE Dolphin menerapkan “natural sort” yang menafsirkan nama file berisi angka secara numerik
- Akibatnya, hasilnya bisa berbeda dari pengurutan string tradisional, misalnya
file-10.txt bisa muncul sebelum file-9.txt
- Penyebab sebenarnya adalah dua ponsel memakai aturan penamaan file yang berbeda: yang satu menempelkan milidetik langsung setelah detik, sementara yang lain memisahkannya dengan underscore, sehingga kriteria pengurutannya berubah
- Pada akhirnya, satu-satunya solusi adalah menyamakan aturan nama file atau mengubah pengaturan tersembunyi di masing-masing file manager; penulis menyayangkan “zaman ketika komputer lebih mengutamakan tebakan daripada instruksi pengguna”
Latar belakang dan situasi masalah
- Penulis mendaki bersama ayahnya lalu memotret dengan ponsel Android masing-masing, kemudian menyimpan semua foto dalam satu folder
- Pola nama file fotonya adalah
IMG_YYYYMMDD_HHmmss atau diikuti angka tambahan dan .jpg
- Karena nama file seperti ini mengikuti urutan tahun-bulan-tanggal dan waktu, penulis mengira jika file diurutkan secara alfabetis (leksikografis), hasilnya akan sesuai urutan waktu pengambilan
- Saat memakai Windows PC, Google Drive, KDE Dolphin, dan lainnya, file dengan aturan yang sama tidak tersusun sesuai urutan
- Contoh: foto pukul 5:54 dari ponsel ayah muncul lebih dulu daripada foto pukul 9:20, atau bahkan berada setelah foto pukul 12:11, sehingga urutannya jelas kacau
- Gnome dan file manager lain di ponsel juga menunjukkan hasil yang sama
- Sebaliknya, perintah Linux
ls mempertahankan urutan yang benar, sehingga makin membingungkan
Analisis penyebab
- Awalnya penulis mengira salah satu dari dua ponsel memakai karakter aneh alih-alih underscore (_), tetapi saat diperiksa dengan perintah Linux
ls, hasil pengurutannya normal
- Di berbagai distribusi Linux dan bahkan server OpenBSD,
ls tetap mengurutkan secara alfabetis dengan benar
- Sebaliknya, banyak file manager GUI (Windows, Google Drive, KDE Dolphin, dan lain-lain) membandingkan angka dalam nama file berdasarkan nilai angkanya yang sebenarnya
- Dengan kata lain, mereka menerapkan natural sorting alih-alih urutan alfabet biasa secara default
- Natural sort membandingkan angka di dalam string bukan sebagai karakter biasa, melainkan sebagai nilai numerik
- Contoh:
file-9.txt < file-10.txt → urutan yang biasanya diharapkan manusia
- Tetapi dalam pengurutan tradisional, karena
1 < 9, maka file-10.txt justru muncul lebih dulu
- Namun file manager modern, ketika menemukan “bagian angka”, akan memaksa bagian itu ditafsirkan sebagai nilai angka sebenarnya sehingga 9 diletakkan sebelum 10
- Ini bisa berbeda dari urutan yang memang dimaksud oleh pembuat nama file
Penyebab nyata dan cara mengatasinya
- Ponsel ayah menempelkan angka milidetik langsung setelah detik, sedangkan ponsel penulis memisahkannya dengan underscore
- Ponsel ayah: milidetik langsung ditempel setelah detik → angka menjadi lebih besar dan terdorong ke belakang
- Ponsel penulis: dipisah dengan underscore → diperlakukan sebagai string terpisah
- Solusinya: susun ulang nama file salah satu pihak agar memakai pola yang konsisten, maka masalah selesai
- Di KDE Dolphin, ada opsi untuk memilih pengurutan alfabet murni, tetapi pengaturannya tersembunyi sehingga merepotkan
- Karena fitur tiap program berbeda, pengaturan terpisah mungkin perlu dilakukan berulang kali
Kesimpulan penulis
- Meski pengguna sudah memilih “urutan alfabet”, penulis mengkritik bahwa perangkat lunak tetap menebak maksud pengguna lalu menerapkan pengurutan lain
- Penulis merindukan cara kerja lama yang sederhana, ketika komputer hanya menjalankan instruksi persis seperti yang diberikan
1 komentar
Opini Hacker News
Saya rasa cara pengurutan yang diadopsi Microsoft, Google, dan KDE lebih intuitif dan mencakup kasus yang lebih umum dipakai; situasi penulis menurut saya sangat jarang; kebanyakan orang jauh lebih sering ingin "10" datang setelah "9"; lingkungan desktop juga melabeli pengurutan ini sebagai "berdasarkan nama", bukan "berdasarkan alfabet", jadi tidak menyesatkan; saya memang tidak suka kalau komputer mencoba menebak maksud, tetapi seperti fitur autosave, hal seperti itu berguna dalam kehidupan nyata; akan bagus kalau ada opsi pengurutan alfabetis yang benar-benar ketat, tetapi sebagai default, yang intuitif untuk kasus umum memang lebih tepat
Topik ini mengingatkan pada perdebatan "Worse is better"; metode pengurutan sederhana berbasis ANSI/Unicode yang diminta penulis justru adalah fitur yang hanya dibutuhkan sebagian kecil developer; pada praktiknya, 99% pengguna GUI menginginkan pengurutan yang intuitif; memahami siapa pengguna utama sangat memengaruhi desain produk; fitur yang lebih baik bisa cocok untuk produk, tetapi untuk sistem, kesederhanaan kadang lebih cocok untuk pertumbuhan dan evolusi
Saat mencari file yang dinamai dengan hash, pengurutan otomatis justru yang paling mengganggu; di Windows, ini salah satu dari sedikit opsi yang langsung saya matikan lewat registry; saya sering merindukan masa ketika komputer hanya melakukan persis seperti yang diperintahkan; sekarang rasanya bukan lagi "membaca pikiran pengguna", tetapi seperti "berusaha mengubah cara berpikirnya", dan itu membuat saya tidak suka; saya tidak puas dengan pola pikir dogmatis "pengguna itu salah", termasuk di dunia open source
Semua orang mengklaim tahu kebutuhan pengguna rata-rata, tetapi kenapa tidak ada yang justru mengusulkan agar komputer otomatis mengubah nama file itu sendiri sesuka hati; kalau tidak mau memaksakan pengurutan ASCII, tidak ada alasan untuk tetap terikat pada nama file yang mencakup ekstensi; pada praktiknya pengguna tidak peduli ekstensi jpg atau png, juga tidak memedulikan huruf besar-kecil; di keluarga Windows, ekstensi sering dipakai lama hanya karena kompatibilitas lawas; aneh rasanya bahwa "nama file ala komputer" tetap dipaksakan, tetapi hanya "pengurutan ala komputer" yang keras kepala ingin dibongkar; karena kita tidak benar-benar tahu apa yang diinginkan pengguna, sebaiknya jangan membuat kepastian seperti itu
Saya pribadi merasa pengurutan berbasis versi seperti yang dijelaskan artikel lebih baik dalam kebanyakan kasus; kalau ditampilkan dengan pengurutan alfabetis malah terasa seperti bug; menurut saya masalahnya bukan konsep pengurutannya, melainkan pelabelannya
sortdi Linux sekarang juga mendukung version sort (sort -V); saya tidak tahu persis cara kerjanya di dalam, tetapi dalam kebanyakan situasi ia bekerja baik; yang paling penting, fitur ini mudah diaktifkan atau dimatikanYang diminta bukan memerintahkan file diurutkan "secara alfabetis", melainkan "berdasarkan nama", jadi tafsirnya bisa berbeda di tiap OS; saya rasa tiap OS memilih tafsir yang lebih cocok bagi kebanyakan pengguna berdasarkan logika dan data; mungkin di masa depan akan ditambahkan aturan seperti memakai urutan alfabetis asli jika kelompok angka memiliki 0 di depan, atau memberi opsi pilihan kepada pengguna
Di macOS Foundation,
NSString.localizedStandardCompare()disediakan secara resmi untuk pengurutan Finder, dan Windows juga menyediakanStrCompareLogical; artinya, standar pengurutan berdasarkan nama, yaitu natural sort, memang diformalkan oleh masing-masing platformls, dan sekarang saya justru berpikir pendekatan ini lebih baik; aplikasi foto biasanya mengurutkan berdasarkan timestamp, dan kalau file benar-benar perlu diurutkan berdasarkan nama, saya akan mengurutkannya berdasarkan tanggal pembuatan atau langsung menormalkan nama filenya sendiriLaporan Unicode secara jelas menyebut bahwa cara pengurutan berbeda menurut bahasa dan konteks; misalnya, kalau "A-10" diurutkan secara alfabetis tanpa mengenali angka, maka "A-10" akan datang sebelum "A-2"; memang rumit, tetapi karena alasan inilah saya rasa file browser memilih natural sort
Mengurutkan sehingga "foo9" datang sebelum "foo10" itulah "natural sort"; baru-baru ini saya menemukan cara natural sort dengan dua baris kode Python dan sangat puas, saya merekomendasikan kode Stack Overflow terkait
sort(1)juga mendukung natural sort (-V); kalau membuat file gambar lalu menjalankanls | sort -V, hasilnya akan terurut dengan benar; hasildu -sh *juga bisa diurutkan dengan opsisort -hSaya tidak merindukan cara pengurutan yang mencampur seperti "Image-1.jpg, Image-11.jpg, Image-2.jpg"; saya memang pernah merasa natural sort agak janggal, tetapi setelah di Windows berubah menjadi pengurutan berdasarkan nilai angka, itu benar-benar nyaman; file tersusun secara alami dan saya sangat puas