29 Aralık 2011 Perşembe

Wicket Javascript ve CSS Desteği

Geçen yayınımda Wicket projemize nasıl Wicket kontrolünü devre dışı bırakarak JavaScript ve CSS desteği eklenebileceğine deyinmiştim. Bu yayınımda ise, Wicket kütüphanesinin sağladığı JavaScript ve CSS desteği ekleme yeteneklerinden bahsedeceğim.

Wicket projelerinde, genellikle sayfa sınıflarının türediği bir veya birden fazla taban sayfa sınıfları mevcuttur. Bu taban sayfa sınıflarının en önemli özelliklerinden biri ise, JavaScript ve CSS eklentilerinin alt (türemiş) sınıflara aktarabilmesi özelliğidir. Bu yayınımda, bu özellikten yararlanacağım.
<!DOCTYPE html> 
<html xmlns:wicket="http://wicket.apache.org"> 
    <head> 
        <meta charset="UTF-8"> 
        <meta name="description" content="Base Page of Wicket Pages!" /> 
    </head> 
    <body> 
        <header wicket:id="headerpanel" />
        <section class="content_container"> 
            <wicket:child/> 
        </section> 
        <footer wicket:id="footerpanel" /> 
    </body> 
</html>

3 Aralık 2011 Cumartesi

Wicket Javascript ve CSS Desteği ve Wicket Resim Problemi Çözümü

Bu yayınımda çok teknik olmayarak, oldukça basitçe Wicket sayfamıza nasıl javascript ve CSS desteği ekleyebileceğimizi anlatacağım.

Wicket Framework'ü bize resim, bağlantı gibi bileşenleri iki şekilde eklememizi mümkün kılar.

  1. Wicket kontrollü
  2. Wicket kontrolsüz (yada HTML kontrollü)

Ben bu yayında sadece HTML kontrollü olarak CSS ve javascript desteğinin nasıl ekleneceğine değineceğim çünkü Wicket kontrollü olarak eklemek için oldukça fazla kaynak zaten mevcut.

Elimizde login.html şeklinde şablon olarak hazırlanmış bir sayfamız olsun. İlk olarak bu sayfayı Wicket sayfası haline çevirmemiz gerekir. Bunun için aşağıdaki adımlar izlenebilir.

1) Sayfanın ismi LoginPage.html olarak değiştirilir. (Bu adım opsiyoneldir. Fakat okunaklılık açısından bu yapıya uymak önerilir ve Java dosyası ile isim uyuşmasını korumak gerekmektedir).

2) Ardından aynı isimde LoginPage.java Java sınıf dosyası oluşturulur.

public class LoginPage extends WebPage {
}

3) LoginPage.html sayfımızın <html> etiketi aşağıdaki gibi değiştirilir.

<html xmlns:wicket="http://wicket.apache.org">

4) HTML sayfamızın <head> kısmına css/style.css CSS dosyasını eklemek için aşağıdaki kodlar sonuna eklenir.

<wicket:head>
    <wicket:link>
        <link rel="stylesheet" href="css/style.css" type="text/css"/>
    </wicket:link>
</wicket:head>

5) js/script.js gibi bir javascript dosyasını eklemek için ise <wicket:link> etiketini kullanırız.

<wicket:link>
    <script type="text/javascript" src="js/script.js" />
</wicket:link>

Resimlerin HTML kontrollü görünmesi için ise aynı şekilde <wicket:link> etiketini kullanabiliriz.

<wicket:link>
 <img src="images/image.png" alt="[image]" class="picture" />
</wicket:link>


21 Ekim 2011 Cuma

Yayınları PDF Olarak İndirme

Bazen blog sitelerinde yayınlanan makaleleri ayrık PDF olarak kaydetme ihtiyacı duyarız. Bu makaleleri seçip kopyalayıp düzenlemek yerine bizim için bunu otomatik olarak yapan bir mekanizma olsa daha iyi olurdu elbet!

Artık bu özelliği blog siteme eklemiş bulunuyorum! Her yayının sol alt köşesindeki "Print PDF" bağlantısına tıklayarak çıktı yada PDF olarak elde edebilirsiniz.

Kendi blogspot sitesine bu özelliği eklemek isteyenler için: http://www.printfriendly.com/button

16 Ekim 2011 Pazar

Blogger için Syntax Highlighting (Sentaks Boyama) II


Eğer herhangi bir programlama dilini kullanarak blog yazıyorsanız bu kodların boyanmasını ve daha anlaşılır hale gelmesini isteyeceksiniz. Bunu yapmanın bir yolu da sentaks boyamasıdır. Sentaks boyaması için yapılmış oldukça fazla çalışma vardır fakat ben burada basit bir tanesine değineceğim.

Daha önceki yayınımda Heisecoder'in blogundaki ilgili yayının linki vermiştim. Fakat bazı farklılıklar olduğu için uygulamada sıkıntı yaşayanlar için tekrar yazmaya karar verdim.

1) İlk olarak bu adrese gidip içereğini Ctrl+A ile hepsini seçip Ctrl+C ile kopyalayın.

2) Blogspot hesabınızdaki Tasarım ekranına geçin.



3) Burada "HTML'yi Düzenle" seçeneğine tıklayın. Karşınıza mesaj çıkınca "Devam et" deyin

4) Kopyaladığınız css bilgisini  <b:skin><!--[CDATA[/*  etiketlerinden sonra aşağıdaki gibi ekleyin:



5)  Aşağıdaki kodları </head> etiketinden hemen önce ekleyin:

<!-- Add-in CSS for syntax highlighting -->
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shCore.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCpp.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCSharp.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCss.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushDelphi.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJava.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJScript.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPhp.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPython.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushRuby.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushSql.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushVb.js' type='text/javascript'></script>
<script src='http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushXml.js' type='text/javascript'></script>

14 Ekim 2011 Cuma

Sim6802 Benzetim Programının Adım Adım Kullanılması (64bit desteği ile)

Sim6802 programı çok eski bir program olduğu için 64 bitlik bilgisayarlarda doğal olarak çalışamıyor. Bunun için bir taklit edici (emulator) programa ihtiyaç duyarız. Ben bu yayınımda kolay olması açısından DOSBOX kullanacağız.

DOSBOX kullanımı haricinde kalan kısımlar 32 bitlik bilgisayarlar için değişmemektedir.

DOSBOX yer aldığı bilgisayarın diskine erişmek için ilk önce bir yolu (path) sürücü olarak tanımlamak gerekir. Bu işlem "mount" komutu ile yapılır. Bu işlem belleksizdir, yani her program açışımızda tanımlama işlemini tekrarlamak zorunda oluruz. Ancak yapılandırma dosyasına bir eklenti yaparak bu işlemi tekrarlı hale getirebiliriz. Bunun için ilk olarak sim6802 klasörüne gideriz. Bu örnekte C:\sim6802 yolunu kullanacağız.

1) İlk olarak Dosbox <sürüm numarası> Options.bat dosyasını çalıştırırız.


2) Bu karşımıza dosbox-<sürüm numarası>.conf dosyası açılır, burada [autoexec] etiketi altına yolumuzu tanıtan, oraya giden ve programı açan komut satırlarını da ekleriz.

9 Ekim 2011 Pazar

Projeye İçerik (Content) Eklenmesi ve Çizdirilmesi

Bir projede en önemli bileşenlerden biri de içeriktir. Hatta öyle ki, büyük oyunlarda (3 GB gibi) içerik projenin %99.99'unu kaplar. Çünkü çalıştırılabilir program olarak adlandırılan .EXE dosyaları sadece basit derlenmiş koddan başkasını içermez (gömülmüş içerikler hariç).

İçerik dosyaları o kadar gelişmiştir ki bazıları kod bile içerebilir. Bazen sadece kod içeren içerik dosyalarımız da olabilir. Bunlara script deriz. Bunları işlemek için kendimiz bir işleyici yazmamız gereklidir. Kendi script dilimizi yazmak istiyorsak önümüzde üç yolumuz vardır:
  1. Dosyayı gerçek zamanda kendimiz çözümleriz ve gerekli komutları yürütmeye çalışırız.
  2. Interpreter (Yorumlayıcı) şablonunu kullanırız.
  3. Parser Generator (Çözümleyici Üretici) kullanırız.
Bu üç seçeneği de kullanmak işimize gelebilir. Küçük çaplı ve çözümlemesi kolay bir dil tasarlamışsanız birinci seçenek çok daha iyi olacaktır. Fakat biraz genişletilebilirlik ve düzen istiyorsanız artık ikinci seçenek sizin için daha iyi olacaktır. İkinci seçenek script dilleri için yeterli olabilir. Fakat gerçekten günümüzde kullanılan programlama dillerine (Java, C++ gibi) yakın bir dil tasarlamak istiyorsanız üçüncü seçenek kaçınılmaz olacaktır. Oyunlarda genellikle ikinci seçenek kullanılmakla beraber bazı büyük oyun motorlarında üçüncü seçeneğinde kullanıldığına rastladım.

Bu kısımda iki boyutlu ve üç boyutlu içeriğin nasıl eklenileceğini göstermeye çalışacağım. İlk olarak iki boyutlu içerik ile başlayalım:

Bir önceki bölümde oluşturduğumuz projenin alt projesi olan içerik projesine Add>Existing Item... seçeneği ile diskimizde olan içerikleri ekleyebilir.

Oyunun içerikleri içerik projesine (Content Project) eklenir. Örnek olarak bir iki boyutlu doku (texture) dosyası ekleyelim.

8 Ekim 2011 Cumartesi

Veri Tabanı Yönetim Sistemleri Yararlı Bağlantıları

Bu derste çok fazla bağımsız bileşen bulunduğu için bir bağlantı listesi çalışması yapmayı yararlı gördüm. NetBeans ile Wicket 1.4 uygulama geliştirmek için gerekli eklentileri buradan indirebilirsiniz. Eğer Mac OS X kullanıyorsanız Mercurial ve Tomcat 7 kurulumu sıkıntılı olabilir. Mercurialburadan kurabilirsiniz. Tomcat 7 kurulumu hakkında bir yayını da buradan okuyabilirsiniz.

5 Ekim 2011 Çarşamba

XNA 4.0 ile 3D Oyun Programlamaya Giriş

Bu bölümde boş bir XNA 4.0 projesi oluşturmanın adımları ile başlayacağım. İlk önce gereksinimlerden bahsedelim:

Sistem Gereksinimleri
  • Windows Vista SP2 ve üstü
  • En azından Shader Model 1.1  ve DirectX 9.0c destekleyen bir grafik kartı

Gerekli Ortam ve Kütüphaneler
  • Visual Studio 2010 Express Edition (C#)
  • .NET Framework 4.0
  • XNA Framework 4.0
  • Bu sistem, ortam ve kütüphane şartları sağlandıktan sonra artık projemizi oluşturabiliriz.

Gerekli Programlama Bilgisi
  • C# .NET (4.0 ve sonrası)

VISUAL STUDIO 2010 EXPRESS EDITION (C#)

Visual Studio XNA projeleri geliştirmek için gerekli tümleşik geliştirme ortamıdır (TGO, ing. IDE). Microsoft firması tarafından tavsiye edilen sürüm bedava olan Express Edition'dır. Bu yayın serisinde C# ile geliştirme yaptığım için Visual Studio Express Edition C# indirilmelidir.

 .NET Framework 4.0 ve XNA Framework 4.0

Şu anda kullanılan ve destek verilen en son XNA framework sürümü 4.0'dır.  Aslında 3.0 sürümü olmasına karşın bu sürümde çok önemli optimizasyonlar yapılmıştır. XNA Framework 4.0 en az .NET Framework 4.0 ile çalışır. .NET Framework 4.0 zaten Visual Studio 2010 Express Edition ile birlikte ekli olarak gelir.

Yeni Bir Proje Oluşturmak
1) İlk olarak başlangıç sayfasında File>New>Project seçilir. (Bu işlem Ctrl+Shift+N kombinasyonu ile de kısaca yapılabilir).


2) Burada Visual C# kategorisinden Windows Game (4.0) seçilip projeye adı koyulur. Ben örnek olarak TutorialProject ismini tercih ettim.

1 Ekim 2011 Cumartesi

Google Docs ile dosya paylaşımı

Günümüzde dosya paylaşımı için çok çeşitli yollar var. Bunların bir kısmı ticari bir kısmı ise bedava. Bedava olup bize hem yüklememiz hem de indirmemiz için kolay ve gürbüz bir arayüz sağlayan yer sağlayıcılar oldukça az. Genellikle kolay yükleme sağlanırken bedava olduğu için reklamlar ve süre beklemeler insanın canını sıkabiliyor.

Google Docs bedava ve ayrıca dosyalarımızı bis dosya sistemi şeklinde düzenlememizi sağlarken, office dosyalarını da sorunsuz olarak açmamıza olanak sağlıyor. Bunların yanında sağladığı bağlantı oluşturma özelliği ile dosyalarımızı bağlantı yoluyla da kolaylıkla, sorunsuz ve habersizce silinme korusu olmadan paylaşabiliyoruz.

Bu yayınımın amacı ise bu dosya paylaşımını nasıl yapıp link oluşturulacağını kolay olarak anlatılması.

1) İlk olarak Google Docs sayfasına Google hesabımızla giriş yapalım. Giriş başarılı olduktan sonra aşağıdaki gibi bir sayfa açılır (burada IE9 ve Türkçe Google kullanılmıştır, görüntü tarayıcı ve kullanılan Google diline göre değişebilir).


2) Sonraki aşamada örnek olarak 1.png adında bir resim yükleyelim.


3) Açılacak dosya seçme penceresinden yerel dosya sisteminden 1.png dosyasını seçip onayladıktan sonra dosyayı yüklemiş oluruz. Sonrada dosyayı paylaşmak için yüklenen dosyanın üzerine sağ tıklarız.

17 Eylül 2011 Cumartesi

XNA Race Game

Oyun projem için bir Facebook sayfası hazırladım buradan bakabilirsiniz.


Yakında oyunda kullandığım teknolojiler hakkında blog yazmaya başlayacağım. Özellikle işleyeceğim konu başlıkları şöyle:

Temel
  • XNA 4.0 ile temel bir proje nasıl oluşturulur
  • Yardımcı sınıflar (RandomHelper, InputController)
  • Temel lineer cebir ve oyundaki uygulamaları*
  • Oyuna içerik eklemek (2D Texture, 3D Model, Effect, Sound)
  • Modelleri sınıflar ile temsil etmek (ModelManager, StaticModel, AnimatedModel, SkinnedModel)
  • Kamera, ışıklandırma ve özel efektler (HLSL) *
  • 2D ve 3D birlikte çizdirme ve 2D textureları 3D ortamda çizdirmek (Billboard Effects)
  • Yer şekilleri oluşturma (Terrain Generation)*
  • 2D Animasyon*
  • 3D Animasyon
  • 3D Ses*
Extra
  • Screenshot capturing
  • 3D Studio Max'ten XNA 4.0 için model çıkartma
  • XNA 4.0 için kurulum projesi
  • Tasarım şablonlarının oyundaki kullanımlarının listesi
  • Geliştirme boyunca karşıma çıkan sorunlar ve çözümleri
* Bu konular hakkında ayrıca çalışma yapmadan yayın yapmayacağım

14 Eylül 2011 Çarşamba

Açık Kaynaklı 3B Oyun Projesi Hakkında

Son zamanlarda oyunumu açamayanların sayısı artınca söylemeyi unuttuğumu farkettim:

Oyunum XNA 4.0 Framework kullandığı için ilk önce bu framework'ü kurmanız gerekli.
Buradan indirebilirsiniz.

XNA 4.0 Framework de .NET Framework 4.0 kullandığı için ilk olarak onu kurmanız gerekli. Onu da buradan indirebilirsiniz.

13 Eylül 2011 Salı

Decorator Pattern (Bezeme Şablonu)


Tür: Yapısal Şablon
Diğer Adı: Sarmalayıcı (Wrapper)

Adında anlaşılacağı gibi bezeme şablonu ilişkilendirildiği (bu manada Ingilizce 'attach' fiili kullanılır) sınıfı dinamik olarak dekore eder. Bezeme şablonuna ayrıca sarmalıyıcı (Wrapper) da denir. Bu isimle daha çok karşılaşmak mümkündür çünkü C# dilinin kendi içinde doğal türlerin (int, float, double gibi) birer Wrapper sınıfları bulunur. Buradaki konsept her ne kadar farklı da olsa gerçek hayatta bir şablonun zaten tek ve nihayi bir hali yoktur.

Bezeme şablonuna alternatif olarak sınıf türetme düşünülebilir. Fakat bu durumda bir sınıfın alacağı durum önceden belirlenmiş (statik olarak) ve sınırlandırılmış olur. Bu genellikle karşılaşılan bir durumdur fakat bazı durumlar vardır ki dinamik olarak bezemek daha çok işimize gelebilir. Örneğin bir sınıfımıza ekleyebileceğimiz n tane yeteneğimiz (capability) olsun. Bu yeteneklerin bir yada bir kaçını destekleyen alt sınıflar elde etmek istersek n'in bütün kombinasyonlarını toplamamız gerekir. Fakat bu işi bezeme sınıfları ile yaparsak sadece n tane bezeme sınıfını türetmek yeterli olur.

Bezeme şablonu oldukça sık karşılaşılan bir şablondur. Son zamanlarda moda olan AOP (Aspect Oriented Programming) özellikle bezeme şablonu üzerine bina olmuştur. AOP'ta Interceptor denilen nesneler kendisi için özel olarak bezenmiş sınıflara sonradan raporlama gibi iş hayatında önemli özellikler katabilir.

Bezeme şablonu en çok katmanlı yapılarda kullanılır. Her sınıf bir katman teşkil eder. Katmanlı yapılara da en iyi örnek görsel uygulamalardır (GUI App - Graphic User Interface Application). İlk önce boş ekranı temsil eden bir sınıf olur. Bu sınıf bile tek başına görüntü oluşturabilir. Fakat çeşitli kütüphanelerde (.NET, Java Swift, Qt gibi) farklı olmakla birlikte çok benzer katmanlı görsel sınıflar vardır. Bu sınıflar hepsi aynı sınıftan türerler. Hepsinin kendini çizdirme metodları vardır. İstenilen çizdirme özelliği için var olan görsel nesne bu yeteneği temsil eden sınıf tarafından sarmalanır.


Burada GoF'un meşhur kitabı olan "Design Patterns: Elements of Reusable Object Oriented Software"dan alıntı. Burada görsel olarak katmanlamanın nasıl yapıldığı ve sonucun neye dönüştüğü gösterilmiştir. Aşağıda da bu yapının sınıf çizelgesi de vardır.


Burada VisualComponent ana sınıfımızdır. Genellikle soyut sınıf (abstract class) olur. TextView sınıfı sadece verilen yazıyı göstermekle yükümlüdür. Diğer Decorator'dan türeyen ScrollDecorator ve BorderDecorator sınıfları TextView sınıfını isteğe bağlı olarak bezer. İster biri, ikisi yada hiçbiri kullanılmayabilir.

6 Eylül 2011 Salı

Açık Kaynak Kodlu Oyun Projesi

Bugün itibariyle 2 haftadır uğraştığım XNA tabanlı 3B yarış simulasyonumu Google Code ile yayınlamış bulunuyorum. Projeme buradan erişiblirsiniz. Ayrıca ilerleyen zamanlarda projede kullandığım irili ufaklı teknolojileri (middle-ware) de açıklayacağım.

1 Eylül 2011 Perşembe

iPhone 4 Home Düğmesi Problemi

Eğer iPhone 4'ünüzün home düğmesi bir anda basmamaya başlarsa (ki daha alalı 3 ay olmasına rağmen) çözüm çok basit:
Elinize bir diş fırçası alın ve iPhone 4'ünüzün home düğmesini sertçe fırçalayın. Çıkan tozlara inanamayacaksınız. :)

edit: Eğer servise gidilse bile ilk yapacakları şey "hard restart" denilen işlemdir ki bu muhtemelen işe yaramaz. Bu da olmazsa "restore" işlemi yapacaklardır. Bu işlemde uzun sürer çünkü tüm bilgilerin ilk önce yedeklenmesi ve tekrar geri yüklenmesi gerekecektir. Bu işlemler toplamda saatler sürebilir. Bu yöntemler eğer problem yazılımsal ise ancak işe yarar ki bu düğme problemi tamamen mekanik kirlenmeyle ilgilidir ve bu fırçalama çözümü bir servise ihtiyaç duymadan halledilir.

22 Ağustos 2011 Pazartesi

The Strategy Pattern (Strateji Şablonu)

C++ veya Java gibi diller öğretilirken genellikle "is-a" ilişkisinin "has-a" ilişkisinden daha iyi olduğu söylenir. Yani, bir sınıfın içinde başka bir sınıftan nesne tutmak yerine aynı sorunu türeterek çözmemizin daha iyi olduğu söylenir. Hatta cümle olarak "Favor inheritance over composition", yani "türetmeyi kompozisyona (sahibi olma ilişkisi) tercih et". Fakat aslında bu genellikle tam tersidir. Genellikle diyorum çünkü gerçek hayatta amaca yönelik olarak her şey değiştirilebilir. Mesela çok hızlı çalışmasını düşündüğümüz bir robotik projesinde chip üzerinde (Eşref Adalı görse çok kızardı) Java veya C# kodunun çalışmasını henüz beklemeyiz. Dolayısıyla tasarım şablonları bir amaç değil araçtır.

"Kompozisyonu türetmeye tercih et!"

Bu bölümde tam da bu sözü doğrulayan bir tasarım şablonu olan strateji şablonunu anlatacağım. Strateji şablonu aralarında değiştirilebilir algoritma aileleri tanımlar. Ayrıca strateji algoritmanın kullanıcısından bağımsız olarak değişmesini sağlar.


Strateji şablonunu kullanarak her davranış değişikliği için bu davranışı kullanan sınıfı türetmek yerine bu davranışı temsil eden bir arayüz nesnesi
tutup ondan davranışlar türetilirse kullanıcı olan sınıf artık yeni davranışları takip etmek zorunda kalmaz.

Bunu anlatmak için örnek verelim. Örnekleri Java dilinde vereceğim çünkü bahsettiğim gibi tasarım şablonları ile en iyi uyumlu olan dil Javadır. 

Örneğin bize kendini tanıtan, bir yere giden ve bize veda edip geldiği yere geri dönen bir Person sınıfımız olsun. Bu kişi farklı dillerde selam verebilir, selamlaşabilir ve bir yere farklı şekillerde gidebilir. Bütün bu çeşitler için bir sınıf türetmeye kalksak tüm davranışların sayısının çarpımı kadar alt sınıf yazmamız gerekirken, bazı sınıflar ise belki çok anlamsız ve gereksiz olacaktır. Ayrıca alt sınıfımızı dinamik olarak değiştirmek de güvenli olmayabilir.
//package info

public class Person {
    //constructors
 
 public void introduce()
 {
     helloBehavior.sayHello(this); 
 }
 
 public void moveTo(int x, int y)
 {
     moveBehavior.move(this, x, y);
 }
 
 public void leaveAndGoTo(int x, int y)
 {
     goodbyeBehavior.sayGoodbye();
     moveBehavior.move(this, x, y);
 }

 // Getters and setters

 // Behaviors
 HelloBehavior helloBehavior;
 GoodbyeBehavior goodbyeBehavior;
 MoveBehavior moveBehavior;
 
 // Properties
 protected int x, y;
 protected String name;
}
Burada anlattığım gibi üç tane davranışı temsil eden HelloBehavior, GoodbyeBehavior,
MoveBehavior arayüzleri var. Burada ayrıca bir prensibi daha görüyoruz:

"Uygulamayı değil, arayüzü tasarla!"

Blogger'a Syntax Highlighting eklemek

Bu akşam kısmetse ilk pattern hakkındaki kaydımı yayınlayacağım. Bu kayıtta konuyu açıklamak için kullandığım kod örneklerini sanki IDE'de yazarmış gibi okunaklı olması için hazır Syntax Highlighting kodu kullandım. İlgilenen varsa buradan nasıl yapılacağını öğrenebilir.

Ayrıca bu konuda yeni bir yayın daha yazdım. Buradan ulaşabilirsiniz.

20 Ağustos 2011 Cumartesi

Design Patterns (Tasarım Şablonları)

Bilindiği gibi bir çok programlama tekniği mevcut. Hatta, ne kadar programcı varsa, aslında o kadar programlama tekniği vardır. Programlama tekniği adeta insanın hayat görüşünün bile bir yansıması olarak düşünülebilir. Çünkü insan kadar hayat görüşü ve programlama tekniği varsa bunlar bir birlerine gizli bir şekilde bağlı demektir. Fakat tabiki bu görüşleri üst kategorilerde toplamak da mümkündür. Bu tekniklerin en ünlülerinden biri şüphesi "nesneye dayalı programlamadır" (NDP, ingilizce OOP).

NDP, içerdiği programlama prensipleri ile oldukça düzenli bir yöntem olduğunu kanıtlamıştır. Zaten de istatistiklere göre (google trends ve bir kaç programlama şirketinin) dünyada en çok tercih edilen programlama dili Java'dır. Java nesneye dayalı bir dildir. Fakat Java'yı bu kadar popüler yapan şey sadece NDP olması değil ayrıca tam olarak tasarım şablonlarını (design patterns) destekleyecek şekilde bina edilmesidir.

Nedir peki tasarım şablonları? Tanımlanırsa bir tasarım şablonu, bir durumdaki probleme getirilen çözümden ibarettir. Bu tanımı gereğiyle algoritmaya benzetilebilir fakat tasarım şablonları oldukça yüksek seviyeli bir tasarım metodudur.

Tasarım şablonları bu kadar popüler yapan şeylerden biri ise programcıların yıllarca çalışmasıyla elde ettiği deneyimleri düzenleyip adeta matematik teorileri gibi düzenlemesidir. İyi bir programcı, kesinlikle tasarım şablonlarının çözüm getirdiği problemlerle kendisi karşılaşmış ve hatta belki de farkına varmadan bu çözümü aynı tasarım şablonlarında anlatıldığı gibi getirmiştir.

Fakat genellikle programcılar tasarım aşamasında fazla düşünmeden kod yazdığında genellikle içinde çıkılmaz durumlara düşerler. Mesela programda yapılan ufak bir değişiklik bile aynı anda bir sürü kodun değiştirilmesine neden olur ki bu hem zaman alıcı hem de sonra oluşacak hatalara da zemin oluşturucu bir durumdur.

Yani kısaca bir programdan beklenilen şeyler şu şekilde sıralanabilir:
  • Tamir edilebilme (maintainability)
  • Ölçeklenebilme (scalability)
  • Tekrar kullanılabilme (re-usability)
  • Taşınabilme (mobility)
  • Okunaklılık (readability)

Bu özelliklerin hepsini sağlamak çok zordur. Fakat tasarım şablonları bu beklentileri büyük derecede karşılar. Önümüzdeki yazılarımda programcılar tarafından en çok kullanılan patternları anlatacağım.

19 Ağustos 2011 Cuma

XNA ile bir hafta

Bugün itibariyle bir haftadır XNA ile uğraşıyorum. Ancak bugün yavaş yavaş animasyonları kontol eden sınıflar yazmaya başlayabildim. Ufak bir yarış simulasyonunun da en önemli kısmı bitti. Tam anlamıyla oynanabilir olduktan sonra burada yayınlayacağım. Eğer ilgilenen olursa indirip eleştirilerini yorum olarak bırakırsa sevinirim.
Ayrıca başarabilirsem bir ayın sonunda XNA hakkında tamamen uygulamaya yönelik çok genel amaçlı olmayan bir tutorial dizisi de yayınlamayı düşünüyorum (İngilizce ve Türkçe olarak). Sizce yararlı olur mu?

16 Ağustos 2011 Salı

4000 Senelik Türk Oyunu: MANGALA

Bugün facebook'ta bir arkadaşımın paylaşmasıyla tanıdığım bu oyunu çok sevdim. Kurallarından bahsedecek değilim, buradan okuyabilir ve izleyebilirsiniz, ama tavlayı andırırken şansa bağlılık olmayışı gerçekten ilgi çekici. Ayrıca kuralları okudukça gerçeklenmesi oldukça kolay bir oyun olduğunun farkına vardım. Belki bir kaç platform için (web, Windows, iOS, Android, Linux vb.) projeler yapılabilir. İlgilenenler varsa aşağıya yorum bırakabilirler.

edit: Bu sitede güzel bir çalışma yapmışlar fakat yine de genişletilmeli ve yaygınlaştırılmalı. 

edit: Bir arkadaşında dediği gibi -ki gerçekten de ben de hatırlar gibiydim de çıkartamadım- bu oyun resmen eski Nokia'lardaki Bantumi oyununa çok benziyor.