Zararın neresinden dönersen dön, dönek derler. -- Al Capone

Python, Fonksiyona Parametre Olarak Fonksiyon Geçirmek

May 1st, 2010 Aşkın Yollu No comments

Bu yazıyı asıl yazma sebebim parametre olarak geçirilen fonksiyona geçirilecek parametreler :)
Parametre olarak geçireceğimiz fonksiyonlar belli bir sayıda parametre alıyorsa yapacağımız iş basit,

Mesela:

  1. def Merhaba(isim):
  2. print "Merhaba %s" % isim

Bunun gibi sadece tek parametre alan bir fonksiyon için aşağıdaki gibi bir fonksiyon yeterli olacaktır.

  1. def BuyukAbi(func, param):
  2. func(param)
BuyukAbi(Merhaba, "kelebek")
Merhaba kelebek
 

Bu fonksiyon parametre olarak aldığı func fonksiyonuna param parametresini geçirecektir.
Eğer fonksiyonun aldığı parametre sayısı belirsiz ise, yani farklı sayıda parametre alan fonksiyonlarla uğraşmak gerekiyorsa yanına birkaç ekleme daha yapmamız gerekiyor.

  1. def BuyukBuyukAbi(func, param):
  2. func(*param)

param parametresi bir liste olmak durumunda. Geçirilen fonksiyon kaç parametre alıyorsa listenin uzunluğu okadar olmalı.

BuyukBuyukAbi(Merhaba, ["kelebek"])
Merhaba kelebek
 
  1. def HepinizeMerhaba(isim1, isim2):
  2. print "Merhaba %s, merhaba %s" % (isim1, isim2)
BuyukBuyukAbi(HerpinizeMerhaba, ["kelebek", "Aşkın"])
Merhaba kelebek, merhaba Aşkın
 

C ile Nesne Yaratmak

April 27th, 2010 Aşkın Yollu 1 comment

Evet kışkırtıcı bir başlık attım :)
Aslında yapacağımız olay bir structı nesne gibi kullanmak. Buna benzer bir kodu yıllar önce görmüştüm. O günden bu güne sürekli böyle bir şeyi nasıl yaparım diye araştırdım. Anca bugün çözebildim olayı ;)
Kodu aşağıda yorum satırıyla beraber veriyorum. Yorumlarda gerekli açıklamaları yaptım.

Bu yazıyla C-3PO nun ne lakası var diyebilirsiniz. C ile resim ararken karşıma bu çıktı, bende boş durmasın dedim :)

  1. /*
  2.  * Sınıfımızı yaratıyoruz
  3.  */
  4. struct _myobject {
  5. // alt alanlar
  6. int a, b;
  7. /*
  8.   * Metod
  9.   * Burada fonksiyon pointerı tanımlıyoruz
  10.   */
  11. int (*add)(struct _myobject*);
  12. };
  13.  
  14. // struct ön ekinden kurtuluyoruz
  15. typedef struct _myobject MyObject;
  16.  
  17. /*
  18.  * Asıl işi yapacak fonksiyonu tanımlıyoruz
  19.  * MyObject structını parametre olarak alıyor
  20.  */
  21. int realAdd(MyObject* a) {
  22. return a->a + a->b;
  23. }
  24.  
  25. int main ( void ) {
  26. /*
  27.   * Nesnemizi oluşturuyoruz.
  28.   * add pointerına fonksiyonu atıyoruz
  29.   */
  30. MyObject mo = {1, 2, realAdd};
  31. printf("A + B = %d\n", mo.add(&mo));
  32. return 0;
  33. }

Kodun başına stdio.h headerını eklemekte fayda var. WP sıkıntı çıkarttığı için silmek zorunda kaldım. Kodun düzgün halini burada bulabilirsiniz.

Categories: Gezegen, Programlama Tags: , , ,

Yeni Tema Yeni Heyecanlar

April 9th, 2010 Aşkın Yollu No comments

WordPressUzun bir aradan sonra temamı değiştirdim. Önceki temayı çok sevmiştim, hala da seviyorum fakat biraz sıkıldım ondan. Yazı alanı da küçük olunca vazgeçmek kolay oldu :)
Yeni temamı daha önce mutlaka görmüşsünüzdür. Çok sık kullanılan temalardan birisi. Hep hoşuma gitmişti kendisi. Kullanınca daha da hoşuma gitti :)

Categories: Günlük Tags: , ,

Gtk <= 2.18.9 Pencere Gizleme Sorunu

April 8th, 2010 Aşkın Yollu No comments

GtkGece gece uyku tutmadı var olan bir programı kurcalamaya başladım. Amacım programın sitem çekmecesinden çalışabilir hale getirmekti.

Her şeyi yaptım fakat bir türlü pencereyi gizleyemiyordum :) Doküman gtk_window_get_mnemonics_visible () fonksiyonunu kullanmamı söylüyordu, fakat kullandığım gtk sürümünde bu fonksiyon tanımlı değildi(2.18.7). Eski sürüm için olan dokümanı incelediğimde bu işi yapan bir fonksiyon yoktu.
Sistemde kurulu gtk ve python ile bu işi yapabiliyordum. Normal olarak c ile de yapabilmem lazımdı:)
Biraz inceledikten sonra, önce pencereyi gizleyen, ardından boyutunu eski haline getirip sonra tekrar gösteren bir fonksiyon olduğunu fark ettim. Benim istediğim işi yapıyor fakat yanında birde fazlalığı vardı.(gtk_window_reshow_with_initial_size)
İnternette biraz daha araştırıp umudumu kaybedince mecburen kaynak koda baktım.

grep -rHn gtk_window_reshow_with_initial_size *

bu komut bana gtk_window_reshow_with_initial_size fonksiyonun nerelerde olduğunu gösterdi.
Bu fonksiyonunun içine bakınca istediğim kodu hemen buldum :)

gtk_window_reshow_with_initial_size (GtkWindow *window)
{
  GtkWidget *widget;
 
  g_return_if_fail (GTK_IS_WINDOW (window));
 
  widget = GTK_WIDGET (window);
 
  gtk_widget_hide (widget);
  gtk_widget_unrealize (widget);
  gtk_widget_show (widget);
}

Önce pencereyi widgeta çevirebilme imkanım varmış, böyle basit bir şeyi nasıl bulamadım bilemiyorum.

Categories: Gezegen, Programlama Tags: , , , ,

Blogger’a Kendi Alan Adınızı Yönlendirme

April 8th, 2010 Aşkın Yollu No comments

BloggerDaha önce birkaç kez yapmıştım, fakat her seferinde neler yaptığımı unutup acaba olmadı mı diye kuşkulanmıştım. En güzeli böyle bir yere yazıp gerektiğinde kopya çekmek :)

Öncelikle bloggerda bir blogunuz olduğunu varsayıyorum :D
Blooger hesabımıza giriş yapıyoruz.
Şu adımları takip ediyoruz.
Özelleştir -> Ayarlar -> Yayıncılık -> Özel Alan-> Gelişmiş Ayarlara Geçiş Yapın
Buradaki kutuya alan adını yazın.
"Eksik dosya barındırma sistemini mi kullanıyorsunuz?" kısmını olduğu gibi bırakıp, kelime doğrulamayı yapıp ayarları kaydediyoruz.

Bu adımları geçtikten sonra google tarafında yapılacak ayarları tamamlamış oluyoruz.
Alan adınızın bloggera yönlenmesi için CNAME kaydı oluşturmanız gerekiyor. Bunu alan adını aldığınız yerden yapacaksınız.
CNAME kaydına değer olarak ghs.google.com adresini vermelisiniz. Domain firmanızın güncellenme hızına göre alan adının aktif olma süresi değişecektir.

Toplam 2 adımdan oluşuyor. Akılda tutmak kolay ama alan adının yönlenmesi biraz zaman aldığından dolayı insanın içinde bir şüphe oluyor her zaman :P

Categories: Gezegen, İnternet Tags: , , , ,

Bahar Temizliği

April 7th, 2010 Aşkın Yollu No comments

Blogda temizliğe gitmeye karar verdim. Şimdilik gereksiz kategorileri sildim. Zamanında tag nedir bilmezken birçok kategori eklemiştim. Şimdi gereksizliğinin farkındayım :)
Blogun ilk zamanlarından kalma alıntı yazıları da uçuracağım. Gerçi hepsine kaynak göstermiştim, ama benim olmayan yazıların burada ne işi var değil mi?
Blog ağırlıklı olarak linux ve programlama üzerine olacak. Belki bu günden sonra daha çok yazı yazarım :)

Categories: Günlük Tags: , , , ,

PyGtk ile Sistem Çekmecesi

April 7th, 2010 Aşkın Yollu No comments

GtkGtk ile çok kolay bir şekilde geliştirdiğiniz uygulamayı sistem çekmecesinde gösterebilirsiniz.

Ufak bir örnek kod veriyorum. Onun üzerinden anlatacağım.

  1. import pygtk
  2. import gtk
  3.  
  4. class ShowIcon:
  5. def __init__(self):
  6. self.icon = gtk.StatusIcon()
  7. self.icon.set_from_file('gtk.png')
  8. self.icon.set_tooltip_text('Hello Python!!!')
  9. self.icon.set_visible(True)
  10. self.icon.connect("activate", self.hello)
  11. gtk.main()
  12.  
  13. def hello(self, widget):
  14. print 'Hello Python !!!'
  15.  
  16. if __name__ == '__main__':
  17. icon = ShowIcon()

6. satırda asıl işimizi yapacak olan StatusIcon nesnesini yaratıyoruz.
7. satırda sistem çekmecesinde hangi ikonun görüntüleneceğini belirtiyoruz. set_from_file ikonu dosyadan alacağımız anlamına geliyor. Eğer gtk'nın sunduğu standart ikonları kullanmak istiyorsanız set_from_stock kullanmalısınız.

icon.set_from_stock(gtk.STOCK_ABOUT)

8. satırda ikonun üzerine geldiğimizde görünmesini istediğimiz yazıyı belirliyoruz.
9. satırda ikonun başlangıçtaki görünürlüğünü belirliyoruz. Bu satırı yazmasak da görünür başlıyor.
10. satırda ikonun "activate" sinyali aldığında çağırmasını istediğimiz metodu belirliyoruz. Kısacası üzerine tıklandığında ne iş yapacağını belirtiyoruz. "activate" yerine "popup_menu" yazarsak ikona sağ tıkladığımızda çağrılacak metodu belirliyoruz.
11. gkt.main() haydi yapalım şu işi manasında :)

Ayrıntılı dökümanı PyGtk Belgelerinde bulabilirisiniz. Yukarıda verdiğim kodu ve benim kullandığım ikonu buradan indirebilirsiniz.

Categories: Gezegen, Programlama Tags: , , , , ,

PyGtk ve Thread Sorunu

April 6th, 2010 Aşkın Yollu 3 comments

GtkPyGtk ile ara yüzüzünü hazırladığım bir program içinde thread kullanmam gerekiyordu. Kod çalışıyordu fakat thread işlemi istediğim gibi çalışmıyordu. Arayüzde bir değişiklik olduğu zaman thread çalışıyor, onun dışında hiç bir şekilde tepki vermiyordu.

Uzun süre hatanın kodda olabileceğini düşündüm. Ama sonunda python gtk.main() ve thread 3'lüsünü aynı sorgu içinde googleda aratınca cevabı buldum. Gtk'ya thread kullandığımı anlatmam gerekiyordu :)

gtk.gdk.threads_init()

Bu satırı kodumun başına eklediğimde herşey istediğim gibi çalışmaya başladı :)

Sizde böyle bir sorunla karşılaşırsanız aklınızda bulunsun :)