<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mustafa Murat Aydın &#187; Programlama</title>
	<atom:link href="http://www.mmaydin.com/category/programlama/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mmaydin.com</link>
	<description>Bu adam neler yapıyor</description>
	<lastBuildDate>Sun, 31 Jul 2011 12:55:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Sitenizde Facebook hesabı ile login işlemi</title>
		<link>http://www.mmaydin.com/2010/07/sitenizde-facebook-hesabi-ile-login-islemi/</link>
		<comments>http://www.mmaydin.com/2010/07/sitenizde-facebook-hesabi-ile-login-islemi/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 16:48:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[üye ekle]]></category>

		<guid isPermaLink="false">http://www.mmaydin.com/?p=84</guid>
		<description><![CDATA[Sitenize giren kişiler için üyelik işlemi yapmadan yazılarınıza yorum yapabilmesi için Facebook hesaplarını kullanabilirsiniz. Bu sadece bir örnek tabi farklı yerlerde de kullanabilirsiniz. Bu yazımda bunu nasıl yapacağınızı anlatacağım. İlk önce facebookta bir uygulama oluşturmanız gerekli bunun uygulama anhtarını kullanacağız. Bunun için; http://www.facebook.com/developers/createapp.php adresini ziyaret edin ve uygulamanızı oluşturun (Uygulama oluşturmak için facebook un developers [...]]]></description>
			<content:encoded><![CDATA[<p>Sitenize giren kişiler için üyelik işlemi yapmadan yazılarınıza yorum yapabilmesi için Facebook hesaplarını kullanabilirsiniz. Bu sadece bir örnek tabi farklı yerlerde de kullanabilirsiniz.</p>
<p>Bu yazımda bunu nasıl yapacağınızı anlatacağım.</p>
<p>İlk önce facebookta bir uygulama oluşturmanız gerekli bunun uygulama anhtarını kullanacağız.</p>
<p>Bunun için;</p>
<blockquote><p><a href="http://www.facebook.com/developers/createapp.php">http://www.facebook.com/developers/createapp.php</a></p></blockquote>
<p>adresini ziyaret edin ve uygulamanızı oluşturun (Uygulama oluşturmak için facebook un developers uygulamasını eklemeniz gerekli).</p>
<p>Oluşturduğunuz uygulamanın <strong><em>ayarlar</em></strong> bölümünde <strong><em>bağlan</em></strong> sekmesinde <strong><em>Bağlan URL&#8217;si</em></strong> bölümüne dosyaları oluşturup koyduğunuz ana adresi yazınız. (Benimkinde &#8220;<em>http://code.mmaydin.com/</em>&#8221; yazıyor) </p>
<p>Oluşturduğunuz uygulamanın<strong> <em>Api Anahtarını</em></strong> ilerki aşamalarda kullanacağız.</p>
<p>Facebook kullanıcıların doğruluğu için bir sayfa oluşturmamız gerekli</p>
<blockquote><p> vi dogrula.html</p></blockquote>
<p>İçine aşağıdakileri kopyalıyoruz</p>
<pre class="brush: html">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" &gt;
     &lt;body&gt;
          <script src="https://ssl.connect.facebook.com/js/api_lib/v0.4/XdCommReceiver.js" type="text/javascript"></script>
     &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Bu sayfayı aşağıda oluşturacağımız <strong><em>index.html</em></strong> sayfasında kullanacağız. Bu yüzden verdiğiniz ismi aşağıda düzeltmeniz gerekli. Ben <strong><em>dogrula.html</em></strong> verdim ve aşağıda da onu kullandım.</p>
<p>Facebook kullanıcısında ne tür izinler isteyeceğimize karar vermemiz gerekir. Eğer kullanıcının sadece ismine fotosuna erişmek istiyorsak &#8220;<strong><em>read_stream</em></strong>&#8221; izni işimizi görecektir. Ama kullanıcının profiline bişeyler yazmak istiyorsak &#8220;<strong><em>publish_stream</em></strong>&#8221; iznini istemeliyiz. Kullanıcının facebookta kullandığı mail adresini almak istiyorsak &#8220;<strong><em>mail</em></strong>&#8221; iznini istemeliyiz.</p>
<p>Diğer izinlere bakmak için <a href="http://developers.facebook.com/docs/authentication/permissions">buraya</a> bakabilirsiniz.</p>
<p>Bir html sayfası (siz başka türleri de kullanabilirsiniz işimiz sadece javascriptle) oluşturuyoruz ve içine aşağıdakileri satırları kopyalıyoruz.</p>
<blockquote><p> vi index.html</p></blockquote>
<pre class="brush: js">
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

<script language="JavaScript" type="text/javascript">

function facebook_basla() {

            FB_RequireFeatures(["Connect"],function() {
                <!-- yukarida oluşturduğum dosyayı(dogrula.html) burda kullanıyorum -->
                FB.init("UYGULAMANIZIN API ANAHTARI", "dogrula.html);
                FB.Connect.requireSession(facebook_izin_iste);
                }
            );
}

function facebook_izin_iste() {

        <!-- Aşağıya istediğiniz izinleri yazınız-->
        FB.Connect.showPermissionDialog("read_stream", facebook_izinlerden_sonra);

        <!-- çoklu izin isteklerinde izinler arasında virgül(,) kullanıyoruz-->
        <!--  FB.Connect.showPermissionDialog("read_stream,publish_stream,mail", facebook_izinlerden_sonra); -->
}

function facebook_izinlerden_sonra() {

        <!-- Sitenize girin kişinin facebook id sini alıyoruz-->
        var uid = FB.Facebook.apiClient.get_session().uid ;

        <!-- Kullanıcının facebook idsi, ismi , 50x50 lik resmi ve kullanıcı adını alıyoruz (Kullanıcının eğer bir kullanıcı adı yok ise username değişkeni boş gelecektir). -->
        var sql = "SELECT id,name,pic_square,username FROM profile WHERE id ="+uid;

        FB.Facebook.apiClient.fql_query(sql, function(result, ex) {
            var userName= result[0]['name'];
            var userId = result[0]['id'];
            var userPic = result[0]['pic_square'];
            var userUrl = result[0]['username'];

            <!-- elinizde artık kullanıcı ile ilgili bilgiler hazır artık bu bilgileri istediğiniz yerde kullanabilirsiniz.-->
            kullanici_ekle(userName,userId,userPic,userUrl);

        });
}

function kullanici_ekle (userName,userId,userPic,userUrl)  {

        var icerik = "kullanici id = " + userId + "</br>";
        icerik += "kullanici adi = " + userName + "</br>";
        icerik += "kullanici fotografi = <img src='" + userPic + "'</br>";

        if (userUrl != "") {
                icerik += "kullanici profili = <a href='http://www.facebook.com/" + userUrl + "'>http://www.facebook.com/" + userUrl + "</a>";
        } else {
                icerik += "kullanici profili = <a href='http://www.facebook.com/profile.php?id=" + userId + "'>http://www.facebook.com/profile.php?id=" + userId + "</a>";

        }
        document.getElementById("kullanici").innerHTML = icerik;        

}

</script>
<a style="text-decoration:none;" onclick="facebook_basla();return false;" href="#">facebook hesabinla giris yap</a>
<div id="kullanici"></div>
</pre>
<p>Burda sadece profile tablosundaki verileri kullandık. İsterseniz diğer tablolardan kullanıcının başka özelliklerini de edinebilirsiniz. Diğer tablolara <a href="http://wiki.developers.facebook.com/index.php/FQL_Tables">burdan</a> erişebilirsiniz.</p>
<p>Örnek uygulamaya <a href="http://code.mmaydin.com/facebook_login/index.html">burdan</a> , uygulamanın kodlarına <a href="http://www.mmaydin.com/wp-content/uploads/2010/07/facebook_login.tar.gz">burdan</a> erişebilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mmaydin.com/2010/07/sitenizde-facebook-hesabi-ile-login-islemi/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CakePhp ile Facebook Application Yapımı</title>
		<link>http://www.mmaydin.com/2009/12/cakephp-ile-facebook-application-yapimi/</link>
		<comments>http://www.mmaydin.com/2009/12/cakephp-ile-facebook-application-yapimi/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 00:46:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[facebook application]]></category>

		<guid isPermaLink="false">http://www.mmaydin.com/?p=76</guid>
		<description><![CDATA[Önceki yazımda cakephp kurulumunu anlatmıştım. Bu yüzden cakephp kurulum aşamasını geçiyorum isteyenler burdan bakabilir. İlk önce applicationımızın kullanacağı facebook kütüphanelerini indirmemiz gerekli. Facebook php kütüphanesini bu adresten indirebiirsiniz. indirdikten sonra cakephp içinde tutucağımız bölümü oluşturalım. cd /var/www/cakephp/app/vendors siz kendi uygulamanızı bulunduğunu dizine göre değiştiriniz. mkdir facebook indirdiğimiz sıkıştırılmış dosyayı açıyoruz. tar -zxvf facebook-platform.tar.gz oluşturduğumuz facebook [...]]]></description>
			<content:encoded><![CDATA[<p>Önceki yazımda cakephp kurulumunu anlatmıştım. Bu yüzden cakephp kurulum aşamasını geçiyorum isteyenler <a href="http://www.mmaydin.com/2009/12/cakephp-kurulumu/" target="_blank">burdan</a> bakabilir.</p>
<p>İlk önce applicationımızın kullanacağı facebook kütüphanelerini indirmemiz gerekli.</p>
<p>Facebook php kütüphanesini <a href="http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz" target="_blank">bu adresten</a> indirebiirsiniz.</p>
<p>indirdikten sonra cakephp içinde tutucağımız bölümü oluşturalım.</p>
<blockquote><p>cd /var/www/cakephp/app/vendors</p></blockquote>
<p>siz kendi uygulamanızı bulunduğunu dizine göre değiştiriniz.</p>
<blockquote><p>mkdir facebook</p></blockquote>
<p>indirdiğimiz sıkıştırılmış dosyayı açıyoruz.</p>
<blockquote><p>tar -zxvf facebook-platform.tar.gz</p></blockquote>
<p>oluşturduğumuz <strong><em>facebook</em></strong> klasörünün içine oluşan facebook-platform dizininde php klasorununun içini tamamen kopyalayıp <strong><em>cakephp/app/vendors/facebook</em></strong> klasorunun içine aktarıyoruz</p>
<blockquote><p>cp -r /home/mumi/indirilenler/facebook-platform/php/* /var/www/cakephp/app/vendors/facebook/.</p></blockquote>
<p>Cakephpde controllerlar controller sınfından türetilir. app_controller sınıfıda controller sınıfında türetilir. app_controller sınıfı boş tanımlanmıştır. Cakephp de oluşturduğumuz controllerları app_controller dan türetiyoruz.</p>
<p>Eğer kendi app_controllerımızı kullanmak istiyorsak bunu <strong><em>cakephp/app/controller</em></strong> içinde tanımlamamız gerekli. Bunu neden yapmak isteyebiliriz diye sorarsanız. Bazı controller larımız aynı fonksiyona gereksinim duyabilir ve hepsi için ayrı ayrı yazmak istemeyiz. Nasılsa bütün controllerlarımız app_controller sınıfından türetildiğine göre bu fonksiyonu sadece app_controller sınıfnda tanımlarsak, otomatikmen tüm sınflarda bu fonksiyon tanımlanmış olur.</p>
<p>Biz kendi app_controller ımızı oluşturalım. Facebook kütüphanesini bu sınıfın içinde çağıralım ki tüm sınıflara aktarılsın.<br />
cakephp/app/conroller içine app_controller.php oluşturalım ve içine aşağıdakileri yazalım.</p>
<pre class="brush: php">&lt;?php
/* Facebook kutuphanelerini import ediyoruz. */
App::import('Vendor', 'facebook'.DS.'facebook');
class AppController extends Controller {
    var $facebook;

    var $__fbApiKey = ' uygulamanizin facebook api anahtari ';
    var $__fbSecret = ' uygulamanızın gizlilik anahtari ';

    function __construct() {
        parent::__construct();

        /* 'Undefined index: facebook_config' uyarısını almamak icin bos atama yapiyoruz. */
        $GLOBALS['facebook_config']['debug'] = NULL;

        /* Facebook client API nesnesi olusturuyoruz. */
        $this-&gt;facebook = new Facebook($this-&gt;__fbApiKey, $this-&gt;__fbSecret);
    }
}
?&gt;
</pre>
<p>Facebook uygulama anahtarı ve gizlilik kodu almak için facebook developers uygulamasını profilimize eklemiş olmanız gerekli. Bunun için <a href="http://www.facebook.com/developers/" target="_blank">http://www.facebook.com/developers/</a> sayfasını açıp uygulamaya izin ver diyoruz. Bundan sonra yeni uygulama oluşturmak için sağ üst köşede bulunan <strong><em>Yeni Uygulama Oluştur</em></strong> düğmesine tıklıyoruz.</p>
<p>Sonraki adımda uygulamamızın adını girip facebookun şartlarını okuyup kabul ettikten sonra ( kabul etmediyseniz anlatımın gerisini okumanıza pek gerek kalmayacak <img src='http://www.mmaydin.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) <strong><em>create application</em></strong> düğmesine basıyoruz.</p>
<p>Açılan sayfada facebook API anahtarı ve gizli yazan bölümleri <strong><em>app_controller</em></strong> içinde tanımladığımız değişkenlere yazıyoruz.</p>
<p>Artık olusturacağımız uygulamayı yazmaya geldi. Uygulamamız sadece giren facebook kullanıcısının arkadaşlarının resimlerini ekrana basacak.</p>
<p>ilk önce arkadaslarının gosterilecigi sinfinin modelini olusturalım.</p>
<p><strong><em>cakephp/app/models/</em></strong> dizinin altına <strong><em>arkadaslar.php</em></strong> diye bir dosya olusturalim.</p>
<pre class="brush: php">&lt;?php
class Arkadaslar extends AppModel {
    var $name = 'Arkadaslar';
    var $useTable = false; /* Arkadaslar tablomuz olmadigi icin kullanmayacagimizi belirtiyoruz. */
}
?&gt;
</pre>
<p><strong><em>cakephp/app/controllers/</em></strong> dizinin altına <strong><em>arkadaslars_controller.php</em></strong> diye bir dosya olusturalim.</p>
<pre class="brush: php">&lt;?php
class ArkadaslarsController extends AppController {
    /* facebook kullanicisini tutacagimiz degisken */
    var $kullanici;

    /* beforeFilter fonksiyonu ozel bir fonksiyondur.Bu siniftan cagirilan her fonksiyondan once bu fonksiyon calistirilir. */
    function beforeFilter() {
        /* Facebook a login olup olmadigini sorgular. Giren kisinin arkadaslarini gosterebilmemiz icin facebook ta login olmasi gerekir. Eger bole bir gereksinimimiz olmasaydi disardan erisimlere acik bir uygulama yapabilirdik */
        $this-&gt;kullanici = $this-&gt;facebook-&gt;require_login();
    }

    /* view kisminda kullacagimiz sayfanin ismi de bu fonksiyonla ayni olmak zorunda*/
    function index() {
        /* Facebook tan kullanicinin arkadaslari bilgisi aliniyor. */
        $arkadaslar = $this-&gt;facebook-&gt;api_client-&gt;friends_get();
        /* Facebooktan aldigimiz arkadas bilgisinin arkadaslar degiskenine set ettik. Bu degiskeni arkadas view imizda kullanabilecegiz. */
        $this-&gt;set('arkadaslar', $arkadaslar);
    }
}
?&gt;
</pre>
<p>Şimdi view bölümünü oluşturmamız gerekli. Bunun içinde <strong><em>cakephp/app/views/</em></strong> dizinin altında <strong><em>arkadaslars</em></strong> dizini oluşturmamız gerekli.</p>
<blockquote><p>mkdir /var/www/cakephp/app/views/arkadaslars</p></blockquote>
<p>Bu dizinin içine <strong><em>index.ctp</em></strong> adinda bir dosya oluşturalım. İçine aşağıdakileri yazalım.</p>
<pre class="brush: php">&lt;p&gt;Arkadaslarim:&lt;/p&gt;
&lt;style type="text/css"&gt;
     li.mini-kafa { display:block; }
     ol.mini-kafalar {margin: 0; padding: 0;}
     ol.mini-kafalar li {float:left; margin: 0 5px 5px 0; list-style-type:none; width: 50px; height: 50px;}
&lt;/style&gt;
<ol class="mini-kafalar">
    &lt;?php foreach ($arkadaslar as $arkadas)  { ?&gt;
         &lt;li class="mini-kafa"&gt;
                 <!-- fb:profile-pic etiketi uye idsini verdigimiz kisinin fotografinin bize dondurur. -->
                 <fb:profile-pic uid="&lt;?php echo $arkadas; ?&gt;" size="square" linked="true">
                 </fb:profile-pic>
        &lt;/li&gt;
    &lt;?php } ?&gt;
</ol>
</pre>
<p>Uygulamamızı ilk açtığımızda ana sayfamızın giren kullanıcının arkadaşlarını gösteren sayfanın olmasını istiyorsak <strong><em>/cakephp/app/config/routes.php</em></strong> dosyasını değiştirmemiz gerekli.</p>
<blockquote><p>Router::connect(&#8216;/&#8217;, array(&#8216;controller&#8217; =&gt; &#8216;pages&#8217;, &#8216;action&#8217; =&gt; &#8216;display&#8217;, &#8216;home&#8217;));</p></blockquote>
<p>satırı bulup şu şekilde değiştirelim.</p>
<blockquote><p>Router::connect(&#8216;/&#8217;, array(&#8216;controller&#8217; =&gt; &#8216;arkadaslars&#8217;, &#8216;action&#8217; =&gt; &#8216;index&#8217;));</p></blockquote>
<p>böylece uygulamızın giriş sayfası <strong><em>arkadaslars</em></strong> sınıfının index fonksiyonu olmasını sağladık.</p>
<p>Cakephp nin ön tanımlı debug modu açık olarak gelir. Bu debugları kullanıcıların görmemesi gerekir. Bu yüzden debug modu kapatıyoruz. Bunun için de <strong><em>/cakephp/app/config/core.php</em></strong> sayfasında şu değişikliği yapmamız gerekli.<br />
Bu satırı</p>
<blockquote><p>Configure::write(&#8216;debug&#8217;, 2);</p></blockquote>
<p>Şununla değiştirelim.</p>
<blockquote><p>Configure::write(&#8216;debug&#8217;, 0);</p></blockquote>
<p>Böylece debug modu kapatmış olduk.</p>
<p>Şimdi basit bir template hazırlayalım.Bizim template imiz sadece view kısmınından gelen veriyi ekrana basacak. İsterseniz siz uygulamanızın header ve footer kısmını da buraya dahil edebilirsiniz, bu size her yerde header ve footer bölümlerini yazmanızı engelleyecektir.<br />
<strong><em>cakephp/app/views/layout/</em></strong> dizini içine <strong><em>default.ctp</em></strong> isimli bir dosya oluşturup içine şunları yazalım.</p>
<pre class="brush: php">&lt;?php
echo $content_for_layout;
?&gt;
</pre>
<p>Uygulamamızın facebook ta tam olarak gözükmesi için son bir düzenleme kaldı o da developers uygulamasına girip oluşturduğumuz uygulama ayarlarından canvas sekmesine gelip <strong><em>Geniş Sütun URL Bağlantısı</em></strong> bölüme uygulama adını yazmak , <strong><em>Canvas Callback URL</em></strong> olan bölüme de cakephp ile oluşturduğumuz sayfaları tutan yeri söylemek<br />
( örneğin <strong><em>http://code.mmaydin.com/cakephp-ornek/</em></strong> ) ve <strong><em>Görüntüleme Yöntemi</em></strong> seçenegini <strong><em>FBML</em></strong> yapmak(eğer bu seçeneği FBML yapmazsak fbml etiketlerimiz çalışmaz ve kullanıcıların resimlerini alamayız).</p>
<p>Şimdi uygulamamızı test etmeye geldi.<br />
Örnek uygulamaya <a href="http://apps.facebook.com/cakephp-ornek" target="_blank">bu adresten</a> uygulamanin kaynak koduna <a href="http://www.mmaydin.com/wp-content/uploads/2009/12/cakephp-facebook-application.tar.gz" target="_blank">burdan</a> ulaşabilirsiniz.</p>
<p>Örnek uygulamanın ekran görüntüsü;<br />
<a href="http://www.mmaydin.com/wp-content/uploads/2009/12/cakephp-ornek-e1261868778441.png"><img src="http://www.mmaydin.com/wp-content/uploads/2009/12/cakephp-ornek-e1261868778441.png" alt="Facebook cakephp-ornek uygulamasının ekran görüntüsü" title="facebook cakephp-ornek uygulaması" width="800" height="600" class="aligncenter size-full wp-image-63" /></a></p>
<p><strong>NOT:</strong> Kaynak kodun <strong><em>cakephp-ornek/app/controller/app_controller.php</em></strong> dosyasında uygulamanın api anahtarını ve gizli numarasını değiştirdiğiniz taktirde uygulamanız hazır duruma gelecektir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mmaydin.com/2009/12/cakephp-ile-facebook-application-yapimi/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CakePhp Kurulumu</title>
		<link>http://www.mmaydin.com/2009/12/cakephp-kurulumu/</link>
		<comments>http://www.mmaydin.com/2009/12/cakephp-kurulumu/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 14:56:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[kurulum]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mmaydin.com/?p=16</guid>
		<description><![CDATA[Bir php frameworkü olan Cakephp sayesinde çok kullanılan fonksiyonları tekrar tekrar yazmaktan (hızlılık), sürekli çalışan geliştiricileri sürekli güncellenen kod deposu ile biz güncellemeleri takip etmesekte onlar edecek ve tecrübeli kişilerin yazmış olduğu güvenli kodlarla ile çıkan bugları. Cakephp ana sitesi www.cakephp.org Kurulumu Cakephp yi indirin Ben şimdiki kararlı sürümü indiriyorum (cake_1.2.5.tar.gz). Bu sıkıştırılmış dosyayı açıyoruz. [...]]]></description>
			<content:encoded><![CDATA[<p>Bir php frameworkü olan Cakephp sayesinde çok kullanılan fonksiyonları tekrar tekrar yazmaktan (hızlılık), sürekli çalışan geliştiricileri sürekli güncellenen kod deposu ile biz güncellemeleri takip etmesekte onlar edecek ve tecrübeli kişilerin yazmış olduğu güvenli kodlarla ile çıkan bugları.<br />
Cakephp ana sitesi <a href="http://www.cakephp.org">www.cakephp.org</a></p>
<p><strong>Kurulumu</strong></p>
<p>Cakephp yi  <a href="http://cakeforge.org/frs/?group_id=23&#038;release_id=449"> indirin</a><br />
Ben şimdiki kararlı sürümü indiriyorum (cake_1.2.5.tar.gz).<br />
Bu sıkıştırılmış dosyayı açıyoruz.</p>
<blockquote><p>
tar -zxvf cake_1.2.5.tar.gz</p></blockquote>
<p>ya da windows kullanıyorsanız winrar la açabilirsiniz.</p>
<p>Oluşan <em>cake_1.2.5</em> dizinini ben <em>cakephp</em> olarak değiştirdim. Nerede çalışacaksak ise o dizinin altına atıyoruz. mesela ben <em>/var/www/</em> altına atıyorum.Sizde localhostunuzun bulunduğu dizine atabilirsiniz.</p>
<p><strong><em>cakephp/app/</em></strong> altında <strong><em>tmp</em></strong> dizinine yazma izni veriyoruz. Bu dizinde sessionlar, cacheler ve loglar tutuluyor.</p>
<blockquote><p>chmod 777 cakephp/app/tmp</p></blockquote>
<p><strong><em>cakephp/app/config.core.php</em></strong> dosyasında</p>
<blockquote><p>Configure::write(&#8216;Security.salt&#8217;, &#8216;DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi&#8217;);</p></blockquote>
<p>bu satırı değiştirmemiz gerekiyor.</p>
<blockquote><p>Configure::write(&#8216;Security.salt&#8217;, &#8216;karışık birşeyler yazın !!! &#8216;);</p></blockquote>
<p>Database ayarları içinse<br />
<em><strong>/cakephp/app/config/database.php.default</strong></em> dosyasını <strong><em>database.php</em></strong> olarak değiştirelim.<strong><em> database.php</em></strong> dosyasında gerekli yerleri değiştirmemiz gerekli.</p>
<pre class="brush: php">
var $default = array(
        'driver' => 'mysql',    /* Kullanmak istediginiz veritabani ornegin mysql,postgres,sqlite veya adodb den birini yazınız. */
        'persistent' => false,    /* Veritabanına sürekli bağlantı kurulup kurulmayacağı belirtir */
        'host' => 'localhost',     /* Hangi hostta oldugu */
        'login' => 'user',    /* Veri tabani kullanici adi */
        'password' => 'password',    /* Parola */
        'database' => 'database_name',    /* Veritabani ismi */
        'prefix' => '',    /* Veritabanındaki bütün tabloların ön eki mesela wordpress tablolarında "wp_" ön eki bulunur. Sizin tablolarınızda bu şekilde olacak ise bu bölümde belirtmelisiniz. */
    );
</pre>
<p>Şimdi <a href="http://localhost/cakephp/">http://localhost/cakephp</a> dediğmizde cakephp &#8216;nin ön tanımlı sayfası gelmeli.</p>
<p>Cakephp templatelerle çalışan bir sistem olduğu için ilk kurduğumuzda kendi templateni çalıştırır. Sizin kullanacağınız templateler <strong><em>cakephp/app/view/layouts/</em></strong> altında bulunur. İlk baktığmızda js , rss, xml klasorleri bulunur ve hiç template yoktur. Cakephp kendi templateni çalıştırır demiştim bu template ise <strong><em>cakephp/cake/libs/view/layouts/default.ctp</em></strong> dir. Biz kendi template imizin çalışması istiyorsak<br />
<strong><em>cakephp/app/view/layouts/</em></strong> dizini altına <strong><em>default.ctp</em></strong> dosyasını oluşturmamız gerekli.</p>
<p>Bu dosyayı açıp içine istediğimizi yazabiliriz.Örneğin;</p>
<blockquote><p>Merhaba Dünya</p></blockquote>
<p>yazıp kaydedelim.</p>
<p>Şİmdi <a href="http://localhost/cakephp/">http://localhost/cakephp</a> dediğimiz de sizin yazmış olduğuz yazı ekrana gelecektir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mmaydin.com/2009/12/cakephp-kurulumu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Php ve python ile hareketli gif süresi hesaplama</title>
		<link>http://www.mmaydin.com/2009/12/php-ve-python-ile-hareketli-gif-suresi-hesaplama/</link>
		<comments>http://www.mmaydin.com/2009/12/php-ve-python-ile-hareketli-gif-suresi-hesaplama/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 22:28:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[hareketli gif]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[süre hesaplama]]></category>

		<guid isPermaLink="false">http://www.mmaydin.com/?p=12</guid>
		<description><![CDATA[Bir projemde lazım olmuştu hareketli gif süresinin hesaplanması. Sizin de işinize yararsa ne mutlu bana.. php ile function gifSuresiniVer( $dosya ) { /* http://www.w3.org/Graphics/GIF/spec-gif89a.txt burdaki bilgiler dogrultusunda gif in nasil bir yapisi oldugunu anlayabiliriz. */ $gif_grafik_kontrol_regex = "/21f904[0-9a-f]{2}([0-9a-f]{4})[0-9a-f]{2}00/"; $kaynak = file_get_contents($dosya); $icerik = bin2hex($kaynak); /*butun frame sureleri toplanir*/ $toplam_sure = 0; preg_match_all($gif_grafik_kontrol_regex, $icerik, $eslesenler); foreach [...]]]></description>
			<content:encoded><![CDATA[<p>Bir projemde lazım olmuştu hareketli gif süresinin hesaplanması. Sizin de işinize yararsa ne mutlu bana..</p>
<blockquote><p>php ile</p></blockquote>
<pre class="brush: php">

function gifSuresiniVer( $dosya ) {
    /*
    http://www.w3.org/Graphics/GIF/spec-gif89a.txt burdaki bilgiler dogrultusunda
    gif in nasil bir yapisi oldugunu anlayabiliriz.
    */
	$gif_grafik_kontrol_regex = "/21f904[0-9a-f]{2}([0-9a-f]{4})[0-9a-f]{2}00/";
	$kaynak = file_get_contents($dosya);
	$icerik = bin2hex($kaynak);

	/*butun frame sureleri toplanir*/
	$toplam_sure = 0;
	preg_match_all($gif_grafik_kontrol_regex, $icerik, $eslesenler);
	foreach ($eslesenler[1] as $eslesen) {
		//little-endian hex unsigned int'ler decimal'e cevrilir.
		$sure = hexdec(substr($eslesen,-2) . substr($eslesen, 0, 2));
		if ($sure == 0) {
			$sure = 1;
		}
		$toplam_sure += $sure;
	}

    /*
    sureler 100 luk saniyeler olarak saklanir bu yuzden saniyeye ceviriyoruz.
    */
	$toplam_sure /= 100;

	return $toplam_sure;
}

function gifToplamResim( $dosya ) {
    $kaynak = file_get_contents( $dosya );
    $son = 0;
    $adet = 0;
    while ($adet < 100) {
        $nerede = strpos($kaynak, "\x00\x21\xF9\x04", $son);
        if ( $nerede === false ) {
                break;
        } else {
                $son = $nerede + 1;
                $nerede2 = strpos( $kaynak, "\x00\x2C", $son );
                if ( $nerede2 === false ) {
                        break;
                } else {
                        if ( $nerede + 8 == $nerede2 ) {
                                $adet ++;
                        }
                        $son = $nerede2 + 1;
                }
        }
    }

    return $adet;
}

function hareketliGifSureVer( $image_filename ) {
	$frame_sayisi = gifToplamResim($image_filename);
	if ($frame_sayisi == 0) {
		return false;
	}
	$sure = gifSuresiniVer($image_filename);
	return $sure;
}

$dosya = "ornek.gif";
echo hareketliGifSureVer($dosya);
</pre>
<p>test edecekseniz $dosya = "ornek.gif"; ( satır 64) yerine olusturduğunuz php dosyası ile aynı klasorde olan bir hareketli gif adı yazınız.</p>
<blockquote><p>python ile</p></blockquote>
<pre class="brush: python">
#!/usr/bin/python
# -*- coding: utf-8 -*-
from Image import open

dosya = "ornek.gif"
resim = open(dosya)
resim.seek(0)
sure = 0
try:
    while 1:
        sure += resim.info["duration"]
        resim.seek(resim.tell() + 1)
except EOFError:
    pass
print sure
</pre>
<p>test edecekseniz dosya = "ornek.gif" ( satır 5) yerine olusturduğunuz py dosyası ile aynı klasorde olan bir hareketli gif adı yazınız.</p>
<p>Python da bu iş için özel fonksiyonlar olduğu için bana pek bi iş düşmedi <img src='http://www.mmaydin.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mmaydin.com/2009/12/php-ve-python-ile-hareketli-gif-suresi-hesaplama/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

