Sayfalar

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.

Salı, Şubat 27, 2007

DOĞACAKTIR SANA VA’DETTİĞİ GÜNLER HAKK’IN

MÜNACAAT

Bu yaşa erdirdin beni, gençtim almadın canımı
ölmedim genç olarak, ölmedim beni leylâk
büklümlerinin içten ve dışardan
sarmaladığı günlerde
bir zamandı
heves ettim gölgemi enginde yatan
o berrak sayfada gezindirsem diye
ölmedim, bir gençlik ölümü saklı kaldı bende.

Vakti vardıysa aşkın, onu beklemeliydi
genç olmak yetmiyordu fayrap sevişmek için
halbuki aşk, başka ne olsundu hayatın mazereti
demedim dilimin ucuna gelen her ne ise
vay ki gençtim
ölümle paslanmış buldum sesimi.

Hata yapmak
fırsatını Adem'e veren sendin
bilmedim onun talihinden ne kadar düştü bana
gençtim ben ve neden hata payı yok diyordum hayatımda
gergin bedenim toprağa binlerce fışkını saplar idi
haykırınca çeviklik katardım gökyüzüne
bir düşü düşlere dalmaksızın kavrayarak
bulutu kapsayarak açmadan buluta içtekini
tanıdım Ademoğlu kimin nesiymiş
ter döküp soru sormak nereye sürüklermiş kişiyi.

Çeşme var, kurnası murdar
yazgım
kendi avucumda seyretmek kırgın aksimi.

Gençtim ya, ne farkeder deyip geçerdim
nehrin uğultusu da olur, dalların hışırtısı da
gözyaşı, çiğ tanesi, gizli dert veya verem
ne fark eder demişim
bilmeden farkı istemişim.
Vay beni leylâk kokusundan çoban çevgenine
arastadan ırmaklara çarkettiren dargınlık!
Yola madem
çöllerdeki satrabı yalvartmak için çıkmıştım
hava bozar, yüzüm eğik giderdim yine
yaza doğru en kuduzuyla sürüngenlerin sabahlar
yola devam ederdim.

Gençtim işte şehrin o yatık raksından incinen yine bendim
gelip bana çatardı o ruh tutuşturucu yalgın
onunla ben
hep sevişecek gibi baktık birbirimize.
Bir kez öpüşebilseydik dünyayı solduracaktık.

Oysa bu sürgün yeri, bu pıtraklı diyar
ne kadar korkulu yankı bulagelmiş gizlerimizde
hani yok burda yanlışı yoklayacak hiç aralık
bütün vadilere indik bir kez öpüşmek için
kalmadı hiç bir tepe çıkılmadık
eriyeydik nesteren köklerine sindiğimizce
alıcı kuş pençesiyle uçarak arınaydık
ah, bir olaydı diyorduk vakar da yoksanaydı
doğruydu böyle kan telef olmasın diye çabalamamız
ama kendi çeperlerimizi böyle kana buladık
gönendi dünya bundan istifade
dünya bayındırladı:
Bir yakış, bir yanış tasarımı beride
öte yakada benî âdem
her gün küsülü kaldık.

Bunca yıl bu gücenik macera beni tutuklu kılan
artık bu yaşa erdirdin beni, anladım
gençken almadın canımı, bilmedim
demek gökten ağsa bile tohum yürekten düşecekmiş
çünkü hataya bağışık büyük hatadan beri nezaret yer
çiğ tanesi sanmak ne cüret, gözyaşıymış
insanın insana raptolduğu cevher.

Şimdi tekrar ne yapsam dedirtme bana Yarabbi
taşınacak suyu göster, kırılacak odunu
kaldı bu silinmez yaşamak suçu üzerimde
bileyim hangi suyun sakasıyım Ya Rabbelalemin
tütmesi gereken ocak nerde?

Her görüşünde hem fikir olmasamda, İsmet Özel çok sevdiğim bir şairdir, yazardır.
Bu aralar
İstiklâl Marşı Derneği diye bir dernek kuruyor. İlginçtir ben de vakti zamanında
Yasaklanmadan yetişin İstiklal Marşı diye bir yazı yazmıştım. Güzelde bir Manifesto yazmış.

Hangi millet tarihe damga vurduysa, bu damgayı vurmasıyla bir dönüm noktası idrak etmiştir. Türk milleti tarihe damgasını İstiklâl Harbi ile vurdu. İstiklâl Harbi İstiklâl Marşı’nın temin ettiği mantık ve iradeyle kazanıldı. Millet hayatının sukut etmesi bu mantığın terk edilmesi, bu iradeye yabancı kalınmasından başka bir şey değildir. Kim millet hayatının yükselmesini istiyorsa, o kişi üzerine, şimdiye kadar ihmal edilmiş bir görev almış olur. Görevimiz şudur: İstiklâl Marşı ile kazandığımız mantığın işlenmiş hale getirilmesi ve İstiklâl Marşı’nda beyan edilen iradenin ileri götürülmesi. Bu görev, millet hayatının kokuşmasından ve milletin sefalete düşmesinden menfaat umanlarla savaşmayı da içine alır.

İstiklâl Marşı’nın hitap ettiği kişi olalım; olduysak kişiliğimizi savunmaktan geri durmayalım.
Hangi suyun sakası olduğunu ve tütmesi gereken ocağı bulmuşa benziyor. Ne diyelim Allah emeğini boşa çıkartmasın, hayırlı olsun.


Çarşamba, Şubat 21, 2007

Lutfi Zade Fanati' den Fuzzy Logic

Bulanık mantık konusunda Internette gezinirken Azeri Vikipediyada bu yazıya ulaştım

BULANIK MANTIK (FUZZY LOGIC)
FERHAT ODER
LUTFI ZADE FANATI

Lakin başında
Bu səhifə Vikipediya səhifə silmə kriteriyalarına görə yaxın vaxtda silinəcək.

yazıyordu bende neme lazım sonra bulamam deyip buraya aynen alıyorum

Fuzzy Logic

20. Yüzyılın başlarından itibaren, bazıları tarafından farkedilen bilimsel yöntemlerdeki yetersizlikler, yüzyılın ikinci yarısından sonra daha fazla hissedilmeye başladı. Günümüzde ise bu yetersizliklerin, bilim adamlarını "artık bu iş böyle yürümeyecek" dedirtecek kadar su yüzüne çıktıklarını görmekteyiz. İlk bakışta, bu yöntem yetersizliklerinin kaynağının lineer matematiksel modellemeler olduklarını görmek hiçte zor değildir. Matematiksel modelleme Kaderci görüşle yolları ayrılan bilimsel görüş kesimi, doğanın ne denli karmaşık bir yapıya sahip olduğunu çok geçmeden farketti. Bu nedenden, ilk bilimsel araştırmalar gözlem ve ampirik temelli bir takım çabalardan öteye gidemedi. Ancak, Newton'la birlikte, bilimin içerisine matematiğin girmesiyledir ki ilk kez kestirime yönelik kuramsal çalışmaları görmekteyiz. Matematiğin, girişi ile birlikte dramatik bir biçimde ivmelenen araştırmalar ve buluşlar çok geçmeden bilimi sadece gözlem olmaktan çıkarıp, kestirim yapabilen bir araca dönüştürdüler. Bir anlamda modern bilim Newton'la birlikte doğmuştur, diyebiliriz. Matematiğin girdiği her disiplinde, modelleme de kendiliğinden gelir. Çünkü, matematiğin kuralları kendine özgüdür ve dolayısıyla da, çoğunlukla, eldeki probleme tam olarak uymaz. Bu durumda, matematiği değiştirmek zor ve gereksiz olduğundan, problemi matematiğe uydurmaya modelleme diyoruz. Yani, gerçeğin kendisi yerine, ona elden geldiğince benzetilmeye çalısılmış bir manken. Gerçek dünya (nonlineer) Aşağıdaki hayali grafik herhangi bir büyüklüğün zaman - mekan içerisindeki değişimini temsil etmektedir. Şimdi, sağ elinizle grafiğin sağ tarafını kapatın ve elinizi yavaşca sağa kaydırın. Bu işi yaparken de, bir yandan, elinizin kayması sırasında ortaya çıkacak noktaların konumlarına bakarak, bir sonraki noktanın nerede ortaya çıkacağını kestirmeye çalışın. Olanaksız olduğu hemen görülecektir. Aynı olanaksızlık, bu kestirimi yapacak olan matematik için de geçerlidir. Nedeni, grafikdeki sürecin nonlineer oluşudur. Nonlineer süreçler için kestirim yapabilecek bilinen hiçbir matematiksel kuram yoktur.


Ancak, grafiğe yakından baktığımızda, durumun o kadar da umutsuz olmadığını görebiliriz. Örneğin, dar uzay - zaman aralıklarında grafik tam olmasa da lineere yakın bir gelişim izlemektedir. O halde, problemi uzay - zamanda küçük parçalara ayırıp, her birini bilinen matematikle çözebiliriz. Ancak burada unutulmaması gereken bir şey var. O da şu; artık uzun dönemli kestirimlerde bulunamayız. Yani, bugüne bakıp belki sadece bir iki gün sonrası hakkında bir kestirim yapabiliriz, diğer bir deyişle ancak böldüğümüz aralığın sınırları içerisinde kalmak koşulu ile bir kestirim yapabiliriz. Bu da, bir anlamda, yaptığımız yaklaşıma karşılık ödememiz gereken faturadır.

Bu yaptığımız bir lineer matematiksel modellemedir. Yani matematiği problemimize uydurmak yerine, problemi, bilinen matematiğe uyan bir mankenle değiştirdik.

Olasılık kuramı Araştırmacıların, her rastladıklarında nonlineerlikten köşe bucak kaçmalarının, çözümsüzlük ve süper pozisyonsuzluk yanında önemli bir nedeni daha vardır. Nonlineer sistemler, başlangıç koşullarına o kadar hassas bir şekilde bağlıdırlar ki, girdilerdeki en ufak bir değişiklik, sonuçları dramatik bir biçimde değiştirebilir. Bu davranışın, mizahi bir deyimi de vardır; "kelebek etkisi". Pekin'de, kırlarda kanat çırpan bir kelebek, eğer o anki koşullar uygunsa, aylar sonra Şikago'yu seller götürmesine neden olabilir. İşte, araştırmacıların, nonlineer diferansiyel denklemlerden nefret etmelerinin ana nedeni. Bilim adamları bu durumun 1920'lerde de farkında idi. Çareyi, determinist yorumlardan vazgeçmekte buldular. Yani, bir süreç sonundaki beklentilerin, kesin bir biçimde bilinme koşulundan vazgeçmek. Bu, herkesin iyi bildiği olasılık kuramının doğmasına neden oldu. Artık, "yarın yağmur yağacak" deyip, mahcup olmak yerine "yarın %70 olasılıkla yağmur yağacak" denip, yağmayınca da "eh..doğa %30'luk diğer olasılığı tercih etti" diyerek, topu doğaya atmak moda oldu!..Aynı sıkıntılarla boğuşan diğer bilim dalları da bu yeni anlayışın üzerine atlamakta gecikmediler. Öyle ki, hemen hemen 300 yıldır determinist felsefesi ile öğünen fizik bile bu yeni bakış tarzını kuantum fiziği adı altında benimsedi. Ancak bu kuramın da, lineerlikten ödün vermediğini görmek zor değildir. Kullanılan matematik yine o eski lineer matematik, tek yenilik, sonuçların kesinlik göstermeyişi. 1950' lerden sonra pek çok şeyin artık olasılıkla değerlendirildiğini görmekteyiz. Bir anlamda, olasılık modern bilimi gazinoya çevirdi diyebiliriz. Bulanık mantık (Fuzzy Logic) kavramı ilk kez 1965 yılında California Berkeley Üniversitesinden Prof. Lütfi Asker Zade’nin bu konu üzerinde ilk makallelerini yayınlamasıyla duyuldu. O tarihten sonra önemi gittikçe artarak günümüze kadar gelen bulanık mantık, belirsizliklerin anlatımı ve belirsizliklerle çalışılabilmesi için kurulmuş katı bir matematik düzen olarak tanımlanabilir. Bilindiği gibi istatistikte ve olasılık kuramında, belirsizliklerle değil kesinliklerle çalışılır ama insanın yaşadığı ortam daha çok belirsizliklerle doludur. Bu yüzden insanoğlunun sonuç çıkarabilme yeteneğini anlayabilmek için belirsizliklerle çalışmak gereklidir. Fuzzy kuramının merkez kavramı fuzzy kümeleridir. Küme kavramı kulağa biraz matematiksel gelebilir ama anlaşılması kolaydır. Elinizdeki elmanın bir parçasını ısırın ve şu soruyu sorun; "elimdeki nedir?" yanıt, "elma" olacaktır. Bir parça daha alın ve yine aynı soruyu sorun. Yanıtınız belki yine "elma" olacaktır ama içinizden bu yanıtı biraz daha açmak geçecektir, örneğin, "birazı yenmiş bir elma" gibi. Isırmaya ve soruyu sormaya devam edin. Öyle bir an gelecektir ki, elinizde tuttuğunuz, her neye benziyor ise, artık sadece "elma" sözcüğü ile açıklanamayacaktır. Yemeye devam edin. Sonunda elma yok olcak ve sorunun yanıtı da "hiçbir şey" olacaktır. Şimdi sorunuzu değiştirin; "elma ne zaman, elma olmaktan çıktı?". Bu soruya bir yanıt bulamayacaksınız!.. Bu örnek Bart Kosko'nun "Fuzzy Thinking" adlı kitabından alınmıştır. Bence, puslu mantığın mantığını anlatan çok güzel bir örnek. Son sorunun yanıtını veremeyişimizin nedeni, en az soru kadar ilginç. Soruda, "nezaman" sözcüğü, içerisinde bir kesinlik taşımaktadır. Yani, yanıtın "5. Isırıktan sonra", ya da "elma yenmeğe başladıktan 5 dakika sonra" gibi, kesin bir şekilde ifadesi beklenmektedir. Puslu mantık, "elmadan, elma değil' e geçişi bir derece meselesi olarak algılar, klasik mantık (Aristo mantığı) ise, kesin bir an ister. Bu örneği kullanarak, klasik mantıkla, puslu mantık arasındaki en belirgin farkı şöyle özetleyebiliriz. Klasik mantık iki değerlidir, A veya A değil, puslu mantık çok değerliklidir (sürekli), A ve A değil. Yani, ilkinde Var ve Yok asla birlikte bulunamaz, ikincisinde ise Var ve Yok birlikte bulunabilirler. Bulanık mantık ile matematik arasındaki temel fark bilinen anlamda matematiğin sadece aşırı uç değerlerine izin vermesidir. Klasik matematiksel yöntemlerle karmaşık sistemleri modellemek ve kontrol etmek işte bu yüzden zordur, çünkü veriler tam olmalıdır. Bulanık mantık kişiyi bu zorunluluktan kurtarır ve daha niteliksel bir tanımlama olanağı sağlar. Bir kişi için 11 aylık demektense sadece "bebek" demek bir çok uygulama için yeterli bir veridir. Böylece azımsanamayacak ölçüde bir bilgi indirgenmesi söz konusu olacak ve matematiksel bir tanımlama yerine daha kolay anlaşılabilen niteliksel bir tanımlama yapılabilecektir. Bulanık mantıkta fuzzy kümeleri kadar önemli bir diğer kavramda linguistik değişken kavramıdır. Linguistik değişken “sıcak” veya “soğuk” gibi kelimeler ve ifadelerle tanımlanabilen değişkenlerdir. Bir linguistik değişkenin değerleri fuzzy kümeleri ile ifade edilir. Örneğin oda sıcaklığı linguistik değişken için “sıcak”, “soğuk” ve “çok sıcak” ifadelerini alabilir. Bu üç ifadenin her biri ayrı ayrı fuzzy kümeleri ile modellenir. Bulanık mantığın uygulama alanları çok geniştir. Sağladığı en büyük fayda ise “insana özgü tecrübe ile öğrenme” olayının kolayca modellenebilmesi ve belirsiz kavramların bile matematiksel olarak ifade edilebilmesine olanak tanımasıdır. Bu nedenle lineer olmayan sistemlere yaklaşım yapabilmek için özellikle uygundur. Bulanık mantık konusunda yapılan araştırmalar Japonya’da oldukça fazladır. Özellikle fuzzy process controller olarak isimlendirilen özel amaçlı bulanık mantık mikroişlemci çipi’nin üretilmesine çalışılmaktadır. Bu teknoloji fotoğraf makineleri, çamaşır makineleri, klimalar ve otomatik iletim hatları gibi uygulamalarda kullanılmaktadır. Bundan başka uzay araştırmaları ve havacılık endüstrisinde de kullanılmaktadır. TAI’de araştırma gelişme kısmında bulanık mantık konusunda çalışmalar yapılmaktadır. Yine bir başka uygulama olarak otomatik civatalamaların değerlendirilmesinde bulanık mantık kullanılmaktadır. Bulanık mantık yardımıyla civatalama kalitesi belirlenmekte, civatalama tekniği alanında bilgili olmayan kişiler açısından konu şeffaf hale getirilmektedir. Burada bir uzmanın değerlendirme sınırlarına erişilmekte ve hatta geçilmektedir.








Bulanık Mantık


Daha önce bahsettiğim Su vakfı kitaplarının izine Dost Kitapevin'de rastladım ve daha önce hiç ilgilenmediğim Bulanık Mantık konusundaki "MÜHENDİSLİKTE BULANIK (FUZZY) MANTIK İLE MODELLEME PRENSİPLERİ" kitabı aldım. Kitap oldukça güzel. En kısa zamanda serinin diğer kitaplarınıda almayı planlıyorum.

Tabii ki sadece kitapla kalmadım internettede araştırmlara başladım.
Ulaşa bildiklerimden
http://www.akademiyapayzeka.com/DesktopDefault.aspx?tabindex=3&tabid=5
http://www.seattlerobotics.org/encoder/mar98/fuz/flindex.html

Bildiğiniz gibi ben daha çok Yapay zeka tekniklerinin uygulanmasıyla ilgileniyorum. Ama oturupta yeni bir sistem yapmaya gerek. Bu konuda birde uygulamalarınızda kullanabileceğiniz bir kütüphane var.
Free Fuzzy Logic Library Kütüphanenin kaynağı da ilginç Başlangıçta AI Game Programming Wisdom isimli kitap için yazılmış. Açık kaynak kodlu bir kütüphane fakat arkasında ticari bir şirket var. Louder Than A Bomb! Software! - Bombadan daha gürültülü yazılım -. Misyonuda tam benlik
To put artificial intelligence theory into practice through software that brings complex AI concepts to programmers and designers allowing them to focus on creativity, design and experimentation rather than implementation.
Kütüphanenin kullanımı için modelinizi FCL -Fuzzy Control Language- ile yazıp Program içerisinden yükleyip uygulamanızı yapabiliyorsunuz. FCL deyince gözünüz korkmasın. Bu şirket Anlayabildiğim kadarıyla "Spark! Fuzzy Logic Editor" diye bir ürün çıkararak para kazanmaya niyetli. Onu da kullanabilirsiniz.
Artık sıraya yazdık bir ara bulanık mantık uygulamasıda yapılacak.

Cumartesi, Şubat 17, 2007

Her gün bir yerden göçmek ne iyi.
Her gün bir yere konmak ne güzel.
Bulanmadan, donmadan akmak ne hoş.
Dünle beraber gitti, cancağzım
Ne kadar söz varsa düne ait.
Şimdi yeni şeyler söylemek lazım.*



Blog'a her girişimde yeni haline geçmek istiyormusunuzdan gına gelmişti. Mecburen yeni blogger'a transfer olduk. İlk olarakta görünümde bir değişikliğe gittim. Beğeniceğinizi umuyorum - Sayaç ilerlemese oralarda bir yerde yazdıklarımı okuyan yok diyeceğim ama sayaç ilerliyor İşte sayacı ilerletenlerin beğeneceğini umuyorum :) -

* Mevlana


Hz. Mevlana

Pazartesi, Şubat 12, 2007

Su vakfından yapay zeka kitapları






Su vakfı diye bir vakıf var.
Vakfımız, suyun kişi, toplum ve canlı hayatındaki yerinin ve öneminin insanımıza kavratmak, suyun en verimli şekilde ve tasarrufa riayet edilerek kullanılması bilincini geliştirmek, su sorunlarının çözümüne katkıda bulunmak amacıyla kongre, panel, konferans ve sempozyumlar düzenlemektedir.
diyerek yola çıkan vakfın yapay zeka konularında da kitapları var. Takdir edersiniz ki Türkçe de bu konuda pek kaynak bulmak mümkün değil. Tek dezavantajı ben internetten kitap almayı sevmem. Ben kitap alırken kitabı evirmem, çevirmem, kurcalamam lazım.
Dikkatimi çeken kitaplar

MÜHENDİSLİKTE BULANIK (FUZZY) MANTIK İLE MODELLEME PRENSİPLERİ
yazar : ZEKAİ ŞEN
İÇİNDEKİLER :

  • Belirsizlik Kavramları
  • Üyelik Fonksiyonları
  • Klasik ve Bulanık Kümeler
  • Küme İlişkileri
  • Durulaştırma
  • Bulanık Kurallar ve Sistemler
  • Genel Uygulamalar

YAPAY SİNİR AĞLARI İLKELERİ
yazar : ZEKAİ ŞEN
İÇİNDEKİLER :
  • Uzman Sistemler ve Yapay Sinir Ağı Esasları
  • Yapay Sinir Ağları ve Klasik Yöntemlere Benzerlik
  • Tekli Doğrusal Algılayıcı (TDA) (Perceptron)
  • Çok Tabakalı Yapay Sinir Ağları ve İşletme İlkeleri
  • Yapay Sinir Ağları ile Eğitme ve Modelleme
  • Öğretmensiz Çalışan Yapay Sinir Ağları
  • Geri Dönüşümlü Yapay Sinir Ağları
  • Genel Uygulamalar

GENETİK ALGORİTMALAR VE EN İYİLEME YÖNTEMLERİ
yazar :ZEKAİ ŞEN
İÇİNDEKİLER :
  • Sayılar ve Temel Genetik Algoritma Kavramları
  • En İyileme (Eİ) Yöntemleri
  • İki Tabanlı Genetik Algoritmalar (GA)
  • On Tabanlı Genetik Algoritmalar
  • Genel Uygulamalar
İSTATİSTİK VERİ İŞLEME YÖNTEMLERİ
yazar : ZEKAİ ŞEN
İÇİNDEKİLER :
  • İstatistik ve Hidro-Meteoroloji
  • Temel İstatistik Bilgileri
  • Tektürlük (Homojenlik) Sınamaları
  • Örnek Fonksiyonu Bileşenleri
  • Örnek Fonksiyonu Kesim Değişkenleri
  • Ortak Değerlendirmeler
  • Çeşitli İstatistiksel Hidro-Meteoroloji Hesaplamalar


BİLİMSEL DÜŞÜNCE VE MATEMATİK MODELLEME İLKELERİ
yazar :
ZEKAİ ŞEN

İÇİNDEKİLER :
  • Düşünce ve Model
  • Matematik Modeller
  • Akılcı (Rasyonel) Mantık Modelleri
  • Akılcı Sonsuz Küçük Aralık (Diferansiyel) Modelleri
  • Deneyci (Ampirik) Modelleme İlkeleri
  • Akılcı-Deneyci (Analitik) Modelleme
  • Sonlu Küçük Aralık (Sayısal) Modelleme
  • İhtimal Yöntemleri ile Modelleme
  • Çalkantı (Pertürbasyon) Modelleri
  • Bulanık Mantık Yöntemleri ile Model Geliştirme


Pazartesi, Şubat 05, 2007

BushSweeper 0.5 Mayın Tarlası benzeri oyun


Microsoft'un Mayın tarlası programının bir benzerini yapmaya çalıştım. Fakat Mayın yerine "Bush"'ları temizliyeceksiniz
İndirmek için : Linux Window
Pek Tabii ki CodeBlocks IDE' si kullanıldı.
Programın GUI dizynında FLTK'nın FLUID'i kullanıldı


Perşembe, Şubat 01, 2007

Eskilerden 2 Program



CBuilder'ı öldürdüğümüze göre BCB ile yazdığım iki programın linklerini yenileyip
son vazifemizi yapalım...

AsmHelp : Assembly ile ilgili bir Yardım yazlımı Ctrl+Alt+A ile çağırıyorsunuz. veritabanı statik değil siz başka bilgiler girip başka konular içinde kullanabilirsiniz.

TextIntoBmp : Daha önce yayınlamıştım fakat link ölmüş. Bmp resim dosyalarının içine mesajını yazar ve okursunuz. Bu programın biraz daha gelişmiş halde yenisini ve dolayısıyla Linux versiyonunuda çıkarmayı planlıyorum - kısmet -