ana sayfa > Teknik > KeyError: ‘ROUND_CEiLiNG’

KeyError: ‘ROUND_CEiLiNG’

Salı, 19 May 2009

Bir süredir HARMAN’ın yeni sürümü üzerinde çalışıyordum. Her şey gayet güzel gidiyordu. Ta ki bugüne kadar… Bugün en son HARMAN’ın .mo dosyasını hazırladım ve bu dosyayı program dizini içinde gerekli yere yerleştirip python harman.py komutunu verdim. O da ne?? Komut satırında upuzun bir hata çıktısı ve en son kısımda şu lanetli satır:

KeyError: 'ROUND_CEiLiNG'

Hata mesajlarına baktığımda sorunun pypdf kütüphanesinden kaynaklandığı anlaşılıyordu. Hemen gidip HARMAN’ın eski sürümünü çalıştırmayı denedim. Ama eski sürüm böyle bir hata vermiyordu… Eski ve yeni sürümler arasında, kullanılan modüller açısından herhangi bir fark olmamasına rağmen eski sürüm güzel güzel çalışırken yeni sürüm beni bu hatayla baş başa bırakıyordu.

Hem bu hatayı programı Türkçe yerel ile çalıştırmayı denerken almam, hem de hata mesajındaki eciş bücüş “i” harfleri sorunun tam anlamıyla bir Türkçe problemi olduğunu düşündürüyordu bana… Bunun üzerine konsolda şu komutu vererek sistem dilini tekrar İngilizce’ye çevirdim:

LANG=en_US.UTF8

Bu arada bu komut bazı sistemlerde şöyle de olabiliyor:

LANGUAGE=en_US.UTF8

Evet… Bu şekilde program düzgün çalışıyordu, ama eğer sorunu çözemezsem, HARMAN’ın Türkçe arayüzle açılması imkansız hale gelecekti… Neyle karşı karşıya olduğumu anlamak için internette biraz araştırma yapmaya başladım ve benzer problemlerin Elisa ile Gazpacho programlarında da yaşandığını gördüm… Bu programlar kendi dillerinde düzgün çalışırken, bu programları Türkçe olarak çalıştırmaya kalkışanlar aynen benim aldığım hatayla karşılaşmışlar… Bunların dışında mysql gibi modüller de benzer hatalar verebiliyormuş…

Problem aslında Türkçe’deki “i”, “ı” ve bunların büyük harfli hallerinden kaynaklanıyor… İngilizce’de “İ” veya “ı” diye bir harf yok. “i” harfinin büyük hali “I”… Doğal olarak “I” harfi küçültüldüğünde ortaya çıkan harf “i”…. Türkçe’de ise durum biraz farklı. Bizde hem “i” var hem de “ı”. “i” harfi büyütüldüğünde “İ” harfini; “ı” harfi büyütüldüğünde ise “I” harfini elde ediyoruz. Bu durumu göz önüne aldığımızda, “round_ceiling” ifadesi, Türkçe yerelleri kullanan herhangi bir programın iç işleyişi gereğince büyütülmeye çalışılırsa “ROUND_CEİLİNG” gibi bir şey elde ediliyor. Halbuki bunun “ROUND_CEILING” olması gerek… Aynı program içinde geçen “kitap” ve “first” kelimelerini düşünelim. Bunlardan ilki Türkçe bir kelime olduğu için büyütülürken “KİTAP” şeklini almalı. Ama “first” kelimesi İngilizce bir kelime olduğu için büyütülürken “FIRST” şekline girmeli… Ne yazık ki bu şekilde “bağlama göre büyütme-küçültme” işlemi yapmak pek kolay değil… İşte bu durumdan ötürü, Türkçe yerelleri kullanan programlar bazen saçmalayabiliyor…

Gördüğüm kadarıyla bu tür problemlerin şöyle bir çözümü var: Eğer açmak istediğimiz program yukarıdaki hatayı veriyorsa komut satırında programımızı “LC_ALL=C” parametresiyle çalıştırmamız gerekiyor… Mesela diyelim ki Elisa veya Gazpacho programı böyle bir hata veriyor. O zaman şöyle yapacağız:

LC_ALL=C elisa

Ben de kendi programımın durumuna bakmak için şöyle bir komut denedim:

LC_ALL=C python harman.py

Program bu parametreyle başarılı bir şekilde çalıştı… Elbette kullanıcıların her defasında bu komutu yazarak programı çalıştırmasını bekleyemem. O yüzden HARMAN’ın kaynak dosyası içine şu satırları ekledim:

import locale
locale.setlocale(locale.LC_ALL, "C")

Bu şekilde şimdilik herhangi bir problem yaşamadan programı çalıştırabiliyorum….

Bu arada HARMAN’ın yeni sürümü (bence) gayet güzel oldu!… :) Kodlarda önemli değişiklikler ve eklemeler yaptım. Artık PDF kesme biçme işlemleri bir kontrol paneli üzerinden yapılacak.

HARMAN’ın yeni sürümünde bir PDF dosyasının art arda gelmeyen sayfalarını da silebileceğiz ve kesip alabileceğiz… Yani mesela önceki sürümde sadece tek bir sayfa veya 30, 31, 32, 33, 34, 35 gibi art arda gelen sayfaları silebiliyorduk. Yeni sürümde ise sayfaları tek tek silebilmenin yanısıra, 30, 35, 40, 43, 45 gibi sayılar vererek aynı anda birden fazla sayfa da silebileceğiz… Ayrıca bu sürümde şifreli pdf dosyaları da program tarafından tanınabilecek. Henüz PDF’lerin şifresini çözmüyoruz. Ama bir sonraki sürümde muhtemelen programa şifre çözme desteği de ekleyeceğim… Tabii burada kastettiğim şey şifresini bilmediğimiz PDF dosyalarını çözmek değil. Bazı PDF oluşturucu programlar PDF’yi oluştururken belgeye otomatik olarak boş bir şifre veriyor. Kastettiğim, bu boş şifreli PDF’leri ve şifresini bildiğimiz başka PDF’leri çözmek…

Şu anda HARMAN’ı test etmeye devam ediyorum. Eğer herhangi bir gecikme olmazsa üç-beş gün içinde programı yayımlayacağım…

Herkese iyi çalışmalar,

Fırat

Teknik , , ,

  1. Çarşamba, 20 May 2009 zamanında 19:26 | #1

    çok fena test ederim ben söyleyeyim :) programın imanını gevretirim :)

  2. Çarşamba, 20 May 2009 zamanında 20:10 | #2

    Al o zaman şimdiden test etmeye başla!… :)

    http://www.istihza.com/denemeler/harman-0.5experi.tar.gz

  3. Perşembe, 21 May 2009 zamanında 12:46 | #3

    0.5′i yayınladığında da harman-0.5/anakaynak/* şeklinde bir düzen mi olacak yoksa anakaynak dizinini uçurak mısın? :) ebuild’e ona göre parmak atalım :D

  4. Perşembe, 21 May 2009 zamanında 13:04 | #4

    Hayır, dizin yapısını değiştirmiyorum. “anakaynak” dizini hep var olacak… :) Bu yapı bana epey kolaylık sağlıyor.

    harman-x.y/anakaynak/*
    harman-x.y/deb/*
    harman-x.y/exe/*

  5. Çarşamba, 07 Eki 2009 zamanında 15:17 | #5

    Selamlar öncelikle teşekkürler yazınız için aynı hatayı uzun süredir avant-window-navigator uygulamsında alıyordum arch üzerinde sadece arssuygulmaması çalışmıyordu konsolda verdiğinz hatayı görmüştüm saolsun google sizi önerdi bana çok yardımcı oldunuz tekrar teşekkürler

  6. celaleddin
    Cumartesi, 11 Eyl 2010 zamanında 16:43 | #6

    inanırmısınız yazdığım uygulamda tek türkçe karakter yok ama gene bu hatayı alıyorum.
    import locale
    locale.setlocale(locale.LC_ALL, “C”)

    ekledeim ama hiç bir işe yaramadı.fakat LANG=en_US.UTF8 yazınca çalışıyor

    !?

  1. şimdilik geri bağlantı yok