13 Nisan 2010

(Php) Metin özetlerinde Türkçe karakter problemi

Son zamanlarda birçok web sitesinde anasayfadaki alt sayfalara ait içeriklerin özetinin gösterildiği yerlerde kısaltılmış (özet) metin oluşturulurken bazen Türkçe karakterlerin hatalı göründüğünü farkettim. Hatta bu hatayı çok meşhur olan ve çok sayıda ziyaretçisi olan sitelerde bile görüyorum.

Bu hatanın nedeni Türkçe karakterlerin multibyte türü karakterler içermesidir. Yani tek bir harf birden fazla byte ile temsil ediliyor. Eğer kesme işleminin yapıldığı nokta tam da bu byteların arasına denk geliyorsa o zaman özetteki son karakter garip bir şekilde görünüyor. Bu sorunun nedeni kısaltma işlemi için yanlış işlevlerin kullanılmasıdır. Örneğin Türkçe karakter içeren bir metinde kısaltma yaparken substr() işlevi yerine mb_substr() işlevini kullanırsak böyle bir sorunla karşılaşmayız. Bu işlevle ilgili detaylı bilgiye http://tr.php.net/manual/tr/function.mb-substr.php adresinden ulaşabilirsiniz. Metin türünde veriler üzerinde  buna benzer şekilde işlemler yapan neredeyse her php işlevine karşılık mb_ ile başlayan bir multibyte işlev vardır. Bu şekilde Türkçe karakterlerin sorun çıkardığı yerlerde benzer hatalarla karşılaşmayız.

31 Ocak 2010

Google anasayfasında ajax

Geçen gün google 'ın bir süreliğine çalışmadığını farkettim ve ardından çalışır hale geldiğinde arama işleminin (bazı tarayıcılarda) Ajax ile yapıldığını farkettim. Linux ortamında Chrome 'da eski şekilde çalışsa da Firefox için ajax sistemiyle arama yapılıyor. Google zaten yeterince hızlı açılıyordu ancak bu değişiklikle birlikte sunucuları üzerindeki yükten ciddi bir tasarruf edecekleri kesin. Bu değişikliği farketmemi sağlayan şey adres kısmında eskiden google.com/ dan sonra gelen kısmın artık # ile başlamasıydı. (Farkettiyseniz bu yöntemi Facebook zaten neredeyse bütün sayfalarında - ör: bir üyenin albümünde gezinirken - kullanıyor. Hatta bu yöntemin yayılmasında büyük bir payı vardır.) Adresin bu şekilde değişmesinin şöyle bir avantajı var: Tarayıcının geri düğmesini tıkladığınızda bir önceki ajax isteği kullanılarak önceki sayfaya gidilmiş oluyor. Aynı durum ileri düğmesi için de geçerli. Aksi halde kullanıcının geri gitmek bir önceki işlemi tekrarlaması gerekiyor. Yani tarayıcının yapması gereken şeyi kendisi yapmak zorunda kalıyor. Bir sonraki yazımda bir örnek vererek bu yöntemle ajax kullanımından bahsetmeyi düşünüyorum.

27 Ocak 2010

Linux için Google Chrome

Google Chrome web tarayıcısının Linux için beta sürüm paketleri yayınlanmış. Daha önce başka bir platformda Chrome kullandıysanız diğer tarayıcılardan fark ve üstünlüklerini az çok biliyorsunuzdur.

Google Chrome 'u şu adresten indirebilirsiniz:
http://www.google.com/chrome?platform=linux

Google Chrome hakkında detaylı bilgi için:
http://www.google.com/chrome/intl/tr/features.html?platform=linux

15 Ocak 2010

PHP kodlarını korumak / şifrelemek

Php dili hepinizin bildiği gibi derlenmeyen yani betiksel olarak çalışan bir dil. Bu yüzden php ile geliştirilen bir yazılım resmi olarak olmasa da aslında açık kaynaktır. Eğer yaptığınız yazılımın başkaları tarafından incelenmesini, düzenlenmesini yada kopyalanması istemiyorsanız bir şekilde kodlarınızı korumanız gerekmektedir. Bunu sağlamanın en mantıksal yolu kodlarınızı kendinize ait sunucunuzda barındırmak olsa da bu yöntem çoğu programcı için uygun değildir. Ayrıca bazı durumlarda yazılımı başkasına teslim etmeniz gerekebilir. Buna bir örnek olarak yazılımınızı bir yada birçok müşteriye satma durumu verilebilir.

Piyasada php kodlarını derlediğini iddia eden birçok yazılım mevcut. Aslında bu derleme normal bir derleme işlemi değil. Bu işlem aslında kaynak kodları bytecode haline getirmektir.

Bu amaçla kullanılan yazılımların sayısı oldukça fazla. Bunların bir kısmı sunucuya bir eklenti kurulmasını gerektirmektedir. Herhangi bir kurulum gerektirmeden çalışacak şekilde kod dönüşümü yapan yazılımlar da mevcut ancak bu yöntem muhtemelen yazılımınızın hızını düşürecektir çünkü kodları asıl haline getirmek için bir ters şifreleme işlemi gereklidir.

Araştırmalarıma göre piyasada bu konuda en iddialı ve en yaygın olarak kullanılan iki yazılım var. Bunlardan biri Zend Guard, diğeri ise Ioncube Encoder. Günümüzde neredeyse bütün web sunucularında bu iki yazılım için çalıştırma ortamı eklentileri kurulu durumda. Bu yazıyı yazdığım sırada bu iki yazılımın fiyatları şu şekildeydi:

Zend Guard: $600
Ioncube Encoder: $199(Basic) , $299 (Pro) , $379 (Cerberus)

Zend guard 'ın fiyatı 1 yıllık kullanım içindir ve kullanmaya devam etmek için her sene bu ücreti tekrar ödemeniz gerekiyor.

Ioncube Encoder için ise ücret bir defa ödeniyor ve 1 yıllık güncelleme ve destek hizmeti ücretsiz olarak ürüne dahil oluyor. Bu süre bitiminde 2 hafta içinde daha düşük bir ücret ödeyerek süreyi uzatabiliyorsunuz.

Benim googleda araştırmalarıma göre Ioncube kalite olarak çok iyi ve arama sonuçlarında gördüğüm kadarıyla bu yazılımla korunan kaynak kodlar diğer ürünlere göre daha sağlam bir şekilde korunuyor. Ayrıca günümüzde neredeyse bir standart olarak bütün sunucularda Ioncube desteği mevcut.

Ioncube için farklı özelliklere sahip 3 sürüm var. Bunlar Basic, Pro ve Cerberus sürümleri. Bu sürümlerin karşılaştırmasını şu adreste görebilirsiniz:
http://www.ioncube.com/sa_encoder.php?page=pricing

Farklarını kısaca açıklamak gerekirse Basic (Entry Level) sürümü ile kodlarınızı incelenmeye ve düzenlenmeye karşı koruyabilirsiniz ancak bu durumda kodlar kopyalanmaya karşı korumasızdır. Pro sürümünde buna ek olarak zaman aşımı, ip ve alanadına göre kısıtlama getirmek üzere lisans dosyası oluşturarak kodlarınızın sadece istediğiniz sitede / istediğiniz süre boyunca kullanılabilmesini sağlayabilirsiniz. Cerberus sürümünde ise Pro sürümündeki özelliklerle birlikte yazılımın çalışacağı makinenin MAC adresine göre kısıtlama getirmenize olanak sağlıyor.

Bu özelliklere göre özel bir projeye ait kodları korumak yada yazılımdaki parola gibi hassas verileri korumak için basic sürümü yeterli olabilir. Yazılımın kopyalarının ticari olarak satılması amacı için ise Pro sürümü uygun olacaktır. Cerberus sürümü ise sadece makine bazlı kısıtlama gerektiren özel durumlarda gerekli olacaktır.

Ben daha önce Basic sürümünü denedim ve memnun kaldım. Ücretsiz olarak indirip kullanılabilen Ioncube Loader modülünü yerel sunucumda kurdum ve kodların sorunsuz olarak çalıştığını gördüm. Ancak daha yüksek güvenlik sağlayan obfuscation (kod karıştırma) seçeneğini kullanmak herhangi bir işlev adının kod içinde string olarak kaydedildiği durumlarda bazı yazılımlarda uygun olmayabiliyor. Ancak bu seçeneği kullanmak zorunlu değil. Yerel makinem dışında kullandığım web sunucusunda da ioncube ile kodlanmış yazılım için deneme yaptım ve yine sorunsuz olarak çalıştığını gördüm. Deneme sürümü iki haftalık kullanım sağlıyor ve deneme sürümü kullanılarak kodlanmış yazılım ise yanlış hatırlamıyorsam üç gün boyunca kullanılabiliyor.

Sonuç olarak Php gibi betiksel bir dil kullanarak ticari yazılım geliştiren yada yaptığı yazılımları korumak isteyen her geliştirici için Ioncube makul bir tercih olacaktır. Profesyonel web geliştirme amacıyla verilecek 200-300 $ gibi bir ücret bu sistemin faydası dikkate alındığında bence çok fazla bir ücret değil.

http://www.ioncube.com

13 Kasım 2009

Ubuntu 9.10 çıktı

Ubuntu 9.10 sürümü yayınlandı. Detaylar için http://www.ubuntu.com/products/whatisubuntu/910features adresini ziyaret edebilirsiniz.

Eğer daha önceden 9.04 sürümüne sahipseniz güncelleme yapmak için
Sistem > Yönetim > Güncelleme Yöneticisi
bölümüne girdiğinizde 9.10 sürümünün hazır olduğunu belirten bir mesaj görürsünüz. Yandaki güncelleme düğmesini tıklayarak sisteminizi yükseltebilirsiniz. Mevcut paketlerin güncellemeleri de dahil edilerek güncelleştirme yapıldığı için bu işlem uzun sürebilir (1-2 saat civarı). Eğer benim yaşadığım gibi güncelleme sonrası bilgisayarınız açılırken One or more of the mounts listed in /etc/fstab cannot yet be mounted şeklinde bir hata alabilirsiniz ve bu bilgisayarı açmanızı engelleyebilir. Bunun nedeni paketlerin güncellenmesi sonrasında yapılması gereken ayarlama işleminin bir sebepten yarıda kalması / yapılmaması. Bunu şu şekilde düzeltebilirsiniz:

Önce bu hatayı almadan önce ESC tuşuna basarak rescue modunda giriş yapmanız gerekiyor. Bu safhaya geçilmesi anlık olduğu için bu kısma gelmeden önce ubuntu animasyonunu gördüğünüzde sürekli olarak tekrarlayarak ESC tuşuna basın. Bir süre sonra root olarak konsola giriş yapmış olacaksınız. (Sadece ESC tuşuna fazla basmaktan dolayı otomatik komut tamamlamayla ilgili bir soruyla karşılaşırsınız. No diyerek iptal edebilirsiniz). Sisteme root kullanıcı olarak giriş yaptığınızdan bu andan itibaren dikkatli olmalısınız. Rescue modunda diskiniz muhtemelen salt okunur olarak bağlanmıştır (mount işlemi). Bunu düzeltmek için en üst düzey dizini (eğer bölümlendirmeniz farklı şekildeyse birden fazla bölüm için bu işlemi yapmanız gerekebilir) yazılabilir olarak tekrar bağlamanız gerekir. Bunu yapmak için şu komutu kullanın:
sudo mount /dev/sda2 -o remount,rw /
Burada sda2 yerine kendi sisteminizde kök dizinin bölümü için kullanılan device adını kullanmalısınız. Emin değilseniz öğrenmek için fdisk -l komutunu kullanabilirsiniz. Bundan sonra kök dizinin yazılabilir olduğunu test etmek için mkdir komutuyla (daha sonra silmek üzere) yeni bir dizin oluşturabilirsiniz.
Son olarak sistem güncellemesi sırasında yarım kalan işlemi tamamlamak için aşağıdaki komutu girin:
dpkg --configure -a
Bu komut oldukça uzun süre çalışabilir. İşlem sırasında hangi paketlerin ayarlandığını görebilirsiniz. Ayarlama işlemi tamamlandıktan sonra reboot komutu ile sisteminizi yeniden başlatın.. Eğer ayarlama işlemi sonrasında bazı paketler için hatalar aldıysanız ilgili paketleri synaptic paket yöneticisini kullanarak tekrar kurabilirsiniz.

8 Ekim 2009

Ubuntu Live usb disk oluşturma problemi yaşayanlar için

Ubuntu Live usb disk (yada cdden işletim sistemi çalıştırmaya izin veren başka bir dağıtım da olabilir) kurulumunda sorun yaşayanlar için bulduğum bir yöntemi paylaşmak istiyorum:

http://rudd-o.com/en/linux-and-free-software/a-better-way-to-create-a-customized-ubuntu-live-usb-drive

Bu yöntemle kısaca usb diskte iki farklı dosya sistemiyle bölümlendirme yapılıyor ve birinci bölüme (artan kısmı windows tarafında da bellek olarak kullanabilirsiniz ) usbden kullanmak istediğiniz alana başlatmak için gerekli dosya ve dizinler ve sanal harddisk dosyası koyuluyor, ikinci bölüme ise dağıtım cdsinin iso dosyası kaydediliyor. Bu şekilde eğer bilgisayarınızın (daha doğrusu bios 'un) usb diskten başlatma özelliği varsa sanki cd den başlatmış gibi işletim sistemi kullanabiliyorsunuz. Üstelik ayrılmış alana sahip sanal disk dosyası (casper-rw) olduğu için yaptığınız değişiklikler kalıcı oluyor (persistent mode).

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...