Rich:dataTable’da satırları sıralama

RichFaces kullanıyorsunuz. rich:dataTable’ınız var ve tabloya basılacak verileri bir kurala göre sılamak istiyorsunuz.

Bunun için dataTable altına eklediğimiz kolona:

<r:column sortBy=”#{trxList.txnDateTime}” sortOrder=”DESCENDING”>

….

</r:column>

 

sortBy : sıralamayı neye göre yapacaksınız.

sortOrder : azalan artan sıralama.


30 Temmuz 2012

Posted In: Gezegen, java, linux

Linux Yaz Kampı ’12

LKD ve INETD’nin ortaklaşa düzenlediği Abant İzzet Baysal Üniversitesi’nin ev sahipliğini yaptığı 3. Linux Yaz Kampı 22 Haziran – 7 Temmuz tarihleri arasında gerçekleşti. Yaklaşık 180 öğrenci ve 30 eğitmenin katıldığı etkinlikte Linux Sistem Yönetimi, Linux Masaüstü, Java EE5 ve PHP kursları verildi. Biz, üstad Hakan Uygun ve Umuthan Uyan ile birlikte Java eğitimi verdik.

Böyle resmi bir girişten biraz Java eğitiminden bahsedeceğim. Java eğitimine yaklaşık 55 kişi katıldı. İlk 4 gün temel Java ve Web teknolojileri ile ilgili teorik eğitim verdik. Kurumsal bir projeyi gerçekleştirmek için gereken diğer proje araçlarından da bahsettikten sonra bismillah diyerek Tekir Genel Muhasebe programının yazılmasına giriştik. Sınıfı 5 gruba ayırdıktan sonra işleri homojen bir şekilde dağıttık. Kampın kalan günlerinde gruplar verilen işleri bitirmeye çalıştılar. Ellerinden gelenin en iyisini verdiklerini düşünüyorum. Beklentilerimizin de üstünde bir iş çıktı. Buradan herkese teşekkür etmek istiyorum.

Linux Sistem Yönetimi eğitimi için ilk gün, sınıfların homojen olarak dağılması için, bir seviye belirleme sınavı yapıldı. “Sınıflar” diyorum çünkü LSY kursuna katılım oldukça fazlaydı ve 1. düzey 3 farklı sınıfta gerçekleştirildi. LSY 2. düzey sınıfı bir taneydi. Keza PHP ve Masaüstü eğitimlerimiz için de birer sınıf oluşturuldu. Türkiye’nin farklı yerlerinden gelen eğitmenlerimizin desteği ile 2 hafta boyunca Özgür Yazılım adına çok güzel işler başardığımızı düşünüyorum. Bu paragrafın sonunda da eğitmen arkadaşlarıma teşekkür etmek istiyorum. Sağ olun var olun:)

Eğitimlerimiz böyleydi. Peki ya Bolu güzel miydi? Üniversite sizi iyi ağırladı mı? Yemekler, kalacak yerler iyi miydi?

Tüm bu soruların cevabı bence EVET ‘ti. Bir kaç aksilik ve ufak tefek sorun dışında harika 2 hafta geçirdim Bolu’da. AİBU’nun sosyal tesislerinde kaldık. Herhangi bir 3+ yıldızlı otelden farkı yoktu. Çok rahattı.

Yemekler için ayrı paragraf açmak istiyorum. Keza 2 haftada 2 aylık yemek yedik. Pişman mıyım? Asla. Şimdi bir daha olsa yine yaparım. Yapacağım da:) Yaşasın yemek yemek. Kampın ilk haftası sevgili Devrim Gündüz ve Erdem Bayer hocalarımızın arabaları vardı. 2 araba ve 11 kişi. Her gün öğle ve akşam yemeklerinde Bolu’nun çeşitli yerlerine yemeğe gittik. Özellikle Sanayi Sitesinde Alan Kardeşler Günaydın Restoran 10 numaraydı. Yemeklerin tadı hala damağımda. Bolu’ya yolunuz düşerse gidin. Hatta bilerek yolunuzu değiştirin ve gidin orada yemek yiyin:)) O derece. Erdem hoca az çilemizi çekmedi yemek yollarında.Buradan hem teşekkür ediyorum hemde özür diliyorum:))

Yazının sonuna bir kaç fotoğraf ekliyorum. Yazının dışında size birşeyler anlatması için. Haydi kalın sağlıcakla.

kamp1 kamp2 kamp5 kamp4

 

Kamp ile ilgili diğer bütün resimleri görmek için buraya gidebilirsiniz


9 Temmuz 2012

Posted In: Gezegen, java, linux

Jasper Raporlarını Ant ile Nasıl Derlerim?

Bir dizinde bulunan .jrxml uzantılı raporlarımızı ant ile derlemek için build.xml dosyasına aşşağıdaki betik yazılabilir.

<taskdef name=”jrc” classname=”net.sf.jasperreports.ant.JRAntCompileTask”>
<classpath refid=”build.classpath”/>
</taskdef>

<target name=”buildjasper”>
<mkdir dir=”./build/reports”/>
<jrc
srcdir=”${basedir}/jasper”
destdir=”${dist.dir}/reports”
tempdir=”${dist.dir}/temp”
keepjava=”true”
xmlvalidation=”true”>
<classpath refid=”build.classpath”/>
<include name=”**/*.jrxml”/>
</jrc>
</target>

Burada  taskdef  tag’i içine jasper raporlarının derlenmesi için gerekli olan java kütüphanesinin adı ve class path’i yazılır.

srcdir : Adından da anlaşılacağı gibi kaynak dizinimizdir. Yani .jrxml uzantılı raporlarımızın bulunduğu dizin.

destdir: Derlemeden sonra oluşacak .jasper uzantılı raporlarımızın gideceği dizin.

tempdir: Derlemeden sonra oluşacak diğer dosyaların kopyalanacağı dizin.

Daha sonradan build.xml ‘in olduğu dizinde bir konsol açıp “ant buildjasper” (*) komutunu yazarak raporlarınızı derleyebilirsiniz.

* buildjasper : ant betiğinde ki target name’i.


1 Şubat 2012

Posted In: Gezegen, java, linux

.svn Dosyalarını Silin Gitsin!

Svn de duran bir proje dizininden ve onun alt dizinlerinden .svn dizinlerini silmek isterseniz yada buna ihtiyaç duyarsanız bir kaç değişik komutla bunu halledebilirsiniz.

  1. $ rm -rf `find . -type d -name .svn`
  2. $ find . -name “.svn” -exec rm -rf {} \;
  3. $ find . -name .svn -print0 | xargs -0 rm -rf
  4. $ find . -type d -name ‘.svn’ -print0 | xargs -0 rm -rdf

Buyrunuz efendim.

Kaynak: http://anilozbek.blogspot.com/


31 Ocak 2012

Posted In: Gezegen, java, linux

Joiner sınıfı ile textleri birbirine bağlayın

Joiner sınfı, istediğiniz ayraçlar ile stringleri birbirine bağlamanızı sağlar.
Örneğin elinizde bir collection var ve bu collectionın elemanlarını aralara virgül koyarak bir text haline getirmek istiyorsunuz.

Joiner.on(“, “).appendTo(aStringBuilderObject, aCollection);

Burada StringBuilder objenize Collection elemanlarını araya virgül koyarak append ediyorsunuz.

Ben collection kullanmayacağım, bağlamak istediğim textleri kendim yazacağım derseniz de aşşağıdaki örneği uygulayabilirsiniz.

[1]
Joiner joiner = Joiner.on(“; “).skipNulls();
return joiner.join(“Harry”, null, “Ron”, “Hermione”);

Bu size “Harry; Ron; Hermione” stringini return eder. Input elemanları join olmadan önce String objesine convert edilirler.
skipNulls() methodu input elemanlarından herhangi biri null ise NPE yemenizi engeller.

Son olarak Joiner sınıfı nedir nerededir sorusuna yanıt vereyim.

Google Collections kütüphanesinde com.google.common.base.Joiner paketinde bulunur.

Haydi kolay gelsin.

refs
[1] http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/base/Joiner.html


3 Kasım 2011

Posted In: Gezegen, java

Eclipse’de @author adını değiştirmek

Eclipse’de yeni bir class oluştururken ‘generate comments’ seçeneğini işaretlerseniz yada alt+shift+j kısayolu ile javadoc üretirseniz sınıfın başında;

/**
*
*@author deniz
*/

şeklinde comment üretilir.

Eclipse default olarak @author ismi için bilgisayar kullanıcı adınızı kullanır. Bunu değiştirmek için Eclipse dizini içindeki ‘eclipse.ini’ dosyasını açın ve -vmargs satırından sonra,

-Duser.name=”A. Deniz Korkmaz”

yazın. Eclipse’i yeniden başlattığınızda @author adı değişecektir.


2 Kasım 2011

Posted In: Gezegen, java

Nasıl Sıralama Analizi Yapılmaz

Veri Yapıları ve Algoritmalar (COMP231) dersinin bu haftaki projesinde sıralama algoritmalarının implementasyonu ve analizi yapılması istendi. Proje Quick sort ile beraber ders kitabı olarak kullandığımız Cormen’in Introduction to Algorithms kitabındaki Merge sort algoritmasının yazımını bize bırakmış ve Insertion sort ile beraber birtakım yardımcı fonksiyonları hazır olarak vermişti.

Güzel bir pazar günü başlangıcında quick sort’u yazıp diğer kısımlarını akşama bırakmış idim. Sanırım eğlence akşam vaktini bu işe ayırmamla başladı. Gece 10.30 – 3.30 arası Cormen’in Merge sort algoritmasını yazmakla,  toplamda 4 tane algoritmanın analizini yapıp anlamlı veri elde eden programcığı yazmakla ve gnuplot öğrenmekle geçti. Sonunda gnuplot ile sonucu elde ettim ancak twitter’da bahsettiğim üzere bir problem vardı. Gecenin o vaktinde artık ekrana bakacak halim kalmadığı ve proje teslimine 5 saat kaldığı için projenin o hali ile gönderip sabah labda bakmaya karar verdim.

Sabah problemi reb’e söylemem ile beraber durumun hocaların bulunduğu e-posta listesine atılması bir oldu :) Şimdi bulduğum sonucu ve olması gereken sonucu yan yana koyalım.

İlk analizde görüyoruz ki harika bir gariplikte O(n^2) çalışması gereken insertion sort O(n) çalışmakta. Normalde O(n . lgn) çalışması gereken merge sort neredeyse O(n^2) çalışıyor gibi görünüyor.

Tabi ki hata bu veriyi üreten kodda meydana geliyor. Sıralama algoritmalarının çalışmasında herhangi bir sıkıntı mevcut değil. Sakin kafa ile düşününce anlıyoruz ki durum tamamiyle mutation, yani bir dizinin (array) ortak kullanımından kaynaklanıyor. Alınan kahve oranı ve gecenin ilerleyen saatleri ile yazılan kod kalitesi arasında bir ilişki olabileceğini düşünürsek ilk veriyi üreten kodun kirli bir biçimde yazıldığına şaşırmamak gerek. Kod tek bir liste alıp o liste üzerinde tek tek sıralama algoritmalarını çalıştırıyor. Yani ilk sıralamadan sonra elimizde sıralı bir liste oluyor ve devamındaki 3 algoritma sıralı liste üzerinde sonuç veriyor. Durum böyle olunca, insertion sort çalışması gereken bir biçimde sıralı liste üzerinde O(n) zamanda çalışıyor. Merge sort sıralanmamış liste üzreinde ilk olarak çalıştırıldığı için onun dışındaki diğer algoritmalar da aynı şekilde sıralı listeler üzerinde sonuç veriyor.

Sabah veri üreten programığı düzgün bir biçimde yazdıktan sonra doğru olan yukarıdaki sonuçları elde ettim. Sağda görüldüğü üzere insertion sort O(n^2) zamanda çalışıyor ve diğer algoritmalar yok denecek kadar az bir sürede işlemi tamamlıyor. Soldaki grafikte ise kalan algoritmaların analizi mevcut. Görüldüğü gibi 25.000.000 elemanlı listeye kadar analizi mevcut ki bu kadar büyük bir rakamda insertion sort’u beklemek çok uzun süreceği için çıkarmak zorunda kaldım.

Yanlış veriyi üreten programcığı buradan görebilirsiniz. Farkedeceğiniz üzere getAnalysis metodu tek bir liste üzerinde işlem yapmakta. Düzgün ve temiz haline ise buradan ulaşılabilir. getAnalysis artık bir metod ve liste alarak, önce listeyi kopyalıyor, ardından da zamanı döndürüyor. Bu işlemi 4 algoritma için tekrarlayıp zamanlarını aldıktan sonra dosyaya yazdırıyorum.

Ne öğrendim? 

Temel olarak yorgunken bir problemin içinden çıkılamadığında dinlenilmesi gerektiğini öğrendim. İşin teknik kısmında ise mutation konusunda dikkatli olunması gerektiğini, sıralama algoritmalarının nasıl davrandığını düzgün bir biçimde aklımda yazdım. Tabi sonucunda bölüm içerisinde eğlence konusu olmam ve “Eren The Sorter” olarak adlandırılmamın kaçışı olmadı :)

Not: Grafikleri geç bir saatte oluşturduğum için yazım yanlışı yaptım. Grafiklerin sadece başlığının düzeltilmiş hali ile uğraşacak ve görselleri tekrar yükleyecek gücü bulamadığım için grafikleri okurken comprasion kelimesini comparison şeklinde okumanızı rica ediyorum efem.

25 Ekim 2011

Posted In: gnuplot, insertion sort, java, Linux Gezegeni, merge sort, mutation, Oi-gezegeni, Pardus-gezegeni, quick sort

Eclipse Helios Yeniliklerle Dolu.

Eclipse bildiğimiz gibi en çok kullanılan yazılım geliştirme IDE’lerinden bir tanesi. Dünya üzerinde milyonlarca insan tarafından kullanılıyor. Ve yüzlerce geliştirici tarafından devamlı geliştiriliyor, açık kaynak olması nedeni ile herkes bu IDE’ye katkıda bulunabiliyor. IDE Windows, Linux ve MAC üzerinde çalışabiliyor. Eclipse sadece kişisel değil, kurumsal alanda da en çok kullanılan yazılım geliştirme araçlarından biri. Esnek […]

23 Haziran 2010

Posted In: eclipse, EMF, git, Helios, IDE, java, linux, MarketPlace, RAP, Riena, Xtext

JAX-WS ile WsGen kullanmadan web servisi oluşturma

Yakın zamanda farkettiğim bu özellik basit web servislerinin oluşturulmasını ve test edilmesini oldukça kolaylaştırıyor. Araştırdığımda çok daha eskiden beri JAX-WS sürümlerinde var olduğunu öğrendiğim bu özelliği şans eseri 1.6u14 sürümüne girdikten sonra fark ettim. Bu şekilde artık @WebService ile işaretlediğimiz sınıfları Endpoint.publish() ile direk sunabilmekteyiz. Örnek olarak aşağıdaki kodu direkt çalıştırdığımda ws erişilebilir ve kullanılabilir hale gelmekte. Ayrıca çalıştırılırken gerekli sınıfların çalışma anında oluşturulduğuna dair log mesajları oluşturmakta.

package service;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class Hello {

	@WebMethod
	public String hello() { return "Hello"; }

	public static void main(String[] args) {
		Endpoint.publish("http://localhost:8080/hello", new Hello());
	}

}

Referanslar


Yayınlandı gezegen, java, yazılım

10 Haziran 2009

Posted In: Gezegen, java, yazılım

@Override annotation ve Java5 ile Java6 arasındaki farkı

Java5 ile gelen annatationlardan biri olan @Override bir metodun eskisini geçersiz kıldığını (override) ifade eder. Ancak Gentoo’da bir hata nedeniyle farkettiğim üzereanlamı Java5 ile Java6 arasında farklılık göstermektedir. Java6’dageçersiz kılınan ve gerçekleştirilen metodlar için @Override kullanılabilirken Java5’te sadece ilk kullanımı geçerlidir. Bu bir hata olarak Sun hata kayıt sistemine defalarca raporlanmıştır. (Benzer ve çift hata kayıtlarından anlaşıldığı üzere) Benim hataların yorumlarından anladığım amacın Java5 için de her iki durumu desteklemek olduğu ancak derleyicideki hata sebebiyle Java5 spesifikasyonunun revize edilerek sadece ilk kullanımın desteklendiği ve Java6’da her iki kullanımım geçerli sayıldığı yönünde. Bunun sebebi ise hatalı da olsa Java5 için uyumluluğu korumak.

Şimdi bu durumu bir örnek üzerinden inceleyelim.

interface Interface {
	public abstract void b();
}

abstract class Base {
	public abstract void a();
}

public class Sub extends Base implements Interface {

	@Override
	public void a() {
	}

	@Override
	public void b() {
	}

}

Bu kod Java6 ile gelen derleyici ile derlenmekte ancak Java5’teikinci @Override için şu hatayı vermektedir.

Sub.java:15: method does not override a method from its superclass
	@Override

İşin ilginç yanı Java6 derleyicisi ile -source 1.5 -target 1.5 parametreleri verildiğinde de hata vermemekte 1.5 ile olan uyumsuzluğu ancak ecj (Eclipse Java derleyicisi) yakalayabilmektedir. Bu sebepten ötürü arayüz metodları gerçekleştirilirken @Override kullanılmaması başka amaçla illa Java6 gerekmiyorsa kodun uyumluluğunu arttıracaktır.


Yayınlandı gentoo, gezegen, java

7 Mayıs 2009

Posted In: gentoo, Gezegen, java

WP Twitter Auto Publish Powered By : XYZScripts.com