<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>http://www.chimpfeedr.com</id>
  <title><![CDATA[mtteam]]></title>
  <updated>2012-02-20T12:45:00+00:00</updated>
  <link rel="self" href="http://www.chimpfeedr.com"/>
  <generator>http://www.chimpfeedr.com</generator>
  <entry>
    <id>http://yazilim.soysal.biz/?p=282</id>
    <title><![CDATA[OOP için Temel Terimler]]></title>
    <updated>2012-02-17T07:22:50+00:00</updated>
    <link rel="alternate" href="http://yazilim.soysal.biz/oop-icin-temel-terimler/"/>
    <summary><![CDATA[Öğrenim hayatım boyunca birşeyleri maddelemekten nefret etmişimdir. Özellikle Preveze Deniz Zaferi&#8217;nin 3 nedeni 4 sonucu vardır gibi tarihi konuları maddelemek beni sinir etmiştir. Gerçi burada yapacağımız tam olarak maddeleme değil, bir çeşit toparlama olacak.  Toparlayalım. OOP programlamanın bazı temel terimleri vardır. Mutlaka kullanılır. Olmazsa olmazlar. Bu makalede kısaca tanıtacağım. Belki ilerde detayına girebiliriz, girersek iyi [...]]]></summary>
    <content type="html"><![CDATA[<div class="mceTemp">
<dl id="attachment_291" class="wp-caption alignleft" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://yazilim.soysal.biz/wp-content/uploads/2012/02/fatih-terim.jpg"><img class="size-medium wp-image-291" title="fatih-terim" src="http://yazilim.soysal.biz/wp-content/uploads/2012/02/fatih-terim-300x206.jpg" alt="fatih-terim" width="300" height="206" /></a></dt>
</dl>
</div>
<p>Öğrenim hayatım boyunca birşeyleri maddelemekten nefret etmişimdir. Özellikle Preveze Deniz Zaferi&#8217;nin 3 nedeni 4 sonucu vardır gibi tarihi konuları maddelemek beni sinir etmiştir.</p>
<p>Gerçi burada yapacağımız tam olarak maddeleme değil, bir çeşit toparlama olacak.  Toparlayalım.</p>
<p>OOP programlamanın bazı temel terimleri vardır. Mutlaka kullanılır. Olmazsa olmazlar. Bu makalede kısaca tanıtacağım. Belki ilerde detayına girebiliriz, girersek iyi ederiz.</p>
<p><strong>Class :</strong> Türkçe çevirisi sınıf demektir. &#8220;Çog gılas olmuşsun hacı&#8221; cümlesindeki kullanımıyla alakası yoktur. Aynı amaca hizmet eden ve genelde birbirine bağımlı methodların ( basit anlamda fonksiyon) ve property&#8217;lerin (öznitelikler) bir arada bulunduğu kod yığınıdır. Bir class için bir dosya oluşturulması yaygın kullanılan bir standarttır. (Örneğin : class.uyelik.php)</p>
<p><strong>Objects :</strong> Objeler classların çalışan versiyonları olarak tanımlanabilir. Yazılımın çalışması için gereken bütün datayı ve durum bilgilerini barındır. OOP&#8217;nin O&#8217;sudur.</p>
<p><strong>Inheritance :</strong> Kelimenin türkçe çevirisi mirastır. Bildiğimiz mirastan tek farkı miras verenin halen kendi malını kullanıyor olabilmesidir.  Bir sınıf başka bir sınıfın tüm özelliklerini ve methodlarını alır ve bunun adı inheritance olur.</p>
<p><strong>Polymorphism : </strong>Türkçeye &#8220;çok biçimlilik&#8221; diye çeviririz. Inheritance mantığı ile ilintilidir. Hiyararşik class&#8217;lar için kullanılır. Anlamak için örneklendirilmesi makuldur.</p>
<p><strong>Interfaces :</strong> Bildiğimiz arayüz demektir. OOP programlama yaparken class&#8217;larımızı bir kalıba temellendirir. Çok programcı ile yazılım geliştirmede hızı artırır, hatayı azaltır. Sınıfların özetlendiği  kod birikintileridir.</p>
<p><strong>Abstract class:</strong> Yine çevirisi ile bütünlük kazanan bir terimdir.  Bildiğimiz özettir. Interfaces&#8217;den farkı bir sınıfın birden fazla abstract sınıfı olamayışıdır. Ayrıca methodların parametreleri de abstract class içinde tanımlanabilir.</p>
<p><strong>Encapsulation :</strong> Kapsüllemek diye çevrilebilir. Bir objenin bazı özelliklerini saklamak için kullanılır.</p>
<p>En genel terimler böyle özetlenebilir. Bu makaleden bir sonuç beklemiyordum başlarken netekim öylede oldu <img src='http://yazilim.soysal.biz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Bu maddeleri detaylandıran yazılar yazarsam anlamlı olacak anlaşılan.</p>
<p>Yazı bitti daha burdasın. <img src='http://yazilim.soysal.biz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content>
  </entry>
  <entry>
    <id>http://blog.mustafakirimli.com/?p=1581</id>
    <title><![CDATA[PHP ile WS-Security SOAP Servislerine Bağlanmak]]></title>
    <updated>2012-01-16T06:00:23+00:00</updated>
    <link rel="alternate" href="http://blog.mustafakirimli.com/php-ile-ws-security-soap-servislerine-baglanmak/1581"/>
    <summary><![CDATA[Merhaba arkadaşlar, bu yazımızda WS-Security]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar, bu yazımızda WS-Security konusunu ele alacak ve PHP ile  <strong>WS-Security kullanan SOAP web servislerine</strong> nasıl bağlanabileceğimizi inceleyeceğiz.</p><p><span id="more-1581"></span>PHP halihazırda <strong>WS-Security tabanlı web servisi oluşturmayı</strong> desteklemesede WS-Security tabanlı servislere bağlanmak mümkün. WS-Security tabanlı bir web servisine bağlanmak için PHP &#8216;nin yerleşik olan <strong>SoapClient</strong> sınıfını kullanmak yeterli.</p><h3 class="clear">WS-Security (WSS) Nedir ?</h3><p>WS-Security, <a href="http://en.wikipedia.org/wiki/OASIS_(organization)">OASIS (Organization for the Advancement of Structured Information Standards)</a> tarafından geliştirilmiş ve web servislerine güvenlik özellikleri ekleyen bir standarttır. Her ne kadar performans kaybı yaşatıyor olsada kullanmak zorunda olduğunuzda bu kodlar işinize yarayabilir.</p><h3>PHP ile WS-Security (WSS) SOAP Servisine Nasıl Bağlanılır ?</h3><pre class="brush:php">&lt;?php

// wsdl cache 'ini devre disi birak
ini_set("soap.wsdl_cache_enabled", "0");

try {

  // SOAP parametreleri
  $soapOptions = array('login' =&gt; "username",
                        'password'     =&gt; "password",
                        'soap_version' =&gt; SOAP_1_2
                        );
// SOAPClient nesnesi olustur
$client = new SoapClient("adress", $soapOptions);

} catch (Exception $exc) { // Hata olusursa yakala
  echo "Soap Hatasi Olustu: " . $exc-&gt;getMessage();
}
?&gt;</pre><p>Yukarıda bulunan &#8220;<strong>username</strong>&#8221; ve &#8220;<strong>password</strong>&#8221; alanlarıda ws-security tabanlı web servisine login olurken kullanacağınız kullanıcı adı ve şifresini yazmanız gerekiyor. Sonrasında diğer metodları <a title="PHP İle SOAP Server ‘a Bağlanmak (SOAP Client)" href="http://blog.mustafakirimli.com/php-ile-soap-server-a-baglanmak-soap-client/469">PHP ile Web Servislerine Bağlanmak</a> yazısında olduğu gibi çağırabilirsiniz.</p><h3>Sonuç:</h3><p>Yazımızın sonunda lazım olduğunda günlerce araştırıp bulduğumuz bu küçük bilgilerin işinize yarayacağını temenni ediyoruz.</p><h3>Kaynaklar:</h3><p><a href="http://en.wikipedia.org/wiki/WS-Security">WS-Security &#8211; Wiki</a><br /> <a href="http://www.cs.ucsb.edu/~bultan/courses/595-W06/WS-Security.ppt">WS-Security (.ppt) &#8211; UCSB</a><br /> <a href="http://docs.oasis-open.org/wss/v1.1/wss-v1.1-spec-os-SOAPMessageSecurity.pdf">WS-Security 1.1 Spec (.pdf) &#8211; OASIS</a><br /> <a href="http://msdn.microsoft.com/en-us/library/ms977327.aspx">Understanding WS-Security &#8211; MSDN</a><br /> <a href="http://blog.searyblog.com/blog/_archives/2008/9/3/3867340.html">Why use WS-Security &#8211; Chris Seary&#8217;s blog</a></p> ]]></content>
  </entry>
  <entry>
    <id>http://www.jsdefteri.com/?p=137</id>
    <title><![CDATA[FireFox’da Açılır Listelerin onChange Olayı Sorunu]]></title>
    <updated>2012-01-10T19:44:56+00:00</updated>
    <link rel="alternate" href="http://www.jsdefteri.com/makaleler/jquery/firefoxda-acilir-listelerin-onchange-olayi-sorunu/"/>
    <summary><![CDATA[Merhaba Arkadaşlar, Bugün sizlerle çok bilindik baş ağırıtan bir sorunun jQuery ile nasıl kolayca çözüldüğünü inceleyeceğiz. Problemimiz Firefox ve select list nesnesinin onChange olayı… Malumunuz select list objesinin onchange event i internet Explorer ve diğer tarayıcılarda listedeki seçili eleman değiştiği anda çalışırken, firefox tarayıcısında seçili eleman değişip objenin fokusu kalktığında çalışmaktadır. Aşağıdaki jQuery kod bloğunu [...]]]></summary>
    <content type="html"><![CDATA[<p>Merhaba Arkadaşlar,<br />
   Bugün sizlerle çok bilindik baş ağırıtan bir sorunun jQuery ile nasıl kolayca çözüldüğünü inceleyeceğiz. Problemimiz Firefox ve select list nesnesinin onChange olayı… Malumunuz select list objesinin onchange event i internet Explorer ve diğer tarayıcılarda listedeki seçili eleman değiştiği anda çalışırken, firefox tarayıcısında seçili eleman değişip objenin fokusu kalktığında çalışmaktadır.<span id="more-137"></span><br />
   Aşağıdaki jQuery kod bloğunu sayfanıza dahil ederek bu sorunu kolaylıkla ortadan kaldırabilirsiniz.</p>
<pre class="brush:js">
$(document).ready(function(){
  $("option").change(function(event){
  $(this).parent().blur();
  });
});
</pre>
<p>Aşağıdaki kodu kullanarak test yapabilirsiniz.</p>
<pre class="brush:js">
&lt;script language=&quot;javascript&quot;&gt;
  $(document).ready(function(){
    $(&quot;option&quot;).change(function(event){
    $(this).parent().blur();
    });  

    $(&quot;#mySelect&quot;).change(function(){
      alert($(this).val());
    });
  });
&lt;/script&gt;

&lt;select id=&quot;mySelect&quot;&gt;
  &lt;option&gt;A&lt;/option&gt;
  &lt;option&gt;B&lt;/option&gt;
&lt;/select&gt;
</pre>
<p>İbrahim Gündüz</p>
]]></content>
  </entry>
  <entry>
    <id>http://www.jsdefteri.com/?p=130</id>
    <title><![CDATA[Google Maps Örnek Uygulama -1]]></title>
    <updated>2012-01-10T07:18:13+00:00</updated>
    <link rel="alternate" href="http://www.jsdefteri.com/kod-bankasi/ornek-kodlar/google-maps-ornek-uygulama-1/"/>
    <summary><![CDATA[Merhaba Arkadaşlar, Aşağıda örnekde anlattığım konularla ilgili özelliklere sahip google maps uygulamasının örnek kodları yeralıyor. Bu uygulamayı http://www.jsdefteri.com/examples/google-maps/example1.tar.gz adresinden indirebilirsiniz. &#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#34;&#62; &#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;&#62; &#60;head&#62; &#60;script type=&#34;text/javascript&#34; src=&#34;http://maps.googleapis.com/maps/api/js?sensor=true&#34;&#62;&#60;/script&#62; &#60;meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=UTF-8&#34; /&#62; &#60;/head&#62; &#60;body&#62; &#60;input type=&#34;button&#34; id=&#34;addMarker&#34; value=&#34;Marker Ekle&#34; /&#62; &#60;input type=&#34;button&#34; id=&#34;changeZoomLevel&#34; value=&#34;Zoom seviyesini değiştir&#34; /&#62; &#60;input [...]]]></summary>
    <content type="html"><![CDATA[<p>Merhaba Arkadaşlar,<br />
Aşağıda örnekde anlattığım konularla ilgili özelliklere sahip google maps uygulamasının örnek kodları yeralıyor. Bu uygulamayı <a href="http://www.jsdefteri.com/examples/google-maps/example1.tar.gz">http://www.jsdefteri.com/examples/google-maps/example1.tar.gz</a> adresinden indirebilirsiniz.<br />
<span id="more-130"></span></p>
<pre class="brush:html, brush:js">

&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
  &lt;head&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;http://maps.googleapis.com/maps/api/js?sensor=true&quot;&gt;&lt;/script&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;input type=&quot;button&quot; id=&quot;addMarker&quot; value=&quot;Marker Ekle&quot; /&gt;
    &lt;input type=&quot;button&quot; id=&quot;changeZoomLevel&quot; value=&quot;Zoom seviyesini değiştir&quot; /&gt;
    &lt;input type=&quot;button&quot; id=&quot;getZoomLevel&quot; value=&quot;Zoom seviyesini g&#246;ster&quot; /&gt;
    &lt;input type=&quot;button&quot; id=&quot;changePosition&quot; value=&quot;Konum değiştir&quot; /&gt;
    &lt;input type=&quot;button&quot; id=&quot;getPosition&quot; value=&quot;Mevcut konumu oku&quot; /&gt;
    &lt;input type=&quot;button&quot; id=&quot;addBaloon&quot; value=&quot;Haritaya balon ekle&quot; /&gt;

    &lt;div
      id=&quot;mapCanvas&quot;
      style=&quot;width:640px; height:480px; position:relative;&quot;&gt;&lt;/div&gt;

    &lt;script type=&quot;text/javascript&quot;&gt;
      //haritamizin baslangicda konumlanacagi noktayi tanimliyoruz
      var startPoint = new google.maps.LatLng(40, 30);

      //harita seceneklerimizi tanimliyoruz.
      var mapOptions = {
        zoom      : 7,
        center    : startPoint,
        mapTypeId : google.maps.MapTypeId.ROADMAP
      }

      //haritamizi yukleyip ekranda goruntuluyoruz.
      var mapCanvas = document.getElementById(&#39;mapCanvas&#39;);
      var map = new google.maps.Map( mapCanvas, mapOptions );

      //marker ekle butonun olayini tanimliyoruz.
      document.getElementById(&#39;addMarker&#39;).onclick = function()
      {
        var markerPoint = new google.maps.LatLng(40, 30);

        var marker = new google.maps.Marker({
          title : &#39;Yeni marker&#39;,
          position : markerPoint,
          map : map
        })
      }

      //butona basildiginda haritamizin zoom seviyesinin 5 olmasini sagliyoruz.
      document.getElementById(&#39;changeZoomLevel&#39;).onclick = function() {
        map.setZoom(5);
      }

      //mevcut yakinlasma seviyesini okuyoruz.
      document.getElementById(&#39;getZoomLevel&#39;).onclick = function() {
        alert( map.getZoom() );
      }

      //butona basildiginda haritamizin mevcut konumunun degistirilmesini sagliyoruz.
      document.getElementById(&#39;changePosition&#39;).onclick = function()
      {
        var newPoint = new google.maps.LatLng(41, 35);
        map.setCenter( newPoint );
      }

      //butona basildiginda haritanin mevcut konumunun uyari olarak goruntulenmesini sagliyoruz.
      document.getElementById(&#39;getPosition&#39;).onclick = function()
      {
        var point = map.getCenter();
        var msg = &#39;Lat:&#39; + point.lat() + &#39; Lng: &#39; + point.lng();
        alert(msg);
      }

      document.getElementById(&#39;addBaloon&#39;).onclick = function()
      {
        //uzerinde balon goruntulenecek marker i haritamiza ekliyoruz.
        var markerPoint = new google.maps.LatLng(40, 30);

        var marker = new google.maps.Marker({
          title : &#39;Yeni marker&#39;,
          position : markerPoint,
          map : map
        })

        //goruntuleyecegimiz balon objesini tanimliyoruz.
        var baloon = new google.maps.InfoWindow({
          content : &#39;&lt;strong&gt;Merhaba D&#252;nya &lt;/strong&gt;&#39;
        });

        //balonumuzu goruntuluyoruz.
        baloon.open( map, marker );

      }

    &lt;/script&gt;

  &lt;/body&gt;
&lt;/html&gt;
</pre>
]]></content>
  </entry>
  <entry>
    <id>http://blog.mustafakirimli.com/?p=1584</id>
    <title><![CDATA[Array Diff ile Array Elemanlarını Filtreleme]]></title>
    <updated>2012-01-09T06:00:29+00:00</updated>
    <link rel="alternate" href="http://blog.mustafakirimli.com/array-diff-ile-array-elemanlarini-filtreleme/1584"/>
    <summary><![CDATA[Merhaba arkadaşlar, bu yazımızda bir]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar, bu yazımızda bir array içerisinde istemediğimiz elemanları (boş olanlar vb) <strong>array_diff</strong> ile kolayca nasıl temizleyebileceğimizi (filtreleyebileceğimizi) inceleyeceğiz.</p><p><span id="more-1584"></span>Kullanacağımız yöntemle önce array elemanları üzerinde işlem yapacağız. Daha sonra array anahtarları üzerinde işlem yapmayı göreceğiz.</p><h3 class="clear">array_diff ile Boş Elemanları Temizleme:</h3><p><strong>$arr1</strong> arrayimizi boş bir array ile <strong>array_diff</strong> kullanarak karşılaştırıyoruz. array_diff bize boş değerli olmayan elemanların bulunduğu yeni bir array döndürüyor.</p><pre class="brush:php">&lt;?php

$arr1 = array("isim"    =&gt; "Ahmet",
              "soyisim" =&gt; "AY",
              "adres"   =&gt; "");

$newArr = array_diff($arr1, array(""));

print_r($newArr);
?&gt;</pre><p>Çıktısı :</p><pre class="brush:php">Array
(
    [isim] =&gt; Ahmet
    [soyisim] =&gt; AY
)</pre><h3>array_diff_key ile Boş Anahtarlı Arrayleri Temizleme:</h3><p>Yine<strong> $arr1</strong> arrayimizi anahtarıda boş bir array ile <strong>array_diff_key</strong> kullanarak karşılaştırıyoruz. array_diff_key bize anahtarı boş olmayan elemanların bulunduğu yeni bir array döndürüyor.</p><pre class="brush:php">&lt;?php

$arr1 = array("isim"    =&gt; "Ahmet",
              "soyisim" =&gt; "AY",
              "adres"   =&gt; "",
              ""        =&gt; "ekstra bilgi");

$newArr = array_diff_key($arr1, array("" =&gt; ""));

print_r($newArr);
?&gt;</pre><p>Çıktısı :</p><pre class="brush:php">Array
(
    [isim] =&gt; Ahmet
    [soyisim] =&gt; AY
    [adres] =&gt;
)</pre><h3>Sonuç:</h3><p>Sonuç olarak <strong>array_diff</strong> kullanarak birçok işlevi yerine getirebiliriz. <strong>array_diff</strong> &#8216;in değerler üzerinde, <strong>array_diff_key</strong> &#8216;in ise anahtarlar üzerinde işlem yaptığını unutmayalım.</p><p>Herkese İyi Çalışmalar</p> ]]></content>
  </entry>
  <entry>
    <id>http://blog.mustafakirimli.com/?p=1574</id>
    <title><![CDATA[Array Elemanlarını Başka bir Array İçerisinde Aramak]]></title>
    <updated>2011-12-31T13:00:27+00:00</updated>
    <link rel="alternate" href="http://blog.mustafakirimli.com/array-elemanlarini-baska-bir-array-icerisinde-aramak/1574"/>
    <summary><![CDATA[Merhaba arkadaşlar, bu yazımızda bir]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar, bu yazımızda bir array  (dizi) &#8216;i diğer bir array içerisinde aramak için pratik bir yöntem olan <strong>array_diff</strong> ve <strong>array_intersect</strong> &#8216;i inceleceğiz.<br /> <span id="more-1574"></span><br /> Kullanacağımız yöntemle bir array elemanlarının diğer bir array içerisinde geçip geçmediğini kontrol edeceğiz. Diğer bir deyişle arraylerin kesişimini kontrol edeceğiz.</p><h3>array_diff Kullanımı:</h3><p>array_diff kullanarak iki dizinin farkını alıyoruz. Eğer sonuç kümesi ilk dizimize eşit değilse ortak eleman var demektir.</p><pre class="brush:php">&lt;?php

$arr1 = array("10", "20", "30", "40");
$arr2 = array("15", "25", "30", "35", "45");

if( array_diff($arr1, $arr2) != $arr1){
  echo "\$arr1 dizisi içerisinde bulunan değerlerin bazıları "
      ."\$arr2  dizisinde de bulunuyor&lt;br/&gt;\n";
}else{
  echo "İki dizinin ortak elemanı yok!&lt;br/&gt;\n";
}

?&gt;</pre><h3>array_intersect Kullanımı:</h3><p>array_intersect kullanarak iki dizinin ortak elemanlarını kontrol ediyoruz. Eğer ortak eleman sayısı 0 dan büyükse ortak eleman var demektir.</p><pre class="brush:php">&lt;?php

$arr1 = array("10", "20", "30", "40");
$arr2 = array("15", "25", "30", "35", "45");

if( count(array_intersect($arr1, $arr2)) &gt; 0 ){
  echo "\$arr1 dizisi içerisinde bulunan değerlerin bazıları "
      ."\$arr2  dizisinde de bulunuyor&lt;br/&gt;\n";
}else{
  echo "İki dizinin ortak elemanı yok!&lt;br/&gt;\n";
}
?&gt;</pre><h3>Sonuç:</h3><p>Sonuç olarak <strong>array_diff</strong> ve <strong>array_intersect</strong> kullanarak birçok ihtiyacımıza çözüm üretebiliriz. Uzun yazıların okunmaması hasebiyle bu yazımıza olabildiğince az yorum katarak burada sonlandırmak istiyoruz.</p><p>Yeni yılda istemediğiniz hiçbir şeyle ortak elemanınız olmaması temennisiyle, <strong>Mutlu Yıllar!</strong></p> ]]></content>
  </entry>
  <entry>
    <id>http://www.nurettintopal.com/?p=244</id>
    <title><![CDATA[Veri Tabanı Tablo Büyümelerini Takip Edin]]></title>
    <updated>2011-10-12T09:32:09+00:00</updated>
    <link rel="alternate" href="http://www.nurettintopal.com/veri-tabani-tablo-buyumelerini-takip-edin/"/>
    <summary><![CDATA[Veri tabanını yoğun bir şekilde kullanıyorsanız ve elinizde de kısıtlı miktarda veritabanı disk alanınız varsa başınıza gelebilecek sorunlardan bir tanesi tablo boyutlarının büyümesi, bazen de beklenmedik zamanlarda tahmininizin çok çok üstüne çıkabilmesidir. İlk problem zaman içerisinde başınıza gelebilecek bir olaydır ve zaman zaman kontrol ederek bu problemi önleyebilirsiniz. Ortalama günde X kayıt atılıyor, Y kadar [...]]]></summary>
    <content type="html"><![CDATA[Veri tabanını yoğun bir şekilde kullanıyorsanız ve elinizde de kısıtlı miktarda veritabanı disk alanınız varsa başınıza gelebilecek sorunlardan bir tanesi tablo boyutlarının büyümesi, bazen de beklenmedik zamanlarda tahmininizin çok çok üstüne çıkabilmesidir. İlk problem zaman içerisinde başınıza gelebilecek bir olaydır ve zaman zaman kontrol ederek bu problemi önleyebilirsiniz. Ortalama günde X kayıt atılıyor, Y kadar [...]]]></content>
  </entry>
  <entry>
    <id>http://www.jsdefteri.com/?p=115</id>
    <title><![CDATA[jQuery Each() Metodu Kullanımı]]></title>
    <updated>2011-10-07T20:29:01+00:00</updated>
    <link rel="alternate" href="http://www.jsdefteri.com/makaleler/jquery-each-metodu-kullanimi/"/>
    <summary><![CDATA[Herkese Merhaba, Bugün sizlerle jQuery kütüphanesinin yararlı metodlarından each() metodunu inceleyeceğiz. Each, adından da anlaşılacağı gibi secici veya parametre olarak gönderilen koleksiyonun her bir elemanı için bir callback fonksiyonu çalıştırır. Örneğin bir DOM objesinin çocukları veya bir dizinin elamanları için each() ile bir callback fonksiyonu çalıştırabilmeniz mümkündür. Dilerseniz hızlıca bir giriş yaparak each() metodunun kullanımını [...]]]></summary>
    <content type="html"><![CDATA[<p>Herkese Merhaba,<br />
Bugün sizlerle jQuery kütüphanesinin yararlı metodlarından each() metodunu inceleyeceğiz. Each, adından da anlaşılacağı gibi secici veya parametre olarak gönderilen koleksiyonun her bir elemanı için bir callback fonksiyonu çalıştırır.<br />
Örneğin bir DOM objesinin çocukları veya bir dizinin elamanları için each() ile bir callback fonksiyonu çalıştırabilmeniz mümkündür.<br />
<span id="more-115"></span><br />
Dilerseniz hızlıca bir giriş yaparak each() metodunun kullanımını inceleyelim.</p>
<p>Sözdizimi :</p>
<pre>
jQuery.each( koleksiyon, callback(diziIndeksi, elemanDegeri) )
</pre>
<pre>
jQuery(koleksiyon/secici).each( callback(diziIndeksi, elemanDegeri) )
</pre>
<p><strong>Koleksiyon :</strong> Parametreden gönderdiğiniz DOM objesinin çocukları veya dizinin her bir elemanı için callback fonksiyonu çalıştırılır.<br />
<strong>Callback :</strong> Bu parametreden göndereceğiniz fonksiyon, koleksiyon parametresinden gönderilen objenin her bir elemanı için çalışacaktır. </p>
<p>Aşağıdaki örneği birlikte inceleyelim :</p>
<pre class="brush:javascript">
var dizi = new Array(1, 3, 5);
var metin = “”;
$.each(dizi, function(anahtar, deger) {
  metin += ‘Indeks : ’ + anahtar + ‘, Değer : ‘ + deger + ‘\n’;
});
alert(metin);
</pre>
<p>Sonuç :</p>
<pre>
Indeks : 0 Değer : 1
Indeks : 1 Değer : 3
Indeks : 2 Değer : 5
</pre>
<p>Yukarıda gördüğünüz üzere each() metodu ‘dizi’ isimli dizinin herbir elemanı için callback fonksiyonu olarak gönderilen fonksiyonu çalıştırarak metin isimli degiskenin icine gecerli elemanın indeks nosunu ve değerini doldurdu. Aşağıdaki örneğimizde ise bir JSON objesinin elemanları için benzeri işlemi tekrarlıyoruz.</p>
<pre class="brush:javascript">
var dizi = {‘Adi’ : ‘Ali’, ‘Soyadi’ : ‘Metin’, ‘DogumTarihi’ : ‘1983’}
var metin = “”;
$.each(dizi, function(anahtar, deger) {
  metin += anahtar + ‘:’ + deger + ‘\n’;
});
alert(metin);
</pre>
<p>Sonuç :</p>
<pre>
Adi : Ali
Soyadi : Metin
DogumTarihi : 1983
</pre>
<p>Yine yukarıda gördüğünüz üzere dizi isimli JSON objemizin her bir elemanı için callback fonksiyonu olarak gönderdiğimiz fonksiyon çalışarak metin isimli değişkene geçerli elemanın anahtar ve değer bilgilerini doldurdu.</p>
<p>Aşağıdaki örneğimizde ise koleksiyon parametresi olarak bir JSON dizisi gönderiyoruz. </p>
<pre class="brush:javascript">
var dizi = [{‘Adi’ : ‘Ali’, ‘Soyadi’ : ‘Metin’, ‘DogumTarihi’ : ‘1983’},
{‘Adi’ : ‘Mehmet’, ‘Soyadi’ : ‘Ağaoğlu’, ‘DogumTarihi’ : ‘1985’},
{‘Adi’ : ‘Sinan’, ‘Soyadi’ : ‘Tekin’, ‘DogumTarihi’ : ‘1981’}]
var metin = “”;
$(dizi).each(function() {
  metin += ‘Adi:’ + this.Adi + ‘, Soyadi :’ + this.Soyadi + ‘, DogumTarihi : ‘ + this.DogumTarihi + ‘\n’;
});
alert(metin);
</pre>
<p>Yukarıdaki örnek de biraz önce gördüğümüz örneklerle aynı şekilde çalışıyor. Ancak farkettiğiniz üzere callback fonksiyonun içinde anahtar değer öğelerini kullanmak yerine this ifadesini kullandık. Each() metodunun callback fonksiyonu içinde kullancağınız this ifadesi, koleksiyon parametresinden gönderdiğiniz objenin geçerli elemanını temsil etmektedir. </p>
<p>Sonuç :</p>
<pre>
Adi: Ali, Soyadi : Metin, Doğum Tarihi : 1983
Adi: Mehmet, Soyadi : Ağaoğlu, Doğum Tarihi : 1985
Adi: Sinan, Soyadi : Tekin, Doğum Tarihi : 1981
</pre>
<p>Son örneğimizde ise koleksiyon olarak belirli bir niteliği taşıyan DOM objelerini göndereceğiz. </p>
<pre class="brush:javascript">
$.each($(‘.tabloHucreleri’), function(){
  $(this).css(‘background-color’, ‘#CCCCCC’);
});
</pre>
<p>Yukarıdaki örneğimizde each() metodu, .tabloHucreleri sinifina sahip DOM objelerinin herbiri için bir callback fonksiyonu çalıştırarak bu objelerin arka plan renklerinin gümüş gri (#CCC) olarak değişmesini sağladı.</p>
<p>Bugünlük bukadar. Hoşcakalın.</p>
<p>İbrahim Gündüz</p>
]]></content>
  </entry>
  <entry>
    <id>http://www.goktugozturk.com.tr/?p=243</id>
    <title><![CDATA[Bonus Checker]]></title>
    <updated>2011-10-06T14:14:58+00:00</updated>
    <link rel="alternate" href="http://www.goktugozturk.com.tr/projeler/bonus-checker/"/>
    <summary><![CDATA[Proje: Bonus Checker Adresi: http://apps.facebook.com/fbbonuschecker/ Geliştirici: Göktuğ Öztürk Proje Tanıtımı: Facebook üzerinde oyun oynayanlar, "Sosyal Oyun" gereklerinden biri olarak arkadaşlarından birşeyler toplamak zorunda kalmaktadır. Bonus Checker Facebook'un News Feed'deki son güncellemeleri ile birlikte iyice zorlaşan bu duruma çözüm olması için hazırlanmış bir Facebook Uygulamasıdır. Uygulamaya izin verdiğinizde, sizin duvarınıza erişerek, seçtiğiniz oyuna ait olan tüm gönderileri bulur ve [...]]]></summary>
    <content type="html"><![CDATA[Proje: Bonus Checker Adresi: http://apps.facebook.com/fbbonuschecker/ Geliştirici: Göktuğ Öztürk Proje Tanıtımı: Facebook üzerinde oyun oynayanlar, "Sosyal Oyun" gereklerinden biri olarak arkadaşlarından birşeyler toplamak zorunda kalmaktadır. Bonus Checker Facebook'un News Feed'deki son güncellemeleri ile birlikte iyice zorlaşan bu duruma çözüm olması için hazırlanmış bir Facebook Uygulamasıdır. Uygulamaya izin verdiğinizde, sizin duvarınıza erişerek, seçtiğiniz oyuna ait olan tüm gönderileri bulur ve [...]]]></content>
  </entry>
  <entry>
    <id>http://mehmetatasoy.com/?p=300</id>
    <title><![CDATA[HTC Desire Telefonum Kırıldı]]></title>
    <updated>2011-10-05T08:02:40+00:00</updated>
    <link rel="alternate" href="http://mehmetatasoy.com/htc-desire-telefonum-kirildi/"/>
    <summary><![CDATA[Merhaba arkadaşlar. Yaklaşık bir ay önce talihsiz bir kaza sonucu telefonumu 20 metre yükseklikten düşürdüm ve telefonumun Bluetooth, kamera, flash, jac girişi, gps, yakınlık sensoru, kulak hoporloru, led ışığı kısacası telefonun ust kısmında bulunan hiç bir aksamı çalışmamaktadır. 1 aydır serviste parça bekliyorum ve açıkcası pek de tamir olabileceğinden umutlu değilim. Bundan dolayı websitemdeki yazılarıma [...]]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar. Yaklaşık bir ay önce talihsiz bir kaza sonucu telefonumu 20 metre yükseklikten düşürdüm ve telefonumun  Bluetooth, kamera, flash, jac girişi, gps, yakınlık sensoru, kulak hoporloru, led ışığı kısacası telefonun ust kısmında bulunan hiç bir aksamı çalışmamaktadır.<br />
<span id="more-300"></span><br />
<a href="http://mehmetatasoy.com/wp-content/uploads/2011/10/broken-android1.jpg"><img src="http://mehmetatasoy.com/wp-content/uploads/2011/10/broken-android1.jpg" alt="" title="broken-android1" width="196" height="238" class="alignleft size-full wp-image-302" /></a><br />
1 aydır serviste parça bekliyorum ve açıkcası pek de tamir olabileceğinden umutlu değilim.<br />
Bundan dolayı websitemdeki yazılarıma yaklaşık 1 &#8211; 1.5 aydır ara vermiş bulunmaktayım. websitemde yazdıklarımın sizlere katkısı olduğunu düşünüyorsanız, sizlerde bana yeni androidli telefonumu almam için yardımda bulunabilirsiniz. Sağ taraftaki &#8220;Donate&#8221; Buttonunu kullanarak Paypal üzerinden dilediğiniz kadar bana katkı sağlayabilirsiniz.</p>
<p>Yardımlarınız için teşekkürlerimi sunarım&#8230; Umarım en kısa sürede kaldığım yerden yazmaya devam ederim.</p>
]]></content>
  </entry>
  <entry>
    <id>http://www.goktugozturk.com.tr/?p=241</id>
    <title><![CDATA[Episode Service]]></title>
    <updated>2011-10-04T14:07:24+00:00</updated>
    <link rel="alternate" href="http://www.goktugozturk.com.tr/projeler/episode-service/"/>
    <summary><![CDATA[Episode Service yabancı dizi izleyenlerin yeni bölüm indirme dertlerine çare olması için hazırlanmış basit bir web sitesidir.]]></summary>
    <content type="html"><![CDATA[Episode Service yabancı dizi izleyenlerin yeni bölüm indirme dertlerine çare olması için hazırlanmış basit bir web sitesidir.]]></content>
  </entry>
  <entry>
    <id>http://www.jsdefteri.com/?p=96</id>
    <title><![CDATA[Onaltılık ve Onluk Sayı Tabanlarını Hızlıca Birbirine Dönüştürme]]></title>
    <updated>2011-09-30T13:27:12+00:00</updated>
    <link rel="alternate" href="http://www.jsdefteri.com/makaleler/javascript/onaltilik-ve-onluk-sayi-tabanlarini-hizlica-birbirine-donusturme/"/>
    <summary><![CDATA[Merhaba, Belki oturup üzerine uzun uzadıya yazı yazılacak bir konu değil ama bir yerlerde hayatınızı kurtarabileceğini düşündüğüm için sizlerle de paylaşmak istedim Number ve String objelerine eklediğimiz toHex ve toDec metodları döngüsüz, acısız, ağrısız bir şekilde onluk ve onaltılık sayı tabanları arasında dönüşüm yapmamızı sağlar. Number.prototype.toHex = function() { return this.toString(16); } String.prototype.toDec = function() [...]]]></summary>
    <content type="html"><![CDATA[<p><img src="http://www.jsdefteri.com/wp-content/uploads/2011/09/us3dz3.jpg" alt="" title="us3dz3" height="140" class="alignleft size-full wp-image-100" />Merhaba,<br />
Belki oturup üzerine uzun uzadıya yazı yazılacak bir konu değil ama bir yerlerde hayatınızı kurtarabileceğini düşündüğüm için sizlerle de paylaşmak istedim <img src='http://www.jsdefteri.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span id="more-96"></span><br />
Number ve String objelerine eklediğimiz toHex ve toDec metodları döngüsüz, acısız, ağrısız bir şekilde onluk ve onaltılık sayı tabanları arasında dönüşüm yapmamızı sağlar.</p>
<pre class="brush:js">
      Number.prototype.toHex = function() {
        return this.toString(16);
      }

      String.prototype.toDec = function() {
        return parseInt(this, 16);
      }
</pre>
<p><strong>Kullanım Örneği :</strong></p>
<pre class="brush:js">
      //65325 sayisini hexadecimal e donusturuyoruz.
      var myInt = 65325;
      alert( myInt.toHex() ); //sonuc: ff2d

      //ff2d sayisini decimal e donusturuyoruz.
      var myHex = 'ff2d';
      alert( myHex.toDec() ); //sonuc 65325
</pre>
<p>Hoşcakalın.<br />
İbrahim Gündüz</p>
]]></content>
  </entry>
  <entry>
    <id>http://www.jsdefteri.com/?p=79</id>
    <title><![CDATA[Google Maps API v3 Kullanımı #3]]></title>
    <updated>2011-09-29T06:00:48+00:00</updated>
    <link rel="alternate" href="http://www.jsdefteri.com/makaleler/api/google-maps-api-v3-kullanimi-3/"/>
    <summary><![CDATA[Herkese Merhaba, Bugün yine sizlerle Google Maps API v3 ü incelemeye devam edeceğiz. Sözü çok fazla uzatmadan hemen konu başlıklarına geçmek istiyorum. İŞARETCİLERİN ÜZERİNE TIKLANDIĞINDA BİLGİ PENCERESİ NİN GÖRÜNTÜLENMESİ : Harita üzerinde bilgi penceresi (aslında ona balon demek daha doğru sanırım) görüntülemek için infoWindow sınıfından yararlanacağız. Yine bu özellikde versiyon değişimi sırasında kodlama yapısı evrim [...]]]></summary>
    <content type="html"><![CDATA[<p><img src="http://www.jsdefteri.com/wp-content/uploads/2011/09/googlemaps-300x224.jpg" alt="" title="googlemaps" width="300" height="224" class="alignleft size-medium wp-image-89" />Herkese Merhaba,<br />
Bugün yine sizlerle Google Maps API v3 ü incelemeye devam edeceğiz. Sözü çok fazla uzatmadan hemen konu başlıklarına geçmek istiyorum.<br />
<span id="more-79"></span><br />
<strong>İŞARETCİLERİN ÜZERİNE TIKLANDIĞINDA BİLGİ PENCERESİ NİN GÖRÜNTÜLENMESİ :</strong><br />
Harita üzerinde bilgi penceresi (aslında ona balon demek daha doğru sanırım) görüntülemek için infoWindow sınıfından yararlanacağız. Yine bu özellikde versiyon değişimi sırasında kodlama yapısı evrim geçiren yapılardan bir tanesi. v2 den hatırlayacak olan arkadaşlarımız bilgi penceresinin GMap2 sınıfı altında openInfoWindow metodu ile çalıştığını bilirler. v3 de ise infoWindow isminde ayrı bir sınıf olarak karşımıza çıkıyor. Lafı çok uzatmadan hemen kod örneğimizi verelim.</p>
<pre class="brush:js">//isaretci (marker) imizin goruntulenecegi noktayi tanimliyoruz.
var Point = new google.maps.LatLng(26, 45);

//Yeni bir marker nesnesi tanimliyoruz.
var Marker1 = new google.maps.Marker({
  position  : Point,
  title     : 'Marker 1',
  map       : map //map =  google.maps.Map
});

//Marker imizin uzerinde goruntuleyecegimiz yeni bir bilgi penceresi tanimliyoruz.
var infoWin1 = new google.maps.InfoWindow({
  content : '<strong>Merhaba Dünya </strong>'
});

/*
* marker imiza click olayi tanimliyoruz. Olay gerceklestiginde infoWin1 objesinin
* (yeni tanimladigimiz bilgi penceresi) open metodunu cagirarak bilgi penceresinin
* marker in ustunde acilmasini sagliyoruz.
*/
google.maps.event.addListener(Marker1, 'click', function() {
  infoWin1.open(map, Marker1);
});</pre>
<p><strong>YAKINLAŞMA SEVİYESİ HARİTA KONUMUNUN EKRANDA GÖRÜNEN MARKER SAYISINA GÖRE OTOMATİK AYARLANMASI :</strong><br />
v3 de gelişim gösteren konulardan biri de yakınlaşma seviyesinin bound a set edilebilmesi. Bu işlemin v2 deki yapılış şeklini hatırlayacak olursak; elimizdeki noktaları bir GLatLngBounds objesine doldurduktan sonra o boğundun orta noktasını alır, zoom seviyesini tespit eder ve haritayı bu bilgilere göre set ederdik. v3 de doldurduğumuz bounds sınıfını haritaya fitBounds metoduya göndermemiz yeterli oluyor.</p>
<pre class="brush:js">//Rasgele birkac tane nokta tanimladik.
var pointArray = [
  new google.maps.LatLng(26.1, 45.1),
  new google.maps.LatLng(26.2, 45.2),
  new google.maps.LatLng(26.01, 45.02)
]

//Noktalarimizin yeralacagi alani tanimliyoruz.
var Bounds = new google.maps.LatLngBounds();

/*
 * tanimladigimiz her nokta icin harita uzerine birer
 * marker atiyoruz ve bounds isimli alanimizi genisletiyoruz.
 */
for(i in pointArray) {
  Point = pointArray[i];

  var marker = new google.maps.Marker({
    map       : map, //map = google.maps.Map
    position  : Point,
    title     : 'test'
  });

  //alanimizin sinirlarini genisletiyoruz.
  Bounds.extend(Point);
}

//Alanımızın boş olup olmadığını kontrol ettikten sonra
//haritamızın görünen alanını doldurduğumuz alana göre set
//ediyoruz. Bu islem sonrasinda harita kendisini, doldurdugumuz
//alanin tam orta noktasina konumlanarak tum isaretcilerin harita
//uzerinde rahatlilkla gorunebildigi bir yakinlasma seviyesine
//ayarlayacak.
if( !Bounds.isEmpty() )
  map.fitBounds(Bounds);</pre>
<p>Bugünlük bu kadar.Tekrar görüşmek dileğiyle.<br />
Hoşcakalın.<br />
İbrahim Gündüz</p>
]]></content>
  </entry>
  <entry>
    <id>http://www.jsdefteri.com/?p=53</id>
    <title><![CDATA[Google Maps API v3 Kullanımı #2]]></title>
    <updated>2011-09-28T06:12:26+00:00</updated>
    <link rel="alternate" href="http://www.jsdefteri.com/makaleler/api/google-maps-api-v3-kullanimi-2/"/>
    <summary><![CDATA[Herkese Merhaba, Bugün sizlerle Google Maps apisinin v3 sürümünü incelemeye devam edeceğiz. Geçtiğimiz gün apinin konumlandırma ve zoom seviyesinin ayarlanmasi gibi temel işlevlerini öğrenmiştik. Bugün ise haritanın üzerine işaretci (marker) ekleme/çıkarma, işaretcinin tıklama olayının yakalanması ve işaretci konumunun okunması gibi konuları inceleyeceğiz. Dilerseniz hemen apiyi incelemeye devam edelim. HARİTAYA İŞARETCİ (MARKER) EKLEMEK / ÇIKARMA : [...]]]></summary>
    <content type="html"><![CDATA[<p><img class="alignleft size-medium wp-image-89" title="googlemaps" src="http://www.jsdefteri.com/wp-content/uploads/2011/09/googlemaps-300x224.jpg" alt="" width="300" height="224" />Herkese Merhaba,<br />
Bugün sizlerle Google Maps apisinin v3 sürümünü incelemeye devam edeceğiz. Geçtiğimiz gün apinin konumlandırma ve zoom seviyesinin ayarlanmasi gibi temel işlevlerini öğrenmiştik. Bugün ise haritanın üzerine işaretci (marker) ekleme/çıkarma, işaretcinin tıklama olayının yakalanması ve işaretci konumunun okunması gibi konuları inceleyeceğiz. Dilerseniz hemen apiyi incelemeye devam edelim.<br />
<span id="more-53"></span><br />
<strong>HARİTAYA İŞARETCİ (MARKER) EKLEMEK / ÇIKARMA :</strong><br />
API nin yeni sürümünde haritaya marker ekleme / cikarma isleminin mantigi biraz değiştirilmiş. v2 deki metodolojiyi biraz hatırlayacak olursak bir marker objesi olusturup olusturduğumuz markerı haritaya eklemek için objeyi map objesinin addOverlay metoduna, cikarmak icinse removeOverlay metoduna parametre olarak gönderiyorduk. Yeni sürümde ise marker objelerine kendini haritaya ekleyebilme veya haritadan çıkartabilme yeteneği kazandırılmış.<br />
Oluşturduğumuz bir marker nesnesini haritaya eklemek istediğimizde marker nesnesinin setMap metodunu kullanmamız veya marker ı oluştururken markerın hangi haritaya ekleneceğini parametre olarak göndermemiz yeterli.</p>
<pre class="brush:js">      var Point = new google.maps.LatLng(36, 42);

      var Marker1 = new google.maps.Marker({
        title     : 'Marker 1',
        position  : Point,
        map       : map //map = google.maps.Map
      });</pre>
<p>Marker ı haritadan çıkarmak istediğimizde ise setMarker metoduna harita objesi yerine null gönderiyoruz.</p>
<pre class="brush:js">Marker1.setMap(null);</pre>
<p><strong>HARİTA İŞARETCİSİNİN SÜRÜKLENEBİLİR HALE GETİRİLMESİ :</strong><br />
Sürükleyerek konumunu değiştirebileceğiniz bir işaretciniz olsun istiyorsanız yapmanız gereken tek şey, işaretci yaratırken gönderdiğiniz parametre dizisine draggable:true parametresini eklemek.</p>
<pre class="brush:js">//isaretcinin eklenecegi noktayi tanimliyoruz.
      var Point = new google.maps.LatLng(36, 42);

      //isaretci nesnesi olusturuyoruz.
      var Marker1 = new google.maps.Marker({
        title     : 'Marker 1',
        position  : Point,
        map       : map,  //map = google.maps.Map
        draggable : true
      });</pre>
<p><strong>HARİTA İŞARETCİSİNİN ÜZERİNE TIKLANILMASI OLAYININ YAKALANMASI :</strong><br />
API nin v2 versiyonunu kullanan arkadaşlar bu iş için GEvent nesnesi kullanıldığını pekala biliyorlardır. v3 de bu nesnenin yerini google.maps.Event almıştır. İşaretciler, harita ve diğer harita nesneleriyle ilgili olayları yakalamak için addListener metodu nu kullanacağız. Bu metoda göndereceğimiz parametreler sırasıyla olayını yakalamak istediğimiz obje, yakalanacak olay adı ve son olarak olay gerçekleştiğinde çağırılacak callback fonksiyonu.</p>
<pre class="brush:js">      google.maps.event.addListener(Marker1, 'click', function() {
        alert('Isaretciye tikladiniz.')
      });</pre>
<p><strong>HARİTADAKİ BİR İŞARETCİNİN GEÇERLİ KONUM BİLGİSİNİN OKUNMASI :</strong><br />
Haritaya eklenen bir marker ın konum bilgisini okumak için getPosition() metodu kullanılır. Bu metod bize markerın google.maps.LatLng tipinde konum bilgisini döner.</p>
<p>Aşağıdaki örnekde oluşturduğumuz marker a click event i tanımlayarak, event gerçekleştiğinde markerımızın konum bilgisinin alert olarak görünmesini sağlayacağız.</p>
<pre class="brush:js">      var Point = new google.maps.LatLng(26, 45);

      var Marker1 = new google.maps.Marker({
        title     : 'Marker 1',
        position  : Point,
        map       : map,  //map = google.maps.Map
        draggable : true
      });

      google.maps.event.addListener(Marker1, 'click', function() {
        var point = this.getPosition();
        alert("Enlem:" + point.lat() + "\n Boylam:" + point.lng());
      });</pre>
<p>Dilerseniz son olarak bugün öğrendiğimiz konularla ilgili işlemleri, geçen yazımızdan hatırlayacağınız mapObject nesnesinin altına metod olarak ekleyelim. Daha sonraki konularda bu nesneye birhayli ihtiyacımız olacak.</p>
<pre class="brush:js">        /*
         * haritamiza marker eklemek icin addMarker metodunu kullaniyoruz.
         * params.title : marker ın uzerine mouse ile gelindiginde goruntulenen tiptext
         * params.draggable : marker imiiz suruklenebilir yapmak icin bu parametreyi true olarak set ediyoruz.
         * params.latitude : marker in yeralaacgi enlem bilgisi
         * params.longitude : marker ini yeralacagi boylam bilgisi
         * params.events.onclick   : markerin tiklanma olayi callback fonksiyonu
         * params.events.ondblclick : markerin uzerine cift tiklanilmasi olayi callback fonksiyonu
         * params.events.ondrag    : kullanicinin markeri suruklemesi olayi callback fonksiyonu
         */
        addMarker : function(params) {
          var Point = this.getPoint(params.latitude, params.longitude);

          var Marker = new window.google.maps.Marker({
            title     : params.title,
            draggable : params.draggable,
            position  : Point,
            map       : this.Map
          });

          this.__bindEvent(Marker, params.events);

          return Marker
        },

        /*
         * Daha once haritaay ekledigimiz bir isaretciyi
         * haritadan silmek icin removeMarker metodunu kullanacagiz.
         */

        removeMarker : function(Marker) {
          Marker.setMap(null);
        },

        /*
         * bindEvents metodu, mapObject nesnesinin private metodudur.
         * Objelerin yaratilmasi sirasinda gonderilen parametreler arasinda
         * yeralan events sinifi icerisindeki olaylari objeye baglar.
         */
        __bindEvent : function(Object, Events) {

          for(Event in Events) {

            var eventCallback = Events[Event];
            Object[Event] =  eventCallback;
            window.google.maps.event.addListener(Object, Event.substr(2), Object[Event]);
          }
        }</pre>
<p>Bugünlük bu kadar. API ile ilgili anlatacaklarımız devam edecek ancak sizlerde API dokümantasyonunu inceleyerek daha detaylı bilgi sahibi olabilirsiniz.</p>
<p>API Referans Dokümanı :<br />
<a title="http://code.google.com/apis/maps/documentation/javascript/basics.html" href="http://code.google.com/apis/maps/documentation/javascript/basics.html">http://code.google.com/apis/maps/documentation/javascript/basics.html</a></p>
<p>Makaleyle ilgili örnek uygulamayı aşağıdaki linkden görebilirsiniz :<br />
<a title="http://www.jsdefteri.com/demos/api_google-maps-api-v3-kullanimi/google-maps-api-v3-kullanimi2.htmhttp://www.jsdefteri.com/demos/api_google-maps-api-v3-kullanimi/google-maps-api-v3-kullanimi2.htm" href="http://www.jsdefteri.com/demos/api_google-maps-api-v3-kullanimi/google-maps-api-v3-kullanimi2.htm">http://www.jsdefteri.com/demos/api_google-maps-api-v3-kullanimi/google-maps-api-v3-kullanimi2.htm</a></p>
<p>Hoşcakalın.<br />
İbrahim Gündüz</p>
]]></content>
  </entry>
  <entry>
    <id>http://www.jsdefteri.com/?p=11</id>
    <title><![CDATA[Google Maps API v3 Kullanımı #1]]></title>
    <updated>2011-09-27T07:34:07+00:00</updated>
    <link rel="alternate" href="http://www.jsdefteri.com/makaleler/api/google-maps-api-v3-kullanimi/"/>
    <summary><![CDATA[Herkese Merhaba, Bugün sizlerle birlikte Google ın vazgeçilmez apilerinden Google Maps apisinin v3 sürümünün temel işlevlerini kısaca inceleyeceğiz. Google Maps API v3, v2 sürümünden farklı olarak karşımıza farklı bir kod yapısıyla çıkıyor. v2 de kullanılan ayrık sınıf yapısı v3 de yerini tüm sınıfların tek kökden kullanımı şekline bırakmış. Java programcılarını kızdırmayalım ama v3, bu kullanım [...]]]></summary>
    <content type="html"><![CDATA[<p><img src="http://www.jsdefteri.com/wp-content/uploads/2011/09/googlemaps-300x224.jpg" alt="" title="googlemaps" width="300" height="224" class="alignleft size-medium wp-image-89" />Herkese Merhaba,<br />
Bugün sizlerle birlikte Google ın vazgeçilmez apilerinden Google Maps apisinin v3 sürümünün temel işlevlerini kısaca inceleyeceğiz. Google Maps API v3, v2 sürümünden farklı olarak karşımıza farklı bir kod yapısıyla çıkıyor. v2 de kullanılan ayrık sınıf yapısı v3 de yerini tüm sınıfların tek kökden kullanımı şekline bırakmış. Java programcılarını kızdırmayalım ama v3, bu kullanım şekliyle java ve C# dillerini andırır olmuş.<br />
<span id="more-11"></span><br />
Dilerseniz hızlıca bir giriş yaparak javascript apisini kodumuza dahil edelim.</p>
<pre class="brush:html">&lt;script
type="text/javascript"
src="http://maps.googleapis.com/maps/api/js?sensor=true"&gt;&lt;/script&gt;</pre>
<p>Yine versiyon 2 de olduğu gibi haritamızın içinde görünmesini istediğimiz DIV objesini sayfamıza ekleyelim.</p>
<pre class="brush:html">&lt;div id="mapCanvas"&gt;&lt;/div&gt;</pre>
<p>Api nin yeni sürümünde gelen en radikal değişikliklerden bir tanesi de metodlara gönderilen parametrelerin nesneleştirilmesi. Tabi tüm api sınıflarının tek kökten gelmesini de gözümüzden kaçırmayalım <img src='http://www.jsdefteri.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Haritanın düzgün şekilde yüklenmesi için birkaç seçeneğimiz var.<br />
- jQuery veya benzer bir javascript framework u ile document.ready olayını kontrol edebiliriz.</p>
<p>- Haritayı çağıracak javascript kodunu sayfanın en son kısmına koyabiliriz ki bu benim kod kirliliğine neden olduğundan sevmediğim bir yöntem.</p>
<p>- Google maps apisinin yeni sürmünün bize sağladığı callback parametresini kullanabiliriz. Haritayı çalıştıracak kod bloğunu bir fonksiyon içine yazarak fonksiyon ismini callback isimli parametreye gönderdiğimizde (callbacak parametresini javascript apisini include ettiğimiz script tagındaki url sine ekliyoruz.) javascript apisi bizim için sayfanın yüklenmesi durumunu kontrol ederek haritayı uygun zamanda çalıştıracaktır.</p>
<p>Aşağıdaki javascript nesnesini doğrudan header ınıza ekleyerek haritayı çalıştırabilirsiniz.</p>
<pre class="brush:js">var mapObject = {
    Map     : null,
    Options : null,
    /*
     * Haritamizin baslangic noktasi, baslangictaki
     * yakinlasma seviyesi ve haritanin hangi DIV objesi
     * icerisinde goruntulenecegi gibi secenekleri
     * setOptions metodu ile set ediyoruz.
     *
     * param.startAt.latitude : haritanin baslangicta konumlanacagi enlem bilgisi
     * param.startAt.longitude : haritanin baslangicta konumlanacagi boylam bilgisi
     * param.startAt.zoomLevel : haritanin baslangictaki yakinlasma seviyesi
     * param.canvasId : haritanin gomulecegi DIV nesnesinin kimligi (id)
     */
    setOptions : function(params) {
      this.Options = params;
    },

    /*
     * getPoint metodunu yeni bir nokta nesnesi
     * uretmek icin kullanacagiz.
     */
    getPoint : function(Latitude, Longitude) {
      return new google.maps.LatLng(Latitude, Longitude);
    },

    /*
     * Haritamizi asenksron olarak yuklemek icin loadScript
     * metodunu kullaniyoruz.
     */
    loadScript : function() {
      var Script = document.createElement("script");
      Script.type = "text/javascript";
      Script.src = "http://maps.googleapis.com/maps/api/js?sensor=false&amp;callback=mapObject.initMap";
      document.body.appendChild(Script);
    },

    /*
     * Sayfa yuklendiginde haritayi calistirmak icin
     * initMap metodunu kullaniyoruz.
     */
    initMap : function() {
      var centerPoint = this.getPoint(
        this.Options.startAt.latitude,
        this.Options.startAt.longitude
      );
      var mapOptions = {
        zoom      : this.Options.startAt.zoomLevel,
        center    : centerPoint,
        mapTypeId : google.maps.MapTypeId.ROADMAP
      }
      this.Map = new google.maps.Map(document.getElementById(this.Options.canvasId), mapOptions);
    }
  }

  /*
   * Haritamizin baslangicda kullanacagi nokta,
   * yakinlasma seviyesi ve canvasId bilgilerini set ediyoruz.
   *
   */
  mapObject.setOptions({
    startAt : {
      latitude  : 26,
      longitude : 45,
      zoomLevel : 5
    },
    canvasId : 'mapCanvas'
  });</pre>
<pre class="brush:html">
&lt;body onload="mapObject.loadScript();"&gt;
...
&lt;body&gt;
</pre>
<p>Kişisel fikrimi soracak olursanız ben API nin bu halini gerçekten cok sevdim. V2 deki dağınık sınıf yapısı kodunuzun kirli ve karmaasik gorunmesine neden oluyordu. Ben bu tip durumlarda yukarıdaki gibi ara bir sınıf kullanarak versiyon degisikliklerinden doğabilecek problemleri bertaraf etmekten yanayım.</p>
<p>Dilerseniz şimdi de haritanın yeteneklerini birkaç ana başlık halinde inceleyerek yeni apiyi biraz daha tanıyalım.</p>
<p><strong>HARİTA KONUMUNUN DEĞİŞTİRİLMESİ :</strong><br />
Haritanızın orta noktasını runtime da degistirmek istediginizde google.maps objesinin setCenter metodunu kullanabilirsiniz. Nokta bilgisi metoda google.maps.latLng tipinde gonderilmelidir. google.maps.LatLng sinifinin ilk parametresi Latitude (enlem), ikinci parametresi ise Longitude (boylam) bilgisidir.</p>
<pre class="brush:js">
  var latLng = google.maps.LatLng(36, 42);
  //map = google.maps.Map
  map.setCenter(latLng);
</pre>
<p>Makalenin ileriki bölümlerinde yukarıdaki mapObject nesnesinden yararlanacağımız için gelin bu rutini bir metod olarak nesneye ekleyelim.</p>
<pre class="brush:js">
    /*
     * Haritanın konum / orta nokta bilgisini ayarlamak
     * icin setPosition metodunu kullanacagiz.
     */
    setPosition: function(Latitude, Longitude) {
      var Point = this.getPoint(Latitude, Longitude);
      this.Map.setCenter(Point);
    }
</pre>
<p><strong>HARİTANIN MEVCUT KONUM BİLGİSİNİN OKUNMASI :</strong><br />
Haritanın mevcut konum / orta nokta bilgisini elde etmek icin google.maps objesinin getCenter metodu kullanılır. Metod orta nokta bilgisini bize google.maps.LatLng tipinde donecektir.</p>
<pre class="brush:js">
  //map = google.maps.Map
  myPoint = map.getCenter();
</pre>
<p>Bu rutini de mapObject nesnemize ekliyoruz.</p>
<pre class="brush:js">
    /*
     * Haritamizin konum / orta nokta bilgisini
     * ogrenmek icin getPosition metodunu kullanacagiz.
     */
    getPosition : function() {
      var Point = this.Map.getCenter();
      return {
        latitude  : Point.lat(),
        longitude : Point.lng()
      }
    }
</pre>
<p><strong>HARİTANIN YAKINLAŞMA SEVİYESİNİN DEĞİŞTİRİLMESİ :</strong><br />
Haritanın yakınlaşma seviyesini (zoom) güncellemek için google.maps objesinin setZoom metodu kullanılır. Metoda gönderdiğiniz sayısal veri büyüdükçe yakınlaşma seviyesi artar.</p>
<pre class="brush:js">
  //map = google.maps.Map
  map.setZoom(5);
</pre>
<p>Bu rutini de mapObject nesnemize ekliyoruz.</p>
<pre class="brush:js">
    /*
     * Haritamizin yakinlasma seviyesini
     * setZoomLevel metoduyla ayarlayacagiz
     */
    setZoomLevel : function(zoomLevel) {
      this.Map.setZoom(zoomLevel);
    }
</pre>
<p><strong>HARİTANİN MEVCUT YAKINLAŞMA SEVİYESİNİN OKUNMASI:</strong><br />
Haritanın geçerli yakınlaşma seviyesini öğrenmek için google.maps objesinin getZoom metodu kullanılır. getZoom metodu mevcut yakınlaşma seviyesini bize integer bir deger olarak doner.</p>
<pre class="brush:js">
//map = google.maps.Map
var zoomLevel  = map.getZoom();
</pre>
<p>Bu rutini de mapObject nesnemize ekliyoruz.</p>
<pre class="brush:js">
    /*
     * Haritanin gecerli yakinlasma seviyesini
     * ogrenmek icin getZoomLevel metodnu kullanacagiz.
     */
    getZoomLevel : function() {
      return this.Map.getZoom();
    }
</pre>
<p>Bugünlük bu kadar. Bir sonarki yazıda harita işaretçilerinin kullanımı ve harita olayları konularını birlikte inceleyeceğiz.</p>
<p>Bu makaledeki kod örneğinin tamamını aşağıdaki link deki html sayfasından inceleyebilirsiniz :<br />
<a href="http://www.jsdefteri.com/demos/api_google-maps-api-v3-kullanimi/google-maps-api-v3-kullanimi1.htm" title="http://www.jsdefteri.com/demos/api_google-maps-api-v3-kullanimi/google-maps-api-v3-kullanimi1.htm">http://www.jsdefteri.com/demos/api_google-maps-api-v3-kullanimi/google-maps-api-v3-kullanimi1.htm</a></p>
<p>Hoşcakalın.<br />
İbrahim Gündüz</p>
]]></content>
  </entry>
  <entry>
    <id>http://www.jsdefteri.com/?p=5</id>
    <title><![CDATA[Yeni, Yine, Yeniden Merhaba!]]></title>
    <updated>2011-09-13T20:16:17+00:00</updated>
    <link rel="alternate" href="http://www.jsdefteri.com/genel/yeni-yine-yeniden-merhaba/"/>
    <summary><![CDATA[Merhaba Arkadaşlar, Bir süre önce kredi kartı numaralarımı goDaddy den kurtarma derdine düşmüşken malesef jsdefteri ve diğer bazı sitelerimin bir süre kapalı kalmasına neden oldum. Ancak şimdi farklı bir servis sağlayıcı üzerinde yeniden sizlerle birlikte olmaya devam edeceğim. jsDefteri yepyeni makalelerle pek yakında karşınızda!]]></summary>
    <content type="html"><![CDATA[<p>Merhaba Arkadaşlar,<br />
Bir süre önce kredi kartı numaralarımı goDaddy den kurtarma derdine düşmüşken malesef jsdefteri ve diğer bazı sitelerimin bir süre kapalı kalmasına neden oldum. Ancak şimdi farklı bir servis sağlayıcı üzerinde yeniden sizlerle birlikte olmaya devam edeceğim. jsDefteri yepyeni makalelerle pek yakında karşınızda!</p>
]]></content>
  </entry>
  <entry>
    <id>http://www.nurettintopal.com/?p=214</id>
    <title><![CDATA[Günlük Döviz Kurları ve PHP]]></title>
    <updated>2011-09-11T09:23:36+00:00</updated>
    <link rel="alternate" href="http://www.nurettintopal.com/gunluk-doviz-kurlari-ve-php/"/>
    <summary><![CDATA[Elektronik ticaret ve muhasebe uygulamaları ile birlikte sıkça ihtiyacımız olan verilerden birisi de farklı kurlar üzerinden işlem yapmak. Bunun için bir konsol hazırlayıp manuel olarak her gün kurları sistemimize girebileceğimiz gibi, bunları bir servis vasıtası ile günlük otomatik olarak da alabiliriz. Bu sayede günlük bizim bir iki saatlik zaman kaybımızı ortadan kaldırmış oluruz. Merkez Bankası [...]]]></summary>
    <content type="html"><![CDATA[Elektronik ticaret ve muhasebe uygulamaları ile birlikte sıkça ihtiyacımız olan verilerden birisi de farklı kurlar üzerinden işlem yapmak. Bunun için bir konsol hazırlayıp manuel olarak her gün kurları sistemimize girebileceğimiz gibi, bunları bir servis vasıtası ile günlük otomatik olarak da alabiliriz. Bu sayede günlük bizim bir iki saatlik zaman kaybımızı ortadan kaldırmış oluruz. Merkez Bankası [...]]]></content>
  </entry>
  <entry>
    <id>http://www.nurettintopal.com/?p=169</id>
    <title><![CDATA[Memcached ve PHP]]></title>
    <updated>2011-08-22T14:18:22+00:00</updated>
    <link rel="alternate" href="http://www.nurettintopal.com/memcached-ve-php/"/>
    <summary><![CDATA[Web uygulamalarında performans çok önemli bir unsur haline geldi. Uygulamalarımızda insanların ihtiyaçlarını iyi bir şekilde karşılıyor olmak yetmiyor, bunları hızlı bir şekilde sunmak lazım. Bunun için uygulanabilecek çözümlerden birisi de Memcached kullanımı. Nedir bu Memcached? Danga Interactive tarafından kendi uygulamaları olan LiveJournal&#8217;da kullanılmak üzere geliştirilmiş bir teknolojidir. Fakat daha sonra herkesin kullanımına sunulmuş. Bu teknoloji [...]]]></summary>
    <content type="html"><![CDATA[Web uygulamalarında performans çok önemli bir unsur haline geldi. Uygulamalarımızda insanların ihtiyaçlarını iyi bir şekilde karşılıyor olmak yetmiyor, bunları hızlı bir şekilde sunmak lazım. Bunun için uygulanabilecek çözümlerden birisi de Memcached kullanımı. Nedir bu Memcached? Danga Interactive tarafından kendi uygulamaları olan LiveJournal&#8217;da kullanılmak üzere geliştirilmiş bir teknolojidir. Fakat daha sonra herkesin kullanımına sunulmuş. Bu teknoloji [...]]]></content>
  </entry>
  <entry>
    <id>http://blog.mustafakirimli.com/?p=1549</id>
    <title><![CDATA[PHP ile MySQL HandlerSocket ‘e Bağlanmak]]></title>
    <updated>2011-08-16T05:58:53+00:00</updated>
    <link rel="alternate" href="http://blog.mustafakirimli.com/php-ile-mysql-handlersocket-e-baglanmak/1549"/>
    <summary><![CDATA[Merhaba arkadaşlar, bu yazımızda PHP]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar, bu yazımızda PHP ile MySQL HandlerSocket &#8216;e bağlanmayı ve kullanmayı deneyeceğiz.<br /> <span id="more-1549"></span><br /> Yazıya başlamadan önce MySQL HandlerSocket ile alakalı <a title="MySQL vs Memcache vs HandlerSocket MySQL" href="http://blog.mustafakirimli.com/mysql-vs-memcache-vs-handlersocket-mysql/1544">MySQL HandlerSocket tanıtımı</a>, <a href="http://blog.mustafakirimli.com/mysql-handlersocket-plugin-kurulumu/1553">MySQL HandlerSocket kurulumu</a> ve <a href="http://blog.mustafakirimli.com/mysql-handlersocket-plugin-icin-php-client-kurulumu/1548">PHP için MySQL HandlerSocket Client Kurulumu</a> yazılarını incelemek isteyebilirsiniz.</p><h3 class="clear">HandlerSocket Sınıfını Yakından Tanıyalım</h3><p>HandlerSocket sınıfı PHP-Handlersocket paketiyle gelmektedir. Bu paketin kurulumunu yukarıda linki bulunan &#8220;PHP için MySQL HandlerSocket Client Kurulumu&#8221; yazısında yapmıştık. Şimdi PHP &#8216;nin <a href="http://php.net/get_class_methods">get_class_methods</a> fonksiyonu ile HandlerSocket sınıfının metodlarına bakalım.</p><pre class="brush:php">&lt;?php

// HandlerSocket sınıfının tüm metodlarını getir
$methods = get_class_methods("HandlerSocket");

echo "&lt;pre&gt;";
print_r($methods);
echo "&lt;/pre&gt;";
?&gt;</pre><p><em>Yukarıdaki kodun çıktısı:</em></p><pre class="brush:php">Array
(
    [0] =&gt; __construct
    [1] =&gt; __destruct
    [2] =&gt; openIndex
    [3] =&gt; executeSingle
    [4] =&gt; executeMulti
    [5] =&gt; executeUpdate
    [6] =&gt; executeDelete
    [7] =&gt; executeInsert
    [8] =&gt; getError
    [9] =&gt; executeFind
)</pre><p>Ayrıca <a href="http://code.google.com/p/php-handlersocket/#Class_synopsis">PHP-Handlersocket</a> sayfasında bulunan HandlerSocket metod imzalarını incelemek isteyebilirsiniz.</p><p><em>HandlerSocket sınıfının metod imzaları:</em></p><pre class="brush:php">HandlerSocket {
    /* Constants */
    const HandlerSocket::PRIMARY;

    /* Methods */
    __construct  ( string $host, string $port [, array $options ])
    public bool openIndex ( int $id, string $db, string $table, string $index, string $fields )
    public mixed executeSingle ( int $id, string $op, array $fields [, int $limit, int $skip, strint $modop, array $values, array $filters, int $invalues_key, array $invalues ] )
    public mixed executeMulti ( array $requests )
    public mixed executeUpdate ( int $id, string $op, array $fields, array $values [, int $limit, int $skip, array $filters, int $invalues_key, array $invalues] ] )
    public mixed executeDelete ( int $id, string $op, array $fields [, int $limit, int $skip, array $filters, int $invalues_key, array $invalues] ] )
    public mixed executeInsert ( int $id, array $values )
    public string getError ( void )
}</pre><h3>Test Verilerinin Oluşturulması</h3><p>Sonraki HandlerSocket yazılarımızda da kullanacağımız veritabanı tablomuzu aşağıdaki komutla oluşturabilirsiniz. Biraz fazla detaylı bulabilirsiniz ancak birlikte indeksli alanlara değineceğimizden member tablosu buna güzel bir örnek oluşturacağını düşündük.</p><pre class="brush:sql">SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

SHOW WARNINGS;
SHOW WARNINGS;
CREATE SCHEMA IF NOT EXISTS `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
SHOW WARNINGS;
USE `test` ;

-- -----------------------------------------------------
-- Table `test`.`mem`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `test`.`mem` ;

SHOW WARNINGS;
CREATE  TABLE IF NOT EXISTS `test`.`mem` (
  `mem_id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'member id' ,
  `mem_name` VARCHAR(45) NULL COMMENT 'member name' ,
  `mem_last_name` VARCHAR(60) NULL COMMENT 'member last name' ,
  `mem_email` VARCHAR(90) NULL COMMENT 'member email address' ,
  `mem_username` CHAR(16) NOT NULL COMMENT 'member username' ,
  `mem_password` CHAR(40) NOT NULL COMMENT 'member password' ,
  `mem_type` ENUM('USER', 'MOD', 'ADMIN') NOT NULL DEFAULT 'USER' COMMENT 'member type' ,
  `mem_activation_key` VARCHAR(45) NULL DEFAULT NULL COMMENT 'member activation key' ,
  `mem_reset_key` VARCHAR(45) NULL DEFAULT NULL COMMENT 'member reset password key' ,
  `mem_last_login` DATETIME NULL DEFAULT NULL COMMENT 'member last login time' ,
  `mem_status` ENUM('ACTIVE', 'DEACTIVE', 'WAITING') NOT NULL DEFAULT 'WAITING' COMMENT 'member status' ,
  `mem_reg_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'member register time' ,
  PRIMARY KEY (`mem_id`) )
ENGINE = InnoDB
COMMENT = 'Member (staff) informations';

SHOW WARNINGS;
CREATE UNIQUE INDEX `mem_email_ukey` ON `test`.`mem` (`mem_email` ASC) ;

SHOW WARNINGS;
CREATE UNIQUE INDEX `mem_username_ukey` ON `test`.`mem` (`mem_username` ASC) ;

SHOW WARNINGS;
CREATE INDEX `mem_status_idx` ON `test`.`mem` (`mem_status` ASC) ;

SHOW WARNINGS;
CREATE INDEX `mem_type_idx` ON `test`.`mem` (`mem_type` ASC) ;

SHOW WARNINGS;
CREATE INDEX `mem_username_password_idx` ON `test`.`mem` (`mem_username` ASC, `mem_password` ASC) ;

SHOW WARNINGS;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

-- -----------------------------------------------------
-- Data for table `test`.`mem`
-- -----------------------------------------------------
SET AUTOCOMMIT=0;
USE `test`;
INSERT INTO `test`.`mem` (`mem_id`, `mem_name`, `mem_last_name`, `mem_email`, `mem_username`, `mem_password`, `mem_type`, `mem_activation_key`, `mem_reset_key`, `mem_last_login`, `mem_status`, `mem_reg_time`) VALUES
(NULL, 'Mustafa', 'KIRIMLI', 'info@mustafakirimli.com', 'kirimlimustafa', SHA1('rootTest@1'), 'USER', 'a9e56bb2f8ea7a719ec7b07ebb21f3bd', NULL, NULL, 'WAITING', NOW());

COMMIT;</pre><h3>PHP-HandlerSocket Kullanımı</h3><p>HandlerSocket sınıfı ile MySQL HandlerSocket &#8216;e bağlanmak için sınıf yapılandırıcısına (__construct) sunucu adres ve portunu verdikten sonra openIndex metodunu kullanmamız gerekiyor. Öncelikle basit bir kod yazıp sonrasında bu örnek üzerinden anlatım ve incelemeye devam edelim.</p><pre class="brush:php">&lt;?php
// Karakter setini utf-8 yap
header('Content-type: text/html; charset=utf-8');

$host    = '127.0.0.1';
$port_rd = 9998;
$port_wr = 9999;
$dbname  = 'test';
$table   = 'mem';

// HandlerSocket nesnesi olustur (HandlerSocket 'e bağlanır)
$hs = new HandlerSocket($host, $port_rd);

// Tablo indeksini ac, hata varsa ekrana bas ve betigi durdur
if (!($hs-&gt;openIndex(1, $dbname, $table, 'PRIMARY', 'mem_name,mem_last_name,mem_username,mem_email'))) {
    echo 'Index açılamadı! ' . $hs-&gt;getError() . PHP_EOL;
    die();
}

// Tablodan veri oku. Id 'si 1 olan satiri getir
$retval = $hs-&gt;executeSingle(1, '=', array("1"), 1, 0);

// Veriyi ekrana bas
echo '&lt;pre&gt;';
print_r($retval);
echo '&lt;/pre&gt;';
?&gt;</pre><p><em>Yukarıdaki Betiğin Çıktısı</em></p><pre class="brush:plain">Array
(
    [0] =&gt; Array
        (
            [0] =&gt; Mustafa
            [1] =&gt; KIRIMLI
            [2] =&gt; kirimlimustafa
            [3] =&gt; info@mustafakirimli.com
        )

)</pre><p>HandlerSocket &#8216;in openIndex metoduna bağlantı id &#8216;si gibi kullanılan int tipinde ilk parametre, ikinci parametre olarak veritabanı adı, üçüncü parametre tablo adı, dördüncü parametrede tablodaki indeksin adı (sütun adı değil) ve beşinci parametre olarak seçmek istediğiniz sütun adları (SQL de <strong>SELECT ile sütun seçmek</strong> gibi).</p><p>openIndex &#8216;in üretebileceği hatalar <strong>2:idxnum</strong> gibi bir formatla geliyor. Mesela bu hata indeks adı yanlış yazıldığında dönüyor. İlgilenenler ve C++ bilenler için MySQL HandlerSocket plugininin kaynak kodlarında hata mesajını grep (wiki:<a href="http://en.wikipedia.org/wiki/Grep">en</a>) yaparak bulduğumuz <a href="https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/handlersocket/database.cpp">bu</a> dosya işe yarayabilir.</p><h3>HandlerSocket executeSingle Metodu Hakkında</h3><p>Ayrıca dikkat edilmesi gereken başka bir konu executeSingle metodundan dönen sonuç dizisidir. Dönen kayıt sayısına bağlı olarak boyutu değişen dizi içerisinde seçtiğiniz sütun adları yerine sütun sıra idleri ile (<strong>openIndex metodunda yazılan sıra ile</strong>) dönen değerler mevcut. Bu özellik PHP &#8216;nin <a href="http://www.php.net/manual/en/function.mysql-fetch-row.php">mysql_fetch_row</a> fonksiyonuna çok benziyor.</p><h3>Sonuç</h3><p>executeSingle ve diğer metodların kullanımı ve SQL ile performans karşılaştırmalarına sonraki yazılarımızda değineceğiz.</p><p>Ayrıca yazımız sırasında kullandığımız dosyaları <a href="http://blog.mustafakirimli.com/wp-content/uploads/2011/08/PHP-HandlerSocket.zip">buradan indirebilirsiniz</a>.</p><p>İyi Çalışmalar.</p> ]]></content>
  </entry>
  <entry>
    <id>http://mehmetatasoy.com/?p=291</id>
    <title><![CDATA[Miui Custom Rom Yükleme ve Sd Kartta ext3 alan oluşturma]]></title>
    <updated>2011-08-12T12:01:56+00:00</updated>
    <link rel="alternate" href="http://mehmetatasoy.com/miui-custom-rom-yukleme-ve-sd-kartta-ext3-alan-olusturma/"/>
    <summary><![CDATA[Merhaba arkadaşlar. Bu yazımda sizlere root özelliğine sahip htc desire telefonunuza custom romların en bir şahanesi olan Miui rom 2.3.4a yı yüklemeyi ve öncesinde sd kartınızda ext3 alan oluşturarak telefonunuza yüklemiş olduğunuz aplikasyonları otomatik olarak sd kartınıza nasıl kaydettirebileceğinizi anlatacağım. Öncelikle sd karttan başlayalım. Hemen belirteyim bu konuda yazdıklarımın amacı daha önceden de söylediğim gibi [...]]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar. Bu yazımda sizlere root özelliğine sahip htc desire telefonunuza custom romların en bir şahanesi olan Miui rom 2.3.4a yı yüklemeyi ve öncesinde sd kartınızda ext3 alan oluşturarak telefonunuza yüklemiş olduğunuz aplikasyonları otomatik olarak sd kartınıza nasıl kaydettirebileceğinizi anlatacağım.<br />
<span id="more-291"></span><br />
Öncelikle sd karttan başlayalım. Hemen belirteyim bu konuda yazdıklarımın amacı daha önceden de söylediğim gibi miui 2.3.4a custom rom + ext3 alana sahip sd kart oluşturmaya yöneliktir. Başka amaçlar için bu adımları yapmayınız aksi taktirde sorumluluk kabul etmiyorum.</p>
<p>Sd kartta ext3 alan oluşturmak için;<br />
ilk olarak kartınızı bilgisayarınızın bir köşesine yedekleyin. Ardından Gparted linux live cd si oluşturalım. Bunun için <a href="http://sourceforge.net/projects/gparted/files/gparted-live-stable/" title="Gparted iso dosyası" target="_blank">Gparted iso dosyasını buradan indirin</a>. Ardından istediğiniz bir iso burn programı ile (<a href="http://mehmetatasoy.com/wp-content/uploads/2011/08/FreeISOBurner.rar" target="_blank">FreeISOBurner</a>) cd ye yazın.Ardından telefonu usb den bilgisayara bağlayıp, mount sd card seçeneğini seçin ve don&#8217;t ask me again seçeneğini de seçerek okleyin. Sonra bilgisayarı bu cd ile yeniden başlatarak Gparted a giriş yapın. Başlarken size sorular soracaktır. Soruları hatırlamıyorum ama kolay ve anlaşılır sorular soruyor. (hangi dil olsun, vs. ) Bu soruları da yanıtladıktan sonra aşağıdaki gibi bir ekran çıkması gerek<br />
<img src="http://4.bp.blogspot.com/-SunqKXLKmfs/TW8rcU2th4I/AAAAAAAACBI/pTErNrUa33o/s1600/gparted_livecd_desktop.png" alt="Gparted Ekran Görüntüsü" /><br />
Yukarıdaki resimde görüldüğü üzere alt alta listelenmiş bilgisayara takılı tüm harddisklerinizi ve telefonunuzun sd kartını göreceksiniz. bu pencerenin sağ üst köşesinden sd kartınızı seçin. Buraya dikkat sakın ola yanlışlıkla harddisklerinizi seçmeyin, birazdan yapacağımız işlemlerden sonra sd karttaki tüm dosyalarınızı kaybedeceksiniz, aynısını harddisklerinize yapmak istemezsiniz heralde =)<br />
sağ üst köşeden sd kartınızı seçtikten sonra, kartınızı aşağıdaki gibi bölümlendirin.<br />
Önce kartı seçip delete yapın, ardından önce fat32 lik alanı belirleyin.<br />
kartınızın 4 gb olduğunu varsayıyorum;<br />
3gb fat32 primary partion,<br />
sonra max. 1 gb ext3 primary partion,<br />
son olarak istediğiniz gibi bölümlendirdiğinizden eminseniz yukarıdan ok işaretini seçip kartın biçimlendirilmesini bekleyin.<br />
işlem tamamlandıktan sonra bilgisayarı yeniden başlatın windowsunuza geri dönün.<br />
Şimdi bu esnada söyle bir durumla karşılaşabilirsiniz. Telefonunuz bozuk veya hasarlı sd kart uyarısı verebilir. Bunu gidermek için telefonunuzu kapatıp açın. Düzelmediyse şunu söyleyebilirim. Korkmanıza gerek yok. Şuan ihtiyacımız olan tek şey Miui romu ve dil paketini (yani 2 tane zipli dosyayı) sd kartın fat32 alanına atmak. Bunun içinde telefonunuzu kapatıp recovery modundan yeniden başlatın. bu ekranda (aşağıdaki ekran)<br />
<img src="http://stubbedtoe.co.nz/wp-content/uploads/2011/02/cwm1-300x191.jpg" alt="recoverymod ekran görüntüsü" /><br />
&#8220;mounts and storage&#8221; seçeneğinin altında mount sd kart&#8221; seçeneğini seçip sd kartınızı anında windowsta görmeye başlıyorsunuz ve böylece gerekli olan 2 dosyayı (birazdan dosyaları linkleriyle yazacağım) sd kartınıza atıyorsunuz. Bu kısımda aşağıdaki <strong>ÇOK ÖNEMLİ NOT</strong> kısmını inceleyiniz.<br />
<a href="http://mehmetatasoy.com/wp-content/uploads/2011/08/miuiandroid_Desire-2.3.4a.zip" target="_blank">1. dosya Miui Rom 2.3.4a</a><br />
<a href="http://mehmetatasoy.com/wp-content/uploads/2011/08/miuiandroid-2.3.4a_Desire-EN-2.3.4.zip" target="_blank">2. dosya İngilizce Dil paketi</a></p>
<p>bu dosyalarıda sd karta attıktan sonra telefonu bilgisayardan ayırıyoruz.<br />
Şimdi miui romumuzu kuralım. Öncesinde Full wipe yapıyoruz. Yani wipe data ve wipe cache yapıyoruz. Bunları yaptıktan sonra install from sd card seçeneğini seçiyoruz ve önce sd karttan rom dosyasını seçip yüklüyoruz. yükleme bittikten sonra da aynı şekilde dil paketini seçip yüklüyoruz. Ardından da telefonumuzu yeniden başlatıyoruz. ilk açılış uzun sürebilir ve bir kaç restart olabilir. panik yok. 2 3 dakika sonra sorunsuz bir şekilde yeni romunuzu kullanabilirsiniz.</p>
<p>ÇOK ÖNEMLİ NOT : bu romu yükleyebilmeniz için kernel update i de yapmanız gerekmektedir. kernel dosyasını bulamadım ama direk olarak ismini yazıyorum. internetten araştırıp bulabilirsiniz. bulduktan sonra, yukarıdaki işlem sırası şu şekilde olacak.<br />
1. sd karttan kernel update i yüklenir.<br />
2. sd karttan custom rom yuklenir.<br />
3. sd karttan dil paketi yüklenir.</p>
<p>Kullandığım Kernel versiyonu ve adı : 2.6.37.6-cyonogenmod-01494-g8dc02ff  // android@giulio-desktop  #19<br />
Miui rom ları telefonunuza uygun bir şekilde bulabileceğiniz web sitesi : http://miuiandroid.com</p>
<p>yeni işletim sisteminizden birkaç görüntü.</p>
<p><img src="http://digitalslite.info/uploadfiles/droidmilkcom-1284798410/miui-android-rom-overhauls-ui-with-iphone-touchwiz-sense-inspiration-video-_2.jpg" alt="" /></p>
<p><img src="http://www.cyanodroid.com/wp-content/uploads/2011/07/cdf4miui_redesign.jpg" alt="" /></p>
<p>Ardından telefonunuza marketten hemen bir terminal programı yüklüyorsunuz.<br />
ve Terminale aşağıdaki kodları sırasıyla yazıp kodların işlenmesini bekliyorsunuz. en sonunda telefon kendini yeniden başlatacaktır. bu yazdığımız kodlar marketten indirdiğiniz uygulamaların hepsinin  otomatik olarak sd karta taşınmasını sağlayacaktır. Unutulmaması gereken konu ise indirdiğiniz uygulamaları sd karta taşımaya kopyalamaya vs. uğraşmıyorsunuz. indirdiğiniz gibi bırakın uygualamaları, onlar otomatik olarak direk karta kaydedilecektir zaten.</p>
<p>Terminale yazmanız gereken kodlar:<br />
$ su<br />
# a2sd reinstall<br />
# a2sd zipalign</p>
<p><img src="http://cdn.cbsi.com.au/story_media/339307547/miui_1.jpg" alt="" /></p>
<p>İyi günlerde kullanmanız dileğiyle.<br />
<img src="http://www.miui-dev.com/wp-content/uploads/2011/03/miui-phone-ui-3rdedition.gif" alt="" /></p>
]]></content>
  </entry>
  <entry>
    <id>http://www.nurettintopal.com/?p=158</id>
    <title><![CDATA[gplus.to ile Google Plus Adresinizi Kısaltın]]></title>
    <updated>2011-08-11T22:02:38+00:00</updated>
    <link rel="alternate" href="http://www.nurettintopal.com/gplus-to-ile-google-plus-adresinizi-kisaltin/"/>
    <summary><![CDATA[Google uzun zamandır defalarca deneyip te bir türlü başarılı olamadığı &#8220;sosyal ağ&#8221; projesinde bu sefer başarılı olacak gibi gözüküyor. google plus ile hızlı bir çıkış yakaladı ve hızla üye sayısı ile kullanım oranı da artmaktadır. Yeni bir sistem olması ve yeniliklerin zamanla ekleniyor olması nedeni ile yazılım geliştiriciler hemen atağa kalkıp google plus üzerinde kullanıcıların [...]]]></summary>
    <content type="html"><![CDATA[Google uzun zamandır defalarca deneyip te bir türlü başarılı olamadığı &#8220;sosyal ağ&#8221; projesinde bu sefer başarılı olacak gibi gözüküyor. google plus ile hızlı bir çıkış yakaladı ve hızla üye sayısı ile kullanım oranı da artmaktadır. Yeni bir sistem olması ve yeniliklerin zamanla ekleniyor olması nedeni ile yazılım geliştiriciler hemen atağa kalkıp google plus üzerinde kullanıcıların [...]]]></content>
  </entry>
  <entry>
    <id>http://blog.mustafakirimli.com/?p=1548</id>
    <title><![CDATA[MySQL HandlerSocket Plugin için PHP Client Kurulumu]]></title>
    <updated>2011-08-09T05:58:39+00:00</updated>
    <link rel="alternate" href="http://blog.mustafakirimli.com/mysql-handlersocket-plugin-icin-php-client-kurulumu/1548"/>
    <summary><![CDATA[Merhaba arkadaşlar, bu yazımızda MySQL]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar, bu yazımızda MySQL HandlerSocket için PHP client kurulumunu yapacağız.<br /> <span id="more-1548"></span><br /> Yazıya başlamadan önce MySQL HandlerSocket ile alakalı <a title="MySQL vs Memcache vs HandlerSocket MySQL" href="http://blog.mustafakirimli.com/mysql-vs-memcache-vs-handlersocket-mysql/1544">MySQL HandlerSocket tanıtımı</a> ve <a href="http://blog.mustafakirimli.com/mysql-handlersocket-plugin-kurulumu/1553">MySQL HandlerSocket kurulumu</a> yazılarını incelemek isteyebilirsiniz.</p><h3 class="clear">PHP ile MySQL HandlerSocket &#8216;e Bağlanmak için Hangi Paketler Mevcut ?</h3><p>PHP ile MySQL HandlerSocket &#8216;e bağlanmak için 3 tane alternatif paket kullanabilirsiniz. Bunlar;</p><ul><li><a href="http://code.google.com/p/php-handlersocket/">PHP-Handlersocket</a></li><li><a href="https://github.com/tz-lom/HSPHP">HSPHP</a></li><li><a href="http://openpear.org/package/Net_HandlerSocket">NET_HandlerSocket</a></li></ul><div>Biz bu paketler arasından PHP-Handlersocket &#8216;i kullanacağız. Kurulum sırasında PHP 5.3.5-1ubuntu7.2, Apache/2.2.17 (Ubuntu) ve işletim sistemi olarak Ubuntu 11.04 kullanıyoruz.</div><h3>PHP-Handlersocket Kurulumu</h3><p><a href="http://code.google.com/p/php-handlersocket/">PHP-Handlersocket</a> eklenti sayfasından <a href="http://code.google.com/p/php-handlersocket/downloads/detail?name=php-handlersocket-0.1.0.tar.gz&amp;can=2&amp;q=">php-handlersocket-0.1.0.tar.gz</a> dosyasını indiryoruz. 0.1 versiyonunu seçme nedemiz <a href="http://blog.mustafakirimli.com/mysql-handlersocket-plugin-kurulumu/1553">bir önceki yazıda</a> kurduğumuz <strong>libhsclient</strong> ile uyumlu olması.</p><p>Şimdi indirdiğimiz bu dosyayı arşivden çıkarıp oluşan klasörün içine giriyoruz. Bunun için öncelikle bir terminal penceresi açalım ve aşağıdaki komutları yazalım. $ işaretlerinin kullanıcıyı temsil ettiğini bilen arkadaşlarımızı tenzih ederek $ kısmını komut satırına yazmamanız gerektiğini hatırlatıyoruz.</p><pre class="brush:shell">$ cd
$ cd Downloads/
$ tar xvf php-handlersocket-0.1.0.tar.gz
$ cd php-handlersocket/</pre><p>Bu dosya yolları bizim kurulumumuz için geçerli. Dosyayı farklı bir dizine indirdiyseniz kendi dosya yolunuzu vermeniz gerekiyor. Komutları inceleyecek olursak; ilk satır ev dizinimize girer (home), ikinci satır Downloads klasörünün içine girer, üçüncü satır ise biraz önce indirdiğimiz dosyayı arşivden çıkarır ve son satır ise oluşan klasörün içine girer.</p><p>PHP-Handlersocket &#8216;i derleyerek kurmak için aşağıdaki komutları yazacağız:</p><pre class="brush:shell">$ phpize
$ ./configure
$ make
# make install</pre><p>Yukarıdaki komutlarda PHP için MySQL HandlerSocket client kurulumu tamamlanmış oluyor. Derleme komutlarının son satırında bulunan # işareti komutun root kullanıcısı ile çalıştırıması gerektiğini belirtiyor. Eğer isterseniz &#8220;<strong>sudo make install</strong>&#8221; olarakta çalıştırabilirsiniz.</p><h3>PHP-Handlersocket Eklentisini Aktif Etme</h3><p>PHP-Handlersocket eklentisini başarıyla kurduk şimdi sıra php.ini üzerinden eklentiyi aktif etmekte. Öncelikle php.ini dosyamızı yazabilecek şekilde (sudo ile) açıyoruz:</p><pre class="brush:shell">$ sudo gedit /etc/php5/apache2/php.ini</pre><p>Daha sonra <strong>&#8220;extension=handlersocket.so&#8221;</strong> komutunu dosyanın sonuna ekliyoruz ve kaydedip dosyayı kapatıyoruz.</p><p>PHP komut satırından HandlerSocket kullanabilmek için PHP CLI php.ini dosyasına da aynı ayaları uygulamak gerekiyor. Dosyayı aşağıdaki komutla açalım:</p><pre class="brush:shell">$ sudo gedit /etc/php5/cli/php.ini</pre><p>Yine dosyanın sonuna <strong>&#8220;extension=handlersocket.so&#8221;</strong> komutunu ekleyelim ve kaydedip kapatalım.</p><h3>PHP-Handlersocket Eklentisi Kurulum Testi</h3><p>Eğer PHP-Handlersocket eklentisini doğru bir şekilde kurduysanız PHP info çıktınızda  (aşağıdaki PHP kodu ile elde edilir) resimde görüldüğü gibi handlersocket bölümü olması gerekmektedir.</p><pre class="brush:php">&lt;?php

phpinfo();
?&gt;</pre><p><a href="http://blog.mustafakirimli.com/wp-content/uploads/2011/07/php-handlersocket-phpinfo.jpg"><img class="alignnone size-full wp-image-1565" title="php-handlersocket-phpinfo" src="http://blog.mustafakirimli.com/wp-content/uploads/2011/07/php-handlersocket-phpinfo.jpg" alt="php handlersocket phpinfo" width="612" height="262" /></a></p><p>Diğer bir kurulum doğrulama yöntemimiz ise PHP &#8216;nin <a href="http://php.net/class_exists">class_exists</a> fonksiyonu ile. Test için ayrıca php-handlersocket eklentisiyle gelen handlersocket.php dosyasınıda çalıştırabilirsiniz.</p><pre class="brush:php">&lt;?php

if ( class_exists("HandlerSocket") ){
  echo '&lt;p style="color:green;"&gt;HandlerSocket eklentisi mevcut!&lt;/p&gt;';
}else{
  echo '&lt;p style="color:red;"&gt;HandlerSocket eklentisi bulunamadı!&lt;/p&gt;';
}
?&gt;</pre><p>Bir sonraki yazımızda görüşmek üzere..</p> ]]></content>
  </entry>
  <entry>
    <id>http://blog.mustafakirimli.com/?p=1553</id>
    <title><![CDATA[MySQL HandlerSocket Plugin Kurulumu]]></title>
    <updated>2011-07-30T14:00:44+00:00</updated>
    <link rel="alternate" href="http://blog.mustafakirimli.com/mysql-handlersocket-plugin-kurulumu/1553"/>
    <summary><![CDATA[Merhaba arkadaşlar, bu yazımızda MySQL]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar, bu yazımızda MySQL server üzerine MySQL <strong>HandlerSocket plugin kurulumunu</strong> ve konfigürasyonunu inceleyeceğiz.<br /> <span id="more-1553"></span><br /> Daha önce <a title="MySQL vs Memcache vs HandlerSocket MySQL" href="http://blog.mustafakirimli.com/mysql-vs-memcache-vs-handlersocket-mysql/1544">MySQL HandlerSocket</a> plugin &#8216;i incelemiştik. Bu yazı kapsamında (Linux için) MySQL üzerine HandlerSocket plugin kurulumu ve MySQL server ayarlarıyla HandlerSocket &#8216;i aktive etmeyi inceleyeceğiz. Yazı sonunda MySQL HandlerSocket &#8216;in çalışıyor olduğunu gösteren verileri sunucudan okuyor olacağız.</p><h3>MySQL HandlerSocket Kurulum Öncesi</h3><p>Kurulum öncesine her ihtimale karşı sisteminizi yedeklemenizi öneririz. Oluşabilecek sorunlardan dolayı sorumlu olmayı istemiyoruz. Kurulum sırasında Ubuntu 11.04 (natty) @ 64bit ve MySQL 5.1.54-1ubuntu4 kullanıyoruz.</p><p>Plugini derleyerek kurmak isteyenler (MySQL server kaynak koduna ihtiyaç duyuyor) &#8220;WARNING: Cannot Found libtoolize&#8230; input libtool command&#8221; gibi hatalar almamak için &#8221;<strong>libtool, aclocal, autoconf, autoheader ve automake</strong>&#8221; paketlerinin yükledikten sonra <a href="https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/docs-en/installation.en.txt">bu adresten</a> kurulum detaylarına bakabilirler. Ayrıca yine derleyerek kuracak olanlar için bir bilgi; automake kurarsanız aclocal &#8216;i içeriyor. MySQL HandlerSocket pluginini <a href="https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/">MySQL HandlerSocket plugin</a> sayfasından ister <a href="https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/tarball/master">tar.gz formatında</a> ister <a href="https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/zipball/master">zip formatında</a> indirebilirsiniz.</p><h3>MySQL HandlerSocket Kurulumu</h3><p>Kurulum için APT (wiki: <a href="http://en.wikipedia.org/wiki/Advanced_Packaging_Tool">en</a>, <a href="http://tr.wikipedia.org/wiki/Geli%C5%9Fmi%C5%9F_Paketleme_Arac%C4%B1">tr</a>) yi kullanacağız. MySQL HandlerSocket plugin paketleri Ubuntuya 11.04 verisyonundan sonra eklenmiş görünüyor. MySQL HandlerSocket paketlerini aşağıdaki komutları kullanarak kuracağız.</p><p>Bir terminal penceresi açalım ve aşağıdaki komutları yazalım. $ işaretlerinin kullanıcıyı temsil ettiğini bilen arkadaşlarımızı tenzih ederek $ kısmını komut satırına yazmamanız gerektiğini hatırlatıyoruz.</p><pre class="brush:shell">$ sudo apt-get install handlersocket-mysql-5.1 handlersocket-doc libhsclient-dev</pre><p>Bu komutla MySQL HandlerSocket, MySQL HandlerSocket doc ve MySQL HandlerSocket client library paketlerini yüklemiş olduk. İsterseniz Ubuntu Software Center (wiki: <a href="http://en.wikipedia.org/wiki/Ubuntu_Software_Center">en</a>, <a href="http://tr.wikipedia.org/wiki/Ubuntu_Software_Center">tr</a>) üzerinden de bu yüklemeleri yapabilirsiniz.</p><h3>MySQL HandlerSocket Etkinleştirme</h3><p>MySQL HandlerSocket pluginini etkinleştirmek için MySQL &#8216;e root kullanıcısıyla bağlanıyoruz.</p><pre class="brush:shell">$ mysql -u root -p</pre><p>MySQL &#8216;e bağlanmak için sunucu ve kullanıcı bilgileriniz farklı olabilir, bu yüzden kendi MySQL sunucu erişim bilgilerinizi kullanın.</p><p><em>MySQL de yüklü olan eklentileri göster:</em></p><pre class="brush:sql">mysql&gt; SHOW PLUGINS;</pre><pre class="brush:sql">+------------+----------+----------------+---------+---------+
| Name       | Status   | Type           | Library | License |
+------------+----------+----------------+---------+---------+
| binlog     | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| partition  | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| ARCHIVE    | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| BLACKHOLE  | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| CSV        | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| FEDERATED  | DISABLED | STORAGE ENGINE | NULL    | GPL     |
| MEMORY     | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| InnoDB     | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| MyISAM     | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| MRG_MYISAM | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
+------------+----------+----------------+---------+---------+
10 rows in set (0.00 sec)</pre><p><em>MySQL pluginini etkinleştir:</em></p><pre class="brush:shell">mysql&gt; INSTALL PLUGIN handlersocket soname 'handlersocket.so';</pre><p>Bu işlemlerden sonra MySQL &#8216;i yeniden başlatmanız gerekecektir.</p><p><em>MySQL de yüklü olan eklentileri göster:</em></p><pre class="brush:shell">mysql&gt; SHOW PLUGINS;</pre><pre class="brush:shell highlight: 14">+---------------+----------+----------------+------------------+---------+
| Name          | Status   | Type           | Library          | License |
+---------------+----------+----------------+------------------+---------+
| binlog        | ACTIVE   | STORAGE ENGINE | NULL             | GPL     |
| partition     | ACTIVE   | STORAGE ENGINE | NULL             | GPL     |
| ARCHIVE       | ACTIVE   | STORAGE ENGINE | NULL             | GPL     |
| BLACKHOLE     | ACTIVE   | STORAGE ENGINE | NULL             | GPL     |
| CSV           | ACTIVE   | STORAGE ENGINE | NULL             | GPL     |
| FEDERATED     | DISABLED | STORAGE ENGINE | NULL             | GPL     |
| MEMORY        | ACTIVE   | STORAGE ENGINE | NULL             | GPL     |
| InnoDB        | ACTIVE   | STORAGE ENGINE | NULL             | GPL     |
| MyISAM        | ACTIVE   | STORAGE ENGINE | NULL             | GPL     |
| MRG_MYISAM    | ACTIVE   | STORAGE ENGINE | NULL             | GPL     |
| handlersocket | ACTIVE   | DAEMON         | handlersocket.so | BSD     |
+---------------+----------+----------------+------------------+---------+
11 rows in set (0.00 sec)</pre><p>Çıktıdan da anlaşılacağı gibi <strong>handlersocket</strong> plugini DEAMON olarak yüklenmiş ve durumu aktif görünüyor.</p><h3>MySQL HandlerSocket Ayarları</h3><p>Son olarak MySQL konfigürasyon dosyanızın sonuna aşağıdaki ayarları eklemek gerekiyor. Bizim kurulumumuz da MySQL konfigürasyon dosyası &#8220;/etc/mysql/my.cnf&#8221; yolunda. Aşağıdaki komutla dosyayı gedit ile (sadece komut satırı kullanıyorsanız editör vi/vim olacak) açıp ayarları dosyanın sonuna ekliyoruz.</p><pre class="brush:shell">$ sudo gedit /etc/mysql/my.cnf</pre><p><strong>MySQL HandlerSocket Konfigürasyonu</strong></p><pre class="brush:shell">[mysqld]
loose_handlersocket_port = 9998
# okuma istekleri icin port numarasi
loose_handlersocket_port_wr = 9999
# yazma istekleri icin port numarasi
loose_handlersocket_threads = 16
# okuma istekleri icin worker threads sayisi
loose_handlersocket_threads_wr = 1
# yazma istekleri icin worker threads sayisi
open_files_limit = 65535
# es zamanli istek sayisi, maksimum baglanti 
# sayisi goz onunde bulundurularak daha fazla
# baglanti icin bu deger yuksek tutulabilir</pre><h3>MySQL HandlerSocket Kurulum Testi</h3><p>MySQL HandlerSocket plugininin kurulu olup olmadığını anlamanın bir yolu sunucu üzerindeki işlemlere bakmak olacaktır. MySQL &#8216;e login olduktan sonra aşağıdaki komutu çalıştırdığınızda;</p><pre class="brush:sql">mysql&gt; SHOW FULL PROCESSLIST;</pre><pre class="brush:sql">+-----+-------------+-----------------+---------------+---------+------+-------------------------------------------+-----------------------+
| Id  | User        | Host            | db            | Command | Time | State                                     | Info                  |
+-----+-------------+-----------------+---------------+---------+------+-------------------------------------------+-----------------------+
|   1 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|   2 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|   3 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|   4 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|   5 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|   6 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|   7 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|   8 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|   9 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|  10 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|  11 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|  12 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|  13 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|  14 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|  15 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|  16 | system user | connecting host | NULL          | Connect | NULL | handlersocket: mode=rd, 0 conns, 0 active | NULL                  |
|  17 | system user | connecting host | handlersocket | Connect | NULL | handlersocket: mode=wr, 0 conns, 0 active | NULL                  |
| 181 | root        | localhost       | NULL          | Query   |    0 | NULL                                      | SHOW FULL PROCESSLIST |
+-----+-------------+-----------------+---------------+---------+------+-------------------------------------------+-----------------------+
18 rows in set (0.00 sec)</pre><p>Böyle bir çıktı ile karşılaşıyorsanız HandlerSocket plugini kurulmuş demektir. Çıktıda 17 adet handlersocket bağlantısı bulunmakta. Konfigürasyonda olduğu gibi bunların biri yazma (mode=wr) istekleri için, diğer 16 tanesi ise okuma (mode=rd) istekleri için.</p><h3>Sonuç</h3><p>MySQL HandlerSocket plugin serisinin 2. yazısını bitirmiş olduk. Sonraki yazılarda HandlerSocket PHP client kurulumu ve PHP ile MySQL HandlerSocket kullanımına değineceğiz.</p> ]]></content>
  </entry>
  <entry>
    <id>http://blog.mustafakirimli.com/?p=1544</id>
    <title><![CDATA[MySQL vs Memcache vs HandlerSocket MySQL]]></title>
    <updated>2011-07-22T06:24:41+00:00</updated>
    <link rel="alternate" href="http://blog.mustafakirimli.com/mysql-vs-memcache-vs-handlersocket-mysql/1544"/>
    <summary><![CDATA[Merhaba arkadaşlar, bu yazımızda MySQL]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar, bu yazımızda MySQL performans optimizasyonunda önemli bir rol oynayan ve MySQL tablolarına NoSQL  özelliği kazandıran <strong>MySQL HandlerSocket eklentisini</strong> inceleyeceğiz.<br /> <span id="more-1544"></span><br /> Aşağıda linki bulunan blogda 12/23/2010 tarihinde görüpte bugüne kadar inceleme fırsatı bulamadığım bu güzel optimizasyon aracı / eklentisi ile <strong>MySQL &#8216;de çok yüksek performans</strong> elde edebilirsiniz.</p><h3>MySQL HandlerSocket Nedir ?</h3><p>HandlerSocket ile alakalı gördüğümüz ilk yazıdaki yazarın söylediği gibi;</p><p>Web projelerinde performansı arttırmaya yönelik çeşitli sistemler kullanırız. Bunlar arasında en çok kullanılan ise veritabanı tarafında <strong>MySQL</strong> (<a title="Wiki : En" href="http://en.wikipedia.org/wiki/ACID">ACID</a> (<em>atomicity, consistency, isolation, durability</em>) vb. durumlar için), arayüz tarafında <strong>Memcache</strong> (oluşturulmuş HTML çıktıları, istatistikler vb), ayrıca birde <strong>MySQL ile uygulama sunucusu arasına</strong> çalışmak üzere oluşturulmasının <strong>maliyetli yüksek</strong> (statik ürün bilgileri, özel markup sistemlerinden oluşturulmuş ürün fiyatları, kullanıcı bilgileri vb.) sorguları karşılayıp cacheleyek Memcache sunucusu ekleriz.</p><p>MySQL HandlerSocket, yukarıda bahsettiğimiz &#8220;veritabanı ve uygulaması sunucu arasına caching&#8221; durumu için kullanabileceğimiz ve verileri ayrı bir yerde cachelemeye gerek duymayan <a title="DeNA Co.,Ltd resmi sitesi" href="http://www.dena.jp/en/index.html">DeNA Co.,Ltd</a> tarafından MySQL için geliştirilmiş bir <strong>NoSQL pluginidir</strong>.</p><h3>MySQL Handler Socket Nasıl Çalışır ?</h3><p>MySQL HandlerSocket plugini deamon (archlinux:<a title="Deamon Nedir" href="https://wiki.archlinux.org/index.php/Daemon_(T%C3%BCrk%C3%A7e)">tr</a>) olarak çalışır. SQL desteklemediğinden sadece CRUD (wiki: <a title="CRUD Nedir" href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete">en</a>) işlemleri (basit anlamda create, read, update, delete) için kullanılır. SQL (wiki:<a title="SQL Nedir" href="http://tr.wikipedia.org/wiki/SQL">tr</a>) desteklemediği için sql işlemeyle alakalı katmanları kullanmadığından yüksek performans sağlar.</p><p><a href="http://blog.mustafakirimli.com/wp-content/uploads/2011/07/mysql_handlersocket.png"><img class="size-full wp-image-1551 alignleft" title="mysql-handlersocket" src="http://blog.mustafakirimli.com/wp-content/uploads/2011/07/mysql_handlersocket.png" alt="Mysql Handlersocket" width="480" height="287" /></a>Yandaki resimden anlaşılacağı gibi, MySQL HandlerSocket eklentisi standart MySQL client üzerinden SQL çalıştırmada kullanılan adımlardan sadece bir tanesini (<strong>row access</strong>) kullanıyor. Ayrıca bunu yaparken bağlantı başına thread açmak yerine mevcut thread üzerinden sorguları yürütüyor.</p><p>Bunun yanı sıra HandlerSocket <strong>tüm MySQL depolama motorlarıyla</strong> çalışabiliyor (MyISAM, InnoDB vb).</p><p>Ayrıca okuma ve yazma için ayrı TCP portları tanımlayabiliyorsunuz. Bunun için <strong>varsayılan okuma portu 9998, yazma portu ise 9999</strong>.</p><h3></h3><h3>MySQL HandlerSocket &#8216;in Avantajları Neler ?</h3><ul><li><strong>Memcache &#8216;e göre bir çok sorgulama avantajı</strong> : belirttiğiniz indeksler üzerinde arama, limitli arama, aralıklı arama (SQL de bulunan &#8220;IN&#8221; gibi), ayrıca INSERT, UPDATE, DELETE sorguları (WHERE şartı ile)</li><li><strong>Yüksek sayıda eşzamanlı bağlantı</strong> : Kullandığı protokol ve thread pooling teknolojisiyle aynı kaynaklarla daha fazla kullanıcı serve edebilme</li><li><strong>Yüksek peformans</strong> : Sonraki yazılarımızda test ve karşılaştırmalar yapacağız.</li><li><strong>Daha düşük network paketleri</strong> : HandlerSocket protokolü basit ve küçük olduğundandaha küçük boyutlu network paketleri oluşuyor</li><li><strong>Client isteklerini gruplama</strong> : Bağlantı başına thread oluşturmaktansa threadleri ortak kullanıp istekleri grupladığından performans ve stabiliteyi artırıyor</li><li><strong>Çift kayıtların (duplicate) önüne geçin</strong> : Elinizde ki veriyi veritabanında ve Memcache &#8216;de ayrı ayrı tutmaz zorunda değilsiniz. Veritabanındaki verilere Memcache hızında ulaşabildiğinizden veritabanı depolama motorunun önbelleği yeterli.</li><li><strong>Veri bütünlüğünün korunması</strong> : MySQL HandlerSocket kullandığınızda veritabanındaki değişiklikleri (insert, update, delete) başka bir yere (Memcache vb) güncellemek / senkronize etmek zorunda kalmazsınız</li><li><strong>InnoDB güvenilirliği</strong> : MySQL depolama motoru InnoDB kullandığınızda, depolama motorunun tüm özelliklerine sahip bir NoSQL clientınız oluyor</li><li><strong>Kompleks SQL sorgularına devam</strong> : Bir taraftan NoSQL avantajlarından yararlanırken, diğer taraftan backoffice vb. alanlarda kulandığınız kompleks sorgularınızı çalıştırmaya devam edebiliyorsunuz</li><li><strong>Standart MySQL yönetimi</strong> : İşlemleri izlemek, tabloları takip etmek vs. her şey eskiden olduğu gibi</li><li><strong>Kolay kurulum</strong> : MySQL HandlerSocket kullanmak için mevcut yapınızda büyük değişikliklere ihtiyaç yok, yapacağınız işlem sadece bir MySQL plugini kurmak</li><li><strong>Depolama Motorundan bağımsız çalışabilme</strong> : Güncel tüm MySQL depolama motorlarıyla çalışabildiği söyleniyor</li></ul><h3>MySQL HandlerSocket &#8216;in Dezavantajları Neler ?</h3><ul><li><strong>HandlerSocket API &#8216;ını öğrenme zorunluluğu</strong> : Çalıştıracağınız sorgular basit olsa bile hiçbiri &#8220;SELECT, INSERT, DELETE&#8221; ile başlamıyor. Ancak çok korkulacak birşey yok, Memcache &#8216;i öğrenmek kadar zaman harcamanız yeterli. Hatta Memcache &#8216;i anlamaktan çok daha kolay.</li><li><strong>Yetkilendirme mekanızması yok</strong> : Memcache ve diğer NoSQL veritabanlarında olduğu gibi güvenlik ve yetkilendirme için bir seçenek yok. Herkes (her MySQL kullanıcısı) her dataya erişebilir.</li><li><strong>HDD üzerinde çalıştığından I/O yükü</strong> : Yüksek boyutlu dosyalara çok fazla request gelmesi durumunda HDD üzerinde I/O yükü yaratabilir. Ancak Memory depolama motorunu kullanarak hızınıza hız katabilir, I/O yükünden kurtulabilirsiniz.</li></ul><h3>Sonuç</h3><p>Tüm teknolojilerde olduğu gibi HandlerSocket &#8216;İ sadece gerektiğinde kullanarak yüksek performans sağlayabilirsiniz. NoSQL yerine kullanmak çok mantıklı görünüyor. Ayrıca Memory table ile kullanıldığında Memcache yerine geçeceği bazı durumlar olabilir. Memory table + Partition (<a title="MySQL Partition Kullanımı ve Partition Türleri" href="http://blog.mustafakirimli.com/mysql-partition-kullanimi-ve-partition-turleri/328">MySQL Partition Kullanımı</a>) kullanarak performansı maksimum yapmanız mümkün olabilir.</p><p>Bu yazımız biraz translate içerikli olsada sonra ki HandlerSocket yazılarımızda incelemeler yapacağız.</p><h3>Kaynaklar</h3><p><a href="http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html">Yoshinori Matsunobu Blog</a><br /> <a href="https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/">MySQL HandlerSocket Plugini</a><br /> <a href="https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/tree/master/docs-en">MySQL HandlerSocket Dökümanı (en)</a><br /> <a href="http://code.google.com/p/php-handlersocket/">PHP için MySQL HandlerSocket Eklentisi</a></p> ]]></content>
  </entry>
  <entry>
    <id>http://blog.mustafakirimli.com/?p=328</id>
    <title><![CDATA[MySQL Partition Kullanımı ve Partition Türleri]]></title>
    <updated>2011-07-17T09:29:55+00:00</updated>
    <link rel="alternate" href="http://blog.mustafakirimli.com/mysql-partition-kullanimi-ve-partition-turleri/328"/>
    <summary><![CDATA[Merhaba arkadaşlar, bu yazımızda MySQL]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar, bu yazımızda<strong> MySQL &#8216;e 5.1</strong> versiyonunda eklenen bir özellik olan <strong>yatay bölümlemeyi (horizontal partitioning)</strong>  anlatacağız.<br /> <span id="more-328"></span><br /> Yazının kapsamı; partition nedir, partition türleri nelerdir, MySQL hangi partition tiplerini destekler ve partition ne işe yarar sorularının cevabını vermeye çalışmaktır. Sonraki yazılarımızda tek tek partition tiplerini inceleyip örnek SQL kodlarını vereceğiz.</p><h3 class="clear"><strong>Partition Nedir ?</strong></h3><p>Partition, veritabanındaki <strong>tablolar üzerinde uygulanan</strong>, tablonun dikey (kolonların) veya yatay (satırlan) bölünmesiyle tablo verilerinin ayrı ayrı fiziksel dosyalarda tutulmasını sağlayan, verinin belirli bir bölümüyle çalışmak istediğinizde sadece o partition &#8216;a ait fiziksel dosyalar ve indeksleriyle işlem yapan veya tüm tablo verilerini yine tek tabloymuş gibi kullandıran bir özelliktir.</p><h3><strong>Neden Kullanmalıyız ?</strong></h3><p>Partition özelliğini çok yüksek boyutlu ve yoğun işlem gören tablolarda kullanmamız faydalı olacaktır. genellikle <strong>SELECT sorgularımızın performansını arttırmak</strong> için kullanabiliriz. Bazende yavaş çalışan ve MyISAM da table lock yaratan <strong>DELETE sorgularını hızlandırmak</strong> için kullanabiliriz.</p><h3>Partition Türleri Nelerdir ?</h3><p>Üç tür partition vardır;</p><ul><li><strong>Yatay bölümleme (horizontal partitioning)</strong> : Tablo verilerini yatay olarak bölerek uygulanır. Bu bölümlemede satırlar bölünmüş olur. Yatay bölümlemeye ait partition tipleride vardır. Bunlar;</li><ul><li><strong>Range Partitioning</strong> : Tablo verilerini belirli bir aralığa göre bölme,</li><li><strong>List Partitioning</strong> : Tablo verilerini istenilen değerlere göre bölme,</li><li><strong>Hash Partitioning</strong> : matematik fonksiyonu (<code>MOD(expr, num)</code>) kullanarak (bu fonksiyonu partition tiplerinde detaylı anlatacağız) bölme,</li><li><strong>LinearHash Partition</strong> : matematik fonksiyonu (POWER, CEILING, LOG ile algoritma) kullanarak (bu fonksiyonları partition tiplerinde anlatacağız) bölme</li></ul><li><strong>Yatay <strong>Alt Bölümleme (Sub Partitioning)</strong></strong> : Tüm bu yatay partition tiplerine alt bölümleme (<strong>Sub Partition</strong>) ekleyerek bölme</li><li><strong>Dikey bölümleme (vertical partitioning)</strong> : Tablo kolonlarını bölmek suretiyle uygulanan bir yöntemdir. MySQL desteklemediği için değinmeyeceğiz.</li></ul><div>Ayrıca Oracle &#8216;ın desteklediği birçok partition tipi daha vardır.</div><h3>MySQL Hangi Partition Tiplerini Destekler ?</h3><p>MySQL sadece yatay (horizontal) partition ve yatay alt bölümleme (<strong>Horizontal Sub Partitioning</strong>) özelliğini destekliyor. Yani dikey (vertical) partition özelliği MySQL &#8216;de şuan için bulunmuyor. Ayrıca MySQL &#8216;de partition yaparken sadece INT alanlar yada INT &#8216;e çevrilmiş ifadeler (örneğin: <code>TO_DAYS(`last_update`)</code> ) kullanılması gerekmektedir.</p><h3><strong>MySQL Partitioning Nasıl Çalışır ?</strong></h3><p>Kısaca değinecek olursak, MySQL Partitioning belirttiğiniz kırılmları ayrı fiziksel dosyalara ayırarak çalışır (INSERT, UPDATE, DELETE). Bu esnada tablodaki veri bütünlüğünü sağlar ve index yapılarını korur (PRIMARY veya UNIQUE key gibi). Yani normal tabloda olduğu gibi Primary Key bir alana aynı kaydı tekrar INSERT etmez.</p><h3><strong>Örnek Kullanımları ?</strong></h3><p>MySQL partition ihtiyaca göre bir çok şekilde kullanılabilir. Sonraki yazılarımızda örnek senaryo ve kodları bulacaksınız. Ancak biz birkaç senaryoya özetle değinmek istiyoruz.</p><p><strong>Senaryo 1 (SELECT)</strong>: Sitenizde ki satışlar hakkında (aylık 500 bin satış ve 10 yıllık veri olduğunu varsayalım) çeşitli istatistik sorguları oluşturduğumuzu varsayalım. Bu sorguları hızlandırmak için satışların oluşturulma yılına göre ana partition, oluşturulma ayına göre alt partition olarak bölümlere ayırabilirsiniz. Ve böylelikle satış istatistikleri alırken hem sunucunuz fazla yorulmaz hemde sorgu süreleri çok hızlanmış olur.</p><p><strong>Senaryo 2 (SELECT)</strong>: Bir başka kullanım örneği de sitenize gelen ziyaretçilerin kaynaklarını tuttuğunuzu varsayalım. Bu örnekte günlük 300bin ziyaretçi aldığını düşünelim ve yine 10 yıllık data olsun. Ortalama 1 milyar tablo satırımız olacaktır. Burada son 1 ayda sitemize Google Adwords üzerinden gelen ziyaretcileri sorgulayacak olursak, MySQL 1 milyarlık tablo indekslerini dolaşmak zorunda kalacaktır. Ancak biz ziyaret tarihine göre Partition yaparsak, bu aya ait index dosya boyutu çok küçük olacağından sorgu çok hızlı çalışacaktır.</p><p><strong>Senaryo 3 (DELETE)</strong>: MySQL partition &#8216;u bazen DELETE sorgularımızı hızlandırmak için kullanabiliriz. İlk bakışta alakasız bir örnek gibi görülsede senaryo 2 de bulunan örnek üzerinden gidelim. Biz sadece son 10 yılın ziyaretçi kaynaklarını tutumak istiyor olalım. Ve belirli sıklıkla eski dataları silmek istediğimizi varsayıyoruz. Bu durumda MySQL 1 milyar kayıtlı tablo datası ve indekslerini dolaşıp belirttiğimiz tarih aralıklarını bulup silecektir. Ancak MySQL partition kullanırsak o tarihe ait partitionu silerek tüm bu işlemi 1 saniyenin altında bir sürede tamamlamış oluruz.</p><h3><strong>Kısıtlamalar Neler ?</strong></h3><ul><li>Yazımızın girişinde de bahsettiğimiz gibi MySQL 5.1 ve üzeri versiyonları</li><li>Sadece INT alanlar veya INT dönen ifadeler örneğin: <code>TO_DAYS(`last_update`)</code></li><li>MERGE, CSV tablo tiplerinde kullanılamaz (ve bazı depolama motorlarında belirli versiyona kadar desteklenmiyor)</li></ul><div>Burada amacımız translate değil tecrübelerimizi paylaşmak olduğundan, <a href="http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations.html">MySQL partition kısıtlamaları</a> yazısına göz atmanızı öneririz.</div><h3><strong>Sonuç ?</strong></h3><p>Yazımızda da bahsettiğimiz gibi MySQL partition ihtiyaca göre çok farklı kullanım örnekleri ortaya çıkarır. Burada yazılarımıza yorumlarla katılırsanız en yaygın kullanım örneklerini belirlemiş oluruz ve o örnekleri tartışırız.</p><p>Son olarak MySQL partition sadece kullanmış olmak için değil gerçekten ihtiyaç duyulan noktalarda kullanılırsa çok işinize yarayacağını belirtir iyi günler dileriz.</p><p>Kaynak : <a href="http://dev.mysql.com/doc/refman/5.1/en/partitioning.html">MySQL Partitioning</a> (MySQL.com)</p> ]]></content>
  </entry>
  <entry>
    <id>http://blog.mustafakirimli.com/?p=1260</id>
    <title><![CDATA[Google Adwords Reklam Test Sayfası ile TO (CTR) Optimizasyonu]]></title>
    <updated>2011-07-16T06:00:38+00:00</updated>
    <link rel="alternate" href="http://blog.mustafakirimli.com/google-adwords-reklam-test-sayfasi-ile-to-ctr-optimizasyonu/1260"/>
    <summary><![CDATA[Merhaba arkadaşlar, bu yazımızda Google]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar, bu yazımızda Google Adwords &#8216;ün <strong>ip kısıtlama</strong> ve <strong>reklam test sayfası</strong> özelliği ile yaygın olarak karşılaşılan iç kullanıcıların reklamlara tıklamak suretiyle <strong>TO (CTR)</strong> ve <strong>dönüşüm oranlarını</strong> olumsuz yönde etkilenmesini tartışacağız.</p><p><span id="more-1260"></span></p><h3>Bu Durum Nasıl Ortaya Çıkıyor ?</h3><p>Google Adwords kullanan firmaların kafası bazen <strong>yüksek dönüşüm oranları ve Tıklanma Oranlarıyla</strong> karışabilir. İlk bakışta bu sevindirici bir sonuçtur ancak raporlar biraz derinleştirildiğinde, aslında bu yüksek performansın kaynağının Adwords reklamlarından haberdar olmayan <strong>iyi niyetli çalışanlar </strong>ve / veya sitenin arama motorunu yetersiz bulup aradıkları ürünü Google &#8216;a yazmak suretiyle üst sıralarda yer alan firmanızın reklamına (Adwords) tıklayarak kendilerine kolaylık sağlayan çalışanlar olduğunu anlarsınız.</p><p><strong>Şirket çalışanlarının</strong> da sitenin müşterisi olabileceği veya &#8220;kaç kişi, kaç defa tıklayabilir ki?&#8221; mantığıyla gözardı edilen bu husus, müşteri destek veya satış destek çalışanlarının müşterilerine yardım etmek için (müşteri bilgilerinin gizliliği vb. yasal unsurlar gözönünde bulundurularak) <strong>sitede dönüşüm (conversion)</strong> sağlayacak işlemleri yapmasıyla Google Adwords dönüşüm ve karlılık raporlarının alt üst olmasına neden olur. Zira bu raporda bazı reklam gruplarından çok yüksek dönüşüm ve kar elde etmiş gibi görünürsünüz. Hele de tecrübemizle sabit olan 200+ kişilik call center ekibiniz bu işi yaparsa durum içinden çıkılmaz bir hale gelebilir.</p><h3>Nasıl Önlem Alınabilir ?</h3><p>Bu durumun önüne geçmenin iki yolu mevcut; ilki raporlarınızda (harici tool yada kendi yazılımınız mevcutsa) bu IP leri hariç tutmak, ikinci yol ise aşağıda belirttiğimiz Adwords aracını kullanarak bu IP adreslerine reklamlarınızı göstermemeniz olabilir. Tabi ki burada ilgili yerin / ofisin sabit IP kullanıyor olması gerektiğini ve internete çıkan kaç adet IP adresi varsa hepsinin tanımlanması gerektiğini unutmamak lazım. IP adreslerini rapordan hariç tutmanın <strong>tıklama maliyetlerinin önüne geçmeyeceğini</strong> hatırlatarak altını çizmek isteriz.</p><h3>IP Kısıtlama Özelliği</h3><p><a href="http://blog.mustafakirimli.com/wp-content/uploads/2011/07/adwords-ip-haric-tutma.jpg" target="_blank"><img class="alignleft size-medium wp-image-1376" style="border: 0px initial initial;" title="adwords-ip-haric-tutma" src="http://blog.mustafakirimli.com/wp-content/uploads/2011/07/adwords-ip-haric-tutma-300x217.jpg" alt="Google Adwords IP Hariç Tutma" width="300" height="217" /></a>Google Adwords dilerseniz reklamlarınızı belirlediğiniz <strong>IP adresleri veya IP bloklarına göstermeyere</strong>k kısıtlayabilir. Bunu bazen sahte tıklamalar aldığınız ve IP adreslerini bildiğiniz kötü niyetli kullanıcılara uygulayabilirsiniz. Tabi ki Google Adwords &#8216;ün sahte tıklamaları bizim yerimize yönettiğini ve sadece gerekiyorsa bu özelliği kullanmak gerektiğini unutmamak lazım.</p><p>Biz, bu yazımızda bahsettiğimiz iç kullanıcıların yanlış tıklamalarını engellemek için kullanılmasını önerdik. Örnekler ihtiyaçlara göre tabi ki geliştirilebilir.</p><p>Bu aracı, herhangi <strong>bir Adwords kampanyasında iken</strong> (tüm kampanyalar değil) <strong>ağlar</strong> sekmesine geçip oradan<strong> hariç tutulanlar</strong> &#8216;ı açıp sağ altta bulunan &#8220;<strong>IP adresi hariç tutmaları yönet (gelişmiş)</strong>&#8221; linkine ulaşarak kullanabilirsiniz.</p><h3>Adwords Reklam Test Sayfası</h3><p><a href="http://blog.mustafakirimli.com/wp-content/uploads/2011/07/Google-AdWords-Reklam-onizleme-ve-teshisi.jpg" target="_blank"><img class="alignright size-medium wp-image-1377" title="Google-AdWords-Reklam-onizleme-ve-teshisi" src="http://blog.mustafakirimli.com/wp-content/uploads/2011/07/Google-AdWords-Reklam-onizleme-ve-teshisi-182x300.jpg" alt="Google AdWords Reklam Önizleme ve Teşhisi" width="182" height="300" /></a>Google Adwords reklamlarımızın nasıl göründüğünü ve konumlandığını görmeniz için bir <strong>reklam önizleme aracı</strong> mevcut. Bu arada <a href="https://adwords.google.com/d/AdPreview/?hl=tr">Reklam Önizleme Aracı</a> linkinden ulaşabilirsiniz. Bu araçla reklamlarınıza uyguladığınız <strong>ülke, dil, cihaz ve konum</strong> gibi hedeflemeleri rahatlıkla simüle edebilirsiniz. Aracı kullanmak için ilgili hedeflemeleri seçtikten sonra anahtar kelimenizi yazmanız yeterli. <strong>Adwords Reklam Önizleme Aracı</strong> &#8216;nı Google Adwords oturumu açarak kullanırsanız yazdığınız anahtar kelimenin sizin reklamlarınızda olup tetiklenip tetiklenmediğini görebilirsiniz.</p><p>Ayrıca normal Google anasayfası görünümüne test yapmak istiyorsanız <a href="http://www.google.com.tr/search?hl=tr&amp;q=tatil&amp;adtest=on">bu</a> adresi kullanabilirsiniz.</p><p>Bu testlerde reklamlar sadece görüntülenir, tıklama özelliği kapalıdır (href=&#8221;#&#8221; ile). Görüntülenen reklamlar için Adwords &#8216;e hiçbir bilgi yansımaz ve bu sayede Tıklanma Oranınız düşmez.</p><p>Bir sonraki yazımıza kadar şimdilik iyi optimizasyonlar.</p> ]]></content>
  </entry>
  <entry>
    <id>http://yazilim.soysal.biz/?p=273</id>
    <title><![CDATA[MySQL index ne yapar?]]></title>
    <updated>2011-07-13T11:02:32+00:00</updated>
    <link rel="alternate" href="http://yazilim.soysal.biz/mysql-index-ne-yapar/"/>
    <summary><![CDATA[Index &#8216;siz bir MySQL Levent yönünden  Kağıthane &#8211; Gültepe içerisine doğru giden yola benzer. Yol vardır, araç vardır, gidilecek yol bellidir ama bir şekilde gidilmez. 2 km yolu iki saatte gidersiniz.  Eğer Gültepe yolunda 3 &#8211; 5 araba varsa sorun yoktur. Rahatça ilerleyebilirsiniz ama araba sayısı arttıkça işkenceye dönecektir. Eğer ki yolu açıp, gidilecek yolu [...]]]></summary>
    <content type="html"><![CDATA[<p><a href="http://yazilim.soysal.biz/wp-content/uploads/2011/07/gultepe-trafik.jpg"><img class="alignleft size-medium wp-image-274" style="margin: 5px;" title="gultepe-trafik" src="http://yazilim.soysal.biz/wp-content/uploads/2011/07/gultepe-trafik-300x225.jpg" alt="Gültepe Trafiği" width="300" height="225" /></a>Index &#8216;siz bir MySQL Levent yönünden  Kağıthane &#8211; Gültepe içerisine doğru giden yola benzer. Yol vardır, araç vardır, gidilecek yol bellidir ama bir şekilde gidilmez. 2 km yolu iki saatte gidersiniz.  Eğer Gültepe yolunda 3 &#8211; 5 araba varsa sorun yoktur. Rahatça ilerleyebilirsiniz ama araba sayısı arttıkça işkenceye dönecektir.</p>
<p>Eğer ki yolu açıp, gidilecek yolu düzgün tanımlarsanız hiç bir sorun kalmayacak, yol dünyanın diğer bir çok yolu gibi gidilebilir yol halini alacaktır.</p>
<p>MySQL içinde durum aynen budur. Tabloda kayıt sayısı azken index&#8217;in yokluğu pek hissedilmez, kayıt sayısı arttıkça ise index &#8216;siz bir MySQL tablosundan sonuç almak imkansız hale gelecektir.</p>
<p>Peki ne yapar bu index?</p>
<p>Bunu bir örnekle açıklamak daha doğru olur sanırım. Elimizde &#8216;personel&#8217; isimli bir tablonun olduğunu düşünelim:</p>
<p>&nbsp;</p>
<table>
<tbody>
<tr>
<td valign="bottom">ID</td>
<td valign="bottom">isim</td>
<td valign="bottom">cinsiyet</td>
<td valign="bottom">dogumYili</td>
<td valign="bottom">iseGirisTarihi</td>
<td valign="bottom">Departman</td>
</tr>
<tr>
<td valign="top">0</td>
<td valign="top">Hasan Gülşen</td>
<td valign="top">Erkek</td>
<td valign="top">1984</td>
<td valign="top">07/06/2011</td>
<td valign="top">Yazılım</td>
</tr>
<tr>
<td valign="top">1</td>
<td valign="top">Mustafa Kartal</td>
<td valign="top">Erkek</td>
<td valign="top">1986</td>
<td valign="top">07/05/2011</td>
<td valign="top">Yazılım</td>
</tr>
<tr>
<td valign="top">2</td>
<td valign="top">Esin Topçu</td>
<td valign="top">Kadın</td>
<td valign="top">1983</td>
<td valign="top">06/27/2011</td>
<td valign="top">Analiz</td>
</tr>
<tr>
<td valign="top">3</td>
<td valign="top">Hakan Dertli</td>
<td valign="top">Erkek</td>
<td valign="top">1980</td>
<td valign="top">06/16/2011</td>
<td valign="top">Analiz</td>
</tr>
<tr>
<td valign="top">4</td>
<td valign="top">Neşe Soysal</td>
<td valign="top">Kadın</td>
<td valign="top">1982</td>
<td valign="top">06/13/2011</td>
<td valign="top">Yazılım</td>
</tr>
<tr>
<td valign="top">5</td>
<td valign="top">Gözde Gündeş</td>
<td valign="top">Kadın</td>
<td valign="top">1986</td>
<td valign="top">05/27/2011</td>
<td valign="top">Analiz</td>
</tr>
<tr>
<td valign="top">6</td>
<td valign="top">Utku Gayretli</td>
<td valign="top">Erkek</td>
<td valign="top">1979</td>
<td valign="top">05/12/2011</td>
<td valign="top">Yazılım</td>
</tr>
<tr>
<td valign="top">7</td>
<td valign="top">Fatih Çömlekçi</td>
<td valign="top">Erkek</td>
<td valign="top">1987</td>
<td valign="top">05/05/2011</td>
<td valign="top">Yazılım</td>
</tr>
<tr>
<td valign="bottom">8</td>
<td valign="bottom">Gamze Gül</td>
<td valign="bottom">Kadın</td>
<td valign="bottom">1990</td>
<td valign="bottom">05/05/2011</td>
<td valign="bottom">Analiz</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Index&#8217;siz hali ile</p>
<p>SELECT * FROM personel WHERE dogumYili = &#8217;1983&#8242; dediğimiz zaman bütün tablo ram&#8217;e aktarılır ve ram üzerinde bütün kayıtlar tek tek taranarak doğum yılı 1983 &#8216; e eşit olan personel dizisi oluşturulur.</p>
<p>Eğer tablomuzda doğum yılı ile ilgili bir index&#8217;imiz olsaydı. Ram&#8217;e sadece sıralanmış bu index aktarılacaktı</p>
<p>&nbsp;</p>
<table>
<tbody>
<tr>
<td valign="bottom">ID</td>
<td valign="bottom">dogumYili</td>
</tr>
<tr>
<td valign="top">6</td>
<td valign="top">1979</td>
</tr>
<tr>
<td valign="top">3</td>
<td valign="top">1980</td>
</tr>
<tr>
<td valign="top">4</td>
<td valign="top">1982</td>
</tr>
<tr>
<td valign="top">2</td>
<td valign="top">1983</td>
</tr>
<tr>
<td valign="top">0</td>
<td valign="top">1984</td>
</tr>
<tr>
<td valign="top">5</td>
<td valign="top">1986</td>
</tr>
<tr>
<td valign="top">1</td>
<td valign="top">1986</td>
</tr>
<tr>
<td valign="top">7</td>
<td valign="top">1987</td>
</tr>
<tr>
<td valign="top">8</td>
<td valign="top">1990</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Elimizde en küçüğü 1979 olan ve en büyüğü 1990 olan dokuz adet kayıt vat. İkili arama binary search metoduna göre kayıtlar ortadan ikiye bölünür.</p>
<p>0 numaralı kayıt olan 1984 ile 1983 karşılaştırlır. Daha büyük olduğu için daha küçük kayıtların olduğu ilk bölüm tekrar ikeye bölünür. 4 numaralı kayıt olan 1982 ile kıyalarınır. Daha küçük olduğunda geri kalan tek kayıt 1983 ile kıyaslanır ve sonuç dizisine yazdırılır. Son adım olarak dizi içerisindeki id&#8217;ler için tablodan bilgiler çekilir.</p>
<p>Bu yöntemle index&#8217;siz halde 8 adımda gerçekleştirilen arama işlemi 4 adımda bitmiş olur. Daha büyük tablolarda ve daha şanslı durumlarda aradaki adım sayısı farklı daha da açılabilir.</p>
<p>Index en basit haliyle bu işi yapar. Konu derindir. Sığ bırakalım, boğulmayalım. Daha sonra botla açılırız.</p>
<p>&nbsp;</p>
]]></content>
  </entry>
  <entry>
    <id>http://yazilim.soysal.biz/?p=195</id>
    <title><![CDATA[MySQL index ne olaki?]]></title>
    <updated>2011-07-12T11:50:09+00:00</updated>
    <link rel="alternate" href="http://yazilim.soysal.biz/mysql-index-ne-olaki/"/>
    <summary><![CDATA[Küçükten beridir evde biraz dağınık birisiyimdir. Eşyalar pek dolapta durmaz. Aslında bunun için baya gayret ederim. Bugünden sonra toplu olacağım derim, eşyaları düzene koyarım ama malesef bir süre sonra hepsi nöbet yerlerini terkederler. Zamanımın ciddi bir kısmını bulmak için harcarım. Nedense bu dağınıklığım yazılım hayatıma hiç yansımadı. Belkide iş harici dünyamdaki açığı bu şekilde kapatıyorum. [...]]]></summary>
    <content type="html"><![CDATA[<p><img class="alignleft size-medium wp-image-268" style="margin: 5px;" title="daginik-oda" src="http://yazilim.soysal.biz/wp-content/uploads/2011/07/daginik-oda-300x199.jpg" alt="Dağınık Oda" width="300" height="199" /></p>
<p>Küçükten beridir evde biraz dağınık birisiyimdir. Eşyalar pek dolapta durmaz. Aslında bunun için baya gayret ederim. Bugünden sonra toplu olacağım derim, eşyaları düzene koyarım ama malesef bir süre sonra hepsi nöbet yerlerini terkederler. Zamanımın ciddi bir kısmını bulmak için harcarım.</p>
<p>Nedense bu dağınıklığım yazılım hayatıma hiç yansımadı. Belkide iş harici dünyamdaki açığı bu şekilde kapatıyorum.</p>
<p>Yazılımdaki dağınıklık aynen gerçek hayatta olduğu gibi sürecin yavaşlamasına sebeb olur. Özellikle PHP ve MySQL ile yazılım geliştiriyorsanız ekstrem durumlar hariç asıl performans sağlayacağınız kısım database tarafıdır. O nedenle database yapınızın düzgün, indexlerinizin yerinde olması gerekir.</p>
<p><strong>Peki nedir bu index?</strong></p>
<p>İndex aynen aynen bir kitapta aradığınız kolayca bulmanızı sağlayan fihristtir. İndex tek başına bir olgu değildir. Bilgisayarın veri saklama yapısı ile doğrudan alakalıdır. O nedenle o konuda yazdığım yazımı okumanızı tavsiye ediyorum.</p>
<p>1. <a title="Bilgi Saklama ve Çağırma" href="http://yazilim.soysal.biz/bilgisayar-ne-sayar/" target="_blank">Data storage hakkındaki yazım için buradan devam edin.</a></p>
<p>2. Alıcı değilseniz dükkanın önünü kapatmayın. <img src='http://yazilim.soysal.biz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p>1 numarayı tercih edenler için devam ediyorum <img src='http://yazilim.soysal.biz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Veritabanı sunucusu (database server) bir bu sorgudan istek aldığında bu sorguyu mantıklı parçalara ayırır.  Data sıralama (sorting) ve data birleştirme ( joining ) fonksiyonlarının oluşturduğu düzenli talimatlar zincirinden oluşan algoritmalar ile sorgunun sonucu sunulur.</p>
<p>Bazı sorgular anahtardan değer çapırma gibi basitken, bazıları birden çok tablonun ortak alanlarından sonuç çekmek gibi karmaşıktır. Veritabanı sunucusu mümkün olduğunda verimli sonuç dönmeye çalışır. Verimlilik ise kullanılan algoritmanın ne kadar fonksiyon ile bunu başarabildiği ile alakalıdır. Bu durum algoritmanın hesaplama karmaşıklığı (computation complexity) olarak bilinir.</p>
<p>Search, sort, join ve access için farklı algoritmalar kullanılır.  En verimliden en verimsize doğru belli başlı algoritmalar şöyledir :</p>
<ul>
<li>O (1):  Sabit Sıralama</li>
<li>O ( log n): Logaritmik Sıralama</li>
<li>O (n): Logaritmik Sıralama</li>
<li>O (n<sup>X</sup>): Polinominal Sıramala</li>
<li>O (x<sup>n</sup>): Exponansiyel  Sıralama</li>
</ul>
<p>Hesaplama karmaşıklığı terminolojisine göre her bir O terimi yanındaki fonksiyon verilen operasyon tipi için ne kadar data elementi kullanıcağını belirtir. Tabi bu değer en kötü senayoya göredir.  Bilgisayar biliminde maksimuma göre düşünülür. Algoritmadan daha az işlemle sonuç dönebilir.</p>
<p><strong>O (1)  Order</strong> :</p>
<p>Bu algoritmada sonuç sabit sayıda işlemden sonra döndürülür. Tabloda 100,000 veya 1,000,000 kayıt olması işlem sayısını etkilemez. Elbette her sorgu için faklı zamanda sonuç dönebilmesi ihtimali mevcuttur.  En verimli algoritmadır.</p>
<p><strong>O (n) Order :</strong></p>
<p>Bu algoritmada sonuç tablodaki kayıt sayısı ile doğru orantılı olarak artar. Datanın tümünün sıralı olarak okunması gerektiği durumlarda kullanılır.</p>
<p><strong>O (log n) Order :</strong></p>
<p>Sabit ve lineer arasında bir verime sahip algoritmadır. Yaygın ikili arama işlemlerinde kullanılır. Aranacak data iki parçaya bölünür. Aranan verinin bulunmadığı parça elenerek, diğer parça tekrar bölünür. Bu şekilde bölünerek sonuca ulaşılır.</p>
<p><strong>O (n<sup>X</sup>) ve O (x<sup>n</sup>) Order : </strong></p>
<p>Bu iki algoritmada çalışırken ne kadar çok data elemanı varsa o kadar verimsiz olur. Yani index boyutu büyüdükçe verimsizlik artar. Tablo birleştirme gibi karmaşık fonksiyonlarda kullanılan algoritmadır.</p>
<p>&nbsp;</p>
<p>MySQL index olayının çalışma mantığı temel haliyle bu şekildedir. İlerleyen zamanda MySQL index&#8217;in data çağırma üzerindeki etkileri ile alakalı bir yazı yazmayı planlıyorum.</p>
]]></content>
  </entry>
  <entry>
    <id>http://blog.mustafakirimli.com/?p=1252</id>
    <title><![CDATA[Google Adwords Geçmiş (History) ile Reklam Performansını Artırma]]></title>
    <updated>2011-07-09T11:50:55+00:00</updated>
    <link rel="alternate" href="http://blog.mustafakirimli.com/adwords-history-ile-reklam-performansini-artirma/1252"/>
    <summary><![CDATA[Merhaba arkadaşlar, bu yazımızda Google]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar, bu yazımızda Google Adwords <strong>geçmiş (history) performansı</strong> ve geçmiş performansı etkileyen (<strong>sıfırlayan, düşüren ve arttıran</strong>) unsurlara değineceğiz.<br /> <span id="more-1252"></span></p><h3>Geçmiş (History) Performansı Nedir ?</h3><p>Google Adwords geçmiş (history) performansı,  <strong>anahtar kelimelerle oluşup</strong> diğer Google Adwords öğelerine dağılan geçmiş (<strong>şuana kadar</strong>) tıklanma, görüntülenme, tıklama başına maliyet vb. verilerdir. Ancak Google Adwords kalite puanı ve hesap performansı değerlendirmesinde <strong>silinmeyen öğelerin verilerini baz alır</strong>. Performansı düşük olan öğeleri silmek geçmiş (history) hesaplanması için iyi bir kazanım olabilir. Tabi ki bu işlem geçmiş veriyi değiştirmez ancak hesaplamalarda silinen öğeler devre dışı bırakılacağından performans artışı sağlayacaktır.</p><h3>Geçmiş (History) Performansını Sıfırlayan Unsurlar ?</h3><p>Aşağıdaki işlemleri yaparsanız Google Adwords o öğeye ait geçmiş performans bilgisini (mevcut öğeyi silip yenisini oluşturduğundan) sıfırlar.</p><p><strong>Anahtar Kelimeler İçin:</strong> Anahtar kelimeyi veya eşleme türünü değiştirmek anahtar kelimeyi silerek yenisini oluşturacağı için performans veriside sıfırlanacaktır.</p><p><strong>Metin Reklamları İçin:</strong> Metin reklamlarında durum hariç herhangi bir bilgiyi değiştirmeniz reklamı silip yenisini oluşturacağı için performans verisi de sıfırlanır.</p><h3>Geçmiş (History) Performansını Düşüren Unsurlar ?</h3><p>Anahtar kelimelerin ve reklamların kötü performanslı olanları performans datalarını olumsuz yönde etkileyecektir.</p><h3>Geçmiş (History) Performansını Arttıran Unsurlar ?</h3><p>İyi optimize edilmiş hesapların geçmiş performans hesaplamaları ve dolayısıyla kalite puanları yüksek olacaktır. Performansı kötü olan anahtar kelimeleri silmek veya silip başka reklam grubuna taşımak çözüm olabilir.</p><p>Muhtemel hedef URL değişikliklerinde performansı kaybetmemek ve bir miktarda olsa performansı arttırmak için <strong>reklamlar yerine anahtar kelimelere hedef URL girilmesini </strong>öneriyoruz. <strong>Reklamlara girilen hedef URL</strong> anahtar kelimelere girilen hedef URL lerin bağlı olduğu <strong>kırılım / kategori olabilir</strong>. Tabi bu yöntem uygulanırsa anahtar kelimelerin tamamına hedef URL girilmesi gerekir. Girilmemesi durumunda reklam hedef URL si kullanılır ve kırılım / kategori linkine yönlendirme yapılır.</p><p>Ayrıca kullanıcı deneyimine ve genel optimizasyon kategorisine girmesine rağmen başka bir performans arttırma fikri verebiliriz. Kullanıcılar aynı reklamı birçok defa gördüklerinde artık fark edemiyor olabilirler.  Reklam metnini değiştirerek kullanıcıların / müşterilerin ilgisini tekrar çekebilir ve <strong>düşük Tıklanma Oranından kurtulabilirsiniz</strong>.</p><h3>Silinip Tekrar Aktif Edilen Anahtar Kelimelerin Durumu</h3><p>Google Adwords, tam olarak ispatlanamazsa da silinip tekrar aktif edilen anahtar kelimelerin <strong>geçmiş performanslarını belirli bir oranda değerlendirmeye dahil ediyor</strong>. Ancak yinede eğer bir anahtar kelime, reklam grubunu veya kampanyayı geçici olarak durdurmak istiyorsanız silmek yerine durumunu değiştirip duraklatabilirsiniz. Böylelikle hiçbir geçmiş performans kaybı yaşamamış olursunuz.</p><h3>Hedef URL Çalışma Mantığı</h3><p>Reklam grubumuzun adı &#8220;<strong>Yurtcell 3G Modem</strong>&#8221; olsun <img src='http://blog.mustafakirimli.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p><strong>Anahtar Kelimeler:</strong></p><table class="myTable1"><thead><tr><th>Anahtar Kelime</th><th>Hedef URL</th></tr></thead><tbody><tr><td>&#8220;yurtcell 3g kampanya&#8221;</td><td>http://www.yurtcell.com.tr/yurtcell-3g-modem/</td></tr><tr><td>&#8220;yurtcell 3g modem&#8221;</td><td>http://www.yurtcell.com.tr/yurtcell-3g-modem/</td></tr><tr><td>&#8220;yurtcell 3g modem satın al&#8221;</td><td>http://www.yurtcell.com.tr/yurtcell-3g-modem/</td></tr></tbody></table><p><strong>Metin Reklam:</strong></p><table class="myTable1"><thead><tr><th>Metin Reklam</th><th>Hedef URL</th></tr></thead><tbody><tr><td><a href="http://blog.mustafakirimli.com/wp-content/uploads/2011/07/adwords-reklam-ornegi.jpg"><img class="alignnone size-full wp-image-1418" title="adwords-reklam-ornegi" src="http://blog.mustafakirimli.com/wp-content/uploads/2011/07/adwords-reklam-ornegi.jpg" alt="Google Adwords reklam ornegi" width="219" height="80" /></a></td><td>http://www.yurtcell.com.tr/yurtcell-3g-modem/</td></tr></tbody></table><p>Örnekte görüldüğü gibi bir reklam grubumuz olduğunu varsayalım. Kullanıcı &#8220;<strong>yurtcell 3g kampanya</strong>&#8221; anahtar kelimesini tetiklediğinde (arama yaptığında) görünecek reklam (biz bir örnek yaptık tabi ki birden fazla olabilir ve olması iyidir) yukarıdaki olacak ancak kullanıcının yönlendirileceği adres <strong>anahtar kelimenin hedef URL si olacaktır</strong>. Google Adwords anahtar kelime bir hedef URL ye sahipse metin reklamın değil anahtar kelimenin hedef URL sine bakar.</p><p>Bir sonraki yazımızda görüşmemize dek iyi optimizasyonlar.</p> ]]></content>
  </entry>
  <entry>
    <id>http://yazilim.soysal.biz/?p=245</id>
    <title><![CDATA[Bilgisayar, ne sayar?]]></title>
    <updated>2011-07-08T08:11:53+00:00</updated>
    <link rel="alternate" href="http://yazilim.soysal.biz/bilgisayar-ne-sayar/"/>
    <summary><![CDATA[Türkçe çevrisinin ingilizcesinden daha güzel olduğunu düşündüğüm nadir kelimelerden biridir bilgisayar. Zira ingilizcesi compute kelimesinde türemiş olan kelimenin manası hesaplamaktır. Bilgisayarı hesap makinesi ile aynı seviyede tutan bir kelimedir. Halbuki bilgisayar bilgi ve sayar kelimelerinin birleşmesi ile oluşur ki, bilgisayar hakikaten bilgi saymaktadır. Peki bu sayacağı bilgileri nerede saklamaktadır? İşte yazımızın konusu burada başlıyor. Bütün [...]]]></summary>
    <content type="html"><![CDATA[<p><a href="http://yazilim.soysal.biz/wp-content/uploads/2011/07/abakus.jpg"><img class="alignleft" style="margin-top: 5px; margin-bottom: 5px; margin-left: 10px; margin-right: 10px;" title="abakus" src="http://yazilim.soysal.biz/wp-content/uploads/2011/07/abakus-300x234.jpg" alt="Abaküs" width="300" height="234" /></a>Türkçe çevrisinin ingilizcesinden daha güzel olduğunu düşündüğüm nadir kelimelerden biridir bilgisayar. Zira ingilizcesi compute kelimesinde türemiş olan kelimenin manası hesaplamaktır. Bilgisayarı hesap makinesi ile aynı seviyede tutan bir kelimedir. Halbuki bilgisayar bilgi ve sayar kelimelerinin birleşmesi ile oluşur ki, bilgisayar hakikaten bilgi saymaktadır. Peki bu sayacağı bilgileri nerede saklamaktadır?</p>
<p>İşte yazımızın konusu burada başlıyor.</p>
<p>Bütün veri depolama mantığını burda anlatmak gibi bir şansım yok. Aslında böyle bir amacımda yok. <a title="MySQL index" href="http://yazilim.soysal.biz/mysql-index-ne-olaki" target="_blank">MySQL indexlerle alakalı yazı</a>ma temek oluşturması açısından yazma gereği duydum bu yazıyı ve MySQL index merkezli yazacağım.</p>
<p>Veri depolama konusu ele alındığında 3 ana maddeyi ele alabiliriz.</p>
<ol>
<li>Sabit Disk ( Kalıcı Veri Depolama )</li>
<li>Bellek ( RAM )  ( Geçici Data Depolama )</li>
<li>Veri Sayfaları ( Mantıksal Veri Sunma )</li>
</ol>
<p>Sabit Diskler ile ilgili yazımı <a title="Harddiskler Hakkında Yazı" href="http://yazilim.soysal.biz/harddisk-dedigimiz-yenilmez-yutulmaz-icat/" target="_blank">şuradan</a> okuyabilirsiniz.</p>
<p>Bellek dediğimiz icat en basit tanımlama ile geçici depolama birimidir. Bilgisayar açıldığı anda üzerine veri kaydedilmeye başlanır. Kapandığı anda ise üzerindeki tüm veri silinmiş olur. RAM ( Random Access Memory) olarak bilinen aygıt,  Volatile Data Storage ( Uçucu / Geçici Veri Depolama )  olarak tanımlanabilir.  Sabit diskten okunan tüm veri diskin tampon belleğinden ( buffer ) ram&#8217;e aktarılır ve buradan okunup işlem yapılır. Tam tersi harddisk&#8217;e veri kaydetmek için geçerlidir.</p>
<p>RAM &#8216;e veri yazma ve RAM &#8216;den veri okuma herhangi bir fiziksel hareket olmadığı için hızlı gerçekleşir ama diskten veri okuma için aynı şey geçerli değildir.</p>
<p>Disk üzerinde okunması gereken data parçalar halinde ise disk arama ( seeking ) yapmak durumunda kalır ve işlemi yavaşlatır, aksi durumda tek parça blok veri için tarama (  scan ) yapar. Bu işlem çok daha hızlı gerçekleşir. Bu noktada imdadımıza MySQL yetişir.  MySQL &#8216;in farklı veri depolama motorları için farklı formatları vardır.</p>
<p>MySQL sürekli dinamik olan datayı saklayıp okumak ile veriyi verimli bir şekilde saklamak arasında sürekli bir savaş verir.  Yeni bir data eklendiğinde datayı datapage&#8217;de uygun olan araya koymak sureti ile diğer kayıtları kaydırır. Aradan bir kayıt silindiğinde ise tam tersini yapmaya çalışır ama çok hızlı gerçekleşen data akışlarında bir süre sonra parçalanmış bir data page oluşur ve böylece ulaşılması zor bir veri ile karşı karşıya kalırız.</p>
<p>Bu noktada MySQL OPTIMIZE TABLE komutu kurtarıcı olacaktır.  OPTIMIZE TABLE işletim sistemlerindeki disk birleştirmenin ( defragmant ) mikro boyutudur.</p>
<p>Ayrıca MySQL &#8216;in dataları yönetmek için kullandığı header&#8217;lar mevcuttur. Kayıt sayfaları başındaki bu header&#8217;lar data hakkında detaylı bilgi saklar. Bu bilgiler içerisinde datanın boyutu, kaç kayıt saklandığı ve başka bir yazımızın konusu olacak indexler gibi bir çok konuda bilgi saklar.</p>
<p>Sonuç olarak datanın derli toplu olması yani kolay ulaşılabilir olması data akışını ve direk olarak program hızımızı etkileyen en temel faktördür. Sevgiye şevkate açtır, ilgisiz kalmaktan hazzetmez.</p>
<p>Bilgi akış şemasının en kaba anlatımı budur. <a href="http://yazilim.soysal.biz/wp-content/uploads/2011/07/abakus.jpg"><br />
</a></p>
]]></content>
  </entry>
  <entry>
    <id>http://yazilim.soysal.biz/?p=248</id>
    <title><![CDATA[Harddisk Dediğimiz Yenilmez Yutulmaz İcat]]></title>
    <updated>2011-07-04T08:29:40+00:00</updated>
    <link rel="alternate" href="http://yazilim.soysal.biz/harddisk-dedigimiz-yenilmez-yutulmaz-icat/"/>
    <summary><![CDATA[Harddiskin türkçeye çevirisi sabit disk çok kötü bir çeviri değildir ve bu sabit disk gerçekten yenilmez yutulmaz bir icattır.  Bu denli hızlı çalışması akıla zarar verir.   Bilgisayarların bilgilerini depoladıkları birimdir. Bilgisayar açıldığında bilgileri buradan okur, kapandığında gerekli bilgileri yine buraya kaydetmiş olur. MySQL indexlerle alakalı yazıma referans olması açısından harddisk çalışma yapısını çok kısa özetlemek [...]]]></summary>
    <content type="html"><![CDATA[<p><a href="http://yazilim.soysal.biz/wp-content/uploads/2011/07/sabitdisk.jpg"><img class="alignleft size-medium wp-image-250" style="margin: 5px;" title="sabitdisk" src="http://yazilim.soysal.biz/wp-content/uploads/2011/07/sabitdisk-300x187.jpg" alt="Harddisk Plakası" width="300" height="187" /></a>Harddiskin türkçeye çevirisi sabit disk çok kötü bir çeviri değildir ve bu sabit disk gerçekten yenilmez yutulmaz bir icattır.  Bu denli hızlı çalışması akıla zarar verir.   Bilgisayarların bilgilerini depoladıkları birimdir. Bilgisayar açıldığında bilgileri buradan okur, kapandığında gerekli bilgileri yine buraya kaydetmiş olur.</p>
<p><a title="MySQL index" href="http://yazilim.soysal.biz/mysql-index-ne-olaki" target="_blank">MySQL indexlerle alakalı yazı</a>ma referans olması açısından harddisk çalışma yapısını çok kısa özetlemek istiyorum.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://yazilim.soysal.biz/wp-content/uploads/2011/07/harddisk-yapisi.jpg"><img class="alignnone size-full wp-image-246" title="harddisk-yapisi" src="http://yazilim.soysal.biz/wp-content/uploads/2011/07/harddisk-yapisi.jpg" alt="" width="420" height="416" /></a></p>
<p>&nbsp;</p>
<p><em>Kaynak : <a href="http://yazaninsan.files.wordpress.com/2010/12/verikurtarma2.jpg">http://yazaninsan.files.wordpress.com/2010/12/verikurtarma2.jpg</a></em></p>
<p>&nbsp;</p>
<p>Fotoğrafta görüldüğü gibi sabit disk üzerinde veri disk plakalarına kaydedilir. Disk plakaları bağlı oldukları motor sayesinde dakikada 7500 ile 15000 devir arasında dönebilirler. Disk plakaları dönerken, plakalar üzerindeki veri okuma / yazma kafası diye isimlendirdiğimiz hareketli yapı sayesinde içeri veya dışarı taşınır. Veri okuma şu 3 adımda özetlenebilir.</p>
<ol>
<li>Disk okuma kafası plaka üzerindeki doğru track üzerine konumlanır ( Her plakanın belli bir track aralığı vardır )</li>
<li>Verinin bulunduğu sektörler üzerinde mil hareketi beklenir.</li>
<li>İlk sektörden son sektöre veri transfer edilir.</li>
</ol>
<p>Farklı track&#8217;ler, hatta farklı plakalardaki tüm veri okunana kadar bu işlem kendini tekrarlar. Bu süreçte en çok zamanı tamamen fiziksel motor gücüne dayanan 1. ve 2. adım harcar.  Bu adımları hızlandırmanın tek yolu ise motorları güçlendirmek ve daha hızlı hareket etmelerini sağlamaktır. O nedenle daha yüksek rpm ( round per minute) değerine sahip harddiskler daha hızlı data okuyup yazmaktadırlar.</p>
<p>Çok yüksek dönüş hızlarında çalışırken okuma kafası ile disk arasında 0,07 ile 0,2 mm gibi bir aralık bulunur. Manyetik  alan yöntemi ile sabit disk üzerinde 0 ve 1 &#8216;leri okuyarak veri bütünlüğünü oluşturur.  Plakaların çalıştığı ortamdaki en küçük toz zerresi çalışma sistemini bozmaya yetebilir.</p>
<p>Harddisk konusu çok karmaşık bir konu, en sığ bu şekilde anlatabildim.</p>
<p>Ayrıca bu disk plakaları çok parlak olduğundan masamda ayna niyetine kullandığım bir tane mevcut.</p>
<p>Harddiskler ile ilgili detaylı bilgiyi <a href="http://en.wikipedia.org/wiki/Hard_disk_drive" target="_blank">http://en.wikipedia.org/wiki/Hard_disk_drive</a> makalesinden bulabilirsiniz.</p>
<p>Zaten Solid State Drive ( SSD ) şeklinde isimlendirilen ve flash belleklerin çalışma mantığı ile çalışan harddiskler sahaya çıkmaya hazırlanıyor. Yakında masamdaki ayna nostaljik bir özellik kazanacağa benziyor.</p>
<p>Kaydete basayımda server&#8217;ın harddiskine kaydedeyim bu yazıyıda <img src='http://yazilim.soysal.biz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content>
  </entry>
  <entry>
    <id>http://yazilim.soysal.biz/?p=239</id>
    <title><![CDATA[MySQL ile iki tarih arasındaki fark]]></title>
    <updated>2011-07-01T14:58:59+00:00</updated>
    <link rel="alternate" href="http://yazilim.soysal.biz/mysql-ile-iki-tarih-arasindaki-fark/"/>
    <summary><![CDATA[Çok basit gibi görünmesine rağmen programcıya sıkıntı çıkaran durumların başında gelir zaman fonksiyonları. MySQL sağolsun bize tarih saat ile ilgili zibille fonksiyon verir ama iki zaman arasındaki gün sayısını veren direk bir fonksiyon yoktur.  Bunun için en basit yöntem iki zaman arasındaki saniye farkını alıp, bir günün 86400 saniye olmasından yola çıkarak işlem yapmaktır. Örneğin [...]]]></summary>
    <content type="html"><![CDATA[<p><a href="http://yazilim.soysal.biz/wp-content/uploads/2011/07/maya-takvimi.jpg"><img class="alignleft size-medium wp-image-240" style="margin: 5px;" title="maya-takvimi" src="http://yazilim.soysal.biz/wp-content/uploads/2011/07/maya-takvimi-300x298.jpg" alt="Maya Takvimi" width="300" height="298" /></a>Çok basit gibi görünmesine rağmen programcıya sıkıntı çıkaran durumların başında gelir zaman fonksiyonları.</p>
<p>MySQL sağolsun bize tarih saat ile ilgili <a title="MySQL Tarih Saat Fonksiyonları" href="http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html" target="_blank">zibille fonksiyon</a> verir ama iki zaman arasındaki gün sayısını veren direk bir fonksiyon yoktur.  Bunun için en basit yöntem iki zaman arasındaki saniye farkını alıp, bir günün 86400 saniye olmasından yola çıkarak işlem yapmaktır.</p>
<p>Örneğin :</p>
<pre class="brush:sql">SELECT TIME_TO_SEC( TIMEDIFF( '2011-06-06 12:12:12', '2011-05-05 10:10:10' ) ) / 86400</pre>
<p>Yukardaki SQL sorgusu bize ondalık sistemde 32.0847 sayısını üretecektir.</p>
<p>MySQL DATEDIFF kullanarak</p>
<pre class="brush:sql">SELECT ( DATEDIFF( '2011-06-06 12:12:12', '2011-05-05 10:10:10' ) )</pre>
<p>SQL kodunu çalıştırdığımızda 32 verecektir.</p>
<p>Halbuki toplam gün sayımız 32 günden fazladır ve sonuç yanıltıcı olacaktır.</p>
<p>Özetle budur.</p>
]]></content>
  </entry>
  <entry>
    <id>http://www.goktugozturk.com.tr/?p=230</id>
    <title><![CDATA[Proje Tasarımı]]></title>
    <updated>2011-06-30T06:46:30+00:00</updated>
    <link rel="alternate" href="http://www.goktugozturk.com.tr/projeler/proje-tasarimi/"/>
    <summary><![CDATA[Mutlaka okumanızı tavsiye edeceğim proje tasarımı, yönetimi ve bu süreçte yaşanan sıkıntılar üzerine güzel bir yazı; Altı Üstü Yazılım, Proje Tasarımı]]></summary>
    <content type="html"><![CDATA[Mutlaka okumanızı tavsiye edeceğim proje tasarımı, yönetimi ve bu süreçte yaşanan sıkıntılar üzerine güzel bir yazı; Altı Üstü Yazılım, Proje Tasarımı]]></content>
  </entry>
  <entry>
    <id>http://yazilim.soysal.biz/?p=227</id>
    <title><![CDATA[OOP ile Prosedürel Kod Yapısı Karşılaştırması]]></title>
    <updated>2011-06-28T11:02:51+00:00</updated>
    <link rel="alternate" href="http://yazilim.soysal.biz/oop-ile-prosedurel-kod-yapisi-karsilastirmasi/"/>
    <summary><![CDATA[Bir durumun avantajlarından bahsedebilmenin tek yolu onu başka bir durum ile karşılaştırmaktır. OOP&#8217;nin avantajlarından bahsetmek için ise prosedürel kod ile karşılaştırmak lazım gelir. Nesneye dayalı programanın ilk ve en önemli avantajı gerçek hayat ile simüle edilebilmesidir. Örneğin bir araba yapıyorsak arabanın elektrik aksamının methodları bir class dosyasında toplanırken başka bir class dosyasında motor aksamı methodları [...]]]></summary>
    <content type="html"><![CDATA[<p><a href="http://yazilim.soysal.biz/wp-content/uploads/2011/06/keyboard-for-real-coder-big.jpg"><img class="alignleft size-medium wp-image-229" style="margin: 5px;" title="keyboard-for-real-coder-big" src="http://yazilim.soysal.biz/wp-content/uploads/2011/06/keyboard-for-real-coder-big-300x217.jpg" alt="" width="300" height="217" /></a>Bir durumun avantajlarından bahsedebilmenin tek yolu onu başka bir durum ile karşılaştırmaktır. OOP&#8217;nin avantajlarından bahsetmek için ise prosedürel kod ile karşılaştırmak lazım gelir.</p>
<p>Nesneye dayalı programanın ilk ve en önemli avantajı gerçek hayat ile simüle edilebilmesidir. Örneğin bir araba yapıyorsak arabanın elektrik aksamının methodları bir class dosyasında toplanırken başka bir class dosyasında motor aksamı methodları toplanabilir. Böylece programımız gerçek hayattaki çalışma sisteminden çok da farklı olmayacaktır.</p>
<p>İkinci avantaj olarak kodun tekrar kullanılabilmesi yazılabilir. Örneğin motor class&#8217;ımızdan başka bir obje oluşturarak hiç değişiklik yapmadan başka model ya da marka bir araba için kullanabiliriz. Sadece property &#8216;ler ekleyerek yazılıma devam edebiliriz.</p>
<p>Üçüncü avantaj olarak esnek yapı ele alınabilir. Örneğin oluşturduğumuz motor sınıfı çoğu zaman çok küçük bir kaç değişiklik ile yeni bir yazılım içine entegre edilebilir.</p>
<p>Nesneye dayalı programlamanın başka bir önemli avantajı ise modüler yapıda olmasıdır. Programımızda bir bug tespit ettik ise çok rahatlıkla hata olan class&#8217;a veya method&#8217;a ulaşabiliriz.</p>
<p>&nbsp;</p>
<p>Nesneye dayalı programlamanın tek dezavantajı ise küçük işler yapacak, geliştirilmesi istenilmeyecek işler için analiz sürecinin ve kod yazım sürecinin prosedürel yazılıma göre uzun olmasıdır.</p>
<p>Basit scriptler için veya prosedürel yazılmış eski kodlara basit eklemeler yapmak için kodun sistemi ile devam etmek daha avantajlı olabilir.</p>
<p>Programcının kod yazması ile yiğidin yoğurt yiyişi paralel nitelikler taşırlar. Ama kaşık icat edilmişken ben elimle yoğurt yiyeceğim demek yoğurdun elimize yüzümüze bulaşması ile sonuçlanmaktan öte gidemez.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content>
  </entry>
  <entry>
    <id>http://yazilim.soysal.biz/?p=216</id>
    <title><![CDATA[Buton Hareketini Ciddiye Almamak]]></title>
    <updated>2011-06-17T09:56:25+00:00</updated>
    <link rel="alternate" href="http://yazilim.soysal.biz/buton-hareketini-ciddiye-almamak/"/>
    <summary><![CDATA[Belki tıkladığınız butonun kişiliğine karşı direk bir hareketiniz olmayabilir ama yaptığı işi sevmeyebilirsiniz. Örneğin elinizde bir formunuz var, formun bir submit butonu var. İstiyorsunuz ki submit butonu tıklayınca formun action adresine gitmesin. Başka bişiy yapsın. Örneğin çiçek toplasın, gazete okusun ama formun action adresine submit etmesin. Bunun yapan jQuery kodu : event.preventDefault(); &#8216;dur. Örneğin aşağıdaki [...]]]></summary>
    <content type="html"><![CDATA[<p><a href="http://yazilim.soysal.biz/wp-content/uploads/2011/06/destroy3.jpg"><img class="alignleft size-medium wp-image-231" style="margin: 5px;" title="destroy" src="http://yazilim.soysal.biz/wp-content/uploads/2011/06/destroy3-300x200.jpg" alt="Yoket Butonu" width="300" height="200" /></a>Belki tıkladığınız butonun kişiliğine karşı direk bir hareketiniz olmayabilir ama yaptığı işi sevmeyebilirsiniz.</p>
<p>Örneğin elinizde bir formunuz var, formun bir submit butonu var. İstiyorsunuz ki submit butonu tıklayınca formun action adresine gitmesin. Başka bişiy yapsın. Örneğin çiçek toplasın, gazete okusun ama formun action adresine submit etmesin.</p>
<p>Bunun yapan jQuery kodu :</p>
<pre class="brush:js">    event.preventDefault();</pre>
<p>&#8216;dur.</p>
<p>Örneğin aşağıdaki basit örnekte ki jQuery resmi sayfasından alıntıdır, formu normal submit etmeyi durdurup, ajax ile post eder.</p>
<p>&nbsp;</p>
<pre class="brush:xml">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;script src="http://code.jquery.com/jquery-latest.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;form action="/" id="searchForm"&gt;
   &lt;input type="text" name="s" placeholder="Search..." /&gt;
   &lt;input type="submit" value="Search" /&gt;
  &lt;/form&gt;
  &lt;!-- the result of the search will be rendered inside this div --&gt;
  &lt;div id="result"&gt;&lt;/div&gt;

&lt;script&gt;
  /* formumuza bir onay submit işleyicisi ekliyoruz */
  $("#searchForm").submit(function(event) {

    /* formu normal yolla submit etmeyi durduruyoruz */
    event.preventDefault(); 

    /* sayfadan bazı değerler okuyoruz: */
    var $form = $( this ),
        term = $form.find( 'input[name="s"]' ).val(),
        url = $form.attr( 'action' );

    /* Datayı post kullanarak post ediyoruz ve sonucu ekrana yazdırıyoruz */
    $.post( url, { s: term },
      function( data ) {
          var content = $( data ).find( '#content' );
          $( "#result" ).empty().append( content );
      }
    );
  });
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Budur.  Beğenmeyen varsa kullanmasın arkadaş.</p>
]]></content>
  </entry>
  <entry>
    <id>http://yazilim.soysal.biz/?p=179</id>
    <title><![CDATA[CRM Hakkında Kelamlar]]></title>
    <updated>2011-05-30T14:33:37+00:00</updated>
    <link rel="alternate" href="http://yazilim.soysal.biz/crm-hakkinda-kelamlar/"/>
    <summary><![CDATA[Son zamanlarda e-mail marketing kategorisinde bir proje için uğraş veriyorum. Daha önce çok fazla içinde olmadığım bir iş. İşi yaparken partner olarak SilverPop servislerini kullanıyoruz. Arayüzü ve dökümantasyonu adına tam bir felaket. Kesinlikle servislerini tavsiye etmiyorum. Kendim kullanmadım ama euroMessage hakkında aldığım olumlu duyumlar var. Kendi işimde euroMessage denemek istiyorum. Tabi o zamana kadar daha iyi [...]]]></summary>
    <content type="html"><![CDATA[<p><img class="alignleft size-full wp-image-211" style="margin: 5px;" title="bakkal" src="http://yazilim.soysal.biz/wp-content/uploads/2011/05/bakkal1.jpg" alt="" width="300" height="225" /></p>
<p>Son zamanlarda e-mail marketing kategorisinde bir proje için uğraş veriyorum. Daha önce çok fazla içinde olmadığım bir iş. İşi yaparken partner olarak <a title="E-mail Marketing Provider" href="http://www.silverpop.com" target="_blank">SilverPop</a> servislerini kullanıyoruz. Arayüzü ve dökümantasyonu adına tam bir felaket. Kesinlikle servislerini tavsiye etmiyorum. Kendim kullanmadım ama <a title="E-mail marketing" href="http://www.euromsg.com/" target="_blank">euroMessage</a> hakkında aldığım olumlu duyumlar var. Kendi işimde <a title="E-mail marketing" href="http://www.euromsg.com/" target="_blank">euroMessage</a> denemek istiyorum. Tabi o zamana kadar daha iyi bir e-mail marketing provider bulamamış olursam. Önümüzdeki zamanlarda belki bu konu hakkında detaylı bir yazı yazabilirim.</p>
<p>Dönelim yazının temel konusuna.</p>
<p>E-mail marketing CRM&#8217;in bir parçasıdır.  CRM ise Customer Relation Management kelimelerinin baş harflerinden oluşur. Yani bildiğimiz müşteri ilişkileri yönetimidir. Eğer bu konularda bir çalışmanız olacaksa yapacağınız işi konumlamak için temel bir bilgi sahibi olmak gerektiğine inanıyorum.</p>
<p>CRM sattığınız ürünün türüne, müşteri kitlenize, müşterilerinizin alışkanlıklarına göre şekillenir.</p>
<p>Örneğin yıllarca Tosya&#8217;nın Akbük köyünde bakkalık yapan dedem CRM için yüz yüze iletişimin dışında ikinci bir iletişim kanalı seçmemiştir. Kampanyalarını duyurmak mektup ve telefon alternatiflerini hiç bir zaman düşünmemiştir. Bu müşteri kitlesinin dar bir alanda olmasından kaynaklanmaktadır.</p>
<p>Oysa çoklu dil desteği ile bütün dünyaya satış yapan bir e-ticaret firmasının uzun soluklu olabilmesi için müşteriler ile bir çok kanaldan iletişime geçmek zorunluluğu vardır. Mobil veya sabit telefon ilk akla gelen yöntem olduğu kadar, çoğu zaman en rahatsız edici olanıdır. Bunun yanında e-mail kanalı kendinizi daha iyi ifade edebileceğiniz alternatif bir kanaldır. Son zamanlarda sosyal medya siteleri ( facebook.com, twitter.com, vs.) CRM &#8216;deki paylarını ciddi oranda arttırmışlar, şirketler arası potansiyel ölçümünü daha kolay yapılabilir hale getirmişlerdir.</p>
<p>Well hasılı kelam CRM en temelinde budur. Bilinmelidir. Her baba yiğidin CRM &#8216;e yorumu farklı olmalıdır. Bu sayede e-ticarete renk katmalıdır.</p>
]]></content>
  </entry>
  <entry>
    <id>http://yazilim.soysal.biz/?p=182</id>
    <title><![CDATA[Nesneye Dayalı Programlama (Object Oriented Programming – OOP)]]></title>
    <updated>2011-05-26T06:46:06+00:00</updated>
    <link rel="alternate" href="http://yazilim.soysal.biz/nesneye-dayali-programlama-object-oriented-programming-oop/"/>
    <summary><![CDATA[Nesneye Dayalı Programlama veya ingilizce adı ile Object Oriented Programming spagetti diye tabir ettiğimiz düz yazım kod yazan programcıları hep biraz tedirgin etmiştir. Aslında tedirgin olmakta da biraz haklılık payları vardır. Nesneye dayalı programlama kod yazma alışkanlığını tamamen değiştirir. Eğer spagetti kod ile devam ederken birden MVC yapısında OOP ile temellendirilmiş bir kod ile uğraşmak zorunda [...]]]></summary>
    <content type="html"><![CDATA[<p><a href="http://yazilim.soysal.biz/wp-content/uploads/2011/05/apple1.jpg"><img class="alignleft size-full wp-image-205" style="margin: 5px;" title="apple" src="http://yazilim.soysal.biz/wp-content/uploads/2011/05/apple1.jpg" alt="" width="300" height="225" /></a>Nesneye Dayalı Programlama veya ingilizce adı ile Object Oriented Programming spagetti diye tabir ettiğimiz düz yazım kod yazan programcıları hep biraz tedirgin etmiştir. Aslında tedirgin olmakta da biraz haklılık payları vardır. Nesneye dayalı programlama kod yazma alışkanlığını tamamen değiştirir. Eğer spagetti kod ile devam ederken birden MVC yapısında OOP ile temellendirilmiş bir kod ile uğraşmak zorunda kalırsanız muhtemelen bu iki yapıdan da soğumanıza sebeb olur.</p>
<p>Nesneye Dayalı Programlama, Nesneye Yönelik Programlama veya Nesne Yönelimli Programlama gibi isimlendirilebilir.  İşin özü programlamanın nesneyi temel almasıdır. Spagetti kod dediğimiz düz yazım kodlamadan en büyük farkı işlerin sınıflara ( class ) bölünmüş olmasıdır.  Sınıfların altında ise fonksiyonlar yani methotlar yer alır.</p>
<p>Kod yapısında işler bir şirketin departmanlara ayrılması gibi ayrılmıştır. Basit bir örnekle, orta boy bir şirkette pazarlama, muhasebe departmanlarını düşünebiliriz. Şirketin genel gayesi şirketin karını arttırmak olsa da pazarlama ve muhasebe birbirinden bağımsız bir şekilde gündelik işlerini yaparlar. Burdan hareketle programımızda pazarlama ve muhasebe class&#8217;ları ve bu classların altında bu departmanların yaptığı işleri tanımlayan fonksiyonlar olacaktır.</p>
<p>Örneğin günlük şirket karını hesaplayan bir fonksiyon muhasebe class&#8217;ının altında yer alabilir. Pazarlama class&#8217;ının altında ise müşteriler ile görüşme düzenlemek fonksiyonu yer alabilir.</p>
<p>Burdan hareketle şöyle bir personel class dosyalarımız oluşabilir.</p>
<p>&nbsp;</p>
<p>Genel kullanım olarak bir class için bir php dosyası kullanılır ve class.classismi.php şeklinde isimlendirilir.</p>
<p>class.Muhasebe.php :</p>
<pre class="brush:php">
<pre class="brush:php">class Muhasebe{

  function gunlukKar(){

  }

}</pre>
</pre>
<p>&nbsp;</p>
<p>class.Pazarlama.php :</p>
<pre class="brush:php">
class Pazarlama{

  function gorusmeDuzenle(){

  }

}</pre>
<p>şeklinde dosyalarımız oluşur.</p>
<p>&nbsp;</p>
<p>Artık clasımızı</p>
<pre class="brush:php">$muhasebe = new Muhasebe();</pre>
<p>şeklinde çağırabiliriz. Class altındaki fonksiyonumuza ise</p>
<pre class="brush:php">$muhasebe-&gt;gunlukKar();</pre>
<p>şeklinde ya da class&#8217;ı hiç derlemeden</p>
<pre class="brush:php">Muhasebe::gunlukKar();</pre>
<p>şeklinde çağırabiliriz.</p>
<p>&nbsp;</p>
<p>En temel ve basit anlamda OOP mantığı bu şekildedir.</p>
<p>OOP hakkında yazılarım devam edecek  :)</p>
]]></content>
  </entry>
  <entry>
    <id>http://mehmetatasoy.com/?p=283</id>
    <title><![CDATA[Htc Desire Unroot İşlemi]]></title>
    <updated>2011-03-24T15:26:23+00:00</updated>
    <link rel="alternate" href="http://mehmetatasoy.com/htc-desire-unroot-islemi/"/>
    <summary><![CDATA[Merhaba arkadaşlar, Bu yazımızda sizlere rootlamış olduğunuz Htc desire telefonunuz nasıl unroot hale getirebileceğinizi söyleyeceğim. Bu işlemi gerçekleştirebilmek için öncelikle, gold card olarak hazırlanmış bir sd kartınız telefonunuza takılı olması gerekmekte. hemen yapılması gerekenleri aşağıda sırasıyla aktaracağım fakat öncelikle bilinmesi gereken önemli bir noktanın altını çizmek istiyorum. benim anlatacağım yöntem sadece root yetkisini kaybederek telefonunuzu [...]]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar,</p>
<p>Bu yazımızda sizlere rootlamış olduğunuz Htc desire telefonunuz nasıl unroot hale getirebileceğinizi söyleyeceğim.<br />
<span id="more-283"></span><br />
Bu işlemi gerçekleştirebilmek için öncelikle, gold card olarak hazırlanmış bir sd kartınız telefonunuza takılı olması gerekmekte.<br />
hemen yapılması gerekenleri aşağıda sırasıyla aktaracağım fakat öncelikle bilinmesi gereken önemli bir noktanın altını çizmek istiyorum. benim anlatacağım yöntem sadece root yetkisini kaybederek telefonunuzu ilk günkü gibi bir halde kullanmak isteyenlerin yapması gereken bir yöntem. eğer telefonunuzu garanti işlemleri için satıcı firmaya geri gönderecekseniz bu birazdan anlatacağım işlemlere extra olarak bootloader ekranın da silinmesi için gerekli komutları çalıştırıp bir kaç düzenleme de yapmanız gerekmektedir.</p>
<p>- Htc Sync i bilgisayarınıza indirin ve kurun.<br />
- Telefonunuza ait orjinal RUU&#8217;s romlarını <a href="http://forum.xda-developers.com/showthread.php?t=695667">buraya tıklayarak</a> bulun ve indirin.<br />
- ardından telefonunuzu bilgisayarınıza bağlayın ve sync olarak bağlanma metodunu seçin.<br />
- daha sonra da indirmiş olduğunu rom a çift tıklayarak telefonunuzun ilk günkü haline geri dönün.</p>
<p>oluşabilecek sorunlar için hazır cevaplar;<br />
- orjinal romu yüklerken telefon takıldı<br />
+ Çözüm:  telefonu sadece bilgisayardan çıkartın ve yeniden bağlayın, ardından yükleyeceğiniz rom dosyasına yeniden çift tıklayıp kuruluma yenidne başlayın.</p>
<p>- rom yükleme aşamasında &#8220;sending and updating signature&#8221; yazısından sonra error ile karşılaşıyorsanız<br />
+ yüklemeye çalıştığınız rom telefonunuzla uyuşmamaktadır. başka bir rom ile yukarıdaki adımları tekrar edin.</p>
]]></content>
  </entry>
  <entry>
    <id>http://mehmetatasoy.com/?p=271</id>
    <title><![CDATA[Htc Desire Root İşlemi – En Kolay Yöntem]]></title>
    <updated>2011-01-13T14:15:19+00:00</updated>
    <link rel="alternate" href="http://mehmetatasoy.com/htc-desire-root-islemi-en-kolay-yontem/"/>
    <summary><![CDATA[Merhaba arkadaşlar. Bugün sizlere Htc Desire model telefonunuzu sadece ama sadece 3 &#8211; 5 adımda root etme işlemini anlatacağım. Açıkcası bu kadar kolay bir yöntemi görünce &#8220;yürüü bee, kim tutar seni&#8221; diye haykıra haykıra yazasım geldi bu satırları ve yazdım sonunda da. Hemen olayı anlatmaya başlayalım. Bu yöntemde biz linux işletim sistemini kullanarak, telefonumuzu sadece [...]]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar. Bugün sizlere Htc Desire model telefonunuzu sadece ama sadece 3 &#8211; 5 adımda root etme işlemini anlatacağım. Açıkcası bu kadar kolay bir yöntemi görünce &#8220;yürüü bee, kim tutar seni&#8221; diye haykıra haykıra yazasım geldi bu satırları ve yazdım sonunda da.<br />
<span id="more-271"></span><br />
Hemen olayı anlatmaya başlayalım. Bu yöntemde biz linux işletim sistemini kullanarak, telefonumuzu sadece ama sadece 2 adımda rootlamış olacağız. Linux yazısını görünce &#8220;aa, bu yöntem bana göre değil, ben yapamam, linux bilmem ki&#8221; triplerini geçiniz, aşağıdaki yönergeleri okuyunca ne kadar kolay olduğuna sizde inanamayacaksınız.<br />
Öncelikle unrevoked daki herkese bir saygı duruşu ;<br />
<a href="http://mehmetatasoy.com/wp-content/uploads/2011/01/1292233646.jpg"><img src="http://mehmetatasoy.com/wp-content/uploads/2011/01/1292233646-300x225.jpg" alt="" title="1292233646" width="300" height="225" class="aligncenter size-medium wp-image-273" /></a><br />
Hazırlanışı;<br />
- Live CD olarak çalışabilecek Linux işletim sistemi CD si (herhangi bir linux sürümü olabilir, ben slax kullanacağım. <a href="http://www.slax.org/get_slax.php">Buradan </a>Slax indirebilirsiniz, indirdiğiniz iso dosyasını herhangi bir cd yazıcı ile boş bir cd ye yazın.)<br />
- Live Cd nizi oluşturduktan cd sürücüsünün içine live cdyi yerleştirip kapatın lanet olası windowsunuzu <img src='http://mehmetatasoy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  bilgisayarınızı yeniden başlatın.<br />
- Yeniden başlayan bilgisayarınız, cd rom sürücüsü içerisindeki cd ile başlayarak, sizi linux işletim sistemine yönlendirecek. Slax&#8217;ı kullananlar için söylüyorum start ekranı açılınca &#8220;Slax Graphic Mode (KDE)&#8221; seçeneği seçip devam edin.<br />
- Linux işletim sisteminizin masaüstüne geldiğinizde firefox u açıp <a href="http://unrevoked.com/">http://unrevoked.com/ </a>adresine gidin.<br />
- Bu adresten telefonunuzu seçin ve ardından açılan sayfadan &#8220;Download for Linux&#8221; linkini tıklayın ve dosyayı indirmeye başlayın.<br />
- Dosyayı indirdikten sonra masaüstündeki Home iconuna tıklayın ve Downloads klasorunu açın. Burada indirdiğiniz dosyayı göreceksiniz.<br />
- İndirdiğiniz dosyayı extract (sıkıştırılmış dosyayı açmak için) etmek için dosyaya sağ tıklayıp &#8220;Preview in Archiver&#8221; diyin.<br />
- Pencere içinde açılan dosyaya tekrar sağ tıklayıp extract diyin ve görebileceğiniz bir yere sıkıştırılmış dosyayı açın. (Masaüstüne açın gitsin)<br />
- Telefonunuzun  Settings > Applications > Development kısmından  “USB Debugging” modunu seçili hale getirin.<br />
- Telefonuda ayarladıktan sonra bilgisayara bağlayın ve az önce açmış olduğunuz dosyaya çift tıklayın ve telefonunuzun root işlemlerinin gerçekleşmesini bekleyin. </p>
<p>Aşağıdaki videoyu da izlemenizi tavsiye ederim. Çeşitli kanallardan da bu işlem ile ilgili videoları izlemenizi tavsiye ederim.</p>
<div align="center"><object width="480" height="385"><param  name="movie" value="http://www.youtube.com/v/8AuLAmX-LXA?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8AuLAmX-LXA?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></div>
<p>- Sıra geldi en önemli bilgiyi vermeye, hazır mısınız ?<br />
Tüm işlem bu kadar&#8230; evet evet malesef bu kadarcık&#8230; <img src='http://mehmetatasoy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content>
  </entry>
  <entry>
    <id>http://www.goktugozturk.com.tr/?p=209</id>
    <title><![CDATA[IP.Nexus 1.1.0 Türkçe Çeviri Dosyası]]></title>
    <updated>2011-01-06T08:28:40+00:00</updated>
    <link rel="alternate" href="http://www.goktugozturk.com.tr/ipboard/ip-nexus-1-1-0-turkce-ceviri-dosyasi/"/>
    <summary><![CDATA[IP.Board 3 üzerine geliştirilen E-Mağaza uygulaması IP.Nexus için 4 Ocak tarihinde 1.1.0 sürümü yayınlandı. Yayınlanan eklenti ile birkaç özellik üzerinde geliştirmeler yapılmış. Bu güncellemenin getirdiği yenilikleri öğrenmek için resmi sitedeki linki okuyabilirsiniz. Ne yazık ki bu sürümde bazı kritik hatalar mevcut. Bu sebeple çok kısa bir süre sonra IP.Nexus 1.1.1 sürümünün yayınlanacağını tahmin ediyorum. Çeviri [...]]]></summary>
    <content type="html"><![CDATA[IP.Board 3 üzerine geliştirilen E-Mağaza uygulaması IP.Nexus için 4 Ocak tarihinde 1.1.0 sürümü yayınlandı. Yayınlanan eklenti ile birkaç özellik üzerinde geliştirmeler yapılmış. Bu güncellemenin getirdiği yenilikleri öğrenmek için resmi sitedeki linki okuyabilirsiniz. Ne yazık ki bu sürümde bazı kritik hatalar mevcut. Bu sebeple çok kısa bir süre sonra IP.Nexus 1.1.1 sürümünün yayınlanacağını tahmin ediyorum. Çeviri [...]]]></content>
  </entry>
  <entry>
    <id>http://mehmetatasoy.com/?p=259</id>
    <title><![CDATA[Android İşletim Sistemi ve Yedekleme İşlemleri]]></title>
    <updated>2011-01-01T11:52:32+00:00</updated>
    <link rel="alternate" href="http://mehmetatasoy.com/android-isletim-sistemi-ve-yedekleme-islemleri/"/>
    <summary><![CDATA[Beni yedekle, kendini yedekle, herşeyi yedekle&#8230; Merhaba arkadaşlar bugün sizlere android işletim sistemine sahip telefonlarınızdaki verilerinizi nasıl yedekleyebileceğinizden bahsedeceğim. Hemen işe koyulalım ilk görev, kontak listesini yedeklemek; 1. Yöntem &#8211; Gmail Sync Kullanmak Ayarlar kısmından &#8220;Accounts &#038; Sync&#8221; seçip burdan gmail ile contact bilgilerini eşleştirerek kontak listenizin gmaile yedeklenmesini sağlayabilirsiniz. Bu yöntem benim çok tavsiye [...]]]></summary>
    <content type="html"><![CDATA[<p>Beni yedekle, kendini yedekle, herşeyi yedekle&#8230; <img src='http://mehmetatasoy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Merhaba arkadaşlar bugün sizlere android işletim sistemine sahip telefonlarınızdaki verilerinizi nasıl yedekleyebileceğinizden bahsedeceğim.<br />
<span id="more-259"></span><br />
Hemen işe koyulalım ilk görev, kontak listesini yedeklemek;<br />
<strong>1. Yöntem &#8211; Gmail Sync Kullanmak</strong></p>
<p>Ayarlar kısmından &#8220;Accounts &#038; Sync&#8221; seçip burdan gmail ile contact bilgilerini eşleştirerek kontak listenizin gmaile yedeklenmesini sağlayabilirsiniz. Bu yöntem benim çok tavsiye edeceğim bir yöntem değil ama yine de işinize yarayabilir.</p>
<p><strong>2. Yöntem &#8211; SD karta kontak listesini yedeklemek </strong></p>
<p>Telefonunuzun rehberine girip menu tuşuna basıyorsunuz, açılan menuden import/export a basıyorsunuz ve &#8220;export to sd card&#8221; seçeneğini seçiyorsunuz. Ardından size hangi accountları yedeklemek istediğinizi soruyor. Örnegin bende sırasıyla Google, Sim ve telefon numaralarımı sordu. Bende sırasıyla tek tek hepsini yedekledim. Bir tane accountu seçip yedekle dediğinizde size yedeklenecek dosyanın dizin yolunu söyleyecek ve emin misiniz diye soracaktır. Genellikle yedekleme yaptığı dizin şu şekildedir ; /sdcard/google_account_xxxx_00001.vcf&#8221;<br />
burada xxx ile yazdığım gmail account username oluyor. yani size vcf uzantılı bir dosya veriyor.</p>
<p>Bu şekilde bütün hesaplarınızı yedekledikten sonra telefonunuzu bilgisayara bağlayıp bu dosyaları bilgisayarınıza taşiyabilirsiniz.</p>
<p>Olaki bir gün yedeklerinize ihtiyacınız oldu aynı şekilde menu butonuna bastığınızda bu sefer import from sd kart diyip hangi hesaba içeri aktarma işlemi yapacağınızı seçiyorsunuz. ardından telefonunuz otomatik olarak sd kartta ilgili dosyayı arayıp bulup kişileri içeri aktarmaktadır.</p>
<p><strong>Mesajları Yedekleme</strong></p>
<p>Günümüzde artık telefonların harici hafizaları çok büyük olduğu için sms gibi çok küçük boyuttaki verileri neredeyse limitsiz olacak derecede çok sayıda sistemde saklayabiliyoruz. Tabiki bunları saklıyorsak bir sebebi vardır <img src='http://mehmetatasoy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  o zaman bunlarıda yedekleyemeliyiz.</p>
<p>Android marketten SMS Backup + uygulamasını indirip mesajlarınızı gmail hesabınıza yedekleyebilirsiniz. Farklı yöntemlerle de yedekleme işlemini sd karta gerçekleştirebilirsiniz ama ben bu yöntemi seçiyorum, biraz daha temiz ve zahmetsiz olduğu için.<br />
Programın kullanımı basit, gmail hesap bilgilerinizi program vasıtasıyla girip gmail hesabınız içerisinden program için &#8220;grand access&#8221; veriyorsunuz. Bu izin programın mesajlarınıza ulaşıp bunları gmail hesabınıza yedeklemenizi sağlayacak izinleri içermektedir. &#8211; bunun dışında kim bilir hangi bilgilerime de ulaşıyordur bu program, maillerime de ulaşabilir, gmail hesabım benim için çok önemli sahşi bilgiler içermektedir diyorsanız TAVSİYEM bu yöntemi kullanmayınız -</p>
<p><a href="http://mehmetatasoy.com/wp-content/uploads/2011/01/smsbackup.jpg"><img src="http://mehmetatasoy.com/wp-content/uploads/2011/01/smsbackup-300x186.jpg" alt="" title="smsbackup" width="300" height="186" class="aligncenter size-medium wp-image-260" /></a><br />
gmail hesabınızla smslerinizin eşleştirilmesi zaman alabilir. bende 1300 civarında sms vardı, yaklaşık 20 dakikada hepsini gmail hesabıma attı. SMS adında bir klasor oluşturup bütün mesajlarımı içerisine başarıyla yerleştirdi.<br />
Mesajlarınıza ihtiyacınız olduğunda aynı program sayesinde restore diyerek mesajlarınızı gmail hesabınızla eşitleyebiliyorsunuz.<br />
<a href="http://mehmetatasoy.com/wp-content/uploads/2011/01/image13.png"><img src="http://mehmetatasoy.com/wp-content/uploads/2011/01/image13.png" alt="" title="image13" width="230" height="381" class="aligncenter size-full wp-image-261" /></a></p>
<p><strong>Uygulamaları Yedekleme</strong></p>
<p>Hemen android markete girip Astro File Manager programını indiriyoruz. Bu uygulama sadece yedekleme için değil dizin listeleme, bir dosyayı bir yerden başka bir yere kopyalama, taşıma, dosya silme vb. birçok işlemi gerçekleştirebilmektedir. aynı zamanda da menu kısmında &#8220;tools&#8221;a geldiğinizde telefonunuzda yüklü olan uygulamaların sd karta yedeklemesini de gerçekleştirebilmektedir. İhtiyaç olduğunda tekrar aynı yere gelip Backed up Apps kısmından var olan tüm uygulamaları geri yükleyebilirsiniz.</p>
<p><a href="http://mehmetatasoy.com/wp-content/uploads/2011/01/afm2.jpg"><img src="http://mehmetatasoy.com/wp-content/uploads/2011/01/afm2.jpg" alt="" title="afm2" width="257" height="386" class="alignleft size-full wp-image-262" /></a><a href="http://mehmetatasoy.com/wp-content/uploads/2011/01/astro-file-manager-backup.jpg"><img src="http://mehmetatasoy.com/wp-content/uploads/2011/01/astro-file-manager-backup.jpg" alt="" title="astro-file-manager-backup" width="267" height="400" class="alignright size-full wp-image-263" /></a></p>
<p>Masaüstünü ve uygulamaların kısa yollarını yedeklemek için ise  Titanium Backup programını tavsiye ediyorum, fakat bu program sadece root edilmiş telefonlarda kullanılabiliyor. Bugünlerde telefonumu yeni bir yöntemle root etmeye çalışacağım, eğer başarılı olursam sizlere bu root işleminin nasıl yapıldığını da sitemde açıklayacağım.</p>
<p>Anlatmaya çalıştıklarım arasında yanlış, eksik ya da farklı şeyler olduğunu düşünüyorsanız, lütfen benimle iletişime geçmekten veya yorum yazmaktan çekinmeyiniz.</p>
]]></content>
  </entry>
  <entry>
    <id>http://mehmetatasoy.com/?p=252</id>
    <title><![CDATA[Android – Pil Ömrü İyileştirme Önerileri]]></title>
    <updated>2010-12-31T12:45:19+00:00</updated>
    <link rel="alternate" href="http://mehmetatasoy.com/android-pil-omru-iyilestirme-onerileri/"/>
    <summary><![CDATA[Merhaba arkadaşlar. Bu konumuzda sizlere Andoid işletim sistemine sahip olan telefonunuzu daha uzun süre, şarj etmeden kullanabilmeniz için sizlere tavsiyelerde bulunacağım. Hemen ilk ve en önemli konudan başlayalım. Task killer&#8217;lar&#8230; Tavsiyem task killerlardan uzak durun. Zira bir programı sonlandırmak için task killer kullandığınızda yapılan işlemleri sırayla gözden geçirelim. önce kapatmak istediğiniz bir program için yeni [...]]]></summary>
    <content type="html"><![CDATA[<p>Merhaba arkadaşlar. Bu konumuzda sizlere Andoid işletim sistemine sahip olan telefonunuzu daha uzun süre, şarj etmeden kullanabilmeniz için sizlere tavsiyelerde bulunacağım.<span id="more-252"></span></p>
<p>Hemen ilk ve en önemli konudan başlayalım. Task killer&#8217;lar&#8230; Tavsiyem task killerlardan uzak durun. Zira bir programı sonlandırmak için task killer kullandığınızda yapılan işlemleri sırayla gözden geçirelim.</p>
<p>önce kapatmak istediğiniz bir program için yeni bir program açıyorsunuz. (Task Killer)<br />
ardından bu programın içerisinde kapatmak istediğiniz programları seçip, kapatmak istiyorsunuz fakat burda dikkat edilmesi gereken şey şu; siz bu açık programları kapatmak için de işlemçiye ekstra yük getiriyorsunuz ve bu da pilin kullanılmasına yol açar ki bu istemediğimiz birşeydir. O yüzden tavsiye burada geliyor.</p>
<p>- android işletim sisteminin bu tür programlara aslında çok da fazla ihtiyacı yok, hatta hiç yok diyebiliriz. Bu yüzden sadece takılan açılmayan yada haftada bir kere iki kere kullandığınız programları kapatmayı deneyin. Bunu da ayarlar menusunden application kısmından force to stop diyerek durdurabilirsiniz.<br />
- ekran ışığını kapalı iç ortamlarda kısık tutun. Amoled ekranlarda dışarı ortamlarda ekran parlaklığını ne kadar arttırsanız o kadar görünebilir bir görüntü elde edersiniz, o yüzden masaüstünüze ekran parlaklığı, wireless, gps, bluetooth, seçeneklerini tek tuşla açıp kapamaya yarayan wigdetlar kullanın bu sayede bulunduğunuz ortama göre uyum gösterebilirsiniz.<br />
- gereği olmadığı sürece 3g, gps, wi-fi yi kapalı tutun.<br />
- live wallpaperlar ve benzeri masaüstündeki hareketli nesneler çokça pil tüketmektedir, bunları azaltabilir veya hiç kullanmayabilirsiniz.<br />
- auto sync nu kapatın. sürekli olarak arka planda çeşitli eşitleme işlemleri çalışmaktadır. bunu iptal ederek pil ömründen kazanabilirsiniz.</p>
<p>Bu ve bunun gibi davranışlar telefonunuzu şarj etmeden daha uzun süre kullanmanıza yardımcı olacaktır.</p>
<p>- </p>
]]></content>
  </entry>
  <entry>
    <id>http://www.goktugozturk.com.tr/?p=198</id>
    <title><![CDATA[IP.Nexus 1.0.3 Türkçe Çeviri Dosyası]]></title>
    <updated>2010-12-30T10:52:33+00:00</updated>
    <link rel="alternate" href="http://www.goktugozturk.com.tr/ipboard/ip-nexus-1-0-3-turkce-ceviri-dosyasi/"/>
    <summary><![CDATA[IP.Nexus, IP.Board 3 üzerine kurularak forumunuza Mağaza, Abonelik, Bağış ve Reklam gibi özellikler sağlayan ücretli bir eklenti paketidir. Daha detaylı bilgiye ulaşmak veya satın almak için IP.Nexus adresini ziyaret edebilirsiniz. Notlar Bu çeviri sadece kullanıcı ekranlarını kapsamaktadır. Yönetici Paneline ait dosyalar çevrilmemiştir. Türkçe çevirisi IP.Nexus 1.0.3 üzerinden yapılmıştır. Henüz çok yeni bir eklenti olduğu için [...]]]></summary>
    <content type="html"><![CDATA[IP.Nexus, IP.Board 3 üzerine kurularak forumunuza Mağaza, Abonelik, Bağış ve Reklam gibi özellikler sağlayan ücretli bir eklenti paketidir. Daha detaylı bilgiye ulaşmak veya satın almak için IP.Nexus adresini ziyaret edebilirsiniz. Notlar Bu çeviri sadece kullanıcı ekranlarını kapsamaktadır. Yönetici Paneline ait dosyalar çevrilmemiştir. Türkçe çevirisi IP.Nexus 1.0.3 üzerinden yapılmıştır. Henüz çok yeni bir eklenti olduğu için [...]]]></content>
  </entry>
  <entry>
    <id>http://mehmetatasoy.com/?p=248</id>
    <title><![CDATA[HTC Desire Pil Kalibrasyonu]]></title>
    <updated>2010-12-28T22:28:15+00:00</updated>
    <link rel="alternate" href="http://mehmetatasoy.com/htc-desire-pil-kalibrasyonu/"/>
    <summary><![CDATA[Merhabalar. Bu yazımda Htc Desire model telefonunuz eksi yönlerinden biri olan pil süresinin iyileştirilmesi hakkında bir kaç yardımcı bilgi sunacağım. Eğer sizde bir Htc Desire sahibi olarak kısa pil ömründen şikayetçi iseniz, bunun için wi-fi, gps, 3g gibi özellikleri sürekli kapalı tutup tasarruf yaparak taklalar atmaktan yorulduysanız, aşağıda anlatacağim pil kalibrasyonunu yaptıktan sonra çok daha [...]]]></summary>
    <content type="html"><![CDATA[<p>Merhabalar. Bu yazımda Htc Desire model telefonunuz eksi yönlerinden biri olan pil süresinin iyileştirilmesi hakkında bir kaç yardımcı bilgi sunacağım.<br />
<span id="more-248"></span><br />
Eğer sizde bir Htc Desire sahibi olarak kısa pil ömründen şikayetçi iseniz, bunun için wi-fi, gps, 3g gibi özellikleri sürekli kapalı tutup tasarruf yaparak taklalar atmaktan yorulduysanız, aşağıda anlatacağim pil kalibrasyonunu yaptıktan sonra çok daha fazla pil ömrüne sahip olabileceksiniz !</p>
<p>1. Telefonu şarj cihazına bağlayın ve led yeşil olana kadar telefonu şarj edin.<br />
2. Led yeşil yandıktan sonra telefonu şarjdan çıkartın ve telefonu kapatın.<br />
3. Sonra telefonu kapalıyken tekrar şarj cihazına bağlayın ve led yeşil yanana kadar şarj olmasını bekleyin.<br />
4. Ardından telefonu açın ve tamamen açılmasını bekleyin, tamamen açıldıktan sonra telefonu tekrar kapatın ve tekrar şarj cihazına bağlayın. Led yeşil olana kadar şarj edin.<br />
5. Led yeşil yandıktan sonra telefonu şarjdan çekin ve kullanmaya başlayın.</p>
<p>Bu sayede pilinizin kalibrasyonu tamamlanmış olacak. Kimileri hiçbir değişiklik görmeyebilir pil ömründe, kimileri ise gerçekten gözle görülür bir şekilde pil ömründe artış görecektir. Bunu sadece bir kere yapmanız yeterlidir.</p>
<p>Android işletim sisteminin daha optimize ve uygun kullanımı ile pil süresini arttırmaya dayalı yeni bir başlık yayınlayacagım. O kısımdan da gerekli düzenlemeleri kendi telefonunuza uygulayarak pil ömrünü %20 %30 arttırabilirsiniz.</p>
<p>Edit: <a href="http://mehmetatasoy.com/android-pil-omru-iyilestirme-onerileri/">Android – Pil Ömrü İyileştirme Önerileri</a> </p>
]]></content>
  </entry>
  <entry>
    <id>http://mehmetatasoy.com/?p=238</id>
    <title><![CDATA[Android SDK r6]]></title>
    <updated>2010-12-22T09:12:20+00:00</updated>
    <link rel="alternate" href="http://mehmetatasoy.com/android-sdk-r6/"/>
    <summary><![CDATA[Merhabalar. Artık bu katagori altında ( Android Downloads ) Android ile ilgili paylaşılabilicek her türlü dosyayı sizlerle paylaşacağım. Acil ihtiyaçtan dolayı Android SDK r6 ya buraya tıklayarak ulaşabilirsiniz.]]></summary>
    <content type="html"><![CDATA[<p>Merhabalar. Artık bu katagori altında ( Android Downloads ) Android ile ilgili paylaşılabilicek her türlü dosyayı sizlerle paylaşacağım.</p>
<p>Acil ihtiyaçtan dolayı Android SDK r6 ya <a href="http://getipaddress.me/android-sdk_r06-windows.zip">buraya </a>tıklayarak ulaşabilirsiniz.</p>
]]></content>
  </entry>
  <entry>
    <id>http://mehmetatasoy.com/?p=208</id>
    <title><![CDATA[Near Field Communication (NFC) Ne İşe Yarar ?]]></title>
    <updated>2010-12-10T08:26:52+00:00</updated>
    <link rel="alternate" href="http://mehmetatasoy.com/near-field-communication-nfc-ne-ise-yarar/"/>
    <summary><![CDATA[Merhabalar. NFC türkçesi Yakın Alan İletişimi olan yeni nesil kablosuz iletişim teknolojisidir. Bu teknolojiye sahip cihazların kendi aralarında yakın mesafeli olarak iletişimini sağlar. 2002 yılında Sony ve Philips firmaları ortaklığıyla geliştirilen teknolojiden bahsetmemin sebebi, Nexus S in bu teknolojiyle birlikte geleceğindendir. Kullanım olarak barcode okuyucuyu düşünün fakat bu sefer birbirini görmesi gereken veya okutmanız gereken [...]]]></summary>
    <content type="html"><![CDATA[<p>Merhabalar. NFC türkçesi Yakın Alan İletişimi olan yeni nesil kablosuz iletişim teknolojisidir. Bu teknolojiye sahip cihazların kendi aralarında yakın mesafeli olarak iletişimini sağlar.<span id="more-208"></span><br />
2002 yılında Sony ve Philips firmaları ortaklığıyla geliştirilen teknolojiden bahsetmemin sebebi, Nexus S in bu teknolojiyle birlikte geleceğindendir. <img src='http://mehmetatasoy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Kullanım olarak barcode okuyucuyu düşünün fakat bu sefer birbirini görmesi gereken veya okutmanız gereken bir barcode yok, bilgiler iki cisimin birbirleriyle haberleşmesini sağlayan NFC cihazının içerisine gömülü bir şekilde yer almaktadır.<br />
Ayrıca diğer kablosuz iletişim teknolojilerinden çok daha kısa mesafeli bir teknoloji olmasının sebebi tamamen kullanıcıların daha rahat kullanımının gerçekleştirilmesi içindir. Yaklaşık 2 &#8211; 4 cm arasında çalışmaktadır. Aşağıdaki videodan Nexus S in bu teknolojiyi nasıl ve ne amaçla kullanılabileceğinden bahsedilmektedir.<br />
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/wk5mUdeEF8c?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/wk5mUdeEF8c?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="570" height="375"></embed></object></p>
]]></content>
  </entry>
  <entry>
    <id>http://mehmetatasoy.com/?p=205</id>
    <title><![CDATA[ADB Driver Kurulumu]]></title>
    <updated>2010-12-09T12:57:57+00:00</updated>
    <link rel="alternate" href="http://mehmetatasoy.com/adb-driver-kurulumu/"/>
    <summary><![CDATA[Merhabalar. Bu sefer sizlere androidli telefonlarınızı bilgisayarınıza bağladığınızda USB Debugging modunda çalıştırabilmeniz için gerekli olan ADB Driver ın nasıl yükleneceğini anlatacağım. Aslında yükleme işlemi ve yapılacaklar oldukça basit fakat her zaman herşey teorikte söylendiği gibi gitmiyor. ilk yapılması gereken telefonunuzla birlikte gelen HTC Sync programını bilgisayarınıza kurun. Ardından telefonunuzu bilgisayarınıza bağlayın. Bu sırada izin verin [...]]]></summary>
    <content type="html"><![CDATA[<p>Merhabalar. Bu sefer sizlere androidli telefonlarınızı bilgisayarınıza bağladığınızda USB Debugging modunda çalıştırabilmeniz için gerekli olan ADB Driver ın nasıl yükleneceğini anlatacağım.<br />
<span id="more-205"></span><br />
Aslında yükleme işlemi ve yapılacaklar oldukça basit fakat her zaman herşey teorikte söylendiği gibi gitmiyor.</p>
<p>ilk yapılması gereken telefonunuzla birlikte gelen HTC Sync programını bilgisayarınıza kurun. Ardından telefonunuzu bilgisayarınıza bağlayın. Bu sırada izin verin Bilgisayarınız telefon için çeşitli driverları yüklemeye çalışşın.<br />
Sonra telefonunuzdan USB Debugging modunu aktir hale getirin. (Settings->Applications->Development->USB debugging mode) Bu seçimi yaptıktan sonra bilgisayarınız ADB driverını yüklemeye çalışacak.</p>
<p>İki durum söz konusu;</p>
<p>Şayet driverı bulur ve yüklerse hersey tamamdır. Çok sanslısınız.(Bilgisayarınızda Android sdk yüklü olduğunu var sayıyorum ve driverı ilk seferde bulamayınca dosyanın adres yolunu android sdk klasorunuz altında tools klasorunun altına belirttiğinizi varsayıyorum. Bu şekilde bir kurulumu başarı ile sağlarsanız gerçekten, sanşlısınız.)</p>
<p>diğer durum da yani, driverı yükleyemezse; <a href="http://jump.fm/NLUXO">bu dosyayı</a> indirin.(HTC DESIRE ICINDIR)<br />
ve bilgisayarın aygıt yöneticisine giderek, adb devices ı yeniden kurmayı deneyin ve driver kaynağı olarak indirdiğiniz dosyayı gösterin.<br />
Olay tamamdır.</p>
]]></content>
  </entry>
  <entry>
    <id>http://www.nurettintopal.com/?p=127</id>
    <title><![CDATA[Facebook’un yeni oyuncağı… “Social Inbox”]]></title>
    <updated>2010-11-16T21:30:17+00:00</updated>
    <link rel="alternate" href="http://www.nurettintopal.com/facebook-un-yeni-oyuncagi-social-inbox/"/>
    <summary><![CDATA[Aylardır konuşulan facebook kendi mail servisini hizmete sunacak mı söylentisi, facebook’un düzenlediği basın toplantısı ile son buldu. Her ne kadar bu söylenti yanlış olmasa da tam olarak bu servisi tarif ettiğini söylemek te yanlış olur.

Söylentilerin aksine, bu servisin gmail ile rekabet etmek için çıkarılmadığı bizzat Mark Zuckerberg tarafından üstüne basa basa dile getirildi.]]></summary>
    <content type="html"><![CDATA[Aylardır konuşulan facebook kendi mail servisini hizmete sunacak mı söylentisi, facebook’un düzenlediği basın toplantısı ile son buldu. Her ne kadar bu söylenti yanlış olmasa da tam olarak bu servisi tarif ettiğini söylemek te yanlış olur.

Söylentilerin aksine, bu servisin gmail ile rekabet etmek için çıkarılmadığı bizzat Mark Zuckerberg tarafından üstüne basa basa dile getirildi.]]></content>
  </entry>
  <entry>
    <id>http://www.nurettintopal.com/?p=119</id>
    <title><![CDATA[Kazara Milyarder!]]></title>
    <updated>2010-11-01T20:43:27+00:00</updated>
    <link rel="alternate" href="http://www.nurettintopal.com/kazara-milyarder/"/>
    <summary><![CDATA[Ben Mezrich tarafından yazılmış Kazara Milyarder kitabında Facebook&#8217;un kuruluş hikayesini okudum. Okurken ilginç detaylarla karşılaştım. Mark Zurkerberg&#8217;in sosyal yaşantısı, insanlarla iletişimi, kızlarla arasının ne kadar kötü olduğu, Harvard&#8217;daki kulüpler, sosyal yaşantılar, tabii ki Facebook efsanesinin doğuşu ve yükselişi vs&#8230;. Bu hafta sonu da bu kitaptan uyarlanmış &#8220;sosyal ağ&#8221; filmini izledim. Filmi çok güzel bulduğumu söyleyemem. [...]]]></summary>
    <content type="html"><![CDATA[Ben Mezrich tarafından yazılmış Kazara Milyarder kitabında Facebook&#8217;un kuruluş hikayesini okudum. Okurken ilginç detaylarla karşılaştım. Mark Zurkerberg&#8217;in sosyal yaşantısı, insanlarla iletişimi, kızlarla arasının ne kadar kötü olduğu, Harvard&#8217;daki kulüpler, sosyal yaşantılar, tabii ki Facebook efsanesinin doğuşu ve yükselişi vs&#8230;. Bu hafta sonu da bu kitaptan uyarlanmış &#8220;sosyal ağ&#8221; filmini izledim. Filmi çok güzel bulduğumu söyleyemem. [...]]]></content>
  </entry>
  <entry>
    <id>http://www.nurettintopal.com/?p=105</id>
    <title><![CDATA[Özgür Web Günleri 2010]]></title>
    <updated>2010-10-19T12:23:46+00:00</updated>
    <link rel="alternate" href="http://www.nurettintopal.com/ozgur-web-gunleri-2010/"/>
    <summary><![CDATA[Bu cumartesi günü Linux Kullanıcıları Derneği ve Yeditepe Üniversitesi Bilgisayar Topluluğu tarafından ilk kez düzenlenen Özgür Web Günleri etkinliğindeydim. Birbirinden güzel konular ve konuşmacılarla dolu etkinlikte, aynı anda 3 salonda birden seminer verildiği için, hangi seminerlere katılacağım konusunda biraz kararsız kaldım. Cuma günü çalıştığım için cuma günkü etkinliklere katılamadım fakat cumartesi günü bütün gün oradaydım. [...]]]></summary>
    <content type="html"><![CDATA[Bu cumartesi günü Linux Kullanıcıları Derneği ve Yeditepe Üniversitesi Bilgisayar Topluluğu tarafından ilk kez düzenlenen Özgür Web Günleri etkinliğindeydim. Birbirinden güzel konular ve konuşmacılarla dolu etkinlikte, aynı anda 3 salonda birden seminer verildiği için, hangi seminerlere katılacağım konusunda biraz kararsız kaldım. Cuma günü çalıştığım için cuma günkü etkinliklere katılamadım fakat cumartesi günü bütün gün oradaydım. [...]]]></content>
  </entry>
  <entry>
    <id>http://www.nurettintopal.com/?p=81</id>
    <title><![CDATA[JTPD – Web Güven(siz)liği Semineri | Huzeyfe Önal]]></title>
    <updated>2010-07-31T08:57:58+00:00</updated>
    <link rel="alternate" href="http://www.nurettintopal.com/jtpd-web-guvensizligi-semineri-huzeyfe-onal/"/>
    <summary><![CDATA[29 Temmuz 2010 akşamı Bahçeşehir Üniversitesi&#8217;nde gerçekleştirilen Java Teknolojileri ve Programcıları Derneği&#8217;nin düzenlemiş olduğu &#8220;Web Güven(siz)liği Semineri&#8221; &#8216;ndeydim. Katılımcıların kısa bir tanışma etkinliğinin ardından, seminer sponsoru Java Dergisi&#8217;nin pizza partisini ile devam ettik. Sonrasında Huzeyfe ÖNAL sunumuna başladı. Gayet anlaşılır ve güncel örnelkerle gerçekleştirdiği sunumu yazılımlarda meydana gelebilecek güvenlik sorunları üzerinde durdu. İlk başta önemsemediğimiz [...]]]></summary>
    <content type="html"><![CDATA[29 Temmuz 2010 akşamı Bahçeşehir Üniversitesi&#8217;nde gerçekleştirilen Java Teknolojileri ve Programcıları Derneği&#8217;nin düzenlemiş olduğu &#8220;Web Güven(siz)liği Semineri&#8221; &#8216;ndeydim. Katılımcıların kısa bir tanışma etkinliğinin ardından, seminer sponsoru Java Dergisi&#8217;nin pizza partisini ile devam ettik. Sonrasında Huzeyfe ÖNAL sunumuna başladı. Gayet anlaşılır ve güncel örnelkerle gerçekleştirdiği sunumu yazılımlarda meydana gelebilecek güvenlik sorunları üzerinde durdu. İlk başta önemsemediğimiz [...]]]></content>
  </entry>
  <entry>
    <id>http://www.nurettintopal.com/?p=76</id>
    <title><![CDATA[Askerlik bitti… :)]]></title>
    <updated>2010-05-30T17:32:10+00:00</updated>
    <link rel="alternate" href="http://www.nurettintopal.com/askerlik-bitti/"/>
    <summary><![CDATA[Aralık 2009 itibari ile Kocaeli/İzmit İlçe Jandarma&#8217;da başlamış olan kısa dönem askerlik hizmetim Mayıs 2010 itibari ile bitmiştir. En kısa zamanda yeni yazılarım ile sizlerle olacağım&#8230;]]></summary>
    <content type="html"><![CDATA[Aralık 2009 itibari ile Kocaeli/İzmit İlçe Jandarma&#8217;da başlamış olan kısa dönem askerlik hizmetim Mayıs 2010 itibari ile bitmiştir. En kısa zamanda yeni yazılarım ile sizlerle olacağım&#8230;]]></content>
  </entry>
  <entry>
    <id>http://www.nurettintopal.com/?p=68</id>
    <title><![CDATA[Etohum Girişimcilik Kampı – Microsoft Türkiye Ofisi – 14 Kasım 2009]]></title>
    <updated>2009-11-14T20:52:12+00:00</updated>
    <link rel="alternate" href="http://www.nurettintopal.com/etohum-girisimcilik-kampi-microsoft-turkiye-ofisi-14-kasim-2009/"/>
    <summary><![CDATA[Cumartesi günü başka bir etohum toplantısına katılmak üzere Microsoft Türkiye ofisindeydik. Daha önceki etkinliklere göre daha kalabalık bir ortamda gerçekleşen etkinlik diğerleri gibi oldukça verimli ve güzel geçti. Etkinlik mimarı Burak Büyükdemir açılış konuşmasını yaptıktan sonra bir girişimcinin dikkat etmesi gereken konular konulu bir sunum ile nelere dikkat etmek gerekiyor, nelerden sakınmak gerekiyor bunlar üzerinde [...]]]></summary>
    <content type="html"><![CDATA[Cumartesi günü başka bir etohum toplantısına katılmak üzere Microsoft Türkiye ofisindeydik. Daha önceki etkinliklere göre daha kalabalık bir ortamda gerçekleşen etkinlik diğerleri gibi oldukça verimli ve güzel geçti. Etkinlik mimarı Burak Büyükdemir açılış konuşmasını yaptıktan sonra bir girişimcinin dikkat etmesi gereken konular konulu bir sunum ile nelere dikkat etmek gerekiyor, nelerden sakınmak gerekiyor bunlar üzerinde [...]]]></content>
  </entry>
</feed>

