28 Mayıs 2009 Perşembe

IIS Nasıl Kurulur ve ASP.NET(aspx) nasıl çalıştırılır ?



Önce windows yüklü bilgisayarınıza IIS'i yüklemek için, denetim masasından -> program ekle/kaldır açılır. Burdan windows bileşeni ekle/kaldır(resimdeki) kısmından IIS seçilerek, bu bileşen kurulur.

Bilgisayarınızı yeniden başlattığınızda, büyük ihtimalle "WWW" servisi bilgisayarınızda otomatik olarak başlatılır. Bunu tarayıcınızdan "localhost" adresine gidip öğrenebilirsiniz. "WWW" hizmeti başlamışsa windowsun bir sayfasıyla karşılaşacaksınız, aksi takdirde bu adresi açmaya çalışan tarayıcı başarılı olmayacakır. Eğer otomatik olarak başlamadıysa, denetim masası altından yönetimsel araçlar'dan -> servisler açılır, listede "WWW" servisi bulunur ve başlatılır (resimdeki gibi).Yine yönetimsel araçlardan "Internet Information Services" yani IIS açılır. Burda Varsayılan Web Sitesi (Default Web Site) sağ tıklanarak, Script Resources'ın altındaki "Read" ve "Write" kutucukları işaretlenir (resimdeki gibi).

Varsayılan olarak belirtilen "C:\Inetpub\wwwroot"(isterseniz yönetimsel araçlar'dan -> IIS kısmından bu yolu değiştirebilirsiniz) klasöründe oluşturduğunuz asp dosyaları otomatik olarak çalışacaktır, yalnız farkedeceğiniz gibi aspx dosyalarını aynı şekilde bu dizine kopyalarsanız, bu dosyalar çalıştırılmayacaktır.

Aspx dosyalarını çalıştırmanız için, eğer yüklü değilse, öncelikle asp.net framework'ü yüklemeniz gerekmektedir. İndirmek isterseniz http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=en adresinden indirebilirsiniz (asp.net 2.0)

Framework kurulduktan sonra "%windir%\Microsoft.Net\Framework\xxxxxxxx\" klasörüne gidilir. Bende bu klasör "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" şeklinde. Bir komut istemi penceresi açılır. Bunu başlat->donatıların altından, ya da çalıştır'a cmd yazıp açabilirsiniz. Komut isteminde yukarıda belirtilen klasöre gidin, ve bu klasördeyken “aspnet_regiis.exe –i” komudunu çalıştırın (resimdeki gibi).Son olarak internette okuduklarıma göre yine bu klasördeyden “regsvr32 aspnet_isapi.dll” komudu çalıştırılır. Bende bu komudu çalıştırmama gerek kalmadı. Belki vista'da gerekli olabilir diye not ediyorum. Siz isterseniz yinede çalıştırabilirsiniz.

Eğer yukarıda yazılanları doğru olarak uyguladıysanız, asp.net sunucunuzun çalışması gerekiyor.

"inetpub" klasörüne attığınız aspx dosyaları çalışırken web.config dosyanız “” satırında hata verebilir. Bu hatanın sebebi aspx dosyalarının bulunduğu klasörü bir uygulama olarak belirtmemenizdir. O klasörü bir uygulama olarak belirtmek için, Yönetimsel Araçlardan -> IIS e girilir. Oluşturduğunuz klasör'ün orda listelenmesi gerekir. Bu klasöre sağ tıklayıp "directory/dizin" sekmesinden "application name/uygulama ismi" boş ise(Default Application/Varsayılan Ugulama yazıyorsa) yenisi oluşturulur (resim).
Sitenizi açmaya çalıştırdığınızda yine hata verirse, bilgisayarı yeniden başlatmanız gerekebilir. Bunun yerine komut isteminden "iisreset" yazarak, IIS'i yeniden başlatabilirsiniz.


Sitenizde mssql bağlantısı kullanıyoranız, büyük ihtimalle "login fail" ya da buna benzer bir hata oluşacaktır. Bunuda bir sonraki konuda anlatmayı planlıyorum.

Umarım bu yazı size yardımcı olmuştur. Bu konuda herhangi bir sorunuz olursa, yorum kısmını kullanarak sorabilirsiniz.

3 Mayıs 2009 Pazar

ASP.NET Precompile


Asp.net ile bir sayfa oluşturduğunuzda, herhangi bir kullanıcı sayfaya ilk isteği yaptığında, sayfa derlenir. Dolayısıyla ilk istekte sayfanın açılış süresi oldukça uzundur. İkinci ve sonraki isteklerde, sayfa daha hızlı yüklenir ve dosya değiştirilene ya da sunucu yeniden başlayana kadar bu böyle sürer.

Asp.net sayesinde, oluşturduğumuz sayfaları kendi makinamızda derleyebilir, ve sunucuya sadece derlenmiş binary dosyaları yükleyebiliriz. Derleme yapmanın avantajlarını listelemek gerekirse;
  • İlk açılış süresi azalır.
  • Yazmış olduğunuz değerli kodlarınızı sizinle aynı yetkiye sahip kişilerden korumuş olursunuz :).
Dezavantajları ise;
  • Sitenizi sunucuya yüklemeden önce derleme işlemini her seferinde yapmanız gerekir.
  • Ufak tefek değişikliklerde de yeniden derleme yapmak gerekir.
Oluşturduğunuz sayfaları derlemek için ise aşağıdaki basamakları izlemelisiniz.
  1. Dermele yapıcağınız versiyonun klasörüne gidin. "%windir%\Microsoft.NET\Framework\version", bu yol bende, "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" şeklinde.
  2. Bu dizinde bulunan aspnet_compiler.exe'yi kullanarak oluşturduğunuz sayfaları derleyin. En basit kullanımı, "aspnet_compiler -p c:\projem\ -v / C:\derlenmiş_projem\" şeklindedir.
Derleme tek şekilde değildir. Size uygun derleme çeşitleri için msnd'in sitesinden bakabilirsiniz.
Kaynak

30 Nisan 2009 Perşembe

OpenGL'de Push ve Pop Matrix


OpenGL kullanılarak geliştirilen bir örnek incelediğinizde glPushMatrix() ve glPopMatrix() komutlarıyla karşılaşmışsınızdır. Daha sonra bunun çok da önemli olmadığını düşünmüş olabilirsiniz, ancak bu komutları kullanmanız işinizi kolaylaştırabilir. Şimdi size kısa bir biçimde bu komutları ne işe yaradığını anlatacağım.

OpenGL ile ilgili kod yazmaya başladığımızda genellikle glLoadIdentity() fonksiyonunu çağırarak birim matrisimizi -diagonal elemanları 1, diğer elemanları 0 olan, 4x4lük matris- yükleriz. Daha sonra çizilecek poligonların, bulundukları yere çizmek için glTranslate, glRotatef gibi fonksiyonları kullanarak istediğimiz yere çizilmesini sağlarız. Örnek olarak bir arabanın gövde ve 4 tekerden oluştuğunu varsayalım. Bu arabayı çizmek için push ve pop matrix fonksiyonlarını kullanmazsak, aşağıdaki şekilde yazmamız gerekir.

glLoadIdentity();
glTranslatef( [Aracın Posizyon Vektörü] );
[Aracın Gövdesini Çizdir]

glLoadIdentity();
glTranslatef( [Aracın Posizyon Vektörü] );
glTranslatef( [Ön Tekerleğin Pozisyon Vektörü] );
[Ön Tekerleği Çizdir]

glLoadIdentity();
glTranslatef( [Aracın Posizyon Vektörü] );
glTranslatef( [Arka Tekerleğin Pozisyon Vektörü] );
[Arka Tekerleği Çizdir]

...

Eğer glPushMatrix() ve glPopMatrix fonksiyonlarını kullanırsak, aynı örnek aşağıdaki hali alır.

glPushMatrix();
  glTranslatef( [Aracın Posizyon Vektörü] );
  glPushMatrix();
    glTranslatef( [Ön Tekerleğin Pozisyon Vektörü] );
    [Ön Tekerleği Çizdir]
  glPopMatrix();
  glPushMatrix();
    glTranslatef( [Arka Tekerleğin Pozisyon Vektörü] );
    [Arka Tekerleği Çizdir]
  glPopMatrix();

  [Aracın Gövdesini Çizdir]
glPopMatrix();

28 Nisan 2009 Salı

Shadow Physics



Bağımsız oyun geliştiricileri konferansında (Indie Developers Conference) gösterilen deneysel, gerçekten güzel bir çalışma :) Oyunda ışık kaynağını hareket ettiriyoruz, böylece oluşan gölgeler üzerinde karakterimizi belli bir yere götürerek bölümleri geçiyoruz.
Kaynak: http://www.indiegamepod.com/2009/04/video-podcast-interview-experimental.html

OpenGL'de Hataları Bulmak


OpenGL ile yazdığınız bir programı çalıştırıken beklenmedik sonuçlar alıyorsanız, büyük ihtimalle kodunuzda hata vardır.

Yanlış zamanda ya da yanlış sırada çağırılan openGL fonksiyonları derleme zamanında herhangi bir hata vermediği gibi çalışma anında da herhangi bir mesaj vermez, siz istemedikçe.

Peki bu hataları nasıl görüntüleyebiliriz ? Bunun için openGL'in içinde glGetError() isimli bir fonksiyon bulunmakta.

- GLenum glGetError();

Bu fonksiyonu ilk çağırdığınızda, programın başlangıcından itibaren oluşan ilk hatayı döndürür. Daha sonraki çağırışlarınızda ise bir önceki çağrılmadan sonraki hatayı döndürür.
  • GL_NO_ERROR -> Herhangi bir hata yok ise döndürülecek olan değerdir.
  • GL_INVALID_ENUM -> Eğer bir fonksiyonun kabul edemeyeceği bir enum değeri parametre olarak verildiyse, bu hata mesajı oluşturulur.
  • GL_INVALID_VALUE -> Belirtilen aralık dışındaki sayısal bir değer parametre olarak verilirse, bu hata mesajı oluşturulur.
  • GL_INVALID_OPERATION -> Fonksiyonlara verilen parametreler beraber çalışamıyorsa, bu hata mesajı oluşturulur.
  • GL_STACK_OVERFLOW -> OpenGL'deki stacklerin(yığın) alabileceğinden daha fazla değer verilirse, bu hata mesajı oluşturulur.
  • GL_STACK_UNDERFLOW -> Genel olarak glPopMatrix fonksiyonunun glPushMatrix den fazla çağırılmasıyla oluşur. Yani matris yığınlarından, yığında olduğundan fazla matris çıkarılmaya çalışılırsa, bu hata mesajı oluşur.
  • GL_OUT_OF_MEMORY -> Yapılan işlem sistemin hafızasının bitmesine neden oluyorsa, bu hata mesajı oluşturulur.

27 Nisan 2009 Pazartesi

WGL Temelleri

Eğer daha önce windows üzerinde opengl ile ilgili bir uygulama geliştirdiyseniz, opengl ile ilgili kod yazmadan önce bir pencere yaratmışsınızdır.

Örnek ya da deneme uygulamaları için glut yeterli olsa da daha ileri projeleriniz için win32 api'sini kullanmanız gerekebilir (nehe'in opengl tutorial'larında bulabilirsiniz.). Eğer tutoriallarda pencere oluşturan kodlarda dikkat ederseniz WGL kullanıldığını görürsünüz. Peki nedir bu WGL?

WGL, windows'ta openGL kullanmak için yararlandığımız api'lere denir. Okunuşu "wiggle" olarak yapılır.

WGL, rendering context oluşturmak, seçmek, openGL uygulamalarında windows font desteğini kullanmak ve openGL extension'larını yüklemek için kullanılır.

Rendering context, openGL'in istediğimiz pencerede çalışması için gerekli tüm bilgiyi içerir. Aynı zamanda çalışan birden fazla openGL uygulamasının birbirini etkilemesiniz önler.

Birden fazla pencere yada viewport barındıran uygulamalarda için birden fazla rendering context oluşturulabilir.

WGL kullanmak için gereken fonksiyonlar;
- HGLRC wglCreateContext(HDC hDC) -> bir rendering context oluşturmanızı sağlar.
- BOOL wglDeleteContext(HGLRC hRC) -> oluşturduğunuz rendering context'i kaldırır.
- BOOL wglMakeCurrent(HDC hDC, HGLRC hRC) -> eğer programda current rendering context belirtilmezse, çağırılan openGL fonksiyonları hiçbir işlem yapmaz. Çünkü rendering context, openGL'in çalışması için gerekli tüm bilgileri içermektedir. wglMakeCurrent(hDC, NULL) fonksiyonunu çağırırsak, current rendering context'imizi null'a eşitleyip,kullanılan rendering context'imizi serbest bırakmış oluruz.

Merhaba

Yeni blog'uma başlamış bulunuyorum. Genel olarak programlama ile uğraşırken karşılaştığım sorunları yada bana ilginç gelen içerikleri paylaşmayı amaçlıyorum. Önümüzdeki girdilerde görüşmek üzere :)