1 poin oleh GN⁺ 2025-09-29 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2025-09-29
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

    • Saya juga cukup paham untuk mengerti bahwa dalam urutan alfabetis, "10" datang sebelum "9", tetapi di file manager saya ingin "10" datang setelah "9"; saya juga tidak suka menambahkan 0 di depan angka satu digit, dan kalau nanti butuh tiga digit harus ganti nama lagi itu merepotkan; saya membagi file audiobook per bab, dan karena tidak semua pemutar mengurutkan dengan benar, saya memakai format seperti "Chapter 01.mp3" atau "Chapter 001.mp3"; saya bahkan membuat skrip otomatisasi, tetapi tetap saja tampilannya jelek dan itu pekerjaan yang tidak perlu; akan jauh lebih baik kalau semua perangkat bisa mengenali angka dengan benar
    • Saya tidak setuju; kalau ada satu-satunya cara universal untuk menuliskan angka sebagai teks, saya bisa menerima itu; tetapi ada terlalu banyak variasi dalam cara angka dimasukkan, jadi fitur "membaca maksud" menurut saya hanya bekerja tepat di sebagian kasus; desimal, pemisah ribuan, notasi ilmiah, dan sebagainya punya banyak pengecualian rumit, sehingga kalau syaratnya ditelaah, akan terlihat bahwa ini sulit diimplementasikan dengan cara yang andal
    • Saya merasa anggapan bahwa menambahkan 0 di depan itu alami dan akrab bagi orang tidak realistis; misalnya saat versi berubah dari 5.9.17 ke 5.10.0, tidak ada yang akan mengganti semua folder lama menjadi 5.09.17; cara pengurutan standar saat ini tidak ambigu dan intuitif, sedangkan pengurutan ketat berdasarkan urutan karakter tidak cocok untuk antarmuka pengguna
    • Masalahnya adalah perubahan seperti ini berbeda dari pengurutan alfabetis lama yang "bodoh", sehingga membuat orang terkejut dan bingung; akan lebih baik jika cara "cerdas" yang diinginkan mayoritas dan "alfabetis ketat" disediakan sebagai opsi terpisah; kalau opsinya jelas dan sederhana untuk dipilih, pengguna nonteknis pun tidak akan bingung pengalamannya
    • Dikatakan bahwa kasus ingin "10" datang sebelum "9" lebih umum, tetapi mungkin maksudnya justru kebalikannya; dan sebagai catatan, nama resmi untuk pengurutan "berdasarkan nama" adalah "Natural sort order"
  • 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

    • Model mental developer adalah menangani nama yang berisi angka campuran secara naif dan murni; sementara pengguna umum secara alami menganggap 10 datang setelah 9; tidak baik memaksakan cara pikir developer kepada semua orang
    • Saya penasaran, bagi orang yang mengatakan cara yang "lebih buruk" itu perlu, bagaimana pendapatnya soal pengurutan huruf besar-kecil; apakah benar-benar akan mengikuti urutan code point ASCII/Unicode, atau menormalisasikannya sebagai satu huruf lalu mengelompokkan kapitalisasi bersama
    • Alasan "target pengguna" untuk tidak menambahkan opsi itu tidak meyakinkan; menyediakan kedua cara tersebut bukan hal yang sulit; perangkat lunak yang benar-benar bagus justru mengakomodasi berbagai kebutuhan, meski harus diletakkan di mode lanjutan; seperti prinsip 80/20, fitur yang hanya dipakai sebagian kecil orang pun tetap perlu; saya lelah dengan kenyataan bahwa fitur yang semestinya wajar malah dihilangkan dengan dalih mengejar visi pengguna yang sempurna
  • 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

    • Masalah ini bukan cuma pada hash sederhana, tetapi juga menimbulkan kebingungan lebih besar pada berbagai identifier yang menyisipkan angka tanpa makna di tengah; saat harus mencari file dengan gumpalan angka seperti user ID atau Unix time, nama seperti abcd89764237 dan abcd683426834 tampak berada di posisi yang aneh, sehingga baru setelah lama mencari saya sadar alasannya
  • 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

    • Sebenarnya ini memang tidak dijelaskan sebagai "berdasarkan alfabet"; penulisnya yang salah paham menganggap "berdasarkan nama" sama dengan "berdasarkan alfabet"
    • Perilaku yang dijelaskan ini berguna, tetapi yang benar adalah memberi tahu pengguna lebih dulu atau membiarkan mereka memilih opsi
    • Perintah sort di 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 dimatikan
    • Cara pengurutan yang disebut dalam artikel adalah "lexical", tetapi kebanyakan orang rata-rata tidak tahu perbedaan antara "lexical" dan "alphabetic"
  • Yang 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

    • Kalau ada 0 di depan angka, mungkin akan terasa intuitif bila itu dianggap sebagai oktal dan hanya berlaku jika digit berikutnya 0~7
    • Namun perubahan tafsir seperti ini sudah terjadi sejak 10~20 tahun lalu; dulu, di banyak file manager, "berdasarkan nama" memang berarti "berdasarkan alfabet/kamus"
  • Di macOS Foundation, NSString.localizedStandardCompare() disediakan secara resmi untuk pengurutan Finder, dan Windows juga menyediakan StrCompareLogical; artinya, standar pengurutan berdasarkan nama, yaitu natural sort, memang diformalkan oleh masing-masing platform

    • Menarik karena saya tadinya mengira hasilnya akan berbeda dengan perintah ls, 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 sendiri
  • Laporan 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

    • Tapi bukankah -10 lebih kecil daripada -2, jadi mestinya urutannya tidak berubah?
  • 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

    • Perintah sort(1) juga mendukung natural sort (-V); kalau membuat file gambar lalu menjalankan ls | sort -V, hasilnya akan terurut dengan benar; hasil du -sh * juga bisa diurutkan dengan opsi sort -h
  • Saya 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

    • Namun ada juga pendapat bahwa bagi sebagian orang justru urutan itulah yang diharapkan, jadi semuanya tergantung orangnya sendiri