Dev C++ ve Glut

Geçen gün danışman hocamın yanında oturuyorken içerideki bir öğrenci hocaya Dev C++ için glut kütüphanesi kurulumunu nasıl yaparım diye bir soru sordu. Hocada öğrenciye bu soruyu bana sorması gerektiğini bu işlerle benim uğraşmış olduğumu söyledi. Ben de ne cevap vereceğimi şaşırdım. Hemen klasik cevap olan google’da arat ingilizce güzel bir site var cevabını verebildim. Halbuki daha önce bu konuyu ben yaparken bir yere not almış olsaydım öğrenciye o notların adresini verip daha faydalı olabilirdim. Bu yüzden en iyisi çok geç kalmadan bu iş nasıl yapılır bir belgeleyeyim dedim.

İlk önce Dev C++ kurmuş olmanız lazım. Onun kurulumuda oldukça kolay zaten. Yükleyici (Installer) olarak geliyor, tipik sonraki-sonraki işlemleriyle kuruyorsunuz. Dev C++ kurmaya çalıştığınıza göre C(++) bildiğinizi varsayıyorum. Çünkü glut kütüphanesini OpenGL geliştirme yapabilmek için C++ ile kullanacağız.

Daha sonra bu dosyayı indirip içerisindeki dosyaları sırasıyla (C:\Dev-cpp yerine sizin kurulum dizininizi yazın)
  • glut.h -> C:\Dev-Cpp\include\GL altına
  • glut32.def -> C:\Dev-Cpp\lib altına
  • glut32.dll -> C:\WINDOWS\system32 altına
kopyalıyoruz. Bu dosyaları MingW derleyici kullanıyorsanız da aynı şekilde kullanabilirsiniz. Son aşamada projemizi yapmaya başlayabiliriz. Bunun için Dev C++ içerisinde bir tane console projesi açıyoruz.



Daha sonra Project -> Project Options -> Parameter -> Linker metin kutusuna -lopengl32 -lglu32 -lglut32 metnini yazıyoruz.



Ve ayarlarımızı test etmek için basit bir OpenGL kodu yazıp deniyoruz:
#include
#include
#include

void init(void)
{
    glClearColor(0.0f ,0.0f ,0.0f ,0.0f);
    glColor3f(0.0f,0.0f,1.0f);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0f, (GLfloat)250/(GLfloat)250, 0.1f, 100.0f);
}

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_TRIANGLES);
        glVertex3f( 0.0f,  1.0f, -10.0f);
        glVertex3f(-1.0f, -1.0f, -10.0f);
        glVertex3f( 1.0f, -1.0f, -10.0f);
    glEnd();
glutSwapBuffers();
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
    glutInitWindowSize(250, 250);
    glutInitWindowPosition(100, 200);
    glutCreateWindow("Ilk OpenGL/GLUT Programim");
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}
Eğer aşağıdaki gibi bir görüntü penceresi açılırsa başardık demektir.



Bu noktadan sonra yapılması gereken OpenGL öğrenmeye başlamaktır.

Kaynak: http://www.cs.uofs.edu/~mpc3/cmps370/glutsetup.html
http://chortle.ccsu.edu/bloodshed/howtogl.html
https://www.opengl.org/resources/libraries/glut/
http://www.cs.uregina.ca/Links/class-info/315/WWW/Lab1/GLUT/windows.html 

OpenGL Kaynakları:
http://yzgrafik.ege.edu.tr/%7Eugur/05_06_Spring/BG_05_06.htm (Türkçe)

http://www.mutasyon.net/yazarmakaleler.asp?id=12 (Türkçe)

http://nehe.gamedev.net/lesson.asp?index=01 (İngilizce)
http://www.cs.mcgill.ca/~msuder/557/tutorial/tutorial.html (İngilizce)



GNU/Linux makinede CVS'e yeni bir repository ekleme

Her seferinde internette tekrar tekrar aradığım sorunlardan biridir bu. Kaynaklarımı bir şekilde yer imlerime kaydetsem bile artık yer imleri veya bu bilgileri yazdığım kağıtlar bilgisayarımın ve çantamın derinliklerinde kaybolup gidiyorlar. Bu sefer gene aynı soru karşıma çıkınca en iyisi ben bu aşamaları blogta paylaşayım dedim. Olur ya birisi google'da sayfalarca sonucu dolaşmak istemez, veya benim gibi unutkan biridir hangi sayfaları gezdiğini bile unutabilir. Neyse bu kadar geyik yeter, gelelim hali hazırda çalışan bir cvs sunucusuna (GNU/Linux üzerindeki) yeni repository ekleme işlemine.

İlk önce ben bu komutları Ubuntu GNU/Linux üzerinde komut satırından girerek gerçekleştirdim. Diğer linux makinelerde farklı olabilir. Ancak az biraz araştırma ile bu komutların ve dizinlerin sizin makinedeki yolunu bulabilirsiniz. (Bu komutları root ile çalıştırdım)

Aşamalar:

  1. İlk önce repository olarak kullanacağımız dizini bir yerlerde (benim tercihim önceki repositorylerle aynı yer olmasıdır) açarız (/var/lib/cvsd altında cvsrep klasörünü yaratmak)(mkdir cvsrep)
  2. Daha sonra bu oluşturduğumuz dizini CVS repository olarak ilklememiz gerekli, böylece bu dizin bir repository olarak davranabilsin. (cvs -d /var/lib/cvsd/cvsrep init)
  3. Bu noktada duralım ve bu repositoryi ayar dosyamızda tanıtalım. Ben bu hatayı bulana kadar bayağı araştırdım. Bu işlem /etc/cvsd.conf dosyası içerisine Repos cvsrep satırını ekleyerek yapılmaktadır. Bu satırı diğer Repos satırları altına o örneklere bakarak ekleyebilirsiniz. (pico /etc/cvsd.conf)
  4. Bu repository için kullanıcı ekleyelim, yoksa kimse giremiyor sanırım. (cvsd-passwd /var/lib/cvsd/cvsrep +kullanici) Bu komutu girince şifre sorulacak o şifre bu kullanıcının bu repository'i kullanırken kullanacağı şifre olacak. Ona göre ;)
  5. Ve şimdi cvsd wrapper'ini tekrar başlatıp yeni repository ayarlarının etkili olmasını bekliyoruz. (/etc/init.d/cvsd restart)
  6. Ve şimdi bu repository'mizi test edebiliriz: cvs -d :pserver:kullanici@localhost:/var/lib/cvsd/cvsrep login Bu komut başarılı bir şekilde çalışırsa hiç bir hata vermezse bu başardık demek oluyor. Hata verirse artık ne yazıyorsa google'a yazıp aratmak kalıyor.

Java Yansıtma Kütüphanesi (Reflection API)

Yoğun java projelerinde işleri kolaylaştırmak için mutlaka kolaylaştırıcı kütüphanelere ihtiyaç duyarsınız. Bunlardan biri de benim öğrendikten sonra gerektiği yerde (abartmadan) kullandığım Java Reflection API olmuştur. Örnek olarak İTB projesinde formlar ile DVO nesnelerinin birbirine aktarılmasında (sahalar tamamen aynı) reflection kütüphanesi çok işimize yaramıştı. Özellikle Java topluluğunda çoğu geliştiriciye yardımcı araçlar bu kütüphanenin yardımıyla geliştirilmektedir. Örnek olarak kalıcı katmanlarda Object'ten türeyen her türlü sınıfı tek bir sınıf kullanarak sahaları ve tiplerini bilmeden veritabanına kaydetme işlemini yapabilirsiniz. Bu yüzden bu konudan biraz bahsetmeyi uygun buldum. Belki yazdıklarım çok açıklayıcı olmayacaktır. Ancak eğer yorumlarınızı iletirseniz daha iyi hale getirebilirim.

Java Reflection Nedir, Nasıl Kullanılır
Java Reflection (Yansıtma) bir uygulama geliştirme arayüzü olup, o anki Java Sanal Makinesindeki sınıfları, arayüzleri ve nesneleri yansıtan, temsil eden kütüphanedir. Özellikle geliştirme araçları yazarken yansıtma kütüphanesine ihtiyaç duyarız. Yansıtma kütüphanesini kullanarak;
  • Bir nesnenin sınıfını belirleriz
  • Sınıfın sahaları, metodları, yapıcıları, üst sınıfları ve değişkenleri hakkında bilgiler alabiliriz
  • Bir arayüze ait olan sabit ve metod tanımlamalarını tespit ederiz
  • Çalışma zamanına kadar ismi bilinmeyen bir sınıf örneği yaratabiliriz (Bir bakıma çalışma zamanında yeni sınıflar yaratabilirsiniz)
  • Çalışma zamanına kadar ismi bilinmese de sahaların değerini ayarlar ve alabiliriz.
  • Aynen çalışma zamanına kadar bilinmeyen metodları çalıştırabiliriz.
  • Çalışma zamanına kadar bileşenleri ve boyutu bilinmeyen diziler yaratabilir, daha sonra bu dizinin bileşenlerini değiştirebiliriz.
Çok önemli bir hatırlatma, standart java yapılarıyla yapabileceğiniz işleri Java yansıtma kütüphanesiyle yapmayın. Umulmadık zorluklar ve sorunlarla karşılaşabilirsiniz.
Eğer sınıfın ne olduğunu bilmiyorsanız maalesef yanlış yerde olduğunuzu söylemem gerekir. Sınıfı öğrenmek için Java Object Oriented Concepts dersine bir göz atmanızı tavsiye ederim.
Şimdi aşama aşama yansıtma kütüphanesini inceleyelim. Temel olarak yapmak istediğimiz ilk işlem bir nesnenin hangi sınıfa ait olduğunu bulmaktır. Sınıfı bulduktan sonra bu sınıf yardımıyla yansıtma kütüphanesinin tüm nimetlerinden faydalanabiliriz. Bunu yapmak için nesne.getClass() (Class döndürmektedir) çağrımında bulunuruz. Bu aldığımız Class tipinde nesneyi kullanarak nesnemizin metodlarını listeleyebilir, sahalarını listeleyebilir, istediğimiz sahanın get ve set metodlarını bulup çalıştırabiliriz.
Aşağıda çok basit bir, nesnenin tüm metodlarını ekrana yazdıran kodu görebilirsiniz:


// bize gerekecek tum siniflar bu pakette
import java.lang.reflect.*; 
import java.util.ArrayList;

public class MetodYazdir {
 public static void main(String[] args) {
  try {
   // once ArrayList sinifinin Class nesnesini alalim
   // getClass() metodu da kullanilabilir
   Class c = ArrayList.class;
   // daha sonra bu sinif icerisindeki tum metodlari cekelim
   Method[] m = c.getDeclaredMethods();
   // ve bu metod dizisini dolasarak bilgilerini ekrana yazalim
   for (int i = 0; i<0; i++) System.out.println(m[i].toString());
  } catch(Exception e){ e.printStackTrace(); }
 }
}

Bu kodu çalıştırdığınız zaman

public void java.util.ArrayList.add(int,java.lang.Object)
public boolean java.util.ArrayList.add(java.lang.Object)
public java.lang.Object java.util.ArrayList.clone()
…………………………………

Şeklinde uzayıp giden ve ArrayList sınıfının metodları erişim ve parametre bilgilerini gösteren çıktıyı göreceksiniz.

Bir yansıtma işlemi yapabilmek için temel olarak ilk yapılması gereken Class nesnesine ulaşmaktır. Bunun için farklı yöntemler vardır.

Class c = Class.forName("java.lang.String");
Class c = int.class;
Class c = Integer.TYPE;
Class c = Ogrenci.getClass();

Bu Class nesnesini aldıktan sonra bu nesne içerisindeki metotlar kullanılarak her türlü bilgi (sınıfla ilgili olan) rahatça alınabilir. Aşağıdaki bağları inceleyerek bu konuda hakkında daha ayrıntılı bilgilere ulaşabilirsiniz. Ayrıca örnek kodların (açıklamalı) içerisindeki ClassParser sınıfını her türlü projenizde ihtiyaçlarınız doğrultusunda kullanabilirsiniz.

 

Compaq PDA uzerinde Java çalıştırma

Çok da kolay değilmiş bu iş, uğraştırdı beni ama sonunda yaptım. Kısıtlı da olsa Java uygulamaları geliştirip PDA üzerinde çalıştırdım. Şöyle bir de kurulum/yöntem listesi çıkardım:

Compaq PDA uzerine, birlikte gelen cd icerisinde bulunan Jeode JVM, Active Sync yardımı ile kurulduktan sonra hazırlanan java dosyası için aşagıdaki adımlar uygulanır:

j2sdk1.4.2 kullanarak (dokumanlar jdk1.1.8 kullanin diyor)
javac deneme.java

jdk1.1.8 kullanarak derleme sonucu olusan iki sinif su komutla paketlenir
jar cvf deneme.jar deneme.class deneme$1.class

Olusan jar dosyasi PDA nin windows/lib klasoru altina kopyalanir

\Windows\Start Menu\Programs\Jeode\Examples klasoru altinda da
18#"\Windows\evm.exe" -cp "\Windows\lib\deneme.jar" deneme
seklinde bir icerige sahip kisayol dosyasi yaratilir.

bu kadarrr.

EgeMobs - Ege Mobil Bilgilendirme Sistemi Projesi

Bu proje hedef projelerden biriydi. Başladık, ortalarına geldik, sonra birden durduk; bunu yapmışken neden bunun gibi bütün projelerde aynı yapıyı kullanmayalım ki dedik, ve Kabsra yı yapmaya karar verdik. böylece Egemobs, Kabsra yı kullanarak çalışacak ikinci bir proje haline geldi.

Egemobs yine ilk tasarım amacına hizmet edecek şekilde geliştiriliyor. Özetlemek gerekirse:

EgeMobs, SCORM standardına uygun, mobil cihazları destekleyebilen ve RFID teknolojisini kullanarak kullanıcı uyumlu bilgilendirme sağlayabilen bir öğrenme sistemi olarak tasarlanmıştır.



Burada öncelikli hedef SCORM standardına uygun bir m-öğrenme sistemi geliştirmek ve bu sistem ile RFID teknolojisini bütünleştirerek kullanıcı uyumlu, konum bilgisini göz önüne alarak bilgilendirme sağlayabilen çevresel farkındalığa sahip bir öğrenme sistemi oluşturmak ve bu sistemin farklı alanlarda da kullanılabilmesini sağlamaktır. İkinci hedef ise bu özelliklerle oluşturulacak altyapı üzerinde çalışabilecek bir kampüs içi bilgi edinme sisteminin gerçekleştirimini sağlamaktır.

EgeMobs, kampüs içi bilgilendirme sistemi olarak çalışacak ve sisteme giriş izni verilmiş kullanıcıların bina girişlerinde kimliğinin ve konumunun RFID yardımı ile tanımlanarak bina ile ilgili bilgi, prosedurler, alınabilecek hizmetler v.b. hakkında öntanımlı öğrenme mobil araçlarına uygun şekilde bilgi verilmesini sağlayacak bir projedir. Bu şekilde kullanıcılara, kullandıkları mobil cihazın uyumluluğuna göre bina planları gibi grafiksel verilerin gönderilmesi dahi mümkün olabilecektir.

RFID nedir?


Bitirme tezimin çekirdeğindeki elektronik bir zımbırtıdır. Her yerde kullanılabilirler, insanın deri altına bile yerleştirilen türleri var. Teknik olarak anlatmak gerekirse:

RFID, Radio Frequency Identification sözcüklerinin kısaltmasından oluşur. RFID tag sınırlı kapasitede belleğe sahip, taşınabilen bir modüldür. Bu modül bir kibrit çöpü boyutunda, kredi kartı ebatlarında veya 20 x 200 mm silindirik olabilir. RFID tag terimi yerine bazı yerlerde transponder deyimini de kullanır.

IEEE tarafından 1997 yılında 2 Mbps ve ardından 1999 yılında 11 Mbps hızlarındaki standartları ortaya konulan RFID sistemi başlıca şu üç bileşenden oluşmaktadır : “tag” (transponder), okuyucu (reader/interrogator) ve yazılım/uygulama (software/application).

RF sistemler, taşınabilir bilgisayar terminalleri ile ana bilgisayar arasında veri iletiminde radyo dalgalarını kullanırlar. Radyo frekanslı kimliklendirme, bir kişi veya nesneyi genellikle 125 KHz(lf) veya 13.56 MHz (hf) 800-900 MHz (UHF) ve 2.45GHz frekansında radyo dalgaları kullanılarak tanımlanmasıdır. Günümüzde en sık kullanılan ve pazar tarafından en çok talep edilen frekans 13.56MHz dir. Son yıllarda RFID teknolojisi sağladığı kullanım kolaylıkları ,ürün takip kesinliği,üretim ve stoklama bantlarında sağladığı kesinlik ve performans sebebiyle çok yaygın hale gelmiştir.

RFID tagların belleklerindeki bilgiyi okumak, yazmak veya değiştirmek için özel okuyucu modüller kullanılır. Bu modüllere anten bağlanır ve antenin büyüklük ve şekline göre okuyucunun tagı okuyabileceği kapsama alanı oluşturulur.

RFID tagların bazı modelleri içindeki bilgiyi koruyabilmek için pil kullanır. Bu tip taglara aktif tag denir. Aktif taglar okuma menzili bakımından pasif taglardan (içinde pil bulunmayan) daha verimli olmasına rağmen pil bitme riski ve fiyat yüksekliği bakımından fazla tercih edilmezler. Pasif taglar okuyucudan yayınlanan radyo frekansı ile kendisini enerjiler, okuyucudan gelen komutu değerlendirir ve cevabını gönderir. Aktif ve pasif tagların “yalnız okuma“ ve “okuma yazma” tipleri vardır.


RFID tagları her tür ürüne gömülebilir yada yapıştırılabilir. Son derece küçük olan bu taglar içinde bilgi barındıran (ürün numarası üretici kodu, üretim tarihi, doz, ilaç adı vb) birer mikro yonga ve yine minik birer antenden oluşurlar. Pasif RFID sistemlerinde bu etiketler yalnızca bir RFID okuyucu tarafından uyarıldıklarında sinyal yayar ve bilgi gönderirler. RFID okuyucular 1-3 metrede etkili bir elektromanyetik alan oluştururlar. Pasif RFID tagları bu etki alanına girdiklerinde elektromanyetik alanın etkisi ile etkinleşir ve sinyal üretirler. Okuyucu bu sinyali alır ve bağlı olduğu bilgisayar sistemine iletir. Örneğin, hastane eczanesinde bulunan bir okuyucu kapıdan çıkan her serum şişesini satın alma ve depo programlarına bildirebilir. Aktif RFID taglarında ise minik birer pil bulunur ve biraz daha pahalı olmalarına karşın pasif taglara göre daha uzak mesafelerden okunabilirler. Yarı-aktif taglar ise üzerlerinde depoladıkları bilgi için bir pil bulundururlar ancak okuma işlemi yine okuyucunun yaydığı elektromanyetik alan yoluyla gerçekleşir.

RFID tag’ları ile barkodlar karşılaştırıldığında RFID tag’ları sürat, daha uzun okuma menzili ve daha güvenilir bir sistem olması ile öne çıkmaktadır. Nesne hareket halinde iken veya tag ile okuyucu arasında engelleyici bir katman olsa bile okuma gerçekleşmektedir. Barkodun aksine tag ile okuyucu arasında görsel temas olmasa da okuma süratli ve kesin bir şekilde sağlanabilmektedir.


Web3D ile uğraşmak

Yüksek lisans çalışmalarımı tamamen Web3D üzerinde adadım desem doğrudur. YL başladığından beri hayatım X3D, Java3D projeleri yapmakla geçiyor. Benim için gerçekten çok faydalı bir deneyim oluyor. Bu dönem sonunda da X3D ile geliştirmekte olduğum tezi bitirebilirsem YL ile amacıma ulaşmış olacağım.

Daha geçenlerde bir gruba (java_tr) java 3d ile ilgili bir soru geldiği zaman, bu konudaki tecrübelerimi soran kişiye aktarmak benim için büyük bir gurur kaynağı olmuştu. Demek ki insanlar uğraştıkları konuyla ilgili sorularla karşılaştıkları zaman bu soruları cevapalayabilirlerse bundan zevk alıyorlarmış. Tüm bu YL,Doktora falan çalışmaları hep bir konuda uzmanlaşmak, o işi bilen olup cevaplayabilmek için yapılıyor zaten. Başka ne anlamı olabilir ki? Her yapılan proje, her üretilen makale, her cevaplanan soru bir mutluluk kaynağı oluyor. Gerçi bunları yapacağım diye insan'ın kendi yaşamından bazı fedakarlıklar yapması gerekiyor, ama nihai sonuç bu fedakarlığa değiyordur. Şimdi diyeceksiniz ki ya bu ne cevap verdi ki bu kadar övünüyor (övünmüyorum :) sadece izlenimlerimi anlatıyorum), bunu cevaplamak için ben soruyu ve cevabı buraya yazayım en iyisi, cevabın güzelliği (eğer böyle bir şey mümkünse) ve övünme konusundaki kararınızı soruyu ve cevabı okuduktan sonra verirsiniz. Bakarsınız bu soru ve cevap sayesinde Web3D konusuna ilgili bir kaç kişi için yönlendirme sağlamış oluruz. Bilgi güçtür o zaman tüm insanlar bu güçten faydalansın sloganımız da bir sonuca varmış olur :S

Soru şu:(Bağıda bu)
iyi günler

java3d ile uðraþmayý düþünüyorum, daha önceleri j3d
hakkýnda birþeyler okumuþtum ama okul yoðunluðundan
devam edemedim.

bu hususta bana tavsiye verebilecek var mý. ayrýca
elinde güzel döküman olan varsa, gönderebilirseniz sevinirim.

Cevaplar da bunlar: (Elbette benden başka cevap verenler de vardı :D )
(Maviler o cevap ile ilgili şu anki düşüncelerim :D )

Ahmet Işık tarafından:
j3d yerine opengl ve java binding'lerine bakmanizi tavsiye ederim.

Evet bu benim de tavsiye edeceğim birşeydir. Özellikle uygun konuya uygun API düşüncesine bağlı olarak
Mehmet Çabuk tarafından:
web için mi application için mi J3D öðrenmek istiyorsunuz?
Java için web / application pek farketmez tabi ama, w3 consortium web
3D VRML idi yanlýþ hatýrlamýyorsam. Bunu da bi araþtýrabilirsin.
Tabi hem web hem application istiyorsan J3D öðrenmen en mantýklýsý...

Az bilgiyle yanlış yönlendirme :S


Soruyu soran kişi aradığını bulamamış bu iki cevaptan sonra şu şekilde sorusunu genişletmiş:
vrml'e biraz baktým da, wrml için ayrý bir browser
gerekiyor ve okuduðum kadarýyla aðýr olduðu için
kullanýmý hemen hemen kalkmýþ.
yalnýz web3d consortium tarafýndan geliþtirilip xml
desteði getirilmiþ hali çýkmýþ ortaya x3d diye(Mehmet
abinin kastettiði bu heralde).
peki bu x3d hakkýnda malumatý olan var mý? bu iþ sanki
3d programlama yapmada deðil de elinde hali hazýrda 3d
modeller bulunup bunlarý internette kullanmak isteyen
kiþilere hitap ediyormuþ gibi geliyor.

baþka bir soru da j3d ile ilgili. j3d'nin kýsýtlý
olduðu söyleniyor. (diðer arkadaþlar da)opengl veya
directx ile uðraþ diyorlar.
iyi de java3d zaten çalýþtýðý platforma göre altta
opengl ya da directx'i kullanmýyor mu?

j3d'nin dýþýnda direk olarak opengl kullanýlabiliyor
mu javada, öyle olursa j3d'deki(var olduðu söylenilen)
eksikliklerden kurtulabiliyor muyuz?

peki performans olarak j3d ve opengl karþýlaþtýrmasý
nasýl(ikisinin de javada kullanýmýný kastediyorum).


ayrýca baþka birþey daha; java binding nedir? bu
ibarenin türkçe baþka bir karþýlýðý mý var, türkçe
hiçbirþey çýkmýyor bu konuda. ingilizce de biliyorum
ama ingilizce okuduklarýmdan pek birþey çýkaramadým
birþeyler anlamadým.


Ve evet işte bu da benim cevabım, faydalı olmasını umduğum cevap :S

Merhaba,
VRML artik desteklenmiyor. Onun yerine Web3D konsorsiyumunun XML tabanli X3D
teknolojisini kullanmaniz gerekiyor. X3D sahnelerin tanimlandigi bir dosya
bicimi. Ayrica Xj3D (http://www.xj3d.org) vb. tarayici/API'ler yardimiyla
sahneler uzerinde Java kullanarak degisiklikler yapabilirsiniz. X3D ile 3B
programli diye kastettiginiz (ya da sizin soyleminizden benim anladigim) seyi
yapabilmeniz icin X3D'nin SAI altyapisini incelemeniz gerekli. (Ayrintili
malumata http://www.web3d.org adresinde ulasabilirsiniz)

Java3D konusuna gelirsek, java3d bir ust API gorevi gormektedir. Alt tarafinda
OpenGL veya DirectX kullanan (bir kac surum sonra JOGL'e gecmeyi dusunuyorlar)
bir ara katmandir. Yapacaginiz, yapmak istediginiz ise gore Java3D'mi yoksa
JOGL (Java OpenGL Binding)'mi kullanacaginiza karar vermeniz gerekiyor. (Su
sitede http://forum.java.sun.com/thread.jspa?threadID=510067&messageID=2431319
oyun motoru yazmak isteyen biri icin fikirler uretilmis ornegin)
Java3D OpenGL'e gore daha ust katman oldugu icin bazi seyleri yapmak ve anlamak
cok daha kolay. Ancak su ana kadar Java3D web3d ve akademik kullanimin disina
pek cikamadi. JOGL ve OpenGL/DirectX daha cok kullaniliyor (Belki de
populerliklerinden)

Benim soyleyebileceklerim bu kadar.

Onemli Bir Not: X3D'yi Xj3D kullanarak normal bir uygulamada da
kullanabilirsin. Sadece Web'de kullanman gerekmez.


Aslında tüm bu yazıda anlatmak istediğim bazı konularda gerçekten meraklı olabilirsiniz, ancak yeterli ve güvenilir kaynaklar olmadan işi iyi öğrenmek gerçekten zor olacaktır. Bu yüzden yabancı dil bilgisine ihtiyacınız oluyor. Ya da bu işe gönül vermiş insanların yabancı dildeki belgeleri anadile çevirip kullanmak isteyenlere bağışlaması gerekiyor.

Konuyla ilgili (Türkçe) bağlar:(Web3D ile ilgili makale çalışmaları)

Güvenlik ve Kriptografi

Evet, hoşumuza giden beraber çalışmayı sevdiğimiz başka bir konu daha. Bilgi teknolojileri güvenliği. Lisans boyunca bu tip konulara merak sardık, ve sonunda Mehmet işin kablosuz güvenlik kısmıyla ilgili, bende bilgi teknolojileri ile ilgili bitirme tezlerimizi gerçekleştirdik. Gerçi tezlerimizin bize herhangi bir faydası dokunmadı Ama mutlaka birilerine yararı olmuştur diyerek kendimizi avutuyoruz.

Kod ve Us'un ilk çalışması (Esasen birden fazla oldu ama...)

Hatırladığım kadarıyla gerçekten hedefimize kilitlenmiş bir şekilde başlamıştık. Tasarımı oluşturmuştuk, mimari modelimiz hazırdı. Ama zamanın kısıtlayıcı saldırısından kurtulamadık. Birşeyler yaptık. Bu sayede Hibernate nedir, nasıl çalışır, işimizi görür mü, zor mu kolay mı konularında bir kaç fikir edinmiş olduk. İyi de oldu. Hibernate kullanımı beklediğimizden kolay, umduğumuzdan zor çıktı Bir kaç konuda (Örneğin Lazy Load, bununla herkes uğraşmıştır. http://www.hibernate.org/162.html ) sorunlar yaşadık, bir şekilde aştık (Lazy load'u kapatmak sorunu çözüyordu ). Elimizde çalışır bir program oluştu en sonunda. İlk deneyimimiz olan Zambax'taki (Bkz: IBM Linux Yarışması, Bakamıyorsunuz hiç bir yerde haber vb. bağlantı bulamadım ) başarısızlığımız yerine bu çalışmamızda gözle görülür bir başarı elde ettik. (En azından benim inandığım bu ). Bir sonraki çalışmamız bundan daha iyi olacaktır. Sunulacak bir şeyler mutlaka ortaya çıkacaktır. Aslında bu projemizde Hibernate ile ilgili belgeler oluşturabilseydik burada sunmamız diğer kişilere fayda sağlayacaktı. Ben elimdekileri inceleyeyim, belki işe yarar notlar bulabilirim