shultays.com/blog

Word press in tema düzenlemeye izin vermediğini farkedinci blog u taşıma kararı verdim. Bir süre ikisinde de yazacağım aynı yazıları daha sonra tamamen diğerine geçiş yapmayı düşünüyorum.

http://www.shultays.com/blog

şu anlık sub domain almadım, zaten server ı bedavaya veren bir arkadaş olduğu için utanıyorum daha fazla istek yapmaya 🙂

Ayrıca aklıma yeni bir proje geldi, blog postlarını mysql den okuyup shultays.com da gezegen olarak göstereceğim. gezegene tıklayınca javascript ile alakalı post u pop up olarak açacak. Eğer düzgün gösterebiliyorsa direk flash içinde de göstermeyi deneyebilirim ama flash ın html yorumlaması çok sınırlı olduğu için ne kadar iyi olacak bilmiyorum (zaten code taglarını gösteremeyecek, alıntılar görünmeyecek bir acayip olacak yatacak herhalde o fikir)

Hatta commentleri bile gezegenin etrafında dönen uydular gibi yapabilirim =D.  Bir evrende en fazla diyelimki 20 gezegen göstersin istiyorum, 20 den fazla post var ise aşağıda sayfa numarasına tıklayacağız, tıklayınca çok hızlı bir şekilde uzaklaşacak o evrenden ve “yeni” bir evrene geçecek. Bir gezegene tıklayınca yanına gidip alakalı sayfayı becerebilirsem sayfayı flash ta gösterecek ve commentler uydumuz olacak, olmaz ise alakalalı sayfayı pop-up olarak açacak.

Bakalım fikir güzel, eğer yapabilirsem sitenin flash ve php dosyalarını açabilirim. Şimdiye kadar pek açacak bir şey yoktu o yüzden açmamıştım =)

Z fighting

Opengl de bana ilginç bir anı ve şu anda kullandığım avatarımı vermiş olan konu.

Basit olarak anlatmak gerekirse 3d ile çizilen iki şeklin kameraya olan uzaklıklarının birbirine eşit (veya çok yakın) olması ile oluşan, opengl in hangi şekil üstte olmalı anlayamamasından oluşur.

En basit çözümü üstte görünülmesi istenilen şeklin bir birim daha öne kaydırılmasıdır, ama eğer bizim başta  “en fazla şu kadar uzaklıkta olan z lerin çizilmesine izin ver” diye verdiğimiz değer çok büyükse bu yeterli olmayabilir.

Diğer bir çözümde stencil buffer kullanmak. Önce altta kalmasını istediğimiz nesneyi hem ekrana hem de stencil bufferına çizeriz, daha sonrada üstte kalmasını istediğimiz nesneyi eğer stencil buffer 1 ise kesin çiz, 0 ise depth test yap öyle çiz deriz. Şu an da tam hangi değerleri vereceğiz aklımda olmadığı için böyle yarım yamalak bir tanım yaptım =)

Neyse asıl anlatmak istediğim bu z buffer ın bana bıraktığı hoş anı =) 3 boyutlu engebeli bir gezegen yapmak istiyordum, ve onunla uğraşırken şu şekli ortaya çıkardım.

interesting1

Ne olduğunu başta çözemedim, sonradan farkedebildim niye böyle bir şey çıktığını. İşte z fighting sonucu ortaya çıkan bir şekil, doğrusu gözüme çok hoş geldi ve avatar olarak kullanma kararı aldım =D İlerde birileri sorunca avatarın ne diye “Kendisi bir bugtır” diyeceğim.

Malesef programın o halini kaydetmemişim =( ama bir gün tekrar aynı “hata”yı ortaya çıkarmaya çalışacağım.

gezegen

Bu da şeklin olması gerek şey idi, malesef sadece çok küçük bir resmini tutmuşum. Soldaki şey engebeli bir gezegen aslında, döndürünce falan hoş duruyordu. İleride tekrar uğraşabilirim, yapmak istediğim proje küre şeklinde bir dünya yaratmak ve uçarak bu dünya üzerinde gezine bilmek idi (Spore oynayanlar demek istediğimi anlayabilmiştir) hatta binalar falan eklerim diyordum ama sonunda (diğer bir çok projeye olan şey gibi =D) yarım kaldı. Şu an dosyalarını bile bulamıyorum.

Amiral Battı

Java dersi projem idi. 2 kişilik bir amiral battı oyunu. Socket programming ile 2 farklı bilgisayardan (aynı bilgisayar da olabilir ama o zaman karşı tarafın gemilerini görebiliyorsunuz =)) oynanıyor. Host olacak taraf Host a Game butonuna tıklamalı, diğer oyuncuda hostun ip sini girip join a game ile host a bağlanıyor.

screenshot-battle-ship1

Oyun başladığında ilk iş gemileri yerleştirmek. Sol fare ile gemi yerleştiriliyor, eğer istenirse sağ fare tuşu ile 90 derece döndürülebilir. Hata yaptıysanız alttaki gemi resimlerinden gemiyi tekrar seçebilirsiniz.

Her iki taraf ta ready tuşuna basınca oyun başlıyor ve gemileri ilk tükenen oyunu kaybediyor.

Thread nedir ne değildir gibi bilgiler henüz bende yokken yaptığım için karşı taraftan mesaj bekleyen taraf sonsuz döngüde kalıyor. Bu arada da hiç bir çizim yapılamıyor. Genel olarak 2d çizim olayına da yeni olduğum için bazı bölümlerde hata olabiliyor (misal gemiler seçildikten sonra ilk elde ekran görünmüyor nedense. Çözememiştim bir türlü, projeyi gösterirken o kısmıda hızlı hızlı geçmiştim =D)

Windows ta eclipse üzerinden yazıldı, linux de javac ile derlenip çalıştığı görüldü. Grafikler başka bir amiral battı oyunundan araklandı =) (hatta o oyunda mesela tekli botlar yoktu onlar muhteşem grafik becerilerim ile üç kareye sahip olan geminin iki ucu birleştirilerek oluşturuldu. torpido şeklinde 2 karelik gemi de benzer şekilde deniz altıdan oluşturuldu)

http://www.shultays.com/amiral.tar.gz

shultays.com

shultays.com

Bir yıl kadar önce yaptığım, 3D grafik olayına giriş yaptığım kişisel web sitem. Hazırlık-1.sınıf zamanlarında AS2 olarak başlamıştım, daha sonra AS3 kullanmaya başladım. Asıl amacım flashta 3D site yapmak değilde bir 3D grafik motoru yazmak idi, bu yüzden hiç bir hazır kütüphane kullanmadım. AS2 hali hala duruyor, ama resimler eksik, mesela ortada bir küp vardı o görünmüyor, kenarda bir Otostopçunun Galaksi Rehberi vardı, hatta kapağı bile açılıyordu (vay be)

Pek kullanıcı dostu değil, zaten öyle olması için de tasarlanmadı =p Aslında aklımda göze güzel gelebilecek bir menü sistemi var ama hep üşeniyorum. Uzun süredir de flash kullanmadım, o yüzden de biraz çekinme var. Hem zaten zaman da yok =D

WASD tuşları ile kamera aşağı yukarı hareket ediyor. İleri gitmek için RF tuşlarını kullanarak ileri geri gidebilirsiniz. QE ekranı çevirir. Ayrıca farenin sol tuşunu basılı tutarakta kamerayı döndürebilirsiniz.

Renkli ve ünlemli gezegenler aslında bizim linklerimiz oluyor, onlara tıklayınca gezegene gidiyoruz ve onunla alakalı flash yükleniyor. Beyaz gezegenler de boş gezegenler, yanlarına gidebiliyorsunuz ama bir şey açmıyorlar.

Hayalimdeki proje evrende kişilere belirli bölgeler vermek, o bölgelerde kendi gezegenlerini oluşturmalarını sağlamak idi. Siz evrende gezinerek aslında siteler arasında geziniyor gibi olacaktınız. Lakin bir süre sonra artık sıkmaya başladı ve bitirilmemiş projeler arasında yerini aldı. Bir diğeride bu mesela. Multiplayer bir savaşlı yarışlı oyun yapayım dedim ama görebileceğiniz o daha başlarda yalan oldu =)

Now you are thinking with portals

Stencil buffer’ın ne olduğunu öğrenmem ve sonrasında “Portal yapılır bunla” fikrinin gelmesi ile başlayan proje.

Portal nedir diyenler için herkesin denemesini tavsiye edeceğim Valve’nin ürettiği bir oyun. Amaç oluşturduğumuz portallar yardımıyla başlangıç noktasından bitiş noktasına gitmek.

Peki “portal” nedir derseniz, şöyleki: iki tane kapı hayal edin, birinden girdiğimiz de aslında diğerinden çıkıyoruz. Türkçe de kurt deliği diye kullanılıyor (hoş aslında oda wormhole ya neyse) diye düşünüyorum.

Yani bir ss ile anlatmak gerekirse:

port11portal21

Bu dikdörtgen pencere gibi duranlar portallarımız oluyor, pembe renkli şekil sarı duvardaki portalın önünde, dikkat ederseniz kırmızı duvardaki portaldan baktığımızda hemen önde onu görüyoruz.

Daha iyi anlamak için programı deneyin =)

İki sürümü var, hemen hemen aynı. Başta windows ta yazmıştım, daha sonra linux üzerinde test ettim.

Windows sürümü için glut isimli kütüphaneyi kullanmanız gerekiyor. Kendisinin asıl amacı opengl komutlarını bir parça basitleştirmek ve opengl i platformdan bağımsız olarak çalıştırmak. Ama klavye fonksiyonları çok zayıf olduğu için windows.h kütüphanesinden bir fonksiyon kullanmak zorunda kaldım. Bu yüzdende linux sürümünde glfw diye glut yerine başka bir kütüphane kullandım.

glut hakında bilgi için
http://www.opengl.org/resources/libraries/glut/
glfw hakkında bilgi için
http://glfw.sourceforge.net/

glut sürümünde linker a glut opengl ve glu kütüphanelerini vermelisiniz. glfw için biraz daha fazla şu kütüphaneler lazım olaca: glfw, GLU, GL, X11, pthread, Xxf86m, m, Xrandr. Ayrıcı -L ile şu klasörüde vermelisiniz: /usr/X11R6/lib

Programı yazarken hiç comment yapmamıştım =) Şu an biraz eklesem de hala kaynak kodu açık olmaktan çok uzak. Şu an saat sabah 7 ve uykusuzluk sayesinde hiç şevkim kalmadı doğrusu =D İlerde projeyi geliştirmeye başlarsam daha açık bir şekilde anlatmayı düşünüyorum.

Çalıştırabilir dosyalar

Windows
Linux

Kaynak kodları (windows visual c++ da hazırlandı, direk olarak dsp dosyasını açabilirsiniz. linux eclipse ile hazırlandı. c eklentisini kurduktan sonra workspace ine atın)

Windows

Linux

Game of Life

Sıfır kişilik oyun diye anılan game of life isimli oyunun java kullanarak yazılmış hali. Staj zamanında yazdığımız için staj konusu (concurrent programming) oyunun kendisinden önemli idi. Burada ki amaç thread nasıl kullanılır, cyclic barrier nedir öğrenmek idi sanırım. Daha fazla bilgi için kodu inceleyebilirsiniz.

gameoflifeGame of life hakkında bilgi için,

http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life

Kaynak dosyaları,

http://www.shultays.com/gameoflife.zip

(Comment yazarken farkettim ki o kadar da iyi bir kod sayılmaz)

Ayrıca bir de cep telefonu versiyonu var bunun ^^Elbette diğeri kadar kaynak isteyen bir şey değil.

http://www.shultays.com/gameoflife_me.java

Yalnız nasıl kuruluyor derleniyor, telefona kuruluyor hiç hatırlamıyorum =)

İki resim arasındaki farklar

İki resim arasında ki 23176856 farkı bulun.

farkEvrimsel algoritmalar dersimin ilk sonucu, ikinci resmin birinciye benzemesi gerekiyordu. Amaç üçgenler ile ilk resme ulaşmak. Resim 512×512 olduğu için oldukça yüklü bir işlem istiyor. Algoritma’mız pek iyi olmadığı için bir yerden sonra tıkanmış ve bu sonuçtan ileri gidememiş (Yaklaşık bir 5-6 saatlik işlemin sonucu). Lakin yine de yaratıcı olursanız benzerlikleri yakalayibilirsiniz =)

İşin ilginci resimler düşündüğünüzden daha benzer. Şöyle ki her pixel için 3 renk düşünün, 0-255 arasında bir sayı. Tüm pixellerin renklerinin birbirinden çıkarınca ortaya çıkan sonuç 2317685. Bunuda 512*512*3 e bölünce yaklaşık 30 çıkıyor. Yani 30/256 ~= %12 lik bir hata var. Ama göze çok çok daha fazla geldiği kesin =)
İlerde resmin aynısını çıkarmayı ummuyorum ama benzetebileceğime inanıyorum, bakalım bir kaç fikir daha var aklımda onları ekleyince ne olacak.

Sevgili İzzet

Uykusuz 2009/10 sayısında Uğur Gürsoy’un köşesinden bir mektup.

Sevgili İzzet

Uzun araştırmalarım sonucu senin niçin kızlarla çiftleşemediğini buldum sevgili dostum.

Sevgili İzzet, doğanın zayıf ve çelimsiz genlere sahip canlıları yeryüzünden silmeye çalıştığını keşfetmiş bulunmaktayım… Senin sahip olduğun kötü genler, binlerce yıl önce buzul çağından kurtuldu, arslandan kaplandan bir şekilde kaçtı ama oyunun sonuna geldin sevgili dostum. Doğa senin çiftleşmeni engelleyerek kötü genlerin bir sonraki kuşağa aktarmanı engelliyor… Bu iş burayaya kadar dostum, oyun bitti…

En iyi arkadaşın
C. Darwin
Galapagos adaları

Not: Bu durumdan kötü saç kesiminin de payı olabilir, onu gelince konuşalım.

Gönül ister resimleri de koyabilseydim.

Aradığım mutluluğu açık kaynakta buldum

İlk açık kaynak kodumu yayınlıyorum, buyrunuz:

[sourcecode language=’cpp’]
unsigned int tay[] = {2942066556, 2959137644, 2193827523, 2210048174, 2501139473, 2398640398, 2147848541, 0};
unsigned int *t = ((unsigned int*)tay)+1, a=0, y=0;
char yat[24]={0};

while(*t){
printf(“%c”, yat[y++]=*t&1?*tay>>(*t>>1&3)*8&127:32);
t+=(*t>>=*t&1?3:1)&~7?0:1;
a++-22?0:printf(“%sn”, yat,y=a=0);
}[/sourcecode]

(bu kod hakikaten çalışıyor, hatta güzel bir output u var söyleyeyim =))