Sayfalar

Pazartesi, Mayıs 07, 2007

Bu Ülkenin Farkındamısınız !

Takib ettiğim forumların off topic yada sohbet kısımlarında rastlıyorum . Siyaset üzerine olan konularda başlıyor bir kapışma. Pek çok konuda hem fikir olan, gerektiğinde biribirlerinin yardımına koşan bu kişilere neler oluyor da böyle davranıyorlar ?
Bu sorunun cevabı için Cemil Meriç'e müracaat etmek lazım. Peki neler diyor Cemil Meriç

Pamuk ipliğinden biraz daha sağlam tek bağ: düşünce birliği. da rüzgarın her an tehdit ettiği bir kandil. Düşünce birliği, düşünen insanlar arasında olur. İnsanların kaçta kaçı düşünür? Düşünenlerin kaçta kaçı karşılaşır ve açılır birbirine.

Internet alemindeki sevyeli forumlar işte bence düşünen insanların karşılaşıp birbirlerine açılacağı yerelerdir. Oysa düşünce yerini slogana bırakıyor. Alın size kör döğüş sloganları her kesim kullanabilir
.... Elden gidiyor
Kahrolsun ... Yaşasın ...

üç noktayı kendi görüşünüze göre doldurup savurun düşmanın ! yüzüne .

Ellerinde birer mühür "bizdensin, bizden değilsin, solcusun, sağcısın"* gibi bir tespitte bulunmak gibi bir görevleri de vardı bazılarının. Siz kimdiniz, onlar kimdi? İki tarafta bu ülkenin insanlarıydı ama ya ideolojiler: "Sol-Sağ" çılgın sevgilerin ve şuursuz kinlerin emzirdiği iki ifrit.
oysa ki

karanlık kinlerin birbirine saldırttığı çılgın sürülerin savaş çığlığıdır slogan, ilkelin budalanın papağanın ideolojisidir. düşünce ile çığlık bağdaşmaz. şuurun sesi çığlık değildir. yabani bağırır. medeni insan konuşur.
ve Milleti biri birine düşüren aydınlarımızada bir çift lafı vardır Cemil Meriçin
her dudakta aynı rezil şikayet: yaşanmaz bu memlekette! neden? efendilerimizi rahatsız eden bu toz bulutu, bu lağım kokusu, bu insan ve makine uğultusu mu? hayır, onlar türkiye'nin insanından şikayetçi. insanından, yani kendilerinden. aynaya tahammülleri yok. vatanlarını yaşanmaz bulanlar, vatanlarını yaşanmazlaştıranlardır. türk aydını, kitab-ı mukaddes'in serseri yahudisi... hangi türk aydını? kaçanlar ne türk, ne aydın. bu firar bir kabil** kompleksi.
Yıllar evvel -tekrar tekrar - okuduğum Bu Ülke 'yi Bütün arkadaşlara tavsiye ediyorum.
Denize atılan bir şişe her kitap. Asırlar, kumsalda oynıyan birer çocuk. İçine gönlünü boşalttığın şişeyi belki açarlar, belki açmazlar.

Açın bu şişeyi Bu ülkenin farkında olmak için.


* Ben tarihden "Türkler Hilal taktiğiyle pek çok orduyu yendiğini " okudukça Hayret eder dururdum. Nasıl oluyorda aynı taktiği yiyorlar diye ? Şimdi düşünüyorumda Türklerinde bu konuda Diğer milletlerden bir farkı yok. Ta Hunlardan beri Türkleri Bölerek yıkıyorlar...
Doğu - Batı Hun, Doğu - Batı Göktürkler, şimdilerde devam ediyor Doğu - Batı taraftarları , İlerici -Gerici , Sağcı-Solcu, Cumhuriyetçi -Demokrat ,...
Bu böyle sürüp gider Ne demiş İstiklal Marşımızın şairi
Tarih tekerrürden ibarettir derler İbret alınsaydı hiç tekerrür mü ederdi?


** Kabil kardeşi Habili öldüren İlk Katil...

Salı, Mayıs 01, 2007

6. Linux ve Özgür Yazılım Şenliği




Linux ve Özgür Yazılım Şenliği ve Konferansı
3-6 Mayıs 2007
ODTÜ KKM, Ankara


Linux Kullanıcıları Derneği'nin düzenlediği ve Ortadoğu Teknik
Üniversitesi'nin destek verdiği 6. Linux ve Özgür Yazılım Şenliği 3-6
Mayıs 2007 tarihleri arasında ODTÜ Kültür ve Kongre Merkezi'nde
yapılacak. Bu sene ilk kez şenlikle birlikte Linux ve Özgür Yazılım
Konferansı'nı da gerçekleştirilecek.

Programdan Dikkatimi Çeken Konular

  • Qt ile Programlama İşbaran Akçayır
  • Python ve Web 2.0 Gökmen Göksel
  • Özgür Yazılım Lisanslarının Türkiye'deki Geçerliliği ve Yasal Süreç Mehmet Ali Köksal
  • Java programcıları için Pardus Mehmet D. Akın
  • Panel: Özgür yazılım ve Yasal Konular
  • PostgreSQL Toplantısı Rails İle Ağ Uygulamaları Geliştirimi Murat Arif Çeliker
  • Panel: Kurumların Linux ve Özgür Yazılımlara Geçişi
  • Yeni Başlayanlar için: Linux nedir Harun Şeker
  • Nasıl Pardus Geliştiricisi Olunur? A. Murat Eren
  • Kurumsal Linux Uygulamaları Mustafa Karakaplan
  • Linux ve Pardus Deneyimlerim Mehmet Sucu
  • Panel: Özgür Yazılım Para Kazandırır mı?
  • Python ile Python gibi Kod Yazma Gürer Özen
  • OpenCV ile görüntü işleme ve bilgisayarlı görme İsmet Yalabık
  • Tembel Penguenlere Çekirdek Programlama Faik Uygur
  • Açık Kaynak Kodlu Kütüphanelerle 3B Oyun Motoru Yazmak M. Yükselen, B. Sapaz, Ö. Gülderen, S. Yaşar
  • Gömülü Linux Geliştirme Yaman Çakmakçı
Hafta içi gidemiyeceğim. Pazar günü için gözüme kestirdiklerim
"OpenCV ile görüntü işleme ve bilgisayarlı görme" ve
"Açık Kaynak Kodlu Kütüphanelerle 3B Oyun Motoru Yazmak"
Bir de "Tembel Penguenlere Çekirdek Programlama" var ama malesef OpenCv ile aynı zamana geliyor...

Artık Kısmet

Cuma, Nisan 27, 2007

FANN Kullanımı


FANN yani Fast Artificial Neural Network Library Bir Yapay Sinir Ağı (YSA) Kütüphanesi.

YSA nın ne olduğunu bildiğinizi varsayıp. Basitçe kullanımını anlatmak istiyorum.
1) YSA oluşturulur
2) YSA Eğitilir
3) YSA Çalıştırılır.
4) YSA yı Tekrar Kullanama

1) Öncelikle Bir YSA oluşturmamız lazım
Kullanabileceğimiz Fonksiyonlardan biri fann_create_standard

struct fann *FANN_API fann_create_standard( unsigned int num_layers, ... )

YSA nın kaç katmandan oluştuğunu yazıp - num_layers -
Sırayla Giriş, Gizli Katman - yada Katmanlar - Çıkış Katmanlarının kaç birimden oluştuğunu yazıyoruz

Mesela :

5 giriş 2 çıkışlı Tek ve 7 birimlik Gizli Katmanlı bir YSA oluşturmak için

struct fann *ann = fann_create_standard(3, 5, 7, 2);

5 giriş 2 çıkışlı , 7 ve 3 birimlik olmak üzere 2 Gizli Katmanlı bir YSA oluşturmak için

struct fann *ann = fann_create_standard(4, 5, 7,3, 2);

ann işaretçisi artık bizim oluşturduğumuz YSA yı gösteriyor


2) YSA Eğitimi için Kullanabileceğimiz Fonksiyonlardan biri fann_train_on_file

void FANN_API fann_train_on_file(
struct fann * ann, // fann_create_standard ile almıştık
const char * filename, // Veri Dosya
unsigned int max_epochs,
unsigned int epochs_between_reports,
float desired_error
)


ann : fann_create_standard ile aldığımız bizim YSA mızı gösteren işaretçi
filename : Eğitim için kullanacağımız Veri Dosyasının adı
max_epochs : Eğitimin çalışacağı maksimum adım Sayısı
epochs_between_reports : Kaç Adımda bir Rapor verilmesi isteniyor
desired_error : Eğitim sonunda arzulanan hata miktarı

Bu fonksiyonu çağrılınca İsmini belirttiğimiz Dosyadan veriler alınır ve Hata miktarı istenen değere yada maksimum adım sayısına ulaşana kadar YSA eğitime tabi tutulur. Arada belirttiğimiz adımda rapor verilir. Eğer istenen hata değerine ulaşılamazsa eğitim başarısız olmuş olur.

Veri Dosyasının yapısı : Veri Dosyası dediğimiz şey Giriş ve çıkış değerlerinin bulunduğu basit bir text dosyasıdır.
Örnek Sayısı(N) Giriş(K) Çıkış (J)
G11 G12 G13 ...G1K
Ç11 Ç12 Ç13...Ç1J
G21 G22 G23 ...G2K
Ç21 Ç22 Ç23...Ç2J
....
GN1 GN2 GN3 ...GNK
ÇN1 ÇN2 ÇN3...ÇNJ

Mesela 3 Giriş 1 Çıkışlık 2 Örnekli bir veri dosyası

2 3 1
1 1 1
0
1 0 1
1

Eğitim öncesi Aktivasyon Fonksiyonlarını Ayarlamak istiyorsanız

fann_set_activation_function_hidden(
struct fann * ann,
enum fann_activationfunc_enum activation_function
)

fann_set_activation_function_output(
struct fann * ann,
enum fann_activationfunc_enum activation_function
)

Mesela
fann_set_activation_function_hidden(ann, FANN_SIGMOID);
fann_set_activation_function_output(ann, FANN_SIGMOID_SYMMETRIC);
gibi

Kendi rapor Fonksiyonumuzuda tanımlayabiliriz
void fann_set_callback( struct fann * ann, fann_callback_type callback )
Mesela

int FANN_API my_report(struct fann *ann, struct fann_train_data *train,
unsigned int max_epochs, unsigned int epochs_between_reports,
float desired_error, unsigned int epochs)
{
printf("Adım %8d. MSE: %.5f. Desired-MSE: %.5f\n", epochs, fann_get_MSE(ann),desired_error);
return 0;
}

fann_set_callback( ann, my_report );

3) Artık Eğitimini tamamladığımız YSA yı çalıştırabiliriz. YSA'nın çalışması demek Giriş değerleri verilerek sonuçta elde edilen çıkış değerlerini almak demektir
Bu iş için kullanacağımız fonksiyon fann_run

fann_type * FANN_API fann_run( struct fann * ann,
fann_type * input )

Yani YSA'yı giriş değerlerini içeren bir dizinin adresini gönderiyoruz.

Mesela 3 giriş 2 çıkışlı bir YSA için

fann_type *sonuc;
fann_type input[3]={1,1,0}; // giriş değerleri
sonuc = fann_run(ann, input);
printf("Çıkış Değerelri %f %f \n", sonuc[0], sonuc[1] );

4) YSA yı her kullandığımızda yukardekileri tekrar tekrar yapmamıza gerek yok. YSA eğitildikten sonra Kaydedip. Kullanacağımız zaman bu kayıttan yeniden YSA yı oluşturabiliriz.
Kaydetmek için fann_save Kullanımı çok basit

int fann_save( struct fann * ann, const char *FileName )

FileName kısmına bir Dosya ismi girip kaydediyoruz. Kayıt Geri dönüş değerine göre 0 ise başarılı -1 ise başarısız.

Kaydettiğimiz YSA yı tekrar yüklemek için fann_create_from_file fonksiyonu kullanılır.

struct fann * fann_create_from_file(const char *FileName)

Fonksiyon Kaydedilmiş Dosya ismiyle çağrılır.

Eğer YSA ile işimiz bittiyse fann_destroy kullanılarak hafızada YSA için kullandığımız alanlar boşaltılır.

void fann_destroy( struct fann * ann )

Mesela : YSA için İlk üç adımı yaptık kaydediyoruz

fann_save(ann, "YSA.net");
fann_destroy(ann);

Tekrar çağırıyoruz

fann_create_from_file("YSA.net");

Sonuç : Gördüğünüz gibi kullanımı hiç de zor olmayan bir kütüphane, Herşey çok kolay olacak da demiyorum ( bakınız Zeka Hakkında Kıssalı Yazılar - 3 )
Fakat
"Öldüm Mahvoldum Nereden aldım şu projeyi ..."
deyip de gözünüzü korkutacak bir şey de yok çekinmeyin araştırın sorun, deneyin, kullanın.

Çarşamba, Nisan 25, 2007

Levlake Mazharına 3



Seccadeden kumlardı…
………………………………
Devirlerden, diyarlardan
Gelip göklerde buluşan
Ezanların vardı!

Mescit mü’min, minber mümin…
Taşardı kubbelerden Tekbir,
Dolardı kubbelere “amin!”

Ve mübarek geceler, dualarımız,
Geri gelmeyen dualardı…
Geceler ki pırıl pırıl,
Kandillerin yanardı!

Kapına gelenler, ya Muhammed,
Uzaktan, yakından
Mü’min döndüler kapından!

Besmele, ekmeğimizin bereketiydi;
İki dünyada aziz ümmet,
Muhammed ümmetiydi.

Konsun -yine- pervazlara
Güvercinler;
“hu hu” lara karışsın
Aminler…
Mübarek akşamdır;
Gelin ey Fatiha’lar, Yasin’ler!

Şimdi seni ananlar,
Anıyor ağlar gibi…
Ey yetimler yetimi,
Ey garipler garibi;
Düşkünlerin kanadıydın,
Yoksulların sahibi…
Nerde kaldın ey Resul,
Nerde kaldın ey Nebi?

Günler, ne günlerdi, ya Muhammed;
Çağlar ne çağlardı;
Daha dünyaya gelmeden
Müminlerin vardı…
Ve birgün, ki gaflet
Çöller kadardı,
Halime’nin kucağında
Abdullah’ın yetimi,
Amine’nin emaneti ağlardı!

Hatice’nin koncası,
Aişe’nin gülüydün.
Ümmetinin gözbebeği,
Göklerin resulüydün…
Elçi geldin, elçiler gönderdin…
Ruhunu Allah’a,
Elini ümmetine verdin.
Beşiğin, yurdun, yuvan
Mekke’de bunalırsan
Medine’ye göçerdin.

Biz dünyadan nereye
Göçelim ya Muhammed?
Yeryüzünde riya, inkar, hıyanet
Altın devrini yaşıyor…
Diller, sayfalar, satırlar
(Ebu Leheb öldü) diyorlar:
Ebu Leheb ölmedi, ya Muhammed;
Ebu Cehil, kıtalar dolaşıyor!

Neler duydu şu dünyada
Mevlid’ine hayran kulaklarımız:
Ne adlar ezberledi, ey Nebi,
Adına alışkın dudaklarımız!
Artık, yolunu bilmiyor;
Artık, yolunu unuttu
Ayaklarımız!
Kabe’ne siyahlar
Yakışmamıştır, ya Muhammed,
Bugünkü kadar!

Haset, gururla savaşta;
Gurur, Kafdağı’nda derebeyi…
Onu da yaralarlar kanadından,
Gelse bir şefkat meleği…
İyiliğin türbesine
Türbedar oldu iyi!

Vicdanlar sakat
Çıkmadan yarına.
İyilikler getir, güzellikler getir
Adem oğullarına!

Şu gördüğün duvarlar ki
Kimi Taif’tir, kimi Hayber’dir…
Fethedemedik, ya Muhammed,
Senelerdir!

Ne doğruluk, ne doğru;
Ne iyilik, ne iyi…
Bahçende en güzel dal,
Unuttu yemiş vermeyi…
Günahın kursağında
Haramların peteği!

Bayram yaptı yabanlar:
Semave’yi boşaltıp
Save’yi dolduranlar…
Atını hendeklerden -bir atlayışta-
Aşırdı aşıranlar…
Ağlasın Yesrib,
Ağlasın Selman’lar!

Gözleri perdeliyen toprak,
Yüzlere serptiğin topraktı…
Yere dökülmeyecekti, ey Nebi
Yabanların gözünde kalacaktı!

Konsun -yine- pervazlara
Güvercinler;
“hu hu”lara karışsın
Aminler…
Mübarek akşamdır;
Gelin ey Fatiha’lar, Yasin’ler!

Ne oldu, ey bulut,
Gölgelediğin başlar?
Hatırında mı, ey yol,
Bir aziz yolcuyla
Aşarak dağlar taşlar,
Kafile kafile, kervan kervan
Şimale giden yoldaşlar?

Uçsuz bucaksız çöllerde,
Yine, izler gelenlerin,
Yollar gideceklerindir.

Şu Tekbir getiren mağara,
Örümceklerin değil;
Peygamberlerindir, meleklerindir…
Örümcek ne havada,
Ne suda, ne yerdeydi…
Hakkı göremiyen
Gözlerdeydi!

Şu kutu, cinlerin mi;
Perilerin yurdu mu?
Şu yuva-ki bilinmez,
Kuşları hüdhüd müdür, güvercin mi, kumru mu?-
Kuşlarını, bir sabah,
Medine’ye uçurdu mu?

Ey Abva’da yatan ölü
Bahçende açtı dünyanın
En güzel gülü;
Hatıran, uyusun çöllerin
Ilık kumlarıyla örtülü!

Dinleyene hala,
Çöller ses verir:
“Yaleyl!” susar,
Uğultular gelir.
Mersiye okur Uhud,
Kaside söyler Bedir.
Sen de, bir hac günü,
Başta Muhammed, yanında Ebubekir;
Gidenlerin yüzbin olup dönüşünü
Destan yap, ey şehir!

Ebubekir’de nur, Osman’da nurlar…
Kureyş uluları karşılarında
Meydan okuyan bir Ömer bulurlar;
Ali’nin önünde kapılar açılır,
Ali’nin önünde eğilir surlar.
Bedir’de, Uhud’da, Hayber’de
Hak’kın yiğitleri, şehid olurlar…
Bir mutlu günde, ki ölüm tatlıydı;
Yerde kalmazdı ruh… kanadlıydı.

Konsun -yine- pervazlara
Güvercinler;
“hu hu”lara karışsın
Aminler…
Mübarek akşamdır;
Gelin ey Fatiha’lar, Yasin’ler!

Vicdanlar, sakat çıkmadan,
Ya Muhammed, yarına;
İyiliklerle gel, güzelliklerle gel
Adem oğullarına!

Yüreklerden taşsın
Yine imanlar!
Itri, bestelesin Tekbir’ini;
Evliya, okusun Kur’an’lar!
Ve Kur’an’ı göznuruyla çoğaltsın
Kayışzade Osmanlar!

Na’tini Gaalip yazsın, Mevlid’ini Süleyman’lar!
Sütunları, kemerleri, kubbeleriyle
Geri gelsin Sinan’lar!
Çarpılsın, hakikat niyetine Cenaze namazı kıldıranlar!

Gel, ey Muhammed, bahardır… Dudaklar ardında saklı Aminlerimiz vardır!.. Hacdan döner gibi gel; Mi’raç’tan iner gibi gel; Bekliyoruz yıllardır!

Bulutlar kanad, rüzgar kanad; Hızır kanad, Cibril kanad; Nisan kanad, bahar kanad; Ayetlerini ezber bilen Yapraklar kanad… Açılsın göklerin kapıları, Açılsın perdeler, kat kat! Çöllere dökülsün yıldızlar; Dizilsin yollarına Yetimler, günahsızlar! Çöl gecelerinden, yanık Türküler yapan kızlar Sancağını saçlarıyla dokusun; Bilal-i Habeşi sustuysa Ezanlarını Davud okusun!

Konsun -yine- pervazlara
Güvercinler;
“hu hu”lara karışsın
Aminler…
Mübarek akşamdır;
Gelin ey Fatiha’lar, Yasin’ler!

Arif Nihat ASYA


Allah bizi şefaatına mazhar etsin ( Amiiin )

Pazartesi, Nisan 23, 2007

Levlake Mazharına 2


Avucunda küçük taşların zikir ve tesbih etmesi;
وَمَارَمَيْتَ اِذْ رَمَيْتَ
sırrıyla aynı avucunda, küçücük taş ve toprak, düşmana top ve gülle hükmünde onları inhizama sevketmesi;
وَانْشَقَّ الْقَمَرُ
nassı ile aynı avucunun parmağıyla Kamer'i iki parça etmesi;
ve aynı el, çeşme gibi on parmağından suyun akması ve bir orduya içirmesi;
ve aynı el, hastalara ve yaralılara şifa olması,
elbette o mübarek el, ne kadar hârika bir mu'cize-i kudret-i İlâhiye olduğunu gösterir.
Güya ahbab içinde o elin avucu küçük bir zikirhane-i Sübhanîdir ki, küçücük taşlar dahi içine girse, zikir ve tesbih ederler.
Ve a'daya karşı küçücük bir cephane-i Rabbanîdir ki; içine taş ve toprak girse, gülle ve bomba olur.
Ve yaralılar ve hastalara karşı küçücük bir eczahane-i Rahmanîdir ki, hangi derde temas etse derman olur.
Ve celâl ile kalktığı vakit, Kamer'i parçalayıp Kab-ı Kavseyn şeklini verir;
ve cemâl ile döndüğü vakit, âb-ı kevser akıtan on musluklu bir çeşme-i rahmet hükmüne girer.

Acaba böyle bir zâtın bir tek eli, böyle acib mu'cizata mazhar ve medar olsa; o zâtın Hâlık-ı Kâinat yanında ne kadar makbul olduğu ve davasında ne kadar sâdık bulunduğu ve o el ile biat edenler, ne kadar bahtiyar olacakları, bedahet derecesinde anlaşılmaz mı?..

Cumartesi, Nisan 21, 2007

Levlake Mazharına 1


Gönül hûn oldu şevkinden boyandım ya Resûlellah
Nasıl bilmem bu nîrâna dayandım ya Resûlellah
Ezel bezminde bir dinmez figândım ya Resûlellah
Cemâlinle ferah-nâk et ki yandım ya Resûlellah

Yanan kalbe devâsın sen, bulunmaz bir şifâsın sen
Muazzam bir sehâsın sen, dilersen reh-nümâsın sen
Habîb-i Kibriyasın sen, Muhammed Mustafâsın sen
Cemâlinle ferah-nâk et ki yandım ya Resûlellah


Gül açmaz, çağlayan akmaz, İlâhî nûrun olmazsa
Söner âlem, nefes kalmaz, felek manzûrun olmazsa
Firâk ağlar, visâl ağlar, ezel mestûrun olmazsa
Cemâlinle ferah-nâk et ki yandım ya Resûlellah

Erir cânlar o gül-bûy-ı revân-bahşın hevâsından
Güneş titrer, yanar dîdârının, bak, ihtirâsından
Perîşân bir niyaz inler hayatın müntehâsından
Cemâlinle ferah-nâk et ki yandım ya Resûlellah

Susuz kalsam, yanan çöllerde cân versem elem duymam
Yanardağlar yanar bağrımda, ummanlardan nem duymam
Alevler yağsa göklerden ve ben messeylesem duymam
Cemâlinle ferah-nâk et ki yandım ya Resûlellah

Ne devletdir yumup aşkınla göz, râhında cân vermek
Nasîb olmaz mı Sultânım haremgâhında cân vermek
Sönerken gözlerim âsân olur âhında cân vermek
Cemâlinle ferah-nâk et ki yandım ya Resûlellah

Boynu büktüm, perîşânım, bu derdin sende tedbîri
Lebim kavruldu âteşden döner pâyinde tezkîri
Ne dem gönlüm murâd eylerse taltîf eyle Kıtmîri
Cemâlinle ferah-nâk et ki yandım ya Resûlellah

Diyamandi Yaman Dede*
* Kayseri’inin Talas ilçesinde Rum esnaflardan iplik tüccarı Yuvan Efendi ile Afurani Hanımefendinin oğlu Diyamandi Yaman Dede'nin hikayesini de okumayı da unutmayın

Cuma, Nisan 20, 2007

Cross-Platform Programlama 5

Diğer Cross-Platform Kütüphaneler

İhtiyacımız sadece GUI ve Database olmadığına göre tespit ettiğim diğer kütüphanelere de bir göz atmanızda fayda var.

LibCurl : Internetle olan pek çok işinizde kullanabileceğiniz bir kütüphane.
FTP , FTPS, HTTP, HTTPS, TELNET, DICT, FILE ve LDAP gibi protokolleri
destekler.Ücretsiz dağıtılan istemci taraflı , güçlü ve kullanımı basit URL transfer
kütüphanesidir. libcurl HTTPS sertifikalarını http POST , HTTP PUT , FTP ile dosya aktarımı kerberos , http form tabanlı dosya aktarımı , Proxy , cookies ( çerezler ) , kullanıcı doğrulaması (user + password authentication ) , dosya transferi tekrarı ve daha bir çok yöntemi destekler.
Libcurl bir çok platformda çalışmak üzere tasarlanmıştır. Solaris, NetBSD, FreeBSD,
OpenBSD, Darwin, HPUX , IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS ve daha bir çok işletim sistemi üzerinde kullanılabilir.
libcurl , ücretsiz , hızlı , IPv6 uyumlu , ve daha bir çok zengin özelliğe sahip olan bir
kütüphanedir. *

Audiere : Blog'umu takip ediyorsanız okumuşsunuzdur. Ses kütüphanesi Ogg Vorbis, MP3, FLAC, sıkıştırılmamış WAV, AIFF, MOD, S3M, XM, ve IT ses dosyalarını çalabilirsiniz. Linux ve windows üzerinde kullanabilirsiniz. BluePlayer da Audiere kütüphanesi kullanılarak yazıldı.
Kullanımı ile ilgili yazı Audiere Ses kütüphanesi kullanımı

Irrlicht: 3D oyun programlama için kullanabileceğiniz bir kütüphane bakınız Code Blocks ile Irrlicht 1, 2, 3, 4, 5, 6,7, 8

Allegro : Oyun programlamayla ilgili bir başka kütüphane bakınız Code Blocks ile Allegro kullanmak

OpenCV: Intelin sponsorluğunda geliştirilen ücretsiz bir Görüntü işleme kütüphanesi. Fakat sadece Görüntü işleme kütüphanesi değildir bakınız . Özellikler CodeBlocks ile OpenCV Fl_OpenCV
FANN : FANN bir Yapay Sinir Ağı - Artifical Neural Network- kütüphanesi
bakınız Code Blocks ile Yapay Zeka ! , Harf Tanıma Bir YSA uygulaması


FGA : FGA sadece tek bir başlık dosyasından -fga.h- oluşan kullanımı kolay template library. Eğer thread kullanmazsabız başka bir şey istemiyor sadece include etmeniz. fakat destek olmak lazım deneyip hataları yada eksiklikleri varsa bildirmek lazım. Bakınız 1, 2, 3, 4

TinyXML: xml parser

SDL: Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer.

OpenGL: İsmini duymayanınız yoktur herhalde, GLUT yada FLTK ilede kullanabiliyorsunuz
Bakınız : 1, 2, 3, 4

Sonuç : Ihtiyacınıza göre daha pek çok kütüphane bulabilirsiniz. Gözünüz korkmasın RAD ortamlarına alışmışsanız başlangıçta size zor gelebilir. Fakat Bütün kütüphaneleri dört dörtlük kullanıyor olmanıza gerek yok, Kütüphaneleri genel olarak tanımanız yeterli ihtiyaç duyduğunuz da hangisini kullanmanız gerektiğini bilip o konuda yoğunlaşırsınız.

Perşembe, Nisan 19, 2007

Cross-Platform Programlama 4

Cross-Platform Kütüphaneler

Artık Cross-Platform bir IDE seçtiğimize göre şimdi ihtiyacımız Cross-Platform Kütüphaneler.
Pek çok konuda değişik lisanslar altında yazılmış kütüphaneler var. Bu kütüphanelerin çoğuna Freshmeat den ulaşabilirsiniz.

İyide bunlardan hangisini seçeceğiz istemediğimiz kadar çeşit var. ?

* Tabiri caizse her kütüphanenin bir camiası var. O kütüphaneyi ne kadar çok insan kullanırsa o ölçüde gelişir, geliştiricilerin birisi ayrılsa ikisi gelir, devamlı güncel kalır. Tersi bir durumda da önce kütüphanenin gelişimi durur, sonra kullanan kalmaz ölür. - Açık kaynak kodlu pek çok program için bu geçerli -.

* Kütüphanenin Lisansına diikkat edin. GPL lisansa sahip bir kütüphane kullanarak program yazdığınızda kodu kapatamazsınız. Kodu dağıtmak istemiyorsanız ya LGPL veya BSD benzeri lisansa sahip kütüphanelri kullanmanız lazım.

* İhtiyaçlarımıza göre bir seçim yapmamız lazım Başlıca ihtiyaçlarımız takdir edersiniz ki Kullanıcı Arabirimi GUI ve Veritabanı dır.

Belli başlı Cross-Platform GUI Kütüphaneleri.


1) MWT (Multi-Platform Widget Toolkit) : WideStudio IDE de bahsi geçmişti.

2) U++ : Ultimate++ IDE bahsi geçmişti.

3) Qt : 1, 2
GUI Builder : QtDesigner
Örnek Program : KDE, Opera
Lisansı : GPL yada baya bir ücretli


4) GTK+ : 1, 2
GUI Builder : Glade
Örnek Program : GNOME , GIMP
Lisansı : LGPL

5) wxWigets : 1, 2
GUI Builder : wxSmith - CodeBlock Eklentisi -, DialogBlocks, wxDesigner,...
Örnek Program : Code::Blocks , VLC media player
Lisansı : LGPL gibi

6) FLTK : 1, 2
GUI Builder : Fluid
Örnek Program : Cinepaint, Nuke, BluePlayer :)
Lisansı : LGPL

7) FOXToolkit :1
GUI Builder : ?
Örnek Program : LinkCAD,ABAQUS/CAE
Lisansı : LGPL

Seçiminizi yapmadan önce şu yazılara bir göz atın

* Platform Independent Software Develoment
* GUI Toolkits for The X Window System

Benim tavsiyemi sorarsanız wxWidgets yada FLTK

Belli başlı Cross-Platform ücretsiz Veritabanı Kütüphaneleri.


1) IBPP : FireBird için C++ ile yazılmış

2) Sqlite : C ile yazılmış gömülü bir Veritabanı sistemi

3) libpq : PostgreSQL için C ile yazılmış

Devam edecek...

Salı, Nisan 17, 2007

Cross-Platform Programlama 3







Ücretsizdir.
Wxwidgets kullanılarak yazılmıştır.
CodeBlocks crossplatform - Windows , Linux, MacOs, FreeBsd ...-
Kullanmak istediğiniz derleyiciyi kendiniz seçebilirsiniz.
Desteklediği Derleyiciler
o GCC (MingW / Linux GCC)
o MSVC++
o Digital Mars
o Borland C++ 5.5
o Open Watcom
o Intel C/C++
o SDCC 1
o Digital Mars D Compiler 2
o GNU ARM GCC

Pek çok kütüphane kullanımı için yazılmış hazır proje şablonları var.
Proje kullanımı oldukça kolay.
Eklentileriyle -Plugins- ile pek çok özelliğe sahip
Oyun oynaya biliyorsunuz. BYO Games -Tetris ve Snake -
DevPak indirip kurabiliyorsunuz
Code Profiler : GProf için kullanıcı arabirimi
Source Exporter : Syntax highlighted kodunuzu HTML, RTF, PDF olarak kaydetmenize yarar
Class wizard, Code Snippets, vs vs ...

CodeBlocks' denemek istiyorsanız dikkat etmeniz gereken şeyler var.
C::B'nin web sitesinde RC2 için download linki var ki Programın oldukça eski- 2005 - bir versiyonu Nedendir bilinmez geliştirciler RC3 ü bir türlü duyurmadı. Ama günlük olarak derlenmiş paket olarak yayınlamaya devam ediliyor. Eğer C::B'yi kullanmak istiyorsanız.

Windows için :
Bir Kullanıcının - Lawrence Goetz - hazırladığı setup programını tavsiye ederim.

1) Mingw yi Kurun
2) CodeBlocks'u Kurun
3) Günlük Derlenmiş Paketi -Nightly Builds - indirip Kurduğunuz CodeBlocks üzerine açın windows için Nightly Builds 7z dosyası olarak yayınlanıyor. 3

Linux için :
Günlük Derlenmiş Ubuntu, Suse ve Fedora için paketleri
her zaman olmasada sıklıkla yayınlanıyor. - Nightly Builds -
yada bu sayfaya bir göz atın.
Compiled packages of Code::Blocks
Bu paketler işinizi görmezse
Bakınız : Installing Code::Blocks from source on Linux

Kaynak koddan kurulum yapmak için gerekenlerin anlatıldığı wiki sayfası
* Installing Code::Blocks from source on FreeBSD
* Installing Code::Blocks from source on Gentoo
* Installing Code::Blocks from source on Linux
* Installing Code::Blocks from source on Mac OS X
* Installing Code::Blocks from source on RPM based distributions
* Installing Code::Blocks from source on Solaris
* Installing Code::Blocks from source on Windows
Category:Installing Code::Blocks from source
...
Sözü fazla uzatmaya gerek yok C::B benim tercih ettiğim IDE oldu. Şimdi sıra geldi ikinci aşamaya Cross-Platform Kütüphanelere...

Devam Edecek ...

1 SDCC : SDCC is a retargettable, optimizing ANSI - C compiler that targets the Intel 8051, Maxim 80DS390, Zilog Z80 and the Motorola 68HC08 based MCUs. Work is in progress on supporting the Microchip PIC16 and PIC18 series. SDCC is Free Open Source Software, distributed under GNU General Public License (GPL).
2 D : C nin tahtına C++ oturdu C++ ın tahtına kim oturacak Java, C# ve D üçüde tahta talip ilk ikisi duymuşsunuzdur. bu da üçüncüsü D is a systems programming language. Its focus is on combining the power and high performance of C and C++ with the programmer productivity of modern languages like Ruby and Python. Special attention is given to the needs of quality assurance, documentation, management, portability and reliability. -
3 Daha Kendisi çıkmadan uyumsuzlukları çıkan Windows Vista Mingw ile de bir uyumsuzluk problemi çıkartıyor eğer Vista kullanıyorsanız *
- MingW yi C:\MinGW dizinine kurun
- Bazı dosyaları bulamayacak o dosyaları aratın
buluduğu yer C:\MinGW\libexec\gcc\mingw32\3.4.5 gibi bir yerde olacak
bu path'ı Compiler settings deki Additional Paths kısmına ekleyin

Çarşamba, Nisan 11, 2007

Cross-Platform Programlama 2

Çoook yoğun ilgi ! ve istek üzere yazı dizimize devam ediyoruz.

Eveeeet C++ kullanarak cross-platform uygula geliştirmenin ilk adımını atalım. Cross-Platform bir IDE bulmak. Değişik alternatifler var, ve Tersten başlayarak bahsetmek istiyorum. Tersten yani tercih etmediklerimden pek tabii ki Benim kullanmadığım sizin beğeneceğiniz bir alternatif olabilir.

1) WideStudio : Japonlar yapmış abi ya ! :)
Açık kaynak kodlu ve tamamen Japon yapımı bir IDE Eğer kendi bileşen kütüphanesini yani
MWT(Multi-Platform Widget Toolkit) kullanırsanız, Pek çok platformda programınızı çalıştırabiliyorsunuz.

Desteklediği Platformlar
# Derlenen Ptogramlar için Desteklediği Platformlar
* Windows95,98,ME
* WindowsNT,2000,XP
* WindowsCE
* Linux 2.0 veya üstü
* Linux 2.4 veya üstü (f.b. direct)
* mu-CLinux (X11 olmasada )
* MacOS X
* T-Engine
* ZAURUS(Emblix Linux X11 olmasada)
* ITRON
* FreeBSD
* SOLARIS 2.5 veya üstü

# IDE yi Çalıştrabileceğiniz Platformlar
* Windows95,98,ME
* WindowsNT,2000,XP
* Linux 2.0 veya üstü
* FreeBSD
* MacOS X
* SOLARIS 2.5 veya üstü
C / C++ 'ın yanında Java, Perl , Ruby , Python veya Objective Caml ile de uygulama geliştirebilirsiniz.

Hatırı sayılır bir bileşenede sahip bakınız

Ben WideStudio'nun windows vesiyonunu indirdim ve deneme yaptım. Hayal kırıklığına uğramadım desem yalan olur. Her ne kadar IDE olarak geçse de dışardan sizin belirleyeceğiniz bir editör ile kod yazmak zorundasınız.

2) Ultimate++ :







Açık Kaynak kodlu Bir IDE. Kendine has ve cross-platform U++ bileşen setine sahip ve U++ kullanılarak yazılmış. Şimdilik Windows ve Linux versiyonları var FreeBSD için çalışmalar bitmek üzereymiş. MacOS için çalışmalar devam ediyormuş.
U++ Bileşen Listesi için bakınız : U++
Ultimate'in sitesinde diğer bileşen (Qt , Java/Swing, wxWidgets ) setleriyle U++ kaşılaştıran bir kısım var. Burada göreceğiniz gibi aynı uygulama daha kısa kod ile yazılıyor! Bunuda kendi tabirleriyle söylersek
Rapid development is achieved by the smart and aggressive use of C++ rather than through fancy code generators. In this respect, U++ competes with popular scripting languages while preserving C/C++ runtime characteristics.
şeklinde başarıyorlarmış. İşin açıkçası Ben bu programı indirip denemedim bile, Çünkü yazılan kodları görünce C++ agrasif kullanımı gözümü korkuttu.

3) Dev C++ :

Meşhur Dev C++ için Windows ciddi bir alternatif olmasına rağmen Büyük bir handikapı var,
Dev C++ Delphi ile yazılmıştır ve bu haliyle diğer platformlarda çalışması zordur.
Burada bahsediş sebebim Devpak'a vesile olmasındandır. Pek çok ücretsiz programla-kütüphanesi olmasına rağmen kullanımamasının başlıca sebebi derlenmiş paket halinde bulunulmaması ve ortak bir kullanım yapısının olmamasıdır.
DevPak sistemiyle
* 2d Graphics
* 3d Graphics
* Animation
* Audio
* Compression
* Cryptography
* Database
* DirectX
* Documentation
* Font Library
* GUI
* Image Manipulation
* Logging
* Mathematics
* Networking
* Scripting
* String Manipulation
* Text console
* Utilities
* Video
* XML
gibi pek çok konuda hazır derlenmiş kütüphaneleri DevC++ ' a adapte edebiliyorsunuz.
Sonuç olarak "Dev-C++ for Linux" - alpha statüsünde- çıkmadığı sürece cross-platform programlama açısından işimize yaramaz.

4) V IDE :
V diye bir bileşen setiyle yazılmış Açık kaynak kodlu ücretsiz bir IDE. Linux ve Windows versiyonları var. Fakat uzun süredir güncellenmiyor. Sitesindeki en son duyuru 20 Nisan 2003 de VIDE 2.00 çıkması. Geliştirmesi, durmuş olanlara yanaşmayın.

5) Mingw Developer Studio : WxWidgets ile yazılmış Linux Windows ve FreeBSD versiyonu olan ücretsiz bir IDE. Fakat Bu IDE'nin de en son güncellemesi 2005 yılında olmuş. Geliştirmesi, durmuş olanlara yanaşmayın.

Devam edecek - İnşalllah -

Pazartesi, Nisan 09, 2007

Cross-Platform Programlama 1



Cross-platform programming yada Multi Platform Programming ile Yazdığımız bir programı birden fazla işletim sistemin ve işlemci ile çalıştırmayı kastediyoruz.

Hem Linux Hem de Windows altında çalışan birkaç program yazdığımıza göre bu konuda ahkam kesebiliriz. Keseceğimiz Ahkam Bilgimizin deryalığından değil elimizdekini paylaşma arzusundandır.

Konuya başlamadan önce Programların çalıştırılma şekillerine göre bir sınıflandırma yapmak istiyorum.
- Derlenerek çalıştırılan programlar - Compiler-
- Yorumlanarak çalıştırılan programlar - Interpreter -
- Yarı Derlenip Yarı yorumlanarak çalıştırılan programlar
Derleyici ne yapar ? : Kaynak kodu (Source Code) makine koduna (Machine Code) çevirir Yani programımız derlenerek sonuçta O makinanın koduna (Intel yada Risc vb) ve İşletim sisteminin çalıştırılabilri dosya tipine (PE, Elf ...) çevrilir. derlenmiş programların avantajı -hız açısından- İşlemci tarafından direk olarak çalıştırabilmesidir. Bu tipteki Dillere örnek vermek istersek C, C++ Pascal,... Programın başka bir işletim sisteminde yada makinada çalışa bilmesi için O platformda derlenemesi -derlenebilmesi- gerekir. Bu da ancak cross-platform kütüphanelerle mümkün olabilir. Mesela : WxWidgets, FLTK, QT, GTK,...

Yorumlayıcı ne yapar peki ? : Kaynak kodu Kendisi çalıştırır. Bu durumda sizin programın çalıştığı platformla ilginiz kalmaz. Programınız Yorumlayıcının çalıştığı heryerde çalışır. Fakat Programınızı Kod olarak dağıtmanız gerekir. Yorumlanarak çalışması da yavaşlık getirir.

Yarı Derleme Yarı yorumlama diyerek kastettiğim Java ve .Net - Aslında Mono - dir. Şatafatlı pek çok tanımlamanın dışında benim anladığım kadarıyla Kaynak Kod Ara bir koda derleniyor. ve Bu ara kod değişik platformlarda yorumlayıcılar - Java Virtual Machine yada .Net framework - yardımıyla çalıştırılıyor. Bu nisbi derleme sayesinde -Derlenmiş programlar kadar olmasada - hızlı çalışan programlar üretebiliyorsunuz. Fakat Programınızın derlemiş olmanıza rağmen Decompiler ile çok rahat Kaynak koduna ulaşılabiliniyor.

Sonuç:
Aşırı hız bağımlısı bir program yazmıyorsanız 1, kolaylıkla değişik platformlarda çalıştırmak 2, Kısa yoldan ticari program yazmak 3 ve Az birazda kodunuz gizlemek istiyorsanız. 4 Üçüncü seçeneği size öneririm.

Java mı Mono mu Derseniz ?
Eğer Basic Yada Pascal biliyorsanız ve yeni bir dil öğrenmekle uğraşmak istemiyorsanız tavsiyem Mono. .Net'in bir avantajı bu zaten desteklenen pekçok dil var Mesela Pascal için oldukça iddialı bir ürün var Chrome 1 2 Eğer Ben bir Pascal programcısı olsam muhakak denerdim.
Eğer C++ biliyorsanız, Java da C# da c++'a yakın diller.

Yok kardeşim Derlemeyi hiç bir şeye değişmem derseniz bu konuda epey bir araştırma yapmanız lazım. Ben bir kaç örnek vermek istiyorum.
Basic için RealBasic , SmalBasic
Pascal için Lazarus

C++ için benim seçtiğim yol :
Cross-Platform bir IDE + Cross-Platform Kütüphaneler
...
devam edecek

1 Makina koduna çevrilmiş programa göre daha yavaştır
2 Taşınabilirliği için siz uğraşmazsınız yorumlayıcılar yapar
3 Pek çok kütüphane bu tipte kullanım için adapte edilmiş ve standartlaştırılmış halde önünüzde durur
4 Kodunuzu derlediğiniz için ancak decompilerla ancak kodunuza ulaşıla bilir

Pazartesi, Nisan 02, 2007

Bug küçüktür ama İnsan öldürür !

Kasım 2000 Panama City Milli Kanser Enistüsünde Multidata Systems International şirketi tarafından hazırlanan yazılım, hastalar için uygun radyasyon dozajını yanlış hesaplar. Sonuç : Yanlış uygulanan terapi yüzünden En az Sekiz hasta ölür, 20'den fazlasında da ciddi sağlık problemleri oluşur.* Kendi yazdığınız programlar bu kadar ciddi problemlere sebep olmasada,** Pek çok insanın programlamadan soğumasına sebep olabiliyor. Gün geçmiyorki yeni arkadaşların
- Ya şu programın hatası ne
- Programı yazdım ama düzgün çalışmıyor.
- Örneğin aynısını yazdım çalışmıyor.
...

gibi sızlanmalarına rastlamayalım. Çünkü pek çoğu debugger kullanımını bilmiyor.

CodeBlocks için basitçe anlatmak istiyorum

Build target kısmında Debug ve Release olmak üzere iki seçenek var. Debug edebilmek için Build target Debug olarak ayarlayıp derlemelisiniz. Bu şekilde derleme esnasında "-g Produce debugging symbols" seçeneği aktif hale getirilir. Project->Build Options Compiler settings de görebilirsiniz. Dikkat Programınız kullanıma hazır hale gelince Release olarak derleyip öyle dağıtın.

Debug için elimizdeki imkanler nelerdir diye menüden debug kısmına bakıyoruz.



Yada Araç çubuğundaki Debugger kısmına da baka bilirsiniz

Start : F8 kısa yol tuşuyla Debuger başlatılıp program çalıştırılabilirsiniz.


Continue : Ctrl+F7

Durdurduğunuz -mesela break point ile- yerden çalışmasına devam ettirmek için Araç çubuğundaki Continue düğmesini kullanın.


Stop:

Debug işlemini sona erdirir.

Run to Cursor : F4

Programda kontrol etmek istediğiniz kısma ulaşmanızı sağlar. Bir satır seçip F4 tuşuna basınca debugger o satıra kadar programı çalıştırır. O satıra gelince durur.

Next Line : F7
Programı Satır satır çalıştırır.


Next Instruction : Alt+F7
Programı Assembly Halinde komut komut çalıştırır.

Step Into : Shift+ F7

Çalıştıracağımız satır bir block girişi ya da fonksiyon çağrımı ise oranın içine girerek çalışır

Step Out: Ctrl+Shift+F7


Çalıştıracağımız satırın bulunduğu block ya da fonksiyondan çıkana kadar çalışır




Watches :





Resimlerde de görebileceğiniz gibi Watches ile o andaki değişken değerlerini görebilirsiniz, değiştirebilirsiniz.

Breakpoints : F5
Breakpoint programın çalışmasının durdurulacağı yerleri işaretlememize yarar. F5 ile işaretleyip F5 le kaldırabiliriz. Sağ tıklayarak Edit breakpoint seçeneğinden bazı ayarlamalarda yapılabilir.

Aşağıdaki görüntülerde gördüğünüz gibi kullanılabilecek pek çok özellik daha var. Çekinmeyin kurcalayın, deneyin En güzel bu şekilde öğrenilir.


*History's Worst Software Bugs
** İnsanların ölmesine sebep olmayalım ama Pek ala bizde Tıbbi cihaz üretebiliriz. Pek çoğu Elektronik sensörlerden alınan verilerin PC lerde işlenmesi şeklinde çalışıyor.

Cumartesi, Mart 31, 2007

Sabahı Bekleyen Adamı bekleyen adam

Sabahı bekleyende kim olaki derseniz Hasta sabahı beklermiş efendim.
Hasta için sabah olmazmış bir türlü
Babamın geçirdiği ciddi bir rahatsızlık sebebiyle bir haftadır, "Sabahı Bekleyen Adamı bekleyen adam" durmundayım. Şifa dualarınıza muhtacız, bekleriz.

Cumartesi, Mart 10, 2007

Böcek Avı yahut Debugging





Debugging kelime manası Böceklerden arındırmadır. Hikayesi de 1945 de Mark II adlı Askeri devasa bilgisayarlarında programların düzgün çalışmasını engelleyen gerçek, fiziksel bir böcek bulan Dr. Grace Murray Hopper bilgisayar hatası anlamına da gelen "böcek" ("bug", "debugging", vs.) terimini de kültürümüze armağan etti. Yukardaki resim O ilk Bug'a ait.
Ben hata ayıklama diyeceğim. Ve Basit bir örnek vereceğim.

Genetik metodla 4 Bilinmiyenli Denklem Çözümü yazımın sonunda "FGA'nın Threadlı versiyonunu kullanın düz olan kısmında problem var." demiştim. Bu konuda FGA nın yazarına
e-posta attım. Bir süre sonra cevap geldi. özetle
"Hata ayıklamak için yeterli vaktim yok ama zannederim problem sizin yazdığınız fonksiyonlardaki hafıza yönetim kısımlarındadır."
diyordu. Bu durum da iş başa düşmüştü. Bir fırsat bulduğumda kolları sıvadım.
Yaptıklarım adım adım yazıyorum.

1) CodeBllocks 'da Denklem projesini açıyoruz.
2) Programın Build Target kısmını Debug olarak seçili olup olmadığına bakıyoruz Debug değilse Debug olarak seçip tekrar derliyoruz.
3) F8 ile yada Menüden Debug ->Start ile çalıştırıp Hata ayıklamaya başlıyoruz.
4) Program bir süre sonra Program received signal SIGSEGV, Segmentation fault
hatasını veriyor.

5) Backtrace 'i görmek siteyip istemediğimizi soruyor evet deyip CallStack penceresine geçiyoruz.

6) hata memcpy () fonksiyonunda oluşmuş. sebep olan satıra tıklayıp koda ulaşıyoruz
memcpy(child0, parent0, length * sizeof(GeneType));
7) Demek ki child0 yada parent0 işaretcilerinden -pointer- biri yada her ikisi NULL
8) Kodda biraz yukarıya çıkıp bakıyoruz ki child0'ın değeri new ile alınmış, hafızayı bukadar kısa süre de tüketmiş olamıyacağımızdan parent0 işaretçisine yöneliyoruz. parent işaretçisi değerini select fonksiyonundan alıyor.
9) CodeBlocks'un imkanlarından faydalanarak ilgili yere zıplayıveriyoruz.

10) Bir de ne görelim

inline GeneType *Population::select()
{
switch (select_type) {
case SELECT_UNIFORM:
return select_uniform();
default:
float choice = (float)rand() / RAND_MAX * total_score;
float position = 0;
for (int i = 0; i <>= choice)
return chromosome[i];
else
position += score[i];
}
return NULL;
}

switch'in default kısmında for döngüsüyle seçimin muhakkak yapılacağı varsayılmış seçim yapılmadığı durumda fonksiyon NULL değerini döndürüyor.

11) Emin olmak için return NULL; satırından önce puts("Returning NULL!!!"); satırını ekleyip. Menuden Debug->Stop Debugger ile debugger'ı durduruyoruz.

12) Yeniden, derleyip çalıştırıyoruz. Ve program çakılmadan önce bizim yazdığımız mesajı alıp
Emin oluyoruz. Vee Mutlu son.

Bundan sonrası için konuyu detayıyla yazıp Presto'ya mail attım.

ve cevabını buraya orjinal haliyle alıyorum.

the problem is the following:
sometimes the fitness function returns that small values around 10^-39 and so, if "choice" is maximum, "position + score[i]" never reaches choice this is due to a limit of binary representation of floating point
numbers on computers: they have to be approximated because not all
rational numbers can be represented
try to compile and execute this code and you'll know what I mean:


#include
using namespace std;

main()
{

float sum = 0.0;
for (int i = 0; i <> sum += 0.001;
if (sum == 1)
cout << "sum is exactly 1" <<>
else
cout << "sum is NOT exactly 1" <<>
cout << "sum is " <<>
cout << "but 1000 * 0.001 is " <<>
}


so, to avoid this problem, instead of return NULL in fga.hpp, select function, try to write return chromosome[n - 1]

this should fix the problem, since in the case that the floating point
representation fails it is because it doesn't completely reach choice,
but we know for sure that the last chromosome should be selected

I'll update the FGA code on sourceforge soon

thanks for your detailed info

kısaca fga.hpp de select kısmında sondaki
"return NULL;"
satırı yerine
return chromosome[n - 1];
kullanmamız problemi çözüyor.

Çarşamba, Mart 07, 2007

buruşuk pardesülü adam



ILS SONT EUX
...
buruk bir sabah
başlıyor acılı olduğu
açıkça anlaşılmayan
dünyada.
...
susuyor, söylemiyor bildiği tek şiiri
“güzel olan hiçbir şey hülasa edilemez”
demiş çünkü valéry.
çünkü serbest düşünme zamanı geçti artık
şimdi mesai saati
disiplin kurulunun toplantısı var
arşivde sicil belgeleri damgalanacak
tayinler imzaya girecek
teftişe gidecek generaller
rüya, okşayış, tevrat
gibi kelimeler
gündemin dışında.
yurttaşlar uygunadım çalışmalarıyla
söktüler kariha yarımküresini yerinden
bir pusula koydular açtıkları boşluğa
titreyen, korkak ibresiyle bu pusula
kuzeyi gösteriyor serbest
düşünme zamanlarında ;
safir bir göz görünce karıştırıyor yönü
tırnaklarını yiyor bakır bir
dudak ona yaklaşınca ;
cıvadan bir gözyaşı
bari olsun istiyor
bütün mesai boyunca.
buruşuk pardesülü adam dalgın
gittikçe daha dalgın, elinde cetvel
masada hesap makinesi, pusula
yetmiyor dibe dalmasına
bağlıyor kalın bir urganla beline
ağır bir sandık
salıyor kendini
yeşil yosunların
kırmızı balıkların
uçan kabarcıkların
derinliklerine
orada
bir sandık buluyor
yakutlar, altınlar, pırlantalar
adam dibe inmek için beline bağladığı
sandığını keşfediyor dibe ulaştığında.
öyleyse adamın eyvah ışıdı yüreği
eve dönmesine gerekçe
bulamıyacak bir daha.
...

Adamın pardesüsü'mü yüreğimi buruşuk olan?
Dibe dalması için programlamayı mı kullanıyor yapay zekayı mı ?.
Dibe ulaşabilecek mi ?
Ulaşırsa orda bir şeyler keşfedebilecek mi ?
Keşfettikleri evdekilerden ağır gelebilir mi ?
Eve dönmesine gerekçe bulamaması mümkün mü ?

Şimdi bütün bu sorulara cevap veremiyeceğim
çünkü serbest düşünme vakti geçti
şimdi artık mesai saati !

...
kimse görmüyor buruşuk pardesüsüyle bir babanın
kırılgan bir yelpaze olduğunu akşam eve girince
...

Cumartesi, Mart 03, 2007

Genetik metodla 4 Bilinmiyenli Denklem Çözümü

Genetik metoda epey bir ilgi var. Şu an itibarıyla Örnek Programlarım arasında ençok indirilen bu oldu. Genetik Programlamayla Bir İşlem = 395 (windows) + 72 (Linux) olmak üzere toplam 467 kere indirildi. Hatta Java versiyonunu da yazıldı.

Neyse biz konumuza geçelim geçenlerde bana bir mesaj geldi
... sizden genetik algoritma ile ilgili yardınızı istiyorum.Mezuniyet projem için genetik algoritma kullanilarak c veya c++ dort bilinmeyen denklemi cözen program yazmam gerekiyor ama nasil yapilacagi konusunda hic fikrim yok...
- Ahh Şöhreti kazibe -
Ben de yardımcı olmaya çalışacağımı bildirip konuyla ilgili detaylı bir mail atmasını istemiştim. cevap gecikmedi.
... o projeden vazgectim beni cok fazla zorlayacak. ... kare bulmaca (puzzle creator)yapmam daha dogru olucak ...
Bunun üzerine aslında korkulacak bir şey olmadığını göstermek ve bizim Fatih Presta'nın FGA
kütüphanesinin kullanımını anlatmak için basit bir örnek yazmaya karar verdim.

y=KatSayı1*x1+KatSayı2*x2+KatSayı3*x3+KatSayı4*x4+Sabit

denklemi 1 dereceden 4 bilinmeyenli bir denklemdir.
y=0 için x1,x2,x3,x4 değerlerinin bulunması lazım.

İşin teorik kısmını başkalarına bırakıp ben uygulamaya geçeceğim.

1) Bulmamız gereken 4 değer var. Kromozom uzunluğumuz 4 . Çözüm tamsayı olmaya bileceğine göre değişken tipi olarak da float seçiyoruz.
2) Olası çözümlerin kodlandığı bir çözüm gurubu oluşturmamız lazım - Population -

PopulationMT my_population(
number_of_threads, // Thread sayısı
number_of_chromosomes, // Kromozom Sayısı
length_of_chromosomes, // Kromozom Uzunluğu
my_fitness, // Uygunluk Fonksiyonu
NULL,
NULL,
my_crossover_operator, // Çaprazlama Fonksiyonu
my_mutate_chromosome, // Mutasyon Fonksiyonu
my_random_chromosome // Rasgele Kromozom Oluşturma Fonksiyonu
);


Göreceğiniz gibi Uygunluk Fonksiyonu, Çaprazlama Fonksiyonu, Mutasyon Fonksiyonu ve Rasgele Kromozom Oluşturma Fonksiyonu yazmamız lazım.

// Uygunluk Fonksiyonu
// Denklemin değerini hesaplıyoruz.
// Sonucun 0 olması kökün bulunması demektir.
// Sonucu biraz matematikle (0,1) arasına çekiyoruz
// 1'e ne kadar yakınsa çözüme o kadar uygun - sağlıklı -
float my_fitness(float *chromosome)
{
float *x=chromosome;
float y=kat[0]*x[0]+kat[1]*x[1]+kat[2]*x[2]+kat[3]*x[3]+Sabit;
if(y<0 br="br"> y=-1.0 *y;
y=1/(1+y);
return y;
}
// Çaprazlama Fonksiyonu
// FGA'nın Kendi sağladığı Fonksiyon da işimizi görebilir aslında
// Biz öğrenmek bakımından yazıyoruz
void my_crossover(float *chromosome1, float *chromosome2)
{
float tmp;
if(rand()%2){
// Tek Noktadan çaprazlama
//
1010 ----> 0110
//
0101 ----> 1001
tmp=chromosome1[0];
chromosome1[0]=chromosome2[0];
chromosome2[0]=tmp;
tmp=chromosome1[1];
chromosome1[1]=chromosome2[1];
chromosome2[1]=tmp;
}
else {
// İki Noktadan çaprazlama
//
1010 ----> 1111
//
0101 ----> 0000
tmp=chromosome1[1];
chromosome1[1]=chromosome2[1];
chromosome2[1]=tmp;
tmp=chromosome1[2];
chromosome1[2]=chromosome2[2];
chromosome2[2]=tmp;

}

}


// Mutasyon Fonksiyonu
void my_mutate_chromosome(float *chromosome)
{
int a;
int b;
float tmp;
a = rand() % 4;
do{
b = rand() % 4;
}while(a==b);

if(rand()%2)
tmp=1.001;
else
tmp=0.999;
chromosome[a]=chromosome[a]*tmp;

if(rand()%2)
tmp=1.001;
else
tmp=0.999;
chromosome[b]=chromosome[b]*tmp;
}

// Rasgele Kromozom Oluşturma Fonksiyonu
// Arama yapacağımız aralığı seçiyoruz ben (-20,20) aralığını seçtim.
// Bütün X değerleri bu aralıkta seçiliyor.
void my_random_chromosome(float *chromosome)
{
float *x=(float *)chromosome;
for(int i=0; i<4 i="i">


Artık Gurubumuzu oluştura biliriz.

PopulationMT my_population(10, 400, 4, my_fitness, NULL, NULL, my_crossover, my_mutate_chromosome, my_random_chromosome);
3) gerisi Bir döngü içinde yeterince iyi sonuca ulaşana kadar.
yada belli kuşak sayısına kadar, işleme devam etmek.
Bunun için önce cycle fonksiyonu çağrılıyor.
sonra ulaşılan en iyi sonucu almak için
get_all_time_best_score fonksiyonu çağrılıyor.


while ((1.0-score)>0.00001) {
my_population.cycle();
score = my_population.get_all_time_best_score();
}
hepsi bu kadar.
Gördüğünüz gibi çekinilecek hiç bir şey yok. Bence Kare Bulmaca hazırlamaktan daha kolay ;)
Indirmek için : Download Denklem

Not:
1) FGA'nın Threadlı versiyonunu kullanın düz olan kısmında problem var. POSIX thread konusu daha önceki yazımda anlatmıştım.

2) Konuyla ilgili sorularınız olursa, Biz buradayız bekleriz.