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.