<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>ismailari.com</title>
	
	<link>http://ismailari.com</link>
	<description>İsmail Arı'nın internet güncesi</description>
	<lastBuildDate>Fri, 30 Jul 2010 16:15:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ismailari" /><feedburner:info uri="ismailari" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>OpenCV ile PCA (Temel Bileşenler Analizi)</title>
		<link>http://feedproxy.google.com/~r/ismailari/~3/fWzjvbjD9IY/</link>
		<comments>http://ismailari.com/blog/opencv-ile-pca-temel-bilesenler-analizi/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 16:15:00 +0000</pubDate>
		<dc:creator>İsmail Arı</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[opencv]]></category>

		<guid isPermaLink="false">http://ismailari.com/?p=1918</guid>
		<description><![CDATA[Son zamanlarda en çok kullandığım yöntem Temel Bileşenler Analizi olabilir! MATLAB ve Python ile yapılan kodlamaları paylaşmıştım. Bugün C++ ile yazmam gerekiyordu. OpenCV&#8217;nin içinde olduğunu öğrenince ve kolaylıkla kullanıverince çok iyi oldu. Buradaki dokümantasyon bölümünde anlatılmış. Henüz Python&#8217;a port etmemişler, yeni OpenCV&#8217;nin C++ kısmında mevcut. Dokümantasyondaki örnek kod gayet anlaşılır: 1 2 3 4 5 [...]]]></description>
			<content:encoded><![CDATA[<p>Son zamanlarda en çok kullandığım yöntem Temel Bileşenler Analizi olabilir! <a href="/blog/python-ile-pca-temel-bilesenler-analizi/">MATLAB</a> ve <a href="/blog/python-ile-pca-temel-bilesenler-analizi/">Python</a> ile yapılan kodlamaları paylaşmıştım. Bugün C++ ile yazmam gerekiyordu. OpenCV&#8217;nin içinde olduğunu öğrenince ve kolaylıkla kullanıverince çok iyi oldu. <a href="http://opencv.willowgarage.com/documentation/cpp/operations_on_arrays.html#pca">Buradaki</a> dokümantasyon bölümünde anlatılmış. Henüz Python&#8217;a port etmemişler, yeni OpenCV&#8217;nin C++ kısmında mevcut. Dokümantasyondaki örnek kod gayet anlaşılır:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">PCA compressPCA<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> Mat<span style="color: #000040;">&amp;</span> pcaset, <span style="color: #0000ff;">int</span> maxComponents,
                <span style="color: #0000ff;">const</span> Mat<span style="color: #000040;">&amp;</span> testset, Mat<span style="color: #000040;">&amp;</span> compressed<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    PCA pca<span style="color: #008000;">&#40;</span>pcaset, <span style="color: #666666;">// veri</span>
            Mat<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #666666;">// önceden hesaplanmış bir ortalama vektörümüz yok,</span>
                   <span style="color: #666666;">// o halde PCA sınıfımız onu hesaplasın</span>
            CV_PCA_DATA_AS_ROW, <span style="color: #666666;">// vektörlerin matrisin satırlarında olduğunu bildir</span>
                                <span style="color: #666666;">// (sütunlarda olursa CV_PCA_DATA_AS_COL kullanın</span>
            maxComponents <span style="color: #666666;">// en çok kaç tane temel bileşen olduğunu ver</span>
            <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #666666;">// eğer test verisi yoksa, hesaplanan baz vektörleri kullanım için döndür</span>
    <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span> <span style="color: #000040;">!</span>testset.<span style="color: #007788;">data</span> <span style="color: #008000;">&#41;</span>
        <span style="color: #0000ff;">return</span> pca<span style="color: #008080;">;</span>
    CV_Assert<span style="color: #008000;">&#40;</span> testset.<span style="color: #007788;">cols</span> <span style="color: #000080;">==</span> pcaset.<span style="color: #007788;">cols</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    compressed.<span style="color: #007788;">create</span><span style="color: #008000;">&#40;</span>testset.<span style="color: #007788;">rows</span>, maxComponents, testset.<span style="color: #007788;">type</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    Mat reconstructed<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> testset.<span style="color: #007788;">rows</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span> <span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
        Mat vec <span style="color: #000080;">=</span> testset.<span style="color: #007788;">row</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span>, coeffs <span style="color: #000080;">=</span> compressed.<span style="color: #007788;">row</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #666666;">// vektörü sıkıştır. Sonuç çıktı matrisinin i. satırına yazılacak</span>
        pca.<span style="color: #007788;">project</span><span style="color: #008000;">&#40;</span>vec, coeffs<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #666666;">// ve sonra geri oluştur</span>
        pca.<span style="color: #007788;">backProject</span><span style="color: #008000;">&#40;</span>coeffs, reconstructed<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span> pca<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>PCA ile ilgili teorik bilgi için <a href="http://www.google.com/search?q=A%20Tutorial%20on%20Principal%20Component%20Analysis">Google&#8217;a başvurabilirsiniz</a>. Jonathon Shlens&#8217;in anlatımı çok güzel. Yayın hakkım olmadığı için burada paylaşamıyorum.</p>
<img src="http://feeds.feedburner.com/~r/ismailari/~4/fWzjvbjD9IY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ismailari.com/blog/opencv-ile-pca-temel-bilesenler-analizi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ismailari.com/blog/opencv-ile-pca-temel-bilesenler-analizi/</feedburner:origLink></item>
		<item>
		<title>Gerçek-zamanlı Yüz Nirengi Noktası Takibi</title>
		<link>http://feedproxy.google.com/~r/ismailari/~3/xVq8uXUHxDI/</link>
		<comments>http://ismailari.com/blog/gercek-zamanli-yuz-nirengi-noktasi-takibi/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 12:54:52 +0000</pubDate>
		<dc:creator>İsmail Arı</dc:creator>
				<category><![CDATA[Genel]]></category>

		<guid isPermaLink="false">http://ismailari.com/?p=1905</guid>
		<description><![CDATA[eNTERFACE&#8217;10&#8216;da &#8220;Vision-based Hand Puppet&#8221; isimli bir proje yürütüyoruz. Projedeki amaç kameradan el ve yüz jestlerini algılayıp sanal bir kuklayı oynatmak. Kısmen sanal gerçeklik de denebilir. Ben yüz ifadelerini algılama kısmıyla ilgileniyorum. Daha önceden yüz jestlerini algılama konusunda çalışmıştım. İlgili çalışmadaki jestler daha çok işaret dilleri özelindeydi, &#8220;hayır&#8221; anlamında kafayı sağa sola sallamak gibi global kafa [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://enterface10.science.uva.nl/">eNTERFACE&#8217;10</a>&#8216;da &#8220;<a href="http://enterface10.science.uva.nl/projectsTeams.php">Vision-based Hand Puppet</a>&#8221; isimli bir proje yürütüyoruz. Projedeki amaç kameradan el ve yüz jestlerini algılayıp sanal bir kuklayı oynatmak. Kısmen sanal gerçeklik de denebilir. Ben yüz ifadelerini algılama kısmıyla ilgileniyorum. Daha önceden yüz jestlerini algılama konusunda <a href="/blog/yuz-ozniteliklerinin-takibi-ve-isaret-dili-icin-ifade-tanima/">çalışmıştım</a>. İlgili çalışmadaki jestler daha çok işaret dilleri özelindeydi, &#8220;hayır&#8221; anlamında kafayı sağa sola sallamak gibi global kafa hareketlerini de içeriyordu. Şimdi ise yüz ifadesi (gülme, üzülme, şaşkınlık, korku, iğrenme, kızma) tanıma hedefindeyiz. Global kafa hareketlerinin olmadığı (ya da dönmenin olmadığı) bir kurulum üstünde çalışıyoruz. İlk aşama olarak belli noktaları gerçek-zamanlı olarak takip edebilmek geliyor. Takip edilen noktalara dayanarak öznitelikler çıkarıp ifade tanımak da ikinci aşama olacak. İlk aşamaya ait örnek bir görüntü kaydettim. Web kamerasından 640&#215;480&#8242;lik çözünürlükte bir çerçeveyi 80 ms gibi bir sürede işleyebiliyor.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=13701598&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="600" height="400" src="http://vimeo.com/moogaloop.swf?clip_id=13701598&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><a href="http://vimeo.com/13701598">Yüz Nirengi Noktası Takibi</a>, <a href="http://vimeo.com">Vimeo</a>.</p>
<img src="http://feeds.feedburner.com/~r/ismailari/~4/xVq8uXUHxDI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ismailari.com/blog/gercek-zamanli-yuz-nirengi-noktasi-takibi/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://ismailari.com/blog/gercek-zamanli-yuz-nirengi-noktasi-takibi/</feedburner:origLink></item>
		<item>
		<title>Dinamik programlamaya giriş</title>
		<link>http://feedproxy.google.com/~r/ismailari/~3/eWxLYVrckXg/</link>
		<comments>http://ismailari.com/blog/dinamik-programlamaya-giris/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 18:11:29 +0000</pubDate>
		<dc:creator>İsmail Arı</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Çeviri]]></category>
		<category><![CDATA[dinamik programlama]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://ismailari.com/?p=1809</guid>
		<description><![CDATA[Alttaki yazı Jesse Farmer&#8217;ın &#8220;Introduction to Dynamic Programming&#8221; adlı yazısının çevirisidir. Burada, yazarın izniyle yayınlanmaktadır. Dinamik programlama, örtüşen altproblemler (overlapping subproblems) ve eniyi altyapı (optimal substructure) özelliklerini gösteren geniş bir yelpazedeki arama ve eniyileme (optimizasyon) problemlerini verimli bir biçimde çözmek için kullanılan bir yöntemdir. Size bazı basit örnekler aracılığıyla bu özellikleri göstermeye çalışacağım ve bir [...]]]></description>
			<content:encoded><![CDATA[<p><em>Alttaki yazı Jesse Farmer&#8217;ın &#8220;<a href="http://20bits.com/articles/introduction-to-dynamic-programming/">Introduction to Dynamic Programming</a>&#8221; adlı yazısının çevirisidir. Burada, yazarın izniyle yayınlanmaktadır.</em></p>
<p>Dinamik programlama, örtüşen altproblemler (<a href="http://en.wikipedia.org/wiki/Overlapping_subproblem">overlapping subproblems</a>) ve eniyi altyapı (<a href="http://en.wikipedia.org/wiki/Optimal_substructure">optimal substructure</a>) özelliklerini gösteren geniş bir yelpazedeki arama ve eniyileme (optimizasyon) problemlerini verimli bir biçimde çözmek için kullanılan bir yöntemdir. Size bazı basit örnekler aracılığıyla bu özellikleri göstermeye çalışacağım ve bir alıştırma ile bitireceğim. Mutlu kodlamalar!</p>
<p><strong>Örtüşen altproblemler</strong></p>
<p>Tekrar tekrar kullanılan altproblemlere bölünebilen bir problem için, örtüşen altproblemlere sahiptir denir. Özyineleme (recursion) ile yakından ilişkilidir. Farkı görmek için (Python ile) şu şekilde tanımlanan <a href="http://mathworld.wolfram.com/Factorial.html">faktöryel</a> fonksiyonunu düşünün:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> factorial<span style="color: black;">&#40;</span>n<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> n == <span style="color: #ff4500;">0</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">1</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> n<span style="color: #66cc66;">*</span>factorial<span style="color: black;">&#40;</span>n-<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Görüldüğü gibi <tt>factorial(n)</tt> probleminin hesabı <tt>factorial(n-1)</tt> altprobleminin hesabına bağımlıdır. Bu problem <em>örtüşen altproblemler</em> özelliğini <strong>göstermez </strong>çünkü <tt>factorial</tt>, <tt>n</tt>&#8216;den daha küçük her pozitif tamsayı için bir kez çağrılır.</p>
<p><span id="more-1809"></span><br />
<strong>Fibonacci Sayıları</strong></p>
<p>Öte yandan, n. <a href="http://en.wikipedia.org/wiki/Fibonacci_number">Fibonacci sayısı</a>nın hesaplanması örtüşen altproblemler özelliğini gösterir. Saf (naive) özyinelemeli kodlama şöyle olacaktır</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> fib<span style="color: black;">&#40;</span>n<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> n == <span style="color: #ff4500;">0</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> n == <span style="color: #ff4500;">1</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">1</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> fib<span style="color: black;">&#40;</span>n-<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span> + fib<span style="color: black;">&#40;</span>n-<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span></pre></div></div>

<p><tt>fib(n)</tt>&#8216;in hesaplanması problemi hem <tt>fib(n-1)</tt>&#8216;e hem de <tt>fib(n-2)</tt>&#8216;ye bağımlıdır. Bu altproblemlerin nasıl örtüştüğünü görmek için <tt>fib(5)</tt>&#8216;i hesaplamaya çalışırken <tt>fib</tt>&#8216;in kaç kez ve hangi argümanlarla çağrıldığına bir bakın:</p>

<div class="wp_syntax"><div class="code"><pre class="txt" style="font-family:monospace;">fib(5)
fib(4) + fib(3)
fib(3) + fib(2) + fib(2) + fib(1)
fib(2) + fib(1) + fib(1) + fib(0) + fib(1) + fib(0) + fib(1)
fib(1) + fib(0) + fib(1) + fib(1) + fib(0) + fib(1) + fib(0) + fib(1)</pre></div></div>

<p>k. aşamada, yalnızca <tt>fib(k-1)</tt> ve  <tt>fib(k-2)</tt>&#8216;nin değerlerine ihtiyaç duyarız, fakat, her birini birçok kez çağırmışızdır. Kuru kalabalığı azaltmak için sondan başlayıp yukarı çıkarak bir sonraki aşamada gerekli sayıları hesaplayabiliriz.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> fib2<span style="color: black;">&#40;</span>n<span style="color: black;">&#41;</span>:
    n2, n1 = <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">1</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>n<span style="color: black;">&#41;</span>:
        n2, n1 = n1, n1 + n2
    <span style="color: #ff7700;font-weight:bold;">return</span> n2</pre></div></div>

<p><tt>fib</tt> fonksiyonu <a href="http://en.wikipedia.org/wiki/Big_O_notation">Büyük-O</a> gösteriminde O(c<sup>n</sup>) zaman alırken (yani n&#8217;ye göre üssel iken) <tt>fib2</tt> fonksiyonu O(n) zaman alır. Eğer bu çok soyut geldiyse, <tt>fib</tt> ve <tt>fib2</tt>&#8216;ye karşılık girdi parametresinin gösterildiği çalışma zamanlarını (milisaniye cinsinden) karşılaştıran alttaki grafiğe bir göz atın.</p>
<p><a href="http://ismailari.com/wp-content/uploads/2010/06/fib_performance.png"><img class="aligncenter size-medium wp-image-1814" title="fib_performance" src="http://ismailari.com/wp-content/uploads/2010/06/fib_performance-300x225.png" alt="" width="300" height="225" /></a></p>
<p>Üstteki problem nispeten kolay ve çoğu programcı için özyineleme ve yineleme (iteration) karşılaştırmasında yapılan ilk alıştırma örneklerinden biri. Birçok kez Finonacci örneğinin, insanları, özyinelemenin doğası gereği yavaş olduğuna inandırdığını gördüm. Bu doğru değil. Bir problemi üstteki tekniği kullanarak, örtüşen altproblemler ile özyinelemeli tanımlayabildiğimiz durumlarda çalışma zamanı her durumda azalır.</p>
<p>Şimdi de, dinamik programlamanın ikinci özelliğine bakalım: eniyi altyapı.</p>
<h3 id="toc-eniyi-altyapi">Eniyi altyapı</h3>
<p>Global çözüm altproblemlerdeki yerel eniyi çözümlerden inşa edilebiliyorsa, böyle bir problem için eniyi altyapıya sahiptir denir. Eniyi altyapının rol aldığı genel problem yapıları şuna benzerdir: Diyelim ki A&#8217;yı çağıran bir takım nesneler var. A&#8217;daki her n nesnesinin bir &#8220;masraf&#8221;ı var, m(n). Sizden istenilen (belki de bazı kısıtlamaları göz önünde bulundurarak)  A&#8217;nın maksimum (ya da minimum) masraflı altkümesini bulmak.</p>
<p>Kaba-kuvvet yöntemi (brute-force method), A&#8217;nın her altkümesini oluşturmak, masrafını hesaplamak, sonra da bunların maksimumunu (ya da minimumunu) bulmak olacaktır. Fakat A&#8217;nın n elemana sahip olduğunu ve A üstünde kısıt olmadığı durumda, arama uzayımızın 2<sup>n</sup> boyutunda olacağını unutmayın. Çoğunlukla n değeri, kaba kuvvet yönteminin hesaplamaya elverişli olmayacağı çok büyük bir değerdir. Bir örnekte irdeleyelim.</p>
<h4 id="toc-maksimum-altdizi-toplami-maximum-subarray-sum">Maksimum Altdizi Toplamı (Maximum Subarray Sum)</h4>
<p>Diyelim ki bir tamsayı dizisi verilmiş olsun. Hangi (bitişik) altdizi en yüksek toplamı verir? Örneğin, dizimiz [1,2,-5,4,7,-2] ise en yüksek toplama sahip altdizi toplamı 11 eden [4,7]&#8216;dir. İlk bakışta bu problemin, toplamı maksimuma çıkaracak (eğer varsa) tamamı pozitif tamsayılardan oluşan altdiziyi bulma problemine indirgendiği düşünülebilir. Fakat [1,5,-3,4,-2,1] dizisini bir düşünün. Toplamı 7 eden [1, 5, -3, 4] altdizisi en yüksek toplama sahiptir.</p>
<p>İlk önce kaba-kuvvet yaklaşımına bakalım. Problemdeki kısıtlar sebebiyle (bahsi geçen altdiziler bitişik elemanlardan oluşmalı) yalnızca  O(n<sup>2</sup>) altdiziye bakmalıyız (neden?). İşte, Python&#8217;da yazılmış hali burda:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> msum<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">max</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: black;">&#40;</span><span style="color: #008000;">sum</span><span style="color: black;">&#40;</span>a<span style="color: black;">&#91;</span>j:i<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>, <span style="color: black;">&#40;</span>j,i<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #008000;">len</span><span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>+<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> j <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Bu fonksiyon hem toplamı, hem de altdizinin başlangıç/bitiş indekslerini döndürür. Şimdi eniyi altyapıyı bulup bulamayacağımıza bir bakalım.</p>
<p><tt>a</tt> girdisi verilmiş olsun.  Python gösterimini kullanacağım, o halde <tt>a[0:k]</tt> 0&#8242;dan başlayıp <tt>k-1</tt>&#8216;e kadarki tüm elemanları içeren altdizidir. <tt>a[0:i]</tt> için en yüksek toplamı veren altdiziyi ve bu toplamı bildiğinizi varsayalım. Sadece bu bilgiyi kullanarak <tt>a[0:i+1]</tt> için çözümü bulabilir miyiz?</p>
<p>Eniyi altdizi <tt>a[j:k+1]</tt>, en yüksek toplam <tt>s</tt> ve <tt>a[j:i]</tt>&#8216;nin toplamı da <tt>t</tt> olsun. Eğer <tt>t+a[i]</tt>, <tt>s</tt>&#8216;den büyükse <tt>a[j:i+1]</tt>&#8216;i eniyi altdizi olarak seç ve <tt>s</tt>&#8216;yi <tt>t</tt> olarak güncelle. Eğer <tt>t+a[i]</tt> negatifse, <tt>a[j:i+1]</tt>&#8216;i içinde bulunduran bir altdizinin bulundurmayana göre daha küçük toplama sahip olacağından dolayı bitişiklik kısıtı bize <tt>a[j:i+1]</tt>&#8216;in eniyi altdizide olmaması gerektiğini söyler. Öyleyse,  <tt>t+a[i]</tt> negatifse, <tt>t=0</tt> olarak ata ve eniyi altdizinin sol sınırını <tt>i+1</tt> olarak seç.</p>
<p>Gözünüzde canlandırmak için [1,2,-5,4,7,-2] dizisini düşünün.</p>

<div class="wp_syntax"><div class="code"><pre class="txt" style="font-family:monospace;">s = -sonsuz, t = 0, j = 0, sınırlar= (0,0)
(1   2  -5   4   7  -2
(1)| 2  -5   4   7  -2  (t=1.  t &gt; s olduğu için s=1 ve sınırlar = (0,1))
(1   2)|-5   4   7  -2  (t=3.  t &gt; s olduğu için s=3 ve sınırlar = (0,2))
 1   2  -5(| 4   7  -2  (t=-2. t &lt; 0 olduğu için t=0 ve j = 3 )
 1   2  -5  (4)| 7  -2  (t=4.  t &gt; s olduğu için s=4 ve sınırlar = (3,4))
 1   2  -5  (4   7)|-2  (t=11. t &gt; s olduğu için s=11 ve sınırlar = (3,5))
 1   2  -5  (4   7) -2| (t=9.  t &lt; s olduğu için değişiklik yok)</pre></div></div>

<p>Her aşamada 3 değişkenin değeri tutulur (sol sınırdan şu anki noktaya kadar olan toplam (<tt>t</tt>), en yüksek toplam (<tt>s</tt>) ve şu ana kadar bulunan eniyi altdizinin sınırları (<tt>bounds</tt>)) ve diziden bir kere geçiş yapılır. Python&#8217;da:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> msum2<span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>:
    bounds, s, t, j = <span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>, -<span style="color: #008000;">float</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'infinity'</span><span style="color: black;">&#41;</span>, <span style="color: #ff4500;">0</span>, <span style="color: #ff4500;">0</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
        t = t + a<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> t <span style="color: #66cc66;">&gt;</span> s: bounds, s = <span style="color: black;">&#40;</span>j, i+<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>, t
        <span style="color: #ff7700;font-weight:bold;">if</span> t <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">0</span>: t, j = <span style="color: #ff4500;">0</span>, i+<span style="color: #ff4500;">1</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#40;</span>s, bounds<span style="color: black;">&#41;</span></pre></div></div>

<p>Bu problemde &#8220;global eniyi&#8221; çözüm, global en yüksek toplama sahip altdizi ile ilişkilidir, her aşamada o ana kadar gördüklerimizi kullanarak karar veririz. Yani her aşamada, o ana kadarki en iyi sonucu biliriz fakat bir sonraki aşamaya geçmeden bu aşamada gördüklerimizle değerlendirip değiştirebiliriz. Problemin eniyi altyapı özelliğine sahip olması budur. Yerel olarak karar verdiğimiz için, listeyi bir kez taramamız yeterlidir. Böylelikle problemi O(n<sup>2</sup>) yerine  O(n) çalışma zamanında çözeriz. Yine bir grafik:</p>
<p><a href="http://ismailari.com/wp-content/uploads/2010/06/msum_performance.png"><img class="aligncenter size-medium wp-image-1818" title="msum_performance" src="http://ismailari.com/wp-content/uploads/2010/06/msum_performance-300x225.png" alt="" width="300" height="225" /></a></p>
<h4 id="toc-sirtcantasi-knapsack-problemi">Sırtçantası (Knapsack) Problemi</h4>
<p>Haydi şimdi de şu ana kadar öğrendiklerimizi biraz daha ilgi çekici bir probleme uygulayalım. Hırsızın dik âlâsısınız ve bir yolunu bulup Chicago Sanat Enstitüsü&#8217;nün izlenimci kanadına girdiniz. Malum, her şeyi alamazsınız. Şöyle bir kısıtınız var, yalnızca sırtçantanızın kaldırabileceği kadar şey alabilirsiniz. Diyelim ki çantanız <tt>W</tt> kg. taşıyabiliyor. Her bir parçanın piyasa fiyatını da biliyorsunuz. <tt>W</tt> kg. kısıtında en çok para kazandıracak şekilde hangi parçaları koyarsınız?</p>
<p>Şimdi bu problemin hem örtüşen altproblemler özelliğine hem de eniyi altyapı özelliğine nasıl sahip olduğuna bir bakalım. Diyelim ki <tt>w<sub>1</sub>,...,w<sub>n</sub></tt> ağırlıklarında <tt>n</tt> adet resim var ve değerleri <tt>v<sub>1</sub>,...,v<sub>n</sub></tt>. İlk <tt>i</tt> parçadan toplamları <tt>j</tt> kg.&#8217;ı geçmeyecek şekilde seçilenleri hesaba kattığımızda elde edilen maksimum değeri <tt>A(i,j)</tt> olarak tanımlayalım. </p>
<p>Her <tt>i≤n</tt> ve <tt>j≤W</tt> için <tt>A(0,j)=0</tt> ve <tt>A(i,0)=0</tt> olacağı barizdir. Eğer <tt>w<sub>i</sub>>j</tt> ise <tt>A(i,j)=A(i-1, j)</tt> çünkü <tt>i</tt>. elemanı ekleyemeyiz. Öte yandan, eğer <tt>w<sub>i</sub>≤j</tt> ise bir karar vermemiz lazım: yeni elemanı ekle ya da ekleme. Eğer eklemezsek, değer yine <tt>A(i-1, j)</tt> olacak. Fakat eğer eklersek yeni değer <tt>v<sub>i</sub>+A(i-1, j-w<sub>i</sub>)</tt> olacak. Hangini seçmeliyiz? Hmm, hangisi daha büyükse onu tabii ki.</p>
<p>Formal biçimde tanımlarsak, alttaki özyinelemeli fonksiyonu elde ederiz</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1819" style="border: 0px;" title="knapsack_fct" src="http://ismailari.com/wp-content/uploads/2010/06/knapsack_fct.png" alt="" width="491" height="71" /></p>
<p>Bu problem iki özelliği de gösterir, dolayısıyla dinamik programlama için iyi bir adaydır. Altproblemler örtüşür çünkü her <tt>(i,j)</tt> aşamasında birçok <tt>k < i</tt> and <tt>l < j</tt> değeri için <tt>A(k,l)</tt> hesabına gereksinim vardır. En iyi altyapı özelliğine sahibizdir çünkü her aşamada yalnızca o andaki eldeki bilgi yeterlidir.</p>
<p>Özyinelemeli çözümü kodlamak zor sayılmaz:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> A<span style="color: black;">&#40;</span>w, v, i, j<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> i == <span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">or</span> j == <span style="color: #ff4500;">0</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> w<span style="color: black;">&#91;</span>i-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">&gt;</span> j:  <span style="color: #ff7700;font-weight:bold;">return</span> A<span style="color: black;">&#40;</span>w, v, i-<span style="color: #ff4500;">1</span>, j<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">max</span><span style="color: black;">&#40;</span>A<span style="color: black;">&#40;</span>w, v, i-<span style="color: #ff4500;">1</span>, j<span style="color: black;">&#41;</span>, v<span style="color: black;">&#91;</span>i-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + A<span style="color: black;">&#40;</span>w, v, i-<span style="color: #ff4500;">1</span>, j-w<span style="color: black;">&#91;</span>i-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Unutmayın ki bize <tt>A(n,W)</tt>'nun hesabı lazım. Bunun için <tt>(i,j)</tt> hücresinde <tt>A(i,j)</tt> değerini bulunduran <tt>n x W</tt> boyutunda bir tabloya ihtiyaç duyacağız. <tt>A(i,j)</tt> değerini ilk hesaplayışımızda tablodaki yerine yazacağız. Bu tekniğe hatırlama (<a href="http://en.wikipedia.org/wiki/Memoization">memoization</a>) denir ve örtüşen altproblemleri işlemede kullanılır. Ruby'de <a href="http://raa.ruby-lang.org/project/memoize/">memoize</a> adında bu işi yapan bir modül bulunmaktadır.</p>
<p>Her aşamada <tt>A(i,j)</tt>'yi hesaplamak için özyineleme fomülünü uygulayarak tüm <tt>i≤n</tt> ve <tt>j≤W</tt> değerlerini gezeriz, fakat <tt>A()</tt>'yı tekrar tekrar hesaplamak yerine hatırlama tablomuzu kullanırız ve böylece eniyi altyapıyı gözönünde bulundururuz. Bu bize O(nW) zaman ve O(nW) hafıza kullanan bir çözüm üretir ve istediğimiz değer tablonun <tt>(n,W)</tt> hücresindedir.</p>
<h4 id="toc-her-gun-dinamik-programlama">Her Gün Dinamik Programlama</h4>
<p>Üstteki örnekler dinamik programlamanın dar bir problem yelpazesi için geliştirilmiş bir teknik gibi gözükmesine sebep olabilir. Fakat geniş bir yelpazeye sahip birçok algoritma  dinamik programlamayı kullanır. Size kısmi bir liste:</p>
<ol>
<li>Biyoenformatikte kullanılan <a href="http://en.wikipedia.org/wiki/Needleman-Wunsch_algorithm">Needleman-Wunsch algoritması</a>.</li>
<li>Formal diller teorisi ve doğal dil işlemede kullanılan <a href="http://en.wikipedia.org/wiki/CYK_algorithm">CYK algoritması</a>.</li>
<li>Saklı Markov modellerinde (<a href="http://en.wikipedia.org/wiki/Hidden_Markov_model">hidden Markov models</a>) kullanılan <a href="http://en.wikipedia.org/wiki/Viterbi_algorithm">Viterbi algoritması</a>.</li>
<li>Yazım yanlışı kontrolünde kelimeler arası uzaklık tanımı için kullanılan  <a href="http://en.wikipedia.org/wiki/Levenshtein_distance">Levenstein uzaklığı</a>.</li>
<li>Kriket (<a href="http://en.wikipedia.org/wiki/One-day_cricket">cricket</a>) sporunda kullanılan <a href="http://en.wikipedia.org/wiki/Duckworth-Lewis_method">D/L yöntemi</a>.</li>
</ol>
<p>Bugünlük bu kadar. Hoşça kalın!</p>
<img src="http://feeds.feedburner.com/~r/ismailari/~4/eWxLYVrckXg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ismailari.com/blog/dinamik-programlamaya-giris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ismailari.com/blog/dinamik-programlamaya-giris/</feedburner:origLink></item>
		<item>
		<title>Bilimsel blog tutmaya başlamak</title>
		<link>http://feedproxy.google.com/~r/ismailari/~3/0Bk-i7WnXOg/</link>
		<comments>http://ismailari.com/blog/bilimsel-blog-tutmaya-baslamak/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 20:35:05 +0000</pubDate>
		<dc:creator>İsmail Arı</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[bilimsel yazılar]]></category>
		<category><![CDATA[günce tutma]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://ismailari.com/?p=1775</guid>
		<description><![CDATA[Blog, &#8216;weblog&#8217; bileşik kelimesinin kısaltmasıdır, yani internet güncesidir. İnternet üzerinden yayın yapmak için kullanılan belli bir yoldur (yöntemdir) demek yanlış olmaz. Adı üstünde, bir İnternet güncesinin genel ihtiyaçlarına tamamıyla destek verir, hatta eklentiler ile bundan daha fazlasına da olanak sağlar. Hemen hemen herkes bir şekilde Facebook kullandığı için Facebook özelliklerini aşağı yukarı biliyordur. O sebeple [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-1778" title="bloglamayi_seviyorum" src="http://ismailari.com/wp-content/uploads/2010/06/bloglamayi_seviyorum.png" alt="" width="125" height="121" /></p>
<p>Blog, &#8216;weblog&#8217; bileşik kelimesinin kısaltmasıdır, yani internet güncesidir. İnternet üzerinden yayın yapmak için kullanılan belli bir yoldur (yöntemdir) demek yanlış olmaz. Adı üstünde, bir İnternet güncesinin genel ihtiyaçlarına tamamıyla destek verir, hatta eklentiler ile bundan daha fazlasına da olanak sağlar.</p>
<p>Hemen hemen herkes bir şekilde Facebook kullandığı için Facebook özelliklerini aşağı yukarı biliyordur. O sebeple bir blogun temel özelliklerini herkesin anlayacağı Facebook örneğiyle anlatmak anlaşılır olacaktır umarım. Facebook, sizin arkadaş çevrenize yayın yaptığınız bir çeşit araçtır. Fotoğraflar, Notlar, Videolar, Duvar gibi bölümleri bulunur ve kullanıcı dostu bir arayüz ile etkileşimi kolaylaştırır. Programlama bilmenize gerek yoktur. Aynı şekilde bu konuda genel kültürünüz olmasına da pek gerek yoktur. Örneğin siz sayfa yükleme hızını pek dert etmeden büyük boyutlu bir fotoğraf eklersiniz, sizin yerinize fotoğrafın boyutu düşürülür ve sayfa yükleme hızı yavaşlamamış olur. Örneği burada bırakıp, asıl konuya döneyim. Bir blog temel olarak yazılardan (posts) ve sayfalardan (pages) oluşur. Yazılar, &#8220;Sevgili günlük!&#8221; diye başladığınız ve belli bir tarihe atfedilen içeriği oluştururken; sayfalar, tarihin pek önemli olmadığı, &#8220;hakkında&#8221;, &#8220;projeler&#8221;, &#8220;okurlardan&#8221; gibi bölümleri oluşturur. Örneğin bu okuduğunuz bir yazıdır, &#8220;<a href="/okurlardan/">okurlardan</a>&#8221; ise bir sayfadır. Bu iki temel bileşenin yanında yazılarınızı sınıflandırmak için kullanacabileceğiniz kategoriler ve etiketler bulunur. Yazılara veya sayfalara okurlarınız yorum girebilir, veya başka sitelerden link verebilir. Bunların tümünü görebilirsiniz. Blog kardeşliği yapmak, ya da bağlantılar menüsü oluşturmak için bağlantılar adlı bir bölüm de mevcuttur. Site içeriğine eklediğiniz tüm resim ve dosyalar, ortam kütüphanesinden ulaşılabilir. Hangi dosyanın hangi yazıda kullanıldığını görebilir, istemezseniz daha sonra oradan silebilirsiniz. Tüm bunlar aynı Facebook örneğinde bahsettiğim gibi kullanıcı dostu bir arayüz ile kolaylıkla yapılabilir. Örneğin önceden yazdığım bir yazıya bir de bu arabirimden bakalım:</p>
<p style="text-align: center;"><a href="http://ismailari.com/wp-content/uploads/2010/06/wp_yazar.png"><img class="size-medium wp-image-1805 aligncenter" title="wp_yazar" src="http://ismailari.com/wp-content/uploads/2010/06/wp_yazar-300x180.png" alt="" width="300" height="180" /></a></p>
<p>Gördüğünüz gibi, masaüstü bir kelime işlemcisi kadar anlaşılır bir arayüze sahip! Sol menüden istediğiniz bölüme geçip, değişiklikleri kolaylıkla yapabiliyorsunuz. Kalan özelliklerini siz de kurcalayarak keşfedebilirsiniz.</p>
<p><span id="more-1775"></span></p>
<h3 id="toc-fiziksel-altyapi">Fiziksel altyapı</h3>
<p>Eğer bloglanmak isterseniz, gelişkin bir altyapı sunan bir blog aracı kullanmak iyi olacaktır. Bu işi bedavaya getireyim derseniz WordPress.com veya Blogger.com hesabı alıp sitenizi orada kurmak iki farklı güzel alternatif olabilir. Size verecekleri siteadresim.blogspot.com gibi adres adlarını sevmezseniz ve bir alan adınız varsa (alan adı pek pahalı sayılmaz, 100 dolara 10 yıllık bir tane alabilirsiniz), bunu Blogger&#8217;da barındırabilirsiniz (hosting). Ben ismailari.com alanadını almıştım, sıkıntı anında koda tam müdahele edebilmek için ücretli bir <a href="http://www.webfaction.com?affiliate=ariismail" target="_self">barındırma hizmeti</a> de kiraladım. Blogger deneyimim oldu fakat kullandığım sisteme müdahale edebilmek, her ne kadar kodlama bilmeyi pek gerektirmese de kodda da istediğim değişiklikleri yapabilmek için WordPress kurdum. Burada ondan bahsedeceğim.</p>
<p>WordPress (WP) iki türlü. İsterseniz wordpress.com&#8217;dan hesabınıza açılan bir blog ile yayın yapabilir, isterseniz de WordPress blog motorunu indirip PHP ve MySQL desteği veren sisteminize kendiniz kurabilirsiniz. Benim kullandığım barındırma hizmetinde bunu da otomatize etmişler ve tek tıkla her şey kurulabiliyor ama bunu dert etmenize gerek yok, kurulumu masaüstü program kurmak kadar basit. Kurulum detayları için <a href="http://www.wordpress-tr.com/">WordPress Türkiye</a> sayfasına başvurabilirsiniz.</p>
<h3 id="toc-temalar">Temalar</h3>
<p>WordPress&#8217;i kurduktan sonra istediğiniz gibi giydirebilirsiniz. Hazırda gelen temayı beğenmezseniz yeni WP temaları indirip sitenizi öyle süsler, ya da kendiniz yeni bir tema yazabilirsiniz. Bilimsel bir blog için sade bir tema iyi olacaktır sanırım.</p>
<h3 id="toc-eklentiler">Eklentiler</h3>
<p>WP&#8217;nin en güzel yanı dünyanın birçok yerinden yüzlerce geliştiricinin yazmış olduğu eklentiler. Eklentiler sayesinde aklınıza gelebilecek çoğu özelliği sitenize katabilirsiniz. Benim şu anda kullandığım eklentiler özetle şöyle:</p>
<h4 id="toc-akismet">Akismet</h4>
<p>Yazılarınıza yapılan yorumların istenmeyen (spam) olup olmadıklarını kontrol eder.</p>
<h4 id="toc-all-in-one-seo-pack">All in One SEO Pack</h4>
<p>Search Engine Optimization (Arama Motoru Eniyilemesi) işine yarar.</p>
<h4 id="toc-fd-feedburner-plugin">FD Feedburner Plugin</h4>
<p>Sitenizin RSS ve ATOM servislerini Feedburner hesabınıza yönlendirir. Kısaca bunun ne demek olduğundan bahsedeyim. Malum, bir günce yazıyorsunuz ve tıpkı köşe yazarları gibi bir okur kitleniz olacak. Bir de okurlarınızı seviyorsunuz, yeni yazı yazmış mıyım diye sürekli siteme bakarak değerli zamanlarını harcamasınlar diye düşünüyorsunuz. O halde RSS nedir diye biraz bilgilenmekte yarar var. Feedburner&#8217;ın güzelliği ise okur sayınızı ve hangi yazıları okuduklarının raporlanmasını yapması ve (acı deneyimlerimle pek önermesem de) siteyi taşıdığınızda yine aynı Feedburner adresine taşıyarak okurlarınızı kaybetmemenizi sağlamasıdır.</p>
<h4 id="toc-google-xml-sitemap">Google XML Sitemap</h4>
<p>Sitenizin haritasını XML formatında oluşturup arama motorlarını bilgilendirir.</p>
<h4 id="toc-table-of-contents-generator">Table of Contents Generator</h4>
<p>Yazının içeriğinde kullandığınız Başlık 1, Başlık 2 gibi kısımlardan otomatik bir içindekiler tablosu oluşturur. Örneğin <a href="/blog/matlab-programlamaya-giris/">şu sayfadaki</a> tabloyu elle yazmadım, bu eklenti ile otomatik oluşturdum.</p>
<h4 id="toc-ultimate-google-analytics">Ultimate Google Analytics</h4>
<p>Google Analytics kullanıyorsanız Analytics kodunu elle yapıştırmak yerine bu eklentiyi kullanmak daha iyi olacaktır.</p>
<p><strong>WP-Syntax</strong></p>
<p>Kodları renklendirmeye yarar. Önceden yazmış olduğum <a href="/blog/kodlari-renklendirmek/">şu yazıya</a> bakabilirsiniz. Bu benim en sevdiğim eklentilerden biri. Zira güncesine kod ekleyip de bunu Times New Roman gibi fontlarla sunan yazarların kodlarını okumak tam bir işkence. Kod ekliyorsanız kodu önceden test edin ve girintilemeye (indentation) dikkat edin!</p>
<p><strong>Youngwhan&#8217;s Simple Latex</strong></p>
<p>Bilimsel bir blog tutacaksanız LaTeX&#8217;e ihtiyaç duymanız çok doğal. Bu eklenti ile yazılarınıza LaTeX kodu gömebilirsiniz. Örneğin</p>
<p style="text-align: center;"><img src="http://www.forkosh.dreamhost.com/mathtex.cgi?\sin A \cos B = \frac{1}{2}\left[ \sin(A-B)+\sin(A+B) \right]" align="absmiddle" border="0px" /></p>
<p>gibi bir formül elde etmek için</p>

<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;"><span style="color: #E02020; ">[</span><span style="color: #C08020; font-weight: normal;">math</span><span style="color: #E02020; ">]</span><span style="color: #800000; font-weight: normal;">\sin</span> A <span style="color: #800000; font-weight: normal;">\cos</span> B = <span style="color: #800000; font-weight: normal;">\frac</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;">1</span><span style="color: #E02020; ">}{</span><span style="color: #2020C0; font-weight: normal;">2</span><span style="color: #E02020; ">}</span><span style="color: #800000; font-weight: normal;">\left</span><span style="color: #E02020; ">[</span><span style="color: #C08020; font-weight: normal;"> <span style="color: #800000; font-weight: normal;">\sin</span>(A-B)+<span style="color: #800000; font-weight: normal;">\sin</span>(A+B) <span style="color: #800000; font-weight: normal;">\right</span></span><span style="color: #E02020; ">][</span><span style="color: #C08020; font-weight: normal;">/math</span><span style="color: #E02020; ">]</span></pre></div></div>

<p>yazmanız yeterli olacaktır.</p>
<h3 id="toc-baska-baska">Başka başka</h3>
<h4 id="toc-yazinin-eski-surumleri">Yazının eski sürümleri</h4>
<p>WordPress&#8217;in en güzel özelliklerinden biri yazılarınız için bir kütük tutması. Aynen Wiki gibi, yazınızda eski sürümlere dönebiliyorsunuz. Bir yazarlı  bir blog değil de birden fazla yazar ile çalışıyorsanız ve ortak yazılar yazıyorsanız diğerlerinin yaptığı değişiklikleri görmeniz için de güzel olacaktır.</p>
<h4 id="toc-turkce-dil-destegi-ve-temalar">Türkçe dil desteği ve temalar</h4>
<p>Üstteki arayüz resminden de anlaşılacağı üzere WP Türkiye ekibinin değerli katkıları ile WP&#8217;yi Türkçe kullanmak mümkün. Fakat kullandığınız tema TR desteği bulundurmayabilir. Çevirmek sizin elinizde. İndirdiğiniz temayı <a href="http://codex.wordpress.org/I18n_for_WordPress_Developers">şu adresteki</a> talimatları okuyarak çokdilli hale getirebilirsiniz. Eğer temada yazılı resimler varsa ve bu resimlerin kaynakları elinizde yoksa işiniz biraz zor olabilir, resim işleme kabiliyetinizi ortaya koymanın zamanı!</p>
<h4 id="toc-yorumlardan-haberdar-olma">Yorumlardan haberdar olma</h4>
<p>E-posta ile bilgilendirilme ayarlarını doğru yaparsanız bir yazınıza yorum girildiğinde otomatik olarak size bilgilendirme iletisi yollanır. İsteyen kullanıcıların yorum girdikleri yazılara müteakip yorumlardan haberdar olabilmesini de sağlayabilirsiniz.</p>
<h4 id="toc-yazar-arabirimi">Yazar arabirimi</h4>
<p>Eğer WP&#8217;nin hazır arabirimine İnternet tarayıcınız ile ulaşmak istemezseniz, yazı ekleme ve güncelleme gibi işleri yapabileceğiniz başka yollar da mevcut. Bunun için bir tarama yapmanız yeterli olacaktır. Örneğin <a href="http://www.emacswiki.org/emacs/WebloggerMode">Emacs kullanarak</a> bile yazı ekleyebilirsiniz fakat ben denediklerim arasında WP&#8217;nin kendi arayüzünden gayet memnun olduğumu söylemeliyim.</p>
<h4 id="toc-korsanlik">Korsanlık</h4>
<p>Koda dalıp biraz korsanlık yapmak isterseniz harika bir <a href="http://codex.wordpress.org/Main_Page">WP Codex</a> dokümantasyonu mevcut. Menüleri değiştirmek, biraz kendi zevkinizi ortaya koymak gibi işler çok kolay. WP&#8217;nin nasıl çalıştığını anladıkça &#8220;Code is Poetry&#8221; (Kod Şiirdir) anlayışına hak vermemek mümkün değil.</p>
<p><img class="alignright size-medium wp-image-1842" title="newton_by_blake" src="http://ismailari.com/wp-content/uploads/2010/06/newton_by_blake-300x215.jpg" alt="" width="300" height="215" />Yazıyı bitirmeden önce, bunca teknik bilginin yanında biraz da size motivasyon vereyim!  Web 2.0&#8242;la birlikte İnternet ile etkileşim biçiminin değiştiği günümüz dünyasında bir blog tutmak basit bir güncenin çok ötesine geçebilir. <a href="http://tr.wikipedia.org/wiki/Fields_madalyas%C4%B1">Fields madalyası</a> almış matematikçilerden dördünün aktif bloğu vardır, Michael Nielsen&#8217;in <a href="http://michaelnielsen.org/blog/doing-science-online/">ilgili yazısına</a> bakabilirsiniz. Örneğin Terence Tao&#8217;nun <a href="http://terrytao.wordpress.com/">What&#8217;s New</a> isimli bloğuna denk gelmediyseniz bir bakmanızı öneririm, özellikle araştırmacılar için tavsiyeleri okunmaya değer. Daniel Lemire&#8217;nin <a href="http://www.daniel-lemire.com/blog/">bloğu</a> uzun süredir takip ettiğim (abone olduğum) bir blog. Bunlar dışında <a href="http://apperceptual.wordpress.com/">Apperceptual</a>, <a href="http://blogs.mathworks.com/steve/">Steve on Image Processing</a> gibi kişisel blogları veya <a href="http://scienceblogs.com">Scienceblogs</a>, <a href="http://www.scientificblogging.com/">Scientificblogging</a>, <a href="http://evrimcaliskanlari.org/blog/">Evrim Çalışkanları</a> gibi bilimsel blog topluluklarını örnek göstermek mümkün. Türkçe bilimsel bloglar için Duygu&#8217;nun hazırladığı <a href="http://www.biyolokum.com/turkce-bilim-bloglari-ve-web-siteleri-listesi/">sayfaya</a> bakabilirsiniz. Tabii şunu söylemek faydalı olacaktır: Bu örneklerin tümü yayına ilk başladıklarında şu anki kadar yaygın değildi ve hem yazarının hem de okurlarının katkılarıyla zaman içinde geliştiler.</p>
<p>Blog yazılarınızın tüm sürümlerine yazar arabiriminden ulaşabileceğinizi söylemiştim. Ben de bu yazıyı bir oturuşta yazmadım, yavaş yavaş yazdım. Bazen sildiklerimi görmek için eski sürümlere baktım. Nihayet 34. sürümde ikna edici olgunluğa ulaştığını düşünüyor ve artık yayınlıyorum. Kuracağınız bilimsel bloglardan beni de haberdar etmeyi unutmayın. Yoksa size Times New Roman kullanarak hepsi aynı hizada yazılmış ve hatalarla dolu kod ile dalarım!..</p>
<img src="http://feeds.feedburner.com/~r/ismailari/~4/0Bk-i7WnXOg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ismailari.com/blog/bilimsel-blog-tutmaya-baslamak/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://ismailari.com/blog/bilimsel-blog-tutmaya-baslamak/</feedburner:origLink></item>
		<item>
		<title>Evdeki kütüphanenin önemi</title>
		<link>http://feedproxy.google.com/~r/ismailari/~3/SRs9gpbOuRE/</link>
		<comments>http://ismailari.com/blog/evdeki-kutuphanenin-onemi/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 21:19:48 +0000</pubDate>
		<dc:creator>İsmail Arı</dc:creator>
				<category><![CDATA[Eğitim]]></category>

		<guid isPermaLink="false">http://ismailari.com/?p=1765</guid>
		<description><![CDATA[Bilim ve Teknik Dergisi&#8217;nin son sayısında Ö. İkinci&#8217;nin sunduğu şu güzel habere bir kulak verelim: Eğitimciler yıllardır çocukların eğitim seviyesinin derecesini belirleyen en önemli etkenin yüksek eğitim almış ebeveynler olduğunu düşündüler. Eğitimciler yıllardır çocukların eğitim seviyesinin derecesini belirleyenen önemli etkenin yüksek eğitim almış ebeveynler olduğunu düşündüler. Fakat Nevada Üniversitesi, Los Angeles Kaliforniya Üniversitesi ve Ulusal Avustralya Üniversitesi’ndeki araştırmacılar tarafından yapılan bir çalışmada 500 kitaplık [...]]]></description>
			<content:encoded><![CDATA[<p>Bilim ve Teknik Dergisi&#8217;nin son sayısında Ö. İkinci&#8217;nin sunduğu şu güzel habere bir kulak verelim:</p>
<blockquote><p><img class="alignright size-medium wp-image-1767" title="kitaplar_ve_cocuk" src="http://ismailari.com/wp-content/uploads/2010/06/kitaplar_ve_cocuk-208x300.png" alt="" width="208" height="300" />Eğitimciler yıllardır çocukların eğitim seviyesinin derecesini belirleyen en önemli etkenin yüksek eğitim almış ebeveynler olduğunu düşündüler. Eğitimciler yıllardır çocukların eğitim seviyesinin derecesini belirleyenen önemli etkenin yüksek eğitim almış ebeveynler olduğunu düşündüler. Fakat Nevada Üniversitesi, Los Angeles Kaliforniya Üniversitesi ve Ulusal Avustralya Üniversitesi’ndeki araştırmacılar tarafından yapılan bir çalışmada 500 kitaplık bir kütüphaneye sahip bir evde yetişmenin çocukların eğitim düzeyine yaptığı etkinin 15-16 yıl üniversite eğitimi almış ebeveynlere sahip olmak kadar büyük olduğu gösterildi. Her iki etken de ortalama olarak eğitimde bir çocuğun 3 yıl daha ileride olmasını sağlıyor.</p>
<p>Nevada Üniversitesi’nden Doç. <a href="http://www.unr.edu/cla/soc/MariahEvans.html" target="_blank">Mariah Evans</a> özellikle daha az eğitimli ebeveyne sahip olan ve evlerinde kitap olmasından en çok yararlanabilecek çocukları bulmakla ilgilendi. Özellikle Nevada’nın kırsal topluluklarına maddi yönden ve eğitim açısından yardım etmenin yollarını aradı.</p>
<p>Evans çocukların başarılı olmasına yardımcı olmak için ne çeşit yatırımlar yapılmalı diye soruyor ve bu çalışmanın sonucunun evlerine kitap almanın çocukların başarılı olmalarına yardımcı olabilmek için en ucuz yol olduğunu gösterdiğini söylüyor.</p>
<p>Evans evde 20 tane olsa bile kitap bulundurmanın bir çocuğun daha yüksek eğitim seviyesine ulaşmasında önemli bir etkisi olduğunu ve daha fazla kitabın da daha fazla yarar sağlayacağını söylüyor.</p>
<p>Örneğin Çin’de 500 ya da daha fazla kitap bulunan evlerdeki çocuklar yaklaşık 6 yıl eğitimlerinde daha ilerideler. ABD’de bu etki yaklaşık 2 yıl. Çalışmada incelenen 27 ülkenin ise ortalama olarak 3 yıl daha avantajlı oldukları görüldü.</p>
<p>Araştırmacılar çocukların eğitimlerindeki başarılarında evlerinde kitap olmasının ebeveynlerinin eğitim düzeyinden, babalarının mesleğinden, ülkelerinin gayri milli hâsılasından ve politik sisteminden bile daha güçlü etkisi olduğunu düşünüyor.</p></blockquote>
<p>Araştırmanın sonuçları sadece çocukları değil, biz yetişkinleri de kapsasaydı keşke. Yani ben bizi de etkilediğini düşünmekteyim. En azından bende bir kütüphane romantizmi var kuşkusuz. Kimisi her gezisinde Mango&#8217;ya uğrar, Mavi&#8217;ye bakar; ben de Pandora&#8217;dan Mephisto&#8217;ya sıçrayangillerdenim.</p>
<p>Çocuklarınız, kardeşleriniz, kuzenleriniz ya da etrafınızda başka küçükler varsa bu sosyal deneyin pratik araştırmacısı olmak ayrıcalığına varmanız ümidiyle!</p>
<img src="http://feeds.feedburner.com/~r/ismailari/~4/SRs9gpbOuRE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ismailari.com/blog/evdeki-kutuphanenin-onemi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ismailari.com/blog/evdeki-kutuphanenin-onemi/</feedburner:origLink></item>
	</channel>
</rss>
