Archive

Archive for the ‘Programlama’ Category

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

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

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 :)

C ile Komut Satırı Argumanları ve Parametreleri

July 10th, 2009 Aşkın Yollu No comments

TerminalKomut satırı programları -h yada --help gibi parametreler alırlar. Bu alınan parametrelerin kolay kullanılması için getopt adında bir kütüphane yaratılmış. Bu kütüphane kullanlanılarak çok rahat böyle programlar yazılabilir.
Bende bunun için küçük bir örnek yazdım.
Örnek

Categories: Gezegen, Programlama Tags: ,

Çıkmaz demeyin şansınızı deneyin – 2

April 17th, 2008 Aşkın Yollu No comments

Buradaki yazımdan esinlenip yazdım bunu. Azıcık java öğrendim artık uygulama yapma zamanıdır. Eminim daha güzel (hatta belki benim ki iğrenç bi koddur(:) yazılabilir. Ama şimdilik bunu yapabiliyorum.

  1. public class Sayisal {
  2. int[] _kupon = new int[6];
  3. int _num;
  4. public Sayisal(){
  5. int sira = 0;
  6. while (sira < 6) {
  7. _num = (int) (1 + Math.random() * 49);
  8. if (!varmi(_kupon, _num))
  9. _kupon[sira++] = _num;
  10. }
  11. }
  12.  
  13. private boolean varmi(int[] kupon, int num) {
  14. for (int x: kupon) {if (x == num) return true;}
  15. return false;
  16. }
  17.  
  18. public String toString(){
  19. String kuponStr = "";
  20. for (int i = 0; i < 6; i++) kuponStr += (_kupon[i] + " ");
  21. return kuponStr;
  22. }
  23.  
  24. public static void main(String[] args){
  25. byte kuponSayisi;
  26. if (args.length == 0) kuponSayisi = 1;
  27. else kuponSayisi = Byte.parseByte(args[0]);
  28.  
  29. for (int i = 1; i <= kuponSayisi; i++){
  30. System.out.print(" " + i + ".kupon: ");
  31. System.out.println((new Sayisal()).toString());
  32. }
  33. }
  34. }

java Sayisal
şeklinde girerseniz tek kolon oynayacaktır. eğer
java Sayisal 4
derseniz 4 kolon oynayacaktır.
Sayısal Kaynak kodları.
Sayısal derlenmiş hali.

Categories: Programlama Tags: , , ,

Güzel bir java dökümanı

April 15th, 2008 Aşkın Yollu No comments

Bugun harıl harıl güzel bir java dökümanı arıyordum. Karşıma http://www.godoro.com çıktı. İçinde gayet güzel bilgiler bulunuyor. Şuraya da güzel bir java kitabı koymuşlar. Giriş için gayet hoş bir kitap olmuş, yeterince açıklayıcı ve bol örnekleri de koymayı unutmamışlar. Arkadaşlara yaptıklarından dolayı teşekür ediyorum. Kitabı çevrim dışı kullanmak isterseniz buradan indirip kullanabilirsiniz.

Categories: Programlama Tags: , ,