programlama

Spring'in Babası Rod Johnson VMWare'den Ayrıldı

Konu:

Java platformunda meşhur ve önemli bir yere sahip olan Spring Framework'ün babası Rod Johnson, Spring Source'un sahibi olan VMware firmasından ayrıldığını açıkladı. Veda yazısı da Spring Source'da: http://blog.springsource.org/2012/07/03/oh-the-places-youll-go/

ExtJS Paging (Sayfalama)

Paging (Sayfalama) Nedir?

Bir grid'e çok fazla kayıt geldiğinde hem bağlantı hem browser açısından performans düşüklüğü oluşabilir. Sunucu tarafında da performansı arttırmak gereksinimi ortaya çıkabilir. Bu yüzden browser üzerinde sayfalama yaparak alınan veri sayısı kısıtlanır. Örneğin 1000 kayıt gelmesi yerine her sayfada 100 kayıt gelecek şekilde bir yapı oluşturulur ve bu şekilde 10 sayfa gerektikçe ajax istekleriyle doldurulur. Buna ExtJS'de paging yani sayfalama denir.

Yapılacaklar

Bunun için ihtiyacımız olan şeyler;

  1. Grid'e ait store'un autoloadfalse olmalı, daha sonra biz load fonksiyonuyla dolduracağız.
  2. Ext.PagingToolbar nesnesi oluşturulur.
  3. Oluşturulan paging nesnesi Grid'in bbar özelliğine eklenir.
  4. load fonksiyonlarımıza start ve limit değerleri verilir.
  5. store'a totalProperty vermemiz gerekiyor
  6. baseParams özelliğini vermemiz gerekiyor ki her ajax sorgusunda bu bilgiler ayrıca verilmeye gerek kalmadan gitsin
  7. Sunucudan gelecek cevabı ayarlayalım.

Parmaklar Çalışsın

  1. Store'umuzu oluşturalım. Örnek olarak bir JsonStore kullandım. Değerlerin geleceği adres de myAjaxUrl.ajax olsun. JSON biçiminde gelecek sunucu cevabı (response) içinde bir kayıtları barındıran bir liste (json array) olacak. Bu listenin adı 'list' olsun. myRecord adında da bir fieldlerimizi saklayan bir Record olsun. Store otomatik ajax isteği yapıp dolmasın diye autoload: false değerini verelim.
  2. var myRecord = new Ext.data.Record.create([
    	{name:'tip',type:'int'},
    	{name:'sehir',type:'string'},
    	{name:'adres',type:'string'}
    ]);
    
    var myStore = new Ext.data.JsonStore({ 
    	url: 				"myAjaxUrl.ajax",
    	root: 				'list',
    	fields: 			myRecord,
    	autoload: 			false
    });
  3. PagingToolbar nesnesini oluşturalım.
  4. var myPaging = new Ext.PagingToolbar({
    	pageSize:	100,
    	width:		600,
    	store:		myStore,
    	displayInfo: 	true,        
    	displayMsg: 	'Toplam Kayıt: {2}, (Gösterilen:{0}-{1})',
    	emptyMsg: 	"Görüntülenecek kayıt yok."
    });
  5. PagingToolbar'ı grid'e eklemek için grid'in bbar özelliğine atıyoruz.
  6. bbar:	myPaging
  7. start değeri başlangıç kayıt numarası, limit değeri ise her sayfada gelecek kayıt sayısıdır
  8. myStore.load({params:{start:0, limit:100}});

  9. Store'a totalProperty değerini verelim. totalCount yerine farklı bir değer de verilebilir, önemli olan sunucudan gönderdiğimiz anahtar kelime
  10. totalProperty: 'totalCount'

  11. Store'a baseParams değerini atayalım.
  12. myStore.baseParams = {
    	sehir: 'Ankara',
    	tip: 1
    };
  13. Bundan sonra sunucudan gelecek değer yazdıklarımızla uyumlu olmalı. Sunucuda kullandığınız teknolojiye göre bunu kendimiz programlayacağız. Ext tarafında önemli olan gelecek cevabın uygun olması. Öncelikle json formatlı bir dizi (array) bekliyoruz. myStore'da root olarak verdiğimiz değer bu dizinin 'key'i olacak. Yani bir obje olacak, içinde de bir dizi olacak, örneğimizde bu key 'list'. Buna göre beklediğimiz değer şunun gibi:
  14. {list:[obje1,obje2,obje3,...]}

    Bunun yanında totalProperty değeri de root değerinin yanında bir obje olarak gelmeli. Örneğimizde 'totalCount' olarak verdiğimize göre şöyle olmalı;

    {list:[obje1,obje2,obje3,...],totalCount:500}

    Yani 'list' adlı dizideki objeler sayfada görünecek, diğerleri Ext tarafına aktarılmayacak. Toplamda da (örneğimize göre) 500 adet listelenecek obje var, buna göre sadece params olarak gönderdiğimiz parametrelerden 'limit' değeri kadar (örneğimize göre 100 adet) sayfada görünecek. hangi sayfada olduğumuz bilgisini ise Ext, sunucu tarafından aldığı bilgiye göre gösterecek.

Demo şu an mevcut değil. İş yoğunluğundan vakit bulabilirsem demoyu da hazırlamayı düşünüyorum.

Ubuntu'ya MongoDB Sunucusu (Server) Kurmak

Yaş 30'a dayandı ve hâlâ Linux'ten pek haberdar değilim. Ama öğrenmenin yaşı yok deyip Ubuntu sunucuma Mongo DB kurmak istedim. Bir sudo apt-get install işi çözmedi. Sonrasında MongoDB sitesinden aldığım bilgileri aktarıyorum;

GPG diye imza gibi bir şey var. MongoDB'nin yükleneceği site için doğrulama kodu diyelim. Önce bunu makinamıza veriyoruz:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

Sonrasında /etc/apt/sources.list dosyasına MongoDB paketlerini nereden alacağı bilgisini eklememiz gerekiyor. Ubuntu'da bu dosyayı kurcalamak için yetkileriniz olması gerektiğini hatırlatayım. O yüzden açarken ya da düzenlerken sudo diyoruz, sonrasında dosyaya şu satırları dosyaya ekliyoruz:

deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen

Bu noktada kurulumumuz için gerekli paketlerin hepsinin tamam olduğundan emin olmak için bir güncelleme (update) yapıyoruz;

sudo apt-get update

Ardından da MongoDB kurulumunu gerçekleştiriyoruz;

sudo apt-get install mongodb-10gen

Bundan sonra ayarlarıyla oynamak için /etc/mongodb.conf dosyasını kurcalayabiliriz.

Kurulum sonrası MongoDB sunucusunu kendiliğinden başlıyor. Bir MongoDB komut satırı (shell) açıp denemek için mongo komutunu kullanabiliriz.

> db.foo.save( {sitem : 'http://hosaf.org'} )
> db.foo.find()

Maven Projelerinde JSON-lib Dependency Hatası

Kısaca çözümü özetlemek gerekirse;
pom.xml içinde json-lib dependency satırına classifier etiketini eklemek gerekiyor:

<classifier>jdk15</classifier>

Uzun uzun anlatmak gerekirse;
Heyecanla bir Maven projesi yaptınız ve JSON kullanacağınız için pom.xml'e JSON-lib'i dependency olara eklediniz. Sonuç hüsran oldu. Maven bir türlü bu dependency'yi çözemediğini söyledi. Sinirlenmeye başladınız, çünkü her şey yolunda. Bağlantıda bir sorun yok. Proxy kullanmıyorsunuz ya da ayarları doğru yaptığınızdan eminsiniz. Daha da ötesi diğer dependency'ler sorunsuz yüklenirken bunda neden hata çıkıyor anlayamadınız. Google'dan çıkan sonuçlar kısaca başka şeylerden bahsetti. Sonunda soruna çözüm sunan bir yer buldunuz:

Meğer classifier etiketini de vermek gerekiyormuş. pom.xml'i açıp classifier olarak jdk15 değerini veriyorsunuz:

	<dependency>
		<groupId>net.sf.json-lib</groupId>
		<artifactId>json-lib</artifactId>
		<version>2.4</version>
		<classifier>jdk15</classifier>
	</dependency>

Sorun çözülüyor.

SQL JOIN

Regex gibi ne kadar öğrenirsek öğrenelim bir gün unutabileceğimiz, karıştırabileceğimiz SQL JOIN'leri. Eray Alakese paylaşmış, ondan alıntı yaptım.

Kaynak: http://erayalakese.com/artik-joinleri-karistirmazsiniz/

Sayfalar

Subscribe to RSS - programlama