<?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>Bilgisayar Kavramları &#187; Bilgisayar Kavramları</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/bilgisayar-kavramlari/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilgisayarkavramlari.com</link>
	<description>www.bilgisayarkavramlari.com</description>
	<lastBuildDate>Wed, 18 Aug 2010 21:13:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )</title>
		<link>http://www.bilgisayarkavramlari.com/2010/02/15/zeki-vekiller-akilli-ajanlar-intelligent-agents-zeki-etmenler/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/02/15/zeki-vekiller-akilli-ajanlar-intelligent-agents-zeki-etmenler/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 14:02:15 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>
		<category><![CDATA[bilgisayar felsefesi]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>
		<category><![CDATA[agent]]></category>
		<category><![CDATA[intelligent agents]]></category>
		<category><![CDATA[vekil]]></category>
		<category><![CDATA[zeki etmenler]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/02/15/zeki-vekiller-akilli-ajanlar-intelligent-agents-zeki-etmenler/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Zeki vekiller (etmenler, ajanlar) kavram olarak, bilgisayar bilimlerine, felsefe, biyoloji ve ekonomi alanındaki çalışmalardan sonra girmiştir. Bu alanlardaki anlamı ve kullanımı, genellikle herhangi bir işin farklı bir vekil tarafından yürütülmesi olarak anlaşılabilir. Bilgisayar bilimlerin açısından zeki kelimesi, bir vekilin herhangi bir işlemi belirli inisiyatifler kullanarak yerine getirmesidir. Örneğin zeki olmayan [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Zeki vekiller (etmenler, ajanlar) kavram olarak, bilgisayar bilimlerine, felsefe, biyoloji ve ekonomi alanındaki çalışmalardan sonra girmiştir. Bu alanlardaki anlamı ve kullanımı, genellikle herhangi bir işin farklı bir vekil tarafından yürütülmesi olarak anlaşılabilir.</p>
<p>Bilgisayar bilimlerin açısından zeki kelimesi, bir vekilin herhangi bir işlemi belirli inisiyatifler kullanarak yerine getirmesidir. Örneğin zeki olmayan bir vekil, her adımda ve her işlemde kullanıcıya bir şeyler sorarken, zeki vekilde daha çok otonom bir yapıdan (autonomous) bahsedilebilir.</p>
<p>Bu anlamda her zeki vekilin (intelligent agent) , çalıştığı ortam ile iletişimini sağladığı ve bu iletişim üzerinde karar verdiği bir mekanizması vardır denilebilir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/021510_1402_ZekiVekille1.png" alt="" /></p>
<p>Yukarıdaki temsili resimde, bir zeki vekil, çizgili alanda gösterilen üç ana unsurdan ibarettir. Bunlar kısaca vekilin çalıştığı ortamı gözlediği <a href="http://www.bilgisayarkavramlari.com/2008/10/04/sinir-aglarinda-katmanlar-neuron-layers/">algı (perception)</a> , vekilin bu ortamda bir işlem yapmasını sağlayan eylem (action) ve vekilin bu ortamdaki algısına göre nasıl bir eylem yapacağına karar vermesini sağlayan karar mekanizmasıdır. Bu karar mekanizması çoğu zaman bir kurallar listesi (rule base) olabileceği gibi bazı durumlarda basit bir if – else bloğu da olabilmektedir.</p>
<p>Russel ve Norving tarafından 2003 yılında yayınlanan yapay zeka kitabında, zeki vekiller 5 seviyede listelenmiştir. Bu seviyeleri basitten karmaşığa doğru aşağıdaki şekilde sıralayabiliriz:</p>
<ol>
<li>Fiil-i Münakıs Vekiller (reflex agents)</li>
<li>Fiil-i Münakıs Kalıp Vekiller (Model-based reflex agents)</li>
<li>Hedef  vekilleri ( goal-based agents)</li>
<li>Fayda vekilleri ( utility-based agents)</li>
<li>Öğrenen vekiller ( learning agents)</li>
</ol>
<p>Reflex Agents</p>
<p>Basit bir koşul ve eylem sıralamasından ibaret olan vekiller. Belirlenen koşul gerçekleşince yine daha önceden belirlenen fiili yerine getirir. Kurulu bir düzenek olarak düşünülebilir. Örneğin fare kapanı, bir insan için fareyi yakalayan bir vekildir ve farenin peyniri yemesiyle birlikte fareyi yakalar. Buradaki peynir yenmesi koşul ve farenin yakalanması fiil olarak düşünülebilir. Bazı refleks ajanlarında durum takibi de yapılabilir.  Örneğin fare kapanı misalinde olduğu gibi kapanın kurulu olma durumu, kapanın fareyi yakalamış  olma durumu gibi durumlar ayrı ayrı tahlil edilebilir.</p>
<p>Model Bazlı Refleks etkenler</p>
<p>Bu tip ajanlarda (etkenlerde) ise içinde çalışılan ortam modellenir. Yani ajan kendi yapısına göre ortamı anlamaya ve bir modelini kendi hafızasında tutmaya çalışır. Bu ajanlar modeldeki durumlara göre davranış sergilerler. Yani bir önceki tipte olan refleks ajanlarının ortamdan aldıkları doğrudan koşullarından farklı olarak bu ajanların modellerinde bazı refleksler tanımlıdır.</p>
<p>Hedef Güdümlü Vekiller</p>
<p>Bu vekiller ise belirli bir hedefe ulaşmak için bir dizi şart-fiil gerçekleştirirler. Basit bir durum-geçiş diyagramı (state transition diagram) olarak düşünülebilecek yapılarına göre, ortamı algılayarak mevcut yapılarındaki bir duruma benzetir ve bu durumu ulaşmak istedikleri hedefe en uygun şekilde eylemlerle değiştirmeye çalışır.</p>
<p>Çıkar Amaçlı Vekiller</p>
<p>Hedef amaçlı vekillerden farklı olarak, durumlar arasındaki geçişin oransal olması durumudur. Yani hedef güdümlü ajanlarda bir durumdan her zaman diğer duruma geçiş hedeflenir. Çıkar amaçlı vekillerde bundan farklı olarak oransal bir fonksiyon kullanılması söz konusudur. Bu fonksiyona çıkar fonksiyonu ( fayda fonksiyonu, utility function) ismi verilir.</p>
<p>Öğrenen Etkenler</p>
<p>Bu etken tipinde, ortamda yapılan bazı eylemlerin beklenen sonuca nasıl hizmet ettiğine göre yeni kurallar tanımlanır. Ajanın çalıştığı ortamın bilinmemesi halinde kullanılışlıdırlar.  Kendi kurallarını ve durum makinelerini oluşturabilir veya değiştirebilirler.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/02/15/zeki-vekiller-akilli-ajanlar-intelligent-agents-zeki-etmenler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tepe Tırmanma Algoritması (Hill Climbing Algorithm)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/12/02/tepe-tirmanma-algoritmasi-hill-climbing-algorithm/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/12/02/tepe-tirmanma-algoritmasi-hill-climbing-algorithm/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 13:19:24 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/12/02/tepe-tirmanma-algoritmasi-hill-climbing-algorithm/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde kullanılan arama algoritmalarından birisidir. Arama işleminin yapıldığı grafikteki tepelerden ismini alır. Basitçe bir grafikte bulunan en düşük noktanın aranması sırasında grafikte yapılan hareketin aslında tepe tırmanmaya benzemesinden ismini almaktadır. Örneğin yukarıdaki şekilde gösterilen ok temsili bir tepe tırmanma işlemidir. Burada arama yapan algoritma aslında bir çukur bulmuş ancak [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde kullanılan <a href="http://www.bilgisayarkavramlari.com/2009/11/23/arama-algoritmalari-search-algorithms/">arama algoritmalarından</a> birisidir. Arama işleminin yapıldığı grafikteki tepelerden ismini alır. Basitçe bir grafikte bulunan en düşük noktanın aranması sırasında grafikte yapılan hareketin aslında tepe tırmanmaya benzemesinden ismini almaktadır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120209_1319_TepeTrmanma1.png" alt="" /></p>
<p>Örneğin yukarıdaki şekilde gösterilen ok temsili bir tepe tırmanma işlemidir. Burada arama yapan algoritma aslında bir çukur bulmuş ancak daha iyisi için tepe tırmanmaktadır denilebilir.</p>
<p>Elbette olayı iki boyutlu bir grafik üzerinde yapılan bir arama veya tırmanılan bir tepe olarak görmek, algoritmanın önemini kavramayı engelleyebilir. Aslında burada anlatılmak istenen bilgisayar bilimleri de dahil olmak üzere, çeşitli bilim ve mühendislik alanlarında, birden fazla çözümü olan problemler için en iyi çözümün arandığı iyileştirme (optimization) problemleridir.</p>
<p>Yani şayet bir sistemin ya da bir programın daha iyi hale getirilmesi isteniyorsa, sistemin verdiği sonuçlara göre arama işlemi yapılarak iyileştirme amaçlanabilir. İşte bu noktada tepe tırmanma algoritması (hill climbing algorithm) de dahil olmak üzere çeşitli arama algoritmaları devreye girer.  Örneğin literatürde sıkça kullanılan <a href="http://www.bilgisayarkavramlari.com/2008/08/28/seyyar-tuccar-problemi-traveling-salesman-problem/">seyyar tüccar problemi (travelling salesman problem)</a> bu problemlerden birisidir. Tepe tırmanma algoritması verilen bir harita için verilen bir sonucu iyileştirmeye çalışır. Elbette amaç bütün ihtimalleri denemeden iyi bir sonuç bulabilmektir.</p>
<p>Tepe tırmanma algoritması, arama algoritmaları arasındaki en iyi sonucu verene algoritma değildir. Ancak kodlanması ve tasarımının basit oluşundan dolayı sıklıkla kullanılır.</p>
<p><strong>Tepe tırmanma algoritması çeşitleri<br />
</strong></p>
<p>Algoritmanın üzerinde çeşitli iyileştirmeler yapılarak daha iyi sonuçlar elde edilmeye çalışılmıştır. Literatürde sıkça kullanılan bir iki tepe tırmanma algoritmasını farkları ile birlikte açıklamaya çalışalım.</p>
<p>Klasik tepe tırmanma algoritmasında amaç arama için merkez kabul edilen (veya başlangıç noktamız diyebileceğimiz) noktadan komşu olan noktaları gezerek daha iyi sonuçlar elde etmektir. Temel olarak bir grafikte rastgele seçilen bir nokta için 3 farklı ihtimal bulunmaktadır:</p>
<ol>
<li>Noktanın bir tarafında problem iyileşirken diğer tarafında kötüleşmektedir. Bu durumda iyi tarafa doğru tırmanma algoritmamız devam eder.</li>
<li>Noktanın iki tarafında da problem sonucu kötüleşmektedir. Bu durumda bulunduğumuz nokta problem için en iyi noktalardan (optimum points) birisidir. Elbette bu en iyi sonuç olmayabilir yani bu sonuçtan daha iyi sonuçlar olabilir ancak klasik tepe tırmanma algoritması bu diğer sonuçları bulamaz ve bu noktada kalır.</li>
<li>Noktanın iki tarafında da problem iyileşiyordur. Yani tesadüfen bulduğumuz nokta aslında problem için ulaşılabilecek en kötü noktalardan birisidir. Bu durumda tepe tırmanma algoritması yönlerden birisini seçerek tırmanmaya devam eder. Farklı bir çeşit olarak iki yöne de tırmanan algoritma bulunmaktadır.</li>
</ol>
<p>Klasik tepe tırmanma algoritmasından farklı olarak steepest ascent hill climbing algoritmasında, bulunabilen bütün sonuçlar arasından bir seçim yapılır. Bu algoritmada da klasik tepe tırmanma algoritmasında da sorun aynıdır. Şayet arama işlemi sırasında bir yerel çukura (local minimum) rastlanılırsa bu durumdan algoritma kendisini kurtaramayarak en doğru sonucu bulamayabilir.</p>
<p>Buna karşılık olasılıksal tepe tırmanma algoritmasında ( stochastic hill climbing algorithm) bütün komşuların aranması ve komşuların verdiği sonuca göre hareket etmek yerine, rast gele olarak bir komşunun seçilmesi söz konusudur. Şayet gidilen bu komşu beklenen yönde bir iyileştirme sağlıyorsa, bu yönde aramaya (tırmanmaya) devam edilir, şayet beklenen iyileştirme sağlanamıyorsa, bu durumda daha farklı bir komşu denenir.</p>
<p>Yukarıdaki tepe tırmanma algoritmalarının yanında rastgele başlangıç tepe tırmanma algoritması (random restart hill climbing algorithm) şaşırtıcı derecede iyi sonuç veren bir algoritmadır. Bu algoritma basitçe bir x durumunu başlangıç kabul eder ve daha iyi bir durum bulunca başlangıç durumunu bu daha iyi duruma kaydırır. Algoritma iyi durum buldukça başlangıç durumunu kaydıran ancak bulamadığı durumlarda da aramaya devam eden bir yapıya sahiptir.  Rastgele başlangıç tepe tırmanma algoritmasına bazı kaynaklarda pompalı tüfek tepe tırmanma algoritması (shotgun hill climbing algorithm) ismi de verilmektedir.</p>
<p>Tepe tırmanma algoritmaları genel olarak yerel bir başarı noktasında (local optimum point) takılmak gibi bir zafiyete sahiptirler. Daha iyi sonuçlar için <a href="http://www.bilgisayarkavramlari.com/2009/11/23/simulated-annealing-benzetilmis-tavlama/">simulated annealing</a> gibi arama algoritmaları kullanılabilir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120209_1319_TepeTrmanma3.png" alt="" /></p>
<p>Örneğin yukarıdaki şekilde x ve y noktaları arasında bir düzlük bulunmaktadır. Başlangıç noktası olarak bu aralıktaki herhangi bir noktadan başlanırsa algoritma komşuları aradığında daha iyi veya daha kötü bir sonuç bulamayacağı için hatalı karar verebilir.</p>
<p>Ayrıca tepe tırmanma algoritmaları problem sonuçlarında nadiren de olsa aynı sonucun elde edilmesi durumunda belirsizce hatalı sonuçlar verebilir. Bu şekildeki durumlara algoritmadaki düzlükler ismi verilir ve algoritma hangi yöne gidilirse gidilsin daha iyi bir sonuç çıkaramaz (hep aynı sonucu çıkarır). Elbette doğası gereği tepe tırmanmaya hazırlanmış algoritmamız, tepe bulamayınca hata yapmaktadır.</p>
<p><strong>Algoritmanın kodlanması<br />
</strong></p>
<p>Algoritma iki boyutlu bir grafik için rastgele yön seçimi yapılması durumunda aşağıdaki şekilde kodlanabilir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120209_1319_TepeTrmanma5.png" alt="" /></p>
<p>Yukarıdaki kodda, basitçe başlangıç noktasından başlanarak, daha iyi sonuçlar bulunduğu sürece bir sonraki komşu noktaya hareket öngörülmüştür.</p>
<p>Ancak problemin çok boyutlu olması yani bir noktanın birden fazla komşusu bulunması durumunda bütün komşuların kontrol edilmesi ve en iyisinin bulunması daha sonra bu komşuya doğru hareket edilmesi gerekeceği için algoritmayı aşağıdaki şekilde yazmak mümkündür:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/120209_1319_TepeTrmanma6.png" alt="" /></p>
<p>Yukarıdaki yeni kodda, bir noktanın birden çok komşusu olduğu kabul edilmiş ve bütün komşuları dolaşılarak en iyi komşu alınmış, ardından daha iyi komşu bulundukça bu işlem devam ettirilmiştir. Nihayetinde hiçbir komşu, bulunan son komşudan daha iyi olmayınca program sonlandırılmıştır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/12/02/tepe-tirmanma-algoritmasi-hill-climbing-algorithm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Arama Algoritmaları (Search Algorithms)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/11/23/arama-algoritmalari-search-algorithms/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/11/23/arama-algoritmalari-search-algorithms/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 12:42:14 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[graf teorisi (graph theory, çizge kuramı)]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>
		<category><![CDATA[arama algoritmaları]]></category>
		<category><![CDATA[şekil]]></category>
		<category><![CDATA[graf arama]]></category>
		<category><![CDATA[heuristic]]></category>
		<category><![CDATA[metin arama]]></category>
		<category><![CDATA[search algorithms]]></category>
		<category><![CDATA[sezgisel]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/11/23/arama-algoritmalari-search-algorithms/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde, çeşitli veri yapılarının (data structures) üzerinde bir bilginin aranması sırasına kullanılan algoritmaların genel ismidir. Örneğin bir dosyada bir kelimenin aranması, bir ağaç yapısında (tree) bir düğümün (node) aranması veya bir dizi (array) üzerinde bir verinin aranması gibi durumlar bu algoritmaların çalışma alanlarına girer. Yapısal olarak arama algoritmalarını iki [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde, çeşitli veri yapılarının (data structures) üzerinde bir bilginin aranması sırasına kullanılan algoritmaların genel ismidir. Örneğin bir dosyada bir kelimenin aranması, <a href="http://www.bilgisayarkavramlari.com/2008/05/07/agaclar-tree/">bir ağaç yapısında (tree)</a> bir düğümün (node) aranması veya bir <a href="http://www.bilgisayarkavramlari.com/2007/05/04/array-dizi/">dizi (array)</a> üzerinde bir verinin aranması gibi durumlar bu algoritmaların çalışma alanlarına girer.</p>
<p>Yapısal olarak arama algoritmalarını iki grupta toplamak mümkündür.</p>
<ul>
<li>Uninformed Search (Bilmeden arama)</li>
<li>Informed Search (Bilerek arama)</li>
</ul>
<p>Arama işleminin bilmeyerek yapılması demek, arama algoritmasının, probleme özgü kolaylıkları barındırmaması demektir. Yani her durumda aynı şekilde çalışan algoritmalara uninformed search (bilmeden arama) ismi verilir. Bu aramaların bazıları şunlardır:</p>
<ul>
<li>
<div>Listeler (diziler (array)) üzerinde çalışan arama algoritmaları:</div>
<ul>
<li><a href="http://www.bilgisayarkavramlari.com/2008/11/09/dogrusal-arama-linear-search/">Doğrusal Arama (Linear Search)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/12/21/ikili-arama-algoritmasi-binary-search-algorithm/">İkili arama (binary search)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2008/10/25/ara-deger-aramasi-interpolation-search/">Interpolasyon Araması (Ara değer araması, Interpolation Search)</a></li>
</ul>
</li>
<li>
<div><a href="http://www.bilgisayarkavramlari.com/2008/08/01/graf-sekil-graph/">Şekiller (graflar (Graphs) )</a> üzerinde çalışan algoritmalar</div>
<ul>
<li><a href="http://www.bilgisayarkavramlari.com/2009/11/02/sabit-maliyet-aramasi-uniform-cost-search/">Sabit Maliyetli Arama (Uniform Cost Search)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/05/29/floyd-warshall-algoritmasi/">Floyd Warshall algoritması</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2007/12/24/dijkstra-algoritmasi/">Prim&#8217;s Algoritması</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2007/12/24/kruskal-asgari-tarama-agaci-algoritmasi/">Kruskal Algoritması</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2010/05/13/dijkstra-algoritmasi-2/">Dijkstra Algoritması</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2010/05/26/bellman-ford-algoritmasi/">Bellman Ford Algoritması</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2008/05/07/ikili-arama-agaci-binary-search-tree/">İkili arama ağacı (Binary Search Tree)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/06/22/prufer-dizilimi-prufer-sequence/">Prüfer dizilimi</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2008/11/13/sig-oncelikli-arama-breadth-first-search/">Ağaçlarda Sığ öncelikli arama (breadth first search)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2010/05/22/sekillerde-sig-oncelikli-arama/">Şekillerde (Graph) sığ öncelikli arama (Breadth First Search, BFS)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2008/11/13/derin-oncelikli-arama-depth-first-search/">Derin öncelikli arama (depth first search)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/12/02/sinirli-derin-oncelikli-arama-depth-limited-search/">Derin Limitli Arama (Depth Limited Search) Algoritması</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2008/11/01/patricia-agaci-patricia-tree/">Patricia Ağaçları</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2008/05/14/trie-metin-agaci/">Trie Ağaçları (metin ağaçları, trie trees)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2008/10/25/b-agaci-b-tree/">B-ağaçları (B-Tree)</a></li>
</ul>
</li>
<li>
<div>Metin arama algoritmaları (bir yazı içerisinde belirli bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgiyi (string)</a> arayan algoritmalar)</div>
<ul>
<li><a href="http://www.bilgisayarkavramlari.com/2009/04/11/knuth-morris-prat-algoritmasi-kmp-algorithm/">Knuth-Morris Prat arama algoritması</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/05/19/boyer-moore-dizgi-arama-algoritmasi-boyer-moore-string-search/">Boyer-Moore Arama algoritması</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/11/24/kaba-kuvvet-metin-arama-algoritmasi-bruteforce-text-search-algorithm/">Kaba Kuvvet Metin Arama Algoritması (Brute Force Text Search, Linear Text Search)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/11/24/dfa-metin-arama-algoritmasi-dfa-text-search/">DFA Metin Arama Algoritması</a></li>
</ul>
</li>
</ul>
<p>Arama işleminin bilerek yapılması ise, algoritmanın probleme ait bazı özellikleri bünyesinde barındırması ve dolayısıyla arama algoritmasının problem bazlı değişiklik göstermesi demektir. Bu algoritmaların bazıları a aşağıda listelenmiştir:</p>
<ul>
<li><a href="http://www.bilgisayarkavramlari.com/2009/04/29/minimax-agaclari-minimax-tree/">Minimax Ağaçları</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/11/23/simulated-annealing-benzetilmis-tavlama/">Simulated Annealing (Benzetimli Tavlama) algoritması </a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/12/02/tepe-tirmanma-algoritmasi-hill-climbing-algorithm/">Tepe Tırmanma Algoritması (Hill Climbing Algorithm)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/12/06/arilar-algoritmasi-bees-algorithm/">Arı sürüsü arama algoritması (bees search algorithm)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/03/02/a-yildiz-arama-algoritmasi-a-star-search-algorithm-a/">A* Araması (astar search)</a></li>
<li><a href="http://www.bilgisayarkavramlari.com/2009/11/01/geri-izleme-algoritmasi-backtracking-algorithm/">Geri izleme (backtracking)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/11/23/arama-algoritmalari-search-algorithms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simulated Annealing (Benzetilmiş Tavlama)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/11/23/simulated-annealing-benzetilmis-tavlama/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/11/23/simulated-annealing-benzetilmis-tavlama/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 12:41:22 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/11/23/simulated-annealing-benzetilmis-tavlama/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde, özellikle hesaplama alanında kullanılan algoritmalardan birisidir. İsmini demir tavlamak veya demiri ısıtmak anlamına gelen annealing (tavlama) kelimesinden almıştır. Algoritmanın amacı, herhangi bir problem için genel iyileştirme (global optimization) elde etmektir. Diğer bir deyişle, herhangi bir fonksiyonun ya da ölçümün genel minimum veya maksimum (global minimum) elde etmek olarak [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde, özellikle hesaplama alanında kullanılan algoritmalardan birisidir. İsmini demir tavlamak veya demiri ısıtmak anlamına gelen annealing (tavlama) kelimesinden almıştır. Algoritmanın amacı, herhangi bir problem için genel iyileştirme (global optimization) elde etmektir. Diğer bir deyişle, herhangi bir fonksiyonun ya da ölçümün genel minimum veya maksimum (global minimum) elde etmek olarak düşünülebilir.</p>
<p><strong>1. Simulated annealing (benzetilmiş tavlama) nerede işe yarar?<br />
</strong></p>
<p>Genellikle hesaplamalı bilimlerde bir deneyin yada nümerik sonuçların anlık değerleri elde edilir. Örneğin aşağıdaki grafiği ele alalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112309_1241_SimulatedAn1.png" alt="" /></p>
<p>Yukarıdaki şekil herhangi bir indis değerlerine sahip fonksiyon olabilir. Yukarıdaki 2 boyutlu grafiğin indisleri yada formüllendirilmesi ile ilgilenmeden grafiğin en küçük olduğu değeri bulmaya konsantre olalım. Şayet yukarıdaki grafiği veren bir formül elimizde varsa, bu formülün üzerinde çeşitli matematiksel yöntemler uygulayarak (örneğin türev alarak) bir sonuç elde edebiliriz. Ancak yukarıdaki grafiği veren bir formülümüzün olmadığını ve yukarıdaki değerleri ancak belirli aralıklarla yapılan ölçümler sonucu elde ettiğimizi düşünelim.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112309_1241_SimulatedAn3.png" alt="" /></p>
<p>Örneğin yukarıdaki noktalar ile gösterilen değerlerin ölçüldüğü ayrık bir (discrete) sistemimiz olduğunu düşünelim. Bu duruma yapay zeka problemlerinde <a href="http://www.bilgisayarkavramlari.com/2008/12/22/sezgisel-algoritmalar-bulussal-algoritmalar-heuristic-algorithms/">sezgisel sonuçların (heuristic)</a> elde edildiği problemlerde veya gerçek hayattaki farklı zamanlarda yapılan ölçümlerde sıkça rastlanır.  Benzer bir durum olarak ölçme maliyetinin yüksek olduğunu da kabul edilebilir. Örneğin her ölçümün yüksek maliyet getirdiği ve dolayısıyla kısıtlı sayıda ölçüm yaparak en düşük değeri bulacağımız x ekseni değerini aradığımızı düşünelim.</p>
<p>İşet yukarıdaki 2 boyutlu grafikte kullanılabilecek benzetimli tavlama (simulated annealing) algoritması, matematiksel olarak bir fonksiyonla modellenemeyen, nümerik ve ayrık uygulamalarda kullanılabilir. Ayrıca problemin kaç boyutlu olduğunun da bir önemi yoktur. Örneğin 3, 4 veya daha fazla boyutlu problemlerde de kolaylıkla uygulanabilir.</p>
<p><strong>2. simulated annealing (benzetilmiş tavlama) nasıl çalışır?<br />
</strong></p>
<p>Algoritmanın çalışması aslında isminin de geldiği demir tavlama işlemine benzer. Yani nasıl demir tavlama işlemi sırasında bir demir parçayı ısıtıp sonra soğumaya bırakıyorsak, herhangi bir sayısal ölçüme de benzeri yaklaşım uygulanabilir.</p>
<p>Şayet demir tavlama problemini, demiri oluşturan ufak hücrelerin ısınması ve soğuması olarak düşünecek olursak, ki bu hücreler daha sonra problemimizin örneklendiği her bir deney veya nümerik sonuç olarak modellenecektir, hücreler arası geçiş ve hücrelerin zamana bağlı değerlerini elde etmek mümkündür.</p>
<p>Amacımız genel bir minimum noktası bulmak olduğuna göre, problemin farklı zamanlardaki sonuçlarını ele alıp bu sonuçlardan iyi olanına doğru hareket etmemiz gerekir. Örneğin s durumu ve s&#8217; durumları arasından, P(e,e&#8217;,T) olasılık değerine göre seçim yapılır. Buradaki e= E(s) ve e&#8217;=E(s&#8217;) olarak hesaplanan s ve s&#8217; için enerji değerleridir. Yani grafikteki karşılık değerleri veya deneyimizin sonuç değerleri olarak düşünülebilir. T değeri ise ısı olarak geçer ki bunu da deneydeki ölçüm zamanları olarak kabul etmek mümkündür.</p>
<p>Kısacası P(e,e&#8217;,T) değeri bir olasılık sonucu çıkarır. Bu sonuç bize s durumundan s&#8217; durumuna geçişin ne kadar kabul edilebilir olduğunu olasılıksal olarak verir.</p>
<p>Burada daha basit bir açıklama olarak şöyle düşünebiliriz. Şayet e&#8217; değeri, e değerinden yüksekse, yani yeni durumumuzdaki enerji daha yüksek bir enerjiyse, sistem soğumuyor ısınıyor demektir. Bu ise sistemin daha kötüye gittiğinin bir işaretidir ve doğal olarak kabul edilir bir durum değildir.</p>
<p>Ancak sistemin hep iyiye gitmesi hiç kötüye gitmemesini istememiz durumunda yerel minimumla (local minimum) karşılaşırız. Örneğin yukarıda temsili resmi verilen şekli hatırlayalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112309_1241_SimulatedAn5.png" alt="" /></p>
<p>Yukarıdaki şekilde düşey ekseni enerji olarak kabul edersek, soldaki okun gösterdiği değer soğuma olarak düşünülebilir. Yani farklı durumlar için enerji değerleri azalmıştır. İkinci okta ise enerji değerleri artmış yani elde edilen durumlarda ısınma olmuştur. Şimdi yukarıdaki örnek için, şayet ısınan durumları, yani okun yukarı yönlü olduğu durumları kabul etmez ve grafikte sağa doğru hareket etmezsek 1 numaralı çukurda takılıp kalma ihtimali olur. Bu durumda sistemimiz hiçbir zaman, daha iyi sonuçlar olan 2 ve 3 numaralı çukurlara ulaşamayabilir.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Bu şekilde elde edilen sonuçlara yerel minimum (local minimum) ismi verilir ve algoritmamızın yukarıda açıklanan şekilde davranması durumuna <a href="http://www.bilgisayarkavramlari.com/2008/03/24/acgozlu-yaklasimi-greedy-approach/">açgözlü yaklaşımı (greedy approach)</a> ismi verilir. Kısaca ilk bulduğu minimum değerine atlayan ve dolayısıyla sistemdeki daha düşük minimum değerleri bulamayan algoritma haline gelir. (açgözlülük insanı kör ettiği gibi algoritmaları da kör eder)</p>
<p>Bu duruma çözüm olarak e&#8217;-e değerindeki değişimler gözlenir. Bu değerler arasındaki değişimlerin artması, bu değerleri üreten s ve s&#8217; durumlarının kabulünü zorlaştırır. Ancak iki durumda ölçülen enerji değerlerinin birbirine çok yaklaşması durumunda sistem kabul edilir. Bu sayede sistemin yükseldiği durumlarda da sistem dolaşmaya devam eder ancak enerji değerlerinin birbirine iyice yaklaşması sonucunda minimum değerler bulunmuş olunur.</p>
<p><strong>3. Simulated annealing&#8217;in kodlanması<br />
</strong></p>
<p>Yukarıdaki tanımı müsvedde kod olarak yazalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/112309_1241_SimulatedAn7.png" alt="" /><span style="font-family:Courier New; font-size:10pt"><br />
</span></p>
<p>Yukarıdaki kod, görüldüğü üzere komşu durumlar üzerinde hareket ederek (yada olasılık durumuna göre etmeyerek) en iyi sonucu bulmaya çalışır.</p>
<p>Yukarıdaki kodun diğer bir özelliği ise sezgi üstü yaklaşımlar için kullanışlı olmasıdır. Dikkat edilirse, algoritmanın taradığı bütün durumlar s ve s&#8217; durumları olarak geçmekte ve dilenirse kaydedilebilmektedir. Bu durum normal bir soğuma sürecinden farklı olarak (gerçek hayatta herhangi bir t anında sadece bir durum vardır) çok durumu tutabilme imkanı sunar.</p>
<p>Ayrıca yukarıdaki algoritmada yapılacak deneme sayısı kodun 7. Satırındaki döngü ile limitlenebilmektedir. Dolayısıyla bir kişi en iyi ama en maliyetli çözüm için bu MAX değerini arttırabilir. Elbette en iyi çözüm demek daha çok deneme demek ve bu da yüksek maliyet demektir. Maliyetin düşürülmesi için deneme sayısının kısılması ise, en iyi genel sonucun bulunamaması ihtimalini yükseltir. Elbette şanslıysak ve genel minimum f(0) değeriyse hiç deneme yapmamıza da gerek yoktur <span style="font-family:Wingdings">J</span></p>
<p>Benzetilmiş tavlama yönteminin ( simulated annealing), bir özelliği de, aynı problem için birden fazla çözümü olmasıdır. Bunun sebebi yukarıdaki kodda da belirsiz olarak bırakılan, komsu(), P(), T() <a href="http://www.bilgisayarkavramlari.com/2008/10/12/fonksiyon-function/">fonksiyonlarının (functions)</a> problemin çözümündeki seçilme şeklidir. Yani aynı problemi iki farklı bilgisayar bilimcisi iki farklı komşuluk fonksiyonu, ısı değeri ve olasılık değerine göre çözebilir. Burada probleme özgü olarak modelleme yapmak ve problemin karakteristiğinin doğru analiz edilmesi önem taşır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/11/23/simulated-annealing-benzetilmis-tavlama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firmware (Bellenim)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/10/26/firmware-bellenim/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/10/26/firmware-bellenim/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 22:58:47 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/10/26/firmware-bellenim/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Firmware kelimesi, İngilizcede iki kelimenin birleşmesinden oluşur. Firm anlam olarak şirket ware ise mal anlamına gelir. Örneğin yazılım kelimesinin karşılığı olan software Türkçede tam çevirim ile yumuşak mal anlamına gelebilir. Burada ware kelimesinin zaman içerisinde (software kelimesinin yaygınlaşması ile) giderek yazılım anlamına kayması söz konusudur. Yani yazılım dünyasında kullanılan çoğu [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Firmware kelimesi, İngilizcede iki kelimenin birleşmesinden oluşur. Firm anlam olarak şirket ware ise mal anlamına gelir. Örneğin yazılım kelimesinin karşılığı olan software Türkçede tam çevirim ile yumuşak mal anlamına gelebilir. Burada ware kelimesinin zaman içerisinde (software kelimesinin yaygınlaşması ile) giderek yazılım anlamına kayması söz konusudur. Yani yazılım dünyasında kullanılan çoğu terimde yazılı bir kod veya program için sadece ware eklentisi yeterli görülmektedir. (middleware, software, firmware, shareware, spyware veya warez gibi kelimlerdeki ware kısmı genelde yazılı kod anlamındadır)</p>
<p>Kelimenin etimolojisine hızlıca baktıktan sonra Türkçe karşılığına geçebiliriz. Genelde bilgisayar dünyasında kavramlar ve dolayısıyla kelimeler İngilizceden geldiği için yoğun bir Türkçede İngilizce terimlere karşılık bulma sıkıntısı yaşıyoruz. Genelde de tam olarak karşılığı olan anlamı veremiyoruz. Türkçede firmware kelimesini direk İngilizcedeki gibi kullananların yanında  bellenim veya gömülü kod terimlerini kullananlarda bulunmaktadır. Ayrıca tam anlamında şirket kodu veya üretici kodu gibi terimlerde kullanılabilmektedir.</p>
<p><strong>Peki nedir firmware?<br />
</strong></p>
<p>Firmware en kaba tabiriyle bir cihazın üzerindeki yazılımdır. Üretici firma tarafından üretim aşamasında cihaza yazılır ve genelde de hiç değiştirilmeden cihazın ömrüne paralel bir ömür sürer.</p>
<p>Örneğin günlük hayatımızda arabaların, hesap makinelerinin, uydu alıcılarının, kahve makinelerinin veya dijital kameraların çoğunda böyle bir yazılım bulunur. Nadiren de olsa bu yazılımın güncellenmesi ve yenilenmesi gerekir. Güncelleme işlemi yine genelde firmalar tarafından sağlanan kodların cihaza yüklenmesi şeklinde olur. Yüklemek için ya cihazın üzerinde bulunan özel bir iletişim ara yüzünden faydalanılır veya cihaza donanımsal olarak müdahale gerekir. Örneğin bir arabanın üzerindeki bir çipin kodlanması için bu çipe özel olarak bağlanılması gerekir ve bunun için ilave donanıma ihtiyaç duyulur.</p>
<p>Öte yandan bir adsl modem&#8217;in üzerindeki yazılım için FTP veya http portlarından erişim sağlanarak kolayca güncelleme yapılabilir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/10/26/firmware-bellenim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Base64</title>
		<link>http://www.bilgisayarkavramlari.com/2009/10/22/base64/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/10/22/base64/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 16:16:53 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Veri Sıkıştırma (Data Compression)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/10/22/base64/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Veri güveliği konusunda kullanılan kodlama (encoding) algoritmalarından birisidir. Basitçe bir bilginin farklı semboller ile gösterilmesi işlemidir. Bu semboller alfabedeki harflerin büyük/küçük sıralanması ve sayılardan oluşur. Bir base64 sisteminin kullandığı semboller aşağıda verilmiştir: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ Yukarıda toplam 64 sembol bulunmaktadır. Dolayısıyla her sayıya bir karşılık gelir. Örneğin 0 sayısal değeri için A [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Veri güveliği konusunda kullanılan kodlama (encoding) algoritmalarından birisidir. Basitçe bir bilginin farklı semboller ile gösterilmesi işlemidir. Bu semboller alfabedeki harflerin büyük/küçük sıralanması ve sayılardan oluşur. Bir base64 sisteminin kullandığı semboller aşağıda verilmiştir:</p>
<p>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/</p>
<p>Yukarıda toplam 64 sembol bulunmaktadır. Dolayısıyla her sayıya bir karşılık gelir. Örneğin 0 sayısal değeri için A , 63 sayısal değeri için / sembolü gibi.</p>
<p>Bir metnin base64&#8242;e çevrilmesi işlemi ise <a href="http://www.bilgisayarkavramlari.com/2008/10/17/sayi-tabanlari-number-bases/">ikilik tabanda</a><br />
<a href="http://www.bilgisayarkavramlari.com/2009/09/04/ascii-tablosu/">ascii kodları</a> ile metni kodlayıp ardından metni base64 için tamamlamak ve yukarıdaki sembollerle ifade etmektir. Bu işlemin nasıl yapıldığını adım adım inceleyelim.</p>
<p>Base64 ile kodlamak istediğimiz mesajımız &#8220;www.bilgisayarkavramlari.com&#8221; olsun. Bu mesajdaki her harfin karşılığı olan ASCII kodunu bulalım:</p>
<p>119 119 119 46 98 105 108 103 105 115 97 121 97 114 107 97 118 114 97 109 108 97 114 105 46 99 111 109</p>
<p>Yukarıdaki dizilimde her sembol için karşılığı olan ASCII kodu yazılmıştır. Buna göre örneğin mesajımızın ilk harfi olan w için 119 veya mesajın son harfi olan m için 109 sayısı tablodan bulunmuştur.</p>
<p>Yukarıdaki çevrilmiş ve <a href="http://www.bilgisayarkavramlari.com/2008/10/17/sayi-tabanlari-number-bases/">onluk tabandaki sayıları ikilik tabana çevirirsek</a>:</p>
<p>0111 0111 0111 0111 0111 0111 0010 1110 0110 0010 0110 1001 0110 1100 0110 0111 0110 1001 0111 0011 0110 0001 0111 1001 0110 0001 0111 0010 0110 1011 0110 0001 0111 0110 0111 0010 0110 0001 0110 1101 0110 1100 0110 0001 0111 0010 0110 1001 0010 1110 0110 0011 0110 1111 0110 1101</p>
<p>Mesajını buluruz. Yukarıdaki mesajda her 8 bit (ikil) <a href="http://www.bilgisayarkavramlari.com/2009/09/04/ascii-tablosu/">ASCII tablosunda</a> bir sayıya karşılık gelir. Örneğin mesajın ilk 8 biti (ikili) 0111 0111, oluk tabana çevrilirse 119 yapar ve bu değer tablodaki w sembolüne karşılık gelir. Yukarıda toplam 224 <a href="http://www.bilgisayarkavramlari.com/2007/11/24/bit-ikil/">bit (ikil) bulunmaktadır</a>. Çünkü mesaj uzunluğu 28 karakterdir ve her karakter için 8 bit kullanılmıştır.</p>
<p>Yukarıdaki mesajın base64 ile kodlanması sırasında mesajın eksik bulunan bitlerinin tamamlanması gerekir. Buradaki hesap basitçe mesajın boyutunun 24&#8242;ün katı olana kadar 8&#8242;er bitlik 0 (sıfırların) eklenmesidir.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Mesajda toplam 224 bit bulunuyor ve 224, 24&#8242;e tam olarak bölünemiyor. Bu durumda sayımız 24&#8242;e tam bölünebilmesi için 240&#8242;a tamamlanması gerekir. Sonuçta mesajımız aşağıdaki şekilde olacaktır:</p>
<p>0111 0111 0111 0111 0111 0111 0010 1110 0110 0010 0110 1001 0110 1100 0110 0111 0110 1001 0111 0011 0110 0001 0111 1001 0110 0001 0111 0010 0110 1011 0110 0001 0111 0110 0111 0010 0110 0001 0110 1101 0110 1100 0110 0001 0111 0010 0110 1001 0010 1110 0110 0011 0110 1111 0110 1101 0000 0000 0000 0000</p>
<p>Görüldüğü üzere sonuna 16 adet 0 eklenmiştir. Şimdi artık mesajımız base64 kodlamasında işlenmeye hazırdır. Mesajı bu sefer 6 bitlik parçalara bölüp onluk sisteme çevirebiliriz. Buradaki amaç bizim kodlamamızdaki 64 sembolden hangisine karşılık geldiğini bulmaktır.</p>
<p>Örneğin mesajın ilk 6 biti 011101 &#8216;dir ve onluk sistemde 29 yapar. Bu bizim kodlamamızda yukarıda verilen sembollerden 29. Sembol ile gösterileceğini ifade eder. Bu sembol A harfi 0 olarak kabul edilip sayılırsa d harfi olarak bulunur. Benzer şekilde bir sonraki 6lık grup alınırsa 110111 sayısını onluk tabanda 55 sayısı bulunur ve bizim kodlamamızda 55 sayısı ile 3 sembolü gösterilmektedir.</p>
<p>Yukarıdaki bu işlemi bütün mesaj için uygularsak sonuçta www.bilgisyarkavramlari.com mesajı için aşağıdaki sonuç bulunur:</p>
<p>d3d3LmJpbGdpc2F5YXJrYXZyYW1sYXJpLmNvbQ==</p>
<p>Yukarıdaki mesaj tam bir base64 çevrimidir. Burada mesajın sonunda bulunan == sembollerinin bizim kodlamamızda yer almadığına dikkat ediniz. Bu semboller mesajın ayrılmasını sağlayan son eklerdir.</p>
<p>Base64 örneğin MIME protokolünün içerisinde gönderilen mesajlara uygulanan bir kodlamadır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/10/22/base64/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moore Yasası (Moore’s Law)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/10/06/moore-yasasi-moore%e2%80%99s-law/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/10/06/moore-yasasi-moore%e2%80%99s-law/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 19:39:14 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/10/06/moore-yasasi-moore%e2%80%99s-law/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Moore yasası, bir yasa olmaktan çok, bilgisayar donanımında kullanılan transistor sayısı ile ilgili bir istatistiki gözlemdir.Buna yasaya göre her iki yılda aynı hacim içerisine sığan transistor sayısı ikiye katlanmaktadır. Aşağıda emsnow sitesinden alınmış ve yıllarla göre işlemci teknolojisindeki atlamaları ve transistor sayılarını gösteren bir şekil bulunmaktadır: Yukarıdaki bu şekilde takip [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Moore yasası, bir yasa olmaktan çok, bilgisayar donanımında kullanılan transistor sayısı ile ilgili bir istatistiki gözlemdir.Buna yasaya göre her iki yılda aynı hacim içerisine sığan transistor sayısı ikiye katlanmaktadır. Aşağıda emsnow sitesinden alınmış ve yıllarla göre işlemci teknolojisindeki atlamaları ve transistor sayılarını gösteren bir şekil bulunmaktadır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/100609_1939_MooreYasasM1.png" alt="" width="499" height="282" /></p>
<p>Yukarıdaki bu şekilde takip edilebileceği üzere gelişim doğrusal bir yapıya sahiptir. Yasayı ortaya atan Gordon E. Moore 1970 yılında henüz 2200 adet transistor içeren işlemciler için bu yasayı söylediğinden beri gelişme doğrusunda büyük bir sapma olmamıştır. İstatistiksel olarak bu doğrunun devam etmesi beklenmektedir.</p>
<p>Moore yasasının farklı uygulamaları bilgisayar <a href="http://www.bilgisayarkavramlari.com/2008/11/07/rastgele-erisilebilir-bellek-random-access-memory-ram/">hafızaları (RAM)</a> veya bir dijital kameranın kaç piksellik resim çekebildiği gibi farklı alanlara da uygulanmıştır.</p>
<p>Örneğin internet bağlantı hızı yoğunluğu için IBM tarafından hazırlanan aşağıdaki grafikte benzer bir doğrusallık göze çarpar:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/100609_1939_MooreYasasM2.png" alt="" /></p>
<p>Benzer bir grafik ise dijital fotoğraf makinelerindeki <a href="http://www.bilgisayarkavramlari.com/2007/11/24/piksel-benek-imgecik-pixel/">imgecik (pixel)</a> yoğunluğunun fiyata oranı için aşağıdaki şekilde hazırlanmıştır:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/100609_1939_MooreYasasM3.png" alt="" /></p>
<p>Yukarıdaki bu grafiği hazırlayan kişinin adına bu artışa da hendy&#8217;s law (Hendy yasası) ismi verilmektedir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/10/06/moore-yasasi-moore%e2%80%99s-law/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cluster Computing (Bilgisayar Kümeleri)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/09/09/cluster-computing-bilgisayar-kumeleri/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/09/09/cluster-computing-bilgisayar-kumeleri/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 21:26:33 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[işletim sistemleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2009/09/09/cluster-computing-bilgisayar-kumeleri/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde, daha fazla işlem gücü elde etmek amacıyla birden fazla bilgisayarın tek bir bilgisayar gibi çalışmasına verilen isimdir. Genelde birden fazla bilgisayar birbirine oldukça hızlı bir ağ bağlantısı ile bağlanır ve bilgisayarların üzerinde çalıştırılan özel yazılımlar ile istenen işin paylaştırılması hedeflenir. Literatürde kümeleme veya ingilizce olarak clustering terimleri de [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family:Times New Roman; font-size:12pt">Yazan : Şadi Evren ŞEKER<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Bilgisayar bilimlerinde, daha fazla işlem gücü elde etmek amacıyla birden fazla bilgisayarın tek bir bilgisayar gibi çalışmasına verilen isimdir. Genelde birden fazla bilgisayar birbirine oldukça hızlı bir ağ bağlantısı ile bağlanır ve bilgisayarların üzerinde çalıştırılan özel yazılımlar ile istenen işin paylaştırılması hedeflenir. Literatürde kümeleme veya ingilizce olarak clustering terimleri de kullanılmaktadır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Bilgisayarların üzerinde çalışan işletim sisteminin tek bir işletim sistemi gibi davranması durumuna dağıtık işletim sistemi (distributed operating system) ismi verilir. Burada kullanıcı veya çalıştırılması istenen işler kümeye (cluster) tek bir noktadan erişir ve işin arka planda nasıl yapıldığı ile arasında bir soyutlama katmanı (abstraction layer) bulunur.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/090809-2126-clustercomp1.png" alt="" /><span style="font-family:Times New Roman; font-size:12pt"><br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Diğer bir deyişle bilgisayar kümelerinde hedeflenen amaç, kullanıcıların yada <a href="http://www.bilgisayarkavramlari.com/2007/11/18/islem-process/">çalışan işlemlerin (process)</a> kümenin iç yapısından bağımsız olması ve kümenin her durumda istenen işi en verimli şekilde çalıştırmasıdır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Ancak bu durum ne yazık ki günümüzde tam olarak gerçekleştirilememiş bir hayaldir. Bunun en önemli sebebi yük dağılımının (load balancing) her durum için en verimli şekilde yapılmasını sağlayacak bir otomat bulunamamasıdır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Örneğin bir <a href="http://www.bilgisayarkavramlari.com/2010/04/02/matris-carpimi-matrix-multiplication/">matris çarpımı</a> işlemini yaparken kullanılacak dağıtım ile bir fraktal üretimi yada resim işleme sırasında yapılacak dağıtım farklı olabilir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Tam bu noktada işlem kümeleri (Computing clusters) terimi devreye girer. Bu tip özel kümelerde amaç sadece özel bir iş yada iş tipi için verimli hale getirilmiş kümeler ve yazılımlar üretmektir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Örneğin sadece hava durumu tahmini veya sadece sonlu eleman analizi (finite element analysis) için geliştirilmiş bir kümede özel bir müdahale gerekmeden işlem yapılabilir. Genellikle PVM  paralel virtual machine) veya <a href="http://www.bilgisayarkavramlari.com/2009/04/29/mpi-message-passing-interface-mesaj-gecirme-arayuzu/">MPI (message passing interface)</a> benzeri alt yapılar kullanılarak sağlanan bu paralelleştirme işlemlerine işletim sistemlerinin üzerinde çalışan beawulf gibi katmanlar örnek gösterilebilir.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/090809-2126-clustercomp3.png" alt="" /><span style="font-family:Times New Roman; font-size:12pt"><br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Yukarıdaki şekilde üç bilgisayar üzerinde çalışan bu yapı temsil edilmiştir. Bilgisayarların üzerinde çalışan işletim sistemleri. Bu işletim sistemleri üzerinde çalışan paralel işlem katmanı ve en üstte çalışan işlem kümesi yazılımı.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Küme bilgisayarların farklı bir uygulama şeklide ızgara hesaplamalarıdır (grid computing). Bu tip dağıtımlı işlemelerde (distrubuted computing) amaç yukarıda anlatılan işlem kümelerinden ( computing clusters) farklı olarak daha genel amaçlara yönelik işlem gücü elde etmektir. Ayrıca burada tam bir bölünmüşlükten bahsedebiliriz. Bazı durumlarda ağ üzerinde iletişimin oldukça az olması ve işlem yapan bilgisayarların birbiri ile neredeyse hiç konuşmaması bile söz konusudur. Örneğin kullanan SETI@Home projesi buna örnek gösterilebilir. Bu projede insanlar bilgisayarlarını kullanmadıklarında devreye giren basit bir program bütün dünyadan insanların bilgisayarında işlem yapıp sonuçları merkezi sunucuya bildiriyor. Bu sayede uzun süre boş duran bilgisayarların işlem gücü zayi olmamış oluyor ve astronomi konusunda çeşitli hesaplamalarda kullanılıyor.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/09/09/cluster-computing-bilgisayar-kumeleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASCII Tablosu (table)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/09/04/ascii-tablosu/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/09/04/ascii-tablosu/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 06:40:25 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=3385</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde kullanılan ve her sembolü sayısal olarak ifade etmeye yarayan tablolardan birisidir. Aslında günümüzde en çok kullanılanıdır. ASCII harfleri American Standard Code for Information Interchange kelimelerinin baş harflerinden oluşmaktadır. Kelime olarak 1973 yılında, bu alandaki ihtiyacı doldurmak amacıyla ANSI tarafından (American National Standards Institute , Amerikan ulusal standartlar enstitüsü) [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde kullanılan ve her sembolü sayısal olarak ifade etmeye yarayan tablolardan birisidir. Aslında günümüzde en çok kullanılanıdır. ASCII harfleri American Standard Code for Information Interchange kelimelerinin baş harflerinden oluşmaktadır. Kelime olarak 1973 yılında, bu alandaki ihtiyacı doldurmak amacıyla ANSI tarafından (American National Standards Institute , Amerikan ulusal standartlar enstitüsü) tarafından ilk kez kullanılmıştır.</p>
<p>Basitçe bilgisayarın işlediği sinyalleri (ki bu sinyalleri 1 ve 0 olarak göstermek mümkündür), insanların anlayabileceği sembollere çevirmek için kullanılır. Bu tablonun ilk 7 <a href="http://www.bilgisayarkavramlari.com/2007/11/24/bit-ikil/">bit (ikil) </a>oluşan kısmı aşağıda verilmiştir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/ascii.jpg"><img class="alignnone size-full wp-image-3386" title="ascii" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/09/ascii.jpg" alt="ascii" width="244" height="472" /></a></p>
<p>Tablo aslında 8 <a href="http://www.bilgisayarkavramlari.com/2007/11/24/bit-ikil/">bit (ikil)</a> için kullanılabilir ve bu durumda 256 karakter içerir ancak son bitin (ikil) kullanımı sonucunda çıkan tablo dillere göre değişmektedir. Bu son bitin eklenmiş haline uzatılmış ASCII (extended ascii ) ismi de verilmektedir.</p>
<table border="0">
<tbody>
<tr>
<td>Dec</td>
<td>Hex</td>
<td>Char</td>
<td>Dec</td>
<td>Hex</td>
<td>Char</td>
<td>Dec</td>
<td>Hex</td>
<td>Char</td>
<td>Dec</td>
<td>Hex</td>
<td>Char</td>
</tr>
<tr>
<td>128</td>
<td>80</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-128.png" alt="Character 128" /></td>
<td>160</td>
<td>A0</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-160.png" alt="Character 160" /></td>
<td>192</td>
<td>C0</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-192.png" alt="Character 192" /></td>
<td>224</td>
<td>E0</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-224.png" alt="Character 224" /></td>
</tr>
<tr>
<td>129</td>
<td>81</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-129.png" alt="Character 129" /></td>
<td>161</td>
<td>A1</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-161.png" alt="Character 161" /></td>
<td>193</td>
<td>C1</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-193.png" alt="Character 193" /></td>
<td>225</td>
<td>E1</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-225.png" alt="Character 225" /></td>
</tr>
<tr>
<td>130</td>
<td>82</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-130.png" alt="Character 130" /></td>
<td>162</td>
<td>A2</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-162.png" alt="Character 162" /></td>
<td>194</td>
<td>C2</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-194.png" alt="Character 194" /></td>
<td>226</td>
<td>E2</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-226.png" alt="Character 226" /></td>
</tr>
<tr>
<td>131</td>
<td>83</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-131.png" alt="Character 131" /></td>
<td>163</td>
<td>A3</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-163.png" alt="Character 163" /></td>
<td>195</td>
<td>C3</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-195.png" alt="Character 195" /></td>
<td>227</td>
<td>E3</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-227.png" alt="Character 227" /></td>
</tr>
<tr>
<td>132</td>
<td>84</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-132.png" alt="Character 132" /></td>
<td>164</td>
<td>A4</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-164.png" alt="Character 164" /></td>
<td>196</td>
<td>C4</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-196.png" alt="Character 196" /></td>
<td>228</td>
<td>E4</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-228.png" alt="Character 228" /></td>
</tr>
<tr>
<td>133</td>
<td>85</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-133.png" alt="Character 133" /></td>
<td>165</td>
<td>A5</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-165.png" alt="Character 165" /></td>
<td>197</td>
<td>C5</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-197.png" alt="Character 197" /></td>
<td>229</td>
<td>E5</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-229.png" alt="Character 229" /></td>
</tr>
<tr>
<td>134</td>
<td>86</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-134.png" alt="Character 134" /></td>
<td>166</td>
<td>A6</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-166.png" alt="Character 166" /></td>
<td>198</td>
<td>C6</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-198.png" alt="Character 198" /></td>
<td>230</td>
<td>E6</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-230.png" alt="Character 230" /></td>
</tr>
<tr>
<td>135</td>
<td>87</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-135.png" alt="Character 135" /></td>
<td>167</td>
<td>A7</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-167.png" alt="Character 167" /></td>
<td>199</td>
<td>C7</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-199.png" alt="Character 199" /></td>
<td>231</td>
<td>E7</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-231.png" alt="Character 231" /></td>
</tr>
<tr>
<td>136</td>
<td>88</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-136.png" alt="Character 136" /></td>
<td>168</td>
<td>A8</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-168.png" alt="Character 168" /></td>
<td>200</td>
<td>C8</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-200.png" alt="Character 200" /></td>
<td>232</td>
<td>E8</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-232.png" alt="Character 232" /></td>
</tr>
<tr>
<td>137</td>
<td>89</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-137.png" alt="Character 137" /></td>
<td>169</td>
<td>A9</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-169.png" alt="Character 169" /></td>
<td>201</td>
<td>C9</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-201.png" alt="Character 201" /></td>
<td>233</td>
<td>E9</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-233.png" alt="Character 233" /></td>
</tr>
<tr>
<td>138</td>
<td>8A</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-138.png" alt="Character 138" /></td>
<td>170</td>
<td>AA</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-170.png" alt="Character 170" /></td>
<td>202</td>
<td>CA</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-202.png" alt="Character 202" /></td>
<td>234</td>
<td>EA</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-234.png" alt="Character 234" /></td>
</tr>
<tr>
<td>139</td>
<td>8B</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-139.png" alt="Character 139" /></td>
<td>171</td>
<td>AB</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-171.png" alt="Character 171" /></td>
<td>203</td>
<td>CB</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-203.png" alt="Character 203" /></td>
<td>235</td>
<td>EB</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-235.png" alt="Character 235" /></td>
</tr>
<tr>
<td>140</td>
<td>8C</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-140.png" alt="Character 140" /></td>
<td>172</td>
<td>AC</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-172.png" alt="Character 172" /></td>
<td>204</td>
<td>CC</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-204.png" alt="Character 204" /></td>
<td>236</td>
<td>EC</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-236.png" alt="Character 236" /></td>
</tr>
<tr>
<td>141</td>
<td>8D</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-141.png" alt="Character 141" /></td>
<td>173</td>
<td>AD</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-173.png" alt="Character 173" /></td>
<td>205</td>
<td>CD</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-205.png" alt="Character 205" /></td>
<td>237</td>
<td>ED</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-237.png" alt="Character 237" /></td>
</tr>
<tr>
<td>142</td>
<td>8E</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-142.png" alt="Character 142" /></td>
<td>174</td>
<td>AE</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-174.png" alt="Character 174" /></td>
<td>206</td>
<td>CE</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-206.png" alt="Character 206" /></td>
<td>238</td>
<td>EE</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-238.png" alt="Character 238" /></td>
</tr>
<tr>
<td>143</td>
<td>8F</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-143.png" alt="Character 143" /></td>
<td>175</td>
<td>AF</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-175.png" alt="Character 175" /></td>
<td>207</td>
<td>CF</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-207.png" alt="Character 207" /></td>
<td>239</td>
<td>EF</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-239.png" alt="Character 239" /></td>
</tr>
<tr>
<td>144</td>
<td>90</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-144.png" alt="Character 144" /></td>
<td>176</td>
<td>B0</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-176.png" alt="Character 176" /></td>
<td>208</td>
<td>D0</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-208.png" alt="Character 208" /></td>
<td>240</td>
<td>F0</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-240.png" alt="Character 240" /></td>
</tr>
<tr>
<td>145</td>
<td>91</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-145.png" alt="Character 145" /></td>
<td>177</td>
<td>B1</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-177.png" alt="Character 177" /></td>
<td>209</td>
<td>D1</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-209.png" alt="Character 209" /></td>
<td>241</td>
<td>F1</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-241.png" alt="Character 241" /></td>
</tr>
<tr>
<td>146</td>
<td>92</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-146.png" alt="Character 146" /></td>
<td>178</td>
<td>B2</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-178.png" alt="Character 178" /></td>
<td>210</td>
<td>D2</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-210.png" alt="Character 210" /></td>
<td>242</td>
<td>F2</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-242.png" alt="Character 242" /></td>
</tr>
<tr>
<td>147</td>
<td>93</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-147.png" alt="Character 147" /></td>
<td>179</td>
<td>B3</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-179.png" alt="Character 179" /></td>
<td>211</td>
<td>D3</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-211.png" alt="Character 211" /></td>
<td>243</td>
<td>F3</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-243.png" alt="Character 243" /></td>
</tr>
<tr>
<td>148</td>
<td>94</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-148.png" alt="Character 148" /></td>
<td>180</td>
<td>B4</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-180.png" alt="Character 180" /></td>
<td>212</td>
<td>D4</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-212.png" alt="Character 212" /></td>
<td>244</td>
<td>F4</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-244.png" alt="Character 244" /></td>
</tr>
<tr>
<td>149</td>
<td>95</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-149.png" alt="Character 149" /></td>
<td>181</td>
<td>B5</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-181.png" alt="Character 181" /></td>
<td>213</td>
<td>D5</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-213.png" alt="Character 213" /></td>
<td>245</td>
<td>F5</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-245.png" alt="Character 245" /></td>
</tr>
<tr>
<td>150</td>
<td>96</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-150.png" alt="Character 150" /></td>
<td>182</td>
<td>B6</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-182.png" alt="Character 182" /></td>
<td>214</td>
<td>D6</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-214.png" alt="Character 214" /></td>
<td>246</td>
<td>F6</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-246.png" alt="Character 246" /></td>
</tr>
<tr>
<td>151</td>
<td>97</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-151.png" alt="Character 151" /></td>
<td>183</td>
<td>B7</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-183.png" alt="Character 183" /></td>
<td>215</td>
<td>D7</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-215.png" alt="Character 215" /></td>
<td>247</td>
<td>F7</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-247.png" alt="Character 247" /></td>
</tr>
<tr>
<td>152</td>
<td>98</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-152.png" alt="Character 152" /></td>
<td>184</td>
<td>B8</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-184.png" alt="Character 184" /></td>
<td>216</td>
<td>D8</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-216.png" alt="Character 216" /></td>
<td>248</td>
<td>F8</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-248.png" alt="Character 248" /></td>
</tr>
<tr>
<td>153</td>
<td>99</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-153.png" alt="Character 153" /></td>
<td>185</td>
<td>B9</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-185.png" alt="Character 185" /></td>
<td>217</td>
<td>D9</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-217.png" alt="Character 217" /></td>
<td>249</td>
<td>F9</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-249.png" alt="Character 249" /></td>
</tr>
<tr>
<td>154</td>
<td>9A</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-154.png" alt="Character 154" /></td>
<td>186</td>
<td>BA</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-186.png" alt="Character 186" /></td>
<td>218</td>
<td>DA</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-218.png" alt="Character 218" /></td>
<td>250</td>
<td>FA</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-250.png" alt="Character 250" /></td>
</tr>
<tr>
<td>155</td>
<td>9B</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-155.png" alt="Character 155" /></td>
<td>187</td>
<td>BB</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-187.png" alt="Character 187" /></td>
<td>219</td>
<td>DB</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-219.png" alt="Character 219" /></td>
<td>251</td>
<td>FB</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-251.png" alt="Character 251" /></td>
</tr>
<tr>
<td>156</td>
<td>9C</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-156.png" alt="Character 156" /></td>
<td>188</td>
<td>BC</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-188.png" alt="Character 188" /></td>
<td>220</td>
<td>DC</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-220.png" alt="Character 220" /></td>
<td>252</td>
<td>FC</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-252.png" alt="Character 252" /></td>
</tr>
<tr>
<td>157</td>
<td>9D</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-157.png" alt="Character 157" /></td>
<td>189</td>
<td>BD</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-189.png" alt="Character 189" /></td>
<td>221</td>
<td>DD</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-221.png" alt="Character 221" /></td>
<td>253</td>
<td>FD</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-253.png" alt="Character 253" /></td>
</tr>
<tr>
<td>158</td>
<td>9E</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-158.png" alt="Character 158" /></td>
<td>190</td>
<td>BE</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-190.png" alt="Character 190" /></td>
<td>222</td>
<td>DE</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-222.png" alt="Character 222" /></td>
<td>254</td>
<td>FE</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-254.png" alt="Character 254" /></td>
</tr>
<tr>
<td>159</td>
<td>9F</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-159.png" alt="Character 159" /></td>
<td>191</td>
<td>BF</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-191.png" alt="Character 191" /></td>
<td>223</td>
<td>DF</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-223.png" alt="Character 223" /></td>
<td>255</td>
<td>FF</td>
<td><img src="http://www.ascii-codes.net/charsets/cp857/cp857-255.png" alt="Character 255" /></td>
</tr>
</tbody>
</table>
<p>Yukarıdaki taloda 128 ile 255 arasındaki uzatılmış ascii tablosunun karakter karşılıkları görülmektedir. Dikkat edileceği üzere Türkçe karakterler de bu tabloda bulunmaktadır.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Yukarıdaki tabloda bulunan sembollerin ikilik tabana çevrilmesi mümkündür. Yukarıdaki sayılar 10&#8242;luk tabanda olduğu için, örneğin &#8220;ş&#8221; harfini iklik tabana çevirmek istediğimizde 159 sayısını iklik tabana çevirmemiz yeterlidir.</p>
<p>(159)<sub>10</sub> = (100011111)<sub>2</sub></p>
<p>şeklinde yazılabilir.</p>
<p>Örneğin aşağıdaki C kodunu ele alalım:</p>
<pre>#include &lt;stdio.h&gt;</pre>
<pre>int main(){</pre>
<pre>     printf("%c",159);</pre>
<pre>}</pre>
<p>Yukarıdaki kod çalıştırıldığında ascii tablosunda 159 değerine sahip olan ş harfi ekrana basılacaktır.</p>
<p>Benzer şekilde aşağıdaki C kodu işlemi tersinden yapacaktır:</p>
<pre>#include &lt;stdio.h&gt;</pre>
<pre>int main(){</pre>
<pre>     printf("%d",'a');</pre>
<pre>}</pre>
<p>Yukarıdaki kodda a karakterinin sayısal değeri (%d ile basılan değeri) kullanılmıştır. Bu durumda ekranda sayısal olarak 97 görülecektir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/09/04/ascii-tablosu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Çerezler (Cookies)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/08/28/cerezler-cookies/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/08/28/cerezler-cookies/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 16:54:28 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Network(Ağ)]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=3358</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER İçerik Çerezlerin internet gezgininde ayarlanması Çerezlerin HTTP protokolü üzerinden çalışması PHP dilinde çerez kullanımı JSP dilinde çerez kullanımı ASP dilinde çerez kullanımı Çerezler ve güvenlik İneternet üzerinde, özellikle de web sayfaları üzerinde gezinirken kullanılan ufak kayıt dosyalarına verilen isimdir. Basitçe bir web sitesi internet üzerinden yayın yaparken bazan bağlanan kullanıcılar [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p class="shutter">İçerik<br />
<a href="#1">Çerezlerin internet gezgininde ayarlanması</a><br />
<a href="#2">Çerezlerin HTTP protokolü üzerinden çalışması</a><br />
<a href="#3">PHP dilinde çerez kullanımı</a><br />
<a href="#4">JSP dilinde çerez kullanımı</a><br />
<a href="#5">ASP dilinde çerez kullanımı</a><br />
<a href="#6">Çerezler ve güvenlik</a></p>
<p>İneternet üzerinde, özellikle de web sayfaları üzerinde gezinirken kullanılan ufak kayıt dosyalarına verilen isimdir. Basitçe bir web sitesi internet üzerinden yayın yaparken bazan bağlanan kullanıcılar hakkında bilgi tutma ihtiyacı duyar. Genelde bu bilgiyi tutmanın iki yolu vardır. Birincisi <a href="http://www.bilgisayarkavramlari.com/2007/12/13/sunucu-server/">sunucu</a> üzerindeki bir veri tabanı veya farklı bir veri saklama yapısı içinde tutulması. Diğeri ise <a href="http://www.bilgisayarkavramlari.com/2007/12/13/istemci-client-talebe/">istemci (client)</a> üzerinde saklamak.</p>
<p>Bu yazının konusu istemci (client) üzerinde veri saklama teknolojilerinden çerez ismi verilen (cookie) dosyaları anlatmaktır.</p>
<p>Literatürde, çerezler <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP protokolü üzerinden</a> taşındıkları için HTTP çerezleri (http cookie) olarak da geçmektedirler.</p>
<p><strong><a name="1"></a>Çerezlerin internet gezgininde ayarlanması</strong></p>
<p>Çerezlerin detayına ve programlamasına geçmeden önce çerezleri kullanıcıların kendi bilgisayarlarında nasıl ayarlayabileceklerini açıklayalım (ekran görüntüleri ve menü yerleri Firefox 3 sürümünden alınmıştır) . Örneğin firefox internet gezginindeki çerez ayarları aşağıdaki şekilde yapılabilir :</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez1.jpg"><img class="alignnone size-full wp-image-3359" title="cerez1" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez1.jpg" alt="cerez1" width="492" height="265" /></a></p>
<p>Öncelikle ayarların yapılacağı ekrana Araçlar &gt; Seçenekler tıklanarak girilebilir:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez2.jpg"><img class="alignnone size-full wp-image-3360" title="cerez2" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez2.jpg" alt="cerez2" width="506" height="450" /></a></p>
<p>Yukarıda görüldüğü şekilde açılan seçenekler diyaloğunda Gizlilik sekmesi altında Çerezler bölümü bulunmaktadır. Bu bölümde istenirse sitelerin çerez bırakmasına izin verilebilir veya bu izin kaldırılabilir.</p>
<p>Temel olarak kullanıcıların böyle bir izni verme veya kaldırma hakkı bulunmaktadır çünkü sonuçta site tarafından kullanıcının bilgisayarına bir dosya kaydedilecektir. Yazının ilerleyen kısımlarında da anlatılacağı üzere bu izin kötü amaçla kullanılabilmekte ve kullanıcılar için tehdit oluşturabilmektedir. Dolayısıyla kullanıcı dilerse bu seçeneği kapatabilir.</p>
<p>Bu temel özellik bütün internet gezginlerinde ortak olmakla beraber yukarıdaki resimde de görüldüğü üzere Firefox internet gezgininde ilave bazı özellikler bulunmaktadır. Bunlardan birincisi ayrıaclık tanıma özelliğidir. Kullanıcılar isterlerse site bazlı olarak özel ayar yapabilirler ve kuralı sadece belirli sitelere uygulayabilirler.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez3.jpg"><img class="alignnone size-full wp-image-3361" title="cerez3" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez3.jpg" alt="cerez3" width="406" height="367" /></a></p>
<p>Örneğin yukarıdaki resimde ayrıcalık diyaloğu açıldığında çıkan ekran bulunmaktadır. Burada www.bilgisayarkavramlari.com sitesine izin verilmiştir. Benzer şekilde www.sadievrenseker.com sitesi eklenmek üzere yazılmıştır. Dilenirse Engelle düğmesi ile engellenebilir veya izin ver düğmesi ile izin verilebilir. Ortada bulunan Oturum boyunca izin ver düğmesi ise siteye bir girişlik izin vermek ve siteden çıkıldıktan sonra çerezin temizlenmesi anlamına gelir.</p>
<p>Eklenen siteler istenirse alt tarafta bulunan siteyi sil veya tüm siteleri sil düğmeleri ile silinebilir.</p>
<p>Ayarlar ekranından çerezleri göster düğmesi ile de aşağıdaki ekrana geçilebilir:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez4.jpg"><img class="alignnone size-full wp-image-3362" title="cerez4" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez4.jpg" alt="cerez4" width="405" height="337" /></a></p>
<p>Bu ekranda site bazlı olarak çerezlere ve bilgilerine erişmek mümkündür. Bilgisayarımıza bir sitenin bıraktığı çerezi ve detaylarını buradan görebiliriz. Elbette çoğu site çerez içeriği olarak şifreli bilgi tutmaktadır. Bunun sebebini güvenlik kısmında anlayacağız.</p>
<p>Çerezlerin yukarıdaki ekranda da görüldüğü üzere bitiş tarihleri bulunmaktadır. Yani bir çerez istenirse belirli bir süreliğine yollanabilir. Örneğin sitemize giren kişinin alışveriş sırasında sepetine eklediği eşyaların sadece 1 saat boyunca geçerli olmasını bundan sonra tekrar sitemize girerse sepetinin boşalmasını istiyor olalım. Bu durumda çerezi oluştururken bitiş tarihi olarak 1 saat ileri tarihi eklememiz yeterli olacaktır.</p>
<p>Internet gezginleri süresi dolan çerezleri saklamaz (veya saklamayabilir) yani bu tip süresi dolmuş çerezlerin silinip silinmemesi internet gezgininin insiyatifindedir ancak yine de süres dolan çerezlerin kullanılamayacağını bilmemiz yeterlidir.</p>
<p><strong><a name="2"></a>Çerezlerin çalışması</strong></p>
<p>Bir çerez, normal bir <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP paketi </a>ile kullanıcı tarafından talep edilir ve <a href="http://www.bilgisayarkavramlari.com/2007/12/13/sunucu-server/">sunucu tarafından</a> oluşturularak kullanıcıya yollanır.</p>
<p><a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP protokolü</a> üzerinden yapılan veri transferi request / response (talep / arz  (istek cevap) ) şeklinde olmaktadır. Yani<a href="http://www.bilgisayarkavramlari.com/2007/12/13/istemci-client-talebe/"> istemci (müşteri , client)</a> bilgisayarı <a href="http://www.bilgisayarkavramlari.com/2007/12/13/sunucu-server/">sunucu (server) </a>bilgisayarından bir bilgiyi talep eder (request) ve sunucu bilgisayar bu bilgiye cevap olarak bir sonuç arz eder.</p>
<p>Bu iletişim şeklinde arz edilen (sunucudan döenen) bilgi içerisinde bir çerez bilgisi bulunabilir. Bu bilgiyi <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP protokolü </a>desteklemektedir:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez5.jpg"></a><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez6.jpg"><img class="alignnone size-full wp-image-3364" title="cerez6" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/cerez6.jpg" alt="cerez6" width="482" height="448" /></a></p>
<p>Örneğin yukarıdaki şekilde adım adım bir <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP protokolü</a> üzerinden iletişim temsil edilmiştir. Önce istemci tarafı internet üzerinden bir <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP paketi </a>ile www.bilgisayarkavramlari.com sitesinde bulunan index.html dosyasını talep etmektedir.</p>
<p>Ardından sunucu bu talebe yine bir<a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/"> HTTP paketi</a> ile cevap vermektedir. Bu paketin içeriğine dikkat edilecek olursa cevap <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP 1.1 sürümü</a> ile yapıldığını göstermektedir. Ayrıca 200 OK mesajı dönülmüştür. Yani istenen sayfanın bulunduğu ve başarılı bir talep olduğu anlamında bir HTTP kodu ile talep cevaplanmıştır.</p>
<p>Burada <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP paketinde</a> bizim için önemli olan Set-Cookie bökümüdür. Bu bölümde bir çerez&#8217;in istemciye yollandığı ifade edilmektedir ve isim=değer ibaresiyle herhangi bir bilgi istemciye çerez olarak yüklenmi olur.</p>
<p>Buradaki isim=değer bizim belirlediğimiz bir ismin değeridir. Örneğin : &#8220;Giriştarihi = 28102009 &#8221; şeklinde bir bilgi olabilir.</p>
<p>Bu şekilde istemci tarafı bilgiyi talep ettikten ve içeriğinde çerez bulunan bir bilgi geldikten sonra bir önceki bölümde açıkladığımız üzere bu bilgi bilgisayarımızda bir dosya olarak saklanır.</p>
<p>Bundan sonraki talepler (farklı sayfa veya aynı sayfanın tekrar talep edilmesi gibi), bu çerez bilgisi de <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP paketine</a> ilave edilir.</p>
<p><strong><a name="3"></a>PHP dilinde çerez programlama </strong></p>
<p>Sunucu tarafı betik dili (server side scripting language) php ile çerez programlamak mümkündür. Bir php sayfasında çerez belirlemek için aşağıdaki satırlar kullanılır:</p>
<pre>&lt;?php
<span style="color: #ff0000;">setcookie("kullanici", "Şadi Evren ŞEKER", time()+3600);</span>
?&gt;</pre>
<p>Yukarıdaki örnek kodda php sayfasında setcookie fonksiyonu marifetiyle &#8220;kullanici&#8221; adında bir değişken tanımlanmış ve içeriğine Şadi Evren ŞEKER bilgisi eklenmiştir. Fonksiyonun son parametresi ise çerezin yaşam süresidir. Burada yine php içerisinde tanımlı olan time() fonksiyonu kullanılarak mevcut zaman bilgisi sistemden (sunucunun saatinden) okunmuş ve bu süreye 3600 saniye (tam olarak 60 dakika veya 1 saat) ilave edilerek çerezin geçerli olacağı son an belirlenmiştir.</p>
<p>Yukarıdaki kodda belki dikkat çekmeyebilir ancak setcookie fonksiyonu her zaman için sayfanın en başında bulunmalıdır. Bunun sebebi daha önce de açıkladığımız HTTP paketinin başlık kısmında yer alan bir bilgi olmasıdır. Şayet sayfanın içeriğinde bir yerlerde bu bilgi gönderilirse <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP protokolünün</a> bu bilgiyi ayırma şansı kalmaz.</p>
<p>Sitemizde yukarıdaki sayfa ile bir çerez üretilerek bu çerezin içerisinde kullanici=Şadi Evren ŞEKER bilgisi konulmuştur. Bu bilgiye erişilmek istendiğinde (yine bu sayfadan veya aynı sitedeki herhangi başka bir sayfadan) aşağıdaki şekilde ulaşılabilir:</p>
<pre>&lt;?php
<span style="color: #ff0000;">echo $_COOKIE["kullanici"];
print_r($_COOKIE);</span>
?&gt;</pre>
<p>Yukarıdaki kodun ilk satırı  ile $_COOKIE sistem değişkeni (ki bu değişken bir <a href="http://www.bilgisayarkavramlari.com/2007/05/04/array-dizi/">dizidir (array)</a> ) içerisinde bulunan &#8220;kullanici&#8221; bilgisine erişilmiştir. Bu dizinin tamamının içeriğini görmek için ikinci satırda bulunan ve dizi içeriğini basmaya yarayan print_r fonksiyonundan yararlanılabilir.</p>
<p><strong><a name="4"></a>JSP dilinde çerez programlama</strong></p>
<p>JAVA&#8217;nın web tabanlı arayüzü kabul edebileceğimiz <a href="http://www.bilgisayarkavramlari.com/2009/01/01/1603/">java server pages (jsp)</a> ile de yukarıdaki php koduna benzer çerez tanımları yapmak mümkündür.</p>
<p>Örneğin aşağıdaki sayfa kodunu inceleyerek JSP üzerinden nasıl çerez kullanıldığını anlamaya çalışalım :</p>
<pre>        &lt;%<span style="color: #ff0000;">@ page language="java" import="java.util.*"</span>%&gt;
        &lt;%
        <span style="color: #ff0000;">User username = new User();</span>
        <span style="color: #ff0000;">Date now = new Date();
	String timestamp = now.toString();
	Cookie cookie = new Cookie ("username",username);
	cookie.setMaxAge(365 * 24 * 60 * 60);
	response.addCookie(cookie);</span>
        %&gt;
        &lt;html&gt;
        &lt;body&gt;
        &lt;p&gt;&lt;a href="iki.jsp"&gt;ikinci sayfa icin buraya basiniz&lt;/a&gt;&lt;p&gt;</pre>
<pre>        &lt;/body&gt;
        &lt;/html&gt;</pre>
<p>Yukarıdaki kodda basit bir web sayfası html dilinde kodlanmıştır. JSP dilinden hatırlanacağı üzere &lt;% %&gt; blokları arasındaki kod JSP&#8217;ye aittir. Bu alan kolay okunsun diye yukarıda kırmızı renkle belirlenmiştir.</p>
<p>Sayfamızda JSP alanı içerisinde amacımız Cookie <a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/">sınıfından (class) </a>bir <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesne (object)</a> üretmektir. Bu nesnenin özelliği bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (string)</a> ve bir <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesne (object)</a> parametre almasıdır. Yukarıdaki kodda bulunan :</p>
<pre><span style="color: #ff0000;">	Cookie cookie = new Cookie ("username",username);</span></pre>
<p>Satırı aslında JSP için çerez kodlamanın yapıldığı satırdır. Bu satıra dikkat ederseniz Cookie <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">yapıcısının (constructor) </a>içerisine birinci parametre olarak bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (string)</a> verilmiştir. Bu yazı yani &#8220;username&#8221; ilerde çerezimize erişmek için kullanacağımız bir etiket olarak düşünülebilir. Bu etiketle erişilecek olan bilgi ise Cookie <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">yapıcısının (constructor)</a> ikinci parametresi olan ve daha önceden bir nesne olarak tanımlanmış olan username değişkenidir.</p>
<p>Yukarıdaki örnekte username nesnesi, User ismindeki bir <a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/">sınıftan</a> türetilmiştir. Siz uygulamanızda cookie olarak saklamak istediğiniz bir nesneyi buraya yerleştirebilirsiniz.</p>
<p>Yukarıdaki şekilde HTTP paketine yerleştirilen bir çereze yine JSP kodunu kullanarak erişmek için aşağıdaki kodlama işnize yarayabilir:</p>
<pre>&lt;%<span style="color: #ff0000;">@ page language="java" </span> %&gt;
&lt;%
   <span style="color: #ff0000;">String cookieName = "username";
   Cookie cookies [] = request.getCookies ();
   Cookie myCookie = null;
   if (cookies != null)
   {
		for (int i = 0; i &lt; cookies.length; i++)
		  {
				 if (cookies [i].getName().equals (cookieName))
				 {
						myCookie = cookies[i];
						break;
				 }
		  }
   }</span>
%&gt;
        &lt;html&gt;
        &lt;body&gt;
        &lt;%
        <span style="color: #ff0000;">if (myCookie == null) {</span>
        %&gt;
                &lt;%<span style="color: #ff0000;">=cookieName</span>%&gt; isminde bir çerez bulunamadı.
        &lt;%
        } else {
        %&gt;
                &lt;p&gt;Merhaba: &lt;%=<span style="color: #ff0000;">myCookie.getValue()</span>%&gt;.
        &lt;%
        }
        %&gt;
        &lt;/body&gt;</pre>
<pre>        &lt;/html&gt;</pre>
<p>Yukarıdaki kodda request.getCookies() fonksiyonu ile, sitemizden erişilebilen bütün çerezler alınmıştır. Ardından bir döngü ile bu çerezler arasında ismi &#8220;username&#8221; olan çerez aranmıştır. Bulunan bu çerez myCookie ismindeki çerezin içerisine konularak <a href="http://www.bilgisayarkavramlari.com/2008/12/10/html-hyper-text-markup-language/">HTML sayfasının</a> içine myCookie.getValue() ile ekrana yazılmıştır.</p>
<p><strong><a name="5"></a>ASP dilinde çerzlerin kullanımı</strong></p>
<p>ASP Microsoft tarafından geliştirilen bir sunucu tarafı betik dilidir (server side scripting language). Bu anlamda JSP ve PHP&#8217;ye benzemektedir. Aşağıdaki örnek kod ile bir ASP sayfası üzerinden nasıl çerez üretildiğini anlayabiliriz:</p>
<pre>&lt;%
<span style="color: #ff0000;">Response.Cookies("kullanici")="Şadi Evren ŞEKER"
Response.Cookies("kullanici").Expires=#May 10,201o#</span>
%&gt;</pre>
<p>Yukarıdaki kodda daha önceki dillerde de gördüğümüz üzere çerezin ismi ve değeri atanmıştır. Çerezimize isim olarak kullanici ismi verilmiş ve değer olarak ilk satırda içeriğine &#8220;Şadi Evren ŞEKER&#8221; değeri konulmuştur. Çerezin yaşam süresi ise 10 mayıs 2010 olarak ikinci satırda atanmıştır.</p>
<p>Aşağıdaki kod ile, yukarıda atanan içeriğe farklı bir sayfadan erişebiliriz:</p>
<pre>&lt;%
<span style="color: #ff0000;">abc=Request.Cookies("kullanici")
response.write("Çerez bilgisi=" &amp; abc)</span>
%&gt;</pre>
<p>Yukarıdaki kodda, abc ismindeki değişkene öncelikle <a href="http://www.bilgisayarkavramlari.com/2007/12/17/http-hyper-text-transfer-protocol-hiper-metin-transfer-protokolu/">HTTP paketinden</a> kullanici isimli değişken içeriği okunmuştur. Kodun ikinci satırında bu bilgi response.write ile istemciye geri yollanmış ve ekranda görüntülenmiştir.</p>
<p><strong><a name="6"></a>Çerezler ve güvenlik</strong></p>
<p>Yukarıda da açıklandığı üzere, çerezlerin siteler tarafından serbestçe erişilebilir olması bazı güvenlik sorunlarını da beraberinde getirmektedir. Aşağıda bu sorunlardan bazıları açıklanmıştır:</p>
<p><span style="text-decoration: underline;">İz takibi :</span> Bu güvenlik zaafiyeti birden fazla siteye tek bir elde yerleştirilen çerezlerde olur. Örneğin reklam yayını yapan bir şirket, reklamını yayınladığı yerlerde aynı zamanda çerezini de yayınlayabilir.  Bu tip çerezlere, üçüncü parti çerezler (third party cookies) ismi verilir. Bunun sebebi sitenin esas yayıncısı ve siteyi o anda ziyaret etmekte olan istemci (client) dışında üçüncü bir kişinin çerezi olmasıdır.</p>
<p>İşte bu üçüncü parti çerezler siteyi ziyaret eden kişinin bilgisayarına kaydedilir. Şayet reklam veren şirket isterse ziyaretçinin girdiği bütün sitelerin izini sürebilir. Yani reklamının yayınlandığı hangi sitelerin kullanıcı tarafından ziyaret edildiğini takip etmesi mümkündür.</p>
<p><span style="text-decoration: underline;">Çerez kaçırılması (cookie hijacking):</span> Bilindiği üzere çerezlerin içerisinde site ve kullanıcı ile ilgili çeşitli bilgiler tutulmaktadır. Saldırgan bir taraf sunucu ve istemci arasında gidip gelen bu çerezleri takip ederek veya istemcinin bilgisayarında saklanan çerez dosyalarına erişerek çeşitli bilgileri ele geçirebilir. Bu noktada sunucu üzerinden çerez programlayan tarafın oldukça hassas davranması ve kişisel bilgileri, şifre kullanıcı detayı gibi bilgileri çerez üzerinde tutmaması gerekir. Elbette internet gibi bir ortamda bu hassasiyet herkesten beklenemez bu da çerezlerin güvenlik açısından oluşturduğu bir problemdir. Diğer bir çözüm ise çerezlerin içindeki bilgilerin<a href="http://www.bilgisayarkavramlari.com/2009/06/16/simetrik-sifreleme-symmetric-encryption/"> şifreli (encrypted)</a> tutulmasıdır. Elbette bütün şifreler bir gün kırılabilir ancak bu vakit alacaktır ve daha organize bir saldırı gerektirecektir.</p>
<p><span style="text-decoration: underline;">Çerez zehirlemesi (cookie poisoning)</span>: Çerez zehirlemesindeki amaç, istemci taraftan sunucuya giden bilgilerin amaçlı olarak değiştirilmesidir. Örneğin bir alışveriş sitesinde, müşterilerin sepet bilgileri çerezde tutuluyor olsun. Ve büyük bir hata olarak müşterilerin sepetlerindeki eşyaların toplam fiyatı ve dolayısıyla müşterinin ödeyeceği fiyatın da çerezde tutulduğunu düşünelim. Kötü niyetli birisi bu değeri çerez üzerine elle müdahale ederek değiştirebilir ve aslında ödemesi gereken değerden çok daha ucuza sepetindeki eşyaları satın alabilir. Bu tip saldırılara çerez zehirlemesi ismi verilir.</p>
<p><span style="text-decoration: underline;">Oturum saldırısı (session hijacking): </span>Çerezlerin sıkça kullanıldığı yerlerden birisi de oturum bilgilerinin saklanmasıdır. Örneğin kullanıcının en son eriştiği sayfa, kullanıcının site üzerindeki ayarları veya kullanıcıya ait sitede tutulan bilgiler çerezlerde tutularak kullanıcının sonraki bağlantılarında sitede kaldığı yerden devam etmesi amaçlanır. Bu durum bir güvenlik zaafiyeti doğurur. Örneğin saldırgan bir kişi bu bilgileri kullanarak aslında hiç olmayan bir kullanıcı ile sitede erişme izni olmayan sayfalara sanki en son bu sayfada kalmış gibi erişebilir. Veya sahip olmadığı yetkiye çerez üzerinde değişiklikler yaparak erişmeye çalışabilir. Bu saldırının tek mantıklı çözümü ise daha dikkatli web siteleri programlamak ve programlcıların bu tip saldırılara karşı dikkatli olmasıdır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/08/28/cerezler-cookies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
