You are on page 1of 14

Bluetooth™: Kablosuzun Yeni Yıldızı

Ağırlıklı olarak Ericsson ve Intel'in içine olduğu bir


konsorsiyumun ürünü olan Bluetooth™, kısa mesafede yüksek
hızda veri aktarımı sağlayan güvenli bir kablosuz iletişim
yöntemidir. "Yöntem" denmesinin nedeni, Bluetooth™'un fiziksel
araçtan, iletişim sözleşmesine kadar tamamen baştan
tasarlanmış olmasıdır.

Tarihçe
Bluetooh'un tarihçesi için Ericsson Crea-World ağ sitesindeki
Bluetooh köşesinden yararlanıyoruz: "1994 yılında Ericsson, cep
telefonları ve cep telefonu aksesuarları arasında kablosuz iletişim
kurabilecek düşük güç tüketimli, düşük maliyetli bir radyo
arabirimi üzerinde araştırma yapmaya karar verdi. Bu karar
Bluetooth teknolojisinin kapılarını açan adımdı. Benzer şekilde bir
cep telefonu ve bir taşınabilir bilgisayar arasında kablosuz
iletişim kurmak için de her iki cihaza küçük bir radyo alıcısı
yerleştirilebilirdi... Bir yıl sonra mühendislik çalışmaları başladı ve
Bluetooth teknolojisinin gerçek potansiyeli daha net bir şekilde
görülebilir oldu. Cihazlar arası iletişimde kabloları kaldırmak
amacıyla start alan bir fikir zamanla yepyeni imkanları da gözler
önüne serdi: Bluetooth uygulamaları; mevcut veri ağlarına
uzanan evrensel bir köprü, çevre birimleri için bir arabirim ve
küçük çaplı cihaz ağları oluşturmak için bir araç olarak da
kullanılabilirdi. ... 1998 Şubat ayında Special Interest Group
(SIG) kuruldu. SIG çatısı altında 3Com, Ericsson, IBM, Intel,
Lucent, Microsoft, Motorola, Nokia ve Toshiba gibi öncü
firmaların yanı sıra binlerce irili ufaklı üye firma da yer
almaktadır. SIG'nin başlangıçtaki görevi, teknolojinin sadece tek
bir şirket tarafından sahiplenilmesini önlemek amacıyla, kısa
menzilli radyo iletişimi sahasında yaşanan teknik gelişmeleri
izlemek ve açık, global bir standardın oluşmasını sağlamaktı.
Yapılan çalışmaların neticesinde 1999 Temmuz ayında ilk
Bluetooth spesifikasyonunu çıkarıldı. SIG'nin önemli çalışmaları
arasında bu spesifikasyonun geliştirilmesi yer alıyor. Kuruluşun
önde gelen diğer görevleri ise birlikte çalışabilirlik gereksinimleri,
frekans bandı harmonizasyonu ve teknolojinin kitlelere
tanıtılması. ... "

Bluetooth™ Teknik Yapısı


Bluetooth™ sistemi 2.4 Ghz frekans bandında çalışan evrensel
bir radyo arabirimine dayanan bir sistemdir. Veri ve sesin hem
sabit hem de taşınabilir birçok araç arasında iletişime izin verir.
Şekil 1, size bu konuda bir fikir verecektir. Gördüğünüz gibi
Bluetooth™ sistemi ile radyo bağlantısı ile bir çok aracı
bağlamanız mümkün olacaktır.

Kullanım Alanları
Bir sistemde Bluetooth™ bağlantısı olabilecek araçlar ile ilgili
herhangi bir kısıtlama düşünmeyin. Bir buzdolabı yada bir
vantilatörü de Bluetooth™ arabirimi ile denetleyebilirsiniz.
Elbette ki bu, erişim için ekleyeceğiniz bileşenlerin düşük
maliyetli olmasını gerektirmektedir. Şu anda elimizde bulunan ilk
nesil bileşenler bile oldukça makul bir şekilde fiyatlandırıldığından
kısa dönemde Bluetooh'un genel anlamda yaygınlık kazanacağını
düşünebiliriz. Pazar araştırmaları da koşut biçimde 2005'e kadar
taşınabilir araç sahibi sayısının 1 milyarı bulacağını öngörmekte.
Bluetooth™'un sunduğu 2 Mbit/s veri erişimi sayesinde taşınabilir
araçlarda Internet erişimi, gerçek zamanlı görüntü aktarımı ve
bir çok çoklu ortam uygulaması beklenebilecek. Bu da üçüncü
nesil (3G) olarak adlandırdığımız taşınabilir araçların tanımı
zaten.

Ericsson'un çıkarttığı cep telefonları için Bluetooth™ telsiz


kulaklığı (Resim 1) gibi uygulamaların çok ötesinde uygulamalar
önümüzdeki yıllarda reklamlarda görmeye alışmamız gereken
şeyler.

Topoloji
Bluetooth araçları Piconet ve Scatternet adını verdiğimiz ağlar
içerisinde yer alırlar ve haberleşirler. Şimdi bu iki önemli tanıma
bakalım.

Karşılıklı olarak yarıçapı içinde olan iki araç birbirleri ile bağlantı
kurabilirler. Bir bağlantı kuran araçlar bir Piconet
oluşturmaktadır. Şekil 1'de gördüğünüz bulut sembolü bir
Piconet'i simgelemektedir. Bir Piconet'te bulunan araçlardan
birisi yönetici (master) rolü üstlenir. Yönetici araç, yarıçapı
içindeki bütün diğer araçların (köleler, slave) listesini tutar. Her
Piconet'de sadece bir yönetici bulunur.

Köleler ise aktif olup olmadıklarına göre sınıflandırılabilirler. Aktif


bir köle, o anda yönetici ile veri aktarımı yapmakta demektir. Bir
Piconet'de 255 pasif, 7 tane de aktif köle bulunabilir. Bir kölenin
sadece yönetici ile iletişim kurabileceğini unutmayın.

Her Bluetooth™ aracının kendisine ait bir Bluetooth™ Araç Adresi


(BD_ADDR) vardır. Bu adres her araç için tektir. Yani aynı adrese
sahip iki araç olamaz. Piconet'lerde aktif kölelere birer aktif üye
adresi de (AM_ADDR) verilir. Bir köle aktif değilken bile yönetici
ile eş zamanlı olmak zorunda olacağı için bir pasif üye adresi alır
(PM_ADDR). Bir köle pasiflikten aktifliğe geçerken pasif üye
adresini yitirir ve yöneticiden bir aktif üye adresi alır. Ancak bu
durumda Bluetooh™ Piconet'inde güvenlik için sağlanan frekans
atlamalı sistemin çalışabilmesi için aynı anda iki aracın aynı
frekansta bulunmaması gerekmektedir. Bu da ciddi bir
zamanlama sorunu getirir. Yönetici aracın saati, kölelerin
referans aldığı bir nokta olur ve bu sayede frekans atlamadaki
eşzamanlılık sağlanır.

Kesişen alanları olan Piconet'ler grubuna Scatternet adı verilir.


Örneğin bir yönetici tarafından görülen bir köle, diğer kölelerin
uzağında bulunduğu için onlar tarafından görülemeyebilir. Bu
durumda bu köle ile yönetici ayrı bir Piconet sayılır. Elbette ki bu
iki Piconet'in frekans atlama sıralamaları farklı olacaktır ki
yönetici her iki Piconetde bulunan aktif köleler ile sorunsuz
haberleşebilsin. Birden fazla Piconetde bulunan bir Bluetooth™
aracı, aynı anda ancak birisinde aktif durumda olabilir. Aynı
zamanda, bir Piconetde yönetici olan bir araç, diğerinde köle de
olabilir.

Sistem Çalışması
Buetooth araçları dört ayrı çalışma durumundan birisindedirler.
Aktif, koklama, durağan ve park. Bağlantı sırasında paketler
gidip gelirken bu durumlardan geçilir. Aktif durumdaki bir araç,
yönetici-köle kanalını, kendi zaman aralığında dinleyerek, kendi
AM_ADDR'sini içeren paketleri bekler. Araç sadece kendi zaman
aralığında dinleme işleminde bulunduğu için aktif mod enerji
anlamında en verimli durumdur. Koklama durumundaki bir köle,
kanalı yönetici tarafından kendisine bildirilen bir zaman
aralığında periyodik olarak dinler. Bu özellikle birden fazla
Piconetde yer alan köleler için enerji tasarrufu yapmaya yönelik
bir uygulamadır. Yönetici köleye paketleri sadece önceden
belirttiği koklama zaman aralıklarında yollar. Durağan durumdaki
bir köle belli işlemleri yapamaz ancak yönetici ile frekans eş
zamanlılığını korur. Bu durumdaki bir köle hala AM_ADDR'sini
korur. Yani aktif duruma geçtiği zaman eski adresi ile
çalışacaktır. Park durumdaki bir köle ise park üye adresi
(PM_ADDR) ve erişim isteme adresi (AR_ADDR) olarak iki adres
alır. park durumu bir yöneticiye 7'den daha fazla köle bağlandığı
zaman ortaya çıkar. Park durumundaki bir köle, aktif duruma
geçmek için yöneticiye AR_ADDR'si ile başvurur. AR_ADDR'lerin
her köle için farklı olmak zorunda olmadığını ancak
PM_ADDR'lerin her köle için farklı olduğunu bilmeniz yararlı
olacaktır. Bu sayede bir Piconetde yer alan köle sayısı 7'den
255'e çıkartılırken iletişimin verimliliği de korunmuş olur.

Sonuç
Sonuç olarak Bluetooth™ yeni ve ilginç bir teknoloji olarak bir
çok uygulamaya açık.

Bora Güngören.
b.gungoren@ieee.org
BJARNE STROUSTRUP ile SÖYLEŞİ
Mart ayı içinde düzenlediğimiz Serbest Yazılım Yarışması
Etkinlikleri çerçevesinde ülkemize gelen, C++ programlama
dilinin yaratıcısı Bjarne Stroustrup ile sizler için C++ üzerine bir
söyleşi yaptık. Şimdi sizi Bjarne Stroustrup ile başbaşa
bırakıyoruz.
Biltek: C++'ın ilk tasarımı ve uygulamasının ardındaki fikirler
nelerdi? Bu fikirler hala güncel ve geçerli mi?
Bjarne Stroustrup: İlk düşünce, programlamayı aynı anda şık
ve verimli hale getirebilecek bir dil yaratmaktı. Bu elbette ki her
zaman geçerlidir. Son zamanlarda sunulan diller büyük boyutlu
sistem oluşturulması için uygun gözükmemekte.
Benim seçtiğim yaklaşım olan C'ye Simula sınıf kavramını
eklemek ve durağan tip denetimini iyileştirecek araçlar özellikler
eklemek sadece başlangıçtı. Şablonlar ve hata durumları gibi
daha yeni iyileştirmeler C++ programlamasını ideallerime ilk
özellikler kümesi ile olabileceğinden çok daha fazla yaklaştırdı.
ISO standart C++ daha önceki sürümlere göre ideallerime çok
daha yaklaşıyor. Standart kitaplık, C++'ın gücü için bir çok örnek
sunmakta. Yakın zamanda standart ve özelleşmiş C++
kitaplıklarında önemli ilerlemeler bekliyorum. Bu konuda C++
sayfamdaki bağlantılara bakabilirsiniz.
Önemli olarak, C++ kullanarak sistem oluşturulmasında
kullanılan tekniklerde de şablonlar ile genelleşmiş programlama
ve yapıcı ve yıkıcılarla hata durumu güvenli kaynak yönetimi gibi
önemli ilerlemeler gördük.
Biltek: C toplumunun C++'a tepkisi ne oldu? C++ genel olarak
kabul gördü mü yoksa, C++ programcılarının büyük çoğunluğu
önce C öğrenenler mi?
B.S: Tepkiler değişiyor. Bazıları C++'a balıklama atlarken
bazıları herhangibir ipucuna sahip olmadıkları için ilk öğrendikleri
stile devam ediyorlar ve bazıları da "karmaşık" C++ özelliklerine
şiddetli tepki verirken, bu özelliklerin destekledikleri
programlama stilleri ve tekniklerini kaçırıyorlar.
C++ programcılarının hala önce C öğrendiklerinden
kuşkulanıyorum, ancak bu sadece yanlış eğitim politikasından
kaynaklanmakta. C++ C'den çok daha kolay bir ilk dildir. Çünkü
daha iyi tip denetimi ve daha iyi bir standart kitaplığı var Daha
ayrıntılı bir tartışma için ev sayfamdan indirebileceğiniz,
"Standart C++'ı Yeni Bir Dil Olarak Öğrenmek" (Learning
Standard C++ as a New Language) adlı yazıma bakabilirsiniz.
Biltek: Sizce C++ Web'i kaçırdı mı?
B.S: Ya da belki Web C++'ı kaçırdı? Pazara yeni ticari
uygulamalar çıkarma koşturmacasında, iyi ölçeklenebilir sistem
tasarımı sıklıkla gözardı edilmiştir. Bence C++, herhangi başka
bir büyük boyutlu sistem gibi Web'in altyapısında da genişleyen
bir role sahip.
Ayrıca tarayıcınız hangi dilde yazıldı? Hemen her durumda, C++
elbette.
Biltek: C++ için 80'ler ve 90'lardaki kilometre taşları nelerdir?
Bu on yıl içinde dikkate değer bir olay öngörebiliyor musunuz?
B.S: 80'lerdeki en önemli olaylar orijinal C++ derleyicimin ilk
ticari sürümünün çıkması ve TC++PL (The C++ Programming
Language) kitabımın birinci baskısının çıkması. İkisi de aynı
günde oldu, 14 Ekim 1985.
90'lardaki en önemli kilometre taşı olarak da ISO standartı
(1997'de oybirliği ile kabul edildi ve 1998'de çıktı) ve TC++PL
kitabımın üçüncü baskısını görüyorum.
Bu olay çiftlerini, dil özelliklerini desteklemek için var oldukları
programlama tekniklerine bağlamanın önemini vurgulamak için
seçtim.
Tahmince, 00'lardaki anahtar olay, ISO Standart C++’ın C++
0x'inci güncellemesi olacaktır. Benim öngürüme (ve umuduma)
göre bu yeni standart kitaplıklar içerecek ama ana dil
değişiklikleri olmayacak. Eş zamanlılık, kaynak yönetimi, yapı
eşleme ve daha bir çok konuda standartlaşmış kitaplıklar
umuyorum. TC++PL'ın 4. baskısını yazmam gerekecektir ancak
C++0x yıllar ötede. C++ toplumunun 1998 standartını hem
sunulan araçları hem de Standart C++’ı iyi kullanmak için
gereken teknikleri anlamak anlamında yakalaması gerekli.
Biltek: Java ve C#, C++'ın alternatifleri olarak sunuldu. Java ve
C# için birer "alternatif" olarak neler düşünüyorsunuz?
B.S: C++ baskın genel amaçlı programlama dili oldu. Bu da her
yeni dilin C++'a alternatif olarak pazarlanacağı demek oluyor.
Birilerine ait olan programlama dillerinin hayranı değilim. Ayrıca
bir programlama dilini belli bir işletim sistemi yada mimari ile
sıkıca bağlama fikrini de sevmiyorum. Ayrıca bu dillerin
vurgulanan "basitliklerini" de olgunlaşmamışlık, deneyimli
programcıları kaybetmek pahasına acemi programcılara yönelik
bir odaklanma ve büyük boyutlu sistemleri kaybetme pahasına
küçük programlara odaklanmanın sonucu olarak görüyorum.
Bunu söyledikten sonra, benim bir sağlayıcıya bağlanma
korkularımı paylaşmayan ve benim büyük boyutluluk ve başarım
gereksinimlerime sahip olmayan birisi, belli sık görülen
uygulamalar için doğrudan desteği olan daha kısıtlı bir dilden
bazı avantajlar edinebilir.
Biltek: Yeni standart gerçek dünyaya ne kadar girdi?
(derleyiciler, programcılar tarafından kullanım, vs.)
B.S: Yakın zamandaki C++ uygulamaları, (hata durumları ve
şablonlar) üzerine dayanan yeni C++ programlama tekniklerini
kullanmak için standarta yeterince yakın. Ayrıca değişik
derleyiciler ve sistemlerde iyi taşınabilirlik elde edebilmekteyim.
Bir çok C++ programcısının standart kitaplık ve diğer şablon
tabanlı kitaplıklara dayanan ileri ve üretken C++ stiline
geçtiklerini görmekteyim. Doğal olarak herkes C++'ın ve
desteklediği tekniklerin standartla birlikte değiştiğini anlayamadı.
Bir çok programcı hala antik (ve verimsiz) C++'a "daha iyi bir C"
yada "sınıf hiyerarşileri ile nesne tabanlı programlama yapılan bir
dil" olarak baktılar. Zaman geçtikçe daha çok programcı
genelleşmiş programlama tekniklerinde, hata durumlarını
kullanmakta ve çok paradigmalı programlamada (yani nesne
tabanlı programlama, genelleşmiş programlama, vb. değişik
paradigmalardaki tekniklerin bir karışımı ile program yazmakta)
ustalaşacak.
Bu tekniklerin Değişik kullanıcı gruplarında yaygınlaşma
seviyelerinde ciddi farklar var. TC++PL3 ve Koenig ve Moo'nun
"Accelerated C++"'ı gibi yeni kitaplar bu konuda yardımcı oluyor.
Biltek: Grafik Kullanıcı Arabirimleri (GKA) ve "şirin"
yöntembilimlerin programlayı gerçekten değiştireceğine inanıyor
musunuz?
B.S: Kesinlikle. Bir programın arabirimini, örneğin C++ Builder
ile hazırlamakla, doğrudan kitaplığı kullanan bir program yazmak
arasında dağlar kadar fark var. Ancak her programlama işi GKA
araçlarına uygun olmayabilir ve C++'ın en büyük gücü olduğunu
düşündüğüm ciddi sistem oluşturulması alanının genelde GKA
araçlarından fazla etkilenmediğini düşünüyorum.
Değişik insanlar "şirin yöntembilimler" ile farklı şeyler
kastediyorlar. Ben tasarım yöntemleri ve destekleyen araçların
büyük bir destekçisi değilim. Ancak veri soyutlama, nesne
tabanlı programlama ve genelleşmiş programlamanın güçlü bir
destekçisiyim. Genel tasarım destekleyen sınıflar ve şablonlar
olmadan oturup bir kaç sayfa kod yazan herkes sadece zaman
harcamakta ve gereksiz bakım sorunları yaratmaktadır.
İyi programların anahtarı, sınıflar, sınıf hiyerarşileri ve tasarım
seçimlerini doğrudan temsil eden ve farklı konuları kodda
ayırabilen şablonlardır. Sıklıkla zorlu bir uygulamaya en iyi
yaklaşım, destekleyen kitaplıklarla olur. Kitaplık desteği olmadan
C++'da hemen her şey zor olur. Uygun dil desteği ile de çoğu
şey kolaydır. Bu C++'ın kitaplık hazırlama ile ilgili özelliklerini
iyileştirmek için harcanan çabanın büyük çoğunluğunun bir
nedeni.
Biltek: Bilgisayarlara/programlamaya yeni başlayan
programcılara ve öğrencilere ne önermek istersiniz?
B.S: Sadece bilgisayar/programlama çalışmayın. Bir yada daha
fazla alanda deneyim kazanın ki uzmanlığınız size
bilgisayar/programlama alanında işe yarabilecek fikirler versin.
Ayrıca düşüncelerinizi hem yazılı hem de sözlü olarak iyi
sunabilmeyi öğrenin. Açıklanmayan fikirler sterildir.
Programlara ve sistemlere bakarken, kavramları mümkün
olduğunca herhangi bir dilde kod olarak ifade etmeye çalışın. Çok
sayıda programlama dili öğrenin. Sadece bir dil bilmeniz hayal
gücünüzü kısıtlayabilir ve sığlık için iyi bir reçetedir. Genel olarak
bir çok sistem, fikir ve teknikle tanışın. Öğrenci olarak geçirdiğiz
zamanınız geniş araştırmalar yapabileceğiniz birzamandır. Daha
sonra, "gerçek dünya"da özel bir sorun üzerinde konsantre
olmanız gerekecek ve araştırmak ve deney yapmak için çok daha
az zamanınız olacak.
C++ ile ilgli daha fazla bilgi için ev sayfama bakın:
http://www.research.att.com/~bs
PHP ve Dinamik Sayfa Tasarımı Üzerine
"Değişmeyen tek şey var, değişmenin kendisi" demiş şair yıllar
önce. Ancak çağımız için hafif kalan bir söz artık.
Her geçen gün bizleri şaşırtan gelişmelerle karşımıza çıkan bilim
dünyasının, bu değişimi en abartılı şekliyle yaşatan dalıdır
"Bilgisayar Bilimleri". Birkaç yıl öncesine kadar hayal bile
edemediğimiz şeyler artık oldukça sıradan geliyor. Tüm bunları
sağlayan insanoğlunun imkansızı yapma hırsının tükenmemesi
dileğiyle asıl ilgi noktamız, ağ sayfalarının dinamizmine bakalım.

HTML
İnternet ilk oluştuğu dönemlerde ağ üzerinde bilginin sunumu
için HTML(Hypertext Markup Language) dili de oluşturuldu. HTML
saf metin dosyasıdır. Bu metin dosyasında dilin tanımladığı özel
etiketler(tag) kullanılır. Sunucu da duran bu dosya istemci
tarafından çağrıldığında olduğu gibi istemci bilgisayara gönderilir.
HTML burada kullanıcının tarayıcısı(browser) tarafından
yorumlanarak görüntülenir. Daha iyi anlayabilmek için aşağıdaki
basit HTML dosyasını ve yorumlanmış halini inceleyelim.
Html dosyamız:

<html>
<body>
<p>Hoşçakal <b>Dünya</b> </p>
</body>
</html>

Tarayıcımızda görülen:

Hoşçakal Dünya

Kısaca burada "<html>" ve "<body>" açılış etiketlerimiz, "<p>"


paragraf açmak için, "<b>" ise kalın punto için kullanıldı. Bu
çalışma prensibi üzerine eklenen yüzlerce etiket sayesinde
sayfalarımızı hemen her şekilde sunabilmekteyiz.
Zamanla HTML bir çok noktada yetersiz kalmaya başladı. Bu
istekleri karşılamak için kendi başlarına sayfa sunamayan ancak
HTML'in içine gömülerek ona özellikler katan diller(script)
geliştirildi. Bunların çalışma yöntemleri genel olarak iki farklı
şekilde incelenebilir:
1. İstemci taraflı scripting dilleri: Oluşturulan kodun aynen
gönderilip kullanıcın tarayıcısında yorumlanması yöntemiyle
çalışır. En büyük örneği JavaScript'dir. Bir çok sayfada karşımıza
çıkan kayan yazılar, Windows tarzı menüler bu dille
oluşturulmaktadır. Ancak kodu çalıştıran kullanıcının tarayıcısı
olduğundan bu eklentiler farklı tarayıcılarının farklı sürümlerinde
beklenmedik sonuçlar verebilirler.
2. Sunucu taraflı scripting dilleri: Bu dillerde sayfa, çağrıldığı
anda sunucu tarafından yorumlanır. Kullanıcıya ise bunun
sonucunda oluşan HTML kodu gönderilir. Amaç Javascript'deki
gibi görsellik değil, sayfamızın çağrılma anında dinamik olarak
oluşturuluyor olmasıdır. ASP(Active Server Pages), PERL-CGI,
JSP(Java Sever Pages), CFS(Coldfusion), PHP(Personal
HomePage) en çok kullanılanlarıdır.
Kısa bir önbilginin ardından, son zamanlarda ülkemizde de
oldukça popüler olan ve çok sayıda sitede kullanılmaya başlanan
PHP'yi daha ayrıntılı olarak anlatmak, bu kadar yaygınlaşmasının
nedenlerinden bahsetmek istiyorum.

PHP
PHP, Rasmus Lerdorf'un ilk başta sadece kendi sitesinde
kullanmak üzere yaptığı, sayaç, ziyaretçi defteri gibi bir kaç
araçtan oluşuyordu. Zamanla başkaları tarafından da
kullanılmaya başlanınca PHP'yi geliştirip bir form yorumlayıcısı
ekleyen Lerdorf, PHP/FI Sürüm 2'yi çıkardı. Bundan sonra artık
PHP, kişisel bir proje olmaktan çıkarak, kullanıcıları tarafından
açık kod(open source) olarak geliştirilen başlı başına bir web
programlama dili oldu. PHP3 ise, birçok yeni özellikle ve
tamamıyla yeniden yazılmış olarak karşımıza çıktı. PHP4'e
gelindiğinde ise güçlü ZEND scripting motorunu kullanmaya
başlamıştı. Açık kodlu olması sayesinde çok hızlı bir şekilde
yayıldı. 1997'lerde 50.000 site tarafından kullanılan PHP,
günümüze gelindiğinde 4 milyona yakın sitede kullanılmaktadır.
Dilin Yapısı
Kendisi de C ile yazılan PHP, tamamıyla C'nin yapısının Web için
uyarlanmış halidir. Yani C/C++ bilen biri için PHP öğrenmek en
fazla bir saat sürecektir. En büyük özelliği ise HTML dosyasına
normal bir etiket ekler gibi eklenebilmesidir. Bunun için <? ve ?>
etiketlerini kullanır. Sayfa çağrıldığı anda dosya önce PHP
yorumlayıcısına gider. Burada <?-?> etiketleri arasındaki PHP
kodu işlenir ve oluşturulan HTML dosyası istemciye gönderilir.
Örneğin,
PHP dosyamız:

<html>
<body>
<? echo getenv("HTTP_USER_AGENT"); ?>
<br>
<? echo date("H:i:s"); ?>
</body>
</html>

Tarayıcımızda görülen:

Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0)


22:38:00

Önceki örnekten farklı olarak iki PHP fonksiyonu kullandık.


Bunlardan "getenv" bize kullanıcının tarayıcı ve işletim sistemi
hakkında bilgi verdi. "date" fonksiyonu ile de o anki saati
yazdırdık. Bu durumda çıktımız kullanıcıdan kullanıcıya ve
çağrıldığı ana göre değişecektir. Yukarıdaki sonuç benim
çalıştırdığım anda gördüğüm çıktıdır.
Gördüğünüz gibi bu basit örnekte bile dinamikliği sağlayabildik.
PHP'nin asıl gücü ise bir çok veritabanı ile çok kolay iletişim
kurabilmesidir. Veritabanınızdaki bilgileri ağda sunmak ve aynı
şekilde ağ üzerinden değiştirmek PHP ile çok kolay. Desteklediği
20'den fazla veritabanında bazıları Oracle, Interbase, mSQL,
MySQL, syBase, ODBC, dBase olarak sayılabilir.
Neden PHP?
Dilerseniz öncelikle PHP ile neler yapılabileceğini maddeler
halinde görelim. Daha sonra tüm bu sunucu taraflı diller arasında
neden PHP'yi tercih ettiğimize değinelim.
1. PHP web için özelleşmiş bir dil olduğundan, bir çok kolaylığı da
beraberinde getiriyor. Örneğin değişkenlerinizi kullanmadan önce
yaratmanıza yada tipini belirtmenize gerek yok. Bir değişken ilk
kullanıldığı yerde yaratılıyor ve içine neyi koyarsanız onu tutuyor.
Değişkenlerin yaratılması ve tiplerinin değiştirilmesi yorumlama
anında dinamik olarak yapılıyor. Yani şu kod PHP'de tamıyla
geçerlidir:

2. Serbest bir yazılım olmasının sayesinde, kullanıcıları


tarafından geliştirilen PHP, sürekli eklenen kütüphanelerle çok
güçlenmiştir. Örneğin, bir grafik kütüphanesi olan 'GD' ile
dinamik olarak "jpg, png, gif" formatlarında resimler
yaratabilirsiniz. Başka bir kütüphane ile etkileşimli web
sayfalarının değişmez parçası Flash animasyonlarını
yaratabilirsiniz. Ayrıca C ile olan sıkı ilişkisi sayesinde bir çok C
kütüphanesi PHP'ye aktarılmıştır.
3. Taşınabilirlik, platformdan bağımsız olma, günümüzde yazılım
alanının en önemli kavramları olmuş durumdalar. Sunucu taraflı
diller, kullanıcının ek hiçbir şeye sahip olmasını gerektirmezler.
Sunucu tarafında ise dilin yorumlayıcısının çalışıyor olması
gerekir. PHP yorumlayıcısı; Windows ve Linux platformlarda,
Apache, PWS(Personal Web Server) ve IIS(Internet Information
Services) sunucularında sorunsuz olarak çalışmanın yanında,
aynı zamanda yazdığınız PHP kodları, bu platformlar arasında
%100 taşınabilirdir.
PHP vs ASP
ASP, Microsoft tarafından geliştirilen ve günümüzde en çok
kullanılan sunucu taraflı scripting dilidir. Bir kaç farklı dilde kod
yazmanıza izin veren bir teknolojidir. En çok kullanılanı Visual
Basic'dir. ASP'de yapılabileceklerle PHP'dekiler neredeyse aynıdır.
Ancak her zaman PHP kodu daha kısa ve daha basit olmaktadır.
ASP, COM objelerini kullandığından performansı düşük
olabilmektedir ve sadece Windows sunucularda çalışabilir. Ayrıca
ASP'de, örneğin mail yada ftp fonksiyonlarını kullanmak
istediğinizde bu modülleri ayrıca satın almanız gerekir. Bu
kütüphanelerin hepsi PHP'de, PHP ile ücretsiz gelmektedir.
PHP vs PERL/CGI
İlk PHP sürümleri PERL üzerine kurulmuştu. Daha sonra
değişmesine rağmen halen PERL'ün izlerini taşımaktadır. PERL
oldukça oturmuş ve güçlü bir dildir. Ancak PHP, yeni başlayan
biri için öğrenmesi ve uygulaması daha kolaydır. HTML içinde
kendi özel etiketi içine yazılıyor olması sayesinde PHP kodu ile
HTML kodunu birbirinden ayrıdır. PERL'de ise HTML kodunuzu,
CGI kodunuzun oluşturması gerekir. PHP'nin web için hazırlanmış
olması, formlarla olan ilişkisi, GET, POST değişkenlerine doğal bir
şekilde erişebilmesi sayesinde çok sade ve öğrenmesi kolay bir
yapısı vardır. Çalışma performansına baktığımızda ise yine
PHP'nin oldukça hızlı çalıştığını görüyoruz.
PHP vs CFS
ColdFusion yapı olarak diğer dillerden oldukça farklıdır. Daha çok
bir veritabanının webde sunumu üzerinde özelleşmiştir. Bir çok
veritabanına aynı kod yapısıyla(syntax) erişebilmektedir. Ve bu
amaç için özelleşmiş çok güçlü tarih ve arama yapıları
mevcuttur. Ancak kullanıcıların kendi fonksiyonlarını yazmalarına
izin vermediğinden bir uygulama geliştirme alanı olarak
görülemez. Ancak PHP'de nerdeyse hiç olmayan arama ve hata
denetimi(error handling) yapılarına sahiptir. Bu noktada
ihtiyaçlarımıza göre karar verebiliriz. Ancak PHP'nin ücretsiz ve
serbest bir yazılım olduğunu da unutmamalıyız.

Geçtiğimiz haftalarda yeni tasarımıyla yenilenen topluluğumuzun


ana sayfası(ieee.metu.edu.tr) PHP diliyle ve MySQL veritabanı
kullanılarak yapıldı. Dilerseniz PHP ile yapabilecekleri daha iyi
gösterebilmek amacıyla bu sayfanın görünen içeriğinin arkasında
neler yapabildiğinden bahsetmek istiyorum.
i. Hızlı Güncelleme: Sayfayı incelediğinizde göreceğiniz gibi
üstteki ve yandaki menü, neredeyse tüm sayfalarda ortak. Genel
fonksiyonlarımızın olduğu bir dosyada ise bu kısımlara ilişkin
kodları oluşturan birer fonksiyon tanımlanmış. Bu menülerin
görünmesini istediğimiz sayfaların başında fonksiyonlarımızı
çağırıyoruz. Bunun faydası ise menülerde olabilecek bir değişikte
sadece fonksiyonumu güncellemem, tüm sayfadaki menülerin
değişmesi için yeterli olacak. 100-150 farklı sayfadan oluşan bir
site için bunu normal yollarla yapmak oldukça zahmetli bir iş
olacaktı.
ii. Veritabanı bağlantısı: Ana sayfada gösterilen haberleri
farketmişsinizdir sanırım. Bu haberler veritabanımızda bir
tabloda durmakta. Sayfanın bu kısmında ise veritabanına
bağlanıp o anki tarihi de kontrol ederek ilgili haberleri
göstermesini sağlayan ufak bir kod var. Yeni bir haber eklemem
gerektiğinde ise tek yapmam gereken tabloma eklediğim yeni
satıra haberimi ve hangi tarihe kadar gösterilmesi gerektiğini
girmek.
iii. Çoklu dil desteği: Bunu sağlamak için yapacağımız şey yine
mantık olarak aynı; sayfamızda kullanacağımız tüm metinlerin
faklı bir dosyadan okunması. Kısa bir örnek vermek gerekirse,
sayfada bulunan "News" sözcüğünü "eng.inc" isimli bir dosyada:
$news="News" şeklinde;
"tur.inc" isimli bir dosyada ise:
$news="Haberler"
şeklinde değer veriyoruz. Bundan sonra sayfalarımızda
"Haberler" yazmasını istediğimiz yerde $news değişkenini
kullanıyoruz. Bu şekilde tüm metinleri bir değişken kullanarak
farklı bir dosyaya alarak, sayfamızda gerekli esnekliği sağlamış
olduk. Bundan sonra sayfamıza Fransızca desteği eklemek
istediğimizde yapacağımız tek şey "tur.inc" dosyası tercüme edip
örneğin "frch.inc" ismiyle kaydetmek olacak. Ve artık sayfamız
Fransızca da görülebilir.
Bitirirken
Eğer web tasarımı ile ilgileniyorsanız artık sunucu taraflı scripting
dillerine de bir yerinden başlamalısınız. Artık üretimin
otomasyona bağlandığı günümüzde bir adım önde olmak,
"Değişimin Otomasyonu"nu sağlamak demek.

Kaynaklar:
http://www.php.org.tr
http://php.weblogs.com
Bahadır Yağan
bahadir@ieee.metu.edu.tr