Temmuz
22
2010

Sitenizde Facebook hesabı ile login işlemi

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 uygulamasını eklemeniz gerekli).

Oluşturduğunuz uygulamanın ayarlar bölümünde bağlan sekmesinde Bağlan URL’si bölümüne dosyaları oluşturup koyduğunuz ana adresi yazınız. (Benimkinde “http://code.mmaydin.com/” yazıyor)

Oluşturduğunuz uygulamanın Api Anahtarını ilerki aşamalarda kullanacağız.

Facebook kullanıcıların doğruluğu için bir sayfa oluşturmamız gerekli

vi dogrula.html

İçine aşağıdakileri kopyalıyoruz

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
     <body>
          
     </body>
</html>

Bu sayfayı aşağıda oluşturacağımız index.html sayfasında kullanacağız. Bu yüzden verdiğiniz ismi aşağıda düzeltmeniz gerekli. Ben dogrula.html verdim ve aşağıda da onu kullandım.

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 “read_stream” izni işimizi görecektir. Ama kullanıcının profiline bişeyler yazmak istiyorsak “publish_stream” iznini istemeliyiz. Kullanıcının facebookta kullandığı mail adresini almak istiyorsak “mail” iznini istemeliyiz.

Diğer izinlere bakmak için buraya bakabilirsiniz.

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.

vi index.html




facebook hesabinla giris yap

Burda sadece profile tablosundaki verileri kullandık. İsterseniz diğer tablolardan kullanıcının başka özelliklerini de edinebilirsiniz. Diğer tablolara burdan erişebilirsiniz.

Örnek uygulamaya burdan , uygulamanın kodlarına burdan erişebilirsiniz.

Aralık
27
2009

CakePhp ile Facebook Application Yapımı

Ö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 klasörünün içine oluşan facebook-platform dizininde php klasorununun içini tamamen kopyalayıp cakephp/app/vendors/facebook klasorunun içine aktarıyoruz

cp -r /home/mumi/indirilenler/facebook-platform/php/* /var/www/cakephp/app/vendors/facebook/.

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.

Eğer kendi app_controllerımızı kullanmak istiyorsak bunu cakephp/app/controller 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.

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.
cakephp/app/conroller içine app_controller.php oluşturalım ve içine aşağıdakileri yazalım.

<?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->facebook = new Facebook($this->__fbApiKey, $this->__fbSecret);
    }
}
?>

Facebook uygulama anahtarı ve gizlilik kodu almak için facebook developers uygulamasını profilimize eklemiş olmanız gerekli. Bunun için http://www.facebook.com/developers/ sayfasını açıp uygulamaya izin ver diyoruz. Bundan sonra yeni uygulama oluşturmak için sağ üst köşede bulunan Yeni Uygulama Oluştur düğmesine tıklıyoruz.

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 :) ) create application düğmesine basıyoruz.

Açılan sayfada facebook API anahtarı ve gizli yazan bölümleri app_controller içinde tanımladığımız değişkenlere yazıyoruz.

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.

ilk önce arkadaslarının gosterilecigi sinfinin modelini olusturalım.

cakephp/app/models/ dizinin altına arkadaslar.php diye bir dosya olusturalim.

<?php
class Arkadaslar extends AppModel {
    var $name = 'Arkadaslar';
    var $useTable = false; /* Arkadaslar tablomuz olmadigi icin kullanmayacagimizi belirtiyoruz. */
}
?>

cakephp/app/controllers/ dizinin altına arkadaslars_controller.php diye bir dosya olusturalim.

<?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->kullanici = $this->facebook->require_login();
    }

    /* view kisminda kullacagimiz sayfanin ismi de bu fonksiyonla ayni olmak zorunda*/
    function index() {
        /* Facebook tan kullanicinin arkadaslari bilgisi aliniyor. */
        $arkadaslar = $this->facebook->api_client->friends_get();
        /* Facebooktan aldigimiz arkadas bilgisinin arkadaslar degiskenine set ettik. Bu degiskeni arkadas view imizda kullanabilecegiz. */
        $this->set('arkadaslar', $arkadaslar);
    }
}
?>

Şimdi view bölümünü oluşturmamız gerekli. Bunun içinde cakephp/app/views/ dizinin altında arkadaslars dizini oluşturmamız gerekli.

mkdir /var/www/cakephp/app/views/arkadaslars

Bu dizinin içine index.ctp adinda bir dosya oluşturalım. İçine aşağıdakileri yazalım.

<p>Arkadaslarim:</p>
<style type="text/css">
     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;}
</style>
    <?php foreach ($arkadaslar as $arkadas) { ?> <li class="mini-kafa"> </li> <?php } ?>

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 /cakephp/app/config/routes.php dosyasını değiştirmemiz gerekli.

Router::connect(‘/’, array(‘controller’ => ‘pages’, ‘action’ => ‘display’, ‘home’));

satırı bulup şu şekilde değiştirelim.

Router::connect(‘/’, array(‘controller’ => ‘arkadaslars’, ‘action’ => ‘index’));

böylece uygulamızın giriş sayfası arkadaslars sınıfının index fonksiyonu olmasını sağladık.

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 /cakephp/app/config/core.php sayfasında şu değişikliği yapmamız gerekli.
Bu satırı

Configure::write(‘debug’, 2);

Şununla değiştirelim.

Configure::write(‘debug’, 0);

Böylece debug modu kapatmış olduk.

Ş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.
cakephp/app/views/layout/ dizini içine default.ctp isimli bir dosya oluşturup içine şunları yazalım.

<?php
echo $content_for_layout;
?>

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 Geniş Sütun URL Bağlantısı bölüme uygulama adını yazmak , Canvas Callback URL olan bölüme de cakephp ile oluşturduğumuz sayfaları tutan yeri söylemek
( örneğin http://code.mmaydin.com/cakephp-ornek/ ) ve Görüntüleme Yöntemi seçenegini FBML yapmak(eğer bu seçeneği FBML yapmazsak fbml etiketlerimiz çalışmaz ve kullanıcıların resimlerini alamayız).

Şimdi uygulamamızı test etmeye geldi.
Örnek uygulamaya bu adresten uygulamanin kaynak koduna burdan ulaşabilirsiniz.

Örnek uygulamanın ekran görüntüsü;
Facebook cakephp-ornek uygulamasının ekran görüntüsü

NOT: Kaynak kodun cakephp-ornek/app/controller/app_controller.php dosyasında uygulamanın api anahtarını ve gizli numarasını değiştirdiğiniz taktirde uygulamanız hazır duruma gelecektir.

Aralık
23
2009

CakePhp Kurulumu

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.

tar -zxvf cake_1.2.5.tar.gz

ya da windows kullanıyorsanız winrar la açabilirsiniz.

Oluşan cake_1.2.5 dizinini ben cakephp olarak değiştirdim. Nerede çalışacaksak ise o dizinin altına atıyoruz. mesela ben /var/www/ altına atıyorum.Sizde localhostunuzun bulunduğu dizine atabilirsiniz.

cakephp/app/ altında tmp dizinine yazma izni veriyoruz. Bu dizinde sessionlar, cacheler ve loglar tutuluyor.

chmod 777 cakephp/app/tmp

cakephp/app/config.core.php dosyasında

Configure::write(‘Security.salt’, ‘DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi’);

bu satırı değiştirmemiz gerekiyor.

Configure::write(‘Security.salt’, ‘karışık birşeyler yazın !!! ‘);

Database ayarları içinse
/cakephp/app/config/database.php.default dosyasını database.php olarak değiştirelim. database.php dosyasında gerekli yerleri değiştirmemiz gerekli.

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. */
    );

Şimdi http://localhost/cakephp dediğmizde cakephp ‘nin ön tanımlı sayfası gelmeli.

Cakephp templatelerle çalışan bir sistem olduğu için ilk kurduğumuzda kendi templateni çalıştırır. Sizin kullanacağınız templateler cakephp/app/view/layouts/ 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 cakephp/cake/libs/view/layouts/default.ctp dir. Biz kendi template imizin çalışması istiyorsak
cakephp/app/view/layouts/ dizini altına default.ctp dosyasını oluşturmamız gerekli.

Bu dosyayı açıp içine istediğimizi yazabiliriz.Örneğin;

Merhaba Dünya

yazıp kaydedelim.

Şİmdi http://localhost/cakephp dediğimiz de sizin yazmış olduğuz yazı ekrana gelecektir.

Aralık
19
2009

Php ve python ile hareketli gif süresi hesaplama

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 ($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);

test edecekseniz $dosya = "ornek.gif"; ( satır 64) yerine olusturduğunuz php dosyası ile aynı klasorde olan bir hareketli gif adı yazınız.

python ile

#!/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

test edecekseniz dosya = "ornek.gif" ( satır 5) yerine olusturduğunuz py dosyası ile aynı klasorde olan bir hareketli gif adı yazınız.

Python da bu iş için özel fonksiyonlar olduğu için bana pek bi iş düşmedi :D .

Aralık
19
2009

Debian lenny ntfs sürücü mount etme

Merhaba
Hem windows hem debian kullanıcısı olduğum için taşınabilir hardisklerim ntfs olarak ayarlamıştım (windosta da kullanabilmek için). Debian lenny i ilk kurduğunuzda ntfs sürücülerini tanımadığını farkettim.
Bunun için iki paket yüklememiz gerekiyor.

sudo apt-get install libfuse2 ntfs-3g

Bu paketleri kurduktan sonra elle sürücümüzü mount etmek için ilk önce NTFS sürücülerimiz bulalım

sudo fdisk -l | grep NTFS

çıktısı şunun gibi olmalı

/dev/sdb1 1 9729 78148161 7 HPFS/NTFS
/dev/sdc1 1 60801 488384001 7 HPFS/NTFS

mount edeceğimiz sürücünün tutulacağı yeri oluşturmamız gerekli

sudo mkdir /media/yeni-surucu

burdan sonra sürücümuzu mount işlemine geçiyoruz.

sudo mount –t ntfs-3g /dev/sdb1 /media/yeni-surucu

burda /dev/sdb1 yerine fdisk -l | grep NTFS komutunun çıktısında ne gördüysek onu
/media/yeni-surucu yerine de olusturduğumuz dizinin adını yazıyoruz.

mount ettğimiz sürücüyü sistemimizden ayırmak için ise

sudo umount /dev/sdb1

Bundan sonraki sürücülerinizi mount etmede debian otomatik gerçekleştirecektir.

NOT: 2 paketi yükledikten sonra debian sürücünüzü sisteminize otomatik bağlayacaktır (Tabi sürücünüzü paketleri yükledikten sonra taktıysanız, takılı ise elle mount etmeniz gerekir).

Aralık
19
2009

Debian lenny Firefox kurulumu

Bildiğiniz gibi firefox debianda kurulu olarak gelmiyor. Bunun nedeni firefox logosunun mozillaya ait olması bunu değiştirmeye izin vermiyolarmış :) Bu yüzden debian da firefox benzeri olan iceweasel i kullanıyor. Ama iceweasel firefox kadar güncellenmediğinden biraz gerisinde kalıyor firefoxun.

Debianımıza firefoxu kurmak için ilk önce iceweasel sistemimizden kaldırmamız gerekiyor (tabi root olmamız gerekiyor ).

apt-get remove iceweasel

diyip

http://mozilla2.snt.utwente.nl//firefox/releases/3.5.5/linux-i686/tr/firefox-3.5.5.tar.bz2 firefoxun şimdiki son sürümünü indiriyoruz yada burdan siz son sürümü indirebilirsiniz

http://www.mozilla-europe.org/tr/firefox/

indirdiğimiz sıkıştırılmış dosyayı /usr/lib/altına taşıyoruz.

mv firefox-3.5.5.tar.bz2 /usr/lib/

/usr/lib klasorune geliyoruz

cd /usr/lib/

sıkıştırılmış dosyamızı tar ile açıyoruz

tar -jxvf firefox-3.5.5.tar.bz2

sonrasında çalıştırılabilir dosyaların bulunduğu /usr/bin klasorune firefox için sembolik link veriyoruz.

ln -s /usr/lib/firefox/firefox /usr/bin/firefox

firefox kurma işlemi tamamlandı.

Şimdi masaüstüne firefox desktop iconu koymak için

masaüstünde firefox.desktop adında bir dosya oluşturup içine

[Desktop Entry]
Name=Mozilla Firefox Browser
Comment=firefoxla internette gezintiye çıkın
Exec=firefox
Icon=/usr/lib/firefox/icons/mozicon128.png
Terminal=0
Type=Application
Encoding=UTF-8
Categories=Application;Network;X-Red-Hat-Base;X-Red-Hat-Base-Only;

yazıp kaydediyoruz. sonra hangi kullanıcıların kullanmasını istiyorsak ona göre izinlerini ayarlıyoruz.

örneğin;

chmod 777 firefox.desktop

böylece debianda firefoxla internette gezintiye çıkabilirsiniz..

Aralık
19
2009

Merhaba Dünya

Blogumdaki ilk yazımı yazmış bulunmaktayım. Bugün blogum için güzel laptobum için kötü bir gün oldu. Laptobum şarj olmuyor yine servis yolu gözüktü :(

Bu blogda kendi hayatımda geçen olayları ,yaptığım projelerde kullandığım uygulamarın nasıl kullanıldığını, yazmış olduğum programlar vb konularda soru cevab şeklinde yazılar bulunacak.

 
Powered by Wordpress and MySQL. Original theme by openark.org - customization by me :)