MySQL 4.1′den itibaren türkçe karakter işi karıştı. “SET NAMES latin5″ ile çözdük bu problemi gerçi ama yine de sistemin nasıl çalıştığını bilmezseniz sorun yaşayabilirsiniz. O yüzden MySQL’in karakter seti ve collation hakkında birşeyler yazayım istedim.

Tanımlar

Konuyu kavramak için önce tanımları ele alalım. Bilmemiz gereken iki tanım var: “Character Set” ve “Collation”

Character Set (Karakter Seti)
Adından anlayabileceğiniz gibi desteklenen karakterleri kast ediyoruz. Örneğin latin5 karakter setindeki “ı” harfinin ASCII kodu latin1 karakter setindeki ý harfi ile aynıdır. Dolayısıyla türkçe bir dokümanı latin1 olarak gösterirseniz tüm ‘ı’ harfleri ‘ý’ olarak gösterilecektir.

Farklı diller aynı karakter setlerine sahip olabilir, örneğin latin1 seti almanca, ispanyolca, ingilizce, isveçce gibi dilleri kapsar.

Notlar:
- Character set, charset, code page gibi isimleri de vardır.
- latin1: ISO-8859-1 ve windows-1252 ile aynıdır.
- latin5: ISO-8859-9 ve windows-1254 ile aynıdır.

Collation (koleyşın)
İki karakterin karşılaştırılmasında kullanılır. Pratikte bu tablo alanlarını sorgularken ve sıralamalarda işe yarar:

SET names latin5;
SELECT * FROM deneme WHERE isim = 'Çağrı';
SELECT * FROM deneme ORDER BY isim;

Yukarıdaki sorguların sonucu isim alanının collation’ına bağlıdır.

Örnekle açıklamak istersek, almancada da “ü” harfi var türkçede de, isveçcede de… Ama bu harflerin alfabedeki yeri dile göre değişiyor yani collation’ı latin1_swedish_ci seçip sıralama yaparsanız ü başka yerde, latin1_german1_ci seçerseniz başka yerde yer alır. Ya da latin1_german1_ci seçerseniz aramalarda ‘ä’ ile ‘a’ aynı kabul edilirken latin1_german2_ci seçerseniz farklı kabul edilir.

Collation altçizgiyle ( _ işareti) parçalara ayırırsak ilk kısım karakterin ait olduğu dil ailesini, ikinci kısım dili, üçüncü kısım ise karşılaştırma şeklini ifade eder.

Örneğin latin1_swedish_ci dediğimiz zaman “latin1″ ailesinden “isveçce” dilini büyük-küçük harf ayrımı olmadan sırala demek istiyoruz.

ci: Case-Insensitive (Büyük – küçük harfe duyarsız)
cs: Case-Sensitive (Büyük – küçük harfe duyarlı. Sadece bazı diller için geçerli, türkçede kullanılmaz)
bin: Binary (Karakteri tanımlayan byte değerine göre karşılaştır demek. Pratikte büyük – küçük harfe duyarlılık istendiğinde kullanılır.

MySQL Dil Ayarı Nasıl Yapılır?

MySQL’le biraz uğraşırsanız dilin ayarlanabileceği tonla yer görürsünüz. Büyükten küçüğe doğru gidersek:

  1. Sunucu ayarı
  2. Veritabanı ayarı
  3. Tablo ayarı
  4. Tablodaki alanın ayarı

Not 1: Bu ayarlardan pratikte sizi tek ilgilendiren: tablodaki alanın karakter seti.
Not 2: Buradaki ayarlar ne olursa olsun son sözü yine bağlantıyı kurduktan sonra verdiğiniz “SET NAMES utf8″ komutu söyler.

1. MySQL Sunucusu

MySQL derlenirken tanımlanabilir:

shell> ./configure --with-charset=utf8 --with-collation=utf8_general_ci

Ya da my.cnf / my.ini’de tanımlanabilir:

» Yazının devamını oku…

Webrazzi’de Google App Engine ile ilgili gördüğüm bir yazı üzerine şöyle bir göz atayım dedim ve geçen sene duyurulan Google App Engine‘in güzel bir yol kat ettiğini fark ettim.

Nedir?

Sektörü takip edenler için özetlemek gerekirse “Amazon Web Services” ile “Ruby on Rails“in işlerini bir arada yapan bir uygulama diyebiliriz.

Bilmeyenler için kısa özet:
Amazon Web Services’in içerisindeki;

  • EC2 yoğun yük altındaki sunucuların ölçeklendirilmesi servisi.
  • S3 web servisinizdeki verilerin ölçeklendirilmesi servisi.
  • SimpleDB ise ölçeklenebilen bir veritabanı servisi.

Yani kısaca trafiği yükselen ve çok yük alan servisler için zahmetsizce kapasitenizi arttırabildiğiniz ve hatta gerektiğinde maliyeti düşürebilmek için azaltabildiğiniz bir servis. Microsoft’un benzer servisinin adı ise “Azure

Ruby on Rails’in özelliği ise çok hızlı ve pratik proje oluşturulabilmesi. Bir ekibin gereksinim duyduğu bütün altyapılara sahip:

  • Geliştirme, test ve son ürün için ayrı konfigürasyon tanımlayabilme (Son üründe hata mesajlarını gösterme, geliştirilen versiyonda göster vs.)
  • Geliştirme için kullanıma hazır web server. Apache kurayım, PHP tanıtayım falan yok. Web server’ı çalıştır diyorsunuz, kendi makinenizde herşey hazır olarak çalışıyor.
  • Arama motorları için adresin anlamlı olması çok önemli o yüzden adresi scriptlere dağıtan “router” mekanizması. Geliştirici ve tasarımcı için linkleri verirken de kolaylık oluyor.
  • Veritabanı için ORM altyapısı.
  • vs.vs.vs.

Google App Engine’de Rails’i hatırlatan python tabanlı bir framework kullanabiliyorsunuz. İsteğe bağlı olarak en az Rails kadar ses getirmiş Django ya da CGI tabanlı herhangi bir python framework’ü kullanılabiliyor. Son zamanlarda Java desteği de sağlandı.

Geliştirme esnasında sadece komut satırında web sunucuyu çalıştır diyorsunuz. Veritabanı falan kurmaya gerek yok zira veritabanı da web sunucu ile entegre. Kendine özgü bir veritabanı var. Geliştirmeyi bitirdikten sonra sanki FTP ile upload eder gibi projeyi upload et diyorsunuz ve herşey çalışır hale geliyor.

Veritabanında yük artarsa Google hallediyor, veritabanı otomatik genişliyor.
Web sunucularında yük artarsa Google hallediyor, sunucular ölçekleniyor.

Yakın zamana kadar gördüğün en pratik çalışma ortamı…
Ama tabii ki soru işaretleri de bırakıyor…

Dezavantajları

  • Paralı bir servis. CPU’nun kullanım saati başına, hat miktarı başına, disk alanı başına, zart başına zurt başına taksimetre gibi yazıyo. Bir miktarı ücretsiz ama ben şahsen herhangi bir projemin ne kadar CPU kullanacağını önceden öngöremem dolayısıyla proje maliyetini öngörmek biraz sıkıntılı.
  • Desteklenen diller sadece Python ve yeni yeni Java… Özellikle Python için Türkiye’de programcı bulmak zor…
  • Özellikle Google’ın framework’ünü kullanarak projenizi geliştirirseniz ve ileride örneğin Google’ın fiyatlandırmasından ya da hizmetinden memnun kalmazsanız projenizi destekleyecek hosting çözümleri nedir allah bilir. Daha yaygın olan Django tercih etseniz bile veritabanı için Google’ın altyapısı kullanıldığı için başka bir servis sağlayıcıya geçmek zahmetli olabilir.

Sonuçta aynı kurumsal şirketlerin personele bağımlı kalmaması gibi projelerin de servis sağlayıcı, programcı gibi parametrelerden mümkün olduğunca bağımsız olması uzun vadede büyük avantajlar sağlıyor…

Benim öngörüm uzun zamandır geleceğin framework’ler ve framework’leri adam gibi destekleyen IDE’lerde olduğu idi. Framework + IDE ikilisinin yanına Cloud Computing destekli servisleri de ekleyebilirim sanırım.

Apr 09

Zend Framework 1.8

Hiç yorum yazılmamış - Yorum Yaz

ZF preview release yayımlanmış. Bence çok önemli bir versiyon bu zira kendileri de Zend Framework’ün “framework” tanımına tam anlamıyla uymadığını kabul etmiş sonunda…

Framework’ler kullanıcıya bir uygulamayı nasıl yaratacağı ile ilgili bazı varsayımlar sunar ve bu varsayımlar doğrultusunda kullanıcıyı yönlendirir. ZF tarafında ise “loose coupling” dediğimiz modellerin birbirinden bağımsız çalışabilmesi konusu çok daha ön planda tutulmuş. Bu da ZF’yi “çözebilenlere” büyük esneklik sağlarken ilk başlayanların öğrenmesini ve adaptasyonunu zorlaştırıyor.

Hatta ZF kullananlar için bile yeni bir proje yaratmak çok zahmetli. Yani tamam kendinize kolaylıklar buluyorsunuz mutlaka ama yine de zor.

Açıkçası bu eski gidişatla Zend Framework’ün efektif kullanılabilmesi için bir alt framework’e ihtiyacı olacağını düşünüyordum ama bu son hamleyle sanıyorum pratik bir framework olma yoluna döndü ZF.

» Yazının devamını oku…

NetBeans Son zamanlardaki favori editörüm NetBeans‘de iki önemli sorun vardı: İlki SFTP desteğinin olmayışı, ikincisi de windows versiyonundaki türkçe karakterler ile ilgili bir bug.

SFTP desteği 6.7M2′den itibaren verilmeye başlanmış. Türkçe karakterler ile ilgili bug ise çabalarım sonucunda düzeltildi sonunda. *200903060201* numaralı buildden itibaren geçerli olan bu düzeltme sanırım v6.7′nin stabil sürümüne dahil olacaktır.

Stabil olmasa da olur diyenler gecelik derlemeler sayfasından indirilebilir.

Feb 09

Hangi PHP Framework’ü Daha İyi?

Hiç yorum yazılmamış - Yorum Yaz

Var olan tonla php framework’lerinden birini seçerken birçok faktörü göz önünde bulundurmak gerek:

  • Performans ve scalability
  • Komunite desteği (Yazılımcı ararken ya da takıldığınız noktayı sorarken lazım olacak)
  • Geliştiren ekibin güvenilirliği (Kullandığınız framework’ün gelişmesinin durması kabus olacaktır)
  • Kolay öğrenilebilirlik
  • Kolay geliştirilebilirlik
  • Yeterlilik / Esneklik
  • Sunduğu özellikler
  • Desteklediği PHP versiyonları

» Yazının devamını oku…

Editör ya da IDE’ler doğru kullanıldığında üreticiliğinizi ve kod kalitenizi kat kat arttırabilirler. Ne yazık ki birçok şeyde olduğu gibi editör konusunda da çok huysuzum. Şöyle huzurla kullanabileceğim bir PHP IDE’sine ne yazık ki kavuşamadım. İşte denediklerim:

  1. Dreamweaver (http://www.adobe.com/products/dreamweaver/)
  2. Zend Studio 5.x, 6.x Eclipse, PDT (http://www.zend.com/en/products/studio/)
  3. NuSphere PHPEd (http://www.nusphere.com/)
  4. TextMate (http://macromates.com/)
  5. NetBeans (http://www.netbeans.org/) Ücretsiz
  6. vim

» Yazının devamını oku…

On iki yıl Windows® kullandıktan sonra 3-4 ay önce cesaretimi topladım ve paraya kıyıp bir iMac aldım. İşte bu süre içinde sevdiklerim ve sevmediklerim:

Donanımında Sevdiklerim

Sadece donanımı için iMac alınırmış onu öğrendim.

  • Tıs sesi bile gelmiyor. Süper sessiz.
  • Kasası monitörün içinde, kablosuz teknolojiler entegre o yüzden elektrik fişinden başka kabloya ihtiyaç yok.
  • Üzerinde ihtiyaç duyduğunuz hemen her şey var: Sağlam bir çift hoperlör, USB’ler, firewire’lar, bluetooth, wireless, ethernet, webcam.
  • Klavyeyi herkes sevmeyebilir ama plastik değil alüminyumdan sessiz ve parmaklarınıza oturan şık bir klavye.
  • Klavyenin iki tarafında USB girişleri mevcut böylece USB stick’inizi kolaylıkla kullanabiliyorsunuz.
  • LCD ekranı gerçekten çok kaliteli ve canlı renklere sahip.
  • Bilgisayardan anlamayana masa süsü diye yutturabileceğiniz şıklıkta bir fare…

iMac Yandan Görünüş
» Yazının devamını oku…

Selenium LogosuFirefox’un yavaşlığına katlanmamın tek nedeni extension’ları.
Güzel bir extension daha yakaladım gezerken: Selenium

Selenium’a “şu adrese git, oradaki şu linke tıkla, gelen sayfada şu kelime var mı?” gibi komutlar kaydedebiliyorsunuz. Komutları tüm browser’lar çalıştırıyor ancak kaydetme işlemi Firefox extension’ı ile çok kolay.

Web sitelerinin test edilmesi için yaratılmış olmakla beraber yapılan aksiyonu PHP ve ruby de dahil muhtelif programlama dillerinde çalışacak şekilde export edebildiği için başka servislerden data parse etmek isteyenlerin de işini kolaylaştırabilir. (Denemedim)

Çok lafa gerek yok, screencast’i herşeyi özetliyor:
http://selenium.seleniumhq.org/movies/intro.mov

Nov 23

Kodaman.org

1 yorum - Yorum Yaz

Nokta ve Pilli Network ortaklaşa teknolojik bir paylaşım sitesi açmış: kodaman.org

kodaman.org

Dürüst olmak gerekirse tasarım özensiz, tag’leme ise zayıf. Ama daha yeni olmasına rağmen içerisinde kaliteli teknik dokümanlar var. Dokümanları yazanların bazıları yakınen tanıdığım, Nokta’nın kocamaaan siteleriyle güreşen ve Türkiye’nin en iyileri arasında yer alan programcı ve mühendisler…

Örneğin iltaren’in memcached ile ilgili yazısı biraz fazla low level olmakla beraber oldukça faydalı…

Ya da sonsuz sayıda alt kategorilere sahip datayı organize eden “nested set model” adlı algoritma da ilginç…

Nokta ve Pilli’yi eksik bir noktaya parmak bastıkları için kutluyorum. Umarım tutar…

phpwomen.org diye site varmış, üstelik yarışma düzenliyomuş ödülü Zend Studio lisansıymış.
Üşenmedim, oturdum basit bir PHP altyapısı yazdım gönderdim:

http://www.phpwomen.org/forum/index.php?t=msg&th=488

MVC’nin yandan yemişi olan bu yapı FotoKritik’te kullandığımı andırıyor.

Web tabanlı yazılımlarda kullanılan MVC tip2′nin dezavantajı aynı işlem için çok dosyayla uğraşma gerekliliği. Controller dosyasında model aksiyonunu çağırıp view’a assign edeceksiniz, model dosyasında aksiyonu yazacaksınız, view dosyasında da formatlamayı yapacaksınız. Üstüne bi de helper metotları falan gerekirse onları yazacaksınız falan.

Bu yazdığım yapıda ise görüntüleme için tek, insert/update/delete için de iki dosyaya bakmak yetiyor.
Fazla programcının çalışmadığı küçük ve orta boy projeler için verimli bir şekilde kullanılabilir.