<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hasan Ozgan'ın Web Günlüğü</title>
	<atom:link href="http://www.hasanozgan.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hasanozgan.com</link>
	<description>Internet Stratejileri, Yazılım Geliştirme ve Mimarileri Üzerine</description>
	<lastBuildDate>Wed, 01 Feb 2012 21:26:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>İş İlanı: Java Developer</title>
		<link>http://www.hasanozgan.com/2012/02/is-ilani-java-developer/</link>
		<comments>http://www.hasanozgan.com/2012/02/is-ilani-java-developer/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 18:06:09 +0000</pubDate>
		<dc:creator>Hasan Ozgan</dc:creator>
				<category><![CDATA[Diğer]]></category>

		<guid isPermaLink="false">http://www.hasanozgan.com/?p=679</guid>
		<description><![CDATA[Almanya merkezli, birçok ülkede projeleri olan çok uluslu bir şirkette, yazılım geliştirirken, yeni teknolojiler kullnarak öğrenmek ve eğlenmek mi istiyorsunuz?. İşte size harika bir fırsat. Çalıştığım şirket aşağıdaki konularda yazılımcı ihtiyacı bulunuyor. Java Developer Spring ve/veya Stripes Framework bilen Postgresql ve/veya Stored Procedureler ile çalışmış. Solr arama motoru konusunda deneyim sahibi. Membase ve Ehcache kullanmış. [...]]]></description>
			<content:encoded><![CDATA[<p>Almanya merkezli, birçok ülkede projeleri olan çok uluslu bir <a href="http://www.rocket-internet.com.tr" onclick="pageTracker._trackPageview('/outgoing/www.rocket-internet.com.tr?referer=');">şirkette,</a> yazılım geliştirirken, yeni teknolojiler kullnarak öğrenmek ve eğlenmek mi istiyorsunuz?. İşte size harika bir fırsat. Çalıştığım şirket aşağıdaki konularda yazılımcı ihtiyacı bulunuyor.</p>
<p><strong>Java Developer</strong></p>
<ul>
<li>Spring ve/veya Stripes Framework bilen</li>
<li>Postgresql ve/veya Stored Procedureler ile çalışmış.</li>
<li>Solr arama motoru konusunda deneyim sahibi.</li>
<li>Membase ve Ehcache kullanmış.</li>
<li>Yüksek ölçekli web projelerde görev almış.</li>
<li>E-Commerce tecrübesi olan</li>
<li>Kendini sürekli yenileyen</li>
<li>Öğrenmeyi ilke benimsemiş</li>
<li>PHP vb. programa dillerine ilgi gösteren</li>
</ul>
<div>Başvurularınız için; <a href="mail:hasan.ozgan@rocket-internet.com.tr">hasan.ozgan@rocket-internet.com.tr</a></div>
<p><br/><br />
Ayrıca PHP alanında da şu ilanlarada göz atabiliriniz;</p>
<ul>
<li><a href="http://www.kariyer.net/ilan/Rocket+Internet+Senior+Developer+(PHP)+/?arn=&amp;sid=&amp;ilankodu=768425&amp;ilId=&amp;PTitle=Rocket+Internet-Senior+Developer+(PHP)-&amp;tss=1&amp;bsn=1" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.kariyer.net/ilan/Rocket+Internet+Senior+Developer+_PHP_+/?arn=_amp_sid=_amp_ilankodu=768425_amp_ilId=_amp_PTitle=Rocket+Internet-Senior+Developer+_PHP_-_amp_tss=1_amp_bsn=1&amp;referer=');">Senior PHP Developer</a></li>
<li><a href="http://www.kariyer.net/ilan/Rocket+Internet+Lead+Developer+%28PHP%29+/?arn=956570&amp;sid=&amp;ilankodu=768374&amp;ilId=&amp;PTitle=Rocket+Internet-Lead+Developer+%28PHP%29-&amp;tss=1&amp;bsn=1" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.kariyer.net/ilan/Rocket+Internet+Lead+Developer+_28PHP_29+/?arn=956570_amp_sid=_amp_ilankodu=768374_amp_ilId=_amp_PTitle=Rocket+Internet-Lead+Developer+_28PHP_29-_amp_tss=1_amp_bsn=1&amp;referer=');">Lead Developer</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanozgan.com/2012/02/is-ilani-java-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Büyük Ustaya Saygıyla (1941 &#8211; 2011) !&#8230;</title>
		<link>http://www.hasanozgan.com/2011/10/buyuk-ustaya-saygiyla-1941-2011/</link>
		<comments>http://www.hasanozgan.com/2011/10/buyuk-ustaya-saygiyla-1941-2011/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 09:38:54 +0000</pubDate>
		<dc:creator>Hasan Ozgan</dc:creator>
				<category><![CDATA[Bilgisayar Bilimleri]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[c programming language]]></category>
		<category><![CDATA[dennis ritchie]]></category>

		<guid isPermaLink="false">http://www.hasanozgan.com/?p=655</guid>
		<description><![CDATA[Az önce Hacker News&#8216;te ilk öğrendiğim programlama dili C ve en sevdiğim işletim sistemi UNIX&#8217;in babası büyük usta Dennis Ritchiee&#8217;nin vefat ettiğini öğrendim. Değer verdiğim birkaç büyük ustadan biriydi kendisi. Saygıyla anıyorum!.. 1234567#include &#60;stdio.h&#62; int main&#40;&#41; &#123; &#160; &#160; printf&#40;&#34;goodbye, dad\n&#34;&#41;; &#160; &#160; return 0; &#125;]]></description>
			<content:encoded><![CDATA[<p>Az önce <a href="http://news.ycombinator.com" onclick="pageTracker._trackPageview('/outgoing/news.ycombinator.com?referer=');">Hacker News</a>&#8216;te ilk öğrendiğim programlama dili C ve en sevdiğim işletim sistemi UNIX&#8217;in babası büyük usta <a href="http://cm.bell-labs.com/who/dmr/" onclick="pageTracker._trackPageview('/outgoing/cm.bell-labs.com/who/dmr/?referer=');">Dennis Ritchie</a>e&#8217;nin vefat ettiğini öğrendim. Değer verdiğim birkaç büyük ustadan biriydi kendisi. </p>
<p>Saygıyla anıyorum!..</p>
<div class="codecolorer-container c default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<br />
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html" onclick="pageTracker._trackPageview('/outgoing/www.opengroup.org/onlinepubs/009695399/functions/printf.html?referer=');"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;goodbye, dad<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanozgan.com/2011/10/buyuk-ustaya-saygiyla-1941-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Squeryl&#8217;in Yaratıcısı Maxime Lévesque ile Buluştuk</title>
		<link>http://www.hasanozgan.com/2011/03/squerylin-yaraticisi-maxime-levesque-ile-bulustuk/</link>
		<comments>http://www.hasanozgan.com/2011/03/squerylin-yaraticisi-maxime-levesque-ile-bulustuk/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 19:05:01 +0000</pubDate>
		<dc:creator>Hasan Ozgan</dc:creator>
				<category><![CDATA[Hayatın İçinden]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[gökhan goralı]]></category>
		<category><![CDATA[maxime levesque]]></category>
		<category><![CDATA[mihrimah sultan]]></category>
		<category><![CDATA[onur yalazı]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[squeryl]]></category>

		<guid isPermaLink="false">http://www.hasanozgan.com/?p=648</guid>
		<description><![CDATA[Scala dünyasının başarılı projelerinden Squeryl projesinin yazarı Maxime Lévesque ile dün Mihrimah Sultan&#8217;da buluştuk. Mihrimah Sultan&#8216;da Rakı sefası yaptıktan sonra Badehane&#8217;de votka içerek geceyi noktaladık. Maxime&#8217;in Türkiye&#8217;ye geliş sebebini duyduğunuzda biraz şaşırabilirsiniz. Mısırlı Ahmet&#8216;ten Türk Darbuka tekniğini öğrenmek amacıyla ülkemizde bulunuyor. Squeryl ve Scala dışında müzik, siyaset, açık kaynak, edebiyat, veritabanları, programlama dilleri, kadın-erkek ilişkileri [...]]]></description>
			<content:encoded><![CDATA[<p>Scala dünyasının başarılı projelerinden <a href="http://squeryl.org" onclick="pageTracker._trackPageview('/outgoing/squeryl.org?referer=');">Squeryl</a> projesinin yazarı Maxime Lévesque ile dün Mihrimah Sultan&#8217;da buluştuk. <a href="http://mihrimahsultan.com" onclick="pageTracker._trackPageview('/outgoing/mihrimahsultan.com?referer=');">Mihrimah Sultan</a>&#8216;da Rakı sefası yaptıktan sonra Badehane&#8217;de votka içerek geceyi noktaladık. </p>
<p>Maxime&#8217;in Türkiye&#8217;ye geliş sebebini duyduğunuzda biraz şaşırabilirsiniz. <a href="http://www.misirliahmet.com/" onclick="pageTracker._trackPageview('/outgoing/www.misirliahmet.com/?referer=');">Mısırlı Ahmet</a>&#8216;ten Türk Darbuka tekniğini öğrenmek amacıyla ülkemizde bulunuyor. Squeryl ve Scala dışında müzik, siyaset, açık kaynak, edebiyat, veritabanları, programlama dilleri, kadın-erkek ilişkileri ve genetik gibi birçok konu hakkında konuştuğumuzu söyleyebilirim. Kendisi çok renkli bir kişilik. Ve sohbetimizin her dakikası keyifli ve öğretici geçtiğini söyleyebllirim.</p>
<p>Maxime ile buluşmamıza katılarak, sohbetimize renk katan <a href="http://yalazi.org" onclick="pageTracker._trackPageview('/outgoing/yalazi.org?referer=');">Onur Yalazı</a> ve Gökhan Goralı&#8217;ya ne kadar teşekkür etsem azdır.</p>
<p>Son olarak Maxime 29 Mart&#8217;a kadar Türkiye&#8217;de olacak ve kendisiyle bir şehir turu gerçekleştireceğiz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanozgan.com/2011/03/squerylin-yaraticisi-maxime-levesque-ile-bulustuk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Scala Geliştirme Ortamı ve Örnek Web Uygulaması</title>
		<link>http://www.hasanozgan.com/2011/02/scala-gelistirme-ortami-ve-ornek-web-uygulamasi/</link>
		<comments>http://www.hasanozgan.com/2011/02/scala-gelistirme-ortami-ve-ornek-web-uygulamasi/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 04:37:44 +0000</pubDate>
		<dc:creator>Hasan Ozgan</dc:creator>
				<category><![CDATA[Makale]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[Web Uygulamaları]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[eclipsify]]></category>
		<category><![CDATA[sbt]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[scala ide]]></category>
		<category><![CDATA[scalate]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[ssp]]></category>

		<guid isPermaLink="false">http://www.hasanozgan.com/?p=498</guid>
		<description><![CDATA[Geçen yazımda Scala programlama diline kabaca giriş yapmıştık, bu yazımda ise bir web çatısı kullanımına geçmeden önce Scala geliştirme ortamını kurmaktan ve basit bir web uygulaması nasıl yazılır bundan söz etmek istiyorum. Bu belgeleme ile aşağıdaki teknolojilerin içermektedir. Java Developer Toolkit Eclipse Scala Scala-IDE Simple Build Tool Scala&#8217;nın Kurulumu Scala, bilinen tüm popüler işletim sistemleriyle [...]]]></description>
			<content:encoded><![CDATA[<p>Geçen yazımda Scala programlama diline kabaca <a href="http://www.hasanozgan.com/2011/02/scalaya-giris/">giriş yapmıştık</a>, bu yazımda ise bir web çatısı kullanımına geçmeden önce Scala geliştirme ortamını kurmaktan ve basit bir web uygulaması nasıl yazılır bundan söz etmek istiyorum.</p>
<p>Bu belgeleme ile aşağıdaki teknolojilerin içermektedir.</p>
<ul>
<li><a href="http://java.sun.com/javase/downloads/" onclick="pageTracker._trackPageview('/outgoing/java.sun.com/javase/downloads/?referer=');">Java Developer Toolkit</a></li>
<li><a href="http://eclipse.org" target="_blank" onclick="pageTracker._trackPageview('/outgoing/eclipse.org?referer=');">Eclipse</a></li>
<li><a href="http://www.scala-lang.org/downloads" onclick="pageTracker._trackPageview('/outgoing/www.scala-lang.org/downloads?referer=');">Scala</a></li>
<li><a href="http://scala-ide.org" target="_blank" onclick="pageTracker._trackPageview('/outgoing/scala-ide.org?referer=');">Scala-IDE</a></li>
<li><a href="http://code.google.com/p/simple-build-tool/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/simple-build-tool/?referer=');">Simple Build Tool</a></li>
</ul>
<h3>Scala&#8217;nın Kurulumu</h3>
<p>Scala, bilinen tüm popüler işletim sistemleriyle çalışmaktadır. Son sürümünü <a href="http://www.scala-lang.org/downloads" onclick="pageTracker._trackPageview('/outgoing/www.scala-lang.org/downloads?referer=');">Scala&#8217;yı sitesinden</a> IzPack Installer versiyonunu indirerek kurabilirsiniz. Tabii bilgisayarınızda Java JDK&#8217;nın kurulu olması gerektiğini hatırlatayım.<br />
<a href="http://www.hasanozgan.com/wp-content/uploads/2011/02/Screen-shot-2011-02-08-at-9.19.38-PM.png"><img class="aligncenter size-full wp-image-512" title="Scala Installer" src="http://www.hasanozgan.com/wp-content/uploads/2011/02/Screen-shot-2011-02-08-at-9.19.38-PM.png" alt="" width="597" height="458" /></a></p>
<h3>Simple Build Tool (sbt) Kurulumu</h3>
<p>SBT bilindiği üzere, proje yapılandırma aracıdır. Ivy ve Maven depolarından proje bağımlılıklarını hızlıca elde edebilirsiniz. Eklenti desteği ile <strong>embedded jetty</strong>, <strong>test işlemleri</strong> gibi çeşitli ihtiyaçlarınızı karşılayabilir sizde kendi eklentilerinizi yazabilirsiniz.</p>
<h5>SBT&#8217;nin kurulumu;</h5>
<p>Son kararlı sürüm olan 0.7.4&#8242;ü <a href="http://code.google.com/p/simple-build-tool/downloads/detail?name=sbt-launch-0.7.4.jar" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/simple-build-tool/downloads/detail?name=sbt-launch-0.7.4.jar&amp;referer=');">buradan</a> ya da <a href="http://code.google.com/p/simple-build-tool/downloads/list" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/simple-build-tool/downloads/list?referer=');">projenin sitesinden</a> en güncel sürümünü indirebilirsiniz.</p>
<h5>Neden SBT?</h5>
<p>SBT tamamiyle Scala diliyle yazılmıştır. Ve bağımlılık yönetiminde Maven ve Ivy&#8217;i depoları kullanır. Isterseniz manuel olarak yeni bir depo ekleyebilir yada cikartabilirsiniz. SBT&#8217;nin gelişmiş bir console arayüzü vardır. SBT komutları iki çeşittir. Bir doğal komutları, ikincisi ise pluginlerle gelen komutlar ve ikinci olarakta <strong>action</strong> diye adlandırılan plugin komutlarıdır. Bu komutların çağrısı yapılırken özel anlamlara gelen ön ekler alabilirler. Bu sayede komutlar daha güçlendirilebilir.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ sbt <span style="color: #7a0874; font-weight: bold;">help</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> Building project HelloWeb <span style="color: #000000;">1.0</span> against Scala 2.8.1<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> &nbsp; &nbsp;using HelloProject with sbt 0.7.4 and Scala 2.7.7<br />
You may execute any project action or method or one of the commands described below.<br />
Available Commands:<br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">&lt;</span>action name<span style="color: #000000; font-weight: bold;">&gt;</span> : Executes the project specified action.<br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">&lt;</span>method name<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">&lt;</span>parameter<span style="color: #000000; font-weight: bold;">&gt;*</span> : Executes the project specified method.<br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">&lt;</span>processor label<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">&lt;</span>arguments<span style="color: #000000; font-weight: bold;">&gt;</span> : Runs the specified processor.<br />
&nbsp; &nbsp;~ <span style="color: #000000; font-weight: bold;">&lt;</span><span style="color: #7a0874; font-weight: bold;">command</span><span style="color: #000000; font-weight: bold;">&gt;</span> : Executes the project specified action or method whenever...<br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #c20cb9; font-weight: bold;">file</span> : Executes the commands <span style="color: #000000; font-weight: bold;">in</span> the given file. &nbsp;Each <span style="color: #7a0874; font-weight: bold;">command</span> should...<br />
&nbsp; &nbsp;+ <span style="color: #000000; font-weight: bold;">&lt;</span><span style="color: #7a0874; font-weight: bold;">command</span><span style="color: #000000; font-weight: bold;">&gt;</span> : Executes the project specified action or method <span style="color: #000000; font-weight: bold;">for</span> all...<br />
&nbsp; &nbsp;++<span style="color: #000000; font-weight: bold;">&lt;</span>version<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">&lt;</span><span style="color: #7a0874; font-weight: bold;">command</span><span style="color: #000000; font-weight: bold;">&gt;</span> : Changes the version of Scala building the project...<br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">*</span> : Prefix <span style="color: #000000; font-weight: bold;">for</span> commands <span style="color: #000000; font-weight: bold;">for</span> managing processors. &nbsp;Run <span style="color: #ff0000;">'*help'</span> <span style="color: #000000; font-weight: bold;">for</span> details.<br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">!</span> : Prefix <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #7a0874; font-weight: bold;">history</span> commands. &nbsp;Run <span style="color: #ff0000;">'!'</span> <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #7a0874; font-weight: bold;">history</span> <span style="color: #7a0874; font-weight: bold;">command</span> help.<br />
...</div></td></tr></tbody></table></div>
<p>Sbt&#8217;nin konfigürasyon dosyası yine Scala kodları yani <strong>Trait</strong> türünde sınıflardan türetilerek yapılır. Türediği Trait sınıfına ve yüklendiği eklentilere göre projenin türü ve kullanılacak actionlar belli olur.</p>
<p>Yukarıda adından söz ettiğimiz bu konular makalenin sonunda yaratacağımız örnek proje ile daha iyi anlayacaksınız.</p>
<h5>Unix ve MacOs Sistemleri için <em>sbt.sh</em> dosyası</h5>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">java <span style="color: #660033;">-Xmx512M</span> <span style="color: #660033;">-Xss2M</span> -XX:+CMSClassUnloadingEnabled <span style="color: #660033;">-jar</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">dirname</span> <span style="color: #007800;">$0</span><span style="color: #000000; font-weight: bold;">`/</span>sbt-launcher.jar <span style="color: #ff0000;">&quot;$@&quot;</span></div></td></tr></tbody></table></div>
<h5>Windows Sistemleri için <em>sbt.bat</em> dosyası</h5>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">set</span> <span style="color: #007800;">SCRIPT_DIR</span>=<span style="color: #000000; font-weight: bold;">%</span>~dp0<br />
java -XX:+CMSClassUnloadingEnabled -XX:<span style="color: #007800;">MaxPermSize</span>=256m <span style="color: #660033;">-Xmx512M</span> <span style="color: #660033;">-Xss2M</span> <span style="color: #660033;">-jar</span> <span style="color: #ff0000;">&quot;%SCRIPT_DIR%\sbt-launcher.jar&quot;</span> <span style="color: #000000; font-weight: bold;">%*</span></div></td></tr></tbody></table></div>
<h3>Scala-IDE Kurulumu</h3>
<p>Scala IDE projesi Eclipse platformu üzerinde geliştirilene daha çok yeni olan bir projedir. Eksikleri olsada, Eclipse sayesinde bu açıklar zamanla toparlanacaktır. Scala IDE&#8217;yi kurmak için bilgisayarınızda Eclipse&#8217;in kurulu olduğunu varsayıyorum.<br />
<center><iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/PtkNg4mK4NY" frameborder="0" allowfullscreen></iframe></center><br />
Eclipse, Scala-IDE eklentisinin kurulumu için aşağıdaki video işinize yarayacaktır. Kendini eclipse sürümünüze uygun eklentinin adresine ise <a href="http://download.scala-ide.org/" onclick="pageTracker._trackPageview('/outgoing/download.scala-ide.org/?referer=');">buradan</a> erişebilirsiniz.</p>
<h3>Scala İle Basit Bir Web Uygulaması Yaratmak</h3>
<h5>Proje Oluşturma</h5>
<p>Örnek uygulama adımlarını Linux ve MacOS sistemlerinde çalışacak biçimde anlatacağım. <strong>HelloWeb</strong> isimli dizini oluşturduktan sonra dizinin içine giriyor ve <strong>sbt</strong> komutunu çalıştırıyoruz. Proje dizini ve dosyasını bulamazsa, yeni proje yaratmak isteyip istemediğimizi soruyor. Yeni proje yaratma adımları için aşağıdaki şekilde tamamladıktan sonra sbt konsolundan <strong>exit</strong> komutuyla çıkıyoruz.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ <span style="color: #c20cb9; font-weight: bold;">mkdir</span> HelloWeb <span style="color: #000000; font-weight: bold;">&amp;</span>amp;<span style="color: #000000; font-weight: bold;">&amp;</span>amp; <span style="color: #7a0874; font-weight: bold;">cd</span> HelloWeb<br />
$ sbt<br />
Project does not exist, create new project? <span style="color: #7a0874; font-weight: bold;">&#40;</span>y<span style="color: #000000; font-weight: bold;">/</span>N<span style="color: #000000; font-weight: bold;">/</span>s<span style="color: #7a0874; font-weight: bold;">&#41;</span> y<br />
Name: Hello Web<br />
Organization: Hasan Ozgan<br />
Version <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">1.0</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
Scala version <span style="color: #7a0874; font-weight: bold;">&#91;</span>2.7.7<span style="color: #7a0874; font-weight: bold;">&#93;</span>: 2.8.1<br />
sbt version <span style="color: #7a0874; font-weight: bold;">&#91;</span>0.7.4<span style="color: #7a0874; font-weight: bold;">&#93;</span>:<br />
Getting Scala 2.7.7 ...<br />
:: retrieving :: org.scala-tools.sbt<span style="color: #666666; font-style: italic;">#boot-scala</span><br />
confs: <span style="color: #7a0874; font-weight: bold;">&#91;</span>default<span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
<span style="color: #000000;">2</span> artifacts copied, <span style="color: #000000;">0</span> already retrieved <span style="color: #7a0874; font-weight: bold;">&#40;</span>9911kB<span style="color: #000000; font-weight: bold;">/</span>35ms<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
Getting org.scala-tools.sbt sbt_2.7.7 0.7.4 ...<br />
:: retrieving :: org.scala-tools.sbt<span style="color: #666666; font-style: italic;">#boot-app</span><br />
confs: <span style="color: #7a0874; font-weight: bold;">&#91;</span>default<span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
<span style="color: #000000;">15</span> artifacts copied, <span style="color: #000000;">0</span> already retrieved <span style="color: #7a0874; font-weight: bold;">&#40;</span>4096kB<span style="color: #000000; font-weight: bold;">/</span>71ms<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>success<span style="color: #7a0874; font-weight: bold;">&#93;</span> Successfully initialized directory structure.<br />
Getting Scala 2.8.1 ...<br />
:: retrieving :: org.scala-tools.sbt<span style="color: #666666; font-style: italic;">#boot-scala</span><br />
confs: <span style="color: #7a0874; font-weight: bold;">&#91;</span>default<span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
<span style="color: #000000;">2</span> artifacts copied, <span style="color: #000000;">0</span> already retrieved <span style="color: #7a0874; font-weight: bold;">&#40;</span>15118kB<span style="color: #000000; font-weight: bold;">/</span>72ms<span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> Building project Hello Web <span style="color: #000000;">1.0</span> against Scala 2.8.1<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> &nbsp; &nbsp;using sbt.DefaultProject with sbt 0.7.4 and Scala 2.7.7<br />
<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #7a0874; font-weight: bold;">exit</span></div></td></tr></tbody></table></div>
<p>Projeyi yarattığımızda aşağıdaki gibi bir dizin ağacı göreceksiniz. Bu dizin ağacında <strong>project</strong> isimli dizinde proje yapılandırma işlemlerimizi yapıyoruz. Projemizin kaynak kodları ise <strong>src/main/scala</strong> dizinin altında yazıyoruz. Henüz uygulamamız web uygulaması olarak yapılandırılmadığı için <strong>src/main/webapp</strong> dizini mevcut değil. Yazının ilerleyen bölümlerinde bu dizini ve konfigürasyonları elle yapılandıracağız. :)</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">HelloWeb$ </span><span style="color: #c20cb9; font-weight: bold;">tree</span><br />
&nbsp; &nbsp;.<br />
&nbsp; &nbsp;├── lib<br />
&nbsp; &nbsp;├── project<br />
&nbsp; &nbsp;│   ├── boot<br />
&nbsp; &nbsp;│   └── build.properties<br />
&nbsp; &nbsp;├── src<br />
&nbsp; &nbsp;│   ├── main<br />
&nbsp; &nbsp;│   │   ├── resources<br />
&nbsp; &nbsp;│   │   └── scala<br />
&nbsp; &nbsp;│   └── <span style="color: #7a0874; font-weight: bold;">test</span><br />
&nbsp; &nbsp;│   &nbsp; &nbsp; ├── resources<br />
&nbsp; &nbsp;│   &nbsp; &nbsp; └── scala<br />
&nbsp; &nbsp;└── target</div></td></tr></tbody></table></div>
<h5>Projenin Yapılandırılması</h5>
<p>Şimdi örnek web uygulamamız için projemizi yapılandırmaya başlayalım. Sbt kendini çalıştırdığında <strong>project/build/*.scala</strong> dizini altında <strong>BasicScalaProject</strong> abstract sınıfından türemiş bir sınıf arar. Yapılandırma işlemleri bu sınıfın içinde olur.</p>
<p>Şimdi gelin bizde böyle bir sınıf tanımı yapalım.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">HelloWeb$ </span><span style="color: #c20cb9; font-weight: bold;">mkdir</span> build<br />
HelloWeb<span style="color: #000000; font-weight: bold;">/</span>build$ <span style="color: #c20cb9; font-weight: bold;">vim</span> HelloProject.scala</div></td></tr></tbody></table></div>
<div class="codecolorer-container scala default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="scala codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">import</span></a> sbt.<span style="color: #000080;">_</span><br />
<br />
<a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">class</span></a> HelloProject<span style="color: #F78811;">&#40;</span>info<span style="color: #000080;">:</span> ProjectInfo<span style="color: #F78811;">&#41;</span> <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">extends</span></a> DefaultWebProject<span style="color: #F78811;">&#40;</span>info<span style="color: #F78811;">&#41;</span><br />
<span style="color: #F78811;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">override</span></a> <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">def</span></a> libraryDependencies <span style="color: #000080;">=</span> Set<span style="color: #F78811;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666FF;">&quot;javax.servlet&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;servlet-api&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;2.5&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;provided&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666FF;">&quot;org.mortbay.jetty&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;jetty&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;6.1.22&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;test-&amp;gt;default&quot;</span><br />
&nbsp; &nbsp; <span style="color: #F78811;">&#41;</span> ++ <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">super</span></a>.<span style="color: #000000;">libraryDependencies</span><br />
<span style="color: #F78811;">&#125;</span></div></td></tr></tbody></table></div>
<p><strong>project/build/HelloProject.scala</strong></p>
<p>Şimdi uygulamamızı yazmaya geçmeden önce projemizi eclipse taşıyalım. Bunun için, <strong>Eclipsify</strong> isimli sbt eklentisini kurmamız gerekiyor. SBT projesine eklentileri tanımlamakta çok kolay.<br />
Öncelikle dizinini eklememiz gerekiyor.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">HelloWeb$ </span><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #660033;">-p</span> project<span style="color: #000000; font-weight: bold;">/</span>plugins<br />
HelloWeb<span style="color: #000000; font-weight: bold;">/</span>project<span style="color: #000000; font-weight: bold;">/</span>plugins$ <span style="color: #c20cb9; font-weight: bold;">vim</span> HelloPlugins.scala</div></td></tr></tbody></table></div>
<div class="codecolorer-container scala default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="scala codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">import</span></a> sbt.<span style="color: #000080;">_</span><br />
<br />
<a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">class</span></a> HelloPlugins<span style="color: #F78811;">&#40;</span>info<span style="color: #000080;">:</span> ProjectInfo<span style="color: #F78811;">&#41;</span> <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">extends</span></a> PluginDefinition<span style="color: #F78811;">&#40;</span>info<span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span><br />
&nbsp; &nbsp; lazy <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">val</span></a> eclipse <span style="color: #000080;">=</span> <span style="color: #6666FF;">&quot;de.element34&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;sbt-eclipsify&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;0.7.0&quot;</span><br />
<span style="color: #F78811;">&#125;</span></div></td></tr></tbody></table></div>
<p><strong>project/plugins/HelloPlugins.scala</strong></p>
<p>Son olarakta HelloProject.scala sınıfımıza eklentiyi tanımlamamız gerekiyor. Sınıfımız aşağıdakine benzemeli.</p>
<div class="codecolorer-container scala default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="scala codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">import</span></a> sbt.<span style="color: #000080;">_</span><br />
<a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">import</span></a> de.<span style="color: #000000;">element34</span>.<span style="color: #000000;">sbteclipsify</span>.<span style="color: #000080;">_</span><br />
<br />
<a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">class</span></a> HelloProject<span style="color: #F78811;">&#40;</span>info<span style="color: #000080;">:</span> ProjectInfo<span style="color: #F78811;">&#41;</span> <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">extends</span></a> DefaultWebProject<span style="color: #F78811;">&#40;</span>info<span style="color: #F78811;">&#41;</span> <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">with</span></a> Eclipsify<br />
<span style="color: #F78811;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">override</span></a> <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">def</span></a> libraryDependencies <span style="color: #000080;">=</span> Set<span style="color: #F78811;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666FF;">&quot;javax.servlet&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;servlet-api&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;2.5&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;provided&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666FF;">&quot;org.mortbay.jetty&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;jetty&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;6.1.22&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;test-&amp;gt;default&quot;</span><br />
&nbsp; &nbsp; <span style="color: #F78811;">&#41;</span> ++ <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">super</span></a>.<span style="color: #000000;">libraryDependencies</span><br />
<span style="color: #F78811;">&#125;</span></div></td></tr></tbody></table></div>
<p>Artık uygulamamızı yazmaya hazırız. Yapmamız gereken son bir işlem var. SBT projemizi Eclipse&#8217;in anlayacağı hale sokmak. Bunun için önce javax.servlet ve jetty bağımlılıklarımızı güncellememiz gerekiyor. Bunu yapmamızı sağlayan komut ise <strong>update</strong>. Bu işlemi yaptıksan sonra <strong>eclipse</strong> isimli yeni <em>action</em> görmeniz gerekiyor.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sbt update<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> Recompiling plugin definition...<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> &nbsp; &nbsp;Source analysis: <span style="color: #000000;">1</span> new<span style="color: #000000; font-weight: bold;">/</span>modified, <span style="color: #000000;">0</span> indirectly invalidated, <span style="color: #000000;">0</span> removed.<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> Updating plugins...<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> downloading http:<span style="color: #000000; font-weight: bold;">//</span>scala-tools.org<span style="color: #000000; font-weight: bold;">/</span>repo-releases<span style="color: #000000; font-weight: bold;">/</span>de<span style="color: #000000; font-weight: bold;">/</span>element34<span style="color: #000000; font-weight: bold;">/</span>sbt-eclipsify<span style="color: #000000; font-weight: bold;">/</span>0.7.0<span style="color: #000000; font-weight: bold;">/</span>sbt-eclipsify-0.7.0.jar ...</div></td></tr></tbody></table></div>
<p>sbt actions komutunda listenen action listesinin içinde eclipse&#8217;ei görmeniz gerekiyor. Eğer görüyorsanız eclipse proje dosyasını oluşturmak için;</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">HelloWeb$ </span>sbt eclipse<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> Building project HelloWorld <span style="color: #000000;">1.0</span> against Scala 2.8.1<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> &nbsp; &nbsp;using Project with sbt 0.7.4 and Scala 2.7.7<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> == eclipse ==<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> Creating eclipse project...<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> == eclipse ==<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>success<span style="color: #7a0874; font-weight: bold;">&#93;</span> Successful.<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> Total time: <span style="color: #000000;">0</span> s, completed Feb <span style="color: #000000;">9</span>, <span style="color: #000000;">2011</span> <span style="color: #000000;">5</span>:<span style="color: #000000;">59</span>:<span style="color: #000000;">41</span> PM<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>info<span style="color: #7a0874; font-weight: bold;">&#93;</span> Total session time: <span style="color: #000000;">1</span> s, completed Feb <span style="color: #000000;">9</span>, <span style="color: #000000;">2011</span> <span style="color: #000000;">5</span>:<span style="color: #000000;">59</span>:<span style="color: #000000;">41</span> PM<br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span>success<span style="color: #7a0874; font-weight: bold;">&#93;</span> Build completed successfully.</div></td></tr></tbody></table></div>
<p>Artık işlemi tamamladık. Şimdi Eclipse açarak, projeyi import edebilirsiniz.<br />
<center></p>
<table>
<tbody>
<tr>
<td><a href="http://www.hasanozgan.com/wp-content/uploads/2011/02/HelloWeb-Import.png"><img class="aligncenter size-medium wp-image-589" title="HelloWeb Project Import" src="http://www.hasanozgan.com/wp-content/uploads/2011/02/HelloWeb-Import-264x300.png" alt="HelloWeb Project Import" height="300" /></a></td>
<td>&nbsp;</td>
<td><a href="http://www.hasanozgan.com/wp-content/uploads/2011/02/HelloWeb-Tree.png"><img src="http://www.hasanozgan.com/wp-content/uploads/2011/02/HelloWeb-Tree-264x300.png" alt="" title="HelloWeb Tree" width="264" height="300" class="alignleft size-medium wp-image-590" /></a></td>
</tr>
</tbody>
</table>
<p></center></p>
<p>Son olarak Eclipse&#8217;ten SBT&#8217;yi çalıştırmak için External Tool Configuration seçeneğinden tanımlamamız gerekiyor. Aşağıda örnek ayarlara ait ekran görüntüsünü bulabilirsiniz.<br />
<center><br />
<a href="http://www.hasanozgan.com/wp-content/uploads/2011/02/HelloWeb-Extarnal.png"><img src="http://www.hasanozgan.com/wp-content/uploads/2011/02/HelloWeb-Extarnal-300x205.png" alt="" title="HelloWeb Extarnal" width="300" height="205" class="aligncenter size-medium wp-image-593" /></a><br />
</center><br />
Artık web uygulamamızı yazmaya başlayabiliriz.</p>
<h5>Scala Servlet</h5>
<p>Scala&#8217;nın java mimarileriyle çalışabildiğinden daha önce söz etmiştim. Bu nedenle bir scala web uygulaması yazmak, bir java web uygulaması yazmaktan pek farklı değildir. Scala&#8217;da servlet sınıfları kullanılarak yazılabilir. Aşağıda basit bir servlet sınıfı bulunmaktadır. Scala dilinde XML aynı bir String gibi bir tiptir. Örnek scala kodumuzun java&#8217;dan tek farkı HTML tipinin parametre olarak verilebilmesidir.</p>
<div class="codecolorer-container scala default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br /></div></td><td><div class="scala codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">package</span></a> com.<span style="color: #000000;">hasanozgan</span>.<span style="color: #000000;">web</span><br />
<br />
<a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">import</span></a> java.<span style="color: #000000;">io</span>.<span style="color: #000080;">_</span><br />
<a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">import</span></a> javax.<span style="color: #000000;">servlet</span>.<span style="color: #000000;">http</span>.<span style="color: #F78811;">&#123;</span>HttpServlet, HttpServletRequest, HttpServletResponse<span style="color: #F78811;">&#125;</span><br />
<br />
<a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">class</span></a> HelloServlet <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">extends</span></a> HttpServlet<br />
<span style="color: #F78811;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">override</span></a> <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">def</span></a> doGet<span style="color: #F78811;">&#40;</span>req<span style="color: #000080;">:</span> HttpServletRequest, res<span style="color: #000080;">:</span> HttpServletResponse<span style="color: #F78811;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #F78811;">&#123;</span> &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; doRequest<span style="color: #F78811;">&#40;</span>req, res<span style="color: #F78811;">&#41;</span> <br />
&nbsp; &nbsp; <span style="color: #F78811;">&#125;</span> &nbsp; &nbsp;<br />
<br />
&nbsp; &nbsp; <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">override</span></a> <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">def</span></a> doPost<span style="color: #F78811;">&#40;</span>req<span style="color: #000080;">:</span> HttpServletRequest, res<span style="color: #000080;">:</span> HttpServletResponse<span style="color: #F78811;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #F78811;">&#123;</span> &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; doRequest<span style="color: #F78811;">&#40;</span>req, res<span style="color: #F78811;">&#41;</span> <br />
&nbsp; &nbsp; <span style="color: #F78811;">&#125;</span> &nbsp; &nbsp;<br />
<br />
&nbsp; &nbsp; <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">private</span></a> <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">def</span></a> doRequest<span style="color: #F78811;">&#40;</span>req<span style="color: #000080;">:</span> HttpServletRequest, res<span style="color: #000080;">:</span> HttpServletResponse<span style="color: #F78811;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #F78811;">&#123;</span> &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; res.<span style="color: #000000;">getWriter</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">print</span><span style="color: #F78811;">&#40;</span><span style="color: #000080;">&lt;</span>html<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000080;">&lt;</span>head<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000080;">&lt;</span>title<span style="color: #000080;">&gt;</span>Hello World<span style="color: #000080;">&lt;</span>/title<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000080;">&lt;</span>/head<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000080;">&lt;</span>body<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000080;">&lt;</span>h1<span style="color: #000080;">&gt;</span>Hello from Scala<span style="color: #000080;">!&lt;</span>/h1<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000080;">&lt;</span>/body<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000080;">&lt;</span>/html<span style="color: #000080;">&gt;</span><span style="color: #F78811;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #F78811;">&#125;</span> &nbsp; &nbsp;<br />
<span style="color: #F78811;">&#125;</span></div></td></tr></tbody></table></div>
<p><strong>src/main/scala/com/hasanozgan/web/HelloServlet.scala</strong></p>
<p>Şimdi wepapp ve WEB-INF dizinlerini yarartmaya ve webapp/WEB-INF/web.xml dosyasını oluşturmamız gerekiyor. Aşağıdaki örnek bir web.xml dosyası mevcut.</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web-app</span> <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; &nbsp;<span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/javaee&quot;</span> </span><br />
<span style="color: #009900;"> &nbsp; &nbsp;<span style="color: #000066;">xmlns:web</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;</span> </span><br />
<span style="color: #009900;"><span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;</span></span><br />
<span style="color: #009900;"> &nbsp; <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;2.5&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>HelloServlet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.hasanozgan.web.HelloServlet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;load-on-startup<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>1<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/load-on-startup<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>HelloServlet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/index<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;welcome-file-list<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;welcome-file<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>index<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/welcome-file<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/welcome-file-list<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web-app<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p><strong>src/main/webapp/WEB-INF/web.xml</strong></p>
<p>Uygulamayı çalıştırmak için ise <strong>sbt ~jetty-run</strong> komutunu çalıştırmamız yeterlidir.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">HelloWeb$ </span>sbt ~jetty-run</div></td></tr></tbody></table></div>
<p>Not: <b>sbt <font color="red">~</font>jetty-run</b> komutu ile <b>sbt jetty-run</b> komutu arasında şöyle bir fark bulunur. Eğer bir komut &#8220;<strong>~</strong>&#8221; işareti ile başlarsa projenin dosyalarında bir değişiklik olursa proje tekrar derlenir.</p>
<h5>Scala Server Pages (Scalate)</h5>
<p>Scala dünyasında Quick &#038; Dirty birşeyler yapmak isteyenler için JSP&#8217;ye benzer bir template engine kütüphanesi mevcut. <a href="http://scalate.fusesource.org/" onclick="pageTracker._trackPageview('/outgoing/scalate.fusesource.org/?referer=');">Scalate (Scala Template)</a> isimli bu proje gerçktende çok başarılı template modelleri ile geliyor. Bu modellerden benim tercihim SSP yani Scala Server Pages modeli. Zevkinize göre diğer modellere de göz atabilirsiniz. </p>
<ol>
<li>
Önce sbt proje sınıfımıza(HelloProject.scala) scalate için gerekli olan tanımları(<em>&#8220;org.fusesource.scalate&#8221; % &#8220;scalate-core&#8221; % &#8220;1.2&#8243;</em>) yapmamız gerekiyor. Ayrıca, jetty&#8217;nin portunu nasıl değiştirebileceğimizide görelim.</p>
<div class="codecolorer-container scala default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="scala codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">import</span></a> sbt.<span style="color: #000080;">_</span><br />
<br />
<a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">class</span></a> HelloProject<span style="color: #F78811;">&#40;</span>info<span style="color: #000080;">:</span> ProjectInfo<span style="color: #F78811;">&#41;</span> <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">extends</span></a> DefaultWebProject<span style="color: #F78811;">&#40;</span>info<span style="color: #F78811;">&#41;</span><br />
<span style="color: #F78811;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">val</span></a> jettyPort <span style="color: #000080;">=</span> <span style="color: #F78811;">8090</span><br />
<br />
&nbsp; &nbsp; <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">override</span></a> <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">def</span></a> libraryDependencies <span style="color: #000080;">=</span> Set<span style="color: #F78811;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666FF;">&quot;org.fusesource.scalate&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;scalate-core&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;1.2&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666FF;">&quot;javax.servlet&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;servlet-api&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;2.5&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;provided&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666FF;">&quot;org.mortbay.jetty&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;jetty&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;6.1.22&quot;</span> <span style="color: #000080;">%</span> <span style="color: #6666FF;">&quot;test-&amp;gt;default&quot;</span><br />
&nbsp; &nbsp; <span style="color: #F78811;">&#41;</span> ++ <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">super</span></a>.<span style="color: #000000;">libraryDependencies</span><br />
<span style="color: #F78811;">&#125;</span></div></td></tr></tbody></table></div>
<p>Proje ile değişiklikler yaptıktan sonra <strong>sbt update</strong> komutunu çalıştırmayı unutmayın.
       </li>
<li>
Şimdi <strong>web.xml</strong> dosyamızda Servlet Filter&#8217;ı tanımlamamız gerekiyor.</p>
<div class="codecolorer-container xml default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- START: Scalate config --&gt;</span><br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>TemplateEngineFilter<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.fusesource.scalate.servlet.TemplateEngineServlet<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>TemplateEngineFilter<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>*.ssp<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/url-pattern<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/servlet-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
&nbsp; <span style="color: #808080; font-style: italic;">&lt;!-- END: Scalate config --&gt;</span></div></td></tr></tbody></table></div>
</li>
<li>
Şimdi son olarak <strong>index.ssp</strong> dosyamızı yazalım. SSP ile ilgili daha detaylı örnek arayanlar <a href="https://github.com/scalate" onclick="pageTracker._trackPageview('/outgoing/github.com/scalate?referer=');">scalate&#8217;in github hesabından</a> <a href="https://github.com/scalate/scalate/tree/master/samples/scalate-sample" onclick="pageTracker._trackPageview('/outgoing/github.com/scalate/scalate/tree/master/samples/scalate-sample?referer=');">örnek kodları</a> inceleyebilir.</p>
<div class="codecolorer-container scala default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="scala codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000080;">&lt;</span>html<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #000080;">&lt;</span>head<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #000080;">&lt;</span>title<span style="color: #000080;">&gt;</span>Scala Server Pages<span style="color: #000080;">&lt;</span>/title<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #000080;">&lt;</span>/head<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #000080;">&lt;</span>body<span style="color: #000080;">&gt;</span><br />
<span style="color: #000080;">&lt;%</span><br />
&nbsp; &nbsp; <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">var</span></a> username<span style="color: #000080;">:</span> String <span style="color: #000080;">=</span> <span style="color: #6666FF;">&quot;&quot;</span><span style="color: #000080;">;</span><br />
&nbsp; &nbsp; <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">if</span></a> <span style="color: #F78811;">&#40;</span>request.<span style="color: #000000;">getMethod</span><span style="color: #F78811;">&#40;</span><span style="color: #F78811;">&#41;</span>.<span style="color: #000000;">equals</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;POST&quot;</span><span style="color: #F78811;">&#41;</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; username <span style="color: #000080;">=</span> request.<span style="color: #000000;">getParameter</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;username&quot;</span><span style="color: #F78811;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; out.<span style="color: #000000;">println</span><span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Hello, &quot;</span>+username<span style="color: #F78811;">&#41;</span><span style="color: #000080;">;</span><br />
&nbsp; &nbsp; <span style="color: #F78811;">&#125;</span> &nbsp; &nbsp;<br />
<span style="color: #000080;">%&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000080;">&lt;</span>form method<span style="color: #000080;">=</span><span style="color: #6666FF;">&quot;post&quot;</span><span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000080;">&lt;</span>input <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">type</span></a><span style="color: #000080;">=</span><span style="color: #6666FF;">&quot;text&quot;</span> name<span style="color: #000080;">=</span><span style="color: #6666FF;">&quot;username&quot;</span> value<span style="color: #000080;">=</span><span style="color: #6666FF;">&quot;${username}&quot;</span>/<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000080;">&lt;</span>input <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">type</span></a><span style="color: #000080;">=</span><span style="color: #6666FF;">&quot;submit&quot;</span> value<span style="color: #000080;">=</span><span style="color: #6666FF;">&quot;Ok&quot;</span> /<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000080;">&lt;</span>/form<span style="color: #000080;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #000080;">&lt;</span>/body<span style="color: #000080;">&gt;</span><br />
<span style="color: #000080;">&lt;</span>/html<span style="color: #000080;">&gt;</span></div></td></tr></tbody></table></div>
</li>
</ol>
<p>Böylece bir Scala Server Page koduda yazmış olduk.</p>
<h5>Kaynak Kod</h5>
<p>Örnek uygulamanın kaynak kodlarına aşağıdaki linkten erişebilirsiniz.<br />
<a href="http://hasanozgan.com/wp-content/uploads/2011/02/HelloWeb.tgz" onclick="pageTracker._trackPageview('/outgoing/hasanozgan.com/wp-content/uploads/2011/02/HelloWeb.tgz?referer=');">Scala Web Uygulaması Kaynak Kodları</a></p>
<p>Özetleyecek olursak, Sbt ile Scala projesi yaratma ve basit web uygulamarı yazmayı adımlarını görmüş olduk. Benim için bu yazı gerçekten yorucu ve uzun oldu, umarım işinize yaramıştır. Bir sonraki yazımızda ise veritabanı işlemlerinden söz etmeyi planlıyorum. RDBMS (mySQL) ve NOSQL (mongoDB) örnekleri içeren bir yazı olacak. Bu hafta veritabanı işlemlerine de bir giriş yaptıktan sonra, Lift Web Framework ile adım adım örnek bir web uygulaması geliştireceğiz.. (Benim aklımdan Grupon yada Hacker News klonu yapmak geçiyor. Eğer başka bir öneriniz varsa lütfen benimle paylaşın)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanozgan.com/2011/02/scala-gelistirme-ortami-ve-ornek-web-uygulamasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scala&#8217;ya Giriş</title>
		<link>http://www.hasanozgan.com/2011/02/scalaya-giris/</link>
		<comments>http://www.hasanozgan.com/2011/02/scalaya-giris/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 11:31:06 +0000</pubDate>
		<dc:creator>Hasan Ozgan</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[akka]]></category>
		<category><![CDATA[lift]]></category>
		<category><![CDATA[programlama]]></category>
		<category><![CDATA[sbt]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://www.hasanozgan.com/?p=427</guid>
		<description><![CDATA[Uzun zamandır Scala ile ilgili bir yazı dizisi yazma planım vardı. Yoğunluğum nedeniyle bugüne kısmetmiş ama bir miktar paslandığımı itiraf etmeliyim. Bu yıl daha çok ölçeklenebilirlik üzerine yazılar yazmak istediğimi dile getirmiştim. Ölçeklenebilirlik konulu yazılarımın aslına bakarsanız merkezinde scala programlama dili olacak. İşin web bacağında lift web framework, dağınık haberleşme mimarilerinde (akka), ve dağınık veri [...]]]></description>
			<content:encoded><![CDATA[<p>Uzun zamandır Scala ile ilgili bir yazı dizisi yazma planım vardı. Yoğunluğum nedeniyle bugüne kısmetmiş ama bir miktar paslandığımı itiraf etmeliyim. Bu yıl daha çok ölçeklenebilirlik üzerine <a href="http://www.hasanozgan.com/2010/12/yeni-yilda-olceklenebilirlik-uzerine-planlar/">yazılar yazmak istediğimi dile getirmiştim</a>.</p>
<p>Ölçeklenebilirlik konulu yazılarımın aslına bakarsanız merkezinde <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');">scala programlama dili</a> olacak. İşin web bacağında lift web framework, dağınık haberleşme mimarilerinde (akka), ve dağınık veri tabanları konusunda (noSQL) özellikle MongoDB&#8217;den bolca konuşacağız.</p>
<p>Scala ile ilk kez tanışacaklar için Scala, ruby, java, c++ karışımı bir dil gibidir. Nasıl bir yazım biçimi olduğunu merak edenler için aşağıda bir hello-world programı yazdım.</p>
<div class="codecolorer-container scala default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="scala codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">object</span></a> HelloWorld <span style="color: #F78811;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');"><span style="color: #0000ff; font-weight: bold;">def</span></a> main<span style="color: #F78811;">&#40;</span>args<span style="color: #000080;">:</span> Array<span style="color: #F78811;">&#91;</span>String<span style="color: #F78811;">&#93;</span><span style="color: #F78811;">&#41;</span> <span style="color: #F78811;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; println<span style="color: #F78811;">&#40;</span><span style="color: #6666FF;">&quot;Hello, world!&quot;</span><span style="color: #F78811;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #F78811;">&#125;</span><br />
<span style="color: #F78811;">&#125;</span></div></td></tr></tbody></table></div>
<p>Bu yazım biçimi bana yetmez diyenler <a href="http://www.scala-lang.org/node/166" onclick="pageTracker._trackPageview('/outgoing/www.scala-lang.org/node/166?referer=');">şu adresten</a> daha fazla kod örneği bulabilirler.</p>
<p>Scala&#8217;nın özelliklerine hızlıca bir bakacak olursak;</p>
<ul>
<li>Hem bir betik (script) dili, hem de derlenebilme özelliği olan bir dildir.</li>
<li>Scala derleyicileri kaynak kodunuzu, Java ve/veya <a href="http://hestia.typepad.com/flatlander/2009/01/getting-started-with-scala-on-net.html" onclick="pageTracker._trackPageview('/outgoing/hestia.typepad.com/flatlander/2009/01/getting-started-with-scala-on-net.html?referer=');">.NET</a> mimarilerine göre derlenebilir.</li>
<li>Dil, özellikle ölçeklenebilirlik alanına yönelik güçlü bir dildir.</li>
<li>Scala diliyle yazdığınız kodları deneyebilmeniz için CLI özelliğide bulunmaktadır.</li>
</ul>
<p>Scala diliyle ilgili türkçe bir kitap hazırlığı içindeyim. Ücretsiz dağıtmayı düşündüğüm bu kitaba <a href="http://hasanozgan.com/belgeler/scala-rehberi" onclick="pageTracker._trackPageview('/outgoing/hasanozgan.com/belgeler/scala-rehberi?referer=');">adresinden</a> ulaşabileceksiniz.</p>
<h5>Geliştirme Ortamı</h5>
<p>Scala derleyicileri, kodları derlediğinde JVM mimarisine dönüştüğü için Java araçlarıyla tam uyumludur. Java&#8217;daki birçok teknolojiyi kullanabilirsiniz.</p>
<p>Scala&#8217;nın bir CLI(command-line interpreter) arayüzü olduğunu söylemiştim. gelin hızlıca Scala ile birşeyler yazalım.</p>
<div class="codecolorer-container bash default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ scala<br />
This is an interpreter <span style="color: #000000; font-weight: bold;">for</span> Scala.<br />
Type <span style="color: #000000; font-weight: bold;">in</span> expressions to have them evaluated.<br />
Type :help <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #c20cb9; font-weight: bold;">more</span> information.<br />
<br />
scala<span style="color: #000000; font-weight: bold;">&gt;</span> <br />
<br />
<span style="color: #666666; font-style: italic;"># Example 1</span><br />
scala<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000;">1</span> + <span style="color: #000000;">2</span><br />
unnamed0: Int = <span style="color: #000000;">3</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Example 2</span><br />
scala<span style="color: #000000; font-weight: bold;">&gt;</span> unnamed0 <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #000000;">3</span><br />
unnamed1: Int = <span style="color: #000000;">9</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Example 3</span><br />
scala<span style="color: #000000; font-weight: bold;">&gt;</span> println<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">&quot;Hello, world!&quot;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
Hello, world<span style="color: #000000; font-weight: bold;">!</span><br />
unnamed2: Unit = <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></div></td></tr></tbody></table></div>
<p>Scala&#8217;ya daha fazla giriş yapmak için :) artima sitesindeki <a href="http://www.artima.com/scalazine/articles/steps.html" onclick="pageTracker._trackPageview('/outgoing/www.artima.com/scalazine/articles/steps.html?referer=');">First Step to Scala</a> yazısını tavsiye ederim.</p>
<p>Scala&#8217;yı popüler programlama editörleri <a href="https://lampsvn.epfl.ch/trac/scala/browser/scala-tool-support/trunk/src/vim" onclick="pageTracker._trackPageview('/outgoing/lampsvn.epfl.ch/trac/scala/browser/scala-tool-support/trunk/src/vim?referer=');">Vim</a> ve <a href="https://lampsvn.epfl.ch/trac/scala/browser/scala-tool-support/trunk/src/emacs" onclick="pageTracker._trackPageview('/outgoing/lampsvn.epfl.ch/trac/scala/browser/scala-tool-support/trunk/src/emacs?referer=');">Emacs</a> ile yazabileceğiniz gibi, popüler Java IDEleri (<a href="http://wiki.netbeans.org/Scala" onclick="pageTracker._trackPageview('/outgoing/wiki.netbeans.org/Scala?referer=');">Netbeans</a>, <a href="http://scala-ide.org" onclick="pageTracker._trackPageview('/outgoing/scala-ide.org?referer=');">Eclipse</a>, I<a href="http://plugins.intellij.net/plugin/?id=1347" onclick="pageTracker._trackPageview('/outgoing/plugins.intellij.net/plugin/?id=1347&amp;referer=');">ntellij IDEA CE</a>) ile yazabilirsiniz. Ben tercihimi Eclipse&#8217;ten yana kullandığımı ama Intellij&#8217;nin eklentisinin gerçekten başarılı olduğunuda belirtmeliyim. Maalesef Netbeans nasıl hiçbir fikrim yok ama Lift Framework&#8217;un yaratıcısı Netbeans&#8217;ı kullandığına dair 1-2 yazıya rastlamıştım. Kısacası burada karar size kalıyor.</p>
<h5>Java ile Scala Arasındaki Farklar</h5>
<p>Java ile Scala arasındaki farkları <a href="http://blogs.sun.com/sundararajan/entry/scala_for_java_programmers" onclick="pageTracker._trackPageview('/outgoing/blogs.sun.com/sundararajan/entry/scala_for_java_programmers?referer=');">şuradaki yazıda </a>bulabilirsiniz. Ayrıca hemen aşağıda bu konuda bulduğumu sunumuda inceleyebilirsiniz.</p>
<div style="width:425px" id="__ss_1856620"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/davetron5000/scala-for-java-developers-intro" title="Scala for Java Developers - Intro" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/davetron5000/scala-for-java-developers-intro?referer=');">Scala for Java Developers &#8211; Intro</a></strong><object id="__sse1856620" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scala-090813141457-phpapp02&#038;stripped_title=scala-for-java-developers-intro&#038;userName=davetron5000" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse1856620" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scala-090813141457-phpapp02&#038;stripped_title=scala-for-java-developers-intro&#038;userName=davetron5000" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/?referer=');">presentations</a> from <a href="http://www.slideshare.net/davetron5000" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/davetron5000?referer=');">David Copeland</a>.</div>
</div>
<p><br/></p>
<h5>Scala Araçları (birkaç iyi oyuncak)</h5>
<h6>SBT (Simple Build Tool)</h6>
<p>Scala ile Java teknolojilerinin tümünden faydalanabileceğinizden yukarıda söz etmiştim. Scala programcıları ilk zamanlar Maven kullansalarda, sonraları <a href="http://code.google.com/p/simple-build-tool" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/simple-build-tool?referer=');">Simple Build Tool</a> (aka SBT) isimli çok tatlı bir yapılandırma aracı kullanılmaya başlandı. Bu araçla yapılandırma işlemlerinizi, Scala diliyle yapabiliyorsunuz. Arkada, ivy ve maven kullanan bu başarılı araç için aynı maven&#8217;da olduğu gibi hızlıca eklentilerde yazabiliyorsunuz.</p>
<p>Örneğin ben proje kodumu sbt ile build edecek şekilde hazırlayıp. Buradan da <a href="https://github.com/musk/SbtEclipsify" onclick="pageTracker._trackPageview('/outgoing/github.com/musk/SbtEclipsify?referer=');">Eclipsify</a> isimli SBT eklentisi ile eclipse projesini yaratıyorum. Ayrıca SBT&#8217;yi, Eclipse içinden kullanmak <a href="https://github.com/frank06/sbt-eclipse-plugin" onclick="pageTracker._trackPageview('/outgoing/github.com/frank06/sbt-eclipse-plugin?referer=');">şuradan</a> ekletiye ulaşabilirsiniz.</p>
<h6>Scalatra Web Framework</h6>
<p><a href="https://github.com/scalatra/scalatra#readme" onclick="pageTracker._trackPageview('/outgoing/github.com/scalatra/scalatra_readme?referer=');">Scalatra</a> eskiden Step olarak anılan ve Ruby Sinatraya benzeyen bir web çatısı. Küçük projeler için hızlı uygulama yazmayı amaçlayanlar için iş görebilir. Ama daha çok fazla yolu olduğunu eklemekte fayda var. Aşağıda adından söz edeceğim Lift framework&#8217;e kıyasla çok eksiği bulunuyor.</p>
<h6>Lift Web Framework</h6>
<p><a href="http://blog.lostlake.org/" onclick="pageTracker._trackPageview('/outgoing/blog.lostlake.org/?referer=');">David Pollak</a> (a.k.a <a href="http://twitter.com/dpp" onclick="pageTracker._trackPageview('/outgoing/twitter.com/dpp?referer=');">@dpp</a>) tarafından yazılan web çatısıdır. David, framework&#8217;u hazırlarken birçok frameworkü incelemiş ve uygun gördüğü özelliklerini <a href="http://liftweb.net" onclick="pageTracker._trackPageview('/outgoing/liftweb.net?referer=');">Lift Web Framework</a>&#8216;e dahil etmiştir. Bugün en büyük referansı Foursquare olarak verilebilir. Yeni versiyonlarla MVC patterni kullanılarak web projeleri yazılabilse de aslında bileşen (Snippet) mimarisine dayanır. Kendi içinde ORM gibi birçok alt proje bulunduğunu iletmekte yarar var. </p>
<p>Lift <a href="http://seventhings.liftweb.net/" onclick="pageTracker._trackPageview('/outgoing/seventhings.liftweb.net/?referer=');">&#8220;Seven Thins&#8221;</a> isimli sayfasına girerek diğer frameworklere kıyasla yarattığı farkların neler olduğunu görebilirsiniz.</p>
<p><a href="http://liftweb.net" onclick="pageTracker._trackPageview('/outgoing/liftweb.net?referer=');">Lift Framework</a>&#8216;ün belgelemesi gerçekten iyidir. Biri David Pollak tarafından olmak üzere iki özgür kitap projesi bulunmaktadır. Bunlar;</p>
<ul>
<li><a href="http://simply.liftweb.net/" onclick="pageTracker._trackPageview('/outgoing/simply.liftweb.net/?referer=');">Simply Lift</a></li>
<li><a href="http://exploring.liftweb.net/" onclick="pageTracker._trackPageview('/outgoing/exploring.liftweb.net/?referer=');">Exploring Lift</a></li>
</ul>
<p>Lift projesinin kaynak kodlarına ve örnek uygulamalarına <a href="http://github.com/lift" onclick="pageTracker._trackPageview('/outgoing/github.com/lift?referer=');">Github üzerinde bulunan adresinden</a> erişebilirsiniz.</p>
<p>Scala dili ile ilgili başlangıç sorularınıza umarım cevaplar verebilmişimdir. Scala gerçekten eğlenceli ama bir o kadarda detaylı bir dil. Oracle&#8217;ın Sun&#8217;ı satın aldıktan sonra yapacakları belirsizliğini korurken bu konuda bir B planı olması bence gerçekten çok rahatlatıcı. Eğer sizde Scala ile birşeyler yapmayı düşünüyor ve kendinizi yalnız hissediyorsanız, <a href="http://scala-tr.org" onclick="pageTracker._trackPageview('/outgoing/scala-tr.org?referer=');">Scala Türkiye</a> ekibine katılabilirsiniz. Topluluk bu konuda etkinlikler yaparak faliyetlerine çok kısa bir süre içerisinde başlayacaktır.</p>
<p>Bir sonraki yazımızda elinizi Scala&#8217;ya bulamaya hazır olun. Scala diliyle framework kullanmadan Web dünyasına giriş yapacağız.<br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanozgan.com/2011/02/scalaya-giris/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Yeni Yılda Ölçeklenebilirlik Üzerine Planlar</title>
		<link>http://www.hasanozgan.com/2010/12/yeni-yilda-olceklenebilirlik-uzerine-planlar/</link>
		<comments>http://www.hasanozgan.com/2010/12/yeni-yilda-olceklenebilirlik-uzerine-planlar/#comments</comments>
		<pubDate>Fri, 31 Dec 2010 07:42:54 +0000</pubDate>
		<dc:creator>Hasan Ozgan</dc:creator>
				<category><![CDATA[Bilgisayar Bilimleri]]></category>
		<category><![CDATA[Hayatın İçinden]]></category>
		<category><![CDATA[İncelemeler]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Yazılım Mimarisi]]></category>
		<category><![CDATA[akka]]></category>
		<category><![CDATA[availability]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[distributed computing]]></category>
		<category><![CDATA[paralel computing]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[stability]]></category>

		<guid isPermaLink="false">http://www.hasanozgan.com/?p=369</guid>
		<description><![CDATA[2011 yılına girerken, bu blogun daha aktif yazılarla karşınızda olmasını planlıyorum. Yazılarım arasında Java ve Scala dilleri kullanılarak gerçekleştirilen NoSQL uygulamaları, ve Distributed Computing kütüphanleri ve gerçek hayatta kullanılan mimariler Scalability.in/web adresinde yer alacak. Bu adreste ise eskisi gibi yazılım ve bilişim dünyasındaki daha insancıl konular ve girişimcilik üzerine yazılar yazmaya devam edeceğim. Eğer bu [...]]]></description>
			<content:encoded><![CDATA[<p>2011 yılına girerken, bu blogun daha aktif yazılarla karşınızda olmasını planlıyorum. Yazılarım arasında Java ve Scala dilleri kullanılarak gerçekleştirilen NoSQL uygulamaları, ve Distributed Computing kütüphanleri ve gerçek hayatta kullanılan mimariler <a href="http://scalability.in/web" target="_blank" onclick="pageTracker._trackPageview('/outgoing/scalability.in/web?referer=');">Scalability.in/web</a> adresinde yer alacak. Bu adreste ise eskisi gibi yazılım ve bilişim dünyasındaki daha insancıl konular ve girişimcilik üzerine yazılar yazmaya devam edeceğim.</p>
<p>Eğer bu gibi konulardan hoşlanıyor ve/veya ilgileniyorsanız, aşağıda paylaştığım sunum ve makaleler ilginizi çekebilir.</p>
<p>Hepinize, umutlar ve mutlulukların eksik olmayacağı bir yıl dilerim!&#8230;</p>
<p><strong>Makaleler;</strong></p>
<ul>
<li><strong><a href="http://techpack.acm.org/cloud/cloud_computing.pdf" onclick="pageTracker._trackPageview('/outgoing/techpack.acm.org/cloud/cloud_computing.pdf?referer=');">Cloud Computing</a></strong></li>
<li><strong><a href="http://techpack.acm.org/parallel/JourneymanTour.pdf" onclick="pageTracker._trackPageview('/outgoing/techpack.acm.org/parallel/JourneymanTour.pdf?referer=');">Parallel Processing</a></strong></li>
</ul>
<p><strong>Sunumlar;</strong></p>
<div id="__ss_4062682" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Scalability, Availability &amp; Stability Patterns" href="http://www.slideshare.net/jboner/scalability-availability-stability-patterns" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/jboner/scalability-availability-stability-patterns?referer=');">Scalability, Availability &amp; Stability Patterns</a></strong><object id="__sse4062682" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scalabilitypatterns20100510-100512004526-phpapp02&amp;stripped_title=scalability-availability-stability-patterns&amp;userName=jboner" /><param name="name" value="__sse4062682" /><param name="allowfullscreen" value="true" /><embed id="__sse4062682" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scalabilitypatterns20100510-100512004526-phpapp02&amp;stripped_title=scalability-availability-stability-patterns&amp;userName=jboner" name="__sse4062682" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/?referer=');">presentations</a> from <a href="http://www.slideshare.net/jboner" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/jboner?referer=');">jboner</a>.</div>
</div>
<div id="__ss_2688678" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="The Anatomy Of The Google Architecture Fina Lv1.1" href="http://www.slideshare.net/hasanveldstra/the-anatomy-of-the-google-architecture-fina-lv11" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/hasanveldstra/the-anatomy-of-the-google-architecture-fina-lv11?referer=');">The Anatomy Of The Google Architecture Fina Lv1.1</a></strong><object id="__sse2688678" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=theanatomyofthegooglearchitecturefinalv1-1-091210035101-phpapp02&amp;stripped_title=the-anatomy-of-the-google-architecture-fina-lv11&amp;userName=hasanveldstra" /><param name="name" value="__sse2688678" /><param name="allowfullscreen" value="true" /><embed id="__sse2688678" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=theanatomyofthegooglearchitecturefinalv1-1-091210035101-phpapp02&amp;stripped_title=the-anatomy-of-the-google-architecture-fina-lv11&amp;userName=hasanveldstra" name="__sse2688678" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/?referer=');">presentations</a> from <a href="http://www.slideshare.net/hasanveldstra" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/hasanveldstra?referer=');">Hasan Veldstra</a>.</div>
</div>
<div id="__ss_40959" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Scalable Web Architectures: Common Patterns and Approaches" href="http://www.slideshare.net/techdude/scalable-web-architectures-common-patterns-and-approaches" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/techdude/scalable-web-architectures-common-patterns-and-approaches?referer=');">Scalable Web Architectures: Common Patterns and Approaches</a></strong><object id="__sse40959" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scalable-web-architectures-common-patterns-and-approaches-9562&amp;stripped_title=scalable-web-architectures-common-patterns-and-approaches&amp;userName=techdude" /><param name="name" value="__sse40959" /><param name="allowfullscreen" value="true" /><embed id="__sse40959" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scalable-web-architectures-common-patterns-and-approaches-9562&amp;stripped_title=scalable-web-architectures-common-patterns-and-approaches&amp;userName=techdude" name="__sse40959" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more presentations from <a href="http://www.slideshare.net/techdude" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/techdude?referer=');">techdude</a>.</div>
</div>
<div id="__ss_39717" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="High performance web sites" href="http://www.slideshare.net/techdude/high-performance-web-sites" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/techdude/high-performance-web-sites?referer=');">High performance web sites</a></strong><object id="__sse39717" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=high-performance-web-sites-4352&amp;stripped_title=high-performance-web-sites&amp;userName=techdude" /><param name="name" value="__sse39717" /><param name="allowfullscreen" value="true" /><embed id="__sse39717" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=high-performance-web-sites-4352&amp;stripped_title=high-performance-web-sites&amp;userName=techdude" name="__sse39717" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more presentations from <a href="http://www.slideshare.net/techdude" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/techdude?referer=');">techdude</a>.</div>
</div>
<div id="__ss_545001" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="7 Stages of Scaling Web Applications" href="http://www.slideshare.net/davemitz/7-stages-of-scaling-web-applications" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/davemitz/7-stages-of-scaling-web-applications?referer=');">7 Stages of Scaling Web Applications</a></strong><object id="__sse545001" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=linuxworld-1218083370681251-9&amp;stripped_title=7-stages-of-scaling-web-applications&amp;userName=davemitz" /><param name="name" value="__sse545001" /><param name="allowfullscreen" value="true" /><embed id="__sse545001" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=linuxworld-1218083370681251-9&amp;stripped_title=7-stages-of-scaling-web-applications&amp;userName=davemitz" name="__sse545001" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/?referer=');">presentations</a> from <a href="http://www.slideshare.net/davemitz" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/davemitz?referer=');">David Mitzenmacher</a>.</div>
</div>
<div id="__ss_4798642" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Akka - Scala Summit OSCON 2010" href="http://www.slideshare.net/jboner/akka-scala-summit-oscon-2010" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/jboner/akka-scala-summit-oscon-2010?referer=');">Akka &#8211; Scala Summit OSCON 2010</a></strong><object id="__sse4798642" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=akkaoscon2010-100720144637-phpapp01&amp;stripped_title=akka-scala-summit-oscon-2010&amp;userName=jboner" /><param name="name" value="__sse4798642" /><param name="allowfullscreen" value="true" /><embed id="__sse4798642" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=akkaoscon2010-100720144637-phpapp01&amp;stripped_title=akka-scala-summit-oscon-2010&amp;userName=jboner" name="__sse4798642" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/?referer=');">presentations</a> from <a href="http://www.slideshare.net/jboner" onclick="pageTracker._trackPageview('/outgoing/www.slideshare.net/jboner?referer=');">jboner</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanozgan.com/2010/12/yeni-yilda-olceklenebilirlik-uzerine-planlar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jAvatar &#8211; Kavanoz Bükme Procesi</title>
		<link>http://www.hasanozgan.com/2010/12/javatar-kavanoz-bukme-procesi/</link>
		<comments>http://www.hasanozgan.com/2010/12/javatar-kavanoz-bukme-procesi/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 00:17:52 +0000</pubDate>
		<dc:creator>Hasan Ozgan</dc:creator>
				<category><![CDATA[Araçlar]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Sistem Yönetimi]]></category>

		<guid isPermaLink="false">http://www.hasanozgan.com/?p=353</guid>
		<description><![CDATA[Linux terminalde çalışırken, aradığınız bir sınıfın $CLASSPATH&#8217;teki hangi jar dosyasında olduğunu bulmanızı sağlar. Bash programlama hakkında çok fazla bilgiye sahip değilim. Konunun uzmanlarından güzel fikirler ve düzeltmeler bekliyorum. (-: Kısacası geliştirmeye açıktır. İstediğiniz gibi kodu evirip çevirip bu oyuncakla oynayabilir, yeni kavanoz bükme tekniklerini paylaşabilirsiniz. Kullanım şekli; $ javatar &#60;className&#62; #!/bin/bash echo -ne "\033[1mjAvatar ver. [...]]]></description>
			<content:encoded><![CDATA[<p>Linux terminalde çalışırken, aradığınız bir sınıfın $CLASSPATH&#8217;teki hangi jar dosyasında olduğunu bulmanızı sağlar.</p>
<p>Bash programlama hakkında çok fazla bilgiye sahip değilim. Konunun uzmanlarından güzel fikirler ve düzeltmeler bekliyorum. (-: Kısacası geliştirmeye açıktır. İstediğiniz gibi kodu evirip çevirip bu oyuncakla oynayabilir, yeni kavanoz bükme tekniklerini paylaşabilirsiniz. </p>
<p><strong>Kullanım şekli;<br />
</strong><em>$ javatar &lt;className&gt;<br />
</em></p>
<pre name="code" class="code" style="font-size:0.9em">
#!/bin/bash
echo -ne "\033[1mjAvatar ver. 1.0.3 (by meddah)\n\033[0m";
echo -ne "May the 'Jar Bender' force be with you!\n";

export source=$1
files=();
classes=();

#resolver
for file in `echo $CLASSPATH|tr ":" "\n"|grep -i jar`;
do
    for class in `jar -tvf $file|awk '{print $8}'|grep -e $source`;
    do
        if [[ $files != *$file* ]]; then
            files+="$file ";
        fi

        classes+="$file:$class ";
    done
done

#dispatcher
for file in $files; do
    echo -e "\033[1m$file\033[0m";

    for class in $classes; do
        if [[ $class == *$file* ]]
        then
            echo -n "    ";
            echo $class|tr ":" " "|awk '{print $2}';
        fi
    done
done

echo -ne "\n";</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanozgan.com/2010/12/javatar-kavanoz-bukme-procesi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HTC Desire için Android 2.2 (Froyo) Güncellemesi</title>
		<link>http://www.hasanozgan.com/2010/09/htc-desire-icin-android-2-2-froyo-guncellemesi/</link>
		<comments>http://www.hasanozgan.com/2010/09/htc-desire-icin-android-2-2-froyo-guncellemesi/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 14:27:41 +0000</pubDate>
		<dc:creator>Hasan Ozgan</dc:creator>
				<category><![CDATA[Araçlar]]></category>
		<category><![CDATA[Hayatın İçinden]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Mobil]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[clockworkmod]]></category>
		<category><![CDATA[froyo]]></category>
		<category><![CDATA[goldcard]]></category>
		<category><![CDATA[htc desire]]></category>
		<category><![CDATA[htc sense]]></category>
		<category><![CDATA[reflash]]></category>
		<category><![CDATA[unrevoked]]></category>
		<category><![CDATA[update.zip]]></category>

		<guid isPermaLink="false">http://www.hasanozgan.com/?p=331</guid>
		<description><![CDATA[iPhone&#8217;nun kendince koyduğu saçma kurallardan gerçekten o kadar bunaldım ki, yaklaşık 3-4 ay önce HTC Desire satın aldım. Android birçok yönden gerçekten de özgür bir platform ve mobil yaşam sunuyor. Android 2.2 sürümü ile beraber özgürlük başka bir boyut kazandı. Peki, Android 2.2 neler getiriyor; Flash 10.1 desteği Portable Wi-fi hotspot. Çok dilli klavye Performans [...]]]></description>
			<content:encoded><![CDATA[<p>iPhone&#8217;nun kendince koyduğu saçma kurallardan gerçekten o kadar bunaldım ki, yaklaşık 3-4 ay önce HTC Desire satın aldım. Android birçok yönden gerçekten de özgür bir platform ve mobil yaşam sunuyor. Android 2.2 sürümü ile beraber özgürlük başka bir boyut kazandı. Peki, Android 2.2 neler <a href="http://developer.android.com/sdk/android-2.2-highlights.html" onclick="pageTracker._trackPageview('/outgoing/developer.android.com/sdk/android-2.2-highlights.html?referer=');">getiriyor</a>;</p>
<ul>
<li>Flash 10.1 desteği</li>
<li>Portable Wi-fi hotspot.</li>
<li>Çok dilli klavye</li>
<li>Performans iyileştirmeleri (JiT Compiler, Kernel vb..)</li>
<li>Google uygulamalarının güncellemeleri</li>
<li>Radyo güncellemesi</li>
<li>Yeni Android geliştirici özellikleri (push sync, hata bildirimi gibi)</li>
<li>Exchange desteği</li>
<li>Kamera ve galeri ile ilgili değişiklikler</li>
<li>Daha uzun batarya ömrü.</li>
</ul>
<p>Yukarıda sayılan özellikler gerçekten iştah açıcı. Bu sebeple lafı çok uzatmadan, HTC Sense arabirimini koruyarak güncelleme yapabileceğinizi anlatacağım.</p>
<p><em><strong>Aşağıda anlatılan işlem sırasında telefonunuza birşey olursa tüm sorumluluk size aittir!</strong></em></p>
<p><em>Peki şimdi işe başlayalım;</em></p>
<ul>
<li>Öncelikle yedeklerinizi alın, çünkü tüm bilgileriniz SİLİNECEK!.. (Yedeklerinizi almak için HTC Sync ya da Google Sync kullanabilirsiniz)</li>
<li>Yedeklerinizi aldıktan sonra ilk yapmamız gereken, Recovery moda geçmek için, Mikro SD kartımızı <strong>Goldcard</strong> denilen bir biçime çevirmek.
<ul>
<li>Android SDK&#8217;yı <a href="http://developer.android.com/sdk/index.html" onclick="pageTracker._trackPageview('/outgoing/developer.android.com/sdk/index.html?referer=');">şuradan</a> indirip, kurmanız yeterli.</li>
<li>Micro SD kartınızın takılı olduğu Desire’ınızı bilgisayarınıza bağlayın ve Settings/Applications/Development/USB Debugging Mode‘u aktif olarak işaretleyin.</li>
<li>Komut satırına geçtiğinizde, /tools dizininde adb isimli bir uygulama göreceksiniz. Öncelikle, &#8220;adb devices&#8221; komutu ile cihazın seri numarasını kontrol edin. Eğer bunu görmüyorsanız birşeyler yanlış demektir.</li>
<li>”adb shell cat /sys/class/mmc_host/mmc1/mmc1:*/cid“ komutunu çalıştırın. Karşınıza şunun gibi (022600bd227d9c0447322407092d5324) uzun bir numara çıkacak.</li>
<li><a href="http://hexrev.soaa.me/" onclick="pageTracker._trackPageview('/outgoing/hexrev.soaa.me/?referer=');">http://hexrev.soaa.me/</a> adresine gidin ve bu uzun kodu tersine çevirin.</li>
<li><a href="http://psas.revskills.de/?q=goldcard" onclick="pageTracker._trackPageview('/outgoing/psas.revskills.de/?q=goldcard&amp;referer=');">http://psas.revskills.de/?q=goldcard</a> adresine giderek tersine çevirdiğiniz numarayı ve kendi geçerli e-mailinizi girerek goldcard.img dosyasını edinin. Dosya e-mail adresinize gelecek.</li>
<li>Şimdi image dosyamızı MikroSD kartımıza yazmamız gerekiyor.
<ul>
<li><strong>Mac OS X ya da Linux kullanıyorsanız;</strong></li>
<li>Komut satırına geçin.</li>
<li><strong>&#8220;diskutil list&#8221; </strong>komutu ile HTC Desire telefonunuzdaki SD kartı görüp görmediğinizi kontrol edin. DOS_FAT_32 olarak tanımlı olan kısmı kullanacaksınız. Diyelim ki örneğimizde bu /dev/disk2 olsun.</li>
<li>Daha sonra SD kartınızı unmount edin. Bunun için <strong>&#8220;diskutil unmountDisk /dev/disk2&#8243;</strong> komutunu çalıştırabilirsiniz.</li>
<li>Şimdi goldcard&#8217;ımızı oluşturalım. Bunun için <strong>&#8220;sudo dd bs=512 if=~/goldcard.img of=/dev/disk2&#8243;</strong> komutunu çalıştırmamız yeterli. Unutmayın disk2 sizde farklı bir numaraya sahip olabilir.</li>
</ul>
<ul>
<li><strong>Windows kullanıyorsanız;</strong></li>
<li>HxD isimli Hex editörü indirin, <a href="http://download.cnet.com/3001-20_4-10891068.html?spi=de6596f3025d2a1f103d2e6f7728b7be" onclick="pageTracker._trackPageview('/outgoing/download.cnet.com/3001-20_4-10891068.html?spi=de6596f3025d2a1f103d2e6f7728b7be&amp;referer=');">bu linkten indirebilirsiniz</a>.</li>
<li>HxD yi bilgisayarınıza kurun ve çalıştırın. Windows Vista ya da 7 kullanıyorsanız “Yönetici Olarak Çalıştır” ile açın.</li>
<li>“Extra” sekmesinden “Open Disk” i seçin. “Physical Disk” (burası önemli, mutlaka physical olmalı) seçeneği altından, “Removable Disk” i seçin ve “Open as ReadOnly” seçeneğindeki işareti KALDIRIN ve OK e basın.</li>
<li>Tekrar “Extra” menüsüne gelin ve “Open Disk Image” i seçin. Size e-mail ile gelen goldcard.img dosyasını seçin ve açın. Şimdi iki farklı sekme görmeniz gerekli, biri “Removable Disk” ya da SD kart, diğeri ise “goldcard.img” olmalı. “Sector Size” 512 (Hard disks/Floppy disks) şeklinde uyarı aldığınızda OK‘e basın.</li>
<li>“goldcard.img” sekmesine tıklayın, “Edit” menüsünden “Select All” deyin ve yine Edit menüsünden “Copy” deyin.</li>
<li>“Removable disk” sekmesine tıklayın. Sıfırıncı satırdan 170 inci satıra kadar (170 de dahil) seçin ve Edit menüsünden “Paste Write” seçeneğine tıklayın.</li>
<li>“File” menüsünden “Save” e tıklayın ve editörü kapatın. Artık goldcardınız hazır.</li>
</ul>
</li>
<li> Goldcard&#8217;ı hazırladıktan sonra <a href="http://www.megaupload.com/?d=WUPI07UO" onclick="pageTracker._trackPageview('/outgoing/www.megaupload.com/?d=WUPI07UO&amp;referer=');">HTC Sense ve Froyo 2.2&#8242;yi içeren güncelleme (ROM) dosyası</a>nı ve <a href="http://android.adamg.co.uk/bravo/radio/32.43.00.32U_5.09.00.20.zip" onclick="pageTracker._trackPageview('/outgoing/android.adamg.co.uk/bravo/radio/32.43.00.32U_5.09.00.20.zip?referer=');">radio uygulaması için gerekli olan dosyayı</a> indirmeniz gerekmektedir. Her iki dosyayı MikroSD karta kopyaladıktan sonra <em><strong>Official_FroYo_Market_fixed.zip</strong></em> isimli dosyayı <em><strong>update.zip</strong></em> olarak değiştirmelisiniz!.</li>
<li>Şimdi yapmamız gereken <em>reflash</em> işlemi için telefonumuzu <em>ClockworkMod</em>&#8216;a geçirmek.<br />
HTC ürünleri için tüm platformlarda çalışan ve Clockworkmod&#8217;a geçişi sağlayan bir <a href="http://unrevoked.com/" onclick="pageTracker._trackPageview('/outgoing/unrevoked.com/?referer=');">unrevoked</a> adında bir uygulama mevcut. Bu uygulamayı kullanarak telefonu clockworkmod&#8217;a çevirmek mümkün. Uygulamalı olarak çevirme işlemini nasıl olacağını <a href="http://www.youtube.com/watch?v=KkaQe-uim5k&amp;feature=player_embedded#!" onclick="pageTracker._trackPageview('/outgoing/www.youtube.com/watch?v=KkaQe-uim5k_amp_feature=player_embedded&amp;referer=');">youtube da bulunan video</a>da izleyebilirsiniz.</p>
<p>Clockworkmod&#8217;a geçiş yaptıktan sonra yukleme işlemini tamamlamanızla birlikte işlem tamamlanmış olacaktır.</li>
</ul>
</li>
</ul>
<p>Eğer clockworkmod&#8217;da iken sorunsuz bir şekilde kurulum işlemini yaptıysanız, telefonunuz yeniden başladığında Android 2.2 versiyonu ile başlayacak. İşte hepsi bu kadar. Froyo&#8217;nun güzellikleri şimdiden hayırlı olsun.</p>
<p><strong>Kaynaklar:</strong><br />
<a href="http://theunlockr.com/2010/06/07/how-to-root-the-htc-desire/" onclick="pageTracker._trackPageview('/outgoing/theunlockr.com/2010/06/07/how-to-root-the-htc-desire/?referer=');">http://theunlockr.com/2010/06/07/how-to-root-the-htc-desire/</a><br />
<a href="http://theunlockr.com/2010/03/10/how-to-create-a-goldcard/" onclick="pageTracker._trackPageview('/outgoing/theunlockr.com/2010/03/10/how-to-create-a-goldcard/?referer=');">http://theunlockr.com/2010/03/10/how-to-create-a-goldcard/</a><br />
<a href="http://developer.android.com/sdk/index.html" onclick="pageTracker._trackPageview('/outgoing/developer.android.com/sdk/index.html?referer=');">http://developer.android.com/sdk/index.html</a><br />
<a href="http://www.knowyourcell.com/htc/htc-desire/desire-guides/474135/how_to_root_the_htc_desire.html" onclick="pageTracker._trackPageview('/outgoing/www.knowyourcell.com/htc/htc-desire/desire-guides/474135/how_to_root_the_htc_desire.html?referer=');">http://www.knowyourcell.com/htc/htc-desire/desire-guides/474135/how_to_root_the_htc_desire.html</a><br />
<a href="http://www.androidturkiye.info/2010/07/09/htc-desire-icin-root-clockworkmod-recovery-dj-droid-v1-0/" onclick="pageTracker._trackPageview('/outgoing/www.androidturkiye.info/2010/07/09/htc-desire-icin-root-clockworkmod-recovery-dj-droid-v1-0/?referer=');">http://www.androidturkiye.info/2010/07/09/htc-desire-icin-root-clockworkmod-recovery-dj-droid-v1-0/</a><br />
<a href="http://wiki.cyanogenmod.com/index.php?title=Full_Update_Guide_-_HTC_Desire" onclick="pageTracker._trackPageview('/outgoing/wiki.cyanogenmod.com/index.php?title=Full_Update_Guide_-_HTC_Desire&amp;referer=');">http://wiki.cyanogenmod.com/index.php?title=Full_Update_Guide_-_HTC_Desire</a><br />
<a href="http://www.dkszone.net/unrevoked-root-htc-android-phones-evo-4gdesiredroid-incredible" onclick="pageTracker._trackPageview('/outgoing/www.dkszone.net/unrevoked-root-htc-android-phones-evo-4gdesiredroid-incredible?referer=');">http://www.dkszone.net/unrevoked-root-htc-android-phones-evo-4gdesiredroid-incredible</a><br />
<a href="http://www.koushikdutta.com/2010/02/clockwork-recovery-image.html" onclick="pageTracker._trackPageview('/outgoing/www.koushikdutta.com/2010/02/clockwork-recovery-image.html?referer=');">http://www.koushikdutta.com/2010/02/clockwork-recovery-image.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanozgan.com/2010/09/htc-desire-icin-android-2-2-froyo-guncellemesi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bir Web Çatısı (Framework) Anatomisi</title>
		<link>http://www.hasanozgan.com/2010/08/bir-web-catisi-framework-anatomisi/</link>
		<comments>http://www.hasanozgan.com/2010/08/bir-web-catisi-framework-anatomisi/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 20:19:34 +0000</pubDate>
		<dc:creator>Hasan Ozgan</dc:creator>
				<category><![CDATA[Araçlar]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Makale]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Tasarım]]></category>
		<category><![CDATA[Yazılım Mimarisi]]></category>
		<category><![CDATA[acegi]]></category>
		<category><![CDATA[ehcache]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[ioc]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[jstl]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[quartz]]></category>
		<category><![CDATA[sitemesh]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[tiles]]></category>
		<category><![CDATA[url-rewrite]]></category>
		<category><![CDATA[webflow]]></category>

		<guid isPermaLink="false">http://www.hasanozgan.com/?p=252</guid>
		<description><![CDATA[2 yıldır PHP diliyle, Joy isimli açık kaynak bir framework geliştiriyordum. Bu framework’e Joy adını vermemin başlıca nedeni, uygulama geliştirken gerçekten zevk vermesini istememden kaynaklanıyordu. Bu framework’un 5 farklı versiyonu mevcut ve hepsinde de farklı yaklaşımlar kullandım. İlk versiyonu Event Driven patterni kullanırken, sonraki sürümlerde MVC patterni ağırlıklıydı. Event driven yapısı ise sonraki sürümlerde Workflow [...]]]></description>
			<content:encoded><![CDATA[<p>2 yıldır PHP diliyle, <a href="http://code.google.com/p/joy" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/joy?referer=');">Joy</a> isimli açık kaynak bir framework geliştiriyordum. Bu framework’e Joy adını vermemin başlıca nedeni, uygulama geliştirken gerçekten zevk vermesini istememden kaynaklanıyordu. Bu framework’un 5 farklı versiyonu mevcut ve hepsinde de farklı yaklaşımlar kullandım. İlk versiyonu Event Driven patterni kullanırken, sonraki sürümlerde MVC patterni ağırlıklıydı. Event driven yapısı ise sonraki sürümlerde Workflow amacıyla yaşam döngüsünde yerini almıştı.</p>
<p>Bu sure zarfında çok şey öğrendiğimi itiraf etmeliyim. Birkaç ay once, piyasada çok fazla başarılı framework olması nedeniyle bu amacımdan vazgeçtim. Web dünyasının distributed computing ve parallel programming gibi konularada ihtiyaçlarınıda göz önünde bulundurarak, PHP yerini, JAVA’ya bıraktı ve Java projelerimin vazgeçilmez aracı olarak yerini aldı.</p>
<p>Java’yı projelerimin merkezine yerleştikten sonra, bu ekosistemde, <a href="http://code.google.com/p/joy" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/joy?referer=');">Joy Framework</a>’unde kullandığım fikirlerin sağlayacak araçları aramaya koyuldum. İlk zamanlar kaygılarım olsada J2EE ve Spring framework çevresinde aradığım herşeyi buldum. Aşağıda bu fikirleri ve Java dünyasındaki araçları bulacaksınız.</p>
<div class="maddeler">
<ul>
<li>URL Rewriter</li>
<li>Router (Dispatcher)</li>
<li>Core
<ul>
<li>Config Management</li>
<li>Log Management &amp; Debugging</li>
<li>Cache Management
<ul>
<li>Distributed Cache</li>
<li>Locale Cache</li>
</ul>
</li>
</ul>
</li>
<li>Controller
<ul>
<li>Filter</li>
<li>Workflow</li>
</ul>
</li>
<li>Context
<ul>
<li>Culture</li>
<li>User</li>
<li>Request</li>
<li>Response</li>
<li>Session</li>
</ul>
</li>
<li>View
<ul>
<li>Render</li>
<li>Template Engine</li>
<li>Tag Library</li>
</ul>
</li>
<li>Model
<ul>
<li>ORM</li>
<li>Persistence</li>
</ul>
</li>
<li>Plugin
<ul>
<li>Geolocation vb&#8230;</li>
</ul>
</li>
<li>Tools (Extra)
<ul>
<li>Console Tool
<ul>
<li>Code Generator</li>
<li>Deployment</li>
<li>Builder</li>
<li>Documentation</li>
</ul>
</li>
<li>Testing</li>
<li>Inversion of Control</li>
<li>Scaffolding</li>
<li>Scheduler</li>
<li>Authentication &amp; Authorization
<ul>
<li>OAuth</li>
<li>LDAP</li>
</ul>
</li>
<li>Client Side Library
<ul>
<li> Javascript (jQuery)
<ul>
<li>Cache</li>
<li>Cookie</li>
<li>Hotkeys</li>
<li>Lazy Including</li>
<li>Querystring</li>
<li>Comet</li>
<li>AJAX</li>
</ul>
</li>
<li> CSS Frameworks
<ul>
<li>960gs, Blueprint</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<p>Yukarıda sözünü ettiğim konuları PHP ile  birçoğunu geliştirdim. xUnit, ORM , Library gibi kapsamlı konular için ise 3<sup>rd</sup> parti araçları kullandım. Bu yönüyle Integrated Framework olarakta adlandırılabilir.</p>
<p>Hayatımın 2 yılı bu yapı üzerinde uygulamalar geliştiriken Java’ya geçince bir boşluğa düştüğümü ve paniklediğimi itiraf etmeliyim. Neyse ki Spring Framework ve Java’nın Servlet mimarisi beni ciddi rahatlattı. Java dünyasının üstadları yukarıdaki konularda daha once benim yerime kafa yormuş ve düşündüğüm birçok şeyi hayata geçirmişti. Şimdi gelin bu teknolojilerin neler olduğuna bir göz atalım. Sonrada Java’nın ve Spring’in gücüyle bir web çatısı nasıl olur onun güzel bir örneğini inceleyelim.</p>
<div class="maddeler">
<ul>
<li><a href="http://www.oracle.com/technetwork/java/index-jsp-135475.html" onclick="pageTracker._trackPageview('/outgoing/www.oracle.com/technetwork/java/index-jsp-135475.html?referer=');">Java Servlet</a>
<ul>
<li><a href="http://java.sun.com/products/jsp/" onclick="pageTracker._trackPageview('/outgoing/java.sun.com/products/jsp/?referer=');">JSP</a> ve <a href="http://www.oracle.com/technetwork/java/index-jsp-135995.html" onclick="pageTracker._trackPageview('/outgoing/www.oracle.com/technetwork/java/index-jsp-135995.html?referer=');">JSTL</a></li>
</ul>
</li>
<li><a href="http://www.springsource.org" onclick="pageTracker._trackPageview('/outgoing/www.springsource.org?referer=');">Spring</a>
<ul>
<li><a href="http://static.springsource.org/spring/docs/2.0.x/reference/mvc.html" onclick="pageTracker._trackPageview('/outgoing/static.springsource.org/spring/docs/2.0.x/reference/mvc.html?referer=');">MVC</a></li>
<li><a href="http://static.springsource.org/spring/docs/2.0.x/reference/beans.html" onclick="pageTracker._trackPageview('/outgoing/static.springsource.org/spring/docs/2.0.x/reference/beans.html?referer=');">Inversion of Container</a></li>
<li><a href="http://static.springsource.org/spring-security/site/index.html" onclick="pageTracker._trackPageview('/outgoing/static.springsource.org/spring-security/site/index.html?referer=');">ACEGİ (Spring Security)</a></li>
<li><a href="http://www.springsource.org/webflow" onclick="pageTracker._trackPageview('/outgoing/www.springsource.org/webflow?referer=');">Web flow</a></li>
</ul>
</li>
<li><a href="http://hibernate.org" onclick="pageTracker._trackPageview('/outgoing/hibernate.org?referer=');">Hibernate</a></li>
<li><a href="http://www.opensymphony.com/sitemesh/" onclick="pageTracker._trackPageview('/outgoing/www.opensymphony.com/sitemesh/?referer=');">SiteMesh</a>, <a href="http://tiles.apache.org/" onclick="pageTracker._trackPageview('/outgoing/tiles.apache.org/?referer=');">Tiles</a></li>
<li><a href="http://www.quartz-scheduler.org/" onclick="pageTracker._trackPageview('/outgoing/www.quartz-scheduler.org/?referer=');">Quartz Scheduler</a></li>
<li><a href="http://logging.apache.org/log4j/" onclick="pageTracker._trackPageview('/outgoing/logging.apache.org/log4j/?referer=');">Log4J</a></li>
<li><a href="http://maven.apache.org/" onclick="pageTracker._trackPageview('/outgoing/maven.apache.org/?referer=');">Maven</a></li>
<li><a href="http://ehcache.org/" onclick="pageTracker._trackPageview('/outgoing/ehcache.org/?referer=');">EhCache</a></li>
<li><a href="http://www.tuckey.org/urlrewrite/" onclick="pageTracker._trackPageview('/outgoing/www.tuckey.org/urlrewrite/?referer=');">UrlRewrite</a></li>
</ul>
</div>
<p>Gelin şimdi yukarıdaki Java araçlarını yakından inceleyelim.</p>
<p><strong>Java Servlet:</strong><br />
1.0 sürümün, JSR-315 diye adlandırılan 3.0 sürümüne kadar birkaç özellik dışında yaşam döngüsü pek değişmedi. Bu yaşam döngüsü, servlet mimarisinin esnekliğinin ana kaynağıdır. Web.xml dosyası içinde, Listener, Filter, Servlet tagleri bir web projesindeki tüm gereksinimleri kapsar. Frameworkler ise buradaki mimariden faydalanarak bu işleri daha kolay bir hale getirir. Şimdi gelin bu taglerin ne anlama geldiğini bir hatırlayalım.</p>
<ul>
<li><strong>Listener:</strong> Uygulama deploy edildiğinde ve undeploy edildiğinde burası çalışır. Isteklerden bağımsız olarak çalıştırılması düşünülen alanlar için düşünülmüştür. Örneğin; görev tanımlı işler için kullanılabilir. Quartz isimli scheduler&#8217;ın listener sınıfları vardır. Cache mekanizması içinde bu alan düşünülebilir. Yine EhCache uygulamasınında listenerları bulunmaktadır.</li>
<li><strong>Filter:</strong> Filter tüm Request, Response trafiğinin arasına giren adında anlaşılacağı üzere filtreleme işlevi gören sınıflardır. Filterlara örnek olarak, Spring Security, ve Url Rewrite verilebilir.</li>
<li><strong>Servlet:</strong> Response&#8217;un yaratıldığı alandır. Bu nedenle bir MVC framework&#8217;te genelde burada Router (Dispatcher) sınıfı bulunmaktadır.</li>
</ul>
<p><strong>Java Server Pages:</strong><br />
JSR-245 spesifikasyonunda detayları açıklanmıştır. JSP, PHP veya ASP&#8217;ye benzer. HTML üzerinde Java kodlarının çevik bir şekilde kodlanarak kullanılması amaçlanır. JSP dosyaları arkada otomatik olarak servlete dönüştürülür. Frameworkler ile birlikte, JSP dosyaları, template engine&#8217;i gibi kullanılmaya başlanmıştır.</p>
<p><strong>Java Standard Tag Library:</strong><br />
Java&#8217;nın tag kütüphanesidir. Aynı ASP.NET&#8217;te olduğu gibi yeni bileşenler yaratılabilmesi sayesinde kod tekrarı engellenir ve yeniden kullanılabilirlik sağlanır.</p>
<p><strong>Spring Framework:</strong><br />
Java dünyasında elinizi sallasanız bir Web Framework&#8217;e çarparsınız. O kadar fazladır ki, artık bıkkınlık getirir. Hangisini kullanmalı diye araştırıldığında, Spring Framework en çok tutulan frameworklerin başında gelmektedir. Bunun en önemli nedenlerinin başında, IoC, AOP gibi konuları sayesinde OOP ve tasarım prensiplerine uygun, bakımı kolay, temiz kodlar yazmamızı sağlaması gelmektedir. Struts&#8217;ı koltuğundan etmiş, Java EE 6&#8242;ya, getirdiği yeniliklerle ilham vermiş $ukella bir frameworktür. Kendi içinde, Security, Webflow, MVC vb gibi alt projeleri vardır. Sadece web alanında kullanmasa da, özellikle hakim olduğu alan burasıdır. VMWare tarafından desteklendiğini de belirtmekte yarar var.</p>
<p><strong>Spring MVC:</strong><br />
Web dünyasının son moda tasarım şablonu olan MVC&#8217;nin Spring implementasyonudur. İşleri anotasyonlar kullanılarak, XML konfigürasyonlar en aza indirgenir. Zaten bir IoC konteynerı olması nedeniyle. Model ve View alanında alternatif teknolojilerle entegre olması mümkündür. Bu da teknoloji seçimi esnekliği sağlar.</p>
<p><strong>Spring Security:</strong><br />
Spring Security, ACEGi olarakta bilinen bir projedir. Authentication ve authorization konularında çözümler sunar.</p>
<p><strong>Spring Web flow:</strong><br />
İş akışlarını, kod bağımlılığını en aza indirgeyerek, XML konfigürasyonları ile yapılmasını sağlar. Bunun için event driven bir mimari kullanır.</p>
<p><strong>Hibernate:</strong><br />
JBoss&#8217;un geliştirdiği bir numaralı Persistence aracı olan Hibernate&#8217;i bilmeyen yoktur sanırım. Kısaca DAO tasarım şablonunu destekler. Ve veri erişim katmanı mimarsi ile veritabanı tablolarını sınıflar ile eşleştirir.</p>
<p>Alternatif olarak ise Java EE 5 ile hayatımıza giren JPA adlı bir başka persistence aracıda bulunmaktadır. Java EE 6 ile birlikte daha çok göreceğimiz persistence aracıdır.</p>
<p><strong>Sitemesh:</strong><br />
Çok yeni olmasına rağmen, her geçen gün daha fazla ilgi görmeyi başaran bir şablon motorudur(templete engine). Java dünyasında, bir framework seçildiğinde, özellikle bu framework, Spring gibi integrated bir framework ise, layout(master page)  ihtiyacı ile ilgili bir arayış söz konusu olur. İşte Sitemesh, Tiles ve Velocity bu durumlarda en çok başvurulan şablon motorudur. Açıkçası, ilk önce ilgimi Tiles çekse de, sonraları Grails projesininde katkılarıyla Sitemesh ilgileri üzerinde topladı diyebilirim. Sitemesh, Tiles&#8217;tan daha basit olması diğer bir tercih nedenidir. Decorator Design patternini kullanır. Bunun anlamı, layout sayfanızda, sadece değiştireceğiniz alanları belirler ve ilgili sayfalara sadece bu alanları değiştirirsiniz.</p>
<p><strong>Quartz Scheduler:</strong><br />
Web dünyasında mutlaka, bazı işleri arkada düzenli olarak kontrol eden, yaratan vb servislere ihtyaç vardır. Örneğin, mail gönderme, statu güncellme vb.. İşte bu gibi konularda schuder bir servis gereksinimi var olur. Fakat iş mantığını ve birçok yardımcı kod java kodumuzdadır. Ve bu Cron gibi bir servise bağlandığında her seferinde bir VM&#8217;in belleğe yüklenip, kaldırılması anlamına gelir. Bunu engellemek için Servlet mimarisinde listener kullanmak daha yerinde olur. Çünkü Listener&#8217;lar aynı bellek alanını kullanır. Bu sayede ciddi bir performans kazanımı sağlanır.</p>
<p>İşte bu nedenle Quartz yaratılmıştır. Quartz trigger modelleri sayesinde, Cron benzeri bir formatta da konfigüre edilebilmektedir.</p>
<p><strong>Log4J:</strong><br />
Apache projesinin loglama mimarisi.</p>
<p><strong>EhCache:</strong><br />
Son zamanlarda, frameworkler gibi çok fazla cache projesi ortaya çıkmıştır. Bunların çok azı distirbuted bir yapıda çalışır ve clustered, replication gibi konuları destekler. Ehcache ise, distributed cache desteklmesi, memory yetersiz olduğu durumlarda diski kullanması (SWAP) gibi özellikleri sayesinde, en çok tercih edilen bir cache projesi olmuştur.</p>
<p>Java&#8217;da memcache gibi Java dışında bir dil kullanılarak yazılan cache motorlarının kullanılmamasının en önemli sebebi, In Memory kavramıdır. Ehcache, uygulama ile aynı memory alanında çalışması ciddi bir performans artışı sağlamaktadır.</p>
<p><strong>Maven:</strong><br />
Maven, hem derlemek, hem de bağımlılıkları yönetmek için kullanılan çok kapsamlı bir deployment aracıdır. Derlemek işinin sadece bir bölümüdür. Bağımlılıkları yönetmenin yanında proje iskeleti konfigürasyon yaratmak konusunda da hünerleri vardır.</p>
<p>Diyelim ki, Spring MVC, Tiles ve Hibernate&#8217;i birlikte kullanmak istediniz ve konfigürasyonları ile uğraşmak istemiyorsunuz. <a href="http://code.google.com/p/spring-maven-archetype/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/spring-maven-archetype/?referer=');">http://code.google.com/p/spring-maven-archetype/</a> projesi işinizi görebilir. Maven üzerinde birçok archetype projesi bulabilirsiniz. Ya da kendi archetype&#8217;nızı yazarak yeni bir projeye hızlı bir başlangıç yapabilirsiniz.</p>
<p><a href="http://code.google.com/p/archy/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/archy/?referer=');">AppFuse</a> adında birçok alternatif teknoloji konfigürasyonunu içinde barındıran bir archetype projeside mevcuttur.</p>
<p><strong>Not: </strong>Son olarak söylemek istediğim bir şey daha var, yukarıdaki bir çok teknolojinin entegre edilmiş ve çevik bir web programlama ortamı sağlayan framework daha var. Java VM ile çalışmasına rağmen kodları Java değil. Gördüğüm en iyi web frameworklerinden biri olan bu framework&#8217;ün adı <a href="http://www.grails.org/" onclick="pageTracker._trackPageview('/outgoing/www.grails.org/?referer=');">Grails</a>. Yine arkasında <a href="http://springsource.org" onclick="pageTracker._trackPageview('/outgoing/springsource.org?referer=');">Spring</a> ekibi var ve Spring&#8217;in birçok teknolojisi ustaca kullanılmış. Dil olarak ise <a href="http://groovy.codehaus.org/" onclick="pageTracker._trackPageview('/outgoing/groovy.codehaus.org/?referer=');">Groovy</a> adında Ruby benzeri bir dil kullanılıyor. Groovy bir Java standardı. Java&#8217;nın gücüyle çevikliğin hızını birleştirmek isteyenler için küçük bir bilgi olsun istedim!</p>
<p>Artık elimizi koda bulamanın zamanı geldi. Yukarıdaki teknolojiler ile ilgili örneklere sırasıyla önümüzdeki yazılarda detaylı olarak ve örnekler sunarak inceleyeceğiz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanozgan.com/2010/08/bir-web-catisi-framework-anatomisi/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Java Dünyasında Web Surfing ve Spring Framework</title>
		<link>http://www.hasanozgan.com/2010/08/java-dunyasinda-web-surfing-ve-spring-framework/</link>
		<comments>http://www.hasanozgan.com/2010/08/java-dunyasinda-web-surfing-ve-spring-framework/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 21:18:42 +0000</pubDate>
		<dc:creator>HasanOzgan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ecplise]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven2]]></category>
		<category><![CDATA[sitemesh]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://javatar.bz/?p=58</guid>
		<description><![CDATA[Scala dili ile tanıştığımda çok radikal bazı kararlar aldım. Java teknolojileri dışındaki tüm bildiğim teknolojileri (PHP, C#, Perl, Ruby) elimin tersi ile itme kararı aldım! Neden mi? Çünkü Java hem kariyer planım (Web Architect) için hem de mesleki tatmin anlamında oldukça güçlü bir platform ve ekosisteme sahip. Peki ha deyince yapılabiliyor mu derseniz, işte bu [...]]]></description>
			<content:encoded><![CDATA[<p>Scala dili ile tanıştığımda çok radikal bazı kararlar aldım. Java teknolojileri dışındaki tüm bildiğim teknolojileri (PHP, C#, Perl, Ruby) elimin tersi ile itme kararı aldım! Neden mi? Çünkü Java hem kariyer planım (Web Architect) için hem de mesleki tatmin anlamında oldukça güçlü bir platform ve ekosisteme sahip. Peki ha deyince yapılabiliyor mu derseniz, işte bu yaz onun hikayesidir.</p>
<p>Java&#8217;ya geçme kararı almadan önce Scala diliyle birşeyler yapmayı düşünüyordum. Lift framework&#8217;u falan incelemiş ve bazı özelliklerinden çok etkilenmiştim. Sonra <a href="http://kariyer.net" target="_blank" onclick="pageTracker._trackPageview('/outgoing/kariyer.net?referer=');">Kariyer.net</a> ve <a href="http://indeed.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/indeed.com?referer=');">Indeed.com</a> üzerinde; <a href="http://liftweb.net/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/liftweb.net/?referer=');">Lift</a> ve <a href="http://scala-lang.org" onclick="pageTracker._trackPageview('/outgoing/scala-lang.org?referer=');">Scala</a> ile verilen iş ilanlarına baktım. Scala ile şu anda para kazanamayacağımı anladıktan sonra, Java&#8217;nın gücünden faydalanmaya karar verdim ve Scala&#8217;yı özellikle Akka projesi ile distributed konularda kullanmaya karar verdim.</p>
<p>2006-2007 döneminde Turkcell&#8217;in <a href="http://turkcell-im.com" onclick="pageTracker._trackPageview('/outgoing/turkcell-im.com?referer=');">SDP-A</a> adlı projesinde çalışmamdan bu yana daha sonra çalıştığım şirketlerde Java teknolojilerine çok az sürmüş olmamdan kaynankalan bir gerileme söz konusuydu. Bu durumu kotarmak için, <em>&#8220;Sun Certified Java Programmer&#8221;</em> sertifikası alarak, hem kendime, hem de ekosistemine bilgimi ispat edeceğime karar verdim. Ekim ayının sonunda SCJP sınava gireceğim. Bunun için öncelikle Amazon&#8217;dan <a href="http://www.amazon.co.uk/Certified-Programmer-Study-Guide-CX-310-065/dp/0071591060" onclick="pageTracker._trackPageview('/outgoing/www.amazon.co.uk/Certified-Programmer-Study-Guide-CX-310-065/dp/0071591060?referer=');">SCJP Study Guide</a> ve <a href="http://www.amazon.com/Java-TM-Puzzlers-Pitfalls-ebook/dp/B001U5VJVS/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1281388008&amp;sr=1-1" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Java-TM-Puzzlers-Pitfalls-ebook/dp/B001U5VJVS/ref=sr_1_1?s=books_amp_ie=UTF8_amp_qid=1281388008_amp_sr=1-1&amp;referer=');">Java Puzzlers</a> kitaplarını sipariş ettim.</p>
<p>Tabii sadece sertifika sahibi olmak ve/veya diğer dillerden miras gelen kod geliştirme standartlarını (design patterns gibi) bilmek yeterli değildi. Java ekosisteminde kullanılan araçlarada hakim olmalıydım. Web üzerinde çalışmalar yapan biri olarak, Java dünyasının popüler web çatılarını incelemeye başladım. <a href="http://www.springsource.org/" onclick="pageTracker._trackPageview('/outgoing/www.springsource.org/?referer=');">Spring Framework</a>&#8216;ün adını çokca duymama rağmen, Java 6 ile tam uyumlu olan Jboss&#8217;un <a href="http://seamframework.org/" onclick="pageTracker._trackPageview('/outgoing/seamframework.org/?referer=');">Seam framework</a>&#8216;ude ilgimi çekmişti ilk zamanlar. Sonra bu kararı kollektif yatırıma bıraktım, biraz araştırma yapınca Java ekosisteminde bir numara olan web çatısının açık ara spring olduğunu anladım. Bu nedenle Spring ile yoluma devam etmeye karar verdim.</p>
<p>Framework seçme işlemiyle aynı paralel zamanda IDE&#8217;de araştırmaya başladım. Maalesef Java öyle Vim ile yazmak işkenceye dönüşebiliyor. Önceleri IntelliJ Idea&#8217;yı sevsem de, ücretli olmasından ve her açılışta projeyi derinlemesine incelemesinden arayışa devam ettim. Netbeans&#8217;i denedim ama oldum olası ısınamamışımdır. Sonra eski dost Eclipse&#8217;e geri döndüm. Ve bugün IDE olarak tercihim <a href="http://eclipse.org" onclick="pageTracker._trackPageview('/outgoing/eclipse.org?referer=');">Eclipse</a>&#8216;ten yana oldu.</p>
<p>Derleme işlerinde ise eskiden Ant kullanan biri olsamda Maven2&#8242;yi tercih ettim. Maven ile tanışmam Scala daha doğrusu Lift framework vesile oldu. Paket bağımlılıkları ve deployment sürecini kolaylaştırması nedeniyle hemen kanım kaynadı. Archetype&#8217;lar sayesinde bir proje iskeleti hazırlamak çok kolay oluyor.</p>
<p>Spring framework&#8217;u seçtikten sonra, template engine armaya başladım. Önce Spring&#8217;te JSP örnekleri görünce ısınamadım. Ben JSF&#8217;teki gibi tag kütüphaneleri oluşturabileceğim bir template engine arıyordum. JSF ile Spring&#8217;i aynı çatıda kullanmayı denediysemde beceremedim. Daha sonra birşeyleri yanlış yaptığıma karar vererek durumumu tekrar inceledim. Ve JSP örneklerindeki JSTL teknolojisini keşfettim. JSTL tag libarary olmasına rağmen benim için yeterli değildi, layout yada master page gibi bir mimari içermiyordu. Araştırmalarım sırasında önce <a href="http://tiles.apache.org/" onclick="pageTracker._trackPageview('/outgoing/tiles.apache.org/?referer=');">Apache Tiles</a> ile hedefe ulaştığımı düşünsem de, sonra <a href="http://www.opensymphony.com/sitemesh/" onclick="pageTracker._trackPageview('/outgoing/www.opensymphony.com/sitemesh/?referer=');">Sitemesh</a> ile bu işleri daha temiz bir şekilde çözelbildiğimi farkettim.</p>
<p>ORM ve Persistence aracı olarak tüm java kullanıcılarının tek geçtiği <a href="http://www.hibernate.org" onclick="pageTracker._trackPageview('/outgoing/www.hibernate.org?referer=');">Hibernate</a>&#8216;i kullanmaya karar verdim.</p>
<p>Son olarak güvenlik ve yetkinlendirme konularında <a href="http://www.acegisecurity.org" onclick="pageTracker._trackPageview('/outgoing/www.acegisecurity.org?referer=');">Acegi</a>, zaman ayarlı işler için ise <a href="http://http://www.quartz-scheduler.org/" onclick="pageTracker._trackPageview('/outgoing/http_//www.quartz-scheduler.org/?referer=');">Quartz</a> kullanmaya karar verdim.</p>
<p>Bir sonraki yazımda spring framework ve söylediğim araçların Maven kullanarak Spring çatısı altında nasıl entegre edeceğimizi konuşacağız. Tabii konularda ilerledikçe seviyemizi arttıracak ve vites büyülteceğiz.</p>
<p>Ama bu süreçte bana akıl hocalığı (mentor) yapan ve deneyimlerini sıkılmadan paylaşan değerli dostum <a href="http://rayyildiz.com" onclick="pageTracker._trackPageview('/outgoing/rayyildiz.com?referer=');">Ramazan Ayyıldız</a>a teşekkür ederim.</p>
<p>Java kocaman dalgaları olan bir derya. Ve bu dalgalarla surf yapmanın tadına doyulmayacağı aşikar. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hasanozgan.com/2010/08/java-dunyasinda-web-surfing-ve-spring-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

