25 Şubat 2014 Salı

Php ile Özel Karakterleri Düzeltme

Php ile bir yazı içerisinde bulunan özel karakterleri değiştirmek için bir fonksiyon yazalım. Bu fonksiyon parametre olarak yazıyı (text) almakta ve geriye düzeltilmiş yazıyı döndürmektedir.

/*
* @param string $text
*
* @return string $text
*/

public function ozelKarakterleriDuzelt($text) {

/*
* Özel karakterlerin karşılıkları
*
* bir dizide toplanır
*/
    $specialLetters = array(

        'a' => array('á', 'à', 'â', 'ä', 'ã'),

        'A' => array('Ã', 'Ä', 'Â', 'À', 'Á'),

        'e' => array('é', 'è', 'ê', 'ë'),

        'E' => array('Ë', 'É', 'È', 'Ê'),

        'i' => array('í', 'ì', 'î', 'ï', 'ı'),

        'I' => array('Î', 'Í', 'Ì', 'İ', 'Ï'),

        'o' => array('ó', 'ò', 'ô', 'ö', 'õ'),

        'O' => array('Õ', 'Ö', 'Ô', 'Ò', 'Ó'),

        'u' => array('ú', 'ù', 'û', 'ü'),

        'U' => array('Ú', 'Û', 'Ù', 'Ü'),

        'c' => array('ç'),

        'C' => array('Ç'),

        's' => array('ş'),

        'S' => array('Ş'),

        'n' => array('ñ'),

        'N' => array('Ñ'),

        'y' => array('ÿ'),

        'Y' => array('Ÿ'),

        'G' => array('Ğ'),

        'g' => array('ğ')

    );


/*
* İç içe döngü ilse yazı içindeki özel karakterler
*
* karşılıkları ile değiştirilir
*/
    foreach ($specialLetters as $letter => $specials) {

        foreach ($specials as $s) {

            $text = str_replace($s, $letter, $text);

        }

    }

    return $text;

}



22 Şubat 2014 Cumartesi

Php ile Web Sayfasının Yüklenme Süresini Ölçme

Bir web sayfasının yüklenmesi için geçen süre, sayfanın browser üzerinde html olarak görüntülenmesi için geçen süredir. Sayfanın yüklenme süresini hesaplamak için iki değişkene ihtiyacımız var. Bunlar sayfanın yüklenmeye başladığı an (startTime) ve sayfanın tamamen yüklendiği  an (stopTime) dır. startTime değişkeni sayfanın başına, stopTime değişkeni ise sayfanın sonuna yazılır. Bu ikisi arasındaki zaman farklı (time) bize yüklenme süresini verir.

   $startTime = microtime(true);

/*
* Sayfadaki kodlar
*
* bu araya yazılmalıdır
*/

   $stopTime = microtime(true);

   $time = $stopTime - $startTime;

/*
* İstatistik tutuyorsanız
* time değişkeni 
* veritbanına kaydedilebilir
*/


19 Şubat 2014 Çarşamba

Php ile Yazı İçindeki Rakamları Temizleme

Php ile bir yazı içinde geçen rakamları temizlemek için bir fonksiyon yazalım. Fonksiyon parametre olarak bir string alıyor ve rakamlardan temizlenmiş yazıyı geriye döndürüyor.

/*
* @param string $text
*
* @return string $text
*/

public function rakamTemizle($text) {

    $search = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9");

    $text = str_replace($search, "", $text);

    return $text;

}


18 Şubat 2014 Salı

Php ile Facebook URL Decode Etme

Dünyanın en büyük sosyal ağı Facebook'ta her gün binlerce, milyonlarca resim ve video paylaşılıyor. Facebook'ta paylaşılan videoları çekmek için bir uygulama yazıyorsanız, videonun linkinin (URL) şifrelenmiş olduğunu göreceksiniz. Video linkinde geçen özel karakterleri çözümlemek için bir fonksiyon yazalım. Bu fonksiyona şifrelenmiş URL argüman olarak verildiğinde geriye dönen değer anlaşılır bir URL olacaktır.

/*
* @param string $url
*
* @return string $url
*/
public function facebook_encode_replace($url) {

    $source = array("\u00253A", "\u00252F", "\u00253F", "\u00253D", "\u002526", "\u00257B", "\u00257D", "\u002522", "\u00252C", "\u00255C", "\u00255D", "\u00255B");

    $replace = array(":","/","?","=","&","{","}","\"",",","\\","[","]");

    $url = str_replace($source, $replace, $url);

    return $url;

}

Php ile Sayı Basamaklarını Formatlı Şekilde Gösterme

Php ile bir sayıyı binler, milyonlar, milyarlar basamakları formatlı bir şekilde göstermek için bir fonksiyon yazalım. Yazacağımız bu fonksiyon, 1209045678 sayısını 1.209.045.678 şeklinde basamakları formatlanmış olarak geriye döndürecektir.

/*
* @param int $number
* @return string
*/
public function basamakFormatla($number) {

    $format = '';

    $i = 0;

    while ($number > 0) {

        $first = $number % 1000;

        $number = ($number - $first) / 1000;

        if ($i == 0) {

            if ($first < 10) {

                $format = '00' . $first;

            } else if ($first < 100) {

                $format = '0' . $first;

            } else {

                $format = $first;

            }

        } else {

            $format = $first . '.' . $format;

        }

        $i++;

    }

    return $format;

}

/*
* Sayımız 45069702 için fonksiyonu
* aşağıdaki gibi çağırıp sonucu
* ekranda görebiliriz
*/

echo basamakFormatla(45069702);

// Sonuç aşağıdaki gibi olacaktır

45.069.702

//


16 Şubat 2014 Pazar

Codeigniter ile Bir Tablodan Veri Çekme

Codeigniter ile veritabanındaki herhangi bir tablodan veri çekmek için bir fonksiyon yazalım. Bu fonksiyon parametre olarak çekilecek kayıt sayısını (limit) alsın. Ayrıca fonksiyon son eklenen kayıtları (order_by) getirsin. Bu durumda Model'imiz ve bu model içindeki fonksiyonumuz aşağıdaki gibi olacaktır.
/*
* Model ismi : Video
* Fonksiyon ismi : getVideos
*/

class Video extends CI_Model {

   public function getVideos($limit) {

        $this->db->select('*');

        $this->db->from('videos');

        $this->db->where('video_status', '1');

        $this->db->order_by('id', 'desc');

        $this->db->limit($limit);


        return $this->db->get()->result();
    }


}

Yazdığımız bu fonksiyon geriye dizi döndürecektir. Bu dizinin her bir elemanı bir Obje'dir. Controller içinde bu fonksiyonu çağırmak için öncelikle yazdığımız Model sınıfını yüklememiz gerekir. Fonksiyondan geriye dönen değeri bir dizi değişkenine atayıp, dönen veriyi göstermek istediğimiz View'e parametre olarak vermeliyiz.

class Show extends CI_Controller {


   public function videos(){

     $this->load->model('video');

     $limit = 100;

     $data['videos'] = $this->video->getVideos($limit);

     if( $data != NULL ) {

       $this->load->view('show_videos', $data);

     }

}

13 Şubat 2014 Perşembe

PHP ile Youtube Linkinden Video ID'si Bulma

Dünyanın en büyük video içerik sitesi olan Youtube'daki videoların ID'lerini herhangi bir youtube linkinden almak için bir fonksiyon tanımlayalım.

/*
*
* @param string $url
*
* @return string
*
*/
public function getVideoIdFromURL($url) {

        $url_string = parse_url($url, PHP_URL_QUERY);

        parse_str($url_string, $args);

        if ( isset($args['v']) ) {

              return $args['v'];

        } else {

             return '';
        }

}


Fonksiyon parametre olarak bir URL almakta ve bu URL Youtube'a ait ise videonun ID'sini, değil ise boş string döndürmektedir.

Codeigniter ile Otomatik Tweet Gönderme

Twitter REST API 1.1 i kullanarak tweet göndermek için https://dev.twitter.com adresine girerek bir uygulama oluşturduktan sonra verilen keyler ile tweet göndermek için Twitter adında bir Controller ve sentTweet adında bir metod tanımlıyoruz.

Tweet gönderebilmek için Github'da yer alan OAuth.php ve twitteroauth.php dosyalarını indirip application/libraries klasörüne kopyalıyoruz. Daha sonra twitteroauth.php dosyasını fonksiyon içinde projemize dahil ediyoruz.

class Twitter extends CI_Controller {

   private $consumerKey = 'Uygulama key';

   private $consumerSecret = 'Uygulama secret';

   private $oAuthToken = 'Uygulama token';

   private $oAuthSecret = 'Uygulama secret';


   public function sentTweet() {

        $data = array();

        $data["consumerKey"] = $this->consumerKey;

        $data["consumerSecret"] = $this->consumerSecret;

        $data["oAuthToken"] = $this->oAuthToken;

        $data["oAuthSecret"] = $this->oAuthSecret;


        $CI = & get_instance();

        $CI->load->library('twitteroauth', $data);

        $tweetText = "Bizimkini hiç denediniz mi? bizimki.com";    

        $status = array('status' => $tweetText);

        $this->twitteroauth->post('statuses/update', $status);

  }

}


Tweet atmak istediğimiz yazıyı ($tweetText) belirleyip post metodu ile gönderilmesini sağlıyoruz.

12 Şubat 2014 Çarşamba

Codeigniter Kullanıcı Kaydı


Codeigniter ile veritabanı işlemleri için model sınıfları oluşturmak gerekir. Yeni bir kullanıcının bilgilerini veritabanına kaydettiğimizi düşünelim. Öncelikle kullanıcı bilgilerini bir dizide toplamalıyız. Bu işlemi tabiki controller içinde yapmalıyız.

/*
* Profile adından controller oluşturalım
*/

class Profile extends CI_Controller {

    public function __construct() {

        parent::__construct();

    }


    public function signup($userData) {

/*
* Üyelik formundan gelen bilgileri 
* diziye aktaralım
*/

        $data["fullname"] = $this->input->post('fullname',TRUE);

        $data["username"] = $this->input->post('username',TRUE);

        $data["password"] = sha1 ( $this->input->post('password',TRUE) );

        $data["date"] = time();

        $data["status"] = '1;

/*
* Model sınıfını yükleyelim
*/

        $this->load->model('user');

/*
* Model sınıfının newUser metonu çağıralım
*/
        $this->user->newUser($userData);
    }

 }   


Bu durumda model sınıfı içinde bu işlemi yapacak bir metot tanımlamamız gerekir. Bu metot parametre olarak ise kullanıcı bilgilerinin olduğu diziyi almalıdır. Kullanıcıyı veri tabanına kaydeden metodumuzun içeriği aşağıdaki gibi olacaktır.
class User extends CI_Model {

    public function __construct() {

        parent::__construct();

    }

/*
*
* @param array $userData
*
* @return boolean
*
*/
    public function newUser($userData) {

        $this->db->insert('users', $userData);

        if ($this->db->insert_id() > 0) {

            return TRUE;

        } else {

            return FALSE;

        }

    }

}

10 Şubat 2014 Pazartesi

PHP ile Bir Yazıdaki Kelimeleri Hashtag'lemek

Php'de bir fonksiiyon ile bir yazıda geçen tüm kelimeleri hashtagli olarak geri döndürebiliriz. Bunun için öncelikle yazıda geçen tüm noktalama işaretlerini ve yazının başında, sonunda bulunan boşlukları temizlemek ve yazı içindeki boşlukları teke indirmek gerekir. Bunun için öncelikle bir fonksiyon yazalım.
function noktalamaTemizle($text) {

    $search = array("'", ".", ",", ";", "!", "?", ":", "(", ")", "[", "]", "{", "}");

    $text = str_replace($search, "", $text);

    return $text;
}

Yazıda geçen tüm boşlukları tek boşluğa çeviren fonksiyonu yazalım.
/*
*
* @param string $text
*
* @return string
*
*/
function boslukTemizle($text) {

    $text = trim($text);

    $text = str_replace("  ", " ", $text);

    return $text;
}

Şimdi yazıda geçen tüm kelimeleri hashtagli olarak geri döndüren fonksiyonu yazalım.

/*
*
* @param string $text
*
* @return string
*
*/
function hashtagle($text) {

    $text = "#" . $text;

    $text = str_replace(" ", " #", $text);

    return $text;
}

Yazdığımız bu fonksiyonu aşağıdaki gibi çağırabiliriz.
$text = "Bugün, güzel bir gün değil mi?";

$hashText = hashtagle(boslukTemizle(noktalamaTemizle($text)));

echo $hashText;

//Çıktı aşağıdaki gibi olacaktır

// #Bugün #güzel #bir #gün #değil #mi


9 Şubat 2014 Pazar

Codeigniter Hepler Oluşturma

Codeigniter içinde  bulunan veya bizim oluşturacağımız kendi helper'larımızı projenin herhangi bir yerinde, bu bir Model, bir Controller veya bir View olabilir, obje oluşturmadan doğrudan fonksiyonu çağırarak kullanabiliriz.

Codeigniter ile kendimize ait helper dosyaları oluşturabilmek için öncelikle application/helpers klasörü altında dosya_helper.php gibi bir PHP dosyası oluşturalım. Bu helper'ımızda dosya işlemleri ile ilgili fonksiyonlarımızı tutacağız. İlk fonksiyonumuz, bir dosyayı satır satır okuyan ve bu dosyadaki herhangi bir satırı random olarak geri döndüren bir fonksiyon olsun.

Fonksiyonumuz readRandomLineFromFile aşağıdaki gibi olacaktır.

function readRandomLineFromFile($filePath) {

    $handle = fopen($filePath, "r");

    $data = array();

    $lineCount = 0;

    if ($handle) {

        while (($line = fgets($handle)) !== false) {

            $data[] = $line;

            $lineCount++;

        }

    } else {

        return false;

    }

    return $data[rand(0, $lineCount)];

}


Artık dosya adında bir helper'ımız ve bunun içinde readRandomLineFromFile adında bir fonksiyonumuz var. Bu dosya helper'ımızı application/config/autoload.php dosyasında aşağıdaki gibi projemize dahil etmeliyiz.

//Heplerın ismi array içine yazılır

$autoload['helper'] = array('dosya');

//

Projemizin herhangi bir yerinde helper'ımızı aşağıdaki gibi çağırabiliriz.

//Dosyanın bulunduğu klasörü belirtiyoruz

$path = 'public/texts/videolar.txt';

$text = readRandomLineFromFile($path);

/*
* Fonksiyonun döndürdüğü satırı
* istediğimiz gibi kullanabiliriz
*/
echo $text;

//

8 Şubat 2014 Cumartesi

Codeigniter ile Kayıtlı Kullanıcı Bilgilerine Ulaşma

Codeigniter ile veritabanı işlemlerini gerçekleştirmek için $this->db objesi kullanılır. Bu obje ile application/config/database.php dosyasında tanımladığımız veritabanı içindeki tablolara ulaşabilir ve bu tablolar üzerinde insert - select - update - delete işlemleri yapabiliriz.

Örneğin , kullanıcı girişinin olduğu bir web sitemizde, kullanıcıdan kullanıcı adı (username) ve parola (password) bilgilerini alarak, veritabanındaki bir tablodan (users) bu kullanıcının tüm bilgilerini çektiğimizi düşünelim.

Bunun için öncelikle bir Controller'ımız olması gerekiyor. User olarak adlandıralım bunu. Controller'ımız içinde ise bu kullanıcının yapabileceği işlemler için fonksiyonlar - metotlar tanımlamamız gerekir. User Controller'ı içindeki metodumuz ise login() olsun.

Controller sınıfımız yapı olarak aşağıdaki gibi olacaktır.

if (!defined('BASEPATH')) {
    exit('No direct script access allowed');
}

class User extends CI_Controller {

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

    public function index() {
        
    }

    public function login() {

    }
}

Şimdi login metodu içinde kullanıcının bir form ile girdiği bilgileri alıp, veritabanından kullanıcı bilgilerini çekelim. Öncelikle verileri çekeceğimiz bir Model sınıfı oluşturalım.

class User_model extends CI_Model{
    
    public function __construct() {
        parent::__construct();
    }

}

Sonra bu Model sınıfını Controller sınıfına dahil edelim ve kullanıcı bilgilerini alalım.
 
    public function login() {
        $this->load->model('user_model');

        /*
         * Formdan POST ile gelen kullanıcı adı ve şifre
         * değişkenlere aktarılıyor
         */

        $u_name = $this->input->post('username', TRUE);
        $u_pass = $this->input->post('password', TRUE);
    }

Şimdi Model sınıfında getUser( ) metodu tanımlayalım. Veritabanında kullanıcı şifresini sha1 algoritamasına göre sakladığımızı düşünelim. Bunun için kullanıcının girdiği şifreyi hemen sha1 algoritamasından geçirmeliyiz. Daha sonra SQL cümleleriyle kullanıcı bilgilerini users tablosundan çekiyoruz.

class User_model extends CI_Model{
    
    public function __construct() {
        parent::__construct();
    }
    
    public function getUser($userName, $password){
        
        $password = sha1($password);
        
        $this->db->select('*');
        $this->db->from('users');
        $this->db->where('user_username',$userName);
        $this->db->where('user_password',$password);
                
        return $this->db->get()->result();
    }

}

Tanımladığımız getUser( ) metodu bize dizi döndürecektir. Dönen bu değerleri Controller içindeki login( ) metodunda bir değişkene aktarıp, oluşturacağımız View sayfasına bu değişkendeki verileri göndereceğiz.
 
    public function login() {
        $this->load->model('user_model');
        $u_name = $this->input->post('username', TRUE);
        $u_pass = $this->input->post('password', TRUE);

        //Model sınıfının getUser metodu çağrılıyor

        $data['info'] = $this->user_model->getUser($u_name, $u_pass);
        $this->load->view('user_info_view', $data);
    }

Kullanıcı bilgilerini göstereceğimiz user_info_view dosyasında ise aşağıdaki gibi kullanıcı bilgilerine ulaşabiliriz.
/*
* Veritabanından gelen data dizi şeklinde
* olduğu için döngü ile kullanıcıya ulaşılır.
* Ayrıca kullanıcı bilgisi bir objedir.
*/

foreach ($info as $user) {
    $id = $user->id;
    $name = $user->name;
    $username = $user->username;
    $email = $user->email;
    $user_role = $user->role;
}       

Kullanıcı bilgilerini bir tabloya ya da div içine yazarak gösterebiliriz.

Python Nedir?


Python, bir programlama dilidir. Python programlama dili, Hollandalı programcı Guido Van Rossum tarafından 90’lı yılların başında geliştirilmeye başlanmıştır. Python programlama dilinin adı ile piton yılanı arasında bir ilişki yoktur. Bu programlama dilinin adı piton yılanından gelmez. 

Python pek çok dile kıyasla öğrenmesi kolay bir programlama dilidir. Eğer daha önceden hiç programlama deneyiminiz yoksa, programlamaya Python’la başlayabilirsiniz.

6 Şubat 2014 Perşembe

Java Server Faces (JSF)


Java Server Faces bir framewok'dür. Java Server Pages(JSP)’den farklı olarak kullanıcı arayüzü sağlanmaktadır. Java Server Pages’e göre en büyük artısı AJAX’a kolayca hükmedebilmenizdir. 

Hazır bileşenler ve etiketler ile yapmak istediğiniz işlemleri yapabilirsiniz. JSF, üst seviyede programlar yapmayı kolaylaştırmaktadır. 

Java Server Faces‘in çalışması olaylara (events) dayanmaktadır. Tıklandığında veya yapıldığında gibi eylemlere tepki verebilmektedir. Mouse tıklanması , klavye tuşuna basılması gibi bir etkileşim sonrası bir metod çalışır. Java Server Faces, Hibernate, Spring gibi Java tabanlı teknolojiler ile birlikte çalışmaktadır.

CodeIgniter Nedir?


Codeigniter PHP dili ile web uygulaması geliştirmek isteyenler için oluşturulmuş bir frameworktür. Web uygulamalarındaki kütüpheneleri size hazır olarak sunarak uygulama geliştirmenizi hızlandırır. 

Codeigniter, yazmış olduğunuz kod sayısını azaltarak aynı işi daha kısa sürede ve daha temiz kod yazarak yapmanızı sağlar. Birçok framework'de olduğu gibi Codeigniter, MVC (Model - View - Controller) tasarım desenini kullanıyor. Veritabanı ile ilgili işlemleri Model sınıfları, Tasarım ile ilgili işlemleri View dosyaları, uygulamanın çalışmasını ise Controller sınıfları sağlıyor.

Heroku


Heroku bir bulut PaaS (Platform as a Service) sistemidir. Heroku, 2007'de ortaya çıkmıştır. Heroku gibi PaaS sistemlerde servisler bulunmaktadır ve kullanıcılar istediği servisleri kullanarak uygulamalarını buralarda çalıştırabilmektedir. Heroku'da default gelen hizmetler ve bunlara ek olarak ihtiyaçlara göre ücretli olan hizmetler de vardır. 

Heroku uygulamaları bulut üzerinde saklamaya yarar. Bulutta saklayabileceğimiz uygulamalar PHP, Java, Scala, Python, Ruby, NodeJS gibi diller ile yazılan projelerdir. 

Heroku birçok geliştirici tarafından facebook tarafında uygulama geliştirmek için de kullanılmaktadır. Bir facebook uygulaması yazdınız ve sunucuya ihtiyacınız var. İşte bu sunucu ihtiyacınızı facebook'da uygulamanızı yayınlarken karşınıza gelen "Heroku" seçeneğini işaretleyerek gideriyorsunuz. 

Heroku kullanmaya başlamadan önce, resmi internet sitesinden kayıt yaptırmanız yeterli oluyor.

4 Şubat 2014 Salı

Kuantum Kuramında Belirsizlik


Albert Einstein'in kuantum kuramı ile ilgili söyledikleri gecenin geç saatlerinde Werner Heisenberg'in kalbini kırmış olamazdı, sadece onu düşünceli bir şekilde gezintiye çıkarmıştı. Einstein ne mi söylemişti? "Bu, bizim neyi gözleyeceğimize kendisi karar veren bir kuram" demişti. 

Gezintisini sürdüren Hesinberg'in beyninde şimşekler çaktı: "Atomun çok küçük ölçeklerinde, kesin olarak bilinebilecek doğal sınırlar olmalı" diye düşündü. Bu düşünce, bir parçacığın konumu ya da momentumunu hassas olarak ölçmenin mümkün, fakat aynı anda ölçmenin mümkün olamayacağı sonucunu ortaya çıkarıyordu. 

Ölçüm aletleri ölçmeyi doğrudan etkiliyordu. Bu ise bizi kuantum kuramının doğal bir sonucu olan, ölçüm sürecini değiştirmeden atomaltı dünya hakkında kesin bilgiler edinilemeyeceğine götürüyordu. 

Bir parçacığın konumunu ne kadar hassas belirlerseniz, momentumu hakkındaki bilgileriniz o kadar azalır ve tersine; bir parçacığın momentumunu ne kadar kesin ölçerseniz konumu hakkında da o kadar az bilgiye sahip olursunuz. İşte bu tam olarak "Heisenberg Belirsizlik İlkesi" nin kısa ve öz ifadesidir. 

Momentum ve konum ölçümünde ortaya çıkan belirsizlikler, parçacığın enerji ve zaman ölçümlerinde de ortaya çıkar. Unutmamak gerekir ki, belirsizliklerin ortaya çıkması ölçümü yapanın hatası değil, kuantum kuramının kaçınılmaz matematiksel bir sonucudur. Basit bir denklem ile belirsizlik ifade edilir. Ancak içerdiği anlam, hala üzerinde büyük tartışmaların olduğu bir ilkeye işaret ediyor.

Apache Lucene


Lucene günümüzde oldukça popülerdir ve pek çok web sitesi ve uygulamada kullanılmaktadır. Full text arama içeren her türlü masa üstü veya web uygulamasında Lucene kullanılabilir. Duydum ki Twitter, Mysql'i bırakıp 2011 yılında Lucene'e geçmiş. Bu geçiş Twitter'ın çok büyük arama ihtiyacını karşılamak için sistemleri 3 kat hızlandırmış. 

Lucene, Java dili ile yazılmış açık kaynak bir kütüphanedir. Her ne kadar Java’da yazılmış olsa da, bugün diğer dillerde de kullanılabilmektedir. Lucene; Delphi, Perl, C#, C++, Python, Ruby ve PHP gibi birçok farklı dilde yeniden yazılmıştır. 

Bir kütüphane olduğu için de hemen kurup kullanabileceğiniz bir uygulama değildir.Sağladığı API ile kolayca fulltext aramaları yapan bir uygulama geliştirebilirsiniz. 

Lucene ile Wildcard, Fuzzy, Proximity, Range, Boosting a Term, Boolean Operatörler kullanılarak arama yapılabilmektedir. Lucene; PDF, HTML ve Microsoft Word belgeleri gibi birçok farklı dosya türü içinde arama yapabilmekte ve sonuçları listeleyebilmektedir. 

Lucene birçok alt projeden oluşmaktadır. Apache'nin projelerinden Nutch, Lucene'i temel almakta, listeleme, arama ve HTML sayfası içinde ayrıştırma yapabilmektedir. Apache'nin diğer projelerinden Solr ise Lucene üzerine kurulmuş gelişmiş bir arama sunucusudur.

Hibernate Nedir?


Hibernate verilerin saklanması, güncellenmesi, silinmesi gibi veritabanı işlemlerini nesne tabanlı modele göre kolaylaştırmak için kullanılan bir java teknolojisidir. Hibernate, bir framewok'dür. 

Hibernate, bir ORM (Object Relational Mapping) aracıdır. Hibernate, bir nesnenin veri tabanında hangi tabloya karşılık geldiğini işaretler. Bu işaretleme işlemine mapping denir. Mapping'in nasıl olacağına biz karar veririz. 

Hibernate, herhangi bir veritabanı işlemi için POJO (Plain Old Java Object)'lardan yararlanır. Bir POJO nesnesi attribute ve getter/setter metotlarından bir java nesnesidir.

Spring


Spring, kurumsal java uygulamaları geliştirmeyi kolaylaştıran ve hızlandıran Application Framework (Uyguluma geliştirme çatısı) dır. Spring ile üzerinde kolayca test edilebilir, yüksek performanslı uygulamalar geliştirilebilmektedir. Rod Johnson tarafından geliştirilmiş olup, ilk olarak 2003 yılında Haziran ayında Apache 2.0 lisansı altında yayınlanmıştır. 

Spring, herhangi bir Java uygulaması tarafından kullanılabilmektedir. Eklentileri ile birlikte Java Enterprise platform üzerinde web uygulamaları geliştirmek için de kullanılabilir. 

Spring Web Framework, popüler olan Struts ve diğer kütüphaneler gibi iyi tasarlanmış bir MVC (Model - View - Controller) alt yapısı sağlamaktadır. Spring framework; paketleri, modülleri, sınıf yapıları ve birçok özelliği ile kaliteli bir yazılımdır. Spring modüler yapısı 20 modülden oluşmaktadır. Tüm modülleri kullanma zorunluluğu olmadan istenilen modülü kullanarak uygulama geliştirmeye izin vermektedir.

3 Şubat 2014 Pazartesi

Redis


Redis, veriyi hafızada tutmaktır. Redis, alışveriş sepetindeki ürünleri veritabanında tutmamaktır. Redis, geçici olan hiçbir şeyi veritabanına gereksiz yere yazmamaktır. 

Redis, açık kaynaktır. Redis, basit değil ama sade bir yapıya sahiptir. Redis, çeşitli veri yapıları kullanmaya imkan sağlayan bir sunucudur. Redis, bir key (anahtar) - value (değer) store (deposu)'dur. 

Redis yüksek performanslı cacheing mekanizmasına sahiptir. Redis, memcached'den farkıdır. Memcached, sadece veri girişi ve çıkışı yapabilir. Redis, veriyapıları kullandığı için bir çok atomik fonksiyonu destekler. Redis ile bir string'e yeni stringler ve değerler ekleyebilirsiniz. Memcached, veriyi RAM'de tutar ancak tuttuğu veriyi dosyaya yazmaz, yazamaz. Memcached, üzerinde çalıştığı server kapandığı zaman sonlanır. 

Pekiyi redis öyle midir? Redis'de veriyi RAM'de tutar ancak istenen aralıklarla veriyi diske (dosyalara) kaydebilir. Şöyle ki Redis belirli periyotlarda aklında tuttuğu verileri bir dosyaya yazdığı için veri kaybı söz konusu değildir.

Django Nedir?


Django, web uygulaması geliştirmek için kullanılan bir framework'dür. Django framework'ünün ilk sürümü 2005 yılında yayınlanmıştır. Özellikle hızlı web projeleri geliştirmek için tercih edilmektedir. Django framework'u Python dili ile yazılmıştır. Django, Python 2.x sürümlerinde çalışmaktadır. 

Django, diğer web frameworkleri gibi MVC (Model - View - Controller) yapısına benzer bir yapı olan MVT (Model - View - Template (URL)) yapısını kullanır. Model, veritabanı işlemlerinin yapıldığı yerdir. View, web uygulamasının Python dili kullanılarak geliştirildiği kısımdır. Template, web uygulamasının tasarımının yapıldığı kısımdır.

Kuantumsal Çipetpetler


Beynimizi iki bölüme ayırabiliriz. Mantıkla ilgili olan sol tarafı ve sezgiyle ilgili olan sağ tarafı. Ve her lobun sahip olduğu yeteneği kullanmak kişiden kişiye değişecektir. Örneğin, bunlardan biri tamamen mantığına güvenen birisi, diğeri tamamen sezgilerine güvenen birisi olacaktır. Bir diğeri ise hem mantığına hem de sezgilerine güvenen birisi olacaktır. 

Peki bu ölçekte beyninizi siz nereye koymak istiyorsunuz? Aynı anda her iki lobda da yüksek bir yetenek mevcut. Loblar birbirini dışlayan ya da destekleyen bir şekilde çalışmıyorlar. Kısaca, aynı zamanda hem mantıklı hem de sezgisel olabilirsiniz. 

Kendimi, mantığı çok iyi olan ve bu karmaşık fikirleri iyi bir şekilde bir araya getirebilen deneysel kuantum fizikçilerden birisi olarak düşünsem de aynı zamanda, iyi bir sezgiye de ihtiyacım var. Bir kuantum fizikçisi olarak sezgilerimi nasıl geliştirebilirim? 

Her insan bir şeyler ile oynamayı sever. Bu yüzden onlarla iyice oynarız sonra onların nasıl davrandığına bakarız. Böylelikle sezgimiz gelişir. Ve bunca yıldır geliştirdiğiniz sezgi herhangi bir şeyin belli bir zamanda belli bir yerde olacağıdır. "Bir şeyin aynı anda iki farklı yerde olacağını" düşünmek kulağa saçma gelebilir. Fakat bu kavramı siz geliştirdiniz, böyle doğmadınız. 

Parçacık fizikçileri de garip küçük parçacıklar ile oynuyorlar. Ve parçacıklar ile oynarken, gerçekten tuhaf şeyleri buluyorlar. Duvarların içinden geçebilen ya da aynı anda iki farklı yerde olabilen şeyleri. Sonra tüm bu gözlemleri alt alta yazdıkları zaman ona kuantum mekaniği teorisi diyiyorlar. İnanılmaz değil mi?

Apache Solr Nedir?


Diyelim ki bir web uygulamanız var. Bu uygulamanızın en önemli modüllerinden birisi de arama modülü. Arama işlemlerini milyonlarca satır kayıt bulunan bir veritabanı üzerinde gerçekleştiriyorsunuz. Uygulamanız yüksek trafik almaya ve arama modülünüz yavaşlamaya başladı. Uygulamanızın performansı gün gittikçe düşüyor. Artık metin arama (full text search) en karmaşık konulardan birisi haline geldi sizin için. Eğer veritabanı motorunuz, full text search desteklemiyorsa, harici bir arama motoru kullanmanın zamanı gelmiştir demektir. İşinizi kolaylaştıracak arama motorlarından biri Apache Solr artık en iyi yardımcınız. 

Solr, Lucene üzerine kurulu, arama uygulamalarında kullanılan bir Apache ürünüdür. Solr ve Lucene arasındaki ilişki araba ve araba motoru arasındaki ilişkiye benzer. Lucene motor, Solr ise arabadır. Lucene olmadan Solr çalışmaz. 

Lucene; temelde metin analizi, indexleme ve arama gibi temel işlevleri sunan bir Apache projesidir. Solr ise, Lucene temelini kullanan, onun üstüne filtreleme, faceting, önbellekleme, dağıtık mimari desteği gibi şeyleri kolay yapılandırma dosyaları ile yönetebilmenizi sağlar. Verileri XML, JSON, Binary gibi çeşitli formatlarda almanızı sağlar. 

Solr, Java ile geliştirilmiştir. Solr açık kaynak kodludur. Solr farklı sunucular (Jetty, Resin, JRun, Tomcat) üzerinde çalışır. Herhangi bir programlama dili kullanmadan, Solr sunucuyu kurulur. Solr ile verilerinizi sunucuda indekslersiniz. Bu veriler üzerinde arama yapabilmeyi Solr ile sağlarsınız. 

Solr için veriler “Document” olarak adlandırılır. Solr’a veri eklemek demek yeni bir “Document” eklemek demektir. Solr her şeyi bir "döküman" olarak saklar. Dökümanları veritabanındaki satırlar (row) olarak düşünebilirsiniz. Örneğin Vidomix gibi bir video sitesinin veritabanındaki bir "videolar" tablosunu tasarlarken, video_id, video_title, video_info, video_time gibi alanlar (fields) oluşturyorsak aynı mantık ile "Solr Document" tasarlanır. 

Solr’da indekslemek istediğimiz veriyi bir Document olarak tasarlar ve bu Document’in tüm özelleklerini (field) belirledikten sonra uygun şekilde veri setleri oluşturulup Solr’a eklenebilirsiniz. Indekslenen bu veriler üzerinde HTTP isteği ile sorgulama yaparak, sonuçları çok hızlı bir şekilde ve istediğimiz formatta elde edebilirsiniz

Apache Lucene


Lucene günümüzde oldukça popülerdir ve pek çok web sitesi ve uygulamada kullanılmaktadır. Full text arama içeren her türlü masa üstü veya web uygulamasında Lucene kullanılabilir. Duydumki Twitter, Mysql'i bırakıp 2011 yılında Lucene'e geçmiş. Bu geçiş Twitter'ın çok büyük arama ihtiyacını karşılamak için sistemleri 3 kat hızlandırmış. 

Lucene, Java dili ile yazılmış açık kaynak bir kütüphanedir. Her ne kadar Java’da yazılmış olsa da, bugün diğer dillerde de kullanılabilmektedir. Lucene; Delphi, Perl, C#, C++, Python, Ruby ve PHP gibi birçok farklı dilde yeniden yazılmıştır. Bir kütüphane olduğu için de hemen kurup kullanabileceğiniz bir uygulama değildir.Sağladığı API ile kolayca fulltext aramaları yapan bir uygulama geliştirebilirsiniz. 

Lucene ile Wildcard, Fuzzy, Proximity, Range, Boosting a Term, Boolean Operatörler kullanılarak arama yapılabilmektedir. Lucene; PDF, HTML ve Microsoft Word belgeleri gibi birçok farklı dosya türü içinde arama yapabilmekte ve sonuçları listeleyebilmektedir. 

Lucene birçok alt projeden oluşmaktadır. Apache'nin projelerinden Nutch, Lucene'i temel almakta, listeleme, arama ve HTML sayfası içinde ayrıştırma yapabilmektedir. Apache'nin diğer projelerinden Solr ise Lucene üzerine kurulmuş gelişmiş bir arama sunucusudur.