30 Ekim 2010 Cumartesi

x86 Intel Assembly ile Matris Çarpımı

Bir arkadaşım okul ödevi olarak assembly ile matris çarpma programı yapmamı istemişti. Geçenlerde göçüp rahvan olan eski hard diskimin kalıntıları arasında dolanırken bu matris çarpıcı programı buldum. Belki birilerinin işine yarar diye buraya koyayım dedim. MASM ile yazılmıştır.

Buyrun: Matris.asm

29 Mart 2010 Pazartesi

C++'da "const" olarak tanımlanmış ifadeleri etkisizleştirme...

Baya karmaşık bir başlık oldu, neyse oldukça basit bir mevzu biraz inceleyince hemen anlaşılıyor. O yüzden okumaya devam edin. Üniversite kütüphanesinde Game Developers dergisinin Mart sayısını kurcalarken kodlama örnekleri bölümünde C++'da const olarak tanımlanmış ifadeleri etkisizleştirme üzerine bir yazı gördüm. Anlatılana göre geliştirici ekip başka bir ekipten hayli büyük miktarda kod almış. Bu yeni ekip güvenli kod yazmaya biraz fazla meraklı olduğundan kodun her tarafı "const" olarak tanımlanmış ifadelerle doluymuş. Bizim geliştirici ekip bu "const" ifadelerle boğuşup sürekli derleme hataları almaktan yorulunca çareyi yazının konusu olan hileyi yaparak bulmuşlar.

"const" tanımlı ifadelerin bela olduğu kod bloğunun başına "#define const" yazarak "const" 'u hiç olarak tanımlamışlar, yani "const"'u etkisizleştirmişler, böylelikle derleyici hatalarından bu ufak hile sayesinde kurtulmuşlar.

Yazı derginin dirty hacks bölümündeydi, o yüzden her zaman başvurulması gereken bir yöntem değil ama uygulaması çok basit. "const"'larla çok fena kavgalı olmuşsanız bu çözüm tam size göre.

25 Ekim 2009 Pazar

Yitik Projeler 2


Hacettepe Bil. Müh. 'teki mezunların ftp hesapları kapatıldı, tabi benim öğrencilik zamanından kalma Yitik Projeler 'de sonsuza dek yitmiş oldu. Haah!? Neyse ki bölümdeki asistan arkadaşlarım sayesinde sonları bu kadar dramatik olmadı, silinmeden önce arşiv halinde tüm dosyalarımı kurtarabildim.

Böylelikle Data Representation Tool v1.0'da projelere eklenmiş oldu. Nası iyi bir isim vermişsem zamanında :) ?

Evet, bu araç sayesinde ikili, sekizli, onlu, onaltılık ve ASCII formatları arasında dönüşüm yapabiliyoruz. Ekranda görüldüğü gibi "test" yazmışız ve karşılığında altındaki çıktıları almışız. Böyle de amaçsız bir program olmuş, neyse belki GUI kısmı yada başka bir yeri birilerinin işine yarar.

Buyrun program ve kod: Data Representation Tool v1.0 (239KB)

20 Şubat 2008 Çarşamba

LG R405'e Windows XP kurmak

Bazı bilgisayarlar Windows XP CD'sinin tanımadığı SATA donanımına sahip olabiliyor. Bunu ilk bir arkadaşımın bilgisayarında görmüştüm. Ama bunun için içinde SATA sürücüsünün olduğu bir disketi vardı ve yüklerken F6'ya basarak bu sürücüyü yüklüyorduk.

Ben de LG laptop'uma XP kurayım derken "no hard disk found" uyarısı alınca bi durdum orda :) ... Bende ne disket var ne birşey. Haydi internetten indirdim driverı ama laptop'un disket sürücüsü yok! ? ...

Neyse ki çareler tükenmiyor, Nlite isimli bir program sayesinde LG'nin sitesinden indirdiğim SATA sürücülerini CD içine gömdüm. Ve böyelikle hazırladığım yeni CD , SATA disklerimi gördü.

Umarım aynı sorundan müzdarip olanlara yol gösterici bir yazı olmuştur.

24 Ekim 2007 Çarşamba

Ubuntu - Kaybolan Grub menüsünü tekrar yükleme...


Bilgisayarımda Windows ve Linux kardeş kardeş çalışıyorken, Windows'u bir sebepten dolayı baştan kurmak durumunda kaldım. Tabi Windows tekrar yüklenince başlangıçta çıkan GRUB menüsünü sildi. Ubuntu yükleme DVD'im ile bilgisayarı açtım, ve ubuntu forumlarından gerekli bilgileri okuyup GRUB menüsünü düzelttim. Yalnız forumlarda yazan bazı bilgiler güncelliğini yitirmiş, özellikle Live CD ile "fake installation" yöntemi yeni Ubuntu sürümlerinde çalışmıyor.

İşte benim izlediğim adımlar:

1. Live CD yada DVD ile bilgisayarı açın.
2. Terminal ekranı açın.
3. "sudo grub" yazın. (root hakları ile grub'u çalıştırmak için başına sudo yazdık, önemli.)
-artık grub programı konsolundasınız -
4. "root" yazın. "(" yazın ve tab'a basın. Grub size yardımcı olacaktır. Bu adımda amacımız MBR olan, yani bootable olan disk bölümünü seçmek. "root" yazdıktan sonra ne yapacağınızı tam bilmiyorsanız 'tab' tuşunu kullanmanızı kesinlikle öneririm.
Örnek kullanım: "root (hd0, 3)"
5. "setup (hd0)" yazın. Burdaki 'hd0', bir önceki adımdaki sabit disk kodu ile aynı olmalıdır.
6. "quit" ile grub'dan çıkın.
7. Baştan başlatın.

İşte bu kadar. Bu adımlardan sonra bilgisayarımı açtığımda, GRUB menüm kaybolmadan önceki hali ile geri geldi. ;-)

26 Ağustos 2007 Pazar

Yitik Projeler

Okul zamanı boyunca uğraştığım projeler takıldı gözüme. Hepsi ufak tefek ve anlamsız şeyler. Ama sabit diskimin ücra bir köşesinde öylesine masum duruyorlardı ki, yitip gitmelerine gönlüm elvermedi. Hem belki aralarından bazıları birilerine bir şekilde yardımı olur. Örneğin Knight's Tour problemi veri yapıları (data structures) dersinde karşınıza çıkabilir.

-- Knight's Tour --

At ile satranç tahtasının gezilen yere bir daha uğramayarak tüm karelerini dolaşmaktır. Bu meseleye ilişkin bir çok çözüm var. Ben zamanında H. C. Warnsdorff 'un sezgisel (heuristic) algoritmasını incelemiştim. Sezgisel kelimesinden kasıt; çözüme giderken olabilecek tüm olasılıkları denemek(brute force) yerine bir ön-sezi mantığı ile sadece bir kaç olası yolu deneyerek çözüme gitmektir. Warnsdorff algoritmasının işleyişi de oldukça ilginç. Atın bulunduğu konumdan gidebileceği yerler saptanır. Sonra o gideceği yerlerden hepsi için kaç hamleye yol açtığı hesaplanır. Örneğin at yukarı gitseydi ondan sonra 4 yere hamle olasılığı olacaktı. Aşağı gitseydi 3 hamlelik olasılığı olacaktı. Warnsdorff algoritmasının özü "az hamleye yol açan yol seçilmelidir". Bir nevi ata daha az hamleli yeri seçtirerek çıkmaza sokmaktır. Merak etmeyin at çıkmaza girdiğinde tüm tahtayı dolaşmış oluyor zaten :). Örnek problemimize göre at aşağı yani 3 hamle olasılığıklı yere gitmelidir. Sonra aynı adımlar o yer için hesaplanmalıdır. Çok karışık oldu değil mi? Şurdaki appleti biraz kurcalayın, tahtada beliren sayılar atın o yerden yapabileceği hamle sayısını gösteriyor. Kurala göre en az hamleye yol açan yolu seçerek sonuca gitmelisiniz. Yoksa bir yerde tıkanırsınız :) .

Benim programımda Warnsdorff algoritmasına göre atın tahta üzerine dolaşmasını animasyon şeklinde gösteriyor. Kodlar zip paketi içinde mevcut.

İndir: Knight's Tour (28KB)









-- Java Bird --

Jaba Bird sadece 1 level oynanabilen, oldukça vasat ama kendi içinde tutarlı bir oyun. Grafikleri ve sesleri büyük ölçüde başka oyunlardan çalıntı. Oyunu sonradan Resident demoscene grubu için çevirdiğim için bazı grafikler Spritus/Resident tarafından çizildi. Aynı şekilde seslerin bazıları da Flexi/Resident tarafından yapıldı. Java Bird 7d5 demo party'de wild kategorisinde yarışmaya katıldı ve 3. oldu. Oyuna başlamadan önce "readme" kütüğüne bir göz atmanızda fayda var. Yoksa, hadi "space" tuşu ile ateş edildiğini keşfettin, peki silah değiştirme tuşunun "x" olduğunu nereden bilecektin! :)

Java'nın kullanması oldukça kolay olan grafik kütüphanelerini keşfettikten sonra, ufak bir oyun yapma hevesi ile başladı herşey. İlk başta amacım Space Invaders gibi bir oyun yapmaktı. Kahraman uçağımız ve ateş etme mekanizmasını yapınca, oyunu Raiden gibi dikey kayan herşeye ateş et (vertical scrolling shoot-em up) tarzı bir oyuna dönüştürmeye karar verdim. Oyuna bir bütün olarak bakınca oldukça karmaşık görünebilir. Elbette ki tecrübeli arkadaşların kafalarında hemen bir fikir ve dizayn canlanacaktır. Her şeyi adım adım yapınca işler oldukça kolaylaşıyor. Mesela böyle bir oyun yapmak için, ilk olarak bir pencere açmalı ve bunu animasyon oynatabilir hale getirmeliyiz. Ben o kısmı Deitel Deitel'in Java kitabından bakmıştım. Sonra ekranda objeleri gösterebilmeliyiz...vs, vs. Bu arada belirtmeden geçemeyeceğim; Java-Sun forumları gerçekten çok başarılı, takıldığınız her soruyu google'la boğuşmadan önce bu forumlarda arayınız.

Ah işte bu kadar. Java Bird gerçekten yitik bir proje. Sadece 1 level'lik bir oyun için haddinden fazla kod içeriyor :) Zamanında bir "level editörü" yapsaydım şimdi burda yitik projeler arasında olmayacaktı. Belki de kendine ait bir web sitesi olacaktı. Hmm "Java Bird - Remastered" gibi bir isimle geri gelse bir fark yaratır mı dersiniz? :)


Java Bird inspire13 için tekrar elden geçirildi ve Java Web Start ile oynanabilir hale geldi. Java Game Tome'dan oynayabilirsiniz.

Java Bird kodları ve projesi: www.inspire13.com/javaBird


Yıllar yıllar sonra gelen edit: Kaynak kodlar falan tüm linkler entropiye yenik düşüp kaybolmuşlar. Bir gün hepimizin olacağı gibi. Ama daha ölmedik ve kodlar da şurada: