<?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>Can Aydoğan</title>
	<atom:link href="http://www.canaydogan.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.canaydogan.net</link>
	<description>Ali 1, Ali 2 .... Ali 10&#039;a kadar sayamayan biri</description>
	<lastBuildDate>Wed, 02 May 2012 11:20:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Factory Design Pattern(Fabrika Tasarım Şablonu)</title>
		<link>http://www.canaydogan.net/2012/03/18/factory-design-patternfabrika-tasarim-sablonu/</link>
		<comments>http://www.canaydogan.net/2012/03/18/factory-design-patternfabrika-tasarim-sablonu/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 20:32:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Tasarım Şablonları (Design Patterns)]]></category>
		<category><![CDATA[fabrika]]></category>
		<category><![CDATA[factory]]></category>
		<category><![CDATA[uçak]]></category>

		<guid isPermaLink="false">http://www.canaydogan.net/?p=375</guid>
		<description><![CDATA[Tasarım şablonları yazı dizisine tasarım şablonlarının bana ne ifade ettiğini anlatarak bir önceki yazımda giriş yapmıştım. Bu yazımda ise Oluşturucu Tasarım Şablonlarının(Creational Design Patterns) bir üyesi olan Factory Design Pattern(Fabrika Tasarım Şablonu) ile devam edeceğim. Onlarca uçağım var. Boeing, Airbus, Cessna marka, onlarca boy boy, çeşit çeşit uçağım var. Tüm bu uçakları da kendim üretiyorum. Bir fabrikam [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Tasarım şablonları yazı dizisine tasarım şablonlarının bana ne ifade ettiğini anlatarak <a href="http://www.canaydogan.net/2012/01/08/tasarim-sablonlari-design-patterns/" target="_blank">bir önceki yazımda</a> giriş yapmıştım. Bu yazımda ise <strong>Oluşturucu Tasarım Şablonlarının(Creational Design Patterns)</strong> bir üyesi olan <strong>Factory Design Pattern(Fabrika Tasarım Şablonu)</strong> ile devam edeceğim.</p>
<p>Onlarca uçağım var. Boeing, Airbus, Cessna marka, onlarca boy boy, çeşit çeşit uçağım var. Tüm bu uçakları da kendim üretiyorum. Bir fabrikam yok, nasıl üretileceğini aklımda tutuyorum yeri gelince aklımda tuttuğum bu şeyleri kullanarak istediğim uçağı üretebiliyorum. Hemen şimdi size bir tane Boeing 747-8 üreteyim.</p>
<p><strong>Önce sınıflarımıza bakalım;</strong></p>
<pre>namespace DesignPatters\Factory;

abstract class AbstractAircraft
{
    public $cruisingSpeed;
    public $model;
}
class Boeing extends AbstractAircraft {}
class Airbus extends AbstractAircraft {}
class Cessna extends AbstractAircraft {}</pre>
<p><strong>Ve üretim&#8230;</strong></p>
<pre>$aircraft = new \DesignPatters\Factory\Boeing();
$aircraft-&gt;model = '747-8';
$aircraft-&gt;cruisingSpeed = 917;</pre>
<p>Artık Boeing 747-8 modelinde bir uçağımız var. Bu uçağı Türk Hava Yollarına hediye ediyorum. Malum ellerinde hiç <strong>jumbo jet</strong> yok benden armağan olsun. THY uçağı İstanbul Atatürk Havalimanı &#8211; Ankara Esenboğa Havalimanı arasında kullanıyor.<br />
THY Boeing 747-8&#8242;i çok beğenmiş bir tane daha istiyor. Tabii diyorum ve hemen bir tane daha üretiyorum.</p>
<pre>$aircraft = new \DesignPatters\Factory\Boeing();
$aircraft-&gt;model = '747-8';
$aircraft-&gt;cruisingSpeed = 917;</pre>
<p>Bu uçağıda İstanbul Atatürk Havalimanı &#8211; John F. Kennedy International Havalimanı arasında kullanmaya başlıyorlar.</p>
<p>İşler çok iyi gidiyor. Her gün yeni bir uçak talebi geliyor çeşitli havayolu şirketlerinden. 3 ay sonra 100 küsur tane uçak üretip vermişim havayolu şirketlerine. Bir gün THY&#8217;den telefon geliyor bu uçakların yolcu sayısı bilgisi yok diyor telefondaki görevli. Hemen ekleyelim diye de ekliyor. Tamam diyorum ben de hiç tereddüt etmeden. Niye tereddüt edeyim ki AbstractAircraft sınıfına passengers adında yeni bir property(özellik) eklerim olur biter. Ekliyorum da..</p>
<pre>abstract class AbstractAircraft
{
    public $cruisingSpeed;
    public $model;
    public $passengers;
}</pre>
<p>Düşündüğüm gibi ilk aşama oldukça kolay oldu. Şimdi tüm ürettiğim uçaklara yolcu sayısını girmem gerekiyor yani ürettiğim 100 küsur uçağa tek tek kendilerine ait yolcu sayısı bilgisini girmem gerekiyor&#8230;</p>
<p>Offf! Ben 100&#8242;den fazla yerde ayrı ayrı uçak üretimi yapmışım. Şimdi bunların hepsine yolcu sayısı bilgisi eklemem için bu yerleri tek tek bulup düzenlemem gerekiyor. Akılsız başın cezasını parmaklar çekiyor ve ben 100&#8242;den fazla üretim yaptığım yeri bulup yolcu sayısı verisini eklemeye başlıyorum. Umarım herhangi birinde hata yapmam. Yapacağım iş basit olsa bile herhangi birini unutmam oldukça muhtemel çünkü 100&#8242;den fazla uçak üretim yerini tespit edip düzenleme yapmam gerekiyor. Birini unutmam çok büyük sorunlara neden olabilir <img src='http://www.canaydogan.net/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Başarısız bir programcılık hikayesi ile başlamak istedim bu yazıma. Peki yukarıda hikayenin öznesi olmak istemiyorsak ne yapmalıyız? İşte bunun cevabı <strong>Fabrika Tasarım Şablonun&#8217;da</strong> gizli.</p>
<p>Şablonumuzun ismi Fabrika. Gerçek dünyada ki bir fabrikayı düşünelim. Fabrikaya bir emir gönderilir. Bu emir şu şekilde olabilir; <em>Bana Boeing&#8217;in 747-8 modelinden bir uçak üret.</em> Fabrika bu talebi değerlendirir ve üretimi Boeing 747-8&#8242;e göre gerçekleştirir.</p>
<p><strong>O zaman gerçek dünyada ki fabrikayı yazılım dünyasına uyarlayalım&#8230;</strong></p>
<pre>class Factory
{
    public static function create($model)
    {
        switch ($model) {
            case 'Boeing 747-8':
                $aircraft = new Boeing();
                $aircraft-&gt;model = '747-8';
                $aircraft-&gt;cruisingSpeed = 917;
                break;
            case 'Airbus a380':
                $aircraft = new Airbus();
                $aircraft-&gt;model = 'a380';
                $aircraft-&gt;cruisingSpeed = 945;
                break;
            default:
                throw new \RuntimeException('Undefined aircraft');
        }
        return $aircraft;
    }
}</pre>
<p><strong>Fabrikamızı çalıştırıp üretimi gerçekleştirelim.</strong></p>
<pre>$aircraft = \DesignPatters\Factory\Factory::create('Boeing 747-8');</pre>
<p>Gördüğünüz gibi artık bir uçak üretirken o uçağın cruising speed değerini, model numarasını bilmemize gerek kalmadı. Bunları bizim adımıza bilip kullanan biri var o da uçak fabrikamız.</p>
<p>Yukarıdaki başarısızlık hikayesinde <strong>Fabrika Tasarım Şablonu</strong> kullandığımızı düşünelim. Yine 100 küsur uçak ürettik farklı yerlerde bunları kullandık. Ama bu sefer bu uçakların üretimini fabrikamız üzerinden gerçekleştirdik. Ve yine THY bizden uçaklara yolcu sayısı bilgisini eklememizi istedi. Hemen fabrikamızda bu isteği gerçekleştirdik.</p>
<pre>class Factory
{
    public static function create($model)
    {
        switch ($model) {
            case 'Boeing 747-8':
                $aircraft = new Boeing();
                $aircraft-&gt;model = '747-8';
                $aircraft-&gt;cruisingSpeed = 917;
                $aircraft-&gt;passengers = 500;
                break;
            case 'Airbus a380':
                $aircraft = new Airbus();
                $aircraft-&gt;model = 'a380';
                $aircraft-&gt;cruisingSpeed = 945;
                $aircraft-&gt;passengers = 853;
                break;
            default:
                throw new \RuntimeException('Undefined aircraft');
        }
        return $aircraft;
    }

}</pre>
<p>Fabrikamızın son hali bu şekilde. Artık 100&#8242;den fazla uçağımızın hepsi yolcu sayısını biliyor. Ve bu işlemi yaparken sadece bir tek yerde düzenleme yaptık. Sadece fabrikamızda.</p>
<p>Gördüğünüz gibi fabrika tasarım şablonunu kullanarak daha sonra yapacağımız düzenlemeleri kolaylıkla uygulayabiliyoruz.</p>
<h2>Fabrika Tasarım Şablonunu Kullanmanın Bize Getirileri;</h2>
<ul>
<li>Fabrika tasarım şablonu ile kod tekrarını(duplication of code) önüne geçiyoruz. (Yukarıdaki örnekte her üretimde yolcu sayısını tek tek girmemiş olduk)</li>
<li>Fabrika tasarım şablonu ile nesneleri kullanan kullanıcılar, nesneler hakkında çok daha az bilgiye ihtiyaç duyuyor. (Yukarıdaki örnekte uçağı kullanan her bir kullanıcı artık o uçağın yolcu sayısını bilmek zorunda değil)</li>
<li>Fabrika tasarım şablonu ile çok daha esnek bir yapı elde etmiş oluruz.</li>
</ul>
<p>Bu yazımda kullandığım örneğin kodlarına <a href="https://github.com/canaydogan/DesignPatterns" target="_blank">buradan </a>ulaşabilirsiniz.</p>
<div class="shr-publisher-375"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2012%2F03%2F18%2Ffactory-design-patternfabrika-tasarim-sablonu%2F' data-shr_title='Factory+Design+Pattern%28Fabrika+Tasar%C4%B1m+%C5%9Eablonu%29'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2012%2F03%2F18%2Ffactory-design-patternfabrika-tasarim-sablonu%2F' data-shr_title='Factory+Design+Pattern%28Fabrika+Tasar%C4%B1m+%C5%9Eablonu%29'></a><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2012%2F03%2F18%2Ffactory-design-patternfabrika-tasarim-sablonu%2F' data-shr_title='Factory+Design+Pattern%28Fabrika+Tasar%C4%B1m+%C5%9Eablonu%29'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2012%2F03%2F18%2Ffactory-design-patternfabrika-tasarim-sablonu%2F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.canaydogan.net/2012/03/18/factory-design-patternfabrika-tasarim-sablonu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tasarım Şablonları (Design Patterns)</title>
		<link>http://www.canaydogan.net/2012/01/08/tasarim-sablonlari-design-patterns/</link>
		<comments>http://www.canaydogan.net/2012/01/08/tasarim-sablonlari-design-patterns/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 15:51:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tasarım Şablonları (Design Patterns)]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[tasarım]]></category>
		<category><![CDATA[tasarım şablonları]]></category>

		<guid isPermaLink="false">http://www.canaydogan.net/?p=351</guid>
		<description><![CDATA[Çok uzun süredir(4 şubat 2011&#8242;den bu yana) bloguma bir şeyler yazamadım.  Üzerine yazı yazacak konu bulma sıkıntısı ve zaman darlığından dolayı 1 yılı yakın süredir yeni bir yazı giremedim. Bu nedenle Tasarım Şablonları adlı bir yazı dizisi yazmaya karar verdim. Bu yazıyı da, bu yazı dizisine girizgah olarak yazmaya karar verdim. Herhangi bir kavramın ne ifade [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><em>Çok uzun süredir(4 şubat 2011&#8242;den bu yana) bloguma bir şeyler yazamadım.  Üzerine yazı yazacak konu bulma sıkıntısı ve zaman darlığından dolayı 1 yılı yakın süredir yeni bir yazı giremedim. Bu nedenle Tasarım Şablonları adlı bir yazı dizisi yazmaya karar verdim. Bu yazıyı da, bu yazı dizisine girizgah olarak yazmaya karar verdim.</em></p>
<p>Herhangi bir kavramın ne ifade ettiğini anlamak için en çok kullandığım teknik, o kavrama verilen isimde geçen kelimelerin anlamlarına bakmak olur benim için. Bu yazımda anlatmaya çalışacağım <strong>Tasarım Şablonları(Design Patterns)</strong> konusunda da bu teknik ile giriş yapacağım.</p>
<p>TDK&#8217;ya göre &#8220;Tasarım&#8221;;</p>
<blockquote><p><em>isim</em> Zihinde canlandırılan biçim, tasavvur</p></blockquote>
<p>Tasarım kavramına gerçek hayattan basit bir örnek vererek başlayalım. 2 adet bardağı uzay boşluğunda herhangi bir konuma yerleştirsek bu bir tasarım olur.(Sadece 2 adet bardak olmasına rağmen sonsuz sayıda kombinasyon olabilir. Bu yüzden ortaya bir tasarım koymak aslında oluşan tasarımlar arasında herhangi birini seçmekten de geçiyor.) Programlamada düşünürsek eğer, sınıfların iç yapısı, sınıfların konumu, sınıfların ve bileşenlerinin çalışma şekilleri, yine sınıfların ve bileşenlerin birbirleriyle olan ilişkilerinin nasıl olacağı gibi konular birer tasarım konularıdır. Yani <strong>&#8220;Nasıl?&#8221;</strong> sorusunun cevabı yapacağımız tasarımdır.</p>
<p>Yine TDK&#8217;ya göre &#8220;Şablon&#8221;;</p>
<blockquote><p><em>isim </em>Üzerindeki harf ve şekillerin çevre çizgileri kalem ucu girecek biçimde oyuk olan, bu çizgilerden kalemle istenilen biçim elde edilen, metal veya plastikten cetvel</p>
<p><em>mecaz</em> Çok kez tekrarlandığından kanıksanmış basmakalıp örnek</p></blockquote>
<p><a href="http://www.canaydogan.net/wp-content/uploads/2012/01/YILDIZLAR-GEOMETRIK-SABLON-CETVEL-KOD-40__11662656_1.jpg"><img class="alignleft size-medium wp-image-355" title="YILDIZLAR-GEOMETRIK-SABLON-CETVEL-KOD-40__11662656_1" src="http://www.canaydogan.net/wp-content/uploads/2012/01/YILDIZLAR-GEOMETRIK-SABLON-CETVEL-KOD-40__11662656_1-300x133.jpg" alt="" width="300" height="133" /></a> <em>Hala kullanılıyor mu bilmiyorum ama benim ilkokulu okuduğum yıllarda solda bulunan cetvel öğrencilerin olmazsa olmazlarından biriydi.</em></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Bu şablon cetveli doğuş amacını düşünelim. Daire çizme ihtiyacımız var. Düzgün daire çizmek de haliyle biraz zor. Ve sık sık daire çizmemiz gerekiyor. O zaman şu şekilde diyebiliriz; <strong>ihtiyacımız net bir şekilde ifade edebiliyorsak ve çok fazla değişikliğe açık bir ihtiyaç değilse,</strong> neden bir kalıp kullanarak ihtiyacımızı karşılamayalım. Bu noktada oluşturduğumuz şablonlar ile sık sık doğan bir ihtiyacımızı kolaylıkla gidermek mümkün.</p>
<p>O zaman tasarım ve şablon kavramlarını birleştirelim. Bir ihtiyacı karşılamak için bir tasarıma ihtiyacımız var. Bu ihtiyaç çok yeni ve bize özel bir ihtiyaç değil. Daha evvelde birileri bu ihtiyaca sahip olmuş ve bu ihtiyacı tasarım geliştirerek gidermişler. Hatta tasarımları o kadar iyi olmuş ki herkes tarafından bilinir ve kullanılır olmuş. Bu tasarımlara genel olarak <strong>Tasarım Şablonları</strong> adını veriyoruz.</p>
<p>Yukarıda genel olarak gerçek hayattan, yazılıma özel teknik kavramlar yerine, gündelik hayattan örnekler vererek tasarım şablonları konusuna eğilmeye çalıştım. İsterseniz işin biraz da yazılım boyutuna bakalım.</p>
<p>Yazılım geliştirici olarak programlama süreci boyunca geliştirdiğimiz uygulamanın ihtiyaçlarını gidermemiz en büyük görevimizdir. Bu ihtiyaçları giderirken genelde her adıma karşımıza çıkan <strong>Nasıl?</strong> sorusunu çözmek ile uğraşırız. Çoğunlukla birden fazla alternatif üreterek bu alternatifler arasından en uygununu bulmaya uğraşırız. Bu genelde sancılı ve sıkıntılı bir süreçtir. Çünkü oluşturduğumuz tasarım ilerde doğacak yeni ihtiyaçlara ne kadar karşılayacağını kestirmemiz oldukça zordur. Bu noktada diğer yazılım geliştiricilerin tecrübelerinden faydalanabiliriz. Yani bizim kendi tasarımlarımız yerine, başkalarının geliştirdiği tasarımlar ile sorunumuzu çözebiliriz.</p>
<p>Programcılar tarafından ihtiyaçları karşılamak üzere geliştirilmiş ve <strong>tekrar kullanılabilir</strong> yapıda olan program parçalarına <strong>Tasarım Şablonu</strong> denir.</p>
<h2>Tasarım Şablonu Kategorileri ve Tasarım Şablonları</h2>
<ol>
<li><strong>Oluşturucu tasarım şablonları (Creational patterns)</strong> bunlar; Abstract Factory, Builder, Factory, Prototype, Singleton tasarım şablonları.</li>
<li><strong>Yapısal tasarım şablonları(Structual patterns)</strong> bunlar; Adapter, Bridge, Facede, Decorator, Composite, Flyweight, Proxy tasarım şablonları.</li>
<li><strong>Davranışsal tasarım şablonları(Behavioral patterns)</strong> bunlar; Command, Memento, Strategy, Iterator, State, Chain of Responsibility, Mediator, Observer, Template Method, Visitor tasarım şablonları.</li>
</ol>
<p><em>Yukarıda yazdıklarım dışında birçok tasarım şablonu daha var. Ancak ben genel olarak bilinenleri yazdım.</em></p>
<h2>Tasarım şablonunu kullanmak bize ne sağlar?</h2>
<ul>
<li>Tasarım şablonları edinilen tecrübeler doğrultusunda oluştuğu için genellikle bizim o an oluşturduğumuz tasarımlardan daha iyi olacaktır. Gelecekte doğabilecek yeni ihtiyaçlara daha iyi cevap verebilir.</li>
<li>Tekerleği yeniden icat etmek yerine, vaktimizi daha belirli ve bize özel ihtiyaçlarda kullanabiliriz.</li>
<li>Tekrar kullanılabilir yapıda oldukları için yine vaktimizi daha iyi değerlendirmemize sağlar.</li>
<li>Tasarımlar bir programcıya ait olmadığı için diğer programcıların tasarım anlaması çok daha kolay olur.</li>
<li>Tasarım şablonlarını bizim dışımızda başka birileri tarafından da kullanıldığı için sürekli birileri tarafından geliştirilir.</li>
</ul>
<h2>Sonuç</h2>
<p>Tasarım şablonları ile doğan tasarım ihtiyaçlarımızı gidermemiz mümkün. O zaman genel kabul görmüş tasarım şablonlarını öğrenirsek ihtiyacımız olduğunda bize uygun olan tasarım şablonunu seçerek ihtiyacımızı giderebiliriz. Bu sayede hem vakitten kazanmış oluruz hem de birçok programcı tarafından kullanılan bir tasarımı uygulamış oluruz.</p>
<p>Tasarım şablonları yazı dizisinde kendimce önemli gördüğüm tasarım şablonlarını PHP kullanarak anlatmaya çalışacağım.</p>
<p>Okuduğunuz için teşekkürler. Diğer yazılarda görüşmek üzere&#8230;</p>
<div class="shr-publisher-351"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2012%2F01%2F08%2Ftasarim-sablonlari-design-patterns%2F' data-shr_title='Tasar%C4%B1m+%C5%9Eablonlar%C4%B1+%28Design+Patterns%29'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2012%2F01%2F08%2Ftasarim-sablonlari-design-patterns%2F' data-shr_title='Tasar%C4%B1m+%C5%9Eablonlar%C4%B1+%28Design+Patterns%29'></a><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2012%2F01%2F08%2Ftasarim-sablonlari-design-patterns%2F' data-shr_title='Tasar%C4%B1m+%C5%9Eablonlar%C4%B1+%28Design+Patterns%29'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2012%2F01%2F08%2Ftasarim-sablonlari-design-patterns%2F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.canaydogan.net/2012/01/08/tasarim-sablonlari-design-patterns/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Css ile Su Damlası Menüsü (Water Wave Menu)</title>
		<link>http://www.canaydogan.net/2011/02/04/css-ile-su-damlasi-menusu-water-wave-menu/</link>
		<comments>http://www.canaydogan.net/2011/02/04/css-ile-su-damlasi-menusu-water-wave-menu/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 20:36:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Css]]></category>
		<category><![CDATA[menu]]></category>

		<guid isPermaLink="false">http://www.canaydogan.net/?p=319</guid>
		<description><![CDATA[Geçen gün cep telefonumda Need for Speed Hot Pursuit oynarken navigasyon menüsü dikkatimi çekti. Menüdeki herhangi bir butona tıkladığımızda bir su birikintisine, bir damla düşmüş gibi arkasında dalgalar bırakıyordu. Bu şekilde bir menüyü acaba sadece CSS kullanılarak yapılmış mıdır diye kısa bir araştırma yaptım ama herhangi bir sonuca ulaşamadım. Yapılmış herhangi bir örnek bulamayınca kendim [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.canaydogan.net/wp-content/uploads/2011/02/water-wave_1024x768_14556.jpg"><img class="alignleft size-medium wp-image-322" title="water-wave_1024x768_14556" src="http://www.canaydogan.net/wp-content/uploads/2011/02/water-wave_1024x768_14556-300x225.jpg" alt="" width="216" height="162" /></a>Geçen gün cep telefonumda Need for Speed Hot Pursuit oynarken navigasyon menüsü dikkatimi çekti. Menüdeki herhangi bir butona tıkladığımızda bir su birikintisine, bir damla düşmüş gibi arkasında dalgalar bırakıyordu. Bu şekilde bir menüyü acaba sadece CSS kullanılarak yapılmış mıdır diye kısa bir araştırma yaptım ama herhangi bir sonuca ulaşamadım.</p>
<p>Yapılmış herhangi bir örnek bulamayınca kendim yapmaya karar verdim.</p>
<p><strong>Menüyü şu adımları izleyerek oluşturdum;</strong></p>
<ul>
<li>Öncelikle yüksek border-radius değerleri ile ile yuvarlak halkalar elde ettim.</li>
<li>En üste menü elamanın kendisini z-index değerlerini ayarlayarak yerleştirdim. Bunu altına ise dalga efektini verecek elementleri ilave ettim.</li>
<li>Son olarak mouse, menü elemanlarının üzerine geldiğinde CSS&#8217;in transition özelliğini kullanarak animasyon şeklinde alta kalan halkaları genişlettim. Tabi halkalar genişlerken bulundukları konumu kaybettikleri için aynı anda top ve left değerlerini de uygun bir şekilde yine CSS transition özelliği ile ayarladım.</li>
</ul>
<p>Sadece Chrome ve Safari de çalışıyor. <strong><a href="http://canaydogan.net/wp-content/uploads/demos/water-wave-menu/menu.html" target="_blank">Buradan </a></strong>test edebilir <strong><a href="http://canaydogan.net/wp-content/uploads/files/water-wave-menu.rar">buradan </a></strong>da indirebilirsiniz</p>
<div class="shr-publisher-319"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2011%2F02%2F04%2Fcss-ile-su-damlasi-menusu-water-wave-menu%2F' data-shr_title='Css+ile+Su+Damlas%C4%B1+Men%C3%BCs%C3%BC+%28Water+Wave+Menu%29'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2011%2F02%2F04%2Fcss-ile-su-damlasi-menusu-water-wave-menu%2F' data-shr_title='Css+ile+Su+Damlas%C4%B1+Men%C3%BCs%C3%BC+%28Water+Wave+Menu%29'></a><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2011%2F02%2F04%2Fcss-ile-su-damlasi-menusu-water-wave-menu%2F' data-shr_title='Css+ile+Su+Damlas%C4%B1+Men%C3%BCs%C3%BC+%28Water+Wave+Menu%29'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2011%2F02%2F04%2Fcss-ile-su-damlasi-menusu-water-wave-menu%2F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.canaydogan.net/2011/02/04/css-ile-su-damlasi-menusu-water-wave-menu/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HTML5 ile Gelen Yeni Bir Özellik Web Storage</title>
		<link>http://www.canaydogan.net/2010/12/26/html5-ile-gelen-yeni-bir-ozellik-web-storage/</link>
		<comments>http://www.canaydogan.net/2010/12/26/html5-ile-gelen-yeni-bir-ozellik-web-storage/#comments</comments>
		<pubDate>Sun, 26 Dec 2010 12:39:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[local]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[web storage]]></category>

		<guid isPermaLink="false">http://www.canaydogan.net/?p=307</guid>
		<description><![CDATA[Web Storage özelliği tarayıcı tarafında verir saklamamızı sağlıyor yani basit bir veritabanı diyebiliriz. Bir anahtar(key) birde bu anahtara bağlı olan değer(value) vasıtası ile verilerimizi depoluyoruz Web Storage ile. Tarayıcı tarafında veri saklamak yeni bir özellik değil, yıllardır çerezler(cookies) ile bu işlemi yapıyorduk ve hala yapmaya devam ediyoruz aslında. Peki Web Storage&#8217;ın bize getirdiği avantajlar neler? Bildiğiniz [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Web Storage özelliği tarayıcı tarafında verir saklamamızı sağlıyor yani basit bir veritabanı diyebiliriz. Bir anahtar(key) birde bu anahtara bağlı olan değer(value) vasıtası ile verilerimizi depoluyoruz <strong>Web Storage</strong> ile.</p>
<p>Tarayıcı tarafında veri saklamak yeni bir özellik değil, yıllardır <strong>çerezler(cookies) </strong> ile bu işlemi yapıyorduk ve hala yapmaya devam ediyoruz aslında.</p>
<h4>Peki Web Storage&#8217;ın bize getirdiği avantajlar neler?</h4>
<ol>
<li>Bildiğiniz üzere çerezler sadece tarayıcı tarafındaki uygulamaların bilgi bilgi saklaması için geliştirilmemiştir. Çerezler aynı zamanda sunucu üzerinden tarayıcıda bilgi saklamak içinde kullanılır. Bu  yüzden her çerez sunucuya gönderilmek zorundadır.Açmak gerekirse siz tarayıcıda javascript kullanarak bir çerez oluşturup bu çereze teorik olarak 1MB boyunda bir değer girdiğinizde her http isteği için tarayıcı bu 1MB boyuntundaki veriyi sunucuya gönderecektir ve bu şekildeki kullanım gereksiz bir hantallığa yol açacaktır. Bu noktada imdadımıza Web Storage yetişiyor. <strong>Web Storage ile sakladığımız veriler http isteklerinde sunucuya gönderilmeyecektir.</strong></li>
<li>Web Storage ile çerezlerden daha kullanışlı ve kolay veri saklıyabiliyoruz.</li>
</ol>
<h4>Web Storage kaça ayrılır.</h4>
<p>Web Storage ikiye ayrılır;</p>
<ol>
<li>Session Storage.</li>
<li>Local Storage.</li>
</ol>
<p><strong>Session Storage:</strong> &#8220;Storage&#8221; nesnesinden türetilmiştir. Session Storage ile sakladığımız verilerin ömrü tarayıcı kapana kadardır. <strong>Tarayıcı kapandıktan sonra bu veriler imha edilir.</strong></p>
<p><strong>Local Storage: </strong>Session Storage da olduğu gibi yine &#8220;Storage&#8221; nesnesinden türetilmiştir. Local Storage daki verilerin ömrü ise sonsuzdur. <strong>Yani Local Storage ile şuan yazdığımız bir veriyi bir yıl sonrada okuyabiliriz. </strong>Tabi ki tarayıcının başına kötü birşey gelmez ise <img src='http://www.canaydogan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Session Storage ile<strong> </strong> Local Storage aynı method ve özelliklere sahiptir bunlar;</p>
<ul>
<li>&#8220;<strong>length</strong>&#8221; yazılmış verilerin adet olarak toplam sayısını verir.</li>
<li>&#8220;<strong>getItem(anahtar)</strong>&#8221; girilen anahtar ismine ait veriyi döndürür.</li>
<li>&#8220;<strong>setItem(anahtar, değer)</strong>&#8221; girilen anahtar ismi ve değere göre veriyi depoda saklar.</li>
<li>&#8220;<strong>removeItem(anahtar)</strong>&#8221; girilen anahtar ismine göre veriyi depodan siler.</li>
<li>&#8220;<strong>clear()</strong>&#8221; depoda saklanan tüm verileri siler.</li>
</ul>
<h4>Hangi tarayıcılar Geolocation destekliyor?</h4>
<p><a href="http://www.findmebyip.com/litmus/" target="_blank">Buradan</a> hangi tarayıcıların Geolocation’a destek verdiğine bakabilirsiniz. Ayrıca <a href="http://www.html5test.com/" target="_blank">buradan</a> kullandığınız tarayıcının destek verip vermediğini test edebilirsiniz.</p>
<h4>Nasıl Kullanabiliriz?</h4>
<p>Çok basit bir sayaç uygulaması ile kullanımına bakalım.</p>
<pre class="javascript" name="code">  var sayac = localStorage.getItem("sayac");
  sayac++;
  localStorage.setItem("sayac", sayac);
  $("#sayac").html("Sayac: " + sayac);</pre>
<p><strong>var sayac = localStorage.getItem(&#8220;sayac&#8221;)</strong> ile sayac anahtarına bağlı değeri çekiyoruz.</p>
<p><strong>sayac++</strong> ile bu değeri bir artırıyoruz.</p>
<p><strong>localStorage.setItem(&#8220;sayac&#8221;,  sayac) </strong>kodu ile sayac anahtarına yeni sayac değerini ayarlıyoruz ve yeni sayac değerini #sayac elementine aktarıyoruz. Hepsi bu kadar!</p>
<p>Bundan sonra tarayıcımız kapansa dahi yine sayacın bulunduğu sayfa açıldığında sayaç değeri kaldığı yerden artmaya devam edecektir.</p>
<p><a title="Demo" href="http://jsbin.com/ahimi4/9" target="_blank">DEMO</a></p>
<p>Kaynaklar:</p>
<ul>
<li><a href="http://dev.w3.org/html5/webstorage/">http://dev.w3.org/html5/webstorage/</a></li>
<li><a href="http://www.quirksmode.org/blog/archives/2009/06/html5_storage_t.html">http://www.quirksmode.org/blog/archives/2009/06/html5_storage_t.html</a></li>
<li><a href="http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-learning-about-html5-local-storage/">http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-learning-about-html5-local-storage/</a></li>
</ul>
<div class="shr-publisher-307"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2010%2F12%2F26%2Fhtml5-ile-gelen-yeni-bir-ozellik-web-storage%2F' data-shr_title='HTML5+ile+Gelen+Yeni+Bir+%C3%96zellik+Web+Storage'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2010%2F12%2F26%2Fhtml5-ile-gelen-yeni-bir-ozellik-web-storage%2F' data-shr_title='HTML5+ile+Gelen+Yeni+Bir+%C3%96zellik+Web+Storage'></a><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2010%2F12%2F26%2Fhtml5-ile-gelen-yeni-bir-ozellik-web-storage%2F' data-shr_title='HTML5+ile+Gelen+Yeni+Bir+%C3%96zellik+Web+Storage'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2010%2F12%2F26%2Fhtml5-ile-gelen-yeni-bir-ozellik-web-storage%2F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.canaydogan.net/2010/12/26/html5-ile-gelen-yeni-bir-ozellik-web-storage/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HTML5 ile Gelen Yeni Bir Özellik Geolocation</title>
		<link>http://www.canaydogan.net/2010/10/14/html5-ile-gelen-yeni-bir-ozellik-geolocation/</link>
		<comments>http://www.canaydogan.net/2010/10/14/html5-ile-gelen-yeni-bir-ozellik-geolocation/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 13:55:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[geocoding]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[maps]]></category>

		<guid isPermaLink="false">http://www.canaydogan.net/?p=293</guid>
		<description><![CDATA[İnternetin ilk dönemlerinde insanlar genellikle rumuzlar(nickname) ile internette var olmayı tercih ederken, günümüzde gerçek isimleri ve gerçek kişilikleri ile var olmayı tercih ediyorlar. Eğilim bu yönde olunca sadece ad ve soyad paylaşmak da yetmiyor haliyle. Kullanıcılar gittikleri mekanları, o an bulundukları yerleri de bir şekilde paylaşmak istiyorlar. W3C konsorsiyumu da bu ihtiyacı görmüş olacak ki [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>İnternetin ilk dönemlerinde insanlar genellikle rumuzlar(nickname) ile internette var olmayı tercih ederken, günümüzde gerçek isimleri ve gerçek kişilikleri ile var olmayı tercih ediyorlar. Eğilim bu yönde olunca sadece ad ve soyad paylaşmak da yetmiyor haliyle. Kullanıcılar gittikleri mekanları, o an bulundukları yerleri de bir şekilde paylaşmak istiyorlar. <a target="_blank" href="http://www.w3.org/">W3C konsorsiyumu</a> da bu ihtiyacı görmüş olacak ki HTML5&#8242;e  Geolocation özelliğini ekledi. Bende bu yazımda basit olarak Geolocation&#8217;dan bahsetmek istiyorum.</p>
<h4>Peki Geolocation nedir?</h4>
<p><strong>Geolocation </strong>eğer kullandığımız cihazda bir <strong>GPS </strong>aygıtı var ise GPS&#8217;den gelen veriler ile konumumuz tespit ediyor. Eğer herhangi bir GPS aygıtımız yoksa cihazımızda, <strong>&#8220;IP address, RFID, WiFi and Bluetooth MAC addresses, and GSM/CDMA cell IDs&#8221;</strong> bu bilgilerden yararlanarak konumuzu tespit etmeye çalışıyor. Çalışıyor diyorum çünkü bu yöntem ile pek doğru sonuçlar elde edemiyoruz <img src='http://www.canaydogan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .  Geolocation bu işleri bizim adımıza yapan API&#8217;dir.</p>
<h4>Hangi tarayıcılar Geolocation destekliyor?</h4>
<p><a href="http://www.findmebyip.com/litmus/" target="_blank">Buradan</a> hangi tarayıcıların Geolocation&#8217;a destek verdiğine bakabilirsiniz. Ayrıca <a target="_blank" href="http://www.html5test.com/">buradan</a> kullandığınız tarayıcının destek verip vermediğini test edebilirsiniz.</p>
<h4>Nasıl kullanabiliriz?</h4>
<p>Aslında kullanmak oldukça kolay. &#8220;navigator&#8221; nesnesi ile kolayca konumu tespit edebiliriz. Aşağıda kullanımını görebilirsiniz.</p>
<pre class="javascript" name="code">
	if (navigator.geolocation) {
		navigator.geolocation.getCurrentPosition(function(position) {
			var lat = position.coords.latitude;
			var lng = position.coords.longitude;
		});
	} else {
		alert('Tarayıcınız Geolocation desteklemiyor.');
	}
</pre>
<p><strong>&#8220;navigator&#8221;</strong> nesnesi üzerinden <strong>&#8220;getCurrentPosition&#8221;</strong> methodu ile kullanıcının konumunu öğreniyoruz. Ancak bu işlemin gerçekleşmesi tarayıcıdan izin almamız gerekiyor, bu işlemi &#8220;getCurrentPosition&#8221; methodu bizim adımıza kendi gerçekleştiriyor.</p>
<p><strong>&#8220;lat&#8221;</strong> değişkenimizin değeri enlemi <strong>&#8220;lng&#8221;</strong> değişkenimizin değeri ise boylam değerlerini veriyor.</p>
<p> Hepsi bu kadar. Aşağıdaki linkte google maps ile hazırladığım Geolocation demosuna bakabilirsiniz.</p>
<h3><a href="http://www.canaydogan.net/wp-content/uploads/demos/html5-geolocation.html">DEMO</a></h3>
</p>
<h4>Kaynaklar:</h4>
<ul>
<a href="http://dev.w3.org/geo/api/spec-source.html">http://dev.w3.org/geo/api/spec-source.html</a>
</ul>
<div class="shr-publisher-293"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2010%2F10%2F14%2Fhtml5-ile-gelen-yeni-bir-ozellik-geolocation%2F' data-shr_title='HTML5+ile+Gelen+Yeni+Bir+%C3%96zellik+Geolocation'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2010%2F10%2F14%2Fhtml5-ile-gelen-yeni-bir-ozellik-geolocation%2F' data-shr_title='HTML5+ile+Gelen+Yeni+Bir+%C3%96zellik+Geolocation'></a><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2010%2F10%2F14%2Fhtml5-ile-gelen-yeni-bir-ozellik-geolocation%2F' data-shr_title='HTML5+ile+Gelen+Yeni+Bir+%C3%96zellik+Geolocation'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.canaydogan.net%2F2010%2F10%2F14%2Fhtml5-ile-gelen-yeni-bir-ozellik-geolocation%2F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.canaydogan.net/2010/10/14/html5-ile-gelen-yeni-bir-ozellik-geolocation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

