tag:blogger.com,1999:blog-102287902024-03-13T18:03:01.614+03:00Murat HAZERrandom thoughts and notes about software developmentMurat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.comBlogger15125tag:blogger.com,1999:blog-10228790.post-81830564322763401602010-12-04T22:59:00.000+02:002010-12-04T22:59:08.451+02:00Versiyon yönetim sistemi olarak GiT kurulumu ve kullanımı<div style="text-align: justify;">
Uzun süredir şirket ve kişisel projelerimde Subversion'u (SVN) kullanıyorum. Genel anlamda SVN'den oldukça memnundum fakat branching ve merging işlemlerinin sıkıntılı olması ve projeler büyüdükçe önemli ölçüde yavaşlama yaşandığı için SVN'i GiT ile değiştirme ve var olan SVN repository'lerini GiT'e taşıma kararı aldım. GiT'in diğer versiyon yönetim sistemlerinden iyi olduğu noktaları <a href="http://whygitisbetterthanx.com/">http://whygitisbetterthanx.com/</a> adresinden detaylıca inceleyebilirsiniz. Benim açımdan önemli olanlarını şu şekilde sıralayabilirim;</div>
<br />
<ul>
<li style="text-align: justify;">GiT gerçekten ama gerçekten çok hızlı</li>
<li style="text-align: justify;">GiT kaynak depoları disk üzerinde çok az yer kaplıyor</li>
<li style="text-align: justify;">GiT ile branching ve merging işlemleri kolay ve hızlı</li>
<li style="text-align: justify;">GiT offline olarak kullanılabiliyor</li>
<li style="text-align: justify;">GiT distributed (dağıtık) olduğu için her bir geliştiricinin makinesinde proje bütün geçmişi ile birlikte tutulabiliyor. İlk bakışta bunun işlemleri yavaşlattığı ve disk israfı olduğu düşünülebilir fakat GiT'in oldukça etkin algoritmalar kullanması sayesinde bu sorunlar hiç yaşanmıyor. </li>
</ul>
<div style="text-align: justify;">
GiT komutlarıyla ve genel yapısı ile ilgili detaylı bigiye GiT'in <a href="http://git-scm.com/documentation">resmi dokümantasyonundan</a> veya ücretsiz <a href="http://progit.org/">Pro GiT</a> kitabından ulaşabilirsiniz. Bu makalede Linux Ubuntu yüklü bir sunucu üzerinde özel bir GiT repository'sini nasıl oluşturabileceğinizi ve bunu diğer geliştiricilerle nasıl paylaşabileceğinizi anlatmaya çalışacağım. Buradaki komutlar veya işlemler diğer Linux sürümlerinde veya Windows üzerinde cygwin yardımıyla ufak değişiklikler ile çalıştırılabilir.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
GiT'i ve GiT üzerinde repository oluşturulması ve yönetilmesi işlemlerini kolaylaştıran gitosis programını kurmak için sırasıyla <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">sudo apt-get install git </span>(veya git-core) ve <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">sudo apt-get install gitosis </span>komutlarını çalıştırmamız gerekiyor. Kurulumlar tamamlandıktan sonra <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: 15px; white-space: pre-wrap;">sudo add user --system --shell /bin/sh --gecos ‘git user’ --group --disabled-password --home /home/git </span>komutunu çalıştırdığımızda gitosis'in çalışması için gerekli olan git kullanıcısı sisteme eklenecektir. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Kendi GiT repository'imizi oluşturmaya başlamadan önce sunucu üzerinde yapmamız gereken son işlem ise gitosis'e GiT projelerini yönetecek geliştiricinin ssh public anahtarını tanıtmak. İlk olarak GiT repository'lerini yönetecek geliştiricinin makinesi üzerinde <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">ssh-keygen -t rsa</span> komutunu çalıştırmamız ve oluşturulan public anahtarı sunucuya kopyalamamız (/tmp klasörünü tavsiye edilir) gerekiyor. Daha sonra ise sunucu üzerinde <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">sudo -H -u git gitosis-init < /tmp/rsa_key.pub</span> komutunu çalıştırdıktan sonra tanıttığımız ssh public anahtara sahip olan bilgisayar üzerinden bütün GiT repository işlemlerimizi yapabiliriz. (Sunucudan ayrılmadan önce <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">/home/git/repositories/gitosis-admin.git/hooks/post-update </span>dosyasının çalıştırılabilir olduğunu mutlaka kontrol edin)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Geliştirme için kullandığınız bilgisayar Linux ise GiT'i kurmak için kullandığımız komutları kullanarak, eğer Windows veya Mac os x ise <a href="http://git-scm.com/">http://git-scm.com/</a> adresinden ilgili programları kullanarak GiT'i kurabilirsiniz. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Gitosis oldukça akıllı bir şekilde bize GiT kullanarak GiT repository'lerini yönetme imkanı sağlıyor. Bunun için gitosis-admin repository'sini aşağıdaki komutlarla kendi makinemize almamız gerekiyor.</div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br /></span></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">cd /home/mhazer</span></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: 15px; white-space: pre-wrap;">mkdir gitosis-admin</span></div>
<div>
<div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span style="background-color: transparent; color: black; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">git clone git@sunucu_ismi:gitosis-admin.git</span></span></div>
<div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
Sonraki aşamada gitosis-admin klasörü altında gitosis.conf dosyasına aşağıdaki şekilde değiştirip sunucuya göndermemiz gerekiyor.</div>
</div>
<div style="text-align: justify;">
<br /></div>
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><div style="text-align: justify;">
[gitosis]</div>
</span><div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br /></span></div>
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><div style="text-align: justify;">
[group gitosis-admin]</div>
<div style="text-align: justify;">
writable = gitosis-admin</div>
<div style="text-align: justify;">
members = mhazer@Bim247</div>
</span></div>
<div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br /></span></div>
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><div style="text-align: justify;">
[repo myRepo]</div>
<div style="text-align: justify;">
gitweb = yes</div>
<div style="text-align: justify;">
daemon = yes</div>
<div style="text-align: justify;">
description = myRepo GiT</div>
<div style="text-align: justify;">
owner = Murat HAZER</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
[group myRepo_group]</div>
<div style="text-align: justify;">
members = mhazer@Bim247</div>
<div style="text-align: justify;">
writable = myRepo</div>
</span><div style="text-align: justify;">
<br /></div>
</div>
<div style="text-align: justify;">
gitosis.conf dosyasını yukarıdaki şekilde değiştirip kaydettikten sonra gitosis-admin klasörü altında </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">git commit -am "yeni myRepo tanımları" </span></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">git push .</span></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br /></span></div>
<div style="text-align: justify;">
komutlarını çalıştırdıktan sonra GiT sunucusu üzerindeki ilk değişikliğimizi de yapmış olacağız. Bu komutlardan sonra hâlâ yeni GiT repository'imiz sunucu üzerinde oluşturulmamış olacak. Bunun için;</div>
<div style="text-align: justify;">
<br /></div>
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><div style="text-align: justify;">
mkdir /home/mhazer/myRepo</div>
<div style="text-align: justify;">
cd /home/mhazer/myRepo</div>
<div style="text-align: justify;">
git init</div>
<div style="text-align: justify;">
git remote add origin git@sunucu_ismi:myRepo.git</div>
<div style="text-align: justify;">
git push origin</div>
</span><div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br /></span></div>
<div style="text-align: justify;">
komutlarını çalıştırmamız gerekiyor. GiT push işleminden sonra sunucu üzerinde /home/git/repositories/myRepo klasöründe GiT repository'si gitosis tarafından oluşturulacak. Bundan sonra <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">/home/mhazer/myRepo </span>klasörü altında oluşturduğunuz veya değiştirdiğiniz dosyaları <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">git commit</span> ve <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">git push</span> komutlarıyla sunucuya gönderip diğer geliştiricilerle paylaşabilirsiniz.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Yeni geliştiricilere myRepo repository'sine erişim hakkı vermek için yeni geliştiricilerin makinelerinde ssh-keygen -t rsa komutunu çalıştırdıktan sonra oluşan ssh public anahtarlarını daha önce gitosis-admin altındaki keydir klasörüne kopyalamamız ve gitosis.conf dosyasını aşağıdaki şekilde değiştirip GiT sunucusuna göndermemiz gerekiyor. (yeni geliştiricinin ssh public anahtarının yeniDev@Bim211 olduğunu farz edersek)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">copy yeniDev@Bim211.pub /home/mhazer/gitosis-admin/keydir </span></div>
<div style="text-align: justify;">
<br /></div>
<div>
<div style="font-family: 'Courier New', Courier, monospace; text-align: justify;">
[group myRepo_group]</div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">members = mhazer@Bim247 <span class="Apple-style-span" style="color: red;"><b>yeniDev@Bim211</b></span></span></div>
<div style="font-family: 'Courier New', Courier, monospace; text-align: justify;">
writable = myRepo</div>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">cd /home/mhazer/gitosis-admin</span></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">git commit -am "yeni geliştirici tanımı"</span></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">git push .</span></div>
<div style="text-align: justify;">
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"><br /></span></div>
<div style="text-align: justify;">
SVN repository'lerinin GiT'e taşınması ve online GiT repository sunucularından olan <a href="http://www.github.com/">github</a> üzerine ilerleyen günlerde ilerleyen günlerde bahsetmeye çalışacağım.</div>Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com7tag:blogger.com,1999:blog-10228790.post-72198748238292285212010-10-06T13:09:00.005+03:002010-10-06T14:26:34.349+03:00Lookout (MS Outlook arama sorununa çözüm)Siz de işyerinizde MS Outlook kullanmak zorunda kalıyorsanız e-posta sayınız arttıkça entegre gelen arama fonksiyonun ne denli yetersiz olduğunu mutlaka tecrübe etmişsinizdir. Eğer aylar öncesinde gelen bir e-posta'nın gönderenini veya konusunu hatırlamıyorsanız ve aklınızda sadece e-posta içeriğinden bir iki anahtar kelime kalmışsa bu e-posta'yı entegre gelen arama fonksiyonuyla bulabilmek imkansıza yakın diyebilirim. Çözüm için bir çok yol denedim (google desktop vs.) fakat hiçbiri Lookout kadar kolay, basit ve hızlı bir çözüm sunmuyor.<br /><br />Lookout Microsoft tarafından satın alınıp "MSN Desktop Search" olarak tekrar piyasaya sürüldü fakat eski versiyonu yenisinden çok daha başarılı (çok tanıdık geliyor değil mi?). Microsoft eski versiyonu artık dağıtmadığından google üzerinden <a href="http://www.google.com/search?q=lookout%201.3%20outlook%20download">arama yaparak</a> 1.3 versiyonunu bulup indirmek gerekiyor. Kurulumu oldukça basit fakat kurulum tamamlanıp outlook ilk kez başlatıldıktan sonra aşağıdaki gibi bir hata ile karşılaşabilirsiniz.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhyNbT7RzgFFAC0P9I05lkIFh5ZXAxt2W51n9j0yL7m5jTLMgKRLNsKmwjKt3LjO_RKk8Ya01fnMdKzoBXfJSS0a_Nxf_YbL2suOlpFuy0X6IJj0cZeFx3DqhUPEmEpq3vmdCk0w/s400/lookoutwarning%5B1%5D.gif"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 161px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhyNbT7RzgFFAC0P9I05lkIFh5ZXAxt2W51n9j0yL7m5jTLMgKRLNsKmwjKt3LjO_RKk8Ya01fnMdKzoBXfJSS0a_Nxf_YbL2suOlpFuy0X6IJj0cZeFx3DqhUPEmEpq3vmdCk0w/s400/lookoutwarning%5B1%5D.gif" alt="" border="0" /></a>Bu hatayı çözmek için outlook'u kapatıp aşağıdaki komutları "Komut Sistemi"ni kullaranak çalıştırmanız gerekiyor.<br /><br /><span style="font-size:85%;"><span style="font-style: italic;font-family:courier new;" >cd %SYSTEMROOT%\assembly\GAC</span> <span style="font-style: italic;font-family:courier new;" >rename Microsoft.Office.Interop.Outlook Microsoft.Office.Interop.Outlook.OLD</span></span><br /><br />Tekrar outlook'u çalıştırdıktan sonra Lookout maillerinizi indekslemeye başlayacak ve bu işlemi tamamladıktan sonra aradığınız e-posta'ya çok rahat bir şekilde ulaşabileceksiniz.<br /><br />Mutlaka deneyin, pişman olmayacaksınız.Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com1tag:blogger.com,1999:blog-10228790.post-51567956151924741282010-10-02T23:26:00.039+03:002010-11-10T23:21:15.336+02:00Hatay ve Halep Gezisi<div style="text-align: right;">
<i><span class="Apple-style-span" style="font-size: small;">(Eşim <a href="http://aysunacarhazer.blogspot.com/">Aysun AÇAR HAZER</a> tarafından hazırlanmıştır.)</span></i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Arkadaşlarla geçen ay yaptığımız Hatay gezisi kesinleştiğinde, Hatay’a kadar gitmişken, Suriye’ye de geçip bir Halep gezisi yapabilir miyiz diye düşünmeye başlamıştık. Suriye görmek istediğimiz ülkeler arasında ilk sırada olmamasına rağmen Türkiye ve Suriye Eylül 2009’dan beri karşılıklı vizeyi kaldırdıklarından ve geçişleri kolaylaştırdıklarından Suriye’nin en büyük ikinci şehri olan Halep’i de görmek için iyi bir fırsat olduğunu düşündük ve keyifli bir Halep gezisi gerçekleştirdik. Burada bu gezimiz üzerine kısa notları ve izlenimlerimizi paylaşmaya çalışacağız. Sizin de yolunuz bir gün o taraflara düşerse ve Halep'i de görmek isterseniz umarız bu yazdıklarımızdan faydalanırsınız (Gezi öncesinde yaşadığımız pasaport süreci hakkındaki deneyimlerimizi <a href="http://mhazer.blogspot.com/2010/09/biyometrik-pasaport.html">buradan</a> okuyabilirsiniz).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Arapça bilen Hatay'lı arkadaşlarımız da daha önce Suriye’ye gitmediklerinden yalnız başımıza yollara düşmektense Halep’i bilen ve tanıyan birileriyle sınırdan geçmenin daha doğru olacağını düşündük ve bütün gezi boyunca bu kararımızın ne denli yerinde olduğunu birçok kez gördük. Tek başımıza gitseydik büyük ihtimalle boşa vakit harcayıp belki de Halep’in en güzel yerlerini gezemeyecektik. Antakya’da Halep’e günübirlik gezi düzenleyen tur şirketlerinden biriyle anlaşıp turu cuma gününden ayarladık. Şirkete pasaportlarımızın fotokopilerini bırakıp yol, rehberlik, öğle yemeği dahil kişibaşı 60$ ücret ödeyip ertesi gün Antakya'da buluşmak üzere anlaştık.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ertesi gün sabah 7:00’da Antakya’dan yeni ve rahat bir minibüs ile yola çıktık ve Cilvegözü sınır kapısına varmamız yaklaşık bir saat sürdü. Türkiye sınırında çıkış için epey sıra vardı fakat işlemler hızla halledildiğinden sıra kısa süre içinde ilerledi ve araç için de çıkış belgeleri düzenlendikten sonra Türkiye sınırından çıkışımızı yaptık. Suriye girişine vardığımızda gişelerde fazla kalabalık yoktu ve minibüs şoförünün de bizi yönlendirmesiyle işlemlerimiz kısa sürede halledildi. Şoför Arapça bildiğinden ve sürekli giriş çıkış yapması dolayısıyla oradaki görevlilerle de ahbap olduğundan işleri kolayca halletti.. Malesef Suriye’de rüşvetsiz bir iş yaptırmak çok zor ve o işleri halletmek de şoförümüze düştü. Tur şirketi olmadan kendimiz ülkeye girmeye kalksaydık rüşvet işlerini nasıl hallederdik bilemiyoruz. Neyse ki bizim ülkemizin girişinde ve çıkışında rüşvet artık söz konusu değil. Biz Türk vatandaşları olarak Türkiye’de ödediğimiz yurtdışı çıkış harcı (15 TL) haricinde Suriye’ye ayrı bir ödeme yapmadık. Fakat KKTC’li arkadaşlarımızın kişi başı 23$ vize ücreti ödemeleri gerekti ve onların giriş işlemleri bizimkilerden biraz daha uzun sürdü.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Sorunsuz bir şekilde Suriye’ye giriş yapmamızdan ve yaklaşık 1 saat daha yol gitmemizden sonra Halep’e vardık. Yol üzerinde eski zamanlarda doğu ile batıyı birbirine bağlayan ve Kral Yolu olarak da bilinen İpek Yolu’nun kalıntılarını görüp o tarihi yolda az da olsa yürüme imkanı bulduk.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Kendine özgü bir doğu şehri olan Halep’teki eski evler kayşani adı verilen taşlarla inşa edilmiş. Günümüzde de şehrin dokusuna uygun olmayan binalara izin verilmiyor ve yapılan yeni evler de taş kaplama yapılıyor. Bu taş yapılar birkaç devlet binası hariç en fazla 4-5 kat olabiliyorlar. Halep pek düzenli bir şehir olmamasına rağmen (özellikle Halep Kalesi’nden baktığınız zaman) şehirdeki evlerin dokusunun birbirleriyle uyumlu olması insanı büyülüyor.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Halep’e vardığımızda Halep’te yaşayan bir Türk olan rehberimiz de bize katıldı ve asıl Halep turumuz başlamış oldu. Öncelikle panaromik bir şehir turu yaptık ve yolda gördüğümüz çoğu evin güzelliğine hayran kaldık. </div>
<div style="text-align: justify;">
<br /></div>
<a href="http://lh3.ggpht.com/_iHkrUKLe0aw/TKeVmOjPIOI/AAAAAAAABrs/Unstxd81dXM/s800/DSC05641-1.JPG"><img alt="" border="0" src="http://lh3.ggpht.com/_iHkrUKLe0aw/TKeVmOjPIOI/AAAAAAAABrs/Unstxd81dXM/s800/DSC05641-1.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeVqdK0WVI/AAAAAAAABrw/XFt5EX4LdTY/s800/DSC05644-1.JPG"><img alt="" border="0" src="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeVqdK0WVI/AAAAAAAABrw/XFt5EX4LdTY/s800/DSC05644-1.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Suriye’de hayat Türkiye’ye oranla çok daha ucuz. Suriye parasına Suri adı veriliyor ve 1 Suri yaklaşık 0.03125 TL ediyor. Biz Surileri Hatay’da bir dövizciden temin ettik. Euro ve Dolar’la hesap yapmaya alışık olan bizler için ilk defa Türk Lirası’nın daha değerli olduğu bir ülkede bulunmak ve hesap yapmak ilk başta kafa karıştırıcı oldu fakat kısa sürede alıştık.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Halep kalesini gezmeden önce kalenin karşısındaki cafelerin birinde yorgunluk kahvesi içtik. Suriye’de gördüğümüz kadarıyla Türk kahvesini su bardağı gibi büyük cam bardaklarda içiyorlar. Neyse ki bize bildiğimiz kahve fincanlarında getirdiler. Cafelerde fiyatlar aşırı pahalı olmamasına rağmen turistik bir bölgede yer aldıklarından çok da ucuz olmalarını beklemek yanlış olur. Örneğin 1 kahveye 100 Suri verdik ve daha sonra kaleye giriş için de 150 Suri ödedik (Giriş ücreti Suriyeliler'e 15 Suri iken yabancılara 150 Suri'ydi).</div>
<div style="text-align: justify;">
<br /></div>
<a href="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeVverjmKI/AAAAAAAABr0/-Ij7SI6WBxc/s800/DSC05650-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeVverjmKI/AAAAAAAABr0/-Ij7SI6WBxc/s800/DSC05650-1.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeVBQKz4oI/AAAAAAAABq8/bRad7-U-brg/s800/DSC05661-1.JPG"><img alt="" border="0" src="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeVBQKz4oI/AAAAAAAABq8/bRad7-U-brg/s800/DSC05661-1.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeVFbtxE6I/AAAAAAAABrE/VXNV8h0797g/s800/DSC05683-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeVFbtxE6I/AAAAAAAABrE/VXNV8h0797g/s800/DSC05683-1.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeVHwqJUpI/AAAAAAAABrI/rbTyCllhEpU/s800/DSC05684-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeVHwqJUpI/AAAAAAAABrI/rbTyCllhEpU/s800/DSC05684-1.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh3.ggpht.com/_iHkrUKLe0aw/TKeVK33IUTI/AAAAAAAABrM/_AkEsMl4rgo/s800/DSC05688-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh3.ggpht.com/_iHkrUKLe0aw/TKeVK33IUTI/AAAAAAAABrM/_AkEsMl4rgo/s800/DSC05688-1.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeVWn-0mtI/AAAAAAAABrc/4THwUHVCurk/s800/DSC05713-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeVWn-0mtI/AAAAAAAABrc/4THwUHVCurk/s800/DSC05713-1.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Etrafında büyük bir hendek olan Halep Kalesi dünyanın en eski kalesi olarak bilinmekte ve kaleyi gezerken birçok kültürün izlerini görmek mümkün. Mezepotamya devletleri, Roma İmparatorluğu, Bizans İmparatorluğu, Arap Krallıkları, Büyük Selçuklu Devleti ve Osmanlı İmparatorluğu devirlerini gören kale 10000 yıldan daha fazla olan bir geçmişe sahip. Kaleyi gezerken rehberimiz bize özellikle Büyük Selçuklu ve Osmanlı mimarilerinin izlerini gösterdi.</div>
<div style="text-align: justify;">
<br />
<a href="http://lh3.ggpht.com/_iHkrUKLe0aw/TKeV3N0L3hI/AAAAAAAABtQ/RihHzKturd0/s800/DSC05660-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh3.ggpht.com/_iHkrUKLe0aw/TKeV3N0L3hI/AAAAAAAABtQ/RihHzKturd0/s800/DSC05660-1.JPG" style="cursor: hand; cursor: pointer; display: block; height: 265px; margin: 0px auto 10px; text-align: center; width: 442px;" /></a></div>
<a href="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeV-KZwwgI/AAAAAAAABr8/Wpn6tvL49JA/s800/DSC05669-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeV-KZwwgI/AAAAAAAABr8/Wpn6tvL49JA/s800/DSC05669-1.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeWGexh-GI/AAAAAAAABsI/J8cv8gT3US8/s800/DSC05692.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeWGexh-GI/AAAAAAAABsI/J8cv8gT3US8/s800/DSC05692.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Taht odasına girdiğimizde ise mükemmel tavan süslemeleri ile karşılaştık. Rehberimizin anlattığına göre bu tavan süslemeleri tek bir Ermeni aile tarafından yapılmış ve bu işin ustalığı halâ o ailede bulunmaktaymış.</div>
<div style="text-align: justify;">
<br /></div>
<a href="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeVRjon7MI/AAAAAAAABrU/bHe9NBegl_s/s800/DSC05709-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeVRjon7MI/AAAAAAAABrU/bHe9NBegl_s/s800/DSC05709-1.JPG" style="cursor: pointer; display: block; height: 442px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 265px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh3.ggpht.com/_iHkrUKLe0aw/TKeVVRU-5MI/AAAAAAAABrY/P6PoWmjuT6U/s800/DSC05712-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh3.ggpht.com/_iHkrUKLe0aw/TKeVVRU-5MI/AAAAAAAABrY/P6PoWmjuT6U/s800/DSC05712-1.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Kaleden Halep’e baktığımızda ise kum rengi karmakarışık taş bir şehir görünüyor. Yine de Halep’i gerçekten tanımak için ona uzaktan bakmak değil bizzat Halep’in daracık sokaklarında gezmek gerekli. Taş duvarlar içinde açık bir kapı görürseniz mutlaka içeri bakın, kesinlikle o dar sokaktan beklemeyeceğiniz güzellikte bir ev ve muhteşem bir avlu göreceksiniz.</div>
<div style="text-align: justify;">
<br /></div>
<a href="http://lh3.ggpht.com/_iHkrUKLe0aw/TKeWH6_E4ZI/AAAAAAAABsM/HSDZ6DdW88I/s800/DSC05754.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh3.ggpht.com/_iHkrUKLe0aw/TKeWH6_E4ZI/AAAAAAAABsM/HSDZ6DdW88I/s800/DSC05754.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Kaleden çıkıp adını Hz. Yahya'nın babası Zekeriyya Peygamber’den alan ve Ulu Camii de denilen Zekeriyya Camii’ne geldik. Caminin içinde Zekerriya Peygamberin türbesi de bulunuyor.</div>
<div style="text-align: justify;">
<br /></div>
<a href="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeWJfPN1MI/AAAAAAAABsU/R6MfeT1IXA0/s800/DSC05719.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeWJfPN1MI/AAAAAAAABsU/R6MfeT1IXA0/s800/DSC05719.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeVbK_GN3I/AAAAAAAABrg/F1FdL5rqvkE/s800/DSC05731-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeVbK_GN3I/AAAAAAAABrg/F1FdL5rqvkE/s800/DSC05731-1.JPG" style="cursor: pointer; display: block; height: 442px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 265px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeWLSs334I/AAAAAAAABsY/TLhcG3TINjM/s800/DSC05728.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeWLSs334I/AAAAAAAABsY/TLhcG3TINjM/s800/DSC05728.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Camiye girerken sadece başımızı örtmemiz yeterli gelmedi ve kapıda verilen çarşafları da giydik. Sokaktaki kadınların çoğu başörtülü veya çarşaflı, az sayıda da olsa başı açık olan kadınlar da var. Fakat dolaşırken ne kadınlar ne de erkekler bizleri yadırgadılar ve çoğu kimse başını bile çevirip bize bakmadı. Farklı dinlerin birarada barış içinde yaşaması çok az şehirde gerçekleşebilen bir şey ve Halep de bunu başarabilen ender şehirlerden.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Daha sonra taş duvarlar arasından akıl hastalarının yıllar boyunca su ve musiki ile tedavi edildiği Bimarhane’ye gittik. Ortasında küçük bir süs havuzu bulunan avluya bakan hücrelerde kalan hastalar iyileştiklerinde oraya girişlerini hatırlamasınlar ve yeni bir hayata başlasınlar diye girdikleri kapı yerine farklı bir kapıdan çıkarlarmış (Aynı tedavi yöntemini kullanan darüşşifa da Edirne’deki II. Beyazıt Külliyesi’nde bulunmakta).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Zekeriya Camii ile şehrin çarşısı (Kapalıçarşı) yanyana bulunuyor. Bizim İstanbul’daki Kapalıçarşı’ya çok benzeyen Halep'in Kapalıçarşı’sı sadece biraz daha küçük (yine de Ortadoğu'un en uzun üstü kapalı çarşısı sayılıyor) ve temizlikten yoksun. Esnafı ise bizimkiyle tamamen aynı ve yabancılara fahiş fiyattan mal satmak için ellerinden geleni yapıyorlar. Bir şey beğendiyseniz mutlaka pazarlık yapın. Beğendiğiniz şeyi aldıktan sonra bir daha da başka dükkana bakmamanızı tavsiye ederiz çünkü sıkı pazarlıkla aldığınızı zannettiğiniz bir malın aynısını diğer dükkanda çok daha ucuza bulabiliyorsunuz. Çarşıda akla gelebilecek her şey bulunabilir (baharatlar, ayakkabılar, altınlar, inciler, giyim eşyaları, vs..) Esnafın çoğu az da olsa Türkçe biliyor ve Türk lirasını da kabul ediyor. Gittiğimizde günlerden cumartesi olduğu için çarşının açılış günüydü ve aşırı bir kalabalık vardı. Suriyeliler bu kalabalığı hiç yadırgamıyorlar, küçücük çocuklar o kalabalıkta ve temiz olmayan yerlerde keyifli bir şekilde oyun oynuyorlar. Suriye’de cuma günü resmi tatil olduğundan çarşı da cuma günü kapalı oluyor ve Halep’e gidip Kapalıçarşı’yı gezmek isterseniz bunu aklınızda bulundurun. Devlet daireleri ise cuma ve cumartesi günleri kapalı, pazar günleri de Suriye’de haftabaşı.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Çarşıda bir saat kadar gezdikten sonra tur rehberimizin bizi götürdüğü restorana gittik. Halep’in güzel dar sokaklarının birindeki eski ve güzel bir konağı restore edip restorana çevirmişler. Halep’te gördüğümüz en temiz yerdi ve yediğimiz yemekler (kebaplar, mezeler, içli köfteler) çok güzeldi. Hatay’da da çok güzel yemekler yememize rağmen Halep’tekiler daha lezzetliydi.</div>
<div style="text-align: justify;">
<br /></div>
<a href="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeVfUcMfuI/AAAAAAAABrk/qU1QQlpdkf0/s800/DSC05733-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeVfUcMfuI/AAAAAAAABrk/qU1QQlpdkf0/s800/DSC05733-1.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Yemekten sonra Hristiyan vatandaşların çoğunlukta olduğu bir mahalleye gittik. Bu mahallede sokaklar diğer sokaklardan çok daha temiz ve düzenliydi, ara sokaklarındaki konaklar ise restore edilmişti. Burada da biraz dolaştıktan sonra Halep’in meşhur kuru baklavasından da alarak dönüş yoluna çıktık. Dönüşte Suriye sınırında parfümler ve içkiler, çeşitli elektronik eşyalar satılan duty freeye de uğradık. Duty free’de Suri ve TL kabul etmiyorlar, fiyatlar da $ üzerinden. Suriye’den sorunsuz bir çıkıştan ve Türkiye’ye de sorunsuz bir girişten sonra 22:30 gibi tekrar Antakya’daydık. Türk vatandaşları çıkışta da herhangi bir ücret ödemezken, KKTC’li arkadaşlar kişibaşı 550 Suri ödemek durumunda kaldı.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Gelişen Türkiye-Suriye ilişkileri, Türkiye ve Suriye halklarının yakınlaşmasına vesile olmuş. Hatay’da çok sayıda Suriye plakalı araç ve Suriye’de de çok sayıda Hatay ve Gaziantep plakalı araç da vardı. Halep’te Türkiye’den gelen tur otobüsleri de gördük. Türkler olarak Halep’te çok yabancılık çekmeyeceğimiz kesin olsa da daha iyi gezebilmek için turla gidilmesini tavsiye ediyoruz. Gezilecek, görülecek yerleri tek başımıza bu kadar kısa sürede görebilmemiz mümkün değildi ve en önemlisi de o muhteşem yemekleri yiyebileceğimiz yeri de Halep’in daracık sokaklarında bulamazdık. Yine de Halep’i tam anlamıyla gezmek için bir gün yeterli olmadı diye düşünüyoruz. O taşlarla kaplı şehirden çıkarken gezilecek daha çok yer olduğunu ve Halep hakkında öğrenilecek daha çok şey olduğunu bilerek çıktık. Yolumuz tekrar oralara düşerse Halep’e bir daha gideceğimiz ve bu sefer 1 günden fazlasını ayıracağımız kesin.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Türkiye ve Suriye karşılıklı vizeleri kaldırmasaydı Hatay’a gitsek bile bir zamanlar Osmanlı toprağı olan ve bize bu kadar yakın bulunan dünyadaki en eski yerleşim yerlerinden biri, “Doğu’nun Kraliçesi” Halep’i görme imkanımız büyük ihtimalle olmayacaktı. Umarız yakında tüm diğer komşularımızda da vizeye ihtiyaç duymadan rahatça gezebiliriz ve aslında birbirimizden çok da farklı olmadığımızı daha yakından görebiliriz.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Halep’ten bu kadar bahsetmişken Hatay’dan hiç bahsetmemek Hatay gibi güzel bir şehire haksızlık olur. Türkiye’deki en eski yerleşim yerlerinden biri olan ve binlerce arkeolojik esere sahip olan Hatay da Türkiye’de öncelikli olarak gezilmesi ve görülmesi gereken şehirlerden biri. 1939 yılında Türkiye’ye katılmadan önce ayrı bir devlet olan Hatay şimdi de çok farklı kültürlerin birlikte barış içinde yaşadığı bir ilimiz. Antakya çarşısı, Arkeoloji Müzesi, Samandağ’daki Titus tüneli ve Beşikli Kaya Mezarları, Harbiye’deki şelaleler görülmesi gereken başlıca yerler. Özellikle çarşıda yediğimiz kadar güzel künefeyi daha önce hiçbir yerde yememiştik. Harbiye’de ise yemeklerimizi ayaklarımız buz gibi şelale suyu içindeyken yedik. Fakat araya Halep gezisi de girdiği için Hatay’ı da doyasıya gezemedik. Göremediğimiz birçok yer ve tekrar yemek istediğimiz künefe, kabak tatlısı, tepsi kebabı ve mezeler bir sonraki sefer için bahanemiz olacak. </div>
<div style="text-align: justify;">
<br /></div>
<a href="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeWN41-BNI/AAAAAAAABsc/wZmRC1kQzk8/s800/DSC05571.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeWN41-BNI/AAAAAAAABsc/wZmRC1kQzk8/s800/DSC05571.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeWQfX4k8I/AAAAAAAABsg/Sk1auV5dubw/s800/DSC05576.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeWQfX4k8I/AAAAAAAABsg/Sk1auV5dubw/s800/DSC05576.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeWR1KWFyI/AAAAAAAABsk/iJ6eQkPoND4/s800/DSC05585.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh5.ggpht.com/_iHkrUKLe0aw/TKeWR1KWFyI/AAAAAAAABsk/iJ6eQkPoND4/s800/DSC05585.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeWUI5uHYI/AAAAAAAABso/wwb-vTKtcDE/s800/DSC05599.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeWUI5uHYI/AAAAAAAABso/wwb-vTKtcDE/s800/DSC05599.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeWWkvU_DI/AAAAAAAABss/fsHxbU1FHPM/s800/DSC05603.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh6.ggpht.com/_iHkrUKLe0aw/TKeWWkvU_DI/AAAAAAAABss/fsHxbU1FHPM/s800/DSC05603.JPG" style="cursor: pointer; display: block; height: 265px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 442px;" /></a><br />
<div style="text-align: justify;">
<br /></div>
<a href="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeViwFxXCI/AAAAAAAABro/aJ4mltxM4DE/s800/DSC05810-1.JPG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://lh4.ggpht.com/_iHkrUKLe0aw/TKeViwFxXCI/AAAAAAAABro/aJ4mltxM4DE/s800/DSC05810-1.JPG" style="cursor: pointer; display: block; height: 442px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: justify; width: 265px;" /></a>Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com3tag:blogger.com,1999:blog-10228790.post-10576834484902461442010-09-21T13:18:00.004+03:002010-10-03T16:06:54.526+03:00Biyometrik pasaport<div style="text-align: justify;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcM3dgfPZ2l8bPZWUyXQo_4ocBwHwNp-TIDx1T8aZKZlTl9hLp9A6-ACyhliWtEDaPr4hP72E1D3dAaG0TVrTcNu6fHOFJMmCWAWNvhLjH0XC9-ICd6fiBaUeqUjyc_52E_D61jg/s800/52749%5B1%5D.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 258px; height: 144px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcM3dgfPZ2l8bPZWUyXQo_4ocBwHwNp-TIDx1T8aZKZlTl9hLp9A6-ACyhliWtEDaPr4hP72E1D3dAaG0TVrTcNu6fHOFJMmCWAWNvhLjH0XC9-ICd6fiBaUeqUjyc_52E_D61jg/s800/52749%5B1%5D.jpg" alt="" border="0" /></a>Yakında yurtdışına yapmayı planladığımız gezi için pasaportları yenileme ihtiyacı duyunca 1 Haziran 2010 tarihi itibariyle verilmeye başlanan biyometrik pasaporta başvurmaya karar verdik (süresi dolmayan eski tip pasaportlar geçerlilik tarihi 24 Kasım 2015’i geçmeyecek şekilde uzatılabiliyor). Bu yüzden öncelikle biyometrik pasaport başvuru süreci hakkında internette bir araştırma yaptık. İçişleri bakanlığının hazırladığı sitede merak edilen bir çok bilgiye ulaşmak mümkün. Buradan resmi sürece ilişkin bilgi de alınabiliyor. Araştırma yapmamızdaki asıl amaç ise bizden önce başvuran kişilerin yaşadıklarını öğrenip herhangi bir sıkıntı yaşamamaktı. Okuduğumuz bir çok yazıdan faydalandığımız için kendi başvuru sürecimizi de yazıp biyometrik pasaport almak isteyenlere bir nebze de olsa yardımcı olmak istedik.<br /><br />Randevu ile başvuran herkesin işlemlerini çok kısa bir sürede yapabildiklerini okuduğumuzdan ilk olarak aynı sitenin randevu talebi kısmından Bakırköy Emniyet Müdürlüğü Pasaport Büro Amirliği’nden randevu aldık. Randevu gününe kadar da gerekli belgeleri (2 adet biyometrik vesikalık fotoğraf, varsa önceden alınmış pasaportlar, pasaport cüzdan bedelinin ve pasaport harç bedelinin yatırıldığına dair dekontlar) tamamladık. Fotoğraf çektirdiğiniz yere pasaport için biyometrik fotoğraf çektirmek istediğinizi söylemeniz yeterli, biyometrik fotoğraf şablonu kendilerinde mevcut olduğundan genelde bir sorun çıkmıyor. Harç ve cüzdan bedellerinin ise Ziraat Bankası’na yatırılması gerekiyor. Gerekli belgeleri önceden hazırlamak başvuru işlemini oldukça kısaltıyor.<br /><br />Kendiniz ve yakınınız için randevuyu birlikte alabiliyorsunuz fakat başvuruda herkesin bizzat şubede olması gerekiyor. Online randevu aldığınızda bir referans numarası veriliyor ve yine randevunuzu online olarak iptal edip değiştirebiliyorsunuz. Randevu ile kısıtlı sayıda başvuru aldıklarından istediğiniz zamanın çok sonrasında bir güne randevu alabilirsiniz. Bu yüzden son güne bırakmamanızı tavsiye ederiz. Biz de tahmin ettiğimizin ilerisinde bir tarihe randevu alabildik. Bununla birlikte randevu almadan pasaport şubelerine bizzat başvurmanız da mümkün. Fakat bu şekilde başvuran çok fazla kişi olduğundan erken saatlerde gitseniz bile uzun zaman beklemeyi göze almalısınız. Çünkü çok uzun bir parmak izi verme sırası oluyor.<br /><br />Yeni pasaport almak ve eskisini uzatmak isteyenlerin parmak izi vermesi zorunlu. Parmak izi vermeden başvurunuz kabul edilmiyor. Bu yüzden en fazla yarım saat sürecek işlemler için bütün gün boyunca bekleyebilirsiniz. Parmak izinin alındığı tarayıcı çoğunlukla bir kaç denemeden sonra parmak izini kabul ediyor ve sıradaki her kişinin parmak izinin alınması yaklaşık 10 dakika sürdüğünden uzun süre beklemek zorunda kalıyorsunuz. Aslında parmak izi sıralarının çok uzun olduğunu önceden okuduklarımızdan biliyorduk. Yine de parmak izini randevu gününden önce verebilirsek randevu gününde sadece belgelerimizi teslim edip zaman kaybını en aza indirebiliriz diye düşünüp randevudan birkaç gün önce sabah 8 gibi pasaport şubesine gittik. Fakat o saatte bile emniyetin dışına uzunan çok uzun bir kuyruk vardı. İçeri girip parmak izi sırasına girdiğimizde önümüzdeki kişi sayısına göre en iyi ihtimalle 3-4 saat beklememiz gerektiğini gördüğümüzde ise önceden parmak izi vermekten vazgeçtik ve randevu günümüzü beklemeye karar verdik. Diğer yerlerdeki durumu bilmiyorum ama Bakırköy Emniyet Müdürlüğü’nde öğleden sonra sadece randevu alanlara hizmet veriliyor. Bu yüzden bekleme süresi kısalıyor. Biz yine temkinli davranıp randevu saatimizden yaklaşık 1 saat önce parmak izi sırasına girmiş olsak da Bakırköy Emniyet Müdürlüğü çok yoğun olduğundan işimizin bitmesi randevu saatimizi biraz aşmıştı. Aslında randevudan sadece 10-15 dakika önce gitseydik de işlerimizi büyük ihtimalle aynı zamanda halledecektik çünkü randevu saatine göre sırayla parmak izi verdik. Eğer parmak izi daha önceden verilmişse (ehliyet vb. işlemler için) ve bu belgelenebiliyorsa tekrar parmak izi vermeye gerek olmadığını da hatırlatalım. Parmak izi verdikten sonra ise herhangi bir zorlukla karşılaşmadık. Belgelerimizi verdik, görevli memur bilgilerimizi sisteme girdi ve eski pasaportların da iptaliyle işimiz 10-15 dakikada bitti. Pasaportların 8-10 gün içinde adresimize teslim edileceğini söylediler.<br /><br />Kısaca başvuru sürecinizi fazla beklemeden ve en sıkıntısız şekilde tamamlamak için önceden randevu almanızı ve belgelerinizi tamamlamanızı tavsiye ediyoruz. Biyometrik pasaport türleri, biyometrik fotoğraf, diğer başvuru belgeleri, harçlar, başvuru yerleri hakkında bilgi almak istiyorsanız aynı siteden detaylı bilgiye ulaşabilirsiniz. Herhangi bir aksilik yaşamamanız için siteyi detaylıca incelemeniz mutlaka yararınıza olacaktır. Sitede bulunmayan sorularınız varsa “Online Bilgi Talebi” bölümünden de sorabilirsiniz. Sorularınıza mutlaka cevap alıyorsunuz. Başvurunuz tamamlandıktan sonraki süreci yine referans ve TC kimlik numaranız ile online takip edebilirsiniz.<br /><br />Türkiye'de pek görmeye alışık olmadığımız şekilde başvuru saatimizden 24 saat sonra online başvuru izleme bölümünden pasaportlarımızın postaya verildiği yazıyordu ve ertesi gün de pasaport adresimize teslim edildi, yani başvurumuzdan yaklaşık 36 saat sonra pasaportlar elimize ulaştı.<br /><br />Umarız burada anlattıklarımız süreç hakkında bilgi arayanlara yardımcı olur ve sıkıntı yaşamadan pasaport işlemlerini yapabilirler.</div>Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com0tag:blogger.com,1999:blog-10228790.post-85113820881258321542010-09-14T17:06:00.004+03:002010-09-14T19:22:58.319+03:00Simple tools to increase productivityI need to switch between windows and mac os x during my regular day (i know mac os x is great but like most of us i must use windows at my job). Mac os x has great features, tools like <a href="http://www.apple.com/macosx/what-is-macosx/spotlight.html">spotlight</a> and <a href="http://en.wikipedia.org/wiki/Quicksilver_%28software%29">quicksilver</a> which really increase productivity.<br />These tools are for who likes to manage computer by keyboard, doesn't like shortcuts and doesn't want to take hands off from the keyboard while coding. You can execute any program, open any documents or even play any songs in iTunes with quicksilver and appropriate plugins. So i've been searching windows alternative of quicksilver for a while and i found <a href="http://www.launchy.net/">launchy</a>. I definitely suggest you to use launchy, if you get familiar with it and with the idea it'll save great amount of time and you will work much faster than before.Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com0tag:blogger.com,1999:blog-10228790.post-54334692247325845902010-09-03T13:05:00.009+03:002010-09-03T15:30:45.308+03:00Tarihi romanlarTarihi oldum olası sevmişimdir (ezberlemem gerekmediği sürece) ama asıl işiniz tarih olmayınca klasik tarih kitaplarını okumak zahmetli ve sıkıcı bir süreç olabiliyor. Bundan dolayı tarihi romanlar her zaman daha çok ilgimi çekmiştir. Hakkını vererek yazılmış tarihi romanlardan hem tarihsel bilgi alabiliyorsunuz hem de romanın o büyülü dünyasını yaşayabiliyorsunuz, eğer bir de yazarın fantastik kurgu (her zaman favorim olmuştur) yeteneği varsa o zaman işte fevkalede bir eser ortaya çıkabiliyor. Son zamanlarda biraz da rastlantı sonucu arka arkaya okuduğum beş kitap işte tam bu şekilde ortaya konulmuş eserlerdi ve bana büyük keyif verdiler. Eğer bunlar aşağıdaki sırayla okunursa eminim bu türe meraklı olanlar en az benim kadar keyif alacaklardır;<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpM82jX8G5SXQoNGVm7iUhvNKq5pBEjRr6CMTwLiOp7XDz6LccsbvYC87X0-gm7azQAXJlja3LfwxknYR7LSPrNMcH_t2veSaeusU6x1pKWnNiYxyloT4wwDCLUlEgdXJbiprmZQ/s800/101791%5B1%5D.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 138px; height: 215px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpM82jX8G5SXQoNGVm7iUhvNKq5pBEjRr6CMTwLiOp7XDz6LccsbvYC87X0-gm7azQAXJlja3LfwxknYR7LSPrNMcH_t2veSaeusU6x1pKWnNiYxyloT4wwDCLUlEgdXJbiprmZQ/s800/101791%5B1%5D.jpg" alt="" border="0" /></a><br />Dünyanın İlk Günü: Genç yazar Beyazıt Akman'nın ilk kitabı ve devamı gelecek gibi görünüyor. Yazar yurtdışında yaşıyor ve romanı yazarken dünya çapında saygı görülen kaynaklardan ve arşivlerden yararlandığını belirtiyor. Kitabın konusu kısaca Fatih Sultan Mehmet'in tahta çıkış süreci ve İstanbul'un fethi. İlk bakışta konu çok sıradan ve basit görülebilir fakat kitap o kadar harika kurgulanmış ki kitabı okuduktan sonra Topkapı sarayının önünden geçerken sanki Fatih Sultan Mehmet hala sarayda yaşıyor, Yedikule surlarının önünden geçerken kuşatma daha dün sonlanmış ve başınızı kaldırıp burçlara baktığınızda o ihtişamlı kıyafetleriyle yeniçerileri görecekmiş gibi hissediyorsunuz. En çok beğendiğim ilk 3 kitap arasında olduğunu hiç tereddütsüz söyleyebilirim. Kitapla ilgili daha fazla bilgiyi <a href="http://www.imparatorluk.com/">web sitesinden</a> alabilirsiniz.<br /><div style="clear: both;"></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbk77g15p_jy_uPZkVoFRQ3I5ODtyfsTIYqRqLEGvV_ru250QiVklVTDvszbsFoVx9IT3qvKPk47HMfMi9Nx7ogu3Ujk3A4ut4SleY3dx7jDxgg0xhBFSuUJd9x6ORg57pPbBnOQ/s800/IMPRIMATUR%5B1%5D.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 138px; height: 199px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbk77g15p_jy_uPZkVoFRQ3I5ODtyfsTIYqRqLEGvV_ru250QiVklVTDvszbsFoVx9IT3qvKPk47HMfMi9Nx7ogu3Ujk3A4ut4SleY3dx7jDxgg0xhBFSuUJd9x6ORg57pPbBnOQ/s800/IMPRIMATUR%5B1%5D.jpg" alt="" border="0" /></a><br />İmprimatur: Viyana kuşatması esnasında İtalya'da geçen olayları anlatıyor. Kuşatma altındaki insanların ruh halini ve o zamanlar hakkında bilgi almak için oldukça başarılı bir eser. Tabii ki kuşatmayı yapanlara kuşatma altındakilerin gözüyle bakma fırsatı da veriyor.<br /><div style="clear: both;"></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisw6HsRQreds68WlGz9HI21EtgPaoAGSNkzeMaz5nUOjAYcaAm46bok9CLf5KbtafH961ilUS20eyINIiROGimEFiBuV0LPbsDaqmIixTjlyukt8gbVVRW3MKf09GdBJJwgUj20w/s800/Ku%25C5%259Fatma-1453-Okay-Tiryakio%25C4%259Flu%5B1%5D.jpg"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 139px; height: 214px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisw6HsRQreds68WlGz9HI21EtgPaoAGSNkzeMaz5nUOjAYcaAm46bok9CLf5KbtafH961ilUS20eyINIiROGimEFiBuV0LPbsDaqmIixTjlyukt8gbVVRW3MKf09GdBJJwgUj20w/s800/Ku%25C5%259Fatma-1453-Okay-Tiryakio%25C4%259Flu%5B1%5D.jpg" alt="" border="0" /></a><br />1453 Kuşatma: Bu ve bundan sonraki 3 kitap ise Okay Tiryakioğlu'na ait. Kitaplar kadar yazarın yaşam tarzı ve hayatı da son derece ilginç. Yazar aynen Jack Kerouac'in Amerika'da yaşadığı gibi farklı bir coğrafya olan Asya steplerinde yaşayarak bu romanları yazıyor. 1453 Kuşatma da diğer bir Fatih Sultan Mehmet ve İstanbul kuşatması hikayesi, bu romanı diğerinden ayıran ise daha çok Fatih'in o süreç içerisindeki ruh halini anlatmaya çalışması.<br /><div style="clear: both;"></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilq9OkH8X17ekSbASlTD0V6N6Ska4-2CHLgJc-IlQZ9cNQWJj_9_MR18VOVLHRAVCB5yz_1deRIYPiXOmzj8dhfYxmnnwzhWD0LdASNnfqQWC6FxK4YC5Jp3Tiz-kmdTSCMtQBjg/"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 138px; height: 214px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilq9OkH8X17ekSbASlTD0V6N6Ska4-2CHLgJc-IlQZ9cNQWJj_9_MR18VOVLHRAVCB5yz_1deRIYPiXOmzj8dhfYxmnnwzhWD0LdASNnfqQWC6FxK4YC5Jp3Tiz-kmdTSCMtQBjg/" alt="" border="0" /></a><br />Yavuz: Yavuz Sultan Selim'in nasıl 8 sene kısa bir sürede devletin sınırlarını 2,5 katına çıkardığının, babası, kardeşleri ve dünyanın 2 büyük devleti olan Memlük ve Safevilerle olan mücadelesinin hikayesi. Romanı okurken saltanat süresi boyunca siz de Yavuz ile seferden sefere çıkıyor ve roman ilerledikçe nasıl ki etrafındakiler Yavuz'un korkusu ve azametiyle tir tir tiriyorsa siz de onların duygularını hissetmeye başlıyorsunuz.<br /><div style="clear: both;"></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirr9cRXBsHAMrT416zNIAbe1RO41w7PoTOIx-NUTtulrLsqJfMGsrmNmcFMOVGIvF__Bw4VD7jksBoBYMWyynY8B4HW2Ke4kEL9xfeqwIki6QyrjAP3tlkpHeabKzEiIx_I479Cw/"><img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 137px; height: 213px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirr9cRXBsHAMrT416zNIAbe1RO41w7PoTOIx-NUTtulrLsqJfMGsrmNmcFMOVGIvF__Bw4VD7jksBoBYMWyynY8B4HW2Ke4kEL9xfeqwIki6QyrjAP3tlkpHeabKzEiIx_I479Cw/" alt="" border="0" /></a> Kanuni: Kitabın alt başlığından da anlaşılacağı gibi babası Yavuz'un kılıçla yaptığını adaletle yapmaya çalışan ve dünyaya Muhteşem diye ün salmış bir hükümdarın hikayesi. Romanı okurken Muhteşem ünvanını tam anlamıyla hak ettiğini görüyorsunuz. Diğer kitaplarda da olan devşirme ve Türk vezirlerinin çekişmesi bu romanda daha fazla vurgulanıyor. Ayrıca roman yazımında da farklı bir teknik kullanılmış.<br /><div style="clear: both;"></div><br />İyi okumalar ...Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com1tag:blogger.com,1999:blog-10228790.post-89710364242584191322010-02-25T16:39:00.006+02:002010-02-26T07:56:59.147+02:00adding custom header to webservice calls and solution to saaj problemI have an application running on weblogic 10.3 that calls several other webservices. Everything was working like a charm until i need to add a SOAP Header to one of the these webservice calls. The SOAP header that i had to add is a custom security header defined as;<br /><br /><pre name="code" class="xml"><br /><soapenv:Header><br /> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><br /> <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><br /> <wsse:Username>__username__</wsse:Username><br /> </wsse:UsernameToken><br /> </wsse:Security><br /></soapenv:Header><br /></pre><br /><br />To add this header to webservice call i write the following code;<br /><br /><pre name="code" class="java"><br />import com.sun.xml.ws.api.message.Header;<br />import com.sun.xml.ws.api.message.Headers;<br />import com.sun.xml.ws.developer.WSBindingProvider;<br />....<br />private static final String SECURITY_NAMESPACE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";<br />private static final String MY_USERNAME = "my_username";<br />....<br />private void addUsernameSecurityHeader(UserService service) throws SOAPException {<br /> SOAPFactory soapFactory = SOAPFactory.newInstance();<br /> <br /> QName securityQName = new QName(SECURITY_NAMESPACE, "Security");<br /> SOAPElement security = soapFactory.createElement(securityQName);<br /> <br /> QName tokenQName = new QName(SECURITY_NAMESPACE, "UsernameToken");<br /> SOAPElement token = soapFactory.createElement(tokenQName);<br /> <br /> QName userQName = new QName(SECURITY_NAMESPACE, "Username");<br /> SOAPElement username = soapFactory.createElement(userQName); <br /> username.addTextNode(MY_USERNAME);<br /><br /> token.addChildElement(username);<br /> security.addChildElement(token);<br /> Header header = Headers.create(security);<br /> ((WSBindingProvider)servis).setOutboundHeaders(header); <br />}<br /></pre><br />after adding header to webservice calls following annoying problem popped up;<br /><br /><pre name="code" class="xml"><br />com.sun.xml.internal.messaging.saaj.soap.LocalStrings != com.sun.xml.messaging.saaj.soap.LocalStrings<br /></pre><br /><br />some of the pages on the web tell this is a java bug some other says this is a saaj version problem. Whatever, after working more than 8 hours i end up with the following solution;<br /><br />1. download saaj-impl-1.3.3.jar<br />2. create an endorsed folder under the JAVA_HOME/lib and copy the new saaj-impl.jar to here. (Be sure weblogic server uses this directory to run application server instances)<br /><br />I tried this solution with weblogic 10.3.0 and 10.3.2 and it's works ...Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com2tag:blogger.com,1999:blog-10228790.post-59244640727754982852010-02-22T10:15:00.025+02:002010-02-22T11:49:19.896+02:00Adding basic authentication mechanism to JAX-WS web services under Weblogic 10.3all of us know writing web services with JAX-WS is a piece of cake. But adding basic authentication to these web services under Weblogic 10.3 might be a little annoying. Here is the basic steps to add basic authentication:<br /><br />first we need to add following configuration to web.xml file of our application;<br /><pre name="code" class="xml"><br /><security-constraint><br /><web-resource-collection><br /><web-resource-name>protect</web-resource-name><br /><url-pattern>/*</url-pattern><br /><http-method>DELETE</http-method><br /><http-method>POST</http-method><br /><http-method>PUT</http-method><br /></web-resource-collection><br /><auth-constraint><br /><!-- role name with access --><br /><role-name>DEFINED_WEBLOGIC_ROLE</role-name><br /></auth-constraint><br /></security-constraint><br /><!-- BASIC authentication --><br /><login-config><br /><auth-method>BASIC</auth-method><br /><realm-name>myrealm</realm-name><br /></login-config><br /><!-- Define security roles --><br /><security-role><br /><description>Role</description><br /><role-name>DEFINED_WEBLOGIC_ROLE</role-name><br /></security-role><br /></pre><br />after that we need to add following configuration to weblogic.xml file<br /><pre name="code" class="xml"><br /><security-role-assignment><br /><role-name>DEFINED_WEBLOGIC_ROLE</role-name><br /><principal-name>DEFINED_WEBLOGIC_USER</principal-name><br /></security-role-assignment><br /></pre><br />and that's the all of the modifications we have to make in our application. Now we need to define role (DEFINED_WEBLOGIC_ROLE) and user (DEFINED_WEBLOGIC_USER) in the weblogic by using management console and following <span style="font-style: italic;">Security Realms -> myrealm -> Users and Groups -> Users/Groups</span> menu steps. Don't forget to add the new created user to the group you just defined.<br /><br />After restarting your server and application you can check security configuration by using following code<br /><pre name="code" class="java">UserOperations userOperations = (new UserOperationsService()).getUserOperationsPort();<br />BindingProvider provider = (BindingProvider) userOperations;<br />provider.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "username");<br />provider.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password");<br /></pre><br />or using <a href="http://www.soapui.org/">soapui</a>, you can set <span style="font-style: italic;">username </span>and <span style="font-style: italic;">password </span>in the Aut tab of the request as shown the picture below;<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-l9D0zZmrBiKCwRqHQvuks43BOh9t27d-jYu0BWFBQ3nD-n7CbGjK_dY5tNZTc95Am7pqxgu3if8DszMyByBcXR7P6Fhu1EqhhtMGNt8KeZ3NjUnbQ5LthRazcMkOISBxWL-8xA/s1600-h/blog.jpg"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 244px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-l9D0zZmrBiKCwRqHQvuks43BOh9t27d-jYu0BWFBQ3nD-n7CbGjK_dY5tNZTc95Am7pqxgu3if8DszMyByBcXR7P6Fhu1EqhhtMGNt8KeZ3NjUnbQ5LthRazcMkOISBxWL-8xA/s400/blog.jpg" alt="" id="BLOGGER_PHOTO_ID_5440996269233089346" border="0" /></a>Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com0tag:blogger.com,1999:blog-10228790.post-25796489207676301652008-11-16T20:57:00.004+02:002008-11-16T21:17:14.722+02:00Kişisel Hayatta ScrumScrum'un en faydalı yönlerinden biri de kolayca özelleştirilerek yazılım geliştirme projelerinin dışında da uygulanabilmesi. (Scrum hakkında daha fazla <a href="http://mhazer.blogspot.com/2008/10/agile-yazlm-gelitirme-ve-scrum.html">bilgi için</a>). Bence bunun en önemli sebebi Scrum'un çok fazla kural ve kaidesinin olmaması ve temel prensiplerinin insanların düşünce ve çalışma yapısına uygun olması. Örneğin Maryland üniversitesinden Michael Hicks and Jeffrey S. Foster Scrum'u doktora öğrencilerinin katıldığı akademik araştırma gruplarında uygulamak üzere <a href="http://www.cs.umd.edu/%7Emwh/papers/hicks08scram.html">SCRAM</a> adı altında özelleştirmişler.<br /><br />Bunun gibi örneklerle karşılaştıkça ve Scrum hakkında daha fazla bilgi edindikçe acaba "Scrum'u kişisel hayatıma uygulayacak şekilde nasıl özelleştirebilirim?" diye düşünmeye başladım. Ufak bir araştırma sonucunda bu düşünceyi bir çok insanın hayatına uyguladığını ve olumlu sonuçlar elde ettiklerini gördüm. Ve Scrum'u aşağıdaki şekilde özelleştirip elimden geldiği kadar günlük hayatıma uygulamaya başladım;<br /><ul><li>İlk adım olarak kısa zamanda yapmam gereken ve 6 aylık zaman içerisinde yapmayı planladıklarımı öncelik sırasına göre yazarak bir liste oluşturdum (<span style="font-weight: bold;">Product Backlog</span>). Bu listeye zaman içerisinde yeni şeyler ekliyorum, yapmaktan vazgeçtiklerimi çıkarıyorum veya öncelik sıralarını değiştiriyorum. (Bunun için bir text dosyasını veya bir template olarak <a href="http://agilesoftwaredevelopment.com/scrum/simple-product-backlog">bu excel dosyasını</a> kullanabilirsiniz.)<br /></li></ul><ul><li>İkinci adım olarak her pazar akşamı o hafta içerisinde yapmayı planladıklarımı bu listeden alıp ve herbir iş bitirmem için gereken zamanı tahmin ederek ayrı bir liste oluşturuyorum. (<span style="font-weight: bold;">Sprint Backlog</span>). (Yine bunun için basit bir text dosyasını veya <a href="http://agilesoftwaredevelopment.com/scrum/simple-sprint-backlog">bu excel dosyasını </a>kullanabilirsiniz.)<br /></li></ul><ul><li>Ve her akşam yatmadan önce Sprint Backlog'u inceleyip, bitirdiğim işleri işaretleyerek Scrum'un en faydalı adımı olan Daily Sprint Meeting'i uyguluyorum.</li></ul><ul style="text-align: center;"><li>Bugün neler yaptım? </li><li>Neler yapmayı plandıklarıma engel oldu ve nelerle karşılaştım?</li><li>Yarın neler yapacağım?</li></ul>Yaklaşık 3-4 haftadır uyguluyorum ve gerçekten faydasını görmeye başladım. Eğer siz de zamanı iyi kullanamadığınızı, işlerin bir türlü yetişmediğini ve kendinize zaman ayıramadığınızı düşünüyorsanız Scrum'u kendize göre özelleştirip uygulayabilirsiniz, eminim ki daha ilk haftadan faydasını görmeye başlayacaksınız.<br /><br />Kaynaklar:<br /> http://agilesoftwaredevelopment.com/<br /> http://www.cs.umd.edu/~mwh/papers/hicks08scram.html<br /> http://www.agileadvice.com/archives/2006/07/personal_scrum.htmlMurat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com0tag:blogger.com,1999:blog-10228790.post-64453277912305052522008-10-22T23:57:00.019+03:002010-08-09T11:23:04.071+03:00Agile Yazılım Geliştirme ve ScrumHepimiz içinde bulunduğumuz projelerde çeşitli sorunlarla karşı karşıya kalıyoruz. Bu sorunlar projelerin zamanında bitirilememesine, müşterinin isteklerine uymayan yazılımlar üretilmesine ve hatta projelerin başarısız olmasına bile sebep olabiliyorlar. Ben kişisel olarak projelerin gidişatına ciddi etkilerde bulunan sorunların kaynağının geleneksel yazılım geliştirme süreçleri olduğunu düşünüyorum. İşte bu yazımda başlıktan da anlaşılabileceği gibi yazılım geliştirme süreçlerinden kaynaklanan sorunlara çözüm olarak üretilen Agile Yazılım Geliştirme'den ve Scrum'dan kısaca bahsedeceğim.<br /><br />Projelerde karşılaştığım sorunlardan konumuza uygun olanları şu şekilde sıralayabilirim;<ul><li> teknolojinin çok hızlı gelişmesi ve bu yeniliklerin projeye uygulanamaması</li><li>müşterilerin proje başlangıcında büyük resmin tamamını yani bütün gereksinimleri ortaya koyamamaları</li><li> müşterilerin gereksinimlerinin çok çabuk ve sık değişmesinden dolayı müşterilerin güncel ihtiyaçlarına cevap veremeyen bir yazılım ortaya çıkması<br /></li><li> projelerin yönetiminin gittikçe daha zor ve karmaşık hale gelmesi (bir yazılım geliştirme sürecinde 102 ayrı role'un olduğunu duymuştum)</li></ul> Dünyanın her köşesindeki yazılım geliştirme takımı gibi bu sorunlarla karşılaşan 17 profesyonel Amerika'nın Utah eyaletinde çözüm üretebilmek, müşteri memnuniyetini arttırabilmek ve başarısız olan projelerin oranını düşürmek için 2001 yılının Şubat ayında bir araya geliyorlar ve aşağıdaki manifestoyu ortaya koyuyorlar;<blockquote><br /><span style="font-style: italic;">The Agile Manifesto</span> <span style="font-style: italic;">We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:</span><br /><br /><span style="font-style: italic;">• Individuals and interactions over processes and tools</span> <span style="font-style: italic;"><br />• Working software over comprehensive documentation</span> <span style="font-style: italic;"><br />• Customer collaboration over contract negotiation</span> <span style="font-style: italic;"><br />• Responding to change over following a plan</span> <span style="font-style: italic;"><br /><br />That is, while there is value in the items on the right, we value the items on the left more.</span> <span style="font-style: italic;"><br /><br />Copyright 2001, the Agile Manifesto authors</span><br /><br />(daha fazla bilgi için <a href="http://www.agilemanifesto.org/">agilemanifesto.org</a>)<br /><br /></blockquote>Manifestonun açıkca belirtiği gibi Agile geliştirme sürecinin amacı; plan, dökümantasyon, proses ve araçlardan ziyade müşteri memnuniyeti, çalışan yazılım, uyumlu yazılım geliştirme takımı ve müşteri isteklerinde oluşan değişikliklere göre kısa zamanda geliştirilebilecek yazılımlar üretmek (buradan Agile yazılım geliştirmenin plansız, dökümansız yazılım geliştirmeyi teşvik ettiği sonucuna varmamak gerekiyor çünkü Agile yazılım geliştirme sadece bunlardan daha önemli kavramların olduğunu vurguluyor). "Agile yazılım geliştirme" süreçlerin, dökümanların ve dizaynların proje başlangıcında tümüyle tanımlanmasını değil, geliştirme aşamasında karşılaşılan ve değişen koşullara göre gerekli kararların verilmesi gerektiğini savunuyor.<br /><br />Scrum'u Agile yazılım geliştirme metodunun yukarıda bahsettiğimiz presiplerine uygun olarak geliştirilmiş ve tasarlanmış bir metod olarak tanımlayabiliriz. (Diğer metodlardan XP ve Lean Software Development hakkında detaylı bilgilere <a href="http://en.wikipedia.org/wiki/Extreme_Programming">buradan</a> ve <a href="http://en.wikipedia.org/wiki/Lean_software_development">buradan</a> ulaşabilirsiniz). Scrum diğer agile yöntemleri gibi çok fazla kuralı olmayan, sadece belirli prensipleri olan ve kolayca projelere uygulanabilecek bir yöntem.<br /><br />Scrum'un genel akış şeması;<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://sites.google.com/site/murathazer/ScrumOverviewDiagram.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="https://sites.google.com/site/murathazer/ScrumOverviewDiagram.png" alt="" border="0" /></a><br />Scrum'ı sadece yazılım geliştirmek için değil hayatta karşılaşabileceğiniz her türlü olaya uygulanabilecek bir yöntem olarak düşünebilirsiniz. Şimdi kısaca yukarıdaki şemada geçen kavramları genel bir Scrum planlaması ve akışı içinde adım adım anlatmaya çalışacağım.<br /><br />1- Roller (Roles)<br /><br /><ul><li> Ürün Sahibi (Product Owner)</li><li> Scrum Yöneticisi (Scrum Master)</li><li> Takım Üyesi (Team Member)</li></ul><br />2- Toplantılar (Meetings)<br /><br /><ul><li> Sprint Planlama (Sprint Planning)</li><li> Sprint gözden geçirme (Sprint Review)</li><li> Günlük Scrum toplantısı (Daily Scrum)</li></ul><br />3- Kavramlar (Artifacts)<br /><br /><ul><li> Ürün gereksinim dökümanı (Product Backlog)</li><li> Sprint dökümanı (Sprint Backlog)</li><li> Sprint kalan zaman grafiği (Burndown Chart)</li></ul><br />Projenin başlangıç adımı olarak yazılım gereksinimlerinin (requirements, features) <b>ürün sahibi</b> tarafından ü<b>rün gereksinim dökümanı</b>na yazılmasını düşünebiliriz. Bu dökümanın sahibi <b>ürün sahibi</b>dir ve gereksinimleri önceliklerine (priority) göre sıralar. <b>Ürün sahibi</b> bu dökümana yazılım geliştirme süresince eklemeler ve çıkarmalar yapıp öncelikleri değiştirme hakkına sahiptir. Böylece <b>ürün sahibi</b> değişen ihtiyaçlarına uygun olarak bir yazılıma sahip olma şansını yakalamış olur.<br /><br />Gereksinimler belirlendikten sonra yazılım geliştirme takımı <b>Sprint planlama toplantısı</b>nda bir sonraki Sprint'de geliştirilmek üzere <b>ürün gereksinim dökümanı</b>ndan <b>ürün sahibinin</b> belirlediği yüksek öncelikli gereksinimleri seçerek <b>Sprint dökümanı</b>na aktarırlar. Bu toplantıya <b>Scrum yöneticisi</b>, <b>ürün sahibi</b> ve <b>takım üyeleri</b> katılırlar ve Sprint süresi en az 2 en fazla 4 hafta olarak belirlenir.<br /><br /><b>Sprint planlama toplantıları</b>nı <b>Scrum yöneticisi</b> yönetir. <b>Scrum yöneticisi</b>nin asıl görevi Scrum'un temel prensiplerinin projeye uygulanmasını, bu prensiplerin <b>takım üyeleri</b>nce doğru şekilde anlaşılmasını sağlamaktır. En önemli görevi ise Sprint süresince takımı dışardan gelebilecek etkilere karşı korumak ve takımın ihtiyaçlarını karşılamaktır.<br /><br />Scrum her Sprint'in sonunda mutlaka <b>ürün sahibi</b>ne kullanabileceği bir yazılım sağlamayı hedefler, bundan dolayı planlanan Sprint süresi (2-4 hafta) asla uzatılmaz. Fakat eğer bir gereksinim belirlenen Sprint süresi içerisinde gerçekleştirilemeyecekse bir sonraki Sprint'e aktarılabilir. Ve aynı şekilde eğer Sprint süresi bitmeden <b>Sprint dökümanı</b>ndaki gereksinimlerin hepsi tamamlanmışsa <b>ürün gereksinim dökümanı</b>ndan yeni gereksinimler <b>Sprint dökümanı</b>na aktarılabilir.<br /><br /><b>Sprint planlama toplatısı</b>nda belirlenen gereksinimler <b>takım üyeleri</b>nce küçük görevlere (tasks) bölünerek takım üyelerine geliştirilmek üzere atanır. Scrum takımı geleneksel yazılım geliştirme süreçlerinden farklı olarak kesin rollere (architect, tester, developer, disagner vb.) sahip değildir. Scrum takımındaki bütün üyeler çapraz görevlerde yer alabilirler, böylece kodun tek bir kişiye bağımlılığı riski ortadan kaldırılmış olur. <b>Sprint dökümanı</b>nın sahibi bu sefer ürün sahibi değil yazılım geliştirme takımıdır, dolayısıyla bu dökümana <b>ürün sahibi</b> değil <b>takım üyeleri</b> katkıda bulunurlar.<br /><br /><b>Sprint dökümanı</b>na aktarılan gereksinimlerin tahmini geliştirme süresi saat bazında <b>takım üyeleri</b>nce belirlenir ve Sprint boyunca sürekli olarak tahmini bu zamanlar güncellenerek <b>Sprint kalan zaman grafikleri</b> (burndown chart) oluşturulur. Böylece Sprint süresince <b>ürün sahibi</b> ve <b>scrum yöneticisi</b> Sprint'in genel gidişi hakkında bilgi sahibi olur, aynı zamanda <b>takım elemanları</b> da kalan iş sürelerini ve harcadıkları zamanı takip edebilirler.<br /><br />Scrum'un belki de verimliliği artıran en önemli kavramlarından biri de <b>günlük Sprint toplantıları</b>dır. Bu toplantılar her gün belirli saatlerde farklı bir <b>takım üyesi</b>nin liderliğinde ayak üstü yapılır ve en fazla 15 dakika sürer. Bu toplantılarda her takım üyesi şu 3 soruya cevap verir;<br /><br /><ul><li>Dün ne yaptım?</li><li>Bugün ne yapacağım?</li><li>Önümde olan engeller ve karşılaştığım sorunlar neler?</li></ul><br />bu toplatılara herkesin zamanında ve davet edilmeden katılması ve uzun sürmemesi çok önemlidir. Bu toplatılar sayesinde <b>takım üyeleri</b>nin her biri diğer üyelerin nelerle uğraştığını öğrenme fırsatını edinirler ve çalışacakları işleri diğerleriyle paylaştıkları için işlerine daha iyi konsantre olabilirler.<br /><br />Her Sprint'in bitiminde ortaya konulan ürün hakkında geri besleme alabilmek için yazılımla alakalı her türlü kişiye (Ürün sahibi, pazarlama, diğer takımlar vs.) açık <b>Sprint gözden geçirme toplantısı</b> yapılır. Bu toplantının amacı yazılımın <b>ürün sahibinin</b> gereksinimlerine uygun olarak geliştirildiğinden emin olmaktır. Bu sayede müşterinin gereksinimleri bir şekilde yanlış anlaşılmış ise bu farkedilir ve bir sonraki Sprint'de bu hataların önüne geçilir.<br /><br />Bu adımlar <b>ürün sahibi</b>nin <b>ürün gereksinim dökümanı</b>na yazdığı, zaman içinde geliştirip, değiştirdiği gereksinimler bitene kadar tekrarlanır.<br /><br />Umarım burada anlattıklarım Agile ve Scrum hakkında bir fikir sahibi olmanızı sağlamıştır. Özellikle Scrum'un projelerinizdeki başarı oranlarını ve kişisel olarak verimliliğinizi arttıracağına inanıyorum. Scrum ve Agile ilgili deneyimlerinizi ve sorularınızı paylaşabilirseniz sevinirim.<br /><br />Scrum ile ilgili daha detaylı bilgilere aşağıdaki linklerden ulaşabilirsiniz.<br /><br />Kaynaklar:<br /><a href="http://agilemanifesto.org/">http://agilemanifesto.org/</a><br /><a href="http://www.pragprog.com/titles/pad/practices-of-an-agile-developer">http://www.pragprog.com/titles/pad/practices-of-an-agile-developer</a><br /><a href="http://en.wikipedia.org/wiki/Agile_software_development">http://en.wikipedia.org/wiki/Agile_software_development</a><br /><a href="http://www.ibm.com/developerworks/rational/library/08/0701_ellingsworth/">http://www.ibm.com/developerworks/rational/library/08/0701_ellingsworth/</a><br /><a href="http://scrum-master.com/en/default.aspx">http://scrum-master.com/en/default.aspx</a><br /><a href="http://www.scrumalliance.org/">http://www.scrumalliance.org/</a>Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com8tag:blogger.com,1999:blog-10228790.post-36029285809307949762008-10-16T23:45:00.018+03:002008-10-17T22:24:13.059+03:00JBoss Seam kitapları ....Bir önceki yazımda JBoss Seam'in klasik Java Enterprise Development (JEE)'a kazandırdığı çeviklikten, programlama modeline, metodolojisine getirdiği <a href="http://solutionsfit.com/blog/2008/09/29/seam-and-web-beans-not-just-evolutionary-revolutionary/">devrim</a> niteliğindeki özelliklerinden bahsetmeye çalıştım. Yeni bir teknoloji öğrenmenin en iyi yolunun o konu hakkında yazılmış kaliteli kitap(lar)ı okumak olduğunu düşünenlerdenim. Bu yazımda da Seam hakkında yazılmış kitapları ve bu kitaplar hakkındaki düşüncelerimi paylaşmaya çalışacağım.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfOFu4biSUNsG_KR_SXOFgoa0KOKeG_t2_-R44682iiRjPTi3mdic8XRxnLxhAILBoB_mqga4C5bJ44CUJrGESeRo1s6cw-djIRnImzThyz0boQnXW5CAiApP9UdLEQIa2x_cdeQ/s1600-h/seaminaction.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 147px; height: 147px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfOFu4biSUNsG_KR_SXOFgoa0KOKeG_t2_-R44682iiRjPTi3mdic8XRxnLxhAILBoB_mqga4C5bJ44CUJrGESeRo1s6cw-djIRnImzThyz0boQnXW5CAiApP9UdLEQIa2x_cdeQ/s200/seaminaction.jpg" alt="" id="BLOGGER_PHOTO_ID_5257856244502705570" border="0" /></a>"<a href="http://www.manning.com/dallen/">Seam in Action</a>" Seam'i en kapsamlı şekilde anlatan, okunması rahat ve bol örnekleri olan bir kitap. Manning yayınevinin diğer kitapları gibi bu kitap da oldukça kaliteli ve çok iyi edit edilmiş. Bu kitabı <a href="http://www.manning.com/about/meap.html">Early Access</a> seviyesinden beri takip ediyorum ve her sayfasından yeni bir şeyler öğrendim diyebilirim. Ayrıca referans kitabı olarak kullanılabilecek şekilde kapsamlı olduğu için başucu kitabı niteliğinde. Fakat kitap Seam'e ilk başlayanlar için biraz ağır gelebilir onun için biraz deneyim kazanıldıktan sonra okunmalı. (5/5)<br /><br /><br /><br /><hr /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeWCGMeZY1wtfNiKb2gA_qISOX0ZxTW6yHk4F3e29-S0U8Rv-nyeVIdOZk2TiTo5P1yyvOQzsR_MeotOSxQqbOGWULQ3GUlQRcVX_Sq7rge0wPIlnGram4N56yHHQTwf_KAF3ZGQ/s1600-h/9781590597927.gif"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeWCGMeZY1wtfNiKb2gA_qISOX0ZxTW6yHk4F3e29-S0U8Rv-nyeVIdOZk2TiTo5P1yyvOQzsR_MeotOSxQqbOGWULQ3GUlQRcVX_Sq7rge0wPIlnGram4N56yHHQTwf_KAF3ZGQ/s200/9781590597927.gif" alt="" id="BLOGGER_PHOTO_ID_5257860882371091058" border="0" /></a>Apress yayınevinden çıkan "<a href="http://www.apress.com/book/view/1590597923">Beginning JBoss Seam</a>" özellikle yeni başlayanlar için çok yararlı diyebilirim. Özellikle Seam'in getirdiği yeniliklerden Bijection ve Web Conversation kavramının temellerini başarılı ve kolay anlaşılır bir şekilde anlatıyor.<br />(4/5)<br /><p><br /></p><p><br /></p><br /><br /><hr /><p></p><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdpbupq2y8XIWKEDdY3U1tYWZDOrx82GbtNDcFQPYnUKk6RcXAnUesGklg8XoN9QsOll7Avj2NezxRn6N7JxgZ6p1HsBM8eD7W5dxbPIAvExDrJqTp_Q05x2So-tzKJPSvsyrfaQ/s1600-h/seamyuan.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 157px; height: 157px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdpbupq2y8XIWKEDdY3U1tYWZDOrx82GbtNDcFQPYnUKk6RcXAnUesGklg8XoN9QsOll7Avj2NezxRn6N7JxgZ6p1HsBM8eD7W5dxbPIAvExDrJqTp_Q05x2So-tzKJPSvsyrfaQ/s200/seamyuan.jpg" alt="" id="BLOGGER_PHOTO_ID_5257861654872791154" border="0" /></a><br />Seam'in 1.x versiyonu sürecindeki geliştiricilerinden<span> Michael Juntao Yuan'ın yazarlığını yaptığı </span>"<a href="http://www.amazon.com/Seam-Framework-Experience-Evolution-JBoss/dp/0137129394/ref=pd_bbs_sr_5?ie=UTF8&s=books&qid=1224268151&sr=8-5">JBoss Seam: Simplicity and Power Beyond Java</a>" <span> bu kitap yine Seam'e yeni başlayanlar için güzel bir kaynak. Şu anda satışta olan versiyon Seam 1.x sürümünü kapsıyor fakat yakın zamanda Seam 2.x'i kapsayan <a href="http://www.amazon.com/Seam-Framework-Experience-Evolution-JBoss/dp/0137129394/ref=pd_bbs_sr_5?ie=UTF8&s=books&qid=1224268151&sr=8-5">yeni sürümü</a> yayınlanacak.</span><br />(4/5)<br /><p><br /></p><p><br /></p><hr /><p></p><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX5y3XZ1GIUWAqSagYGlKtYFVwlHvnfZW3UiEAVjMSwsNFYJw2Plt0Ib13vxdY6PvXC9mB7b_Sk62GJMdCCbsUi2SkRqTirVRsJO4rWvi9bsXAyAn3CXTxHTeAPeD_4tMPk3c1Sg/s1600-h/practical.gif"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX5y3XZ1GIUWAqSagYGlKtYFVwlHvnfZW3UiEAVjMSwsNFYJw2Plt0Ib13vxdY6PvXC9mB7b_Sk62GJMdCCbsUi2SkRqTirVRsJO4rWvi9bsXAyAn3CXTxHTeAPeD_4tMPk3c1Sg/s200/practical.gif" alt="" id="BLOGGER_PHOTO_ID_5257861389591290786" border="0" /></a><br />Apress yayınevinden çıkan diğer bir kitap "<a href="http://www.apress.com/book/view/1590598636">Practical JBoss Seam Projects</a>". Henüz bu kitabı okumaya zamanım olmadı fakat okuma listemde üst sıralarda. Okuyan arkadaşlar fikirlerini paylaşabilirlerse çok sevinirim.<br />(?/5)<br /><p><br /></p><p><br /></p><p><br /></p><hr /><p></p><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5kAHqmYAhtGOL3oOK2NkVLfCojALMxV7tVpddyorhwaZEU3kslWQnnf5UxbkVahPI_WzfNw8X0bBrKcm93pjQrJn_1owdI0EqjCHPDmvQ7C_RX3IVJfqzZl-p3RNIAenNKewstA/s1600-h/hibernateinaction.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5kAHqmYAhtGOL3oOK2NkVLfCojALMxV7tVpddyorhwaZEU3kslWQnnf5UxbkVahPI_WzfNw8X0bBrKcm93pjQrJn_1owdI0EqjCHPDmvQ7C_RX3IVJfqzZl-p3RNIAenNKewstA/s200/hibernateinaction.jpg" alt="" id="BLOGGER_PHOTO_ID_5257862096119924738" border="0" /></a><br />Seam'in ve Hibernate'in yaratıcısı olan Gavin King'in yazarlığını yaptığı "Java Persistence with Hibernate"'in son ünitesi Seam'e ayrılmış. Seam'in ortaya çıkış sürecini ve temel özelliklerini yaratıcısının kaleminden okumak isteyenler mutlaka göz atmalılar.<br />(5/5)<br /><p></p>Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com2tag:blogger.com,1999:blog-10228790.post-39450733894942659852008-10-07T23:44:00.012+03:002008-10-08T00:28:45.449+03:00Agile Enterprise JavaEnterprise Java programlama ile uğraşmanın en avantajlı yanlarından biri yüksek kaliteli açık kaynak kodlu kütüphane,framework'lerin bulunması. Eminim benim gibi bir çok kişi bu kütüphanelerden yararlanıyordur, artık Hibernate, EclipseLink, iBatis, Spring, Guice, JSF, Struts, Grails, Stripes, ZK, GWT, Wicket, Maven, JUnit vs. olmadan yazılım geliştirmeyi düşününemiyorum. Fakat alternatiflerin çokluğu bazen büyük bir dezavantaja dönüşebiliyor. Bu kütüphaneler arasından geliştirilecek projeye uygun olanları belirlemek ve belirli bir bilgi seviyesine ulaşmak çok kolay bir iş değil. Uygun teknolojileri seçsek bile birbirleriyle uyumlu halde çalıştırmak için çok sayıda konfigurasyon kodu (boilerplate code) ve dosyası yazmamız gerekiyor. Örneğin basit bir Hibernate, Spring, JSF uygulaması yazmak istediğimizde sadece bu üçlüyü bir arada çalıştırmak için yazacağımız konfigurasyon kodları azımsanmayacak derecede çok, ayrıca geliştirme esnasında tekrarlanan kodlar (i.e. faces-config.xml, application-context.xml) sıkıcı olmaya başlıyor ve asıl yoğunlaşmamız gereken programın iş mantığına yeterli zaman ayıramıyoruz.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkIUXzqFcdAMKoPOso8WkuxpRmhVU0K0OuloyQAHCEmw1YIWkmKoTtP7V63xIMpe4RwMKZg8gPcCmXyjpAAPJ1iI3inkkX1cYaR1XcC-mxdG4zu_tC6Ynz7oJ5jcZ44cf5f2kJYQ/s1600-h/framewokrs.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkIUXzqFcdAMKoPOso8WkuxpRmhVU0K0OuloyQAHCEmw1YIWkmKoTtP7V63xIMpe4RwMKZg8gPcCmXyjpAAPJ1iI3inkkX1cYaR1XcC-mxdG4zu_tC6Ynz7oJ5jcZ44cf5f2kJYQ/s320/framewokrs.jpg" alt="" id="BLOGGER_PHOTO_ID_5254516640638813026" border="0" /></a><br />Bu dezavantajlar son zamanların belki de en popüler konularından biri olan "Agile Software Development" ile tezat oluşturuyordu. Java topluluğunun bu soruna nasıl bir çözüm getireceğini ve Java ile program geliştirenlerin başka programlama platformalarına geçmemesini nasıl engelleyeceğini çok merak ediyordum. Ruby,Rails vb. platformlar topluluktaki ünlü Java Guru'larının bile ilgisini çekiyordu, Craig McClanahan (struts'un yaratıcısı) Java'dan soğuduğunu ve artık Ruby ile ilgileneceği söylüyordu. İşte benim fikrime göre Java bu çıkmazdan iki önemli framework ile çıkış sağladı. Birincisi Hibernate'in yaratıcısı Gavin KING'in <a href="http://www.jboss.org/jbosslabs/transcripts/King_JavaOne2007.html">fikirlerinden</a> oluşturulan <a href="http://www.seamframework.org/">JBoss Seam</a>, diğeri ise <a href="http://groovy.codehaus.org/">Groovy </a>& <a href="http://grails.org/">Grails</a>. Grails ve Groovy üzerine yazmayı sonraya erteleyerek bu yazıda Seam ve getirdiklerini başlıklar halinde kısa kısa anlatmaya çalışacağım.<br /><br />Enterprise Java programlamayla uğraşan çoğu insanın EJB 2 ve Servlet zamanlarından pek güzel anıları yoktur. Çok sayıda XML konfigurasyon dosyası, EJB 2.0'ları öğrenmenin ve kullanmanın zorluğu, code-compile-deploy-test süresinin uzun ve sıkıcı olması gibi bir sürü sıkıntı. Bu sıkıntıların had safhaya vardığı süreçte ortaya çıkan <a href="http://www.springframework.org/">Spring</a> ve <a href="http://www.hibernate.org/">Hibernate</a> vaad ettikleriyle ve başarılarıyla ben de dahil olmak üzere Java ile uğraşanların dikkatini çekti ve çoğu geliştirici kısa sürede Spring,Hibernate ile program geliştirmeye başladı. Spring uzun zamandan beri bilinen Dependency Injection ve Aspet Oriented Programming'e yeni bir bakış açısı getirdi ve Java topluluğunda büyük bir devrim yaptı. Öyle ki Spring ve Hibernate'in bu başarısı örnek alınarak EJB 3.0 standartı çıkartıldı ve EJB ile programlama modeli Plain Old Java Objects (POJO) seviyesine indirgenip EJB ile program geliştirme Spring,Hibernate kadar kolay hale getirildi. Spring 1.x sürümü ve Hibernate çok başarılıydı fakat EJB2.0'da olan sorun burada da vardı; XML karmaşası ve katmanları birbirine bağlamak için yazılan ektra kodlar ve konfigurasyonlar. Bu sorunlar Java 5 ile gelen annotations yardımıyla büyük bir oranda çözüme kavuştu fakat XML dosyaları ve konfigurasyon kodları hala çok fazla emek ve zaman gerektiriyordu.<br /><br />Spring,Hibernate, EJB3 iş (business) ve veritabanı (database) katmanına kısmi bir çözüm getirdi fakat web arayüzündeki sorunlara uygun çözüm ise hala tam olarak bulunamadı (struts, struts2, Spring MVC, Tapestry, GWT, Grails, Wicket vs.) diyebiliriz. Bu sorunlar için son zamanlardaki en iyi çözümlerden birinin Java Server Faces (JSF) olduğunu düşünüyorum. JSF'nin sorunları ise sadece XML konfigurasyonları ile bitmiyor;<br />+ Yüksek öğrenme eğrisi (high learning curve)<br />+ Karmaşık yaşam süreci<br />+ Bookmark eksikliği, her türlü eylemin HTTP POST üzerinden yapılması vs....<br />Ama bunların yanında JSF'nin çok iyi düşünülmüş bir yaşam sürecinin olması, toplulukta standart olarak kabul edilmiş olması ve açık kaynak kodlu AJAX kütüphanelerinin olması gibi (icefaces,richfaces) büyük avantajları mevcut.(Açıkcası SEAM olmadan JSF geliştirmek çok can sıkıcı olabiliyor)<br /><br />JSF for nonbelievers;<br /><a href="http://www.ibm.com/developerworks/java/library/j-jsf1/index.html?S_TACT=105AGX02&S_CMP=EDU">1</a>, <a href="http://www.ibm.com/developerworks/java/library/j-jsf2/index.html?S_TACT=105AGX02&S_CMP=EDU">2</a>, <a href="http://www.ibm.com/developerworks/java/library/j-jsf3/index.html?S_TACT=105AGX02&S_CMP=EDU">3</a>, <a href="http://www.ibm.com/developerworks/java/library/j-jsf4/index.html?S_TACT=105AGX02&S_CMP=EDU">4</a><br /><br />Enterprise Java'daki Agile Development sorununa çare olmak, JSF ile web geliştirmenin sorunlarını gidermek, Web arayüzü ile İş/Veri katmanı arasındaki sorunları gidermek ve diğer platformlarda olan "Convention over Configuration (Configuration by Exception)" mantığını Java'ya taşımak, Java EE'yi (EJB/POJO/Spring,JSF/GWT/Wicket...,JPA/Hibernate) tek bir çatı altında birleştirmek (unification) üzere geliştirilen JBoss SEAM bence amacını hakkıyla yapıyor. Bütün özelliklerini burada uzun uzun tek bir başlık altında anlatmam imkansız, sadece maddeler halinde SEAM ile neler yapabilabileceğini anlatmaya ve daha detaylı bilgiler alabileceğiniz kaynakları vermeye çalışacağım. Fakat şundan emin olabilirsiniz ki JBoss SEAM ile uğraşmaya başladığınız andan itibaren Enterprise Java ve programlama hakkında bildiklerinizin çoğu şey değişmeye başlayacak ve hiç birşey eskisi gibi olmayacak ....<br /><br />+ seam-gen; rails ve grails'de bulunan proje oluşturma, nesne ekleme vb. işler için kullanılan komut satırı tabanlı (eclipse entegrasyonu bulunuyor) ant betiği.<br />+ Configuration by Exception; proje oluşturduğunuz zaman yapmamız gereken konfigurasyonlar yok denecek kadar az. Sadece olağandan farklı bir davranışa ihtiyaç duyduğunuz zaman konfigurasyon yapmamız yeterli oluyor.<br />+ Bijection; Inversion of Control (IoC) veya Dependency Injection olarak bilinen yöntemin bir üst seviyesi veya dinamik IoC diye adlandırabiliriz. Böylece SEAM nesnelerine sadece bağlı oldukları nesneler verilmekle kalmıyor aynı zamanda SEAM nesneleriyle dinamik olarak SEAM container'ına Seam nesneleri gönderebiliyoruz.<br />+ Annotations desteği; bu sayede XML kullanımı minimum'a iniyor, tabii ki Seam annotations kullanmayı zorunlu kılmıyor eğer istersek annotations yardımıyla yaptığınız herşeyi XML ile yapabiliyoruz.<br />+ Aspect Oriented Programming desteği<br />+ Asenkron haberleşme için Events API'si ve Quartz desteği ("Observer Pattern" uygulayarak nesneleri birbirine daha az bağımlı (loosecoupled) hale getirebiliyoruz)<br />+ Servlet API'sinde bulunan application, session ve request scope'larına ek olarak Conversation, Page ve Business scopeları.<br />+ POJO programla modeli; EJB3 veya POJO arasındaki tercih bize kalıyor ayrıca bunlar arasında geçişler çok kolay yapılabiliyor ve EJB3'den POJO programlama modeline geçtiğimizde fonksiyonalite kaybı yaşamıyoruz.<br />+ Groovy desteği; Seam component'lerini groovy ile yazabiliyoruz<br />+ Web arayüzünde sadece JSF yerine Wicket, GWT, Tapestry veya Flex kullanabiliyoruz.<br />+ Rails ve Grails'de kullanılan Active Record'a benzeyen fakat biraz daha farklı olan Home Pattern yardımıyla veri tabanı objelerini yönetebiliyoruz.<br />+ Çok kolay bir şekilde normal HTML kodu yazarmış gibi PDF, RTF , grafik ve email gibi zengin içerikler oluşturabiliyoruz.<br />+ Spring ile güçlü entegrasyon; spring ile yazılmış projeler SEAM getirdiği yeniliklerden basit konfigurasyon ile yararlanmaya başlayabiliyor.<br />+ WebService ve RESTfull URL desteği<br />+ Basit veya gelişmiş güvenlik ayarları; sayfa, sınıf ve method bazında rol tabanlı güvenlik ayarlamaları yapabiliyoruz<br />+ jBPM ve Drools desteği<br />+ Javascript remoting kütüphanesi<br />+ Sanılanın aksine Seam ile geliştirilen programlar sadece Jboss AS'de çalışmıyor. Piyasada bulunan BEA WebLogic, IBM WebSphere, Oracle Containers for Java EE (OC4J), Apache Tomcat, ve GlassFish gibi sunucularda da sorunsuz şekilde çalışıyor.<br />+ extended persistence context, declerative transaction management, unified expression language, hibernate validations, page actions, page parameters, bookmarkable links .....<br /><br />Bunlar Seam'in getirdiği yeniliklerden sadece birkaçı. Bence Seam uzun zamandır Java geliştiricilerinin beklediği bir kütüphane. Seam'i deneyince sizin de bana katılacağınıza ve Seam ile program yazmaktan keyif alacağınıza eminim.<br /><br />Daha fazla bilgi için;<br /><br /><a href="http://www.seamframework.org/Documentation">Seam dökümanları</a><br />Seamless JSF Serisi;<a href="http://www.ibm.com/developerworks/java/library/j-seam1/index.html?S_TACT=105AGX02&S_CMP=EDU">1</a>, <a href="http://www.ibm.com/developerworks/java/library/j-seam2/index.html?S_TACT=105AGX02&S_CMP=EDU">2</a>, <a href="http://www.ibm.com/developerworks/java/library/j-seam3/index.html?S_TACT=105AGX02&S_CMP=EDU">3</a><br />Seam 2.0 hakkında yazılmış en yeni ve iyi kitap;<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.manning.com/dallen/"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://seaminaction.googlecode.com/svn/wiki/images/seaminaction.jpg" alt="" border="0" /></a><br /><br />PS: Bazı teknik terimleri Türkçeye çevirmekten özellikle kaçındım çünkü Türkçe tercümelerin kavramları tam olarak anlatamadığını düşünüyorum.Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com3tag:blogger.com,1999:blog-10228790.post-85913379111101878722008-08-11T19:25:00.002+03:002008-08-11T19:28:54.348+03:00ayrılış ve teşekkür2002 yılından beri çalışmakta olduğum Anadolu Üniversitesi Bilgisayar Araştırma ve Uygulama Merkezindeki görevimden bugün itibariyle ayrılıyorum. Bu süreç boyunca çalıştığım bütün iş arkadaşlarıma çok teşekkür ederim ....Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com2tag:blogger.com,1999:blog-10228790.post-1164804972002292812006-11-29T14:45:00.000+02:002006-11-29T14:56:12.013+02:00özgürlüğün anlamıBizim ülkemizin en büyük sorunlarından biride insanlarımızın bilgi sahibi olmadan fikir sahibi olmalarıdır. Herkes mutlaka bütün konularda fikir sahibidir. Ve bu aralar benim en çok kafama takılan, herkesin demokrasi ve özgürlükten dem vurması fakat herkesin bu tanımı kendi çıkarları doğrultusunda yapması. <br /><br /><br /><a href="http://www.isil.org/resources/introduction.swf">Bu animasyon</a> gerçekten özgürlüğün,demokrasinin anlamı üzerine saç ağartmış insanların çalışması. Eğer sabredip sonuna kadar izlerseniz ne demek istediğimi anlayabilirsiniz. <br /><br /><br />Beni en çok üzen yanı animasyonda kötü olarak sıfatlandırılan kavramların çoğunun ülkemizde olması ve iyi olarak sıfatlandırılan hiçbir kavramın olmaması. Yazık çok yazık...Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com5tag:blogger.com,1999:blog-10228790.post-1131120652288621662005-11-04T17:51:00.001+02:002008-10-11T13:54:28.384+03:00Versiyon Yönetim Sistemi Olarak SVN Kurulum ve KullanımıAçık kod camiasında en çok tercih edilen versiyon yönetim sistemleri (VYS) Concurrent Versions System(CVS) ve <a href="http://subversion.tigris.org/">Subversion</a>(SVN)'dir.<br />VYS'leri sadece programların kaynak kodlarını yönetmek için değil ihtiyaçlarımıza ve hayal gücümüze bağlı olarak farklı birçok yerde kullanabiliriz. Mesela geçen günlerde okuduğum <a href="http://linuxjournal.com/article/5976" target="_blank">makalede</a> bir GNU/Linux sistemde home dizininin nasıl başarıyla yıllardır CVS/SVN'de tutulduğu anlatılıyordu.<br /><br />Bende uzun zamandır projelerimi CVS'den SVN'e geçirmeyi planlıyordum, cesaretimi topladım ve tatilden de istifade ederek projelerin hepsini SVN'e geçirdim.<br /><br />Bu işlem sırasında yaptıklarımı, karşılaştığım sorunları ve çözümlerini sizlerle paylaşmak istedim. (İşlemleri SUSE ve Debian üzerinde ayrı ayrı geçekleştirdim)<br />Bu döküman hiç VYS kullanmamış için arkadaşlar için bir giriş ve CVS'den SVN'e geçmek isteyen arkadaşlar için ise bir referans olabilir.<br /><br /><br /><br />Dökümana <a href="http://murathazer.googlepages.com/SVN_tut.html">burdan</a> ulaşabilirsiniz.<br /><br /><br /><br />Herkese iyi çalışmalar.Murat Hazerhttp://www.blogger.com/profile/17104195636874266082noreply@blogger.com4