Konsolden twitter durumumu güncellemek için basit bir betik yazdım. status.py içerisine twitter profilinize ait kullanıcı adı ve parolasını girmek yeterli.
Betiğin kullanımıysa şöyle:
python status.py -s "Merhaba, Dünya"
Bugün, Internet Explorer'ın başa bela sorunlarından biriyle daha karşılaştım. Eğer, aşağıdaki gibi bir kodunuz varsa Internet Explorer'da çalışmayacaktır.
var div = document.createElement('div');
div.setAttribute('style', 'border: 1px solid #ff0000');
div.innerHTML = 'Iron Maiden\'s gonna get all of you!';
QuirksMode sağolsun, Internet Explorer 8. sürümüne kadar setAttribute style niteliğini set etmiyormuş.
Çözüm için kodumuzda küçük bir değişiklik yapmak yeterli:
var div = document.createElement('div');
div.style.cssText = 'border: 1px solid #ff0000;';
div.innerHTML = 'Iron Maiden\'s gonna get all of you!';
Bazen Zend Framework'den nefret etsem de işe yarayan anları da yok değil. Diyelim ki veritabanından gelen veya herhangi bir dosyadan okumanız gereken verinin YYYY-MM-DD formatında olması gerekiyor. İşte bu noktada Zend_Validate_Date olaya dahil oluyor.
Biraz önce bahsettiğim yyyy-mm-dd örneğiyle devam edelim:
$date = '1988-02-24';
$validator = new Zend_Validate_Date('yyyy-MM-dd');
if($validator->isValid($date)) echo 'Tarih geçerli bir formata sahip.';
VMware üzerinde OpenSolaris çalıştırıyorsanız, kurulum sonrası internet bağlantısında sorun yaşamamak için network ayarlarında, Use network address translation (NAT) seçeneğini işaretlemek gerekiyor.
Fatih Hayrioğlu'nun FriendFeed'deki Internet Explorer 6 konulu girdisinde, sadece IE6 kullanıcıları için tarayıcıyı kilitleyecek bir kod yazmayı önermiştim.
Bugün, uykusuzluğumu da gidermek amacıyla küçük bir çalışma yaptım. Aşağıdaki kod ile, sayfayı IE6 ile ziyaret ederseniz tarayıcı göçecektir :)
var IE6 = false /*@cc_on || @_jscript_version <= 5.7 @*/;
if(IE6) for(x in document.write) document.write(x); // [1]
[1] Wikipedia
Google Translate'in yayınladığı bookmarklet'ların sonucu aynı sekmede görüntülemesine sinir olduğum için küçük bir değişiklik yaptım. Artık seçilen metnin çevirisini yeni sekmede gösteriyor. Aşağıdaki örnek sadece Türkçe için geçerli. Diğer diller için aynı değişikliği kolayca yapabilirsiniz.
Bu arada, daha önce Google Translate için bir Firefox eklentisi olup olmadığını sormuştum. Kimseden ses çıkmayınca, "iş başa düştü deyip" yazmaya başladım. Bu sene içinde biter umarım :)
Daha önce JavaScript'e yeni metodlar eklemiştik. Bu seferde new line(\n) karakterini otomatik olarak <br /> etiketine çevireceğiz.
String.prototype.nl2br = function() {
return this.replace(/\n/g, "<br />");
};
Kullanımı:
var s = "Iron Maiden\n\nSteve Harris\nBruce Dickinson" +
"\nAdrian Smith\nDave Murray\nJanick Gers\nNicko McBrain";
document.write(s.nl2br());
APC(Alternative PHP Cache), PHP tarafından PECL eklentisi olarak geliştirilen bir cache sistemidir. Kurulumunun ve kullanımının kolay olması nedeniyle memcached yerine tercih edilebilir.
APC'yi Windows işletim sistemi üzerinde kulanmak için birkaç seçenek mevcut.
Ben üçüncü ve en hızlı çözümü seçtim.
Herhangi bir hata almadıysanız APC kurulumunu başarıyla tamamladınız demektir. Bundan sonraki yazılarımda APC'nin nasıl kullanılabileceğini anlatacağım.
Eğer Windows işletim sistemi üzerinde PHP'yi cURL kütüphanesiyle beraber kullanmak istiyorsanız, php.ini dosyasında ;extension=php_curl.dll satırını bulup başındaki noktalı virgülü kaldırmak yetmiyor.
Sorunu çözümü basit: PHP'yi kurduğunuz dizindeki libeay32.dll ve ssleay32.dll dosyalarını c:\windows\system32 içine atıp apache ya da iis'i yeniden başlatarak cURL kütüphanesini kullanabilirsiniz.
Fırsat buldukça küçük ipuçları eklemeye devam ediyorum. Özellikle dosya yükleme işlemleri yaparken, dosya uzantısını almak gerekebilir. Çok çeşitli yöntemleri olsa da ben uzun zamandır aşağıdaki kodu kullanıyorum.
function dosyaUzantisi($strDosya) {
return ".".array_pop(explode(".", $strDosya));
}
Görevi, stringin baş ve sonundaki boşlukları temizlemekten ibaret olsa da pek çok programlama dilinin hayat kurtaran fonksiyonlarından biridir trim(). Ne yazık ki JavaScript'te bu fonksiyon bulunmuyor. Biz bu yazıda JavaScript'e bu fonksiyonu ekleyeceğiz.
String.prototype.trim = function() {
s = this.replace(/^\s+/, "");
return s.replace(/\s+$/, "");
};
Bu fonksiyonu biraz daha kısaltabiliriz.
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, "");
};
Her iki fonksiyonu da " sağ ve soldaki boşluklar silinecek ".trim() şeklinde kullanabiliriz.
...ne yazık ki -halen- varsayılan olarak değil :)
Web geliştiriciliği yaptığım süre boyunca, Internet Explorer'ın her türlü uyumsuzluğunu zamanla kabullendiğimi söyleyebilirim. Ancak CSS seçicileri konusundaki uyumsuzluklarına gıcık olmadan edemiyorum.
Bu sebeple, uzun süredir Internet Explorer üzerinde tüm seçicilerin desteklendiği bir JavaScript kütüphanesi üzerinde çalışıyordum ki zaten benden önce yapıldığını tesadüfen gördüm!
Dean Edwards'ın geliştirdiği kütüphane ve kullanımı hakkında bilgi almak için proje sayfasını ziyaret edebilirsiniz. Ayrıca, uygulamalı özellik listesi içinde buraya* bakabilirsiniz.
Bundan böyle bulmak için çok zaman harcadığım -evet, unutkan biriyim- küçük detayları burada yayımlayacağım.
İlk olarak, bulmak için son 20 dakikamı harcadığım -tamam, henüz Google'ı kullanmayı bilmiyor olabilirim- bir problemin çözümünü yazacağım.
pear upgrade PEAR
Evet, 20 dakika harcamaya değmeyecek kadar kısa bir çözüm :) Yukarıdaki komutu, komut satırında(Win + R | cmd) çalıştırınca PEAR versiyonumuzu güncellemeye başlıyorsunuz.
Bir şekilde bu yazıyı okuyor ve PEAR ile ilgileniyorsanız, benim gibi kurulu paketlerinizin örümcek ağı tutma ihtimali mevcut :) Ki bu da zaman zaman paketler arasında uyumsuzluk yaratabiliyor (bkz: ben bugün bunu gördüm). Bunun içinde tüm paketlerimizi aşağıdaki komut yardımıyla güncelleyebiliyoruz:
pear upgrade-all
Bu arada, son olarak içimi dökmek istediğim bir konu var: Resmi PEAR ve Smarty dökümantasyonundan nefret ediyorum!
Bildiğiniz gibi autocomplete niteliği tıpkı target gibi web standartlarına uygun değil. Bu günlük kullanımda pek bir sorun teşkil etmese de benim gibi web standartlarına takıntılı geliştiriciler için epey büyük bir sorun :)
Bunu aşabilmek için imdadımıza JavaScript yetişiyor. Biz jQuery kütüphanesini kullanacağız:
$("input[@class='autocomplete']").each(function(){
$(this).attr("autocomplete", "off");
});
Kullanımı:
<input type="text" class="autocomplete" name="frmAra" />
Bu şekilde niteliği class ve değeri autocomplete olan tüm input elementlerine autocomplete = "off" niteliği eklenir.
Tabii kullanım şekline göre gerekli değişiklikler yapılarak -örneğin tüm input elementlerine uygulanabilir- kullanılabilir.
Bazen farklı bir formatta aldığımız tarih bilgisini, farklı bir formata çevirmemiz gerekir. Bunun için ya PHP'nin list() fonksiyonunu ya da data_parse() fonksiyonunu kullanıp çeşitli işlemler yapmışızdır(ki daha pek çok yöntemi de vardır).
Bu yazıda, strftime() fonksiyonunu kullanıp tarihimizi nasıl istediğimiz formata çevireceğimizi anlatmaya çalışacağım.
Sözdizimi
string strftime(string tarih_formatiniz [, int tarih ])
Sözdiziminde de görüldüğü gibi fonksiyonun ikinci parametresi kullanmak zorunda değiliz. Şayet kullanmazsak, belirtilen formata uyacak şekilde o anki tarihi döndürür. Ayrıca, opsiyonel olarak setlocale() fonksiyonunu kullanarak yerel ayarlara göre sonuç döndürmesini sağlayabilirsiniz(Örneğin ay ve/veya günü Türkçe olarak yazdırabiliriz). Ancak setlocale() fonksiyonu, IIS veya Windows işletim sistemi üzerinde Apache kullanıyorsanız çalışmayacaktır. setlocale() fonksiyonu bu yazının konusu olmadığından, PHP'nin çevrimiçi dökümantasyonundan konu hakkında ayrıntılı bilgi alabilirsiniz.
Kullanımı
Bu kadar konuştuktan sonra örneğimize geçelim :) Aşağıdaki örneğimizde, "Mon Mar 17 08:18:01 2008" formatındaki tarihimizi "2008-03-17 08:18:01" şeklinde yazdıracağız.
<?php
$formatlanacak_tarih = "Mon Mar 17 08:18:01 2008";
$yeni_tarih = strftime("%Y-%m-%d %H:%M:%S", strtotime($formatlanacak_tarih));
echo $yeni_tarih;
?>
strtotime() fonksiyonu, karakter katarı(string) tipindeki değeri, UNIX Timestamp* tarih biçimine çevirir.
Şu sıralar CodeIgniter'dan vazgeçip, Symfony'yi incelemeye başladım. Symfony, 2005 yılından beri geliştirilen, açık kaynaklı PHP MVC(Model-view-controller) framework'ü. Evet, başlangıç için gereğinden fazla basit bir açıklama olsa da Yahoo! geliştiricilerinin projeye destek verdiğini ve güzide sosyal imleme servisi del.icio.us'ın yeni versiyonunda Symfony'den yararlandıklarını söyleyerek projenin yeteneklerini bir nebze anlatabileceğini umuyorum.
Veritabanı işlemlerini, bir O/RM(Object/Relational Mapping, ORM, O/R mapping) frameworkü olan Propel yardımıyla gerçekleştiriyoruz. O/RM, ilişkisel veritabanlarında(RDBMS) bulunan tablolar ile uygulama tarafında bulunan nesnelerin biribiriyle ilişkilendirilmesine verilen bir terimdir. O/RM için, pek çok ihtimal göz önünde bulundurularak hazırlanmış frameworkler bulunmaktadır(Java platformu için Hibernate, .Net platformu için NHibernate ve LINQ) ancak megolamaninin sınırlarında gezen biriyseniz kendi frameworkünüzü de yazabilirsiniz. O/RM araçları, MVC hiyerarşisinde persistence layer(veri erişim katmanı) olarak adlandırılırlar. Fazla uzatmadan, O/RM araçlarının görevlerini(yani Symfony için Propel'in) şöyle açıklayabiliriz: Uygulama tarafında ilişkilendirdikleri(buna mapping diyorlar) nesneler arasında veri aktarımını, geliştiriciyi SQL sorgularıyla vs. uğraştırmadan sağlar.
Ayrıca, çok methedilen dökümantasyonunun pek okunabilir olduğunu söyleyemem. Bir süre sonra gözü epey yoruyor. Bunun yerine Symfony'yi yakından tanımak için hazırlanan örnek "My First Project"'i indirip incelemek daha faydalı olabilir.
Yazının devamını okumak için tıklayın.
ipucu javascript php yaptıklarım
Yayımlanan yazılar, kaynak gösterildiği müddetçe kullanılabilir.
Yapılan yorumların sorumluluğu yazarına aittir.