Python’da Türkçe Alfabe Almak

Elimde bir iş vardı, eğer bir formda Türkçe olmayan karakterler varsa hata kaldırmam gerekliydi. Bunu çözerken Türkçe karakter listesini ilk akla gelen metodla oluşturdum. Ve gelen karakterler bu dizinin dışında ise hata kaldırdım.

# -*- coding: utf-8 -*-

def turkish_chars_validator(string):
    turkish_chars = 'ABCÇD...'
    ...

Sonra kod içerisinde böyle alfabe içeren satır bulunmasın, zira projede hiç bir yerde dosya başına coding belirtmiyoruz dedi takım liderimiz. (Merak edenler için coding belirtmekten kaçmamızın sebebi bir kere utf-8 girdi mi projedeki dosyaların içerisine Türkçe docstring’lerin ve yorumların peydah olmaya başlamasıymış.)

Python’da Türkçe harfleri alabileceğim bir kütüphane elbet vardır dedim zira lokalizasyon kütüphaneleri içerisinde bir çok değişken ve metod hatırlıyordum harflerle ilgili. Girip baktığımda string modülü içerisindeki letters değişkenine ulaştım. Kendisi o an set edilmiş locale değerini kullanarak alfabe getiriyormuş:

>>> from locale import LC_ALL, setlocale
>>> setlocale(LC_ALL, 'tr_TR.utf8')
>>> from string import letters
>>> print letters
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Türkçe karakterleri içermeyen bir sonuç verdi tr_TR.utf8 lokali, Turkish_Turkey.1254 ile çağırdığımda ise şunu diziyi döndürdü:

abcdefghijklmnopqrstuvwxyzƒsoªµºßàáâaäåæçèéêëìíîïgñòóôoöoùúûüisÿ...
ABCDEFGHIJKLMNOPQRSTUVWXYZSOYAAAAÄÅÆÇEÉEEIIIIGÑOOOOÖOUUUÜIS

Görüldüğü üzere bu şekilde yaklaşmak pek umut verici değil. Hem setlocale kullanmak Django içerisinde baya sıkıntılı sonuçlar doğuruyor. setlocale hakkında şöyle bir yorum bırakmışlar python dökümantasyonuna:

It is generally a bad idea to call setlocale() in some library routine, since as a side effect it affects the entire program. Saving and restoring it is almost as bad: it is expensive and affects other threads that happen to run before the settings have been restored.

Neyse çok uzatmayayım regex kütüphanesini kullanarak da bir kaç deneme yaptıktan sonra son olarak basitçe şunu yapıp gönderdim:

alpha = 'ABC\xc3\x87DEFG\xc4\x9eHI\xc4\xb0JKL' \
        'MNO\xc3\x96PRS\xc5\x9eTU\xc3\x9cVYZ' \
        'abc\xc3\xa7defg\xc4\x9fh\xc4\xb1ijklmno\xc3' \
        '\xb6prs\xc5\x9ftu\xc3\xbcvyz'.decode('utf-8')

def invalid_chars(text, charset=alpha):
    return set(filter(lambda c: c not in charset, list(text)))

Bir problemi çözerken en iyi yol, her zaman ilk akla gelen en basit yol oluyor. Problemleri karmaşıklaştırmak biraz mühendis kafası hastalığı sanırım.

Anı Defteri Fotoğrafçılığı

Bugün Kadıköy’deki Acıbadem hastanesinde gördüğüm fizik tedaviden çıkarken, koridorda bir anı defteri gördüm. Ne yazmış insanlar diye merak edip bir sayfa bakacaktım ki 50 dakikam orada geçmiş. Bazı sayfaları iç çekerek bazılarını da gülümseyerek okudum. Hoşuma giden sayfaların da fotoğrafını çektim. Zamanım olsa ya da üniversitede olsam bunu bir hobi haline kesin dönüştürürüdüm.

Kesilen Çocuk batuhan Çok kestiniz beni Çok

Ciciaba seni çok seviyoruz hadi artık kendini toparla da entrika dolu hayatımıza devam edelim.

ERSEN!

CANIM OĞLUM,

SENİ ÖNCE ALLAH’A SONRA DOKTORLARIMIZA EMANET EDİYORUM… SEN MERAK ETME, HER ŞEY ÇOK GÜZEL GİDECEK VE BU SENİN BAŞINA GELEN EN KÖTÜ ŞEY OLACAK. BİR DAHA BÖYLE ŞEYLER YAŞAMAYACAKSIN. İNANIYORUM Kİ YÜCE RABBİM SENİ HER ZAMAN, HER TÜRLÜ KÖTÜLÜKLERDEN KORUYACAK. SENİ ÇOK ÇOK SEVEN BABAN.

VEDAT KARABEKİR.

DOKTOR BİZİM BEBEĞE TOMBİK DEDİN AMA GÖBEK SENDEN ÖNCE VİRAJ ALIYO!!! (bebeğine laf edilmesine çok içerleyen baba)

Akciğerimde modül bulunduğundan Tomografi çektirdim sonucu yarın alacağım, aslında hiç umurumda değil ama yine de karımı seviyorum yaşamak istiyorum…

Ömer AK

Okanımın göğsü ağrıyor. Acısı var. Dün maçta düştü onu getirdik.

Canım Yengem,

5 Gündür hastaneden çektiklerinden sonra sabah saatlerinde aldığım şuuru kayboldu diyen bir sesle hastaneye koştum. Gördüğüm 1 sene önceki aynı sahneydi. Dializde kötü oldup yoğun bakına alınmanla beklememiz başladı.

Ancak 1 sene öneki yptığın gibi sabırla bekliyoruz bize yoğun bakımın koridorundan el sallamanı.

Ne olur canım diren bize gel lütfen!

Yiğenin Sevda Canbeze (?)


Şu an 29-12-2013 geldik, hala yoğun bakım önündeyiz. ümitlerimiz kayboldu.

Biliyorum bu deftere gerçekte en mutlu günler veya zor sanılan ve sonrasında sevdikleriyle beraber çıkılabilen amelyatlar yazılıyor. Ama bizde 11 gün önce 4 aralık gecesi burada başlayan ve her geen gün bizden bir şeyler daha götüren süreci yazmak istiyorum.

Beklemek çok zor…

3-4 saatlik amelyatın bitmesini beklemek ya da dünya dünyanın en güzel şeyi olan bebeğinizin doğumunu beklemek gibi bir şey değil bu. Hiç bir umut verilmeyen gözlerini açsa dahi bizi tanıyamayacak olan BABAMI beklemek…

Allahtan kelimenin tam anlamıyla bir MUCİZE BEKLEMEK..

İnanan ve pozitif bir insan olmak bile yetmiyor bazen dimdik ayakta kalmaya.

Beklemek ve ‘elinin kolunun bağlı’ olduğunu bilerek beklemek inanın çok zor.

4 Aralık günü buraya geldiğimde babam ertesi gün taburcu edilecekti. Tahmin edemediğim, edemedikleri, söylemedikleri %1’lik ihtimal oldu.

Bu yüzden -

Sevdiklerinize daha sıkı sarılın. Daha içten öpün. Daha çok zaman ayırın. Hastalıklara isyan etmeyin, çözülebiliyorsa sevinin güçlenin.

"Seni seviyorum" demek parayla değil, 1 kez daha söyleyin. Pişman olmamak için sevginiizi belli edin ve sevdiklerinizle son gününüzmüş gibi dolu dolu yaşayın.

Öğüt verecek yaşta değilim, fikrimi söylüyorum. Ama yaşadığım hiç bir şey beni 4 aralık gecesinde aldığım haber kadar bütürmedi.

Artık ağlayamıyorum.

Sağlıklı, mutlu, sevdiklerinizle bir ömür yaşamanı dileğiyle.

Meltem A.

Artoskopi ile Eklem Faresi Aldırdım

Ne zamandır yazmaya enerji bulamıyorum bugüne kısmetmiş. 3-5 satır da olsa ısındırayım kendimi tekrar diyorum. Geçen hafta çarşamba günü (25 haziran 2014 diyeyim sevgili günlük tadında olsun) dizimdeki eklem faresi için artoskopi oldum. Artoskopi dediğim şey vücudun bir yerine küçük delikler açıp kamera ve ince aletlerle girilmesi işlemi.

Konu sıkıcı kısa kesmek istiyorum o yüzden. İnternette Eklem Faresi ya da Artoskopi diye arayarak gelen varsa söyleyim. Canınız çok yanmıyor, amelyatta canımı en çok yakan şey elime stend takılması oldu. Çıktığınızda size bir makine bağlıyorlar düzenli olarak narkotik ağrı kesici veriyor damardan. Hem kafa güzel oluyor hem ağrı hissetmiyorsunuz. 24 saat geçer geçmez ise ayağa kalkabiliyorsunuz. Sonrasında ise 15 gün kadar uğraşacağınız şey dizdeki suyu atmaya ve kasları güçlendirmeye çalışmak oluyor.

Ev içinde dizi bükmeden yürümek falan tamam da sokağa çıkmak için tekrar biraz cesaret gerekiyor. Dün de ilk defa yürüyüşe çıktım. Aşağıdaki fotoğraf da hatırası.

2000’li yıllardan kalma 6 izlenesi film.

The Fountain

Yaşam ölüm ve ruhsallık üzerine bir film. Üç farklı zamanda geçen ama aslında aynı olan üç farklı hikayeyi konu alıyor.

Open Grave

Kahramanımız cesetlerle dolu bir çukurun içinde tüm hafızasını yitirmiş olarak uyanır. Sonrası bolca gizem, gerilim ve aksiyon dolu.

Moon

Astronot Sam Bell Ay’da yaptığı üç senelik görevin sonunda zihinsel olarak yorgunluk çekmeye başlamış, geri döneceği günü iple çeker olmuştur. Bu sırada kendiyle ilgili hoşuna gitmeyecek şeyler farketmeye başlar.

Cube

Birbirini tanımayan 7 kişi kendini küplerden oluşan ölümcül tuzaklarla dolu bir labirentin içinde bulur. Zamanında olay olmuştu bu film.

Parfume

Türkçeye Koku olarak çevrilen romanın filmi. Kitabı elbette daha etkileyici ama yine de kötü değil. Tüm insancıl duyumlardan ve duygulardan yoksun, yalnızca kokulara karşı görülmedik derecede duyarlı Baptiste Grenouille’nin yaşam hikayesini ele alıyor.

Evolution

Dünyaya bir meteor düşer. Meteorun üzerindeki hızla evrim geçirmeye başlar, olaylar gelişir. Biraz hafif bir film, ama kesinlikle kötü değil. İzlerken gülümsetiyor.

Pip paketlerini Yolk ile inceleyin.

Virtualenv kullanarak geliştirme yaptığınızda genelde hangi paket yüklüydü, hangisi kaçıncı versiyondaydı gibi sorulara cevap bulmak için pip freeze çıktısını gözle inceliyordum. Yolk pakedi bu işleri baya kolaylaştırıyor. Kendisi PyPI üzerinde sorgular çalıştırmak ve yerelde kurulu Python paketlerini incelemek için yazılmış bir komut satırı aracı.

Kurmak için:

pip install yolk

En işime yarayan sorgular ise:

$ yolk -l
pip freeze gibi ama daha çok bilgi veriyor

$ yolk -V pkg_name
verilen pakette hangi versionların kurulabilir olduğu    

$ yolk -U pkg_name
kurulu paketler içerisinde hangilerinin güncellenebileceği

Ben sadece üç tanesini yazdım fakat projenin sayfasında birçok yapılabilir sorgu çeşidinden bahsedilmiş. Oradan inceleyip hoşunuza gidenleri yorum olarak bırakabilirsiniz.

Nuhun Gemisi Kaç Metre?

Hafta sonu Nuh: Büyük Tufan filmine gittim. İnsanlar yeriyor biraz ama güzel film, kesinlikle para zaman kaybı değil. Aklıma geminin boyutları takıldı sadece.

Kutsal kitaplarda Nuh peygamberin gemisinin 300 arşın uzunluğunda olduğu yazıyor. Bir mimar arşını 75.774 santimetre, bu durumda geminin uzunluğu 227 metre oluyor. Aslında gemi çok da devasa sayılmaz. Orta boy (panama boy deniyormuş) bir yük gemisinin uzunluğuna denk geliyor. 293 metreye kadar olan yük gemileri panama boy yük gemisi olarak adlandırılıyormuş. Yani her gün boğazda görebileceğimiz türden gemiler. Tabi yanlış anlaşılmasın, hikayeyi önemsizleştirmiyor bu. Meraktan araştırdım sadece.

Django’da Kriptografik İmzalama

Bir web uygulaması yazarken en başta gelen kurallardan biri harici kaynaklardan (kullanıcılardan) gelen veriye güvenmemek gerektiğidir. Ancak bazen veriyi bu harici ortamlardan geçirmek zorunda kalabiliyoruz. Django, bu harici ortamlardan geçirilmek zorunda kalınan verilerin doğruluğunu kontrol edebilmemize yarayan bir kriptografik imzalama arabirimi sağlıyor:

Örneğin, elimizde Twitter benzeri bir site var. Gönderi yapma formunun içinde giriş yapmış bir kullanıcının ID’sini hidden input olarak basmak zorunda kalıyoruz diyelim. Normalde yapacağımız şey değil böyle bir bilgiyi dışarıdan almak ama bir şekilde mecbur kalmışız. Form geri döndüğünde bu ID’nin değişmemiş olduğundan emin olmak istiyoruz. Kullanıcı formla oynayıp ID’yi değiştirerek sanki başkasıymış gibi gönderi yapabilir. İşte tam bu noktada işe yarıyor. O ID’yi imzalayıp basıyoruz formun içine, geri döndüğünde de değişmediğinden emin oluyoruz.

>>> from django.core.signing import Signer
>>> signer = Signer()
>>> value = signer.sign('My string')
>>> value
'My string:GdMGD6HNQ_qdgxYP8yBZAdAIV1w'

Yukarıda ‘My string’ metnine bir imza ekledik. Görüldüğü üzere bu arabirim veriyi şifrelemiyor, hala görülebilir biçimde tutarak sonuna imza atıyor. Aynı sınıfın unsign metodu ile asıl metni geri alabiliyoruz:

>>> original = signer.unsign(value)
>>> original
u'My string'

Eğer imzada ya da verinin kendisinde bir değişiklik olursa bu metod BadSignature hatası fırlatıyor. Değiştiğini bu şekilde anlıyoruz.

Daha fazla bilgi için dökümantasyon şurada: https://docs.djangoproject.com/en/dev/topics/signing/

Tıp bana göre baya yavaş ilerliyor. Deney yapması zor bir alan olduğu için sanırım. Yani yıl 2014 biz hala bir gözün yerine yenisini koyamıyoruz. Yinede er ya da geç ölümsüzlük mevzusunun (belki sadece zenginler için bile olsa) mümkün olacağından eminim. Bilim bir gün bize yeni bir vücut verebilecek hale gelecek.

Bu videoyu izlediğimde şunu fark ettim. Hayatın başlangıcından itibaren edindiğimiz her deneyim aslında zihnin biraz daha eskimesi manasına geliyor. Yeni bir beden tamam belki mümkün, ama bu kızın şu yağmurda yaşadığı mutluluğu yaşayabilecek miyiz? Hayır… bunun için taze bir zihine, yağmuru hiç görmemi olmaya ihtiyacımız var. Bir insanın varlığını onun kimliği belirliyorsa, ve kimliğini de hatıralarından oluşturuyorsa - her şeyi unutmak demek ölmek demek değil midir?

Beni ben yapan şeylerin hepsini unutursam, “ben” dediğim şey yok olmuş olur, Galiba ölümün varlığı biraz için mana kazandı gözümde. Ölüm doğada tamamen çözülelim de yağmuru ilk defa görüp mutlu olabilen bir çocuk olabilelim diye var. Gerçek bir yeniden başlama metodu.

Kaybolan Laptopu Bulmak: PreyProject

Bilgisayar pahalı alet. Kimse artık masaüstü bilgisayar kullanmıyor ve bu kullandığımız dizüstü bilgisayarlar giderek daha kolay taşınabilir hale geldiği için, kaybolmalar ve çalınmalar daha da çok yaşanmaya başladı. Böyle şeylerin olması doğal cana geleceğine mala gelsin demek gerekli ama yine de alınabilecek bir önlem var. Bir çok kişi bilmiyor bahsetmek istedim.

Preyproject adında bir web sitesi var. Bu siteye kayıt olup verdiği programı indirip bilgisayarınıza kuruyorsunuz. Bu yazılım bilgisayarınızda saklı olarak kalıyor. Bir gün bilgisayarın başına bir şey geldiğinde siteye gidip “bilgisayarım kayıp" diye işaretlediğiniz andan itibaren bilgisayarınız o an nerede olduğuna dair bilgiyi göndermeye başlıyor, siz de site üzerinden takip edebiliyorsunuz. Tek gönderdiği bilgi bu da değil, aktive olduğu andan itibaren arada bir webcam’den fotoğraf çekmek, masaüstü görüntüsü göndermek gibi özellikleri de var.

Bu özelliklerin çoğu ücretsiz, ama ben işte daha sık rapor almak istiyorum falan derseniz ücret alıyorlar sizden. Kaybolan laptop için verilebilecek bir ücret. Bir çok işletim sistemi ve cihaz destekleniyor indirip kurun bir an önce.

Ha bu arada bahsettiğim şeyleri yapabilmesi için cihazın internete bağlı olması gerekiyor. Cihaz kimin eline geçti ise internete bağlanması için yine biraz şanslı olmak gerek :)

Adam eski kız arkadaşından kalma gebelik testini buluyor dolapta. Muzurluk olsun diye üzerine işiyor ve sonuç pozitif çıkıyor. “bakınhele lan hamileymişim ehe ehe ehe" diye paylaşıyor bu fotoğrafı reddit’de. Millet gülüşürken, aralarında biri eğer idrarından bu sonucu aldıysan hemen üroloğa git ve testis kanseri olup olmadığın konusunda araştırma yaptırt diyor. Eleman ertesi gün doktorda tabi. Hakikaten kanser olduğunu öğreniyorlar, ama şükür ki erken evrede. Bu gebelik testleri HCG adında bir hormonu ölçmeye yarıyormuş. Bu hormon gebelik sırasında kadınlarda, ve testis kanseri olan erkeklerde salgılanıyor. Erkekler tarafından da senede bir kere kontrol amaçlı kullanılabilir. Erken teşhis hayat kurtarır demişler. Bilinsin bu dolaşsın dedim.

Adam eski kız arkadaşından kalma gebelik testini buluyor dolapta. Muzurluk olsun diye üzerine işiyor ve sonuç pozitif çıkıyor. “bakınhele lan hamileymişim ehe ehe ehe" diye paylaşıyor bu fotoğrafı reddit’de. Millet gülüşürken, aralarında biri eğer idrarından bu sonucu aldıysan hemen üroloğa git ve testis kanseri olup olmadığın konusunda araştırma yaptırt diyor. Eleman ertesi gün doktorda tabi. Hakikaten kanser olduğunu öğreniyorlar, ama şükür ki erken evrede. Bu gebelik testleri HCG adında bir hormonu ölçmeye yarıyormuş. Bu hormon gebelik sırasında kadınlarda, ve testis kanseri olan erkeklerde salgılanıyor. Erkekler tarafından da senede bir kere kontrol amaçlı kullanılabilir. Erken teşhis hayat kurtarır demişler. Bilinsin bu dolaşsın dedim.

Çalışan ama kullanmadığınız elektronik eşyalarınızı ne yapıyorsunuz? Telefonu şarjı hiç dayanmaz olduğu için, kablosuz fareyi de alıcısını kaybettiğim için kullanmıyorum. Çok ısındığı için kullanmadığım bir dizüstü bilgisayarım da var onun fotoğrafını çekmedim. Çöpe atsan atılmaz birine versen işine yaramaz.

Çalışan ama kullanmadığınız elektronik eşyalarınızı ne yapıyorsunuz? Telefonu şarjı hiç dayanmaz olduğu için, kablosuz fareyi de alıcısını kaybettiğim için kullanmıyorum. Çok ısındığı için kullanmadığım bir dizüstü bilgisayarım da var onun fotoğrafını çekmedim. Çöpe atsan atılmaz birine versen işine yaramaz.

Python-Django geliştiricisi olarak geç öğrendiğime üzüldüğüm şeyler.

  1. Ipdb'den habersiz yaşamış, her yere print yazmış olmak.
  2. Django-south kütüphanesinin çözümden çok sorun üretiyor olduğu.
  3. commit_on_success dekoratörünün işe yararlılığı. Fonksiyon düzgün bitmezse veritabanına hiç bir kayıt commit edilmiyor sayesinde
  4. Django-debug-toolbar ile birlikte gelen debugsqlshell. Django shell’i ama sorgu çalıştıran her komut ekrana SQL sorgusunu yazdırıyor.
  5. Defaultdict ve setdefault metodları.
  6. Django-extensions pakediyle gelen sqldiff komutu. South kullanmaktan çok daha iyi ve basit çözüm. Şu anki veritabanı yapısı ile modellerini karşılaştırıp diff çıkartıyor.
  7. all ve any metodları. Bunları elle yapıyordum ben.
  8. Rubber duck debugging olayı. Şurada anlattım.
  9. Bash’de tail komutuna verilen -f parametresi. Zırt port tail komutu vermeye gerek kalmadan dosya büyüdükçe ekrana basmaya devam ediyor.

Sizin varsa böyle geç öğrendiğinize üzüldüğünüz şeyler yorum olarak alabilirim.