Veritabanlarında büyük verilerle çalışırken dikkatli olmak gerekiyor. komplex sorguları optimize etmek çok önemli. Misal mysql’de büyük veriler içerisinde limit komutu ile sayfalama yaparken belli bir süre sonra (limit 10000, 30 gibi) sorguların çok uzun sürdüğünü görebilirsiniz. Bu süreleri kısaltmak için kullanılan “covering index” tekniği ise mantık olarak şöyle, önce istediğimiz fieldları istediğimiz tablodan çekecek select komutunu yazıyoruz. Ardından bunu sadece primary keyi çeken ve istediğimiz kısıtları içeren query ile joinliyoruz. Böylece önce inner query çalışıp where ile belirttiğimiz kısıttaki ve limitteki id’leri index üzerinden alıyor, daha sonra bu id’leri gene index üzerinden sorgulayıp verileri getiriyor. Örnek query aşağıda:
EXPLAIN
SELECT *
FROM products
JOIN (
SELECT prod_id
FROM products
WHERE actor=’SEAN CARREY’ AND title LIKE ‘%APOLLO%’
) AS t1 ON (t1.prod_id=products.prod_id)
Gönül isterdi ki mysql bunu kendi akıl etsin ama malesef
Eğer ki .NET ile uğraşıyorsanız ve java soap web servise erişmeye çalışırken aşağıdaki hatayı alıyorsanız (framework 3.5, Visual Studio 2008)
The request was aborded: The request was cancelled.
1. .NET ile uğraşmayın. Çok daha düzgün bir platforma geçin, Java gibi.
2. Visual Studio’nun oluşturduğu ama size göstermediği (salaksınız ya o kodu görmemeniz gerekiyor) kodları açıp, System.Web.Services.Protocols.SoapHttpClientProtocol sınıfından türeyen base servisinize aşağıdaki metodu ekleyin:
protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest) base.GetWebRequest(uri);
webRequest.KeepAlive = false; // dananın kuyruğunun koptuğu an
return (System.Net.WebRequest) webRequest;
}
allah sabır versin…
Bu arada, şöyle bi salaklığa daha rastladım, C# ile bir web servis istemcisi yazarken (.net 3.5) hangi alanların doldurulduğunu anlamak için o alan ismi ile “Specified” diye boolean alanlar açıyor. Misal ucret diye bir property varsa ucretSpecified diye bir property daha ekliyo istemcimiz, siz ucret parametresini istediğiniz kadar doldurun, bu ucretSpecified = true demediğiniz sürece soap mesajına bu parametreyi eklemiyor. Eklemediği için karşı tarafa null olarak gidiyor, siz de uraşıp duruyosunuz ne oluyor ne bitiyor diye. Düzgün çalışabilmesi için 20 parametreniz varsa istemci bunu 40 parametre yapıyor, siz de 20 tane = true yazıyosunuz. Yuh artık bu kadar da saçma kod yazılmaz ki…
Java ile yazdığım web servisleri test etmek amacıyla Visual Studio 2008 ile (framework 3.5) istemci uygulaması yazayım dedim. Bizim web servis tarafında basic authentication olduğu için istemciye de bunları belirtmek gerekiyordu. Bir daha o site senin bu site benim diye gezmemek için buraya not alayım dedim:
com.haqen.HedeService service = new com.haqen.HedeService();
service.Credentials = new NetworkCredential("username", "password");
Console.WriteLine( service.getServiceName() );
Dream Theater son albümleri Black Clouds & Silver Lining turnesinin son konserini dün İstanbul’da verdi. Ülkemizdeki dördüncü konserini de izleyerek 4/4 yaptığım ve çok sevdiğim şahane grup Dream Theater bu konserinde beni biraz hayal kırıklığına uğrattı. Şahsen playlist’ten hiç memnun kalmadım. Giriş çok zayıf kaldı, sonrasında da çok tutuk kaldılar ve pek coşamadan konser bitti. Parkorman’da yapılan ve son anda gittiğim ikinci konser yanında diğer konserler ve özellikle son ikisi çok zayıf kaldı. İlki Bostancı Gösteri Merkezi’nde olmuştu ve ilk defa izlemenin heycanı vardı. İkinci konser dediğim gibi Parkorman’da olmuştu ve hem ses hem performans açısından muhteşem bir konserdi. Öyle ki onun gazıyla tüm konserlere gittik
Üçünü konser çok boktan bir mekan olan İstanbul Arena’da olmuştu. O kadar boktan bir mekan ki sahneyi ne görebiliyorsunuz ne çalanı duyabiliyorsunuz, inşallah orda hiçbir konser düzenlenmez. Dördüncü konser de Maçka Küçük Çiftlik Park’da oldu. Bence en güzel konser mekanı Kuruçeşme Arena fakat onun haricinde Küçük Çiftlik Park’da güzeldi. Her yerden sahneyi görebiliyorsunuz.
Dream Theater’a gelince, artık kadayıfa bağlamaya başlamışlar. Gene de o kadar çok dinleyip sevdiğim bir grup ki bu yazıyı yazarken de dinliyorum ve buruk bir mutluluk dolaşıyor bünyemde. Dün çaldıkları parçalar da şöyleydi:
in the presence of enemies pt.1
beyond this life
misunderstood
a nightmare to remember
hollow years
caught in a web
erotomania
voices
solitary shell
a rite of passage
pull me under
—
metropolis / learning to live / a change of seasons (crimson sunset)
Son albüme gelince, bence Six Degrees of Inner Turbulence, Systematic Chaos ve Octavarium gibi zayıf üç albümden sonra Train Of Thought kadar olmasa da iyi bir albüm. Sadece giriş parçası black metal tadında biraz kafa ütülüyor ancak orta kısım ve nakarat çok güzel. Diğer parçalar da çok keyifli özellikle bir kaç kere dinledikten sonra The Shattered Fortress parçası çok gaz geliyor. Bu albümdeki Solitary Shell tadındaki parça Wither ise bence Hollow Years kadar başarılı bir parça. Albümün kapağı da zaten Images And Words ile Awake albümlerinin kapağı ayarında oldukça güzel.
Neticede çook uzun yıllardır çook fazla severek dinlediğim bir grubu bir kez daha görmek güzeldi. Size Learning to Live armağan ediyorum.

Oyun yazmak için illaki C++ bilmek, OpenGL kasmak gerekmiyor. Zibilyon tane oyun geliştirmeye yönelik kütüphaneler var artık. Ben AMOS ile başlamıştım
Sonra Blitz Basic ile uğraştım bir süre. Fakat adı üstünde, basic, istediğim gibi kullanamayınca bıraktım. Sonra Irrlicht baktım çok kısa, sonra da bıraktım bir süre araştırmayı. Sonra 2 sene önce bu konudan arkadaşlara bahsederken “len Java’da böyle bir engine olsa ne süper olurdu” demiş, önce JPCT‘ye ulaşmış biraz onu kurcalamıştım, dökümantasyon namına pek birşeyi olmadığı için üzülürken JMonkey Engine‘e rastlamıştım. Geçen sene Java One’da da sunum yapan JMonkey Engine 3d uygulamalar yazmamız için oldukça güzel bir kütüphane. Örneğin gökyüzü (skybox) yapmak için uğraşmak gerekmiyor, Skybox nesnesi yaratmamız ve ona texture kaplamamız yeterli.
Keşke biraz daha dökümantasyonu güzel olsaydı dedirtmiyor değil ama 3d uygulamayı java ile yazmanın büyük avantajı da var, bir kere tüm işletim sistemlerinde çalışıyor (Windows, Linux, Macos…) ve JNLP sayesinde web üzerinden tıklayarak da çalıştırılabiliyor. Applet olarak da kullanılabiliyor ancak o zaman tüm kaynakları kullanamıyoruz, pek hoş çalışmıyor.
Çok ufak bir uygulama yazdım, ona buradan ulaşabilirsiniz, WASD tuşları ile hareket edip farenin sağ tuşuna basılı tutup etrafa bakabiliyorsunuz.
Vakit olsa JMonkey Engine ile neler neler yapılır. En iyisi ben kendime kandıracak yeni insanlar bulayım

JMonkey Engine ile yapılmış bir oyun örneği