1 puan yazan GN⁺ 2025-09-29 | 1 yorum | WhatsApp'ta paylaş
  • Fotoğraf dosyalarını alfabetik sıraya göre sıralamaya çalıştı, ancak işletim sistemi ile dosya yöneticisinin sıralama sonuçları farklı çıktı
  • Linux ls içinde sıralama beklendiği gibi çalışsa da Windows, Google Drive, KDE Dolphin gibi çoğu GUI dosya yöneticisi, sayı içeren dosya adlarına sayısal olarak yorumlanan “doğal sıralama (natural sort)” uygular
  • Bu yüzden file-10.txt, file-9.txt dosyasından önce gelebilir; yani geleneksel karakter dizisi sıralamasından farklı bir sonuç ortaya çıkar
  • Asıl sorun, iki telefonun farklı dosya adı kuralları kullanmasıydı: biri saniyeden sonra milisaniyeyi doğrudan ekliyor, diğeri ise alt çizgiyle ayırıyordu; bu da sıralama ölçütünü değiştiriyordu
  • Sonuçta çözüm, dosya adı kuralını birleştirmek veya her dosya yöneticisinin gizli ayarlarını değiştirmekten ibaret; yazar da “bilgisayarların kullanıcı komutundan çok tahmine öncelik verdiği çağ”dan yakınıyor

Arka plan ve sorun durumu

  • Yazar, babasıyla yürüyüş yaparken kendi Android telefonlarıyla fotoğraf çekip tüm fotoğrafları tek bir klasörde topluyor
  • Fotoğraf dosyası adları IMG_YYYYMMDD_HHmmss biçiminde ya da bunun sonuna ek sayı ve .jpg eklenmiş halde
  • Bu adlandırma yıl-ay-gün ve saat sırasını içerdiği için, dosyalar alfabetik olarak sıralanırsa çekim zamanına göre de sıralanmış olur diye düşünüyor
  • Ancak Windows PC, Google Drive, KDE Dolphin gibi araçlarda, aynı kurala sahip dosyalar sırayla dizilmiyor
    • Örnek: babasının telefonuyla çekilen 5:54 fotoğrafı 9:20 fotoğrafından önce görünüyor ve 12:11 fotoğrafından sonra yer alıyor; yani sıralama düzgün çalışmıyor
  • Gnome ve telefondaki diğer dosya yöneticilerinde de sonuç aynı
  • Linux ls komutu ise doğru sırayı koruduğu için kafa karışıklığını artırıyor

Nedenin analizi

  • Başta, iki telefondan birinin alt çizgi (_) yerine farklı bir karakter kullandığını düşündü; ancak Linux ls ile kontrol edince sıralamanın normal olduğu görüldü
  • Çeşitli Linux dağıtımlarında ve OpenBSD sunucusunda da ls doğru alfabetik sıralama yapıyor
  • Buna karşılık çok sayıda GUI dosya yöneticisi (Windows, Google Drive, KDE Dolphin vb.), dosya adında sayı varsa bunu gerçek sayısal büyüklüğe göre karşılaştırıyor
    • Yani alfabetik sıra yerine doğal sıralama (natural sorting) varsayılan olarak uygulanıyor
  • Doğal sıralama, metin içindeki sayıları basit karakter değeri değil sayısal değer olarak karşılaştırır
    • Örnek: file-9.txt < file-10.txt → insanın beklediği sıra
    • Oysa geleneksel sıralamada 1 < 9 olduğu için file-10.txt önce gelir
  • Ancak günümüz dosya yöneticileri, bir “sayı bölümü” gördüğünde o kısmı sayının gerçek değeri olarak yorumlayıp 9’un 10’dan önce gelmesini zorunlu kılar
    • Bu da dosya adını oluşturan kullanıcının amaçladığı sıradan farklı olabilir

Gerçek neden ve çözüm

  • Babanın telefonu, milisaniye değerini saniyeden hemen sonra ekliyor; yazarın telefonu ise bunu alt çizgiyle ayırarak gösteriyor
    • Babanın telefonu: milisaniyeyi saniyenin sonuna doğrudan ekliyor → sayı büyüdüğü için daha sona itiliyor
    • Yazarın telefonu: alt çizgiyle ayırıyor → ayrı bir metin parçası gibi işleniyor
  • Çözüm: iki taraftan birinin dosya adlarını tutarlı bir desene göre yeniden düzenlemek sorunu çözüyor
  • KDE Dolphin'de seçeneklerden saf alfabetik sıralama seçilebiliyor, ancak ayar gizli olduğu için uğraştırıcı
  • Programdan programa özellikler değiştiği için her seferinde ayrı ayar yapmak gerekebiliyor

Yazarın vardığı sonuç

  • “Alfabetik sıra” seçilmiş olmasına rağmen, yazılımın kullanıcının niyetini tahmin edip farklı bir sıralama uygulamasını eleştiriyor
  • Geçmişteki gibi, bilgisayarların sadece verilen komutu uyguladığı daha basit yaklaşımı özlediğini söylüyor

1 yorum

 
GN⁺ 2025-09-29
Hacker News görüşü
  • Microsoft, Google ve KDE'nin benimsediği sıralama yönteminin daha sezgisel olduğunu ve daha yaygın kullanım durumlarını kapsadığını düşünüyorum; yazarın durumu son derece nadir görünüyor, çoğu insanın “10”un “9”dan sonra gelmesini istemesi çok daha olası. Masaüstü ortamları da sıralamayı “alfabetik” değil “ada göre” diye etiketlediği için ortada bir yanıltıcılık yok. Bilgisayarın niyet okumaya çalışmasından hoşlanmıyorum ama otomatik kaydetme gibi özelliklerde olduğu gibi bunun gerçek hayatta faydalı olduğu da açık. Gerçek alfabetik sıralama için ayrıca bir seçenek olsa güzel olurdu ama varsayılanın genel durumda sezgisel olan olması bence doğru.

    • Ben de “10”un alfabetik sırada “9”dan önce geldiğini anlayabilecek kadar zekiyim ama dosya yöneticisinde “9”dan sonra “10”u görmek istiyorum. Tek haneli sayıların önüne 0 koymaktan da hoşlanmıyorum; sonra üç haneye ihtiyaç olursa her şeyi yeniden adlandırmak da ayrı bir zahmet. Sesli kitap dosyalarını bölümlere ayırırken ve her oynatıcının doğru sıralamayacağını hesaba katarak “Chapter 01.mp3” ya da “Chapter 001.mp3” biçimini kullanıyorum. Bunun için otomasyon betiği bile yazdım ama yine de çirkin görünüyor ve gereksiz iş. Tüm cihazların sayıları düzgün algılaması gerçekten daha iyi olurdu.
    • Katılmıyorum. Sayıları metin içinde göstermenin tek ve evrensel bir yolu olsaydı buna ikna olabilirdim. Ama sayı girişinin çok farklı biçimleri var; bu yüzden “niyet okuma” özelliğinin yalnızca bazı durumlarda doğru çalıştığını düşünüyorum. Ondalık ayırıcı, binlik ayırıcı, bilimsel gösterim gibi karmaşık istisnalar var; gereksinimleri düşündüğünüzde bunun güvenilir biçimde uygulanmasının zor olduğu görülüyor.
    • İnsanların başa 0 eklemeyi doğal ve alışıldık bulduğu iddiası bana gerçekçi gelmiyor. Örneğin sürüm 5.9.17'den 5.10.0'a geçerken kimse eski klasör adlarını dönüp 5.09.17 yapmıyor. Günümüzde standart sıralama biçimi belirsiz değil ve sezgisel; katı metin sıralaması ise kullanıcı arayüzleri için uygun değil.
    • Sorun, bu değişimin eski “aptal” alfabetik sıralamadan farklı olması ve insanlarda şaşkınlıkla kafa karışıklığı yaratması. Çoğunluğun istediği “akıllı” yöntem ile “katı alfabetik” yöntemin ayrı seçenekler olarak sunulması daha iyi olurdu. Basit ve açık biçimde tercih yapılabilse uzman olmayan kullanıcılar için deneyim de kafa karıştırıcı olmazdı.
    • “10”un “9”dan önce gelmesini isteyen durumların daha yaygın olduğunu söylemişsin ama sanırım tersini demek istedin. Ayrıca “ada göre” sıralamanın resmî adı “Natural sort order”.
  • Bu konu bana “Worse is better” tartışmasını hatırlatıyor. Yazarın istediği ANSI/Unicode tabanlı basit sıralama aslında yalnızca küçük bir geliştirici azınlığının ihtiyaç duyduğu bir özellik. Gerçekte GUI kullanıcılarının %99'u sezgisel sıralama istiyor. Ana kullanıcı kitlesini tanımak ürün tasarımını çok etkiliyor. Daha iyi bir özellik bir ürüne yakışabilir ama bir sistem için büyüme ve evrim açısından sadelik daha uygun olabilir.

    • Geliştiricinin zihinsel modeli, içinde karışık sayılar olan adları tamamen naif biçimde ele almak. Buna karşılık sıradan kullanıcı için 10'un 9'dan sonra gelmesi doğaldır. Geliştiriciye özgü düşünme biçimi herkese dayatılmamalı.
    • “Daha kötü” yöntemin gerekli olduğunu söyleyenlerin büyük/küçük harf sıralaması hakkında ne düşündüğünü merak ediyorum. Gerçekten ASCII/Unicode kod noktası sırasını mı izlemeliyiz, yoksa tek bir karaktere normalize edip büyük-küçük harfleri birlikte mi ele almalıyız?
    • “Hedef kullanıcı kitlesi” bahanesiyle seçenek eklememek ikna edici değil. Her iki yöntemi de sunmak zor bir iş değil. Gelişmiş moda koyarak da olsa farklı ihtiyaçları karşılayan yazılım gerçekten daha iyi yazılımdır. 80/20 kuralındaki gibi, az kişinin kullandığı özellikler de gereklidir. Kusursuz bir kullanıcı vizyonu adına bariz işlevlerin bile eksik bırakıldığı bu durumdan bıkkınlık duyuyorum.
  • Hash değeriyle adlandırılmış dosyaları ararken otomatik sıralama en can sıkıcı şeylerden biri. Windows'ta kayıt defterinden hemen kapattığım nadir seçeneklerden biri bu. Bilgisayarların kendilerine söyleneni yaptığı günleri sık sık özlüyorum. Bugünlerde bu yaklaşım “kullanıcının aklını okumak”tan çok “düşüncesini değiştirmeye çalışmak” gibi geliyor ve bundan hoşlanmıyorum. Açık kaynak dahil, “kullanıcı haksız” diyen buyurgan zihniyetten rahatsızım.

    • Bu sorun yalnızca basit hash'lerde değil, ortasında anlamsız sayılar geçen çeşitli tanımlayıcılarda daha da kafa karıştırıcı oluyor. Kullanıcı ID'si, Unix zamanı damgası gibi sayı blokları içeren dosyaları ararken, abcd89764237 ile abcd683426834'ün gözle görülür biçimde tuhaf yerlerde durması insanı uzun süre arattıktan sonra sebebini fark ettiriyor.
  • Herkes ortalama kullanıcının ihtiyaçlarını bildiğini iddia ediyor ama nedense kimse bilgisayarın dosya adlarını da istediği gibi otomatik değiştirmesini önermiyor. ASCII sıralaması zorunlu değilse uzantı dahil dosya adına da bu kadar bağlı kalmak gerekmiyor. Sonuçta kullanıcı için jpg ya da png uzantısı önemli değil, büyük/küçük harf ayrımı da pek umursanmıyor. Windows dünyasında uzantılar çoğunlukla eski uyumluluk nedenleriyle kullanıldı. “Bilgisayar usulü dosya adları”nı dayatırken neden yalnızca “bilgisayar usulü sıralama”yı özellikle bozuyoruz, anlayamıyorum. Kullanıcının ne istediğini gerçekten bilmiyorsak bunu kesin bir dille varsaymamalıyız.

  • Ben çoğu durumda bu yazıda anlatılan sürüm tabanlı sıralamanın daha iyi olduğunu düşünüyorum; alfabetik sıralama gibi gösterilmesi neredeyse bir hata gibi hissettiriyor. Bence sorun sıralama kavramında değil, etiketlemede.

    • Aslında buna “alfabetik” denmiyor; yazar “ada göre” sıralamayı “alfabetik” sanmış.
    • Anlatılan davranış faydalı ama kullanıcıya önceden bildirmek ya da seçenek sunmak en doğrusu.
    • Linux'taki sort komutu da artık sürüm sıralamasını (sort -V) destekliyor. İç işleyişini tam bilmiyorum ama çoğu durumda iyi çalışıyor; en önemlisi bunu açıp kapatmak çok kolay.
    • Yazıda söz edilen sıralama biçimi “lexical” ama insanlar ortalama olarak “lexical” ile “alphabetic” arasındaki farkı bilmiyor.
  • Burada dosyaları “alfabetik” sırala diye komut verilmiyor; “ada göre” sıralama isteniyor, dolayısıyla yorum işletim sistemine göre değişebilir. Çoğu kullanıcı açısından daha uygun olan yorumu mantık ve verilere dayanarak seçtiklerini düşünüyorum. Belki gelecekte sayı grubunda başta 0 varsa özgün alfabetik sıralamaya dönmek gibi kurallar eklenir ya da kullanıcıya seçim sunulur.

    • Sayıların başında 0 varsa bunu sekizlik sayı kabul edip yalnızca sonraki rakamlar 0-7 arasındaysa o şekilde davranmak sezgisel olabilir.
    • Ama bu yorum değişikliği 10-20 yıl önce başladı; eskiden dosya yöneticilerinde “ada göre” demek fiilen “alfabetik/sözlük sırası” demekti.
  • macOS Foundation, Finder sıralamasında kullanılan NSString.localizedStandardCompare() işlevini resmen sağlıyor. Windows da StrCompareLogical sunuyor. Yani platformlar “ada göre” sıralama, yani doğal sıralama ölçütünü resmileştiriyor.

    • Bunun ls komutundan farklı olmasına şaşırdım ve artık bu yöntemin daha iyi olduğunu düşünüyorum. Fotoğraf uygulamalarında zaten genelde zaman damgasına göre sıralama yapılır; bir dosyanın gerçekten ad sırasına göre sıralanması gerekiyorsa oluşturulma tarihine göre sıralar ya da doğrudan dosya adını kendim normalize ederim.
  • Unicode raporunda, bağlama ve dile göre sıralama yönteminin değişebildiği açıkça belirtiliyor. Örneğin “A-10”, sayıyı tanımadan alfabetik sıralanırsa “A-2”den önce gelir. Karmaşık bir konu ama dosya tarayıcılarının bu nedenle doğal sıralamayı seçmesi bence doğru.

    • Ama -10, -2'den küçük olduğuna göre sıralamanın yine de değişmemesi gerekmez mi?
  • “foo9”un “foo10”dan önce gelmesini sağlayan şey “natural sort”. Kısa süre önce Python'da iki satırlık bir kodla doğal sıralamanın nasıl yapıldığını öğrendim ve çok memnun kaldım; ilgili Stack Overflow kodunu tavsiye ederim.

    • sort(1) komutu da doğal sıralamayı (-V) destekliyor. Görüntü dosyaları oluşturup ls | sort -V ile sıralarsanız düzgün çalışıyor. du -sh * çıktısını da sort -h seçeneğiyle sıralayabilirsiniz.
  • “Image-1.jpg, Image-11.jpg, Image-2.jpg” gibi karışan sıralamayı hiç özlemiyorum. Doğal sıralama bir zamanlar tuhaf geliyordu ama Windows'ta sayısal değere göre sıralamaya geçilince gerçekten çok rahat ettim. Dosyaların doğal biçimde sıralanması beni epey memnun etmişti.

    • Ama bazılarına göre beklenen sıra zaten bu olabilir; sonuçta kişiden kişiye değişir.