Archive for the ‘yazılım geliştirme’ Category

maven ile jsp precompile işlemi

Wednesday, February 16th, 2011

Projeyi maven ile derlediğimizde jsp’lerin de compile edilmesini istiyorsanız kullanabileceğiniz bir maven plugin’i mevcut. Ben her ne kadar henüz başaramasam da ilgili blog yazısına buradan ulaşabilirsiniz.

Haydi Java compiler’ı kitleyelim!

Wednesday, February 9th, 2011

Bugün öğrendiğim birşeyi paylaşmak istiyorum, aşağıdaki java kodunu derlemeye çalıştığınız zaman derleyici kitleniyor ve sonsuz döngüye giriyor, aman allahım nasıl bir bug bu :)

class compilehang {
public static void main(String[] args) {
double d = 2.2250738585072012e-308;
System.out.println("Value: " + d);
}
}

İşin komiği, aynı problem PHP’de de varmış ama fix edilmiş. .NET ise hayret ettirdi, böyle bir sorun yok :)

Detaylara burdan ulaşabilirsiniz :)

Rabbitmq ayarları

Thursday, January 27th, 2011

Spring projesi ile beraber queue olarak kullanmak üzere geçtiğimiz günlerde Rabbitmq kullandım. Erlang dili ile yazılmış bu uygulama Activemq ile beraber en popüler queue uygulaması olarak görünüyor.

Rabbitmq’yu paket olarak centos ya da debian tabanlı sistemlerde kurmak oldukça kolay, bu kısmı geçiyorum. Ayar kısmına geleceğim.

Rabbitmq’yu kurduktan sonra host ve kullanıcı ayarlarını yapmak gerekiyor. Ayarları komut satırından rabbitmqctl komutu ile yapıyoruz. Şöyle bir listemiz olacak:

1. Önce bir vhost eklememiz gerekiyor:
rabbitmqctl add_vhost 192.168.1.1

2. Bir kullanıcı ekleyelim:
rabbitmqctl add_user myuser mypass

3. Gerekli mi bilmiyorum ama admin olacaksa:
rabbitmqctl set_admin myuser

4. Bir de buna yetki vermek gerekiyor, alayını yapsın yetkisi:
rabbitmqctl set_permissions -p 192.168.1.1 myuser “.*” “.*” “.*”

Bundan sonra queue’muz kullanmaya hazır.

Rabbitmq her ne kadar populer olsa da gerek konfigürasyon karışıklığı gerekse Spring ile olan entegrasyonu açısından bence çok iyi değil. Özellikle Spring entegrasyonu gerçekten çok çakma olmuş. Kodları silmeseydim burada paylaşırdım ama bulamadım :)

java ile top level domaini bulmak

Thursday, December 2nd, 2010

Geçtiğimiz günlerde bir url içinden top level domaini bulmak gerektiğinde googling yaptım fakat pek sonuç çıkmadı. İş başa düştü fakat reqular expression’ı oldum olası anlamıyorum. Bu yüzden gerektiği zaman konudan anlayan bir arkadaşımdan yardım alıyorum. Sağolsun beni kırmayıp uğraştılar ve aşağıdaki metod ortaya çıktı. Tüm Java geliştiricilerine armağan olsun:


public String getTopLevelDomain(String address) throws MalformedURLException
{
if (!address.startsWith("http")) {
address = "http://" + address;
}
URL url = new URL(address);
Pattern p = Pattern.compile("([a-z0-9\\-]+)\\.([a-z0-9]{2,3})((\\.[a-z0-9]{2})|$)");
Matcher match = p.matcher(url.getHost());
if( match.find() ){
return match.group(0);
}
return url.getHost();
}

varnish ile web isteklerinde cache kullanımı

Wednesday, November 3rd, 2010

Bu sabah daha önceden duyduğum varnish cache’i inceleme ihtiyacı ile uyandım. Nerden ne alaka ben de bilmiyorum ama ilk işim bunu incelemek oldu.

Varnish web sitenizi hızlandırmak için kullanabileceğiniz açık kaynaklı, endüstri standartlarına uygun ve çok az kaynak harcayan anahtar bir yazılımdır. Varnish ile web sitenize gelen istekler cache’lenerek aynı istekler için tekrar tekrar veritabanına gidilmez, bu sayede web siteniz hızlanır.

Temel konfigürasyonu çok kolay, ben ubuntu üzerinde test ettim yani paket olarak kurdum. Kurulumu yaptıktan sonra /etc/varnish/default.vcl içerisinden aşağıdaki ayarı yaptım:

backend default {
.host = “127.0.0.1″;
.port = “80″;
}

Bu ayar ile varnish 80. portu dinliyor oluyor. Yani apache portunu. Daha sonra aşağıdaki komut satırı ile başlattım:

varnishd -f /etc/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000 -a 0.0.0.0:8080

-f /etc/varnish/default.vcl parametresi ile ayar dosyasının adresini,
-s malloc,1G ile cache’i 1G’lık hafıza olarak kullanmasını (disk vs de oluyor tabiki)
-T 127.0.0.1:2000 parametresi ile text tabanlı yönetim ekranının portunu (bu portun dışardan erişilemez bir port olması güvenlik açısından önemli),
-a 0.0.0.0:8080 parametresi ile çalışacağı ip ve portu belirtmiş oldum.

Bundan sonra apache tarafında şöyle basit bir php yazdım:


$t1 = time();
sleep(3);
$t2 = time();
echo 'elapsed ' . ($t2-$t1) . ' second(s)';

Bu kod 3 sn bekliyor. Bu kodu http://localhost:80/cache/test.php üzerinden çalıştırdığım zaman 3 sn bekliyor. Tekrar çağırdığım zaman gene 3 sn bekliyor. Bunu kodunuzun veritabanına bağlandığını, query’ler vs çalıştırdığı şeklinde düşünebilirsiniz.

Aynı kaynağa varnish üzerinden erişmek için 8080 portunu set ettiğimiz için http://localhost:8080/cache/test.php adresinden eriştiğim zaman ilk istekde 3 sn bekliyor ancak daha sonraki çağırılarda sonuç ms mertebesinde hızlı geliyor.

Detaylıca incelemek gerekli tabi, örneğin session bilgisi içeren sayfalarda cache’leme nasıl oluyor gibi. Ama temelde basit sayfalarınız varsa ve koda girip cache yazmak istemiyorsanız bence harika bir çözüm.

Sitesinde çeşitli örnekler vermişler, örneğin eskiden 14 sunucuda çalışan uygulama artık 2 sunucu ile çalışabiliyormuş. Bir de varnish ile saniyede 275,000 isteği karşılamışlar. Breh breh :)

http://www.varnish-cache.org/