Sayfalar

1 Eylül 2010 Çarşamba

ogre3d'nin kurulumu

Ogre3D’ye Giriş sayfasından sonra sıra Ogre3D’yi bilgisayarımıza kurmaya ve derlenebilir projeler oluşturmaya geldi.

Öncelikle Ogre3D‘nin sitesine giderek, download kısmına geliyoruz. Buradan önceden derlenmiş olan SDK ( Software Development Kit ) paketlerini indirebileceğiniz gibi ham haldeki derlenmemiş kodları da SVN’den çekebilirsiniz. Ogre3D ekibinin hazırladığı demo örnekleri indirip neler yapılabileceğini de görebilirsiniz. Aynı zamanda Ogre3D’nin diğer programlar ile entegre etmenizi sağlayacak olan gerekli exporter’ları ve plug-in’leri de indirebilirsiniz. Cthugha kod adlı halihazırdaki güncel versiyon olan 1.7.1 şu anda indirilebilir konumda ancak ben projelerimde1.6.1 ( OgreSDKSetup1.6.1_CBMingW.exe ) sürümünü kullandığım için tavsiyem onu indirmeniz yönünde olacaktır eğer ki projelerimi takip etmek isterseniz :) Dikkat etmeniz gereken bir diğer nokta da indireceğiniz paketin MinGW uyumlu bir SDK paketi olmasıdır. Çünkü uygulamalarımızı yazacağımız ortam Code::Blocks’tur.

1.6.1 SDK paketimizi indirdikten sonra bildiğiniz kurulum ekranı gelecek karşınıza ve sadece ilerle demeniz yeterli olacaktır herhangi bir değişiklik yapmadan.

Kurulacağı dizini belirledikten sonra sıra geldi ilk projenize :) Code::Blocks’umuzu açtık ve yeni bir proje oluştur dedik.

Daha sonra ilk projemizin adına ve hangi dizine yerleşeceğine karar verip devam ettikten sonra önemli bir kısım karşımıza çıktı. Burada bizden iki tane seçenek arasından bir seçim yapmamızı isteyen bir ekran geldi.

Seçeneklerde, Ogre’nin kaynak koduna sahip bir klasör ya da SDK paketinden kurulmuş bir kod olup olmadığını soruyor. Bizde SDK paketinden kurduğumuz için alttaki seçenek ile devam ediyoruz.

Şimdi sıra geldi Ogre3D’nin dizininin belirlenmesine. $(OGRE_HOME) yazılı bir satır göreceksiniz. Bu satır yerinde Ogre’yi kurduğunuz dizinin adresini yazsanız da olur. Burada kurduğunuz paketin yerini belirleyip ilerle derseniz sihirbazın işlemi tamanlanmış olacaktır.

Bu arada bir dip not gireyim, bu değişkenin anlamı zaten o dizin demek ama bu değişkenin nerede tanımlı olduğunu görmek isterseniz eğer

” Bilgisayarım-> Sağ Tık-> Özellikler-> Gelişmiş-> Ortam Değişkenleri “ butonuna tıklayınız. Çıkan diyalog ekranında Kullanıcı Adı için kullanıcı değişkenleri “ kısmında “Değişken” ve “Değer" başlıklarının arasında OGRE_HOME değişkenini ve sizin kurduğunuz adresi görebilirsiniz. İsterseniz değişkenin ismini veya adresi değiştirebilir ve hatta kendinize özel değişkenler tanımlayabilirsiniz ama çok da karıştırmanızı tavsiye etmem zira sistem için olan değişkenler de alt tarafta listeli konumda :) Bu bilgiyi benimle paylaşan sınıf arkadaşım Selçuk’a da teşekkür etmek isterim :)

Bu dip nottan sonra sihirbazımıza dönelim. İşlemleri tamamladık ve bitir dedikten sonra sihirbaz otomatik olarak en basit örneği oluşturup Code::Blocks’un editör kısmına yerleştirecektir. Şimdi size bu kodu derlemekten başka yapacak birşey kalmıyor. F9 kısa yolu ile kodumuzu derliyoruz ancak o da ne? karşımıza bir ihtimal sizin de karşılaşacağınız bir hata çıktı ( Örnek Resim 05 ) zaten hatasız bir kod olur mu? :)

“d3dx9d_30.dll” bulunamadı… Ne yapıp ne edip bir yerlerden bu DLL dosyasını bulup “C->Windows->System32″ dizininin içine yerleştirmeniz yeterli olacaktır. işte bu ufak hatadan sonra herşey tamamdır. Code::Blocks’a yeniden derle ve çalıştır komutunu verdikten sonra karşımıza “Rendering Subsystem” kısmının içinde yer aldığı Ogre’nin hangi grafik kütüphanesini kullanacağının seçildiği ekran gelecektir. Bu ekranı oyunlara başlamadan önce yapılan ayarlamalar olarak görebilirsiniz. Anti-Aliasing derecesi ve Gama derecesi, Çözünürlük ve Tam Ekran gibi ayarlamaları yapabilmektesiniz grafik kütüphanesinin verdiği destek çerçevesinde. Herhangi birini seçtikten sonra OK diyerek devam ediniz ve aşağıdak ekran çıktısını ( Örnek Resim 06 ) görerek rahat bir nefes alınız. Çünkü artık ilk projenizi üretmiş bulunmaktasınız. Hadi hayırlı olsun :)

Kendinizi hazırlayınız çünkü bu vakitten sonrası hem eğlenceli hem de bi o kadar da zahmetli bir süreç ama emeklerinizin dönüştüğü şeyleri görünce bu işten daha da zevk almaya başladığınızı göreceksiniz :)

NOT:

Code::Blocks’da 1.7.1 sürümünün SDK paketi hakkında dikkat edilmesi gereken önemli bir nokta söz konusu.Kurulum paketini indirdikten sonra bir dizine çıkartınız. Çıkarılan pakette bulunan “include” dizinin içinde var olan “OIS” ve “OGRE” klasörlerinin her birinin içindeki dosyaları kopyalayıp “include” dizininin içine yapıştırınız. Yani bir geri dizine yapıştırmış oldunuz. Aynı zamanda ana dizindeki “boost_1_42″ klasörünün içindeki dizinleri de aynı şekilde “include” dizininin içinde yapıştırınız.

Bu işlemleri yapmamızın nedeni Code::Blocks‘dan kaynaklanıyor. Şöyle ki; yeni bir proje oluşturduğunuz zaman kurulum sihirbazı sizden Ogre dizinini istemekte. Haliyle siz de projenizin dizinini veriyorsunuz sihirbaza, ancak bu noktada sihirbaz bize uyarı veriyor. Verdiğimiz dizinin doğru bir dizin olduğunu ancak Ogre’nin kodlarını barındırmadığını söylüyor. İlginç bir durum ama anladığım kadar ile sihirbazın baktığı “include” dizininin içinde olması gereken belli başlı dosyaları bulamayınca bu problemi size veriyor. Bu Code::Blocks sihirbazının yeni versiyon Ogre sürümü ile uyumsuz olmasıyla alakalı bir durum. Emin değilim ama Ogre AppWizard 1.7.1 kullanmadığınız taktirde direk SDK paketi derlenirken Code::Blocks bu hatayı veriyor.

Bu arada tüm ogre sürümlerini SourceForge’den indirebilir ve gelişimlerini bu adresten (http://sourceforge.net/projects/ogre/files/) takip edebilirsiniz.

svn nedir? svn'den nasıl kod çekilir?

Diyelim ki bir proje geliştiriyorsunuz ve kalabalık bir ekip ile çalışıyorsunuz. Bu proje geliştirme sürecinde ekibin her zaman birbirleriyle iletişim halinde olması gerekmektedir, özellikle de aynı dallarda çalışan ekip üyelerinin. Birbirleriyle iletişim ihtimalleri hayli yüksek olanlar için bu pek problem teşkil etmeyebilir ancak uzakta olan ekip üyeleri için bu iletişimsizlik hayli sıkıntı yaratmaktadır. Peki bu probleme çözüm yok mu? Elbette ki var :) Buna çözüm olarak “SubVersioN” sistemi geliştirilmiştir. Tüm çalışma dosyaları internet üzerinden bir alana yüklenir ve gerekli yazılım aracılığıyla bu alandan dosyalar çekilir veya yüklenir. Sistem temelinde böyle işler ancak alt yapısı biraz daha derindir. Aynı anda sisteme yüklenen dosyaların çakışmlarını ile birlikte güncellenen, silinen, yeni yüklenen veya olmayan dosyaları da kontrol eder. Bu konuda temel düzeyde bilgi sayibiyim az çok kullanmışlığım sayesinde ama bu yazıda SVN‘nin işlevinden ziyade daha çok nasıl dosya indirileceğinden bahsetmek istiyorum.

SVN sistemi olarak kullanılan Google Code veya SourceForge gibi alanlardan dosya indirmek için Tigris.org topluluğunun geliştirdiği Tortoise SVN oldukça ideal bir SVN programıdır.

Tortoise SVN‘nin kurulum işleminden sonra kodunu çekmek istediğiniz projenin SVN adresini almakta sıra. Ogre3D’nin SourceForge SVN adresini ( https://ogre.svn.sourceforge.net/svnroot/ogre ) ve Away3D’nin Google Code SVN adresini ( http://away3d.googlecode.com/svn/trunk/ ) verdim. Bilgisayarınızda yeni bir klasör oluşturun ve bu klasörün üzerinde sağ tıklayın. SVN Checkout kısmına tıklayınız ve açılan diyalog penceresine kopyaladığınız SVN adresini “URL of Repository” kısmına yapıştırdıktan sonra geriye sadece “OK” demek kalıyor bize :)

Bu işlem sonrasında açılacak olan diyalog penceresi SVN alanının yoğunluğuna veya internet bağlantınızın durumuna göre biraz geç yanıt verebilir ancak indirmeye başlayacaktır. İndirme işlemi bittikten sonra “Finished” diyerek size işlemin sonlandığını söyleyecektir.

Artık belirlediğiniz klasörde indirmek istediğiniz projenin en güncel ( ama tam dengeli olmayabilir bunu da dip not olarak vermek gerekir. Çünkü bazı SVN’lerdeki veriler proje ekibi hala geliştirmekte olduğu için tam dengeli olmayabilir. ) haline sahipsiniz. Bu vakitten sonra istediğinizi yapabilirsiniz :) Kolay gelsin.

rastgele olmayan bir rastgelelik

      Bilgisayar dünyasında bizi tekdüzelikten kurtaran ve sıradışılığa iten en önemli, en temel fonksiyon olan rand() fonksiyonuna teşekkürleri bir borç bilmeliyiz :) O olmasaydı yazılan oyunlarda rastgele olan birşey olmayacaktı. Düşmanların yeri belli olacak, nesneler aynı yerlerde, şekillerde ve konumlarda fırlayacaktı. Programlarda karşımıza çıkan ufak bilgi ekranlarında rastgele çıkan bir sıra olmayacaktı… bu gibi örnekler düşündükçe artar. O yüzden fazla dalmak istemiyorum. İşte bu fonksiyon olmasaydı geliştiriciler sayılarını kendileri rastgele bir sıraya koyacaklardı ancak o konulan rastgele sıranın da belli bir dizilimi olacaktı vb…
      1′den 10′a kadar olan sayılardan 5 tanesiini seçmeniz istense bunu rahatlıkla çok çeşitli sıralarda yapabilirsiniz. Bir sabah çayınıza her zamankinden biraz daha fazla şeker koymayı tercih edebilirsiniz. Bunlar bizim zihnimizle yaptığımız mantıklı tercihlerdir. Söz konusu olan bu seçim işlemini bilgisayardan isteseydik bunu onun anlayacağı kod dizilimine dökmemiz gerekecekti. Ardından çalıştırdığınızda bazı seçimler yaptığını görecektik. Ancak bu seçimlerin ne kadarı bizim özgür irademizle yaptığımız tercihler ile eş değer nitelikte olacak? Eğer ki bizimkiyle aynı seviyede bir tercih olduğu öne sürülürse bu insanlığın geliştirdiği en temel düzeyde bir yapay zeka örneğidir diyemez miyiz? Bence kesinlikle diyemeyiz. Bunun nedenini şöyle açıklayayım. Random fonksiyonu çalıştığında ortaya belli sayılar üretir. Ancak bu sayılar nereden gelmektedir? Nasıl bir düzene göre sıralanmaktadır? Ya da düzensiz mi ilerlemektedir? Sonuçta bu bir fonksiyon, bir dizi tanımlanmış koddan ibaret. Nasıl olabilir de bir bireyin yaptığı gibi tercihler yapabilir?
       Diyelim ki geliştirici “[2] [3] [5] [1] [4]“ şeklinde bir dizi hazırlamış ve bu diziyi bir for döngüsü içinde baştan sonra kadar döndürüyor olsun. Ancak ikinci çalışmadan sonra bu uygulama yine aynı değerleri dönderecektir. Buna çözüm olarak şu denenebilir örneğin; dizi, başlangıç değerinden bitiş değerine kadar dizinin genişliği kez dönderilir bir döngü içerisinde. bu durumda iç içe iki tane for döngüsü iş görecektir. döngü içerisinde de ilk döngünün değeri ikinci döngünün değeri ile işleme tabi tutulabilir. bu durumda 5 farklı değer yerini 25 elemanlı, içinde aynı sayıları da barındırabilen ancak farklı sıralarda bulunan bir diziye bırakacaktır. yani yeni dizimiz işlem için çarpımı tercih ettiğimiz düşünülürse şu şekilde olacaktır: 
“[2x2] [3x2] [5x2] [1x2] [4x2]“
“[2x3] [3x3] [5x3] [1x3] [4x3]“
“[2x5] [3x5] [5x5] [1x5] [4x5]“
“[2x1] [3x1] [5x1] [1x1] [4x1]“
“[2x4] [3x4] [5x4] [1x4] [4x4]“
ancak bu yöntemin de tahmin edilme ihtimali vardır zira bu da bir yerden sonra kendini tekrar edecektir ancak sayı olasılıklarını arttıracak bir yöntemdir.
      Bu da bizi kesmedi! Bize lazım olan şey bu tanımlı olan dizinin sürekli değişen ancak bir daha kendini tekrarlamayan bir sayıyla işleme sokulmasıdır. Bizim ihtiyacımız olan sayıyı üreten fonksiyonun her dilde karşılığı var ve aynı sonuçları vermesine rağmen farklı isimlere sahip olabilir. C++’da aradığımız bu sayı, time() fonksiyonunun ve NULL parametresinin birleşimi olan time(NULL) işleminin sonucunda üretilmektedir. Peki nedir bu işlem sonucunda ortaya çıkan kurtarıcı sayi? Tabi ki de uzun zaman önce mantığı standartlaştırılmış olan bu sayı 1970 yılından bugüne kadar geçen saniyeden ibarettir. Fonksiyon ne zaman çağrılırsa, o ana kadar geçen saniyeyi hesaplayıp sonuç olarak dönderir.
      Şimdi sürekli değişecek olan sayımızı nasıl elde edebileceğimizi de öğrendikten sonra geldi sıra rastgele sayı üretmeye. Bu fonksiyon ile bizim dizimizi matematiksel olarak bir işleme sokarsak üretilen değerler farklılaşacaktır ve sürekli değişecektir. Bu noktada tanımlanmış bir dizinin farklılığı söz konusudur. işte random sayı üretmek bundan ibarettir :)
      Şimdi ben o kadar uğraştım didindim ancak zaten var olan fonksiyonu bir kere daha üretmenin alemi nedir diye sorduğunuza eminim :) malum c++’da rand() fonksiyonu halihazırda vardı zaten fakat bilmem dikkat edeniniz oldu mu ancak rand fonksiyonu da yukarıda anlattığım dizi örneğindeki gibi hep aynı değerleri üretir.
Eğer ki rand() fonksiyonunu bir for dizisine tabi tutarsanız aşağıdaki resimdeki sonucu elde edeceksiniz;
      Resimde gördüğünüz ve 41 ile başlayan dizi hep sabittir. Pek çok farklı bilgisayarda denedim ( işlemci, anakart, HDD, RAM vb.. açısındandan yani donanım açısından kesinlikle farklı bilgisayarlar ve farklı işletim sistemleri ile de denedim )ve elde ettiğim sonuç hep bu sıralamadan ibaretti. Bu durumda şu sonuç ortaya çıkıyor rand() fonksiyonu sadece bir diziden ibaret. Belki benim yukarıda bahsettiğim kadar basit bir dizi olmayabilir ama sıralanmış olduğu aşikardır. Bu problemi çözmek için rand() fonksiyonu ile birlikte “srand(time(NULL))” fonksiyonunu verilen parametre değerleri ile birlikte kod sistemi içinde uygulamak yeterlidir. Sonuç olarak ortaya çıkan değer zamana bağlı olarak farklılaşacaktır. Aşağıda srand() fonksiyonunu kullanmadan rand() dizisinin nasıl time(NULL) değeri ile birlikte kullanılabileceğine örnek verdim :

      Resimde gördüğünüz ” t = time(NULL) “ satırı yerine srand(time(NULL)) yazarsanız ” sayi*t “ işlemine gerek kalmadan rand() otomatik olarak farklı değerler üretecektir.
      Sonuç olarak;o kadar yazının ardından elimize ne geçti? :) rand() fonksiyonu kesinlikle ranstgele sayı üreten bir fonksiyon değil. Tanımlanmış bir dizinin sürekli artan bir sayı ile çarpımının sonucundan ibaret. Bu yüzden de asla yapay zekanın temel taşı olduğunu söyleyemem ancak kendi kararlarını ve tercihlerini yapabilecek seviyede bir fonksiyon üretilebildiği zaman bu iş önünde saygı ile eğilirim :) fakat halihazırda kendisine verilen görevi en iyisiyle yapmakta olduğuna da söyleyecek bir sözüm yok benim derdim sadece kavram yanılgısında :) Bu noktada şu uyarıda bulunayım; rand() fonksiyonunun benim bilmediğim daha gizemli bir kısmı da mevcut olabilir ama olsun üzerinde düşününce bu sonuca vardım :) yanlışlarım veya mantık hatalarım varsa lütfen söyleyiniz, eğer varsa affola :)

ve ogre3d'ye giriş

OGRE3D

( Object-Oriented Graphics Renderin Engine – Nesneye Yönelimli Grafik Render Motoru )

“C++’da yazılmış sahneye yönelimli bu esnek 3d motoru, geliştiricilerin 3D ve 2D grafikleri kullanan uygulamaları daha kolay ve kullanışlı bir şekilde üretmelerini sağlamak için tasarlandı.” demiş OGRE ekibi bu emekleri hakkında ( ingilizçe çevirimde sorunlar olabilir artık normal karşılayın ). Bu noktada bu ekibe katılmadan edemiyorum zira Ogre’nin sıkıntı yaşatan anlarının haricinde kullanmasını öğrenildiğinde harikalar yaratabilme potansiyeline bir kullanışlılık sunmaktatır.Gerek kendi başına olan yetenekleri ile gerekse de harici olarak yazılmış kütüphanlerin o muhteşem yetenekleri ile birlikte OGRE harikalar yaratmaktadır.

Bu harici kütüphanelere örnek verecek olursak;

  • Hydrax oldukça güzel bir okyanus kütüphanesidir.
  • Caelium, SkyX kadar olmasa da yetenekli bir atmosfer kütüphanesidir.
  • CEGUI kullanmasını öğrendikten sonra oldukça hoşuma giden bir arayüz kütüphanesidir.
  • ArToolkitPlus da OGRE için sanal gerçeklik uygulamaları yapabileceğiniz bir kütüphanedir.
  • OgreBullet veya NxOgre gibi kütüphaneler de gerekli fizik kütüphanelerdir.

Bunlar gibi kütüphaneler ile birlikte Ogre, bizlere gerçekten de güçlü bir yapıya sahip olduğunu bir kere daha göstermiş oluyor.

Şimdi derlenebilir projeler oluşturmak için Ogre3D’nin kurulumu sayfasına göz atabilirsiniz.

code::blocks'un ilk açılışı ve "hello world" :)

"Code::Blocks’un Güncellenmesi" sayfasını da hatim ettikten sonra sıra geldi Code::Blocks’un ilk defa açılışında ve ilk programınıza :)

Programı ilk açtığınız zaman karşınızda compiler seçim ekranı gelecek. Bende code::blocks zaten kurulu vaziyetteydi bu yüzden o seçim ekranını görebilmek için programı sildim ve yeniden kurdum ancak bir kereye mahsusluk bir durum söz konusu sanırım. belli bir yerlere sistem dosyası yerleştirdiği kesin ancak silme işlemi sırasında bu dosyaları silmemiş anlaşılan :) yani anlayacağınız o seçim ekranını gösteremedim size malesef ki ancak "gcc" ile başlayan compiler’ın saptandığını söyleyecek bu diyalog ekranı ve size bu seçeneği seçip tamam demekten başka yapacak birşey kalmıyor.Şimdi tüm işlemlerin hallolduğunu varsayıyorum ve devam ediyorum. Sıra geldi ilk programımızın yapımına : "Hello World" :)

File->New->Project seçeneğini seçerek yeni bir şablon seçmemizi sağlayan diyalog ekranına geliyoruz. Buradan;

“Console Application” seçeneğini seçerek ilerliyoruz. “Please make a selection”kısmından “c” veya “c++” seçeneklerinden birini seçiniz ve devam ediniz.

Ben c++ ile devam ediyorum ve sağ taraftaki pencereye gelindiğinde de projenin adını ve nereye kayıt olacağını yazıyoruz. Bu işlemlerin ardından da next diyerek devam ediyoruz.

Compiler olarak GCC’yi önceden seçtiğimiz için karşımıza otomatik olarak “GNU GCC Compiler” seçili geldi.

“Debug” ve “Release” modlarının çıktı dizinleri de otomatik olarak belirlenmiş şekilde geldi.

Bu ayarlamalarda herhangi bir değişiklik yapmanıza gerek yok. Kısaca yeni bir proje oluştur dedikten sorna o projeye sadece izim ve dizin vermekten başka yapacak bir işlemimiz yok. Hepsini otomatik olarak Code::Blocks bizim yerimize hallediyor zaten.

Şimdi aşağıdaki resimde görüldüğü gibi kodlarımız editör penceresine, projemiz de proje sekmemize yerleşmiş bulunmakta. Şu vakitten sonra derlemekten öte yapacak birşeyimiz kalmadı :)

Derleyip programımız çalıştırmak için “Build->Build and Run” seçeneğini seçmek veya kısaca sadece F9′a basmak yeterli olacaktır.

İşte bütün olay bundan ibaret. Hadi hayırlı programlar geliştirmeniz dileğiyle :)

Olası Sorunlar :

Eğer derleme sırasında “Nothing to be done” hatası ile karşılaşıyorsanız bunun olası çözümü için şu aşamayı izleyebilirsiniz:

  • Settings->Compiler And Debugger
  • Global Compiler Settings->Toolchain Executables
  • Compiler’s instalation directory kısmında MinGW’nin kurulu olduğu dizinin belirli olmaması bu hatanın kaynağı olabilir. Bunu düzeltmek için “Auto Detect” butonunu kullanabilirsiniz. Büyük ihtimalle probleminize çözüm olacaktır.

code::blocks'un güncellenmesi

Code::Blocks hakkında temel bilgileri verdiğim Code::Blocks Hakkında ve Code::Blocks'un Kurulumu adlı yazılarımdan sonra sıra geldi onun güncellenmesine.

Öncelikle bize lazım olacak temel bileşenleri ve güncellemeleri bulacağımız adresleri vereyim.

  • http://www.codeblocks.org/downloads/ adresinden Code::Blocks’un kurulum paketini ( binary release ) veya kaynak kodunu ( source code veya SVN ) indirebilirsiniz. Bize şimdilik lazım olan kurulum paketi.
  • Code::Blocks’un şu andaki güncel kurulum paketi olan codeblocks-10.05‘i indirebilirsiniz. Bu noktada şunu belirtmeliyim, Wİndows platformunda kurulum yapılacaksa iki tane kurulum paketinin mevcut olduğunu göreceksiniz. Bunlardan “codeblocks-10.05mingw-setup.exe” yi indirmenizde fayda var zira bu paket içerisinde MinGW’yi de barındırmakta ve harici olarak kurmanızı gerektirecek bir durum söz konusu değil böylece. Bu yüzden daha rahat olacaksınız.
  • Code::Blocks’un kod yazarları sürekli olarak varsa hataları temizlemekte ve güncellemeler yapmakta. Ancak yapılan her bir güncellemenin var olan en güncel kurulum paketine yerleşmesi zahmetli olacağından “Nightly Builds” adı altında özel bir kısım oluşturmuşlar. Bu kısımda, yapılan her yeni güncelleme paketler halinde yayınlanmaktadır. Bu sayede sürekli olarak güncel bir yazılımınız olacaktır. Şimdi bu adresteki forumdan en güncel başlığı seçip verilen paketleri indirelim. Buradaki forum başlıkları değişken nitelikte olduğu için adres veremiyorum.
  • Genelde üç başlık altında verilen bu güncelleme paketlerine sırayla göz atalım:
    1. “A link to the unicode windows wxWidget dll for Code::Blocks”
    2. “For those who might need this one (when no MingW installed on your system)”
    3. “The 21 August 2010 build is out.”

    bize 1 ve 3 numaralı başlıkların altındaki güncelleme paketleri lazım olacaktır. 2 numaralı paket sistemde MinGW kurulu değilse gerekli olacak olan pakettir. Ancak bizim kurulum paketimiz MinGW’yi de içerdiği için bu pakete hiç gerek yoktur.

  • İndirlen paketlerin “codeblocks.exe” nin bulunduğu dizin ile aynı dizine çıkarılması gerekmektedir.
  • Paketlerden çıkarma işlemi bittikten sonra güncelleme işlemi tamamlanmış olacaktır.

Ayrıca Code::Blocks için hazırlanmış ve plugin‘ler arasında istediğinizi indirebilir ve kullanabilirsiniz.

code::blocks'un kurulumu

"Code::Blocks Hakkında" adlı yazıda Code::Blocks hakkında giriş seviyesindeki bilgileri vermiştim. Şimdi kurulumundan devam ediyorum.

İndirdiğiniz "codeblocks-10.05mingw-setup.exe" dosyasını çalıştırdıktan sonra aşağıdaki ekrana gelene kadar ilerlemye devam ediniz.

Bu ekrandaki listeden "full" seçeneğini seçerek tüm özelliklerin yüklenmesini sağlayayıp kurulacağı dizini belirledikten sonra kurulumu bitiriniz."Code::Blocks’un Güncellenmesi" adlı yazı ile devam ederek Code::Blocks’u güncelleyeceğiz

31 Ağustos 2010 Salı

code::blocks hakkında

Diyelim ki elimizde algoritmasını oluşturduğumuz ve Windows ortamında çalışmasını istediğimiz bir projemiz mevcut ve de kaynak bolluğu açısından da c/c++’ı tercih ettik. Şimdi bu algoritmayı geliştireceğimiz bir ortam lazım bize. Bilienen en büyük ve geniş ortam tabi ki de Microsoft Visual Studio. ve .NET platformu. Ancak yasal çalışmak istiyorsak ve maliyet açısından da sıkıntı çekiyorsak bize bedava olan bir derleyici lazım. Bu ihtiyacı karşılamak için de açık kaynak kodlu bir IDE olan Code::Blocks tercih edilebilir zira hem fonksiyonelliği hem de kullanışlığı yüksek bir arabirime sahiptir.

Seçimlerimizi yaptığımıza göre "Nedir bu Code::Blocks?" , "Özellikleri nedir?" , "Compiler, Debugger, Linker, IDE vb. terimlerin anlamları nedir?" bunlara el atalım.

Şimdi ilk önce Code::Blocks’un ne olduğu sorusuna geçelim. Code::Blocks içinde GCC paketini barındıran Cross-Platform bir IDE uygulamasına güzel bir örnektir.

Sıra bu süslü püslü bilgisayar terimlerinin ne olduğunda;
Cross-Platform : Birden fazla işletim sisteminde dağıtımı bulunan uygulamalardır diyebiliriz cross-platform için.
  • Windows 2000/XP/Vista/7
  • Linux 32-bit/64-bit
  • Mac OS X
platformlarında uygulamaları bulunduğu için Code::Blocks bir cross-platform uygulamasıdır.

IDE : Integrated Development Evironment ( Tümleşik Geliştirme Ortamı ) özelliği olan programlar içinde pek çok geliştirme ortamını barındırırlar. Tümleşik geliştirme ortamlarında olması gerekli en temel özellikler:
  • Programlama diline göre sözdizimi renklendirmesi yapabilen kod yazım editörü.
  • Kod dosyalarının hiyerarşik olarak görülebilmesi amacıyla hazırlanmış gerçek zamanlı bir dizelge.
  • Tümleşik bir derleyici, yorumlayıcı ve hata ayıklayıcı.
  • Yazılımın derlenmesi, bağlanması, çalışmaya tümüyle hazır hale gelmesi ve daha birçok ek işi otomatik olarak yapabilmek amacıyla küçük inşa araçları.

Peki Code::Blocks bir IDE ise bu şartları sağlıyor mu? Sırasıyla inceleyelim:

1. "Programlama diline göre sözdizimi renklendirmesi yapabilen kod yazım editörü. " ve "Kod dosyalarının hiyerarşik olarak görülebilmesi amacıyla hazırlanmış gerçek zamanlı bir dizelge."( Örnek Resim 01 )

2. "Tümleşik bir derleyici, yorumlayıcı ve hata ayıklayıcı. " ve "Yazılımın derlenmesi, bağlanması, çalışmaya tümüyle hazır hale gelmesi ve daha birçok ek işi otomatik olarak yapabilmek amacıyla küçük inşa araçları"

Örnek Resim 01
Code::Blocks;
  • Compiler ( derleyici ) olarak GCC ( GNU Compiler Collection ) paketini (C, C++, Objective-C, Fortran, Java ve Ada dillerini içerisinde barındırmaktadır.) kullanmaktadır.
  • Ancak programımızın çalışmasını istediğimiz platform olarak Windows’u seçtiğimiz içinGCC’nin Win32 uygulamalarını derleyen kısmı olan MinGW ( Minimalist GNU for Windows) ‘yi kullanmaktadır demek daha doğru olacaktır :)
  • Debugger ( Hata Ayıklayıcı ) olarak GNU’nun hata ayıklayıcısı olan GDB’yi kullanmaktadır ( GDB: The GNU Project Debugger ) . GDB; C,C++ Objective-C, Ada Pascal ve diğer dillerde yazılan kodlarda hata ayıklayabilir-miş sitesinde yazılana göre :)
  • Yorumlayıcı kısmına girecek olursak tam olarak Code::Blocks’un nasıl bir yorumlayıcı kullandığından emin değilim açıkcası :)ama kullandığı bir tane mevcuttur muhakkak ( Yorumlayıcı hakkında daha fazla bilgi almak için tıklayınız. )

Code::Blocks’un sitesinden de özellikleri hakkında bilgi sahibi olabilirsiniz. Şimdi sıra Code::Blocks’un kurulumunda. Devam etmek için "Code::Blocks’un Kurulumu " başlıklı yazıya devam edebilirsiniz.

Bu yazıda kullanılan siteler :
  • http://en.wikipedia.org/wiki/Integrated_development_environment
  • http://en.wikipedia.org/wiki/Linker_%28computing%29
  • http://en.wikipedia.org/wiki/Compiler
  • http://en.wikipedia.org/wiki/Debugger
  • http://gcc.gnu.org/
  • http://www.bilgisayarkavramlari.com/2008/01/04/yorumlayici-interpreter/

tarihçesi ile flash

Günümüz oyun ve reklam sektörü başta olmak üzere, gerek internet ortamında, gerekse de mobil uygulamalarda çok sık karşılaştığımız veya kullandığımız flash; kolaylığı, erişebilirliği ve görselliği sayesinde vazgeçilmezler arasına yerleşmiş bulunmaktadır.

Sevgili Ayşen KARAMETE hocamızın bize ikinci sınıfta dediği gibi; "Flash ile yapılabilecekler sizin hayalgücünüzle sınırlı." Bu söze katılmamak elde değil zira Flash’ın en sonki dili olan Action Script 3 ile artık hayallerimizi gerçekleştirmemize bir adım daha yakınız.

Neden böyle pazarlamacı gibi konuşuyorum diyecek olursak? Şöyle ki; AS3 ile birlikte artış gösteren esneklik, verimlilik ve erişebilirlik beraberinde geliştirilen ek kütüphaneler ile 3D uygulamalarını web ortamında daha rahat gösterecek düzeye getirdi. Böylece artık daha interaktif web safyalarına sahip olup, 3D oyunları oynayabilecek düzeye geldik ve daha yenilikçi etkileşimlerde bulunup, daha farklı reklam politikaları izleyen şirketler gördük.

Bu yenilikçi dil için geliştirilmiş kütüphanelere örnek vermek gerekirse "Away3D" kesinlikle çok güzel bir örnek olacaktır. Zira piyasada "Papervision3D" isim yapmış durumdayken, "Away3D" güzel bir alternatif niteliğindedir. Bu iki kütüphane de 3D uygulamaları rahatça gerçekleştirmenize yarayan ortamı ve desteği sağlayacak fonksiyonlara sahip gelişmiş kütüphanelerdir.

İşler sadece bu 3D kütüphaneleri ile bitmiyor tabi. Yeni bir reklam yöntemine mi ihtiyacınız var? Yine AS3 için geliştirilmiş olan “Flartoolkit” tam ihtiyacınız olan şey. Gerek bir resim, gerek sabit bir video gerekse de bir webcam sizin kaynağınız olsun. Bu kaynağınızın beyaz üzerine siyah kalemle çizilmiş özel bir kareyi gördüğü zaman; o karenin yerinde olmasını istediğiniz 3D modelin gelmesini sağlayabilecek bir ortam söz konusu artık. bu 3D modeliniz sizin ürününüzün reklamını yapan bir karekter de olabilir, bir içeriğin anlatımını yapan bir materyal de olabilir.

Dahası da var :) “touchlib” kütüphanesinin AS3 için geliştirilmiş kısmı sayesinde evde yapabileceğiniz bir aygıt ile ( ki bu aygıtın maliyeti 20-30tl eder en kötü ihtimalle ) çoklu dokunma desteği olan uygulamalar geliştirebilir, web ortamında yayınlayabilir, gerekli kod bilgisine sahipseniz de oyunlar bile yazabilirsiniz.

Bu noktada eleştirel yaklaşmak gerekirse; AS3 ve kütüphaneleri halen geliştirilmektedir ve verimliliğinin artışı üzerine çalışmalar yapılmaktadır. Halen bazı noktalarda istikrarsız davrandıkları olabilmektedir. Action Script yapısı itibariyle insana yakın nitekilte bir dildir ve makineye yakın diller gibi bazı noktalara direk erişimi söz konusu değildir. Dolaylı yollardan erişime sahip olmasından dolayı da performans açısından her zaman verimli olmayabilir. Ancak bu; gelişme sürecinde, en istikrarlıya ulaşılması için kat edilmesi gereken bir adımdır.

Konuya devam edersek; bu ve benzeri kütüphaneleri ile giderek gelişmekte olan flash peki nasıl çalışmakta hiç merak ettiniz mi? İlk sürümünden itibaren aynı mantıkla çalışmakta olan Flash’da çizdiğiniz her bir eğri, doğru, açık veya kapalı şekilbir fonksiyonda tutulmakta. Çizdiğiniz şeklin konumu da değişse, boyutu da değişse bozulmamasının nedeni bu fonksiyonun temelinde sabit kalması. sadece içine girilen değerler değişmekte. Sabit bir tanım aralığında f(x)=y+2 fonksiyonu bir doğru çizecektir koordinat sisteminde.+2 değerini değiştirmek doğrunun y eksenindeki konumunu değiştirecektir. y’nin önündeki katsayıyı değiştirmek ise de doğrunun açısını değiştirecektir. Olayın mantığı bu şekilde işlemektedir benim verdiğim naçizane bir örnektir, flash’ın arkasındaki mantığı anlatmak amaçlıdır. Flash için bu çalışma mantığı ile vektörel bir programdır diyebiliriz. Zira bugün freehand desteği kesilmiş olsa da gerek freehand’de gerekse de illustrator, fireworks ve photoshop’ta da bu şekilde vektörel çizimler mevcuttur.

Burada noktada şunu da belirtmem gerekir ki Flash’ın yaratıcısı olan “Jonathan Gay”e bir teşekkür borcumuz vardır. Zira onun hayal gücü bugünkü ortamın oluşmasında ektili olmuştur. Jonathan Gay ve Flash1′e kadarki izlediği yol hakkında ayrıntılı bilgi almak için:

http://www.flashdersleri.com/html_dosyalar/flash1.html

http://tr.wikipedia.org/wiki/Adobe_Flash