Çeşitli makalelerde kullanılan bu terimle ilgili tam bir bilgim yoktu açıkçası. NoSQL veritabanlarının en büyük eksikliklerindende biri .Relational veritabanlarının önemli özelliklerinden ACID ile ilgili makalem .
http://www.murat-cakal.com/2013/01/01/acid-nedir/
31 Aralık 2012 Pazartesi
30 Aralık 2012 Pazar
Harita Uygulamaları
Üzerinde uğraştığımız Location Based MMO oyun için yaptığım araştırmalar sırasında ,bir çok harita ve servislerle uğraşmak zorunda kaldım. Hatta bu araştırmaların bazen hızını alamayıp web projesine dönüştürdüğüm oldu. haritaaraci.com aslında bu araştırmaları topladığım bir uygulama sayfası oldu.
Sitede harita uygulama özelliklerini denemek için değişik uygulamalar içermekte. Mesela bir uygulamamda Foursquare api kullanılarak çekilen veriler harita üzerinde otomatik olarak yerleştirilmekte http://haritaaraci.com/mekan_arama.aspx
Şuanda da kendi interaktif türkiye haritamı yapıyorum .Bu haritada amaç üzerine gelinen şehre hover efekti verebilmek ve bunu bir event olarak javascriptte işleyebilmek olacaktı . Tembellik yapmayıp uğraşırsam aslında çokta bir işi yok. Performanslı çalışırsa kullanışlı bir araç olabilir. Flash ile yapılmış versiyonları bulumakta ama üzerine herhangi bir fonksiyonellik eklemek için kaynak kodunda action scriptle uğraşmak gerekiyor. Bunu css ve javascriptle yapmak kolay modifiye edilebilir hale getirmek herkesin kullanabileceği bir yapıya getirmek güzel olur . Neyse bu gün çok yazasım varmış benim de 2 sene sonrasında :).
Bu Aralar Ne Yapıyorum
Şuanda Ark Games Studioda Eskişehirde çalışmaktayım. Şu aralar geliştirmeye başladığımız MMO mobil sosyal oyun üzerinde araştırma ve geliştirmeler devam etmektedir. Ben bu projede server taraflı teknolojilerinin araştırma ve geliştirmesini yürütmekteyim. Bununla birlikte gereken teknolojilerin araştırmasını teknik bloğumda murat-cakal.com paylaşmaktayım. Bunun dışında önümde bir askerlik durumu var buna da tam karar vermiş değilim. Her an bir açık öğretim bölümüne yazılabilirim :) . Bu blogta yazdığım eski yazılar şuandaki yaptığım işlerlede ilgili olaması aslında bu bloğa yazmaya devam etmeme neden olabilir. Diğer Bloğumda yazdığım enson konuyuda burda paylaşıyım .Aslında bir çeviri NoSQl ile ilgi buduğum güzel bir yazıydı.

Sanal Panel: NoSQL Veritabanlarında Güvenlik
NoSQL veritabanları geleneksel veritabanlarıyla kıyaslandığında yarı-biçimlendirilmiş ya da biçimlendirilmemiş veri depolama seçenekleri sunuyor. Son zamanlarda NoSQL uygulamalarına her ne kadar dikkat edilmiş olsa da , depolama ve NoSQL verisine ulaşıma güvenlik açısından bir vurgu yapılmadı. Bu sanal panel tartışmasında NoSQL veritabanlarına güvenli erişim hakkında en iyi yöntemler üzerinde durulacaktır.
« Cloud Computing (Bulut Bilişim)NoSQL Veritabanı Güvenliği(Çeviri)
Sanal Panel: NoSQL Veritabanlarında Güvenlik
NoSQL veritabanları geleneksel veritabanlarıyla kıyaslandığında yarı-biçimlendirilmiş ya da biçimlendirilmemiş veri depolama seçenekleri sunuyor. Son zamanlarda NoSQL uygulamalarına her ne kadar dikkat edilmiş olsa da , depolama ve NoSQL verisine ulaşıma güvenlik açısından bir vurgu yapılmadı. Bu sanal panel tartışmasında NoSQL veritabanlarına güvenli erişim hakkında en iyi yöntemler üzerinde durulacaktır.
Devamına http://www.murat-cakal.com/2012/12/29/nosql-veritabani-guvenligiceviri/ den ulaşabllirsiniz.
Yeni Bloğum
Merhabalar bu bloğa artık bişey yazmıyorum . http://www.murat-cakal.com/ yeni bloğum . Yeni yazılarıma burdan ulaşabilirsiniz .Ama yine de belli olmaz buraya bişeler yazmaya başlayabilirim . Genel olarak başlıkları burdan paylaşmayı düşünüyorum .
14 Mayıs 2010 Cuma
Geleceğe dair...
Neyse bu faslı geçelim . Blogumda şimdiye kadar bölümünde oyun programlama ile bir kaç yazı yayınlamıştım .Bundan sonrada genel olarak bilgisayar grafikleri üzerine yazılar yazmayı düşünüyorum . Bu aralar Render olayına kafayı takmış bulunmaktayım .
Render, (bilgisayarda) çizilmiş olan modeli veya modelleri bilgisayar tarafından işlemektir. Görüntünün ham halinin, bilgisayar tarafından işlenmesi de denebilir. Bu işlemi gerçekleştirmek için çeşitli bilgisayar yazılımlarına ihtiyaç duyulur.

Tanım ile resim vikipediden alınmıştır .Render modellenmiş cisimlere gerçekçilik katacak ışık ,yansıma ve gölgelendirmelerin hesaplanarak resim veya videoların son halinin oluşturulması diyebiliriz .Kullanım alanlarına oyunlar ,filmler ,3d animasyonları örnek verebiliriz.Render işlemi günümüz bilgisayarları için bile hayli zaman alabiliyor .Pixar'ın sitesinde yazılana göre yaptıkları bir 3d animasyon videosunda saniyede 24 kare oynuyor .Ve bu karelerin her biri için yaklaşık 4 saat render süresi gerekiyormuş.Hatta bazı motion blur efekti bulunan karelerde bu 70 saate kadar çıkabiliyormuş .İşin ilginci şirket bu renderi bizim evdeki masaüstü bilgisayarlarda yapmıyor tabii kendi süper bilgisayarlarını kullanıyor .
Benim ilgilendiğim asıl konu ise bilgisayarın bu işi nasıl yaptığı ve algoritmalarının nasıl çalıştığı bu hayli teorik olabilir .Pratik kısmı ise bir modelleme programı ile modelleme yapmak ve render etmek .Modelleme yapmak bir sanat işi diyebilirim ve bu konuda kendime pek güveniyorum diyemem .Bunun için ilk başta hazır modeller üzerinde uğraşabilirim .Hatta bu aralar takip ettim bir site www.3dimparatorlugu.com da düzenlenen yarışmalar var .Verilen modellere kendi renderini yapıp katılıyorsun . Tabii şimdilik işin başındayız .Son olarak bahsettiğim sitede bulunan bir yarışmada modeli ve render edilmiş halini paylaşıyorum.

19 Mart 2010 Cuma
multiplayer oyun server client mimarisi
Birçok oyun artık internet üzerinden veya LAN ağı kullanılarak oynanabiliyor .Oyunların multiplayer olarak oynanabilmesi için bilgisayarlara yüklü olan programların birbiri ile haberleşebilmesi ve durumlarını birbirine iletmesi gerekiyor .Bilgisayarların birbiri arasında haberleşmesi için genel olarak iki tür sistemden bahsedebiliriz. Bunlar Peer to Peer ve server/client mimarisi .
Peer to Peer ağları her bilgisayarın birbiri ile direkt haberleşebildiği ve oyunun seyrinin her bilgisayar da hesaplanması gereken bir network yapısı .

Peer to Peer ağları her bilgisayarın birbiri ile direkt haberleşebildiği ve oyunun seyrinin her bilgisayar da hesaplanması gereken bir network yapısı .
Peer to peer networkte bilgisayarların birbiri ile haberleşmesi ve kontrolu server client mimarisine göre hızlı ve kolay olmasına karşın sistem güvenliğini sağlamak daha zor .Çünkü clientler arasındaki iletişim server üzerinden olmakta .
Asıl konumuz Server client ilişkisi .Oyunlarda sistemin bir bütün olarak bir elden çalışabilmesi için iyi bir yöntem diyebiliriz .Aslında bu mimaride coğu işi server yapar .Clientler yapılan girişleri servera iletmekle ve sonuçlarını erkanda göstermekle mesuldurlar .Yani kısacası oyunda kullandığımız klavye ve fare girişlerini servera iletir ve kendisine dönen cevapları işler .
Server ise oyunun seyrini belirler bütün hesaplamalar ,yapay zeka algoritmaları ,fiziksel hesaplamaları ve clientlerden gelen girişleri oyuna ilave eder ve durumu clientlerine bildirir .
Serverın görevlerinden kısaca bahsedersek .
-fiziksel hesaplamalar
-yapayzeka algoritmaları
-çarpışma testleri
-iletişimi sağlama
Tabi bu işleri gerçekleştirmek için ve sistem performansını artırmak için bir çok ileri seviye algoritmalardan faydalanmak gerekiyor .
Son olarak server ve client ilşkisini gösteren kaba kodu ekliyorum ..

11 Şubat 2010 Perşembe
Bir Garip Yapay Zeka..
Oyun projesi için çalışmalarımız çok düzenli olmasa da devam ediyor .Projeyi tamamlamak için bir çok değişik alanda araştırma ve denemelerin yapılması gerekiyor . Zamana yayıp aklımızdaki yeni fikirleri de ekleyip tamamlayabilmek ilk hedefimiz .Şu anda kullanıcımız kendi tankımı yönetip ateş edebiliyor ama bu yeterli değil tabiki bilgisayarın düşman tankları yönetebilmesi gerekiyor .
Yapay zeka dersinde gördüğümüz algoritmalar daha çok en kısa yolu bulma ile ilgili algoritmalar .Bu algoritmalar bu oyunda pekte işe yaramıyor aslında .Düşmanın En kısa yolu bulup direkt olarak hedefe yönelmesi onu fazlaca akıllı yapacaktır .Bu bizim pek işimize gelmeyecekti . Bizim işimize daha çok rasgele hareket eden ve engellere göre yönünü değiştiren bunlara ek olarak hedefe yönelik hareketler de gösterebilen davranışlar yarayacaktı .
public void otonom_tank()
{
hareket_sayisi = (hareket_sayisi + 1) % degisim;
if (hareket_sayisi%30 == 0)
{
tank_yon_degis();
}
if (hareket_sayisi != 0)
{
if (engel_var_mi(tank_yon))
{
tank_hareket_et(tank_yon);
}
else
{
tank_hareket_et(random.Next(0, 4));
}
}
else if(hareket_sayisi==0)
{
degisim = random.Next(30, 70);
yonelme(yonel);
}
}
Yukarıda bulunan kod bloğu düşman tanklarının hareketlerini sağlayan metodumuz . Bu metodumuz tankın her bir hareketini hareket_sayısı değişkeninde tutuyor . Bu değişkenin modunu belli bir sayıya göre aldığımızda ve sıfıra eşitlendiğinde raslantısal hareket eklenir .
Kırmızı renkteki blok tankların engelle karşılaştığı zaman yönünü değiştirmesini sağlıyor.
En son kısmında ise yonel değişkeninde tutulan kordinata doğru bir yönelme gerçekleştiriyor .
Bu yönelme bizim savunmasını yapacağımız yerin kordinatını tutacak . Rastgele hareketlerle tanklar bizim savunmasını yapacağımız yere ateş etmesi düşük bir olasılık olduğu için yönelme davranışını ekledim.
public void yonelme(Point koor)
{
int rand=random.Next(0,2);
if (rand == 0)
{
if (koor.Y > tank_koor.Y)
{
tank_hareket_et((int)yonler.asagi);
}
else
{
tank_hareket_et((int)yonler.yukari);
}
}
else
{
if (koor.X > tank_koor.X)
{
tank_hareket_et((int)yonler.sag);
}
else
{
tank_hareket_et((int)yonler.sol);
}
}
}
Yönelme fonksiyonun mantığı basit hedef kordinatın x veya y değerlerine bakarak yönünü belirliyor .Eğer x koordinatı tankın kordinatından büyükse tankın yönünü ona çeviriyoruz. Y değeri içinde aynısını yapıyoruz .
İşin kötü tarafı tankların rastgele hareketlerinde biraz sorun yaşıyorum .Resimde gördüğümüz tanklar ilk başta tamamen dolu bir alanda başlamışlardı ve ateş ederek resimdeki gibi duvarları yıktılar .Sağ taraftaki iki tankın aynı yerler gidip ateş ettiğini anlıyoruz . Her ne kadar global random değerler kullanmış olsam da şimdilik bu sorunu çözemedim.
Tankların bu hareketlerine ek olarak ateş etmesi de biraz akıllı hale getirebiliriz .Mesela önünde engel varsa ateş et ,düşman varsa ateş et gibi .
Kaydol:
Kayıtlar (Atom)

