8 Ocak 2011 Cumartesi

Bölüm dersleri projeleri

Bu sene derslerden 3 tane proje aldık. (aldık = Hepsinde ev arkadaşım Engin Manap da var.)

Öncelikle bütün projelerimize proje depo sayfamızdan ulaşabilirsiniz.[1] Ve hepsini SVN ile geliştirdik.

1. Veritabanı Yönetim Sistemleri (DBMS) Dersi Projesi - bmforum

Projenin asıl amacı veritabanını anlamak. Veritabanını kullanmak. Bunun için ne ile yazıldığı, nasıl olduğu önemli olmayan ama mutlaka veritabanı kullanılan bir proje yapmamız istendi. Ev arkadaşım da bu yaz yapmış olduğu stajda django ile beyin2'yi [2] geliştirdiği için django ile yapmaya karar verdik. Ve basit bir proje yaptık. Projeye [3] adresinden ulaşabilirsiniz. [3] adresinde bmforum/ dizininin (yani bmforum/bmforum oluyor) içerisi projenin tamamını kapsıyor. [3] adresindeki diğer dosyalar, projenin R diyagramı ER şeması vs.

Proje çok da karmaşık bir şey değil. Hedef öğrencilerin paylaşım yapabileceği bir portal. Özellikleri, forum (kişisel mesaj vs. de var), proje ekleyebilme, ders notu ekleyebilme, sınav soruları ekleyebilme ve bunların akabinde öğretmen, ders ekleyebilme. Forumda genel bilgi paylaşımı oluyor. Diğer ders notu, sınav ve projelerde ek dosya da gönderilebiliyor. Şekil açısından pek başarısız. Bir de gezegen ekledik ama sadece blog adreslerini listeliyor. O işi yapacak botu yazmadık. Veritabanı olarak da derste de anlatılan veritabanı olan PostgreSQL kullandık.

Bu proje bu şekilde.

2. Görsel Programlama Dersi Projesi - medyaindeksleme

Bu dersin projesinin amacı da java ile görsel programlamayı öğrendiğimizi uygulamak. (evet maalesef java)Dersin hocasının da tercih ettiği ve derste kullandığı eclipse'yi kullandık. Yaptığımız projede veritabanı da kullandık. Bu sefer MySQL kullandık. Projenin amacı medya indeksleme yapmak. Yani elinizdeki medyaları (cd, dvd vs.) bilgisayara teker teke takıp, listeden istediğiniz dosyayı seçip, medya numarası vererek veritabanına kaydediyorsunuz. Bu sayede de bir medyanın içerisinde ne olduğunu kolaylıkla takip edebiliyorsunuz, ya da aradığınız dosyanın hangi medyada olduğunu kolaylıkla bulabiliyorsunuz. Projenin özellikleri arasında yazdırma da var. Projeye [4] adresinden ulaşabilirsiniz.

Ve son olarak da

3. Çevik Yazılım Geliştirme Dersi Projesi - tist

Bu dersin projesi de aslında basit bir proje olacaktı, dvd kiralama programı gibi. Fakat bu ders seçmeli olduğu için ve bir şeyler öğrenelim diye aldığımız için ben derste çıkıp, hocam eğer bir proje yapacaksak daha düzgün bir şeyler öğrenebileceğimiz bir şeyler yapalım dedim ve öneri olarak da sürüm takip sistemi yapalım dedim. O da tamam siz yapın o zaman dedi. :) Ve bunun üzerine çalışmalara başladık.

Sürüm takip sistemi yapıyorduk. Java kullanmamız gerekiyordu (yine maalesef) ve çevik yazılım geliştirme pratiklerini kullanarak yazmalıydık. En basitinden test güdümlü geliştirme. Merkezi sürüm takip sistemi[5] yazmaya karar verdik. (SVN gibi) Ve dönem sonunda projemizi tamamladık. Şu an için, sunucu ve istemci için ayrı çalıştırılabilirler (jar dosyaları) var.

Sunucu ilk çalıştırıldığında hangi dizin üzerinde çalışılacağını soruyor ve bunu ayarlar.cfg dosyasına revizyon numarası (başlangıçta revizyon numarası 1 oluyor) ile birlikte kaydediyor. İleride de buradan çekip kullanıyor.

İstemci ise çalıştırıldığında verilen ip'yi (mesela "tist getir 192.168.1.5") bulunulan dizinde ".tist" adında bir dizin oluşturup onun içerisine sunucu.txt isminde bir dosyanın içerisine yazıyor.

Diğer kısımlar da şu şekilde çalışıyor, istemci sunucuya revizyon isteği gönderiyor (ya son ya da istediği revizyon) sunucu da ona göre gerekli diff dosyalarnı birleştirip yolluyor. Bu diff dosyalarını sunucudaki projenin ana dizinindeki "Deltas" dizini içerisindeki dosyaları birleştiriyor bunları geçici "Temp" dizinine koyduktan sonra sıkıştırıp istemciye yolluyor ve bu sıkıştırılmış dosyayı siliyor. İstemci, sunucuya yeni revizyonu yolladığı zaman (commit) bunları sıkıştırıp (Zipleyip) proje dizinindeki ".tist" dizininin içerisine atıyor. Sonra sunucuya yolluyor ve o sıkıştırılmış dosyayı siliyor. Sunucu bunu alıp "Temp" dizinine açıyor. Son revizyonu da "Head" dizinine "Deltas" dizinindeki diff dosyalarını birleştirerek koyuyor. Zaten "Head" dizininde son revizyon olduğu için (yollamadan önceki son revizyon) "Head" ile "Temp" dizinini karşılaştırıp gerekli diff dosyalarını en sonunda revizyon numarası olacak şekilde (x.txt.delta.r12 gibi) "Deltas" dizinine koyuyor.

Şimdilik bilinen sorunları, eğer bir dosyayı silersek ve silindikten sonraki revizyonu istersek, dosyayı boş olarak yolluyor. Bir de başlangıç işlemlerinde dizin isimlerinde "Slash"'ları düzgün vermek gerekiyor. Fazladan konulursa (hatta en sona da konulmaması gerekiyor) sorun yaratıyor.

Son projeye de [5] adresinden ulaşabilirsiniz. [5] adresine girdiğinizde projeamaclari.txt ve iterasyonlar.txt diye ayrı iki dosya daha göreceksiniz. Bunlarda ders ile ilgili raporlar diyebiliriz. "tist" dizini projenin tamamını içeriyor.

Bu proje için bir de ant dosyası oluşturduk(build.xml). Tabi bunları yapabilmek için Pardus'da "ant" paketinin kurulu olması gerekiyor. Bu dosyayı oluştururken yaşadığımız bir sorun vardı, gerekli kütüphaneleri bulamıyordu. Hata çıktısı da şu şekildeydi:

BUILD FAILED
/build/xml/yolu/build.xml:31: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "/opt/sun-jdk/jre"

Bunun için de build.xml'e sağ tıklıyoruz, (soldaki menüden) run as -> external tools configurations'a giriyoruz. Buradan solda eğer Ant Build'in altında bir şey yoksa Ant Build'e çift tıklıyoruz varsa ona tıklıyoruz. Üstteki sekmelerden Classpath'i seçiyoruz. Burada herhangi bir yere sol tıkladıktan sonra (mesela User Entries) add external JARs'a tıklıyoruz. Buradan /opt/sun-jdk/lib/tools.jar'ı ekliyoruz. Eğer başka ayrı kütüphaneler kullandıysanız (mesela biz junit kullandık) bunu da eklemeniz gerekiyor. Bunun için de tekrar add external JARs'a tıklayıp /usr/share/java/junit.jar'ı ekliyoruz. Ve tekrar ant build işlemini başlatıyoruz. Ve tamamlanıyor.

Özet olarak projelerimiz bu şekilde. Her türlü yorum/öneri/eleştirilere açığız. Gördüğünüz sorunları [1] adresine issue girebilirsiniz.

Hiç yorum yok: