1 hafta önce “Lost” manyaklığı içinde kendimi buldum.Neden manyaklık diyorum?Çünkü diziyi izleyen kimi tanıyorsam, ciddi anlamda Lost fanatiği olmuş durumda. Amerikada yayınlanan bölümleri ile paralel şekilde izleyen,takip eden, merak eden, ciddi bir şekilde muhabbet konusuna dönüştürüp, olaylar üzerinde devlet meselesi gibi tartışanlar var.Manyaklık değilde nedir bu ? 🙂
Windows Vista ile, DirectX’in yeni versiyonu DirectX 10 tam olarak çıkıyor ve oldukça merakla bekleniyor. En azından ben, gelen haberlerden dolayı yeni versiyonu merakla bekliyorum. DirectX, Wındows tarafında grafik programlama için temel bir API olmuştu hep. Ancak nedense şu ana kadar çıkan hiç bir Windows sürümünde bu API’nin işletim sistemi ile entegrasyonu fazla görememiştik, çünkü yoktu. Ama DirectX 10 ve Vista oldukça entegre bir şekilde çalışacak haberleri ve çeşitli örnekler, grafiksel olarak güzel şeylerin bizi beklediğini gösteriyor.
Yeni DirectX versiyonunda öne çıkan asıl DirectX component’ı Direct3D olacak sanırım. Her ne kadar XInput(ex-DirectInput) veya ses ve görüntü componentinde(XACT) büyük değişiklikler olsa da Direct3D 10 sanırım en çok üzerinde konuşulan yeni DirectX component’ı.
Vista ile beraber olarak gelecek olan DirectX 10, farklı kavramlar ile karşımıza çıkacak.Bunlar Direct3D 9Ex(extended) ve Direct3D 10. Direct3D 9Ex, Direct3D 9 versiyonu ile çalışan uygulamalar için,Vista’da çalışabilmesi için DirectX 9’un biraz da genişletilmiş hali. Tabi ki eski DirectX 9 API’si de Vista için geçerli olacak.
Nedir bu Event?
Event, olay,hadise,vaka,aktivite olarak çeşitli Türkçe kelimeler ile tanımlanabilir. Bir programda da aslında tam olarak böyle. Event, bir programın belli bir aktivitesi olarak adlandırabiliriz. Event’lerin gerçekleşmesini sağlayan çeşitli durumlar vardır,bu durumlara tetik diyoruz. Kısaca olayların gerçekleşmesi için onların tetiklenmesi gerekir. Basit bir örnek ile olayı biraz daha özetlesem sanırım daha anlaşılır olur. Şimdi bir alarm yönetim sistemi var diyelim.Çeşitli yerlerdeki alarmları kontrol ediyor olsun. Bu çeşitli yerlerden biri bir banka olsun. Gece geç saatlerde bu bankaya bir hırsız girsin(tetik) ve alarmın çalışmasına neden olsun. Alarm yönetim sistemine giden bu alarm da bize nerede,saat kaçta olayın olduğunu bildirsin. Biraz daha programcılık terimleri ile olaya başka açıdan bakalım şimdi. Şimdi bankaya biri girdiğinde haberdar olmak istiyoruz.HIRSIZGIR() diye bir metod olsun,ve hırsızın bankaya girme metodu olsun.Hırsızın bankaya girme olayı gerçekleştiği zaman ALARMCAL() methodu çalışsın ve bize haber versin. Bu işi ALARMCAL() metodunu, HIRSIZGIR() metodu ile ilişkilendirerek yapabiliyoruz. Ve bu şekilde HIRSIZGIR() çalıştığı zaman ALARMCAL() metodu tetiklenmiş olacak. Umarım bu örnek olayın biraz anlaşılması için yeterli olur,gerçi aşağıda program koduyla bazı şeylere daha net deyiniyor olacağım. Bu konuda bahsedilmesi gereken bir diğer kavram ise delegate(delege,temsilci) metodlar. Object Oriented Programming kavramının ana taşlarından biri olan data encapsulation, açısından bakarsan delegate metodlar içinde method encapsulation diyebiliriz. Biraz daha anlaşılır olması için, delegate(temsilci) metodların, başka metodları temsil etmesi olarak basit bir cümle kurabilirim. Delegate metod, temsil ettiği başka bir metodun çalışmasını sağlar. Bu şekilde bir nesne içindeki metodların içeriklerinin biraz olsun gizlenmesi sağlanabilir. Şimdi biraz kod üzerinden gidelim. class AlarmEventArgs : EventArgs { private string place; private string time; public AlarmEventArgs(string p,string t) { place = p; time = t; } public String Place { get { return place; } } public String Time { get { return time; } } }
Üstteki kodda System.EventArgs’yi kullanarak kendi EventArguments’ımızı yaratıyoruz. Bu belirlediğimiz event gerçekleştiği zaman bize döndürecek argümanları belirleyebiliyoruz. Kendi EventArguments’larımızı yazma gibi bir zorunluluğumuz yok aslında ama ben genellikle tercih ediyorum.
public class Alarm { //Event'in tetiklenmesini sağlayacak olan delegate metodunu tanımlıyoruz. //Tanımlama sırasında metod içinde bir işlevine dair hiç bir şey yazmıyoruz. //Parametre olarakda bu Event'i tetiklenen obje ve parametreleri tanımlıyoruz. public delegate void AlarmEventHandler(object sender, AlarmEventArgs e); //Yukarıda tanımladığımız delegate methodu tipinde bir event tanımlıyoruz. public event AlarmEventHandler AlarmEvent; public void Active(string p,string t) { AlarmEventArgs args = new AlarmEventArgs(p, t); AlarmEvent(this, args); } }
Burada delegate metodumuzu tanımlıyoruz.Alacağı parametreleride belirtikten sonra da, event’i de tanımlıyoruz. Dikkat ederseniz event’in döndüreceği bilgi olarak delegate metodumuzu yazıyoruz. Yani event’i bir method ile ilişkilendiriyoruz burada. Bence Event ve Delegate konularında en önemli ve dikkat edilmesi gereken yer burası.
public static void Main() { Alarm a = new Alarm(); //Event sonuçunda çağıralacak metodu temsilci metoda tanıtıyoruz. a.AlarmEvent += new Alarm.AlarmEventHandler(a_AlarmEvent); a.Active("Banka", "02:34"); a.Active("Market", "23:04"); } //Event gerçekleştiği zaman çalışacak olan metod. static void a_AlarmEvent(object sender, AlarmEventArgs e) { Console.WriteLine("Alarm is started in "+ e.Place+" at "+e.Time); }
Main fonksiyonu içinde gerekli tanımlamalardan sonra, Alarm nesnesinin Event\’ine temsilci metodun temsil edeceği metodu atıyoruz.Burası da çok önemli bir nokta. Çünkü olayın gerçekleşmesinden sonra çağırılacak fonksiyonun içeriğini burada tanımlıyoruz.Bu örnekte,ben Alarmın nerede aktif olduğunu ve saat kaçta çalıştığını konsola yazdırdım.Bu çok ama çok basit bir örnek oldu.Umarım anlaşılmış,en azından bazı şeylerin biraz daha oturmasını sağlamıştır. Her türlü soru ve fikirlerinizi thearda@hotmail.com adresine bekliyorum.
DirectX’in yeni versiyonu DirectX 10’nun çıkmasına az kaldı.Vista ile birlikte entegre bir şekilde gelecek olan yeni versiyon, eski versiyonlara göre oldukça kuvvetli.İlerleyen günlerde oldukça kapsamlı bir directX 10 yazısı burada olacak ama şu an bahsetmek istediğim ve üzüntü duyduğum bir konuyu söylemek istiyorum, o da artık Managed DirectX 2.0’ın artık olmayışı. 1 yıl önce Microsoft geliştiriciler için MDX 2.0’ı beta olarak çıkardı ve 1 yıl içerisinde bir çok revizyon ile bunu paylaştı. Ancak son çıkan DirectX October 2006 SDK’sı içerisinde artık MDX 2.0 Beta yok. Zaten beta olan bir şeyi kaldırmanın çok da önemi gözükmese de aslında geliştiriciler için çok büyük sorun çıkardı bu. Mevcut 2.0 çalışmalarımı MDX 1.1’e çevirmek gerçekten zahmetli ve sıkıcı bir iş oldu. MDX 1.1’in stable bir versiyon olması, aslında neden o varken 2.0’a geçtim gibi sorularıda bu zahmetli iş sırasında oldukça aklımı kurcaladı. Bu arada atlamadan birşey hatırlatmak istiyorum, MDX 1.1, .NET 2.0 ile beraber çalışıyor.
Peki neden böyle bir şey oldu?
XNA Framework’ü önümüzdeki aylarda,çok yakın bir zamanda çıkacak. XNA ile baya iddialı olan Microsoft, tüm DirectX geliştiricilerini sanırım bu platform altında toplamak istiyor. Fena da etmiyor aslında ama bu şekilde zahmet çıkarması biraz kafa karıştırıcı.
Özet olarak artık Managed DirectX 2.0 Beta yok.Destek de yok. Yani mevcut 2.0 uygulamalarınızı ya 1.1’e çevireceksiniz ya da XNA’e merhaba diyeceksiniz ki, Microsoft’un da istediği bu.
Uzun bir süredir Beta olan Internet Explorer’ın yeni sürümü çıktı.Hayırlı uğurlu olsun. 🙂 Bir önceki versiyonlarının ne kadar sakat olduğunu söylemeye pek gerek yok sanırım. Firefox gibi bir çok benzerinin popüler olması ile büyük değişikliklere giden yeni sürüm, eski sürümlere nazaran çok daha güzel gözüküyor. Göz boyama dışında arka tarafda güzel ve güvenilir bir sistem olduğu söylensede,ilerleyen günlerde i.e 7 için çıkacak service pack’lere hazır olsak iyi olur…
Download için : http://www.microsoft.com/windows/ie/default.mspx