15 Nisan 2011 Cuma

Planet Caravan

0

Uykusuz bir sınav gecesinde boşlukta uçmak...

4 Mayıs 2010 Salı

Staj @ Pardus

1

Hiç beklemediğim anda gerçekleşen bir olay oldu bu. O kadar emindim ki gerçekleşmeyeciğine bilgi işlemde staj yapmak için Necdet hocayla prensipte anlaşmıştık bile.

Stajı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

3


Orta 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ı

0

Python'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 ]             # undecorate
Problem 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

0

pyv8, 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

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