Tarih: 1 Mart 2012 | Yazar: Hidayet Doğan | Konu: Genel | Etiketler: 5.4, php, trait, yenilikler | Yorum yok »
Bilindiği üzere umutla beklenen PHP 6 sürümü bir süreliğine iptal edilmişti ve tamamen Unicode desteği askıya alındı, PHP geliştirme ekibi 5.4 sürümü için çalışmaya başlamıştı ve daha kararlı sürümü çıkmadan getireceği yeniliklerden bolca bahsedildi. Bügün yayınlanan PHP 5.4 sürümünün bize bazı güzel getirileri ve olması gereken götürüleri var. Performans olarak daha da iyi duruma getirilen ve yüzlerce hatanın ayıklandığı PHP 5.4 sürümü içinde gelen ve bana göre önemli olan bazı özelliklerden kısaca bahsedeceğim.
Yeni özellikler
- “Trait” yapısı – “Özellik” olarak çağırabileceğimiz bu yenilik sınıflara büyük bir esneklik getiriyor. PHP’de sınıflar birden fazla kalıtım alamadığı için bu özellik bize sınıflarda buna yakın bir özelliği vermemizi sağlıyor. “Trait”leri kendi başlarına bir sınıf gibi düşünebiliriz fakat bu sınıftan yeni nesneler oluşturamıyoruz, tanımladığımız sınıflara “trait”ler ile yeni özellikler, metodlar ekleyebiliyoruz. Bir sınıfta dilediğimiz kadar “trait” kullanabiliyoruz ve bir “trait”i de dilediğimiz kadar sınıfta kullanabiliyoruz. Bu yenilikle bazı PHP çatı/framework projelerinin de ileride değişime uğrayacağını düşünüyorum. Aşağıda basit bir “trait” kullanım örneğini görebilirsiniz. Detaylı bilgiyi de http://php.net/manual/language.oop5.traits.php adresinden bulabilirsiniz.
<?php
trait birinciOzellik {
public function Merhaba() {
echo "Merhaba!";
}
}
trait ikinciOzellik {
public function Selam() {
echo "Selam!";
}
}
class OrnekSinif {
use birinciOzellik, ikinciOzellik;
}
$ornek = new OrnekSinif;
$ornek->Merhaba();
$ornek->Selam();
?>
- Kısa dizi operatörü/kısa dizi tanımlama – Dizileri Python dilindeki ya da JSON yapısındaki gibi tanımlayabiliyoruz. Aşağıdaki örnekte bunu görebilirsiniz:
$dizi = array(1, 2, 3);
/* PHP 5.4 ile gelen özellik */
$dizi = [1, 2, 3];
- Gömülü web sunucusu – Özellikle geliştirme ortamında çok fazla gereksinim duyduğumuz ve genellikle hazır paketler (WAMP, MAMP gibi) kurarak çözdüğümüz, web ortamı için hazırladığımız betikleri deneme problemimizi hiçbir ek paket/yazılım kurmadan artık çözebiliyoruz. Komut satırından PHP içindeki gömülü olarak gelen web sunucusunu çalıştırarak hazırladığımız betikleri web ortamında çalıştırabiliyoruz. Sadece yazdığımız betikleri denemek amaçlı kullanmamız önerilsede beta sürümlerinde yaptığım denemelerde performans olarak ta gayet iyi görünüyor (nginx ve php-fpm kurulumuna karşı denedim). Yine de tekrar belirtelim şu anda bu özellik canlı yayında olan bir proje için uygun bir çözüm kesinlikle değil.
- Oturum üzerinde yüklenen dosyaların durumu/takibi – (Ecnebi dilinde) “Upload Progress” olarak bilinen ve şimdiye kadar üçüncü parti eklentilerle veya APC eklentisi ile çözüm bulduğumuz bu özelliği artık öntanımlı olarak kullanabiliyoruz. Web sayfasından yüklediğimiz dosyaların yükleme durumlarına oturum bilgilerinden ($_SESSION süper-global değişkeni içinden) erişiliyor. Detayları ve örnekleri http://php.net/manual/session.upload-progress.php adresinden görebilirsiniz.
Kaldırılan özellikler
- “safe mode” yapısı tamamen kaldırıldı – Birden fazla kişinin paylaştığı sistemlerde (barındırma hizmeti veren yerler gibi) bu özellik yerine open_basedir ve disable_functions ayarlarıyla belirli bir seviyede güvenlik önlemi alabilirsiniz.
- register_globals ve “magic quotes” yapısı kaldırıldı – Zaten kullanmamamız gereken ve birçok güvenlik açığına sebep olan bu iki özelliğin kaldırılması artık daha dikkatli ve bilinçli kod yazmamız gerektiğini bize zorla hatırlatacak gibi. (Zaten bu iki özelliği kullanmıyoruz değil mi?) “magic quotes” ile ilgili fonksiyonlar (get_magic_quotes_gpc gibi) artık öntanımlı olarak “false” değerini dönüyor.
- break/continue $degisken kullanımı kaldırıldı.
- session_register(), session_unregister(), session_is_registered() fonksiyonları kaldırıldı.
Bunlar hariçinde gelen yenilikleri, değişiklikleri ve düzeltmelerin listesini http://php.net/ChangeLog-5.php adresinden bulabilirsiniz. PHP 5.3 sürümünden 5.4 sürümüne geçiş için ise http://php.net/migration54 adresinde dikkat edilmesi gereken hususlar bulunabilir.
Tarih: 15 Şubat 2012 | Yazar: Hidayet Doğan | Konu: Genel | Etiketler: bitav, bt-haber, cracker, exploit, hacker, inet-tr, rootshell, tübitak | 1 Yorum »
Sene 1998, bilgisayar ve internetle tanışmamın arasından yaklaşık 4 yıl geçmiş ve artık BASIC dışında Perl ile web siteleri için sayaç, form işleme, elektronik kartpostal gönderme gibi komik uygulamalar, ANSI C ile MUD (Multi User Dungeon) ve BBS (Bulletin Board System) sunucuları kodları ile uğraşarak günler geçiyor. Mekanımız Tübitak Bilgisayar Kulübü (sonradan ismi BİTAV Bilgisayar Kulübü olarak değişti). Aylık üyelik ücreti ödeyerek bilgisayarları kullanabildiğiniz ve internet erişiminizin olduğu bir kulüp, tabi o zamanlar internet kafe diye bir kavram yok. Evinize bilgisayar almanız için babanızın 2-3 aylık maaşını ödemeniz gerekiyor. Kulüpte bilgisayar oyunlarını oynamak yasak ama arada bir danışman görevlilere çaktırmadan “SimCity” kurup oyun da oynanıyor. Hal böyle olunca oyun dışında uğraşacak eğlenceli, heyecan verici birşeyler gerekiyor. DOS komut satırından “win” komutu ile çalıştırdığımız Windows 3.1 için en basitinden “win.bat” dosyası hazırlayıp içine komik birşeyler yazıp sistemlere bırakıyoruz. Birileri gelip Windows 3.1 çalıştırmak istediğinde ve DOS komut satırından “win” yazdığında Windows 3.1′in gelmesi yerine bizim hazırladığımız “win.bat” isimli dosya çalışıyor ve ekranında komik birşeyler beliriyor ve biz onu izleyip kıkırdıyoruz. “rootshell” gibi bazı sitelerden “exploit” dosyalarını indirip disketlerle kurduğumuz Linux üzerinde veya zaten az olan hafızaya açtığımız tek disketlik Linux sistemler üzerinde denemeler yapıp “abi çalıştı” diye kulüpteki diğer kişilere çaktırmadan yanımızdaki arkadaşımıza heyecenla fısıldıyoruz. O zamanlar internet üzerinde sunucu olarak çalışan Linux veya Unix türevi sistemlerden hesap edinmek zor. Sadece bazı kurumlarda çalışanlara verilen veya üniversitelerde kurulu sistemler var. Sistem yöneticisi bir arkadaşınız yoksa bir yerlerden Linux/Unix hesabı bulma ihtimaliniz neredeyse imkansız.
O zamanlar başkalarına ait sunuculara saldırı yapmak, izinsiz hesap bilgilerini almak ve kullanmak, sistemi silmek ve buna benzer her türlü fantezinizi gerçekleştirmek konusunda sistemi korumakla görevli sistem yönetici dışında bir engeliniz yok. Kanunlar halen internet nedir bilmiyor. Durum bu kadar vahim olunca gençlik heyecanı ve adrenalinin verdiği zevk ile bahsettiğim “exploit” isimli kod parçaçıkları ile açık bulduğumuz sistemlere girip çıkıp duruyoruz. Evimize bilgisayar geldiğinde internete dial-up modem ile bağlanmak için kimseciklere para ödemiyoruz, zaten dial-up hizmet veren firmaya ait sunucuyu süzgeçe çevirmişiz, içinde cirit atıyoruz, at koşturuyoruz. Yetmiyor eşe dosta ücretsiz hesap dağıtıyoruz. Arada bir yaramazlığın sınırlarını zorlayıp (özellikle bizi sinirlendiren sistem yöneticilerine cevap olması için) sistemleri siliyoruz, onlar kuruyor biz tekrar siliyoruz (Orta Doğu Teknik Üniversitesi’ne özrü borç biliriz). Devlet kurumlarının sunucularına girip sistem yöneticilerini uyarıp kaçıyoruz. Uzaktan sızamadığımız sistemleri ele geçirmek için mekana masumca gidip yerinde sisteme sızıyoruz (Bilkent Üniversitesi Kütüphanesi).

INET-TR - V. Türkiye’de İnternet Konferansı, İnternet'in Yaramaz Çocukları oturumundan bir fotoğraf.
Örnekleri ve hikayeyi fazla uzatmadan bitireyim ve esas konuya döneyim. Geçen günlerde yedeklerimi kurcalarken karşıma 1999 yılında konuşmacı olarak katıldığım INET-TR – V. Türkiye’de İnternet Konferansı için yapılmış bir röportaj dosyası çıktı. Konferansa konuşmacı olarak katılmıştım ama konu İnternet’in Yaramaz Çocukları isimli bir oturumdu. Oturumu yöneten Prof. Dr. Ethem Derman hocamız. Onun mizahsen anlatım ve sunumlarıyla eğlenceli bir oturum oldu. Tanınmamak için yüzümüzde kar maskeleri ile konuştuk. Bizi tanıyan tanıyordu yine ama oturuma (bize göre eğlenceye) güzel bir hava kattı. Konferanstan sonra BT-Haber dergisi bize ulaştı ve röportaj istedi. Röportaj içinde bazı hikayelerden bahsediyoruz ve o zamanlarda durumun ne olduğunu ortaya koyuyoruz. Röportajı PDF formatı haline getirip aşağıya bağlantısını ekledim.
Röportajda ismi geçen “Baxter” benim. Diğer isimleri bu yazıyı hazırlarken onlardan izin almadığım için açıklamıyorum. İzin verirlerse yazıyı güncelleyip isimleri sizle paylaşırım.
İnternet’in Yaramaz Çocukları: Hacker’lar – BT-Haber, Sayı 247, 13-19 Aralık 1999 PDF formatında indiriniz.
Tarih: 16 Ocak 2012 | Yazar: Hidayet Doğan | Konu: Genel | Etiketler: açıklar, cross-site request forgery, cross-site scripting, csrf, ezber kartları, güvenlik, php, sql injection, web, xsrf, xss | 1 Yorum »
PHP ve web güvenliği şimdiye kadar yapmış olduğum sunumlarda ve eğitimlerde üzerine sıklıkla durduğum bir konu. Gözlemlerim sonucunda genellikle PHP gibi, web programlama yönü güçlü olan bir betik dili öğrenirken bu konu göz ardı ediliyor veya öğrenme süreci içine dahil edilmiyor (kurslar ve çevirimiçi eğitim hazırlayanlara iğneleme olsun). Şimdiye kadar yaptığım iş alım görüşmelerinde de bu konuda ne kadar bilgi sahibi olduğumuz ortada (Tüyo: Benimle iş görüşmesi yapacaksanız bu konuya hazırlıklı gelin). Sonuç; durum vahim.
PHP dilinde orta veya kendini ileri seviye (veya uzman) hissedenler için ilerde daha detaylı bir yazı hazırlayabirim ama şimdilik bu işe yeni başlayan veya başlamak için kolları sıvamış arkadaşlarımıza basitçe birşeyler öğretelim diye düşündüm.
Web güvenliği, web açıkları ve PHP dilinde bunlarla baş etmek için neler kullanabileceğimizi, biraz da işin içine eğlence katarak (yeni başlayanlar için ferman gibi belgeler sıkıcı gelebilir) öğrenmek ve bu konuyu bize kolay bir yöntemle hatırlatması için minik bir ezber kartı serisi hazırladım. Genellikle yabancı dil öğrenirken kullanılan ezber kartları belki bu konuda da bir işe yarar. Üşenmeden çıktı alıp, kesip biçip, yapıştırıp masanızın üzerine serpiştirip veya abartıp cebinizde gezdirebilirsiniz. Buruşup bozulmaması için kalınca bir kağıda çıktı alabilirsiniz.
Ezber kartlarını PDF formatında indirmek için: http://hi.do/files/php-ve-web-guvenligi-ezber-kartlari.pdf
Belgenin kapak sayfasındaki açıklamayı okumayı unutmayın.
Tarih: 4 Ocak 2012 | Yazar: Hidayet Doğan | Konu: Genel | Etiketler: 2009, eğitim, inet-tr, istanbul bilgi üniversitesi, linux kullanıcıları derneği, lkd, makale, özgür yazılım günleri, php, seminer | Yorum yok »
12-13 Aralık 2009, İstanbul Bilgi Üniversitesi‘nde yapılan INET-TR – XIV. Türkiye’de İnternet Konferansı sırasında bir PHP mini semineri verilmişti (sadece iki sunum/konudan ibaret). Burada ben yine klasik sunumlarımdan biri olan “PHP’ye Giriş” isimli sunumu yapmıştım (iğneleme). İstanbul Bilgi Üniversitesi sağolsun, yetkilisiyle ve öğrencisiyle elele konferans ile çok ilgilenmişler (iğneleme). Üniversite içerisinde, konferansın yapıldığı binada bile bir tane afiş ile karşılaşmadım, bina dışında da hatırladığım kadarıyla bir afiş yoktu (gerçek). Konferansın düzenlendiği yer bile bu kadar ilgili olunca (iğneleme) tabiki katılımın çok olması beklenemez. PHP mini seminerine katılım 5 kişi ile kaldı (gerçek). Arkadaşlardan duyduğum kadarıyla diğer oturumlarda da katılım çok düşükmüş.
Herneyse, sonuç olarak katılım sayısı bizim için önemli değil, sadece İstanbul Bilgi Üniversitesi’nin ilgisizliği sinirlerimizi bozdu biraz. Bu sıralar Linux Kullanıcıları Derneği ile ortak Özgür Yazılım Günleri düzenliyorlar. 2009 veya 2010 yılında (tam hatırlamıyorum) Özgür Yazılım Günleri için PHP eğitimi isteğinde bulunmuşlardı ve üzülerek kabul etmemiştim. INET-TR 2009′dan sonra İstanbul Bilgi Üniversitesi kapsamında herhangi bir etkinlik, eğitim, seminer veya konferansa katılmama/desteklememe kararı aldığım için kendilerine başarılar diliyorum.
Konuya tekrar dönersek (esasında konunun yarısı birilerini iğnelemek ama olsun), INET-TR 2009 kitağçığında basılması için sunum ile ilgili küçük bir makale hazırlamıştım. PHP’yi kısaca ve basitçe anlatan bir makale ortaya çıktı. Kitapçık basıldı mı bilmiyorum ama buradan da indirebilir olması masa üstünde durmasından iyidir.
“PHP’ye Giriş” isimli makaleyi PDF formatında indiriniz.
Makaleyi kullanmak isterseniz aşağıdaki uyarıya dikkat edin:
“PHP’ye Giriş” başlıklı makale Creative Commons: Attribution-Noncommercial 3.0 Unported ile lisanslıdır. Detaylı bilgi: http://creativecommons.org/licenses/by-nc/3.0/
Tarih: 2 Ocak 2012 | Yazar: Hidayet Doğan | Konu: Genel | Etiketler: apache, appcelerator, cakephp, çatı, cocoa, firefox, framework, git, google chrome, ietester, ios, javascript, lighttpd, lithium framework, lucene, lynx, memcached, mongodb, mozilla, mysql, nano, nginx, nodejs, nosql, objective-c, php, pico, postgresql, ptyhon, redis, ruby, safari, sphinx, sublime text 2, subversion, svn, textmate, titanium, xcode, zend framework | Yorum yok »
Bazen arkadaş arasında “Bunun için ne kullanıyorsun?” diye sorular sorulabiliyor veya yeni birşey bulduğumuzda heyecanla bahsediyoruz. Güncel olarak ne için, nerede, ne kullandığımı derleyip toplamanın hem benim için hem de merak edenler (varsa) için iyi olacağını düşündüm.
Sunucu Yazılımları
İşletim sistemi olarak tabiki Linux (RedHat Enterprise, yoksa Debian). Web sunucu olarak da nginx ve yerine göre Apache HTTP Server. Daha önce LigHTTPD kullanma fırsatım oldu, statik dosyalar ve streaming medya için kullanmıştım, geliştirme süreci biraz yavaşladı diye hatırlıyorum. SQL sunucusu olarak MySQL ve gerekirse PostgreSQL kullanmayı tercih ederim. 2000 yılından itibaren PostgreSQL kullanan bir proje hazırlamadım fakat arada bir takip ediyorum. Günümüzde bolca ismi duyulan ve moda olan “NoSQL” kavramı ile MongoDB ve key-value (anahtar-değer) veritabanlarından Redis, disk üzerinde tutulacak bir veri gereksinimi olmadığında ise Memcache (özellikle oturum yönetimi veya önbellekleme/cache için). Memcached‘in verileri disk üzerine de yazan ve “sharding” kavramı getiren ve yönetim paneli gibi özellikleri olan Membase Server projesini de takip ediyorum (Redis’e rakip diyebiliriz). Tam metin arama da ise şimdiye kadar Sphinx ve Apache Lucene deneme fırsatım oldu, fakat Sphinx’in kullanımı daha hoşuma gitti, eğer Lucene’ı Zend Framework ile kullanacaksanız dikkatli olun. Zend Framework içinde gelen Lucene kütüphanesi kaynak kullanı konusunda biraz problemli.
İnternet Programlama
Yıllar önce Perl ile başlamıştım fakat şu anda tabiki PHP tercih ediyorum. Python ve Ruby dillerini uzun süredir inceliyorum fakat bir proje çıkartma fırsatım olmadı. (Sadece Python ile Linux üzerinde basit bir socket sunucu hazırlamıştım). Bunlar hariçinde JavaScript ile node.js platformu üzerinde birşeyler yapma planlarım var, bu yıl geçtiğimiz yıl içerisinde adından çokca bahsettirdi. İlerde kurcaladığımda bununla ilgili bir yazı yayınlamayı da düşünüyorum.
Mobil Programlama
Şimdiye kadar sadece iOS uygulamaları üzerine uğraşma fırsatım oldu. Çoklu platform desteği ile Appcelerator Titanium platformunu kullandım ve şimdiye kadar hazırladığım 4 tane uygulama yayınlandı (sadece iOS için). JavaScript bilenler için oldukça basit ve hızlı şekilde iOS ve Android platformları üzerinde uygulama geliştirme için bir platform. Belge olarak biraz eksik ama örneklerden ve API belgelerinden hızlıca öğrenebilirsiniz. Daha sonra biraz Xcode ile Objective-C denemelerim oldu fakat zaman darlığından devam edemedim. Objective-C’nin dil yazımı biraz garip gelebilir fakat çok zor değil, programlama bilgisi olanlar hızlıca çözebilir. Esas zorlayan kısım Xcode ve Cocoa Framework’e alışmanız. İlerde Appceleratir Titanium ve mobil programlama (muhtemelen Objective-C) ile ilgli birkaç yazı yazma planlarım var.
PHP Çatıları (Framework)
Çok fazla işim düşmese de uzun zamandır CakePHP projesini takip ediyorum ve deneme fırsatım oldu. Performans takıntınız yoksa ve hızlıca birşeyler üretmek istiyorsanız PHP çatıları arasında en basiti diyebiliriz. CakePHP projesinden ayrılıp daha sert kuralları olan, PHP 5.3 ve üst sürümleri destekleyen ve performans olarak daha iyi olan Lithium Framework güzel bir proje. Oldukça esnek olan Lithium Framework’ün halen kararlı sürümü yok fakat şu anda bazı startup projelerinde kullanılıyor. Yazımı ve kullanımı keyifli ve oldukça tertipli düzenli bir çatı. İlerde CakePHP ve Lithium Framework konusunda yazılar görebilirsiniz. Zend Framework‘ü ise her zaman uzaktan takip ediyorum. Symfony, Yii, CodeIgniter, Kohana, FuelPHP gibi çatıları tarzları ve yaklaşımları yüzünden hiç beğenemedim. (Aman dikkat, bu bundan hızlıdır, bu çatı bunu döver gibi bir söylemim yok, sadece tercih ve zevk meselesi.)
Kod Editörü
Linux üzerinde genellikle GNU nano veya Pico kullanıyorum. Microsoft Windows üzerinde ise Sublime Text 2, yoksa Notepad (plus plus değil, bildiğimiz düz Notepad). Mac üzerinde ise her zaman TextMate, fakat terminal üzerinde yine GNU nano kullanıyorum, genellikle elim terminale aşırı ve abartılı şekilde aşina olduğu için GNU nano kullanımım daha yüksek oranda.
Kaynak Kod / Sürüm Yönetimi
Tüm sistemler üzerinde Git veya Subversion (SVN), fakat Git daha çok hoşuma gidiyor.
Tarayıcı
Mac üzerinde Safari (neden Google Chrome kullanmadığımı bilmiyorum), Microsoft Windows üzerinde Google Chrome, fakat bir siteyi denemem gerekirse (ki uzun zamandır böyle bir gereksinimim olmadı) Mozilla Firefox ve IETester, Linux üzerinde ise Lynx metin tarayıcısını kullanıyorum.
Teknoloji / Sektör Takip
Twitter üzerinden arkadaşlar sağolsun birşeyleri “retweet” ediyorlar devamlı, günde sayını bilmediğim kere
TechCrunch, Read Write Web, Smashing Magazine, Webrazzi ve GitHub üzerinden projelerdeki yenilikleri takip ediyorum. Genelde günde bir defa MacRumors, 9To5Mac ve Culf of Mac bloglarını takip ediyorum. Hafta bir ve aklıma geldikçe de myNoSQL bloğunu takip ediyorum. Genelde RSS okuyucu kullanma alışkanlığım olmadığı için sitelere girip takip ediyorum.