Archive

Posts Tagged ‘Programlama’

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

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

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

Çıkmaz Demeyin Şansınızı Deneyin

January 22nd, 2008 Aşkın Yollu 1 comment

Bu girdi Burdaki girdiden esinlenilerek yazıldı.

E madem pyton ile sayısal kuponu yapılıyor biz niye scheme ile yapmayalım bunu demi:)
Probleme göre kod bana çok uzun geldi. Belki ilerde optimize edebilirim. Ama şimdilik böyle oynayalım demi:)

  1. (define (sayisal)
  2. (display "Oynamak istediginiz kolan sayisini giriniz: \n")
  3. (let ((kolon (read)))
  4. (do ((i 1 (+ i 1))) ((> i kolon))
  5. (let loop ((lst (list (+ (random 49) 1)))
  6. (sayi (+ 1 (random 49))))
  7. (if (= (length lst) 6)
  8. (printf "~a. kolon: ~a\n" i (sort lst < ))
  9. (if (member sayi lst)
  10. (loop lst (+ (random 49) 1))
  11. (loop (append lst (list sayi))
  12. (+ (random 49) 1))))))))
  13. (sayisal);burası kodun çalıştırılması için.
  14. ;aslında define kısmı çıkartılarak buna gerek kalmamayabilir
  15. ;ama ilerde belki başka birşey içinde kullanırım:)