Uykusuz bir sınav gecesinde boşlukta uçmak...
4 Mayıs 2010 Salı
Staj @ Pardus
1Stajın çok yararlı olacağını daha ilk dakikalardan anladım. Müthiş bir gazla Linux'la Pardus'la ilgili ne varsa okuyasım var. Bir de sanki kırk yıllık Pardus geliştiricisiymişim gibi bir sahiplenme geldi bir anda. Tarih gaza gelen stajerlerin hezimetleriyle doludur kesin. Olsun! Tutmayın beni diyorum. Ağustos'a kadar okumam ve öğrenmem gereken çok fazla şey var.
Artık bloğuma da bol bol yazacak malzemem olacak gibi.
12 Nisan 2010 Pazartesi
R.I.P. Run For Osman
3Orta Doğu Teknik Ünivesitesi Bilgisayar Topluluğu'nun düzenlediği programlama yarışmasında finale kaldık fakat Run for Osman'a nazarımız değdi ve şampiyon at sonuçların açıklanmasından 2 gün önce kalp krizi geçirerek öldü. Yarışmadaki grubumuzun isminin gerçek sahibi ve evdeki 'VUHAHAHA Run for Osman haa' şeklindeki espirilerin nedeni, ilham kaynağımız ata veda ettik. Artık finalde onun için yarışacağız. Run for Run for Osman
8 Nisan 2010 Perşembe
Python 1 Satırda QuickSort
1İnternette dolaşırken 3 satırlık bir quicksort fonksiyonuna rastladım. Python'un list comprehension'ının gücünü göstermesi açısından güzel bir örnek fakat bu kodu gerçek hayatta kullanmaktan kaçının. Bunun yerine sort'u kullanın.
def qsort(L):
if len(L) <= 1: return L
return qsort( [lt for lt in L[1:] if lt < L[0]] ) + [L[0]] + qsort( [ge for ge in L[1:] if ge >= L[0]] )
Aslında bunu daha da kısaltmak mümkün:) Python'da and ve or operatörleri sadece boolean tipinde veri döndürmezler. Bu operatörler işlenilen son değeri döndürürler. Bu özelliği 2. ve 3. satırları birleştirmek için kullanabiliriz. Ayrıca fonksiyon tanımını bir lambda ifadesi olarak belirtirsek kodu tek bir satırda yeniden yazabiliriz:
qsort = lambda L: (len(L)>1 and qsort( [lt for lt in L[1:] if lt < L[0]] ) + [L[0]] + qsort( [ge for ge in L[1:] if ge >= L[0]]) ) or L
7 Nisan 2010 Çarşamba
Python Sıralama İpuçları
0Python'da sıralama yapmak istediğiniz listeniz sayısal olarak değeri olan veri tiplerinden (sayılar,stringler) oluşuyorsa bu listeyi liste.sort() ile sıralamanız kolaydır.
Farklı veri tiplerinden oluşan bir listeyi sıralamak biraz daha farklı bir durum fakat Python'un sort'unun gücünden burada da faydalanmalıyız. Mümkün olduğunca(her zaman) bir sıralama algoritması yazmaktan kaçınmak pek çok açıdan yararlı. En önemlisi sort metodunun performanslı olması. Python'un sıralaması yıllarca Python ile birlikte gelişen, farklı durumlar için (değişik boyutlu listeler, sıralanmışlık derecesi çok ya da az olan listeler, ters sıralanmış listeler) performanslı, teknik açıdan anlaşılması güç yaklaşık 1200 satır C kodundan oluşan bir mergesort algoritması ve her durumda kullanılması geliştiricileri tarafından da tavsiye ediliyor.
Python'un sort metodunu artık her koşulda kullanmak istiyoruz. Bunu farklı veri tipinden oluşan listeler için kolay ve hızlı bir şekilde kullanmak için "Decorate-Sort-Undecorate" yöntemini kullanırız. "Decorate" listeyi sort metodu için uygun hale getirmek, "Sort" sıralama işlemini gerçekleştirmek, "Undecorate" ise listeyi tekrar eski görünümüne döndürmek anlamına geliyor. Burada bilmemiz gereken bir diğer nokta sort metodu arraylerden oluşan bir listeyi sıralarken arraylerin ilk elemanlarına göre karşılaştırma yapar. Örneğin [ (1,4,2) , (0,4,5), (3,0,"b") ] için sort metodu listeyi şu şekle sokar: [(0,4,5),(1,4,2),(3,0,"b")]. O halde "Decorate"den kastımız listeyi sıralanmasında karşılaştırılmasını istediğimiz değerler arraylerin başına gelecek şekilde değiştirmektir: [(deger1,nesne1),(deger2,nesne2),....., (degerN,nesneN)]
Problem:
Nesnelerden oluşan bir listeyi nesnelerin bir özelliğine göre sıralamak istiyoruz.
Decorate-Sort-Undecorate(DSU) çözümü:
nesneler = [nesne1,nesne1,nesne3,nesne4] decorated_liste = [(nesne.ozellik, nesne) for nesne in nesneler] # decorate decorated_liste.sort() # sort nesneler = [ array[1] for array in decorated_liste ] # undecorateProblem 2:
Dictionary(Sözlük) tipindeki bir nesnemizi sözlüğün anahtar verilerine göre sıralamak istiyoruz.
DSU çözümü:
Çözüm yine benzer fakat dictionary'lerin sıralanma gibi bir özelliği olmadığını unutmamalıyız. Sıralanmış değerlere yine bir liste içinden ulaşabiliriz.
sozluk = {int1:nesne1,int2:nesne2,int3:nesne3}
ogeler = sozluk.items() #decorate
ogeler.sort() #sort
degerler = [array[1] for array in ogeler] #undecorate (sıralanmış nesneler listesi)
12 Kasım 2009 Perşembe
Python'da Javascript Kodu Çalıştırmak
gezegen 0pyv8, Google tarafından geliştirilen ve Google Chrome'da da kullanılan V8 Javascript motoru için yazılmış bir çeşit wrapper. Bu sayede Python programları içerisinde gömülü olarak Javascript kodu çalıştırabiliyoruz. pyv8 V8 API'sini kullanarak çalıştırdığı Javascript kod parçacıklarının sonucu olarak dönen Javascript nesneleri ile Python nesneleri arasında bir köprü kurma görevini yerine getiriyor. Ayrıca Python'da oluşturduğunuz bazı özel sınıfları Javascript'e aktarıp orada kullanmanıza da olanak sağlayabiliyor.
>>> import PyV8
>>> ctxt = PyV8.JSContext() # bir javascript ortamı oluşturduk
>>> ctxt.enter()
>>> ctxt.eval("1+2") # javascript kodunu string argümanıyla çalıştırıyoruz
3 # dönen cevap bir python integerı
>>> class Global(PyV8.JSClass): # javascript ile uyumlu bir sınıf
... def hello(self): # bir javascript metodu
... print "Hello World"
...
>>> ctxt2 = PyV8.JSContext(Global()) # yeni javascript ortamımıza bu sınıfı dahil ettik
>>> ctxt2.enter()
>>> ctxt2.eval("hello()") # artık bu sınıfın metoduna javascript içinde erişebiliriz
Hello World # dönen cevap bir python nesnesi
Kütüphane kurulumu ve çalışması için Python haricinde programlara ihtiyaç duyduğu için kaynak dosyadan kurulumu bazı bağımlılıklar gerektiriyor. Bununla ilgili bir belge mevcut: http://code.google.com/p/pyv8/wiki/HowToBuild. Windows kullanıyorsanız çalıştırılabilir kurulum dosyaları ile tek adımda kurulabiliyor.
Javascript kodu yazarken kullandığımız onclick, XMLHttpRequest, window.open, document.url, DOM elementleri gibi özellikler Javascript'in özellikleri değildirler ve bunlar Javascript motorları tarafından sağlanmaz. Bu özellikleri tarayıcılar eklentiler ile sağlarlar. pyv8 ile bu değişkenleri kullanmaya çalıştığınız zaman tanımlı olmadıklarını belirten bir hata alırsınız.
8 Ekim 2008 Çarşamba
python tower of hanoi
programming, pygame, python, towers of hanoi 2
"Tower Of Hanoi" is a mathematical puzzle game. there are lots of python examples around but i couldn't find out one with a good UI.
As honoi solving depends on a recrusive function, it was hard to run UI and solve hanoi at same time. Pre-solving and running UI is seemed to be a solution but in big numbers of disks i would have to wait quite long time for solving. So i used python threading module and created one more thread for hanoi solver. It looks like this:
place x disk place y disk keeps going deeper... wait for ui y disk placed place z disk keeps going deeper... wait for ui zdisk placed wait for ui x disk placed
You need to have pygame installed to run code.
download hanoi.py
