21 Ağustos 2008

JSON veri biçimi (JavaScript Object Notation)

JSON (JavaScript Object Notation) hafif bir veri değişim biçimidir. Javascript dili üzerine oluşturulmuştur ancak bugün birçok programlama dilinde kullanılmaktadır.

Temel mantık olarak XML 'e benzer ancak XML 'de olduğu gibi imler kullanılmaz. Bu yüzden daha hafif bir yapıya sahiptir ve bu özelliğiyle tercih sebebi olmaktadır. Json biçiminin bir avantajı da yapı olarak programlama dilleriyle uyum içinde olmasıdır. En başta javascript olmak üzere C türevi dillerde kullanılmak üzere uygun bir yapıya sahiptir. Json hakkında ayrıntılı bilgiye http://www.json.org/json-tr.html adresinden ulaşabilirsiniz.

Aşağıda örnek bir json verisi verilmektedir:


{
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}
}

Günümüzde bu iki yapı (xml ve json) veri aktarımında sıkça kullanılmaktadır. Json biçiminde xml 'de olduğu gibi imler kullanılmadığı için veri daha az yer kaplar. Çok miktarda veri aktarımı yapılan uygulamalarda json ile xml arasındaki boyut farkı daha belirgin olmaktadır.

Json yapısını kullanırken (kodlama ve açma işlemleri için) dönüştürücü işlevlere ihtiyaç duyarsınız. Bunun için php dilinde json_encode ve json_decode işlevleri kullanılır. Javascript dilinde ise herhangi bir kütüphaneden bağımsız dönüştürme işlevleri bulabileceğiniz gibi Jquery gibi bir kütüphane için yazılmış eklentiler de kullanabilirsiniz. Ama veriyi javascript kodunuzda kendiniz oluşturuyorsanız doğrudan json yapısını kullanabilirsiniz. Bu durumda dönüştürme yapmanıza gerek yoktur.

Php ile json_encode kullanarak bir veriyi dönüştürdüğünüzde tek satırlık bir json veri yapısı elde edersiniz. Json verisini girintili olarak rahat okunabilir bir biçimde elde etmek için bu amaçla yazdığım aşağıdaki işlevi kullanabilirsiniz.


function format_json_line($json){
$json = str_split($json);
$formatted = '';
$level = 0;

foreach($json as $char){
$after="";
$before="";
$tabs="";
if($char=='{'){
$level++;
$after="n";
for($i=0;$i<$level;$i++){
$after.="t";
}
}
if($char=='}'){
$before="n";
$level--;
for($i=0;$i<$level;$i++){
$before.="t";
}
}
if($char==','){
$after="n";
for($i=0;$i<$level;$i++){
$after.="t";
}
}
$formatted.=$before.$char.$after;
}
return $formatted;
}

19 Ağustos 2008

Php 'de Mysql kullanımı

Php gibi sunucu taraflı bir dil kullanılan sitelerin çoğu veri depolamak için bir veritabanı sistemi kullanır. Şu an kullanımda olan çeşitli veritabanı sunucuları arasında php ile birlikte en sık kullanılanı MySQL dir. Bu yazıda php kodları ile nasıl mysql sunucusuna bağlanıp sorgu işlemleri gerçekleştireceğinizi ilgili işlevleri açıklayarak örneklerle anlatmaya çalışacağım. Mysql ile ilgili ayrıntılı bilgiye MySQL in resmi sitesi olan www.mysql.com 'dan ulaşabilirsiniz. Ayrıca php.net de bu konuda açıklayıcı bilgi veren ve ilgili php işlevlerini liste halinde görebileceğiniz http://tr2.php.net/mysql adresini kaynak olarak kullanabilirsiniz.

Php ile mysql işlemleri gerçekleştirebilmemiz için ilk önce mysql sunucusuna bağlanmamız gerekir. Bunun için mysql_connect işlevini kullanırız:



$link = mysql_connect($server, $username, $password);

Bu ifadedeki parametrelerimiz sırasıyla sunucu adresi, veritabanı kullanıcı adı ve şifremizdir. mysql_connect işlevi elde edilen bağlantıya ait bir kaynak döner ancak çoğu zaman bunu kullanmaya ihtiyaç duymayız. Ancak aynı kod içinde birden fazla veritabanına eşzamanlı olarak bağlantı sağlamak istiyorsak varsayılan olarak en son yapılan bağlantı kullanıldığı için bunun haricindeki bağlantılarla ilgili sorgulamalarda ilgili kaynak değişkenini kullanırız. Çoğu zaman böyle bir durumla karşılaşmazsınız. Bağlantının başarısız olması durumunda dönüş değeri FALSE olur.

Bağlantı sağlandıktan sonra ilk yapmamız gereken veritabanı seçimi yapmaktır. Bunun için mysql_select_db işlevini kullanırız.



bool mysql_select_db ( string $database_name [, resource $link_identifier ] )


Zorunlu olan tek parametre veritabanı adıdır. İkinci parametre ise kullanmak istediğimiz bağlantıya ait kaynak bağlantı değişkenidir. Bu işlev de başarılı olma durumunda TRUE , hata durumunda FALSE değerini döner.

Veritabanı seçimi de başarıyla tamamlandığında artık sorgulama yapabiliriz. Bunun için ise mysql_query işlevi kullanılır.



resource mysql_query ( string $query [, resource $link_identifier ] )

Bu işlevi bir örnekle açıklayalım:


$sonuc = mysql_query("SELECT * FROM `uyeler` WHERE `id`=12 ");

Bu ifadeyle uyeler tablosunda id değeri 12 olan kaydı elde etmek üzere sorgulama yapıyoruz. Birden fazla bağlantı açtığımız özel bir durum olmadığı sürece ikinci parametreyi kullanmaya ihtiyacımız olmayacak. Bu işlev ile sorgudan elde edilen sonucu bir değişkene kaydediyoruz. Bu sonuç değişkeni sorguyla elde ettiğimiz kayıtları toplu halde içerir ve bu kayıtları sırayla elde etmek için kayıt getirme işlevlerinden birini kullanırız. Bunlar mysql_ fetch_ row, mysql_ fetch_ assoc, mysql_ fetch_ array ve mysql_ fetch_ object işlevleridir. Bu işlevlerin herbiri sonuç verimizin içinden bir kayıt satır çeker.

Elde etmek istediğimiz satırı
mysql_fetch_row işleviyle sayısal indisli bir dizi olarak,
mysql_fetch_assoc işleviyle tablodaki sütun adlarıyla ilişkili bir dizi olarak,
mysql_fetch_array işleviyle ister sayısal, ister ilişkisel, ister her iki türde indisli bir dizi olarak,
mysql_fetch_object işleviyle ise sütun adlarında değişkenlere sahip bir nesne olarak
elde ederiz.

mysql_fetch_assoc işlevi ile bir örnek gösterelim:




$satir = mysql_fetch_assoc($sonuc);
$kullanici_adi = $satir['kullanici_adi'];
...

Bu şekilde elde ettiğimiz satırın sütunlarına erişebiliriz. mysql_fetch_object işlevini kullanmış olsaydık kullanıcı adını

$kullanici_adi = $satir->kullanici_adi ;

şeklinde bir nesne öğesi olarak elde edecektik. Birden fazla kayıt elde etmek için ise aşağıdaki gibi bir döngü kullanabiliriz:


while($satir = mysql_fetch_assoc($sonuc) ){
echo 'Kullanıcı adı: '.$satir['kullanici_adi'];
}

Sorgu sonucuna ait bütün satırlar bittiğinde mysql_fetch_assoc (yada diğer işlevlerden biri) FALSE döneceğinden döngü sona erecektir. Bu şekilde elde ettiğimiz verileri istediğimiz şekilde kullanabiliriz.

Sorgu sonucuna ait veriyi serbest bırakmak için mysql_ free_ result işlevini kullanabilirsiniz. Ama bunun yerine aynı sonuç değişkenini başka sorgularda da kullanabilirsiniz.

Bağlantıyı bitirmek istediğinizde mysql_ close işlevini kullanabilirsiniz. Bu genelde pek kullanılmaz çünkü kodun çalışması sona erdiğinde bağlantı zaten kesilecektir.

18 Ağustos 2008

JQuery Javascript kütüphanesi hakkında

Jquery basitçe John Resig tarafından geliştirilmeye başlanmış ve bugüne kadar birçok kişi tarafından eklentisi yazılmış olan kullanımı kolay bir javascript kütüphanesi olarak tanımlanabilir. Jquery.com anasayfasında basit bir örnek var ve bu örnek çok kısa bir javascript koduyla nasıl ilginç ve faydalı şeyler yapabileceğinizi göstermek üzere yazılmış uygulamalı bir tanıtım kodu. Jquery ile belgenizdeki herhangi bir öğeye erişmek için fazla çaba sarfetmenize gerek yok. Kolayca herhangi bir öğeye erişebilir, içeriğini değiştirebilir, css özelliklerini değiştirebilir, animasyon uygulayabilirsiniz. Bunun yanında çok faydalı bir kullanım alanı da ajax uygulamaları geliştirmek. Kütüphanenin son sürümünün (v1.2.3) boyutu yaklaşık 100 kb ama paketlenmiş hali 30kb yani birçok web sitesinde bulunan resim dosyaları kadar. Bu yüzden verimli bir şekilde kullanılabiliyor.

Jquery, yapısı gereği eklenti yazmaya çok uygun. Jquery için yazılmış eklentileri sitesindeki plugins bölümünde bulabilirsiniz. Aklınıza gelebilecek her türlü ihtiyaç için eklentiler yazılmış. Jquery ifadeleri klasik yapısal programlama ifadelerinden biraz farklı bir yapıya sahip. Herşeyden önce ihtiyacınız olan işlemleri yapmak için farklı ifadeler kullanmak yerine zincirleme bir işlemler dizisi kullanabilirsiniz. Çünkü herhangi bir işleve yapılan çağrı yine bir jquery nesnesi döndürüyor ve bu sayede üzerinde tekrar tekrar işlem yapabileceğiniz zincirleme ifadeler oluşturabilirsiniz. Jquery.com da yer alan örnek ifadeye bir göz atalım:


$("p.surprise").addClass("ohmy").show("slow");

Burada ilk dikkatinizi çeken $ işareti aslında jquery nesnesini oluşturan temel işlevin adı. Bazı kaynaklarda bunun yerine jquery() kullanıldığını görebilirsiniz. $ şeklindeki kullanımın işleri kolaylaştırmak için sonradan eklendiğini tahmin ediyorum.

Parametre olarak verilen "p.surprise" ise bir seçici sözcesi. Yeri gelmişken, jquery 'deki query kelimesi Türkçe'de sorgu anlamına geldiğini söylemeliyim. Jquery ile sanki bir veritabanında sorgulama yapıyormuş gibi sayfanızın tamamında yada herhangi bir bölümünde istediğiniz koşullara uyan öğelere erişebilirsiniz. Bu sizi şaşırtmasın çünkü jquery ile sadece sayfanızdaki herhangi bir öğeye değil aslında bir eşlemeye uyan tüm öğelere erişirsiniz. Yani jquery içsel bir döngüyle çalışır. Hatta each işlevi ile bu sorgudan dönen sonuçlar üzerinde bir döngü kurabilir ve her öğe üzerinde işlem yapabilirsiniz.

Örneği açıklamaya devam edelim. İfademizin ilk kısmı olan $("p.surprise") ile surprise sınıfıyla tanımlanmış tüm p imlerine yani tüm paragraf öğelerine erişiyoruz. Yani bu ifade ile sayfamızda bulunan


<p class="surprise">merhaba jquery</p>

şeklinde bir öğeyi (ve varsa diğerlerini de) elde ederiz. Zincirin ikinci kısmı olan .addClass("ohmy") ile bu öğeye ohmy sınıfını ekliyoruz. Paragrafımızın yeni hali şöyle oluyor:


<p class="surprise ohmy">merhaba jquery</p>

İfademiz, zincirimizin son parçası olan .show("slow") ile tamamlanıyor. Burada paragraf öğemizi bir efekt kullanarak görünür kılıyoruz ve hızını da parametre olarak verdiğimiz değerle ayarlıyoruz. Bu değer örnekteki gibi öntanımlı sabitlerden biri de olabilir (slow,normal,fast) ms cinsinden zaman da olabilir. Ayrıca jquery ile kendi animasyonlarınızı da oluşturabilirsiniz. Sayısal olarak arttırılabilir değerlerden oluşan iki grup css sınıfı arasında belirli bir zaman içinde geçiş yaparak istediğiniz animasyonları oluşturabilirsiniz.

Yazımın sonunda ilgilenenler için çok faydalı olacağını düşündüğüm görsel bir jquery rehberi sitesinin adresini vermek istiyorum. Visualjquery.com adresinde jquery kütüphanesinin işlevlerini kategorilere ayrılmış olarak listeleyen ve örneklerle açıklayan bir rehber bulabilirsiniz. Sitenin kendisinin jquery ile oluşturulduğunu belirtmeme gerek yoktur sanırım.

17 Ağustos 2008

PHP Hakkında

Php, sunucu taraflı betiksel (script, scripting) bir programlama dilidir. Nesneye yönelik programlamayı destekler ve C tarzı bir sözdizime sahiptir. Daha önce C, C++, Java gibi bir dille ilgilendiyseniz Php 'ye çok kolay uyum sağlayabilirsiniz. Sürekli geliştirilir ve ücretsizdir. Ayrıca neredeyse bütün işletim sistemleri ve platformlarda çalışabilir.

Php kelimesi ilk başta "Personal Home Page" kelimelerinin kısaltması olarak ortaya çıktı ancak daha sonra aynı GNU (Gnu is Not Unix) gibi özyinelemeli (recursive) bir üslupla Php Hypertext Preprocessor (PHP) haline geldi.

Php esnek bir dildir. Örneğin java gibi sıkı tip denetimine sahip değildir. Bir değişkeni kullanmak için onu önceden tanımlamış olmanız gerekmez. Kullanmaya başladığınız anda o değişken tanımlanmış olur ve ona uyguladığınız işlemlere göre biçim değiştirir. Örneğin bir sayı değişkenini karakter katarıyla bitiştirip aynı değişkene atadığınızda o artık bir sayı değil bir karakter katarıdır. Bu konuda ayrıntıya girmeyeceğim ama şunu bilin ki bu ve bunun gibi birçok esneklik programcıya oluşturmak istediği yazılıma odaklanırken kolaylık sağlar ancak bu imkanlar hata yaptığınızda onu farketmenizi zorlaştırır. Bu yüzden sadece sunucunun vereceği olası hata mesajlarına itibar ederek hata almadığınız sürece hızla ilerlemek yerine kontrollü bir şekilde ve sürekli test ederek yazılımınızı geliştirmeye deam etmelisiiniz.

Hazır "yazılım" kelimesinin yeri gelmişken bir konuya açıklık getirmek istiyorum: Php bazılarının düşündüğü gibi sadece bir web sitesi geliştirme şablon aracı değildir. İlk çıktığında belki amacı bu yöndeydi ama sürekli geliştirilmesiyle günümüzde internet üzerinde kullanıma yönelik her türlü yazılımın geliştirme ortamı olmuştur. Php web sitesi oluşturmada şablon oluşturma amacının dışında veritabanı uygulamaları -aslında veritabanı kullanmayan büyük ölçekli php yazılımı yok gibidir- , kontrol panelleri, çok kullanıcılı sistemler (forumlar, paylaşım siteleri vs.), alışveriş siteleri, bazı türde oyun siteleri, kurumsal kaynak planlama yazılımları ve şu an aklıma gelmeyen birçok alanda, özet olarak doğrudan kullanıcı - donanım etkileşimi gerektirmeyen ve kullanım arayüzü sistemi olarak web tarayıcılarının yeterli olduğu her yazılım türü için php dili kullanılabilir. Ayrıca birçok masaüstü yazılımının da php veya benzeri bir dille yazılmış sunucu taraflı bileşenleri vardır.

Php dili için asıl kaynak php dilinin resmi sitesi olan Php.net dir. Bu adreste dilin özellikleri ve yapısı hakkında her türlü bilgiye ulaşılabileceği gibi muhtemelen en çok sevilen özelliği olan arama motorunu kullanarak istediğiniz işlevlere, sınıf özelliklerine, standart değişken tanımlamalarına ve bunlar gibi php ile ilgili ihtiyacınız olan bilgilere kolayca erişebilmenizdir. Bunun yanında başvuru niteliğinde ve örneklerle zenginleştirilmiş bir php kitabı alarak (mysql kullanımı ve apache kurulum bilgileri de içermesi tercih sebebidir) düzenli bir sıra ile konuları takip edebilirsiniz.

Kripto paralar hakkında

Kripto paralar, merkezi olmayan, şifrelenmiş ve dağıtılmış bir veritabanı olan blok zinciri teknolojisi kullanılarak oluşturulan dijital par...