<?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>Tayfun Öziş Erikan</title>
	<atom:link href="http://www.tayfunoziserikan.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.tayfunoziserikan.com/blog</link>
	<description>He is a web developer, graphic &#38; web designer, Zend Framework, CodeIgniter, Doctrine, ExtJS &#38; Sencha Touch Expert. Also one of the creater Kebab Project, the co-founder of lab2023 – internet technologies. And blogger, public speaker, guitar player, amateur divers &#38; fisher, amateur photographer.</description>
	<lastBuildDate>Wed, 01 Feb 2012 22:39:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Kebab Web OS 2.0 client versiyonuna ait ilk ekran görüntüleri</title>
		<link>http://www.tayfunoziserikan.com/blog/kebab-web-os-2-0-client-versiyonuna-ait-ilk-ekran-goruntuleri</link>
		<comments>http://www.tayfunoziserikan.com/blog/kebab-web-os-2-0-client-versiyonuna-ait-ilk-ekran-goruntuleri#comments</comments>
		<pubDate>Wed, 01 Feb 2012 22:26:35 +0000</pubDate>
		<dc:creator>tayfun.ozis.erikan</dc:creator>
				<category><![CDATA[Açık Kaynak]]></category>
		<category><![CDATA[Css - Css3]]></category>
		<category><![CDATA[Ext JS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Kebab Project]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[ext js 4]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[kebab project]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://www.tayfunoziserikan.com/blog/?p=221</guid>
		<description><![CDATA[Bir süredir üzerinde çalıştığımız Kebab 2.0&#8242;ın client web os tarafına ait henüz css stillendirme çalışmaları tamamlanmamış ilk halinin birkaç ekran görütüsünü sizlerle paylaşmak istiyorum. Bu sürümde Ext JS 4&#8242;ün yeni MVC yapısının tüm nimetlerinden yararlanadık. Ayrıca os görünümü için unity ve &#8230; <a href="http://www.tayfunoziserikan.com/blog/kebab-web-os-2-0-client-versiyonuna-ait-ilk-ekran-goruntuleri">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Bir süredir üzerinde çalıştığımız <strong>Kebab 2.0&#8242;ın client web os</strong> tarafına ait <strong>henüz css stillendirme çalışmaları tamamlanmamış</strong> ilk halinin birkaç ekran görütüsünü sizlerle paylaşmak istiyorum.<span id="more-221"></span></p>
<p>Bu sürümde<strong> Ext JS 4&#8242;ün yeni MVC</strong> yapısının tüm nimetlerinden yararlanadık. Ayrıca os görünümü için unity ve mac-os x den esinlenmeler ve <strong>uygulamalara</strong> ait <strong>SVG iconlar</strong> kullanarak daha esnek bir kullanım oluşturmaya çalışıyoruz.</p>
<p>Geliştiriciler açısından da uygulama oluşturma için Ext JS&#8217;e ait MVC yapısını parçalara bölerek <strong>H-MVC</strong> yapısını uyguladık. Dolayısı ile bir uygulamayı desktop&#8217;dan bağımsız olarak tasarlayıp son haline getirdikten sonra<strong> Kebab Uygulaması</strong> haline getirip web-os masaüstünde kullanıcıya sunmak sadece birkaç dakika zamanımızı alıyor. Bu sayede Sencha Designer gibi araçlar kullanarak da rahatça uygulamalarımızı birbirinden bağımsız olarak tasarlayabileceğiz.</p>
<p>Ayrıca <strong>i18n (multi language) desteği</strong> ve <strong>config desteği</strong> ile birlikte uygulamaların cevirileri ve ayarlamaları kolayca yönetmek mümkün.</p>
<p>Son olarak <strong>Kebab Bootstrap</strong> adını verdiğimiz sistemle tüm MVC uygulamarınızı tek bootstrap dosyası ve basit bir configurasyonla yüklemeniz ve Ext Loader&#8217;ile tüm bağımlı sınıfların yüklenerek uygulamanın çalışır duruma gelmesi ve deploy süreçleri kolaylaştırıldı.</p>
<p>Henüz development versiyonunda olan Kebab 2.0 client web-os  Ext JS &#8216;in önceki gün beta-2 olarka duyurulan <strong>Ext JS 4.1.0-beta-2</strong> versiyonu ile de test edilerek daha iyi bir performans ve esnek bir yapıda hazırlamak için elimizden geleni yapıyoruz. Özellikle belirtmek isterim ki Kebab&#8217;ı kendi üretim süreçlerimizde ve geliştirdiğimiz ürünlerin paralelinde iyileştirmeye ve geliştirmeye devam edeceğiz.</p>
<p><strong>GitHub adresi ve kaynak kodlar :</strong></p>
<p><strong></strong> <a href="https://github.com/kebab-project/client-web-os">https://github.com/kebab-project/client-web-os</a></p>
<p><strong>Konuyla ilgili ekran görüntüleri aşağıdadır&#8230;</strong></p>

<a href='http://www.tayfunoziserikan.com/blog/kebab-web-os-2-0-client-versiyonuna-ait-ilk-ekran-goruntuleri/kebab-web-os-2-0-first-look-deksktop-2' title='kebab-web-os-2.0-first-look-deksktop-2'><img width="150" height="150" src="http://www.tayfunoziserikan.com/blog/wp-content/uploads/2012/02/kebab-web-os-2.0-first-look-deksktop-2-150x150.png" class="attachment-thumbnail" alt="kebab-web-os-2.0-first-look-deksktop-2" title="kebab-web-os-2.0-first-look-deksktop-2" /></a>
<a href='http://www.tayfunoziserikan.com/blog/kebab-web-os-2-0-client-versiyonuna-ait-ilk-ekran-goruntuleri/kebab-web-os-2-0-first-look-desktop' title='kebab-web-os-2.0-first-look-desktop'><img width="150" height="150" src="http://www.tayfunoziserikan.com/blog/wp-content/uploads/2012/02/kebab-web-os-2.0-first-look-desktop-150x150.png" class="attachment-thumbnail" alt="kebab-web-os-2.0-first-look-desktop" title="kebab-web-os-2.0-first-look-desktop" /></a>
<a href='http://www.tayfunoziserikan.com/blog/kebab-web-os-2-0-client-versiyonuna-ait-ilk-ekran-goruntuleri/kebab-web-os-2-0-first-look-login-1' title='kebab-web-os-2.0-first-look-login-1'><img width="150" height="150" src="http://www.tayfunoziserikan.com/blog/wp-content/uploads/2012/02/kebab-web-os-2.0-first-look-login-1-150x150.png" class="attachment-thumbnail" alt="kebab-web-os-2.0-first-look-login-1" title="kebab-web-os-2.0-first-look-login-1" /></a>
<a href='http://www.tayfunoziserikan.com/blog/kebab-web-os-2-0-client-versiyonuna-ait-ilk-ekran-goruntuleri/kebab-web-os-2-0-first-look-login-2' title='kebab-web-os-2.0-first-look-login-2'><img width="150" height="150" src="http://www.tayfunoziserikan.com/blog/wp-content/uploads/2012/02/kebab-web-os-2.0-first-look-login-2-150x150.png" class="attachment-thumbnail" alt="kebab-web-os-2.0-first-look-login-2" title="kebab-web-os-2.0-first-look-login-2" /></a>
<a href='http://www.tayfunoziserikan.com/blog/kebab-web-os-2-0-client-versiyonuna-ait-ilk-ekran-goruntuleri/kebab-web-os-2-0-first-look-directory-structure' title='kebab-web-os-2.0-first-look-directory-structure'><img width="150" height="150" src="http://www.tayfunoziserikan.com/blog/wp-content/uploads/2012/02/kebab-web-os-2.0-first-look-directory-structure-150x150.png" class="attachment-thumbnail" alt="kebab-web-os-2.0-first-look-directory-structure" title="kebab-web-os-2.0-first-look-directory-structure" /></a>

<p>Herkese iyi çalışmalar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tayfunoziserikan.com/blog/kebab-web-os-2-0-client-versiyonuna-ait-ilk-ekran-goruntuleri/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kebab Project&#8217;in v.1.5.0.rc2 sürümü yayınlandı.</title>
		<link>http://www.tayfunoziserikan.com/blog/kebab-projectin-v-1-5-0-rc2-surumu-yayinlandi</link>
		<comments>http://www.tayfunoziserikan.com/blog/kebab-projectin-v-1-5-0-rc2-surumu-yayinlandi#comments</comments>
		<pubDate>Wed, 30 Nov 2011 22:15:47 +0000</pubDate>
		<dc:creator>tayfun.ozis.erikan</dc:creator>
				<category><![CDATA[Kebab Project]]></category>
		<category><![CDATA[kebab project]]></category>

		<guid isPermaLink="false">http://www.tayfunoziserikan.com/blog/?p=216</guid>
		<description><![CDATA[Merhabalar, Kebab Project&#8217;in v.1.5.0.rc2 sürümü yayınlandı. Detaylı bilgiyi http://kebab-project.2299591.n4.nabble.com/Kebab-Project-1-5-0-rc2-has-been-released-tt4123892.html adresinden görebilirsiniz İyi çalışmalar.]]></description>
			<content:encoded><![CDATA[<p>Merhabalar,</p>
<p>Kebab Project&#8217;in v.1.5.0.rc2 sürümü yayınlandı.</p>
<p>Detaylı bilgiyi<a href=" http://kebab-project.2299591.n4.nabble.com/Kebab-Project-1-5-0-rc2-has-been-released-tt4123892.html" target="_blank"> http://kebab-project.2299591.n4.nabble.com/Kebab-Project-1-5-0-rc2-has-been-released-tt4123892.html</a> adresinden görebilirsiniz</p>
<p>İyi çalışmalar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tayfunoziserikan.com/blog/kebab-projectin-v-1-5-0-rc2-surumu-yayinlandi/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kebab Project 2.0.x ilk testleri yazıldı</title>
		<link>http://www.tayfunoziserikan.com/blog/kebab-project-2-0-xilk-testleri-yazildi</link>
		<comments>http://www.tayfunoziserikan.com/blog/kebab-project-2-0-xilk-testleri-yazildi#comments</comments>
		<pubDate>Thu, 17 Nov 2011 12:19:03 +0000</pubDate>
		<dc:creator>tayfun.ozis.erikan</dc:creator>
				<category><![CDATA[Açık Kaynak]]></category>
		<category><![CDATA[Ext JS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Kebab Project]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby On Rails]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[jasmine]]></category>
		<category><![CDATA[kebab project]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://www.tayfunoziserikan.com/blog/?p=213</guid>
		<description><![CDATA[İlk rspec testlerini yazmaya başladığımız Kebab Project&#8216;in Revolution kod adlı 2.0 versiyonunda, Ruby ve JavaScript tarafında TDD ve BDD konularında hassas davranmaya çalışıyoruz. Kebab&#8217;ın server tarafı olan Ruby on Rails için Rspec,  client tarafı olan Ext JS 4 Web OS uygulamasında ise &#8230; <a href="http://www.tayfunoziserikan.com/blog/kebab-project-2-0-xilk-testleri-yazildi">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>İlk rspec testlerini yazmaya başladığımız <a href="http://www.kebab-project.com/" target="_blank">Kebab Project</a>&#8216;in Revolution kod adlı 2.0 versiyonunda, Ruby ve JavaScript tarafında <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">TD</a>D ve <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development" target="_blank">BDD</a> konularında hassas davranmaya çalışıyoruz. Kebab&#8217;ın server tarafı olan <a href="http://rubyonrails.org/" target="_blank">Ruby on Rails</a> için <a href="http://rspec.info/" target="_blank">Rspec</a>,  client tarafı olan <a href="http://www.sencha.com/products/extjs/" target="_blank">Ext JS 4</a> Web OS uygulamasında ise <a href="http://pivotal.github.com/jasmine/" target="_blank">Jasmine</a> kullanılmaktadır.<span id="more-213"></span></p>
<blockquote><header>
<div><img src="http://lab2023.com/wp-content/themes/striking/includes/timthumb.php?src=http://lab2023.com/wp-content/uploads/2011/11/rspec-test.png&amp;h=250&amp;w=628&amp;zc=1" alt="Kebab Revolution First Rspec Tests" /><img src="http://lab2023.com/wp-content/themes/striking/images/image_shadow.png" alt="" /></div>
</header>
<p>We decided to use <a title="rspec" href="http://rspec.info/" target="_blank">rspec</a> for test at <a title="Kebab Revolution" href="http://kebab-project.com/" target="_blank">Kebab Revolution</a> on last month. We wrote 25 test for <a title="Tenant" href="https://github.com/kebab-project/server-ror/blob/master/app/models/tenant.rb" target="_blank">Tenant</a> and <a title="User" href="https://github.com/kebab-project/server-ror/blob/master/app/models/user.rb" target="_blank">User</a>models. If you want to see the test code, look at <a title="Github" href="https://github.com/kebab-project/server-ror/tree/master/spec/models" target="_blank">Github</a>. You can see the test result at <a href="http://lab2023.com/wp-content/uploads/2011/11/Test-Results-spec.html" target="_blank">test result html file.</a> We continue to write test for Kebab 2.x Revolution.</p>
<p>Best Regards.</p></blockquote>
<p><strong>Test çıktısı: </strong><a href="http://lab2023.com/wp-content/uploads/2011/11/Test-Results-spec.html">http://lab2023.com/wp-content/uploads/2011/11/Test-Results-spec.html</a><br />
<strong>Kaynak kodlar:</strong> <a href="https://github.com/kebab-project/server-ror/tree/master/spec/models">https://github.com/kebab-project/server-ror/tree/master/spec/models</a><br />
<strong>Haberin orjinal kaynağı; </strong><a href="http://lab2023.com/kebab-revolution-first-rspec-tests/">http://lab2023.com/kebab-revolution-first-rspec-tests/</a></p>
<p>Test temelli geşiştirici ve konuyla ilgililere duyurulur.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tayfunoziserikan.com/blog/kebab-project-2-0-xilk-testleri-yazildi/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sass ve Compass alet çantama hoş geldiniz</title>
		<link>http://www.tayfunoziserikan.com/blog/sass-ve-compass-alet-cantama-hos-geldiniz</link>
		<comments>http://www.tayfunoziserikan.com/blog/sass-ve-compass-alet-cantama-hos-geldiniz#comments</comments>
		<pubDate>Fri, 11 Nov 2011 22:30:25 +0000</pubDate>
		<dc:creator>tayfun.ozis.erikan</dc:creator>
				<category><![CDATA[Alet Çantası]]></category>
		<category><![CDATA[Css - Css3]]></category>
		<category><![CDATA[Geliştirici Günlüğü]]></category>
		<category><![CDATA[compass]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[sass]]></category>
		<category><![CDATA[scss]]></category>

		<guid isPermaLink="false">http://www.tayfunoziserikan.com/blog/?p=191</guid>
		<description><![CDATA[Merhaba dostlar, Uzunca bir zamandır planlayıp iş yogunlugundan nihayet kolları sıvama fırsatı bulabildiğim Sass ve Compass artık alet çantama bizzat alınmış bulunuyor. Burada sizlere kısaca nasıl kurup nasıl kullanabileceğinizi anlatmak istiyorum. Henüz çok yeni olsamda, bu konuda uzmanlaştıkça daha detaylı yazılar &#8230; <a href="http://www.tayfunoziserikan.com/blog/sass-ve-compass-alet-cantama-hos-geldiniz">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Merhaba dostlar,</p>
<p>Uzunca bir zamandır planlayıp iş yogunlugundan nihayet kolları sıvama fırsatı bulabildiğim <strong><a href="http://sass-lang.com/" target="_blank">Sass</a></strong> ve <strong><a href="http://compass-style.org/" target="_blank">Compass</a></strong> artık alet çantama bizzat alınmış bulunuyor.</p>
<p>Burada sizlere kısaca nasıl kurup nasıl kullanabileceğinizi anlatmak istiyorum. Henüz çok yeni olsamda, bu konuda uzmanlaştıkça daha detaylı yazılar gelecektir.</p>
<p>Orjinali  <a href="http://www.gelistiricigunlugu.com/" target="_blank">gelistiricigunlugu.com</a>&#8216;da bulunan makalelerden alıntı ve yazıların tam adresleri aşağıdadır;<span id="more-191"></span></p>
<blockquote><p><strong>Sass nedir ?</strong></p>
<p>Merhaba dostlar,</p>
<p>Uzunca bir zamandır planlayıp iş yogunlugundan nihayet kolları sıvama fırsatı bulabildiğim <strong><a href="http://sass-lang.com/" target="_blank">Sass</a></strong> ve <strong><a href="http://compass-style.org/" target="_blank">Compass</a></strong> artık alet çantama bizzat alınmış bulunuyor. Burada sizlere kısaca nasıl kurup nasıl kullanabileceğinizi anlatmak istiyorum. Henüz çok yeni olsamda, bu konuda uzmanlaştıkça daha detaylı yazılar yazmaya devam edeceğim. Birbirinin devamı niteliğinde olan bu iki konunun ilki olan <strong>Sass</strong> ile anlatıma başlamak istiyorum. Ayrıca ilişkili olarak <a href="http://www.gelistiricigunlugu.com/compass-nedir/" target="_blank">Compass nedir ? </a>malaesini de okumanızı tavsiye ederim.</p>
<p><strong>Yazının devamı için: </strong><a href="http://www.gelistiricigunlugu.com/sass-nedir/" target="_blank">http://www.gelistiricigunlugu.com/sass-nedir/ </a>adresini ziyaret ediniz.</p>
<p>&#8212;&#8212;&#8212;-</p>
<p><strong>Compass nedir ?</strong></p>
<p>Bir önceki makalem olan <a href="http://www.gelistiricigunlugu.com/sass-nedir/" target="_blank">Sass nedir ?</a> konusuna paralel olarak okumanızı tavsiye edeceğim bu yazımda, kısaca <strong>Compass’</strong>ın ne olduğundan ve <strong>Sass</strong>‘ a neler kazandırdığından, sisteminize nasıl kurulacağından ve basitçe nasıl kullanacağınızdan bahsetmek istiyorum.</p>
<p><strong>Yazının devamı için: </strong><a href="http://www.gelistiricigunlugu.com/compass-nedir/" target="_blank">http://www.gelistiricigunlugu.com/compass-nedir/</a> adresini ziyaret ediniz.</p></blockquote>
<p>İyi çalışmalar dilerim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tayfunoziserikan.com/blog/sass-ve-compass-alet-cantama-hos-geldiniz/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ext JS 4 Baslangıç Kılavuzu</title>
		<link>http://www.tayfunoziserikan.com/blog/ext-js-4-baslangic-kilavuzu</link>
		<comments>http://www.tayfunoziserikan.com/blog/ext-js-4-baslangic-kilavuzu#comments</comments>
		<pubDate>Thu, 10 Nov 2011 00:26:28 +0000</pubDate>
		<dc:creator>tayfun.ozis.erikan</dc:creator>
				<category><![CDATA[Ext JS]]></category>
		<category><![CDATA[Geliştirici Günlüğü]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[ext js]]></category>
		<category><![CDATA[ext js 4]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[sencha sdk tools]]></category>

		<guid isPermaLink="false">http://www.tayfunoziserikan.com/blog/?p=188</guid>
		<description><![CDATA[Merhaba, Bazı sevdiğim web-yazılım geliştirici dostlarım ile birlikte içerik oluşturmak için kolları sıvadığımız gelistiricigunlugu.com&#8216;da yayınlanan, aşağıda kısa bir alıntısını bulacağınız yeni makalemi sizlerle paylaşmak istiyorum. Merhabalar, Uzunca bir zaman Ext JS 3 ile projeler geliştirdikten sonra, yakın zamanda bir çok &#8230; <a href="http://www.tayfunoziserikan.com/blog/ext-js-4-baslangic-kilavuzu">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Merhaba,</p>
<p>Bazı sevdiğim web-yazılım geliştirici dostlarım ile birlikte içerik oluşturmak için kolları sıvadığımız <a href="http://www.gelistiricigunlugu.com/" target="_blank">gelistiricigunlugu.com</a>&#8216;da yayınlanan, aşağıda kısa bir alıntısını bulacağınız yeni makalemi sizlerle paylaşmak istiyorum.</p>
<blockquote><p>Merhabalar,</p>
<p>Uzunca bir zaman Ext JS 3 ile projeler geliştirdikten sonra, yakın zamanda bir çok yeni beta versiyonu çıkan <strong>Ext JS 4</strong> ile çalışmaya başladım. Bu makalemde sizlerle <strong>Ext JS 4 için hızlı bir başlangıç klavuzu</strong> oluşturmaya çalışacağım. Makalenin hazırlanmasında <a href="http://www.sencha.com/learn/" target="_blank">Sencha Learning Center</a>&#8216;da bulunan <a href="http://docs.sencha.com/ext-js/4-0/#!/guide/getting_started" target="_blank">ilgili makale</a>lerden faydalandığımı belirtmek isterim..</p>
<p><strong>Yazının devamı için:</strong><a href="http://www.gelistiricigunlugu.com/ext-js-4-baslangic-kilavuzu/">http://www.gelistiricigunlugu.com/ext-js-4-baslangic-kilavuzu/</a> adresini ziyaret ediniz.</p></blockquote>
<p>İyi çalışmalar dilerim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tayfunoziserikan.com/blog/ext-js-4-baslangic-kilavuzu/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ext JS 4 – The Data Package (Veri Paketi) – Bölüm 2</title>
		<link>http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-2</link>
		<comments>http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-2#comments</comments>
		<pubDate>Fri, 30 Sep 2011 21:50:38 +0000</pubDate>
		<dc:creator>tayfun.ozis.erikan</dc:creator>
				<category><![CDATA[Açık Kaynak]]></category>
		<category><![CDATA[Akıl Defterim]]></category>
		<category><![CDATA[Ext JS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Seminerler & Etkinlikler]]></category>
		<category><![CDATA[Seminerler Notlarım]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[belongsTo]]></category>
		<category><![CDATA[data package]]></category>
		<category><![CDATA[exclusion]]></category>
		<category><![CDATA[ext js]]></category>
		<category><![CDATA[hasMany]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[inclusion]]></category>
		<category><![CDATA[local storage]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[persence]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[session storage]]></category>
		<category><![CDATA[store]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.tayfunoziserikan.com/blog/?p=170</guid>
		<description><![CDATA[Tekrar merhaba, Bir önceki Ext JS 4 veri paketi (Data package) &#8211; Bölüm 1 ile ilgili yazımın devamı olan bölüm 2&#8242; ye hoş geldiniz. Bu bölümde sizlere ilişkiler (assocations), iç içe verilerin yüklenmesi (nested data), geçerlilik ve doğrulama (validations) konularını aktarmaya &#8230; <a href="http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-2">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Tekrar merhaba,</p>
<p>Bir önceki <a href="http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-1">Ext JS 4 veri paketi (Data package) &#8211; Bölüm 1</a> ile ilgili yazımın devamı olan bölüm 2&#8242; ye hoş geldiniz. Bu bölümde sizlere ilişkiler (<strong>assocations</strong>), iç içe verilerin yüklenmesi (<strong>nested data</strong>), geçerlilik ve doğrulama (<strong>validations</strong>) konularını aktarmaya çalışacağım.<span id="more-170"></span></p>
<p><strong>İlişkiler (Assocations)</strong></p>
<p>Model&#8217;ler <strong>Assocations API</strong> yardımıyla birbirleri ile bağlantılı hale getirilebilirer. Birçok uygulamada pek çok model kullanılır ve genellikle bu modeller birbirleri ile ilişki halinde olurlar. Örneğin bir blog yazma uygulamasında kullanıcılar (<strong>Users</strong>), yazılan makaleler (<strong>Posts</strong>) ve yorumlar (<strong>Comments</strong>) bu durum için iyi bir örnek teşkil eder. Her kullanıcı yeni makaleler yazabilir ve bu makaleler için yorumları alabilir. Bu ilişkileri aşağıdaki gibi ifade edebiliriz;</p>
<pre class="brush: jscript; title: ; notranslate">
Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: ['id', 'name'],
    proxy: {
        type: 'rest',
        url : 'data/users',
        reader: {
            type: 'json',
            root: 'users'
        }
    },

    // kısaltma olarak { model: 'Post', name: 'posts' }
    hasMany: 'Post'
});

Ext.define('Post', {
    extend: 'Ext.data.Model',
    fields: ['id', 'user_id', 'title', 'body'],

    proxy: {
        type: 'rest',
        url : 'data/posts',
        reader: {
            type: 'json',
            root: 'posts'
        }
    },

    // her bir makale sadece bir kullanıcıya aittir
    belongsTo: 'User',
    hasMany: { model: 'Comment', name: 'comments' }
});

Ext.define('Comment', {
    extend: 'Ext.data.Model',
    fields: ['id', 'post_id', 'name', 'message'],

    // her bir yorum sadece bir makaleye aittir
    belongsTo: 'Post'
});
</pre>
<p>Bu uygulamada farklı modeller arasında zengin ilişkileri ifade etmek çok kolay görünmektedir. Her bir modelin diğer modeller ile ilişkisi herhangi bir sayıda olabilir ve modeller herhangi bir sıralamada tanımlanabilir. Bir modeli ilişkili olarak tanımladığımızda diğer modellere ve bunların verilerine rahatça erişebiliriz. Örneğin; Belirli bir kullanıcıya ait tüm makaleleri ve onlara bağlı yorumları tek seferde dökmek yada konsola basmak istersek aşağıdaki gibi bir yöntemi kullanabiliriz;</p>
<pre class="brush: jscript; title: ; notranslate">
// ID'si 1 olan kullanıcının yüklenmesi başarılı olursa
// ona bağlı tüm makaleleri ve makalelere bağlı yorumları
// konsola basar
User.load(1, {
    success: function(user) {
        console.log(&quot;User: &quot; + user.get('name'));

        user.posts().each(function(post) {
            console.log(&quot;Comments for post: &quot; + post.get('title'));

            post.comments().each(function(comment) {
                console.log(comment.get('message'));
            });
        });
    }
});
</pre>
<p>Bu durumda her modele otomatik olarak ilişkide olduğu model&#8217; in çoğul hali isminde bir fonksiyon eklenir.<strong> user.posts()</strong> fonksiyonu ile bir kullanıcının birden fazla makalesi (<strong>hasMany</strong>) kuralıyla ilişkili verilerine ulaşabileceğimiz store objesi döndürülür. Buna bağlı olarak Post modeline tamımladığımız her bir makale bir kullanıcıya bağlıdır (<strong>belongsTo</strong>) ve her makalenin birden fazla yorumu olabilir (<strong>hasMany</strong>) kuralıyla ilişkili Comments modeli, yine otomatik olarak oluşturulan <strong>posts.comments()</strong> fonksiyonu sayesinde Comments store&#8217; unu ve bağlı verileri döndürülür.</p>
<p>İlişkileri verileri yüklemekten ziyade ilişkili yeni kayıtlar oluşturmak için daha kullanışlıdır:</p>
<pre class="brush: jscript; title: ; notranslate">
user.posts().add({
    title: 'Ext JS 4.0 MVC Mimarisi',
    body: 'Bu büyük fikir Ext JS uygulamarınızı MVC mimarisini kullanarak inşaa etmenizi sağlar'
});

user.posts().sync();
</pre>
<p>Kullanıcıya yeni makale verisi eklenirken otomatik olarak user_id alanına kullanıcıya ait ID&#8217; de eklenir. sync() fonksiyonu ise, yapılandırılmış proxy üzerinden yeni makaleyi kaydeder. Eğer bu kaydetme işlemi tamamlandığında haberdar olmak isterseniz bir callback (geri çağırma) ile işlemin başarılı yada başarısız oldugunu kontrol edebilirsiniz.</p>
<p>BelongsTo ilişkisi ise model&#8217;de bağlı olduğu modele ait yeni bir fonksiyonlar oluşturur. Aşağıda nasıl kullanıldığını görelim;</p>
<pre class="brush: jscript; title: ; notranslate">
// kulllanıcıya ait referansı her bir makalenin bir kullanıcısı olur
// ilişkisi ile (belongsTo) alalım
post.getUser(function(user) {
    console.log('Posta ait kullanıcının referansı: ' + user.get('name'))
});

// makalenin kullanıcısını değiştirmeyi deneyelim
post.setUser(100, {
    callback: function(product, operation) {
        if (operation.wasSuccessful()) {
            console.log('Makaleye ait kullanıcı güncellendi');
        } else {
            console.log('Makalete ait kullanıcı güncellenemedi');
        }
    }
});
</pre>
<p>Bu sefer getUser() fonskiyonu kullanarak kullanıcı bilgilerini asenkron olarak yüklenebildiğini görüyoruz. setUser() fonksiyonu makale (Post) modelinde bulunan yabancı anahtar (foreign key) olan user_id alanını 100 olarak günceller. Her zamanki gibi işlem tamamlandığında callback yöntemi ile başarılı yada başarısız sonuçları takip edebiliriz.</p>
<p><strong>İç İçe Verileri <strong>(Nested Data) </strong>Yüklemek</strong></p>
<p>Users.load fonksiyonu kullanarak ve yukarıda anlatılan proxy ve ilişkileri tanımlayarak iç içe işlemler sayesinde bir kullanıcıya ait tüm ilişkili verileri geri döndürebilirsiniz. Bu durumda iç içe çağırılan methodlar ve bunların ilişkileri sayesinde sunucuya birden fazla istek gönderilecektir. Bunun başka bir yolu olup olmadığını merak ediyor olabilirsiniz. Bu durum yerine verilerinizi sunucuda aşağıdaki gibi bir yapıda tek seferde döndürmek alternatif bir çözümdür. Bu durumda daha önce tanımlanan model ilişkileri tüm bu veriyi de algılayacaktır.</p>
<pre class="brush: jscript; title: ; notranslate">
{
    success: true,
    users: [
        {
            id: 1,
            name: 'Ed',
            age: 25,
            gender: 'male',
            posts: [
                {
                    id   : 12,
                    title: 'All about data in Ext JS 4',
                    body : 'One areas that has seen the most improvement...',
                    comments: [
                        {
                            id: 123,
                            name: 'S Jobs',
                            message: 'One more thing'
                        }
                    ]
                }
            ]
        }
    ]
}
</pre>
<p>Tüm bu veriler uygulama çatısında otomatik olarak ayrıştırılır. Modellere vekil&#8217; ler (proxy) aracılığı ile neredeyse heryerden veri yüklemek oldukça kolaydır ve okuyucular (readers) json, xml v.s. herhangi bir dönüş tipini okuyabilirler.</p>
<p><a href="http://docs.sencha.com/ext-js/4-0/guides/data/examples/associations_validations/index.html" target="_blank">İlişkiler ve validasyonlara</a> ait çalışan demoyu inceleyiniz.</p>
<p>Modeller aracılığı ile tabiki iç içe olmayan verileri de yüklemek mümkündür. Tembel yükleme (lazy loading) denilen bu yöntem  sadece ilişkisel verileri yüklemek için yararlı olabilir. Önce normal yöntemle kullanıcıları yüklüyoruz ve işlem başarılı olduktan sonra devamında kullanıcılara ait olan makaleleri yüklüyoruz ve buna ait callback yöntemi ile geri döndürülen makalelerin içerisinde Ext.each yöntemi ile dönerek her bir makaleye ait yorumlara da erişebiliriz.</p>
<p><a href="http://docs.sencha.com/ext-js/4-0/guides/data/examples/lazy_associations/index.html" target="_blank">Tembel ilişkilendirme (Lazy Assocations)</a> yöntemini çalışan demosundan inceleyiniz.</p>
<p><strong>Doğrulama ve Geçerlilik Denetimi (Validations)</strong></p>
<p>Ext JS 4 modelleri doğrulama özelliği sayesinde çok daha zengin özelliklere büründü. Bunu göstermek için daha önceki örneklerimizde tanımladığımız ilişkisel modelleri kullanarak doğrulamaları bunların  üzerine inşa edeceğiz. İlk olarak User model&#8217;ine bazı validasyonlar tanımlıyoruz:</p>
<pre class="brush: jscript; title: ; notranslate">
Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: ...,

    validations: [
        {type: 'presence', name: 'name'},
        {type: 'length',   name: 'name', min: 5},
        {type: 'format',   name: 'age', matcher: /\d+/},
        {type: 'inclusion', name: 'gender', list: ['male', 'female']},
        {type: 'exclusion', name: 'name', list: ['admin']}
    ],

    proxy: ...
});
</pre>
<p>Doğrulama alan tanımlamaları field (alan) tanımlamalarıyla benzerlik göstermektedir. Her iki durumda da alanı ve doğrulama tipini belirleriz. Yukarıdaki örneğimizde &#8216;<strong>name</strong>&#8216; alanı en az 5 karakter olabilir, &#8216;age&#8217; alanı sadece numara olabilir, &#8216;<strong>gender</strong>&#8216; alanı &#8216;<strong>male</strong>&#8216; veya &#8216;<strong>female</strong>&#8216; olabilir ve &#8216;<strong>username</strong>&#8216; admin dışındaki herşey olabilir. Bazı dogrulamalar &#8216;lenght&#8217; alanında oldugu gibi minimum veya maksimum değerleri alabilir. Yerleşik olarak 5 adet doğrulama bulunmasına karşın &#8216;<strong>format</strong>&#8216; alanındaki gibi kurallı ifadeler (REGEX) kullanarak yada birçok kombinasyon uygulayarak birçok geçerlilik doğrulamasını yapabilirsiniz.</p>
<ul>
<li><strong>persence </strong>varlığın sadece bir tane olduğunu yani tekil olduğunu garantiler ve doğrular ancak string alanın boş olmasını kabul etmez</li>
<li><strong>lenght</strong> varlığın minimum veya maksimim değerler arasında kalmasını garanti eder ama her iki durumu birden kullanmak isteğe bağlıdır.</li>
<li><strong>format </strong>varlığın verilen kurallı ifade ile doğrulanmasını garanti eder. (Kurallı ifadelerle ilgili daha ayrıntılı araştırma yapmanızı öneririm)</li>
<li><strong>inclusion </strong>varlıgın verilen dizi içerisindeki değerlerden birisi olmasını garanti eder. (Enum veri tipine benzetebiliriz)</li>
<li><strong>exclusion </strong>varlığın verilen dize içerisindeki değerler dışında tutulmasını sağlar. (Örneğin &#8216;admin&#8217; gibi bir verinin bloklanmasını önlemek için)</li>
</ul>
<p>Şimdi farklı olasılıklarla bir kullanıcıyı oluşturup doğrulamarı test edelim. Burada doğru yada yanlış veriler girip validasyonları çalıştırarar ne şekilde sonuçlar döndürdüğünü inceleyeceğiz:</p>
<pre class="brush: jscript; title: ; notranslate">
// şimdi hatalı veriler içeren bir kullanıcı oluşturmaya çalışalım
var newUser = Ext.create('User', {
    name: 'admin',
    age: 'twenty-nine',
    gender: 'not a valid gender'
});

// oluşturduğumuz yeni kullanıcı için validasyonları çalıştırıyoruz
// ve errors değişkenine atıyoruz
var errors = newUser.validate();

// doğrulama hatası varsa 'false' döndürülür
console.log('Kullanıcı doğrulandı mı?', errors.isValid());

// Modelde bulunan tüm hataları bir dizi olarak döndürür
console.log('Tüm hatalar:', errors.items);

// Age alanı ile ilgili hataları döndürür
console.log('Age alanı hataları:', errors.getByField('age'));
</pre>
<p><strong>validate()</strong> fonksiyonu modelde bulunan tüm tanımlanmış validasyonları çalıştırır ve geriye <strong>Errors</strong> adında bir obje döndürür. Bu basıt obje içinde herhangi bir hata varsa barındırır, ve genel olarak tüm doğrulamaların geçerli olup olmadığını <strong>isValid()</strong> fonksiyonuyla kontrol etmemizi sağlar. Eğer &#8216;<strong>true</strong>&#8216; dönerse herhangi bir alanda herhangi bir hata bulunmakatadır anlamına gelir. Ancak <strong>getByField()</strong> fonksiyonuyla belirli bir alana ait hatalara da ulaşabiliriz.</p>
<p><a href="http://docs.sencha.com/ext-js/4-0/guides/data/examples/associations_validations/index.html" target="_blank">İlişkilendirilme ve doğrulamaların</a> birlikte kullanıldığı demoyu inceleyiniz.</p>
<p><strong>Kaynak:</strong><br />
<a href="http://www.sencha.com/learn/the-data-package/">http://www.sencha.com/learn/the-data-package/</a></p>
<p><strong>Bu makalenin başlangıcı olan Bölüm &#8211; 1:</strong><br />
<a href="http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-1">http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-1</a></p>
<p>Evet gördüğünüz gibi birçok yeni işlevsel özelliği bünyesinde barındıran Ext JS 4 Veri Paketi (Data Package) işleri oldukça kolaylaştırıyor ve Ext JS 4 kullanarak hazırlanmış JavaScript uygulamalarınızı daha da güçlendiriyor. ORM ile ilişkili olan bu konuyu ağırlıklı olarak <a href="http://www.sencha.com/learn/extjs/?4x" target="_blank">Ext JS&#8217;in eğitim merkezinde (learning center)</a>  bulunan ilişkili makalesinden yararlanarak ve kendi yorumumu katarak hazırlamaya çalıştım. Diğer konular için de bu adresi yakından takip etmenizi tavsiye ederim.  Umarım sizlere faydası olmuştur.</p>
<p>İyi çalışmalar dilerim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ext JS 4 &#8211; The Data Package (Veri Paketi) &#8211; Bölüm 1</title>
		<link>http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-1</link>
		<comments>http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-1#comments</comments>
		<pubDate>Fri, 30 Sep 2011 13:32:53 +0000</pubDate>
		<dc:creator>tayfun.ozis.erikan</dc:creator>
				<category><![CDATA[Açık Kaynak]]></category>
		<category><![CDATA[Akıl Defterim]]></category>
		<category><![CDATA[Ext JS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Seminerler & Etkinlikler]]></category>
		<category><![CDATA[Seminerler Notlarım]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[data package]]></category>
		<category><![CDATA[ext js]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[local storage]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[session storage]]></category>
		<category><![CDATA[store]]></category>

		<guid isPermaLink="false">http://www.tayfunoziserikan.com/blog/?p=134</guid>
		<description><![CDATA[Bu yazımda sizlere ext js 4 ile yenilenen ve daha da güçlenen, özellikle ORM&#8217; ye aşina iseniz daha da seveceğiniz veri paketinden (data package) bahsetmek istiyorum. Ext JS 4 veri paketleri tüm uygulamanızdaki verileri tutmak ve kaydetmek üzere hazırlanmıştır ve &#8230; <a href="http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-1">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Bu yazımda sizlere ext js 4 ile yenilenen ve daha da güçlenen, özellikle ORM&#8217; ye aşina iseniz daha da seveceğiniz veri paketinden (data package) bahsetmek istiyorum.</p>
<p>Ext JS 4 veri paketleri tüm uygulamanızdaki verileri tutmak ve kaydetmek üzere hazırlanmıştır ve yaklaşık 41 sınıftan oluşmaktadır. Bu sınıflardan en önemli 3 tanesi Model, Store ve Proxy sınıflarıdır. Hemen hemen tüm uygulamalarda kullanılmaktadır ve çok sayıda sınıf tarafından desteklenmektedir.<span id="more-134"></span><br />
<a href="http://www.tayfunoziserikan.com/blog/wp-content/uploads/2011/09/data-package.png"><img class="alignleft size-full wp-image-135" title="data-package" src="http://www.tayfunoziserikan.com/blog/wp-content/uploads/2011/09/data-package.png" alt="" width="669" height="550" /></a></p>
<p><strong>Model&#8217;ler ve Store&#8217;lar</strong></p>
<p>Modeller uygulamalarımızda bazı tip verileri temsil etmek için tasarlanmıştır. ORM&#8217;de genellikle Entity olarak adlandırılsa da en bilinen ismi Model&#8217;dir. Modeller örneğin bir elektronik ticaret uygulamasında ürünler, siparişler gibi kavramları temsil edebilirler. En temel haliyle modeller alanları (field), diğer modeller ile olan ilişkileri (association &#8211; relation), vekil bağlantıları (Proxy), doğrulama ve denetlemeleri (validations) içermektedir. Şimdi bir modelin ana bölümlerini aşağıdaki grafikten inceleyelim.</p>
<p><a href="http://www.tayfunoziserikan.com/blog/wp-content/uploads/2011/09/model.png"><img class="alignleft size-full wp-image-138" title="model" src="http://www.tayfunoziserikan.com/blog/wp-content/uploads/2011/09/model.png" alt="" width="651" height="585" /></a></p>
<p>Şimdi yeni bir model oluşturalım:</p>
<pre class="brush: jscript; title: ; notranslate">
Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'id', type: 'int' },
        { name: 'name', type: 'string' }
    ]
});
</pre>
<p>Modeller genellikle, model referansını (instance) bir veri koleksiyonu olarak  Store&#8217; larla birlikte kullanılır.</p>
<p>En basit haliyle store oluşturma ve verileri yüklemek için aşağıdaki satırları inceliyoruz:</p>
<pre class="brush: jscript; title: ; notranslate">
Ext.create('Ext.data.Store', {
    model: 'User',
    proxy: {
        type: 'ajax',
        url : 'users.json',
        reader: 'json'
    },
    autoLoad: true
});
</pre>
<p>Store&#8217;umuzun proxy ayarlarına, <strong>Ajax Prox</strong> ile verilen url&#8217;deki dönen değerleri yorumlaması için <strong>Json Reader</strong>&#8216; ı kullanıyoruz. <strong>Json Reader</strong> sunucudan donen <strong>JSON</strong> verilerini otomatik olarak decode ederek kullanmamızı sağlar. <strong>autoload:true</strong> seçeneği ise store&#8217;dan bir instance (referans) alındığı anda proxy parametrelerinde bulunan <strong>url</strong> parametresindeki &#8216;<strong>users.json</strong>&#8216; veri kaynagına otomatik olarak istek yapılmasını sağlar.</p>
<p>users.json kaynağından dönecek JSON verileri aşağıdaki gibi olmalıdır;</p>
<pre class="brush: jscript; title: ; notranslate">
{
    success: true,
    users: [
        { id: 1, name: 'Ed' },
        { id: 2, name: 'Tommy' }
    ]
}
</pre>
<p>Yukarıdaki örneğin çalışan demosu için <a href="http://docs.sencha.com/ext-js/4-0/guides/data/examples/simple_store/index.html" target="_blank">Simple Store</a> adresine bakabilirsiniz.</p>
<p><strong>Ön tanımlı verileri kullanmak (Inline Data)</strong></p>
<p>Store&#8217;lar istenirse verileri ön tanımlı olarak da kullanabilirler. Store konfigurasyonunda bulunan <strong>data </strong>parametresi kullanılan <strong>Model</strong>&#8216;e ve <strong>Reader</strong>&#8216;a göre uygun verilerle doldurulursa,  instance (referans) alındığında bu veriler de yüklenmiş olur. Aşağıdaki örneği inceleyin:</p>
<pre class="brush: jscript; title: ; notranslate">
Ext.create('Ext.data.Store', {
    model: 'User',
    data: [
        { firstName: 'Ed',    lastName: 'Spencer' },
        { firstName: 'Tommy', lastName: 'Maintz' },
        { firstName: 'Aaron', lastName: 'Conran' },
        { firstName: 'Jamie', lastName: 'Avins' }
    ]
});
</pre>
<p>Yukarıdaki örneğin çalışan demosu için <a href="http://docs.sencha.com/ext-js/4-0/guides/data/examples/inline_data/index.html" target="_blank">Inline Data Örneği</a> adresine bakabilirsiniz.</p>
<p><strong>Sıralama ve Gruplama</strong></p>
<p>Store&#8217;lar lokal (statik) veri kaynaklarını sıralama, gruplama ve filtreleme gibi işlevlerinin yanı sıra uzak sunucudaki (remote) veri kaynaklarını da kullanarak bu işlemleri yerine getirebilirler.</p>
<pre class="brush: jscript; title: ; notranslate">
Ext.create('Ext.data.Store', {
    model: 'User',

    sorters: ['name', 'id'],
    filters: {
        property: 'name',
        value   : 'Ed'
    },
    groupField: 'age',
    groupDir: 'DESC'
});
</pre>
<p>Burada <strong>sıralama</strong> alanları olarak &#8216;<strong>name</strong>&#8216; ve &#8216;<strong>id</strong>&#8216; alanları belirlenmiştir. Bu sayede veriler id veya name&#8217;e göre <strong>artan (ASC)</strong> veya<strong> azalan (DESC)</strong> şekild sıralanabilmektedir. Aynı zamanda veri kaynağında bulunan veriler &#8216;<strong>name</strong>&#8216; alanı &#8216;<strong>Ed</strong>&#8216; olanlar gelecek şekilde <strong>filtrelenmiş </strong>ve &#8217;<strong>age</strong>&#8216; alanına göre <strong>gruplandırılmıştır</strong>.</p>
<p><strong>Proxy&#8217; ler</strong></p>
<p>Proxy&#8217;ler modeller ve store&#8217;lar tarafından kullanılmaktadır. İki çeşit proxy bulunmaktadır. Birisi <strong>istemci taraflı</strong> diğeri ise <strong>sunucu taraflı</strong>. İstemci taraflı proxy&#8217;ler verileri tarayıcının &#8220;<strong>HTML 5 local storage (yerel depolama)</strong>&#8221; özelliğini kullanarak <strong>bellekte (memory)</strong> veya <strong>yerel depolama alanında</strong> tutarlar. Sunucu taraflı proxy&#8217;ler ise uzak sunucundan verileri <strong>Ajax, JsonP</strong> veya <strong>Rest</strong> servisleri kullanarak dinler ve alırlar.</p>
<p>Proxy&#8217;ler model&#8217;lere şu şekilde doğrudan tanımlanabilirler.</p>
<pre class="brush: jscript; title: ; notranslate">
Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: ['id', 'name', 'age', 'gender'],
    proxy: {
        type: 'rest',
        url : 'data/users',
        reader: {
            type: 'json',
            root: 'users'
        }
    }
});

// User modelini ve ona bağl users rest proxy kullanılır
Ext.create('Ext.data.Store', {
    model: 'User'
});
</pre>
<p>Eğer proxy&#8217;leri yukarıdaki şekilde model&#8217;lere tanımlarsanız her User kaynağının her kullanımı için aynı proxy servisleri kullanılacağından User model&#8217; in başka store&#8217;larda yada sınıflarda kullanılmasıyla kod tekrarından kaçınılmış olur.</p>
<pre class="brush: jscript; title: ; notranslate">
// User değişkenine User modelinden bir referans alıyoruz
var User = Ext.ModelMgr.getModel('User');

// ed adından bir User oluşturuyoruz.
var ed = Ext.create('User', {
    name: 'Ed Spencer',
    age : 25
});

// Ed'i kaydetmeye çalıştığımız anda, ed store'a
// eklenir ve ve daha önceden konfigure ettiğimiz
// RestProxy' devreye girerek otomatik olarak sunucunun
// '/users' adresine RESTful bir POST istek yapar
ed.save({
    success: function(ed) {
        console.log(&quot;Saved Ed! His ID is &quot;+ ed.getId());
    }
});

// Eğer kullanıcıyı yüklemek istersek
// ve 1 numaralı id parametresini geçersek sunucuya
// RESTful bir GET isteği '/users/1' adresine yapılır
User.load(1, {
    success: function(user) {
        console.log(&quot;Loaded user 1:&quot; + user.get('name'));
    }
});
</pre>
<p>LocalStorage ve SessionStorage - HTML 5&#8242;in yeni yeteneklerinden yararlanmak için Proxy&#8217; ler&#8217;e dahil edilmiştir. Ancak eski tarayıcılarda bu yeni HTML 5 API&#8217; lerin desteği olmamasına rağmen, kalan diğer tüm özelliklerden bir çok uygulama yararlanabilecektir. Bu gibi durumlarda tarayıcı özelliklerini kontrol ederek alternatif senaryolar üretebilirsiniz.</p>
<p>Yukarıdaki örneğin çalışan demosu için  <a href="http://docs.sencha.com/ext-js/4-0/guides/data/examples/model_with_proxy/index.html" target="_blank">doğrudan proxy kullanan model örneği</a>&#8216;ni inceleyiniz.</p>
<p><strong>Kaynak:</strong><br />
<a href="http://www.sencha.com/learn/the-data-package/">http://www.sencha.com/learn/the-data-package/</a></p>
<p><strong>Bu makalenin devamı olan Bölüm – 2:</strong><br />
<a href="http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-2">http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-2</a></p>
<p>Evet Ext JS 4 veri paketi konusunun birinci bölümününü burada tamamlıyorum.<br />
<a href="http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-2"> Serinin ikinci yazısında</a> görüşmek üzere.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tayfunoziserikan.com/blog/ext-js-4-the-data-package-veri-paketi-bolum-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Özgür Web Günleri 2011&#8242; deki Kebab Project atölye çalışmasına bekleriz&#8230;</title>
		<link>http://www.tayfunoziserikan.com/blog/ozgur-web-gunleri-2011-deki-kebab-project-atolye-calismasina-bekleriz</link>
		<comments>http://www.tayfunoziserikan.com/blog/ozgur-web-gunleri-2011-deki-kebab-project-atolye-calismasina-bekleriz#comments</comments>
		<pubDate>Wed, 28 Sep 2011 10:47:30 +0000</pubDate>
		<dc:creator>tayfun.ozis.erikan</dc:creator>
				<category><![CDATA[Açık Kaynak]]></category>
		<category><![CDATA[Ext JS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Kebab Project]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Seminerler & Etkinlikler]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[etkinlik]]></category>
		<category><![CDATA[kebab project]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[seminer]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.tayfunoziserikan.com/blog/?p=128</guid>
		<description><![CDATA[Merhaba Dostlar, Ben ve ortağım / kardeşim Onur Özgür ÖZKAN,  her yıl Yeditepe Üniversitesi&#8217; nde düzenlenen ve bizce çok verimli bir etkinlik olan Özgür Web Teknolojileri Günleri&#8216; nde Kebab Project ile Web Uygulamaları Geliştirme adlı atölye çalışması düzenleyeceğiz. Açık kaynak &#8230; <a href="http://www.tayfunoziserikan.com/blog/ozgur-web-gunleri-2011-deki-kebab-project-atolye-calismasina-bekleriz">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Merhaba Dostlar,</p>
<p>Ben ve ortağım / kardeşim <a href="http://www.onurozgurozkan.com" target="_blank">Onur Özgür ÖZKAN</a>,  her yıl Yeditepe Üniversitesi&#8217; nde düzenlenen ve bizce çok verimli bir etkinlik olan <a href="http://www.ozgurwebgunleri.org.tr/" target="_blank">Özgür Web Teknolojileri Günleri</a>&#8216; nde <a href="http://www.kebab-project.com" target="_blank">Kebab Project</a> ile Web Uygulamaları Geliştirme adlı atölye çalışması düzenleyeceğiz.</p>
<p>Açık kaynak ve web teknolojilerine ilgi duyan arkadaşları aramızda görmekten mutluluk duyarız.<span id="more-128"></span></p>
<p><strong>Konuşmacılar:</strong> Onur Özgür Özkan &amp; Tayfun Öziş Erikan</p>
<p><strong>Başlık: </strong>Kebab Project ile Web Uygulamaları Geliştirme</p>
<p><strong>Açıklamalar:</strong> Kebab Project, php ve javascript dillerinde yazılan cloud, cdn, rest teknolojilerini destekleyen hızlı uygulama geliştirmeye yarayan projedir. Seminer boyunca Kebab Project’in kurulumu, doctrine orm kütüphanesi ile veri katmanın hazırlanması, kullanıcı yetkilerinin ayarlanması, basit crud bir uygulama için gerekli olan rest servislerinin yazılması, ExtJS kütüphanesi ile mvc yapısında bir kebab uygulamasının hazırlanması, rest servisler için arayüzlerin hazırlanması ve kebab project ile yapılmış açık kaynaklı bazı uygulamalar gösterilecektir.</p>
<p><strong>Etkinlik Sayfası: <a href="http://www.ozgurwebgunleri.org.tr/">http://www.ozgurwebgunleri.org.tr/</a></strong></p>
<p><strong>Etkinlik Programı:</strong> <a href="http://www.ozgurwebgunleri.org.tr/2011/etkinlik-programi/">http://www.ozgurwebgunleri.org.tr/2011/etkinlik-programi/</a></p>
<p>İyi çalışmalar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tayfunoziserikan.com/blog/ozgur-web-gunleri-2011-deki-kebab-project-atolye-calismasina-bekleriz/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript ile Navigator objesi ve userAgent kullarak iPhone iPad ve iPod cihazları tespit etmek</title>
		<link>http://www.tayfunoziserikan.com/blog/javascript-ile-navigator-objesi-ve-useragent-kullarak-iphone-ipad-ve-ipod-cihazlari-tespit-etmek</link>
		<comments>http://www.tayfunoziserikan.com/blog/javascript-ile-navigator-objesi-ve-useragent-kullarak-iphone-ipad-ve-ipod-cihazlari-tespit-etmek#comments</comments>
		<pubDate>Tue, 13 Sep 2011 08:15:15 +0000</pubDate>
		<dc:creator>tayfun.ozis.erikan</dc:creator>
				<category><![CDATA[Akıl Defterim]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[useragent]]></category>

		<guid isPermaLink="false">http://www.tayfunoziserikan.com/blog/?p=109</guid>
		<description><![CDATA[Merhaba, Kimi zaman uygulamanızı kullanan kullanıcının hangi platformdan girdiğini bilmek ve genellikle uygulama arayüzünüzü buna göre düzenlemek isteyebilirsiniz. Bu gibi durumlarda javascript&#8217;te bulunan Navigator  objesi size ziyaretçi hakkındaki öğrenmek isteyeceiğiniz bazı bilgileri verecektir. Navigator objesini consola bastığınızda aşağıdaki gibi bir hash &#8230; <a href="http://www.tayfunoziserikan.com/blog/javascript-ile-navigator-objesi-ve-useragent-kullarak-iphone-ipad-ve-ipod-cihazlari-tespit-etmek">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Merhaba,</p>
<p>Kimi zaman uygulamanızı kullanan kullanıcının hangi platformdan girdiğini bilmek ve genellikle uygulama arayüzünüzü buna göre düzenlemek isteyebilirsiniz. Bu gibi durumlarda javascript&#8217;te bulunan <strong>Navigator</strong>  objesi size ziyaretçi hakkındaki öğrenmek isteyeceiğiniz bazı bilgileri verecektir.<span id="more-109"></span></p>
<p>Navigator objesini consola bastığınızda aşağıdaki gibi bir hash görmeniz gerekir;</p>
<pre class="brush: jscript; title: ; notranslate">
console.log(navigator);
</pre>
<ol class="properties properties-tree monospace">
<li title=""><span class="name">appCodeName</span><span class="separator">: </span><span class="value console-formatted-string">&#8220;Mozilla&#8221;</span></li>
<li title=""><span class="name">appName</span><span class="separator">: </span><span class="value console-formatted-string">&#8220;Netscape&#8221;</span></li>
<li title=""><span class="name">appVersion</span><span class="separator">: </span><span class="value console-formatted-string">&#8220;5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.159 Safari/535.1&#8243;</span></li>
<li title=""><span class="name">cookieEnabled</span><span class="separator">: </span><span class="value console-formatted-boolean">true</span></li>
<li class="parent" title=""><span class="name">geolocation</span><span class="separator">: </span><span class="value console-formatted-object">Geolocation</span></li>
<li title=""><span class="name">language</span><span class="separator">: </span><span class="value console-formatted-string">&#8220;en-US&#8221;</span></li>
<li class="parent" title=""><span class="name">mimeTypes</span><span class="separator">: </span><span class="value console-formatted-object">DOMMimeTypeArray</span></li>
<li title=""><span class="name">onLine</span><span class="separator">: </span><span class="value console-formatted-boolean">true</span></li>
<li title=""><span class="name">platform</span><span class="separator">: </span><span class="value console-formatted-string">&#8220;Linux i686&#8243;</span></li>
<li class="parent" title=""><span class="name">plugins</span><span class="separator">: </span><span class="value console-formatted-object">DOMPluginArray</span></li>
<li title=""><span class="name">product</span><span class="separator">: </span><span class="value console-formatted-string">&#8220;Gecko&#8221;</span></li>
<li title=""><span class="name">productSub</span><span class="separator">: </span><span class="value console-formatted-string">&#8220;20030107&#8243;</span></li>
<li title=""><span class="name">userAgent</span><span class="separator">: </span><span class="value console-formatted-string">&#8220;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.159 Safari/535.1&#8243;</span></li>
<li title=""><span class="name">vendor</span><span class="separator">: </span><span class="value console-formatted-string">&#8220;Google Inc.&#8221;</span></li>
<li class="selected" title=""><span class="name">vendorSub</span><span class="separator">: </span><span class="value console-formatted-string">&#8220;&#8221;</span></li>
<li class="parent" title=""><span class="name">__proto__</span><span class="separator">: </span><span class="value console-formatted-object">Navigator</span></li>
</ol>
<p>Yukarıda göreceğiniz üzere her değer açıkça ne içerdiğini anlatmakta.</p>
<p><strong>navigator.userAgent&#8217;i kullanmak</strong></p>
<p><strong></strong>Konuyu kısa ve öz bir örnekle açıklıyorum;</p>
<pre class="brush: jscript; title: ; notranslate">
/**
* Check is mobile for Apple products
*/
var isMobile = function() {
    try {
        return (navigator.userAgent.match(/iPhone/i))
            || (navigator.userAgent.match(/iPod/i))
            || (navigator.userAgent.match(/iPad/i)) ?
        true : false;
    } catch(e) {
        return false;
    }
};

// output true or false
console.log(isMobile());
</pre>
<p>Yukarıdaki örnekte navigator objesindeki userAgent string değerini match methud ve regex kullanarak eşleştiriyoruz ve ilgili değerimizi bulduğumuzda true yada false döndürerek kullanıcının platformunu anlamış oluyoruz. Eski ensil tarayıcılar da sorun yaşamamak veya uyumsuzlup problemi yaşamamak için kodu try/catch bloğuna almayı unutmuyoruz. Yukarıdakı navigator.userAgent.match(/XXX/i) kısmını || (OR) ile biden fazla platofmr için tekrarlayabilirsiniz.</p>
<p>Hepsi bu kadar.<br />
İyi çalışmalar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tayfunoziserikan.com/blog/javascript-ile-navigator-objesi-ve-useragent-kullarak-iphone-ipad-ve-ipod-cihazlari-tespit-etmek/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JSDuck ile kendi Ext JS 4 uygulamalarınızın JavaScript API dokümantasyonunu oluşturun</title>
		<link>http://www.tayfunoziserikan.com/blog/jsduck-ile-kendi-ext-js-4-uygulamalarinizin-javascript-api-dokumantasyonunu-olusturun</link>
		<comments>http://www.tayfunoziserikan.com/blog/jsduck-ile-kendi-ext-js-4-uygulamalarinizin-javascript-api-dokumantasyonunu-olusturun#comments</comments>
		<pubDate>Fri, 26 Aug 2011 09:25:48 +0000</pubDate>
		<dc:creator>tayfun.ozis.erikan</dc:creator>
				<category><![CDATA[Akıl Defterim]]></category>
		<category><![CDATA[Alet Çantası]]></category>
		<category><![CDATA[Ext JS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[api docs]]></category>
		<category><![CDATA[developer tools]]></category>
		<category><![CDATA[ext js]]></category>
		<category><![CDATA[JSDoc]]></category>
		<category><![CDATA[sencha]]></category>

		<guid isPermaLink="false">http://www.tayfunoziserikan.com/blog/?p=76</guid>
		<description><![CDATA[Merhaba, Eğer Ext JS 4 kullanarak büyük JavaScript ugulamarı geliştiriyorsanız kodlarınızda JSDoc kullanmanız hayati önem arzeder. Eğer kodlarınızı diğer yazılımcılar ile paylaşıp ekip çalışması yapıyorsanız bu durum daha da önemli hale gelir. Bu gibi durumlarda eğer disiplinli davranıp classlarınızı, methodlarınızı, değişkenlerinizi, &#8230; <a href="http://www.tayfunoziserikan.com/blog/jsduck-ile-kendi-ext-js-4-uygulamalarinizin-javascript-api-dokumantasyonunu-olusturun">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Merhaba,</p>
<p>Eğer Ext JS 4 kullanarak büyük JavaScript ugulamarı geliştiriyorsanız kodlarınızda <strong><a href="http://en.wikipedia.org/wiki/JSDoc" target="_blank">JSDoc</a></strong> kullanmanız hayati önem arzeder. Eğer kodlarınızı diğer yazılımcılar ile paylaşıp ekip çalışması yapıyorsanız bu durum daha da önemli hale gelir. Bu gibi durumlarda eğer disiplinli davranıp classlarınızı, methodlarınızı, değişkenlerinizi, dosyalarınızı v.b. güzel dokümante ettiyseniz proje tamamlandıkça bu dokulanları bir API dokumanı haline getirmek gerekir ve bu aşamada çoğu zaman bir araca ihtiyaç duyarız. Biz <a href="http://lab2023.com/" target="_blank">lab2023 &#8211; internet teknolojileri</a> olarak bu sorunun üstesinden gelmek için kendimize <a href="https://github.com/senchalabs" target="_blank">Sencha Labs</a> tarafından geliştirilen kendi API dokumantasyonlarını oluşturmak için kullandıkları <strong><a href="https://github.com/senchalabs/jsduck" target="_blank">JSDuck</a></strong>&#8216; u araç olarak belirledik. JSDuck kullanarak oluşturacağınız API dokumantasyonları <a href="http://docs.sencha.com/ext-js/4-0/" target="_blank">Ext JS&#8217; in API dokumantasyonu</a> gibi olacaktır.<span id="more-76"></span></p>
<pre class="brush: plain; title: ; notranslate">
       ,~~.
      (  6 )-_,
 (\___ )=='-'
  \ .   ) )
   \ `-' /    hjw
~'`~'`~'`~'`~
</pre>
<p>Aracın kullanımı ve kurulumu gerçekten çok basit ve temiz. Şimdi size kurulum ve kullanımı ile ilgili birkaç bilgi vereceğim.</p>
<p><strong>JSDuck GitHUB sayfası</strong></p>
<p><a href="https://github.com/senchalabs/jsduck" target="_blank">https://github.com/senchalabs/jsduck</a></p>
<p><strong>JSDuck kurulumu</strong></p>
<p>JSDuck bir RubyGem&#8217; dir. Öncelikle sisteminizde ruby programlama dilinin kurulu olması gerekir. Ruby hakkında daha detaylı bilgi için  <a href="http://www.ruby-lang.org/tr/" target="_blank">http://www.ruby-lang.org/tr/</a> adresini ziyaret edebilirsiniz. RubyGems için ise <a href="http://docs.rubygems.org/read/chapter/3">http://docs.rubygems.org/read/chapter/3</a> adresi işinizi görecektir.</p>
<p>Ruby&#8217; nin sisteminizde kurulu ve çalışır durumda olduğunu var sayarak, şimdi terminalden aşağıdaki komutu çalıştırın.</p>
<pre class="brush: plain; title: ; notranslate">
$ [sudo] gem install --pre jsduck
</pre>
<p>Eğer bir sorun yaşamazsanız jsduck gem&#8217;i sisteminize kurulacak ve kullanıma hazır hale gelecektir.</p>
<p>Eğer windows kullanıcısı iseniz şu adresi ziyaret ediniz: <a href="https://github.com/senchalabs/jsduck/downloads">https://github.com/senchalabs/jsduck/downloads</a></p>
<p><strong>JSDuck&#8217;ın kullanımı</strong></p>
<p>JSDuck sisteminizde bulunan javascript dosyalarınızın bulunduğu tüm alt dizinleri tarar ve içinde js dosyalarını ayrıştırarark yazılmıs JSDoc&#8217; ları Ext JS API dokumantasyonundaki gibi bir arayüz haline saniyeler içerisinde getirir.</p>
<pre class="brush: plain; title: ; notranslate">
jsduck jsduck your/project/js --verbose --output your/docs
</pre>
<p>Yukarıdakı komutu çalıştırdığınızda jsduck proje dizininizi tarar ve tum JSDoc satırlarını yorumlayarak your/docs dizininize bir Ext JS uygulaması olarak API dokümantasyonunuzu oluşturur.</p>
<p>Buradaki &#8211;verbose parametresi dokumanın oluşturulması sırasında konsola çıktıyı basar ve olan biten hakkında sizi bilgilendirir. &#8211;ignore-global, global sınıf yaratılmasını önlerken, &#8211;exclude Error ise hataların gizlenmesini sağlayacaktır.</p>
<p><em>(Açıkcası bu parametreleri şimdilik test etmedim <em> <img src='http://www.tayfunoziserikan.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em> ve ingilizcemin yettiği kadarıyla buraya çevirmeye çalıştım. daha sonra test edip burayı güncelleyeceğim)</em></p>
<p><strong>JSDuck için kodlarınızın dokümante edilmesi</strong></p>
<p><a href="https://github.com/senchalabs/jsduck/wiki/List-of-supported-@tags" target="_blank">Şu adreste</a> kullanabileceğiniz JSDoc tagları listelenmektedir.  Ama ben yinde aşağıda da listeledim.  JavaScript sınıflarınızı bu kaynakta belirtilen şekilde dokümante ederseniz JSDuck ile çok kullanışlı API dokümantasyonları hazırlayabilir, daha da önemlisi kodlarınızı yorumlayan diğer geliştiricilerin sizi daha rahat anlamasını sağlayabilirsiniz.</p>
<ul>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Class" target="_blank">@class</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Class" target="_blank">@extends</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Class" target="_blank">@singleton</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Cfg" target="_blank">@cfg</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Constructor" target="_blank">@constructor</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Property" target="_blank">@property</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Property" target="_blank">@type</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Method" target="_blank">@method</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Event" target="_blank">@event</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Method" target="_blank">@param</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Method" target="_blank">@return</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Method" target="_blank">@static</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Method" target="_blank">@inheritable</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Class" target="_blank">@author</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Class" target="_blank">@docauthor</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Class" target="_blank">@xtype</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Class" target="_blank">@member</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Class" target="_blank">@mixin</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Class" target="_blank">@alternateClassName</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Links" target="_blank">{@link}</a></li>
<li><a href="https://github.com/senchalabs/jsduck/wiki/Images" target="_blank">{@img}</a></li>
</ul>
<p><strong>Lisanslama ve Kullanım</strong></p>
<div>JsDuck <a href="http://www.gnu.org/copyleft/gpl.html" target="_blank">GNU General Public License 3</a>   koşulları altında dağıtılır.</div>
<div>Geliştiricileri ise;</div>
<div>
<ul>
<li><a href="http://triin.net/" target="_blank">Rene Saarsoo</a></li>
<li><a href="https://github.com/nick" target="_blank">Nick Poulden</a></li>
</ul>
<div>Tabi bu tarz projelerin bir çok katkı sağlacısı olduğunu da unutmamak gerek.</div>
<div>İyi çalışmalar.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.tayfunoziserikan.com/blog/jsduck-ile-kendi-ext-js-4-uygulamalarinizin-javascript-api-dokumantasyonunu-olusturun/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

