27 Haziran 2014 Cuma

WEB TABANLI DOKÜMAN YÖNETİM SİSTEMİ

Karabük Üniversitesi'nde yapılan ISITES 2014 bilimsel etkinliğinde sunumunu yaptığım "WEB TABANLI DOKÜMAN YÖNETİM SİSTEMİ" başlıklı bildiri yayınlandı.

Java HashMap Sınıfı



Kurumsal yazılım uygulamalarında model yapısı genellikle kullanılan bir yapıdır. MVC yapısından birini temsil eder. Ancak yazılım geliştiricilerin çoğu model yapısını geliştirme kısmında kodlamasını yaparlar. Bu şekilde tanımlanan modeller kısmen statik bir yapıdadır. Çünkü kodlanmış bir model yapısı sabittir. Model ile ilgili yeni bir ihtiyaç olması halinde kod kısmında model için değişiklik yapılması gerekmektedir. Bu açıdan bakıldığında kodlanan modeller yazılım esnekliğini azaltan bir durum olarak görülebilir. Çözüm olarak dinamik model yapısı düşünülebilir. Dinamik model yapısı için en uygun kütüphanelerden biri Java HashMap kütüphanesi olabilir.  HashMap sınıfı Map üst sınıfından türemiştir. Map ara yüzü anahtar-değer ikililerini bir arada tutmak için tasarlanmıştır. Matematikteki fonksiyonların yazılım tarafında karşılığı olan Map veri yapıları yazılım mimarisinde sıkça kullanılır. Örneğin yazılımımızda bulunan nesnelere birer kimlik numarası vererek bu numara ile nesne arasında anahtar-değer ilişkisi kurabiliriz. Böylelikle istediğimiz nesneye kimlik numarası aracılığıyla rahatlıkla erişebiliriz. Java Map ara yüzü herhangi bir sıralama kısıtı getirmez. Map’e eklenen anahtar-değer ikililerinin eklendiği sırada kalacağı garanti değildir. HashMap verilen anahtardan hash fonksiyonu yardımıyla bir dizi indeksi oluşturur. Verilen değer de bu dizi indeksindeki belleğe yerleştirilir. Hash fonksiyonları çok temel matematiksel işlemler kullandıklarından hızlıdırlar. Dolayısıyla HashMap’de verilere erişim sabit zamanda olur. HashMap performansı için önemli olan iki parametre ilk kapasite ve yük faktörüdür. Varsayılan olarak ilk kapasite 11′dir. Yük faktörü HashMap koleksiyonumuzun herhangi bir anda maksimum doluluk oranını ölçer. Bu değer varsayılan olarak %75 dir. HashMap’de doluluk oranı bu değerin üzerine çıktığında kapasite artırımına gidilerek değerler tekrar hash’lenir. HashMap bu özelliği dikkate alındığında MVC yapılarından olan model için esnek bir şekilde kullanılabilir.  Model olarak kullanıldığında HashMap sınıfı yeni eklenen özelliği otomatik olarak oluşturulur. Böylece sürekli olarak kod kısmında değişiklik yapılmasına gerek kalmayacaktır. Veri tabanında tabloya yeni bir kolon eklendiğinde ve bu tablodan HashMap sınıfı ile veri alındığında kod kısmında değişiklik yapılmadan veriler güncel olarak gelecektir. Belli dezavantajları bulunmaktadır. Dezavantajlardan biri şudur; Bir HashMap sınıfı veri yüklendiğinde kendi içerindeki özellikler sıralı değildir. Zaten bu model yapılarında çok aranan bir durum olarak da ele alınmadığından bir eksiklik olarak da görülmeyebilir. Diğer dezavantajı web servislerinde model olarak kullanımı tercih edilmeyebilir. Çünkü web servislerinde kodlanan model yapıları başka programlama dili kullanan bir yazılımda kullanıldığında karşılığı oluşması gerekir. Web servislerinde model yapısı olarak HashMap kullanılırsa Java programlama dili dışında diğer programlama dillerinde karşılığı olan bir model oluşması gerekir.  Diğer programlama dillerinde bunun garantisi olmadığından dolayı tercih edilmeyebilir. 

24 Mayıs 2014 Cumartesi

Oracle listagg kullanımı

Mahmut hocanın ders listesini virgülle yan yana getirelim.

Tablo
--------------------------------------------------------------
HOCA         DERS
--------------------------------------------
Merve           Matematik
Mustafa         Fizik
Aynur            Kimya
Mete             Biyoloji
Merve           Geometri

Sql
---------------------------------------------
select
HOCA,
listagg
(DERS, ',')
WITHIN GROUP
(ORDER BY DERS) as DERSLER
FROM Tablo
GROUP BY HOCA

Sonuç
-----------------------------
Merve                 Matematik, Geometri
Mustafa               Fizik
Mete                   Biyoloji
Aynur                  Kimya




Zk Framework ile istemci tarayıcı türünü ve işletim sistemini anlamak

Web erişimlerinde http isteklerinin mobil veya bilgisayardan geldiğini anlamak
için aşağıdaki kod parçasını Zk Framework için java sınıfında kullanılabilir.
String str=Executions.getCurrent().getHeader("User-Agent");
if(str.indexOf("Windows")>0){
   System.out.println("Windows");
}else if(str.indexOf("iPad")>0){
   System.out.println("iPad");
}else if(str.indexOf("iPhone")>0){
   System.out.println("iPhone");
}

1 Ocak 2014 Çarşamba

Sql ile çift kayıtları silme

Bir tabloda bir kolona göre tekrarlanmış veriler olabilir. Sadece bir kayıt kalmasını isteyebiliriz.

Örnek Oracle sql :

Bir tabloda bir kayda ait tarihine göre en yeni kaydın kalmasını istiyorsak


delete
from tablo
WHERE rowid not in
(SELECT max(rowid)
FROM tablo
GROUP BY kayitId);


en eski kaydın kalmasını istiyorsak

delete
from tablo
WHERE rowid not in
(SELECT min(rowid)
FROM tablo
GROUP BY kayitId);

şeklinde çalıştırabiliriz.