Devinatart

Portfolyo adresiniz: isminiz.deviantart.com
Sosyal öğeler: Yorum, kritik, forum, gruplar, arkadaş olma, mesajlaşma, blog, ne ararsanız var.
Notlar: Bu listedeki portfolyo siteleri içerisinde açık ara en büyük olan deviantart. Burada herkes birşeyler yayınlıyor. Bu yüzden kalite biraz düşük gibi gözükebilir ama biraz dolaşırsanız gerçekten harika insanlarla tanışabilirsiniz. Pek çok farklı formatta dosya gönderilebiliyor. Direkt video yükleyemiyorsunuz ama flash dosyaları görüntülebiliyor. Ayrıca çok sayıda program için temalar (windows, linux, vs.), eklentiler (photoshop, illustrator, vs.) yüklenebiliyor. Amacınız sadece portfolyonuzu yayınlamak değilse buraya mutlaka üye olmalısınız.

Behance

Portfolyo adresiniz: http://www.behance.net/isminiz
Sosyal öğeler: Yorum, mesajlaşma, gruplar, iş arama.
Notlar: Diğer sitelerden en önemli farkı davetiye ile üye almaları. Hemen belirteyim ki davetiye için süründümüyorlar. Üye olma (signup) sayfasında sol tarafatki formu kullanarak hemen bir davetiye isteyebiliyorsunuz. Onlar da hemen gönderiyorlar zaten. Portfolyo sahipleri için en büyük – profesyonel sitelerden birisi burası. Zaten işlere baktığınızda da göreceksiniz bunu. Son olarak burada tanıttığınız projelerin içine video ekleyebiliyorsunuz.

Coroflot

Portfolyo adresiniz: http://www.coroflot.com/public/individual_details.asp?individual_id=kullanici_numaraniz
Sosyal öğeler: Yorum, gruplar, iş arama
Notlar: Size verdikleri adres biraz can sıkıcı olsa da güzel bir site olduğunu söyleyebilirim. Sanırım Türkiye’de protfolyolar için bolca kullanılıyor. Portfolyo görüntülemek dışında Twitter tarzı ‘updates’ bölümü var.

Carbonmade

Portfolyo adresiniz: http://isminiz.carbonmade.com
Sosyal öğeler: Yok
Notlar: En önemli özelliği size verdikleri portfolyo sayfasının son derece sade olması. Sayfalarınızda reklam ya da an alt köşedeki carbonmade logosu dışında sizin portfolyonuz harici birşey gösterilmiyor. Flash ekleneilibiyor. Video eklemek isterseniz ücretli üyeliğe geçmeniz gerekiyor. 35 resimlik 5 proje oluşturma ücretsiz daha fazlası için yine aylık 12$ ücreti olan paralı üyeliğe geçmeniz gerekiyor.

Designrelated

Portfolyo adresiniz: http://www.designrelated.com/portfolio/isminiz
Sosyal öğeler: Yorum, arkadaş olma, blog, iş arama

Gfxartist

Portfolyo adresiniz: http://isminiz.gfxartist.com/
Sosyal öğeler: Yorum, forum, blog.
Notlar: Deviantart gibi bir komünite sitesi gibi duruyor. yorumlar, forumlar bloglar ve envai çeşit şey mevcut. Arkadaş olma ve ilintili şeyler ise yok. Her ay bazı üyeler ‘elite’ olarak seçiyorlar. Bu şekilde çalışmalarınız daha farklı yerlerde daha büyük boyularda listeleniyor ve bu da sizin ön plana çıkmanızı kolaylaştırıyor.

Dripbook

Portfolyo adresiniz: http://www.dripbook.com/isminiz
Sosyal öğeler: Yorum, gruplar.
Notlar: Baştan söyleyeyim dripbook ücretli bir site. Protfolyo sayfalarınız reklamsız ama carbonmade gibi sade de değil. Diğer portfolyo siteleirnde en önemli farkı size portfolyonuzu başka yerler aktarabilme seçeneği sunmaları. Şu anda IPhone, Facebook, Twitter ya da kendi web sitenize aktarım yapabiliyorsunuz.

Shownd

Portfolyo adresiniz: http://shownd.com/isminiz
Sosyal öğeler: İş arama
Notlar: Carbonmade’i hatırlatan sade ve reklamsız bir portfolyo sayfası var ve tamamen ücretsiz, iş arama seçeneği de cabası.

Shadowness

Portfolyo adresiniz: http://shadowness.com/isminiz
Sosyal öğeler: Yorum, forum
Notlar: Twitter’a benzeyen bir sistemi var. Bu biraz kafa karıştırabilir, farklı sitelerde resimlerimizi nereye yükleyeceğiz diyen kızgın insanlar gördüm. Hemen söyleyeyim: yeni bir post (yazı) eklerken metin yazma kutusunun hemen altındaki ‘add image’e tıklıyorsunuz ve resminizi ekliyorsunuz.

Finalcrit

Portfolyo adresiniz: http://www.finalcrit.com/kategori/isminiz
Sosyal öğeler: İş arama
Notlar: Burada da sade, reklamsız bir portfolyo sayfanız var. Sağ alt köşeye logonuzu koyabiliyorsunuz. Diğerlerinden farklı olarak portfolyo sayfası tamamen flash ile yapılmış.

Konular: Tasarım
Etiketler: , ,
devamı >

Java’da resim formatı değiştirmek, resim boyutlarını öğrenmek gibi temel işlemler kolayca yapılabilir. Yine de bu işlemleri bir genel amaçlı bir “resim işleme sınıfı” toplamak isteyebilirsiniz. Bu sayfada bulacağınız ImageUtil sınıfı böyle bir sınıf için iyi bir başlangıç olabilir. Şu anda sadece resim genişliği, yüksekliği, dosya boyutunu bulabiliyor, jpg, gif, png, bmp formatları arasında çevrim yapabiliyor. İlerleyen zamanlarda resim boyutu değiştirme, üstüne yazı yazma ve resme watermark ekleme gibi işlemleri de ekleyeceğim. ImageUtil‘i direkt olarak kullanmasanız bile kodlarını inceleyerek bu işlemlerin nasıl yapıldığını rahatlıkla öğrenebilirsiniz. Sonuçta bütün bu işlemler için Java ile gelen javax.imageio.ImageIO sınıfını kullanılmakta.

ImageUtil metotları resim dosyasını ‘dosya adı’ olarak değil de File sınıfı olarak almakta. Elinizde sadece dosya adı varsa File nesnesini aşağıdaki gibi oluşturabilirsiniz.

File dosya=new File("c:/dizinadi/resim.jpg");

Metotları burada tek tek açıklamayacağım, bütün açıklamalar JavaDoc formatında kodun içerisinde bulunmakta. Aşağıdaki örneğe bakarak da sınıfın nasıl kullanıldığını görebilirsiniz.

Örnekler:

Not: Bu örnek ImageUtil sınıfının main metodu içerisinde aynen bulunmakta.

	try{
		//test
		String filePath="d:/_dev/temp/"; //!!!bunu ve dosya adini degistirmeyi unutmayin!!!
		File f = new File(filePath+"test.png");
		System.out.println("test.png: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f));
 
		f=ImageUtil.convertTo(f, new File(filePath+"/test.gif"), ImageUtil.GIF);
		System.out.println("test.gif: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f));
 
		f=ImageUtil.convertTo(f, new File(filePath+"/test.bmp"), ImageUtil.BMP);
		System.out.println("test.bmp: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f));
 
		f=ImageUtil.convertToJpg(f, new File(filePath+"/test.jpg"), 0.9f);
		System.out.println("test.jpg: "+ImageUtil.findWidth(f)+"x"+ImageUtil.findHeight(f));
 
	}
	catch(Exception e){
		e.printStackTrace();
	}

(daha fazla…)

Konular: Programlama
Etiketler: ,
devamı >

Email adresi kontrolü için pek çok fonksiyon yazılmıştır. Bunları internette kolayca bulabilirsiniz. Fakat bu fonksiyonlar ne kadar doğru çalışıyor? ‘Comparing E-mail Address Validating Regular Expressions’ isimli yazıda vakti bol saygıdeğer bir arkadaşımız ‘Regular Expression’ ile yapılan 13 adet e-posta doğrulamasını sistemli bir şekilde test etmiş, hangisinin nerede doğru, nerede yanlış çalıştığını güzel bir şekilde listelemiş. Bu testlere göre mükemmel doğrulukta çalışan bir metot bulamamış ama Kohana project‘ten Geert De Deckere tarafından geliştirilen aşağıda göreceğiniz ‘regular expression’ı en başarılı olarak seçmiş. Bu regex’te eksik olan 2 nokta bulmuş. Bu iki noktasizin için problem çıkarmayacaktır. Detayları yukarıda verdiğim adreste bulabilirsiniz. Aşağıda bu regex’in fonksiyon haline getirilmiş halini bulabilirsiniz.

/**
* Eposta adresinin gecerli olup olmadigini kontrol eder.
* @param $eposta
* @return bool eposta gecerli ise 'true', degilse 'false' dondurur.
*/
function epostaDogrumu($eposta){
	return (bool) preg_match('/^[-_a-z0-9\'+*$^&%=~!?{}]++(?:\.[-_a-z0-9\'+*$^&%=~!?{}]+)*+@(?:(?![-.])[-a-z0-9.]+(?<![-.])\.[a-z]{2,6}|\d{1,3}(?:\.\d{1,3}){3})(?::\d++)?$/iD', $eposta);
}

For english: Date & Time Difference in PHP

İki tarih arasındaki farkı hesaplamak için PHP’de date_diff diye bir fonksiyon bulunmakta ama ne yazık ki bu fonksiyon PHP’nin sadece 5.3 ve sonraki versiyonlarında çalışıyor. Dolayısıyla pek çok kişi için tarih-saat farkı hesaplayan bir fonksiyona ihtiyaç var. Bu sayfada bu işi yapan bir fonksiyon bulacaksınız. Aradığınız sadece Türkçe tarih & saat göstermek ise şu yazıya bakınız: PHP ile Türkçe Tarih Gösterimi-Çevrimi

Kullanım

Fonksiyon 3 adet değişken alıyor. Bunlardan sadece birincisi zorunlu.
dateDiff($d1[, $d2=null [, $format="*"]);

İlk iki parametre olarak farkı alınacak tarih ve/veya saatleri giriyorsunuz. Tarih formatı olarak Unix zaman damgası veya ‘strtotime‘ fonksiyonunun kabul ettiği herhangi bir değer kullanılabilir. Dolayısıyla tarih girmek için ‘time()‘ fonksiyonun ya da acayip bir format kullanmıyorsanız MySQL verilerini doğrudan kullanabilirsiniz. ‘strtotime‘ fonksiyonunu kabul ettiği değerler ile ilgili php.net strtotime sayfasına bakabilirsiniz. Girilen zamanların hangisinin büyük olduğu önemli değil. Yani tarihFarki(’12-03-2009′, ‘01-01-2010′) ve tarihFarki(’01-01-2010′, ‘12-03-2009′) size aynı sonuçları getirecektir. Son parametre olan $format sonucun hangi şekilde döndürüleceğini belirler. $format olarak “saniye”, “dakika”, “saat”, “gun”, “hafta”, “ay”, “yil” veya “*” değerlerinden birisini girebilirsiniz. “*” dışındaki seçeneklerde fonksiyon size belirtilen formatta bir sayı döndürecekir. Yani tarihFarki(’2010-01-02′, ‘2010-01-01′, ‘gun’) yazarsanız alacağınız sonuç ‘1′, tarihFarki(’2010-01-02′, ‘2010-01-01′, ‘dakika’) yazarsanız ‘86400′ (bir gündeki dakika sayısı) olur. Eğer $format olarak “*” girerseniz ya da bu alanı hiç kullanmazsanız fonksiyon yukarıda geçen tüm değerleri içeren bir dizi döndürür.

Örnekler

echo "Şu an:".date("r",time())."<br>";
echo "1: ".tarihFarki("20090401040302", time(), "ay")." ay<br>";
echo "2: ".tarihFarki(time(), "2009-07-23 04:00:00", "saat")." saat<br>";
echo "3: ".tarihFarki("-3 day", "2009-07-23 04:00:00", "gun")." gun<br>";
echo "4: ".tarihFarki("2008-06-23", "2009-07-23", "yil")." yıl<br>";
$t=tarihFarki("2008-06-23", "2009-07-23");
echo "5: ";
print_r($t);
echo "<br>";

Kod

/**
 * Iki tarih arasindaki farki bulur.<br>
 * <strong>kullanim:</strong> dateDiff($d1[, $d2=null [, $format="*"]);<br>
 * <strong>ornek:</strong><br>
 * echo "şu an:".date("r",time())."<br>";
 * echo "1: ".tarihFarki("20090401040302", time(), "ay")." ay<br>";
 * echo "2: ".tarihFarki(time(), "2009-07-23 04:00:00", "saat")." saat<br>";
 * echo "3: ".tarihFarki("-3 day", "2009-07-23 04:00:00", "gun")." gun<br>";
 * echo "4: ".tarihFarki("2008-06-23", "2009-07-23", "yil")." yıl<br>";
 * $t=tarihFarki("2008-06-23", "2009-07-23");
 * echo "5: "; print_r($t);
 *
 * @param mixed $d1     ilk tarih. unix zaman damgasi ya da strtome 
 *                      fonsksiyonunun kabul ettigi herhangi bir deger olabilir. 
 *                      ornek: '2009-05-23', '2009-05-23 12:10:04', '-2 day',
 *                      '23-05-2009 12:23', '20090523121004'
 * @param mixed $d2     ikinci tarih. ilkiyle ayni ozellikleri tasir. eger 
 *                      girilmez ya da bos bir deger olarak girilirse o anki 
 *                      tarih olarak alinir. bu iki tarih arasinda 
 *                      hangisinin buyuk hangisinin kucuk oldugu onemli degildir.
 *                      ikisi de ayni sonuc verir.
 * @param str $format   "saniye", "dakika", "saat", "gun", "hafta", "ay", 
 *                      "gun", "*".
 *                      eger girilmez ya da "*" olarak girilirse yukaridaki 
 *                      butun degerleri iceren bir dizi dondurur. belirtilen 
 *                      diger degerlerden birisi girilirse bu tipte bir sayi 
 *                      dondurur.
 * @return mixed        sayi ya da dizi tipinde tarihler arasindaki farki 
 *                      dondurur. dizinin icinde bulunan  degiskenler 
 *                      sunlardir: "saniye", "dakika", "saat", "gun", "hafta", 
 *                      "ay", "gun" olacaktir.
 */
function tarihFarki($d1, $d2=null, $format="*"){
    if($d2==null){
        $d2=$d1;
        $d1=time();
    }
 
    if(!is_int($d1)) $d1=strtotime($d1);
    if(!is_int($d2)) $d2=strtotime($d2);
    $d=abs($d1-$d2);
 
    $format=strtolower($format);
    if(empty($format)) $format="*";
 
    $result = array();
 
    if($format=="*" || $format=="gun")    $result["gun"]   = floor($d/(60*60*24));
    if($format=="*" || $format=="ay")     $result["ay"] = floor($d/(60*60*24*30));
    if($format=="*" || $format=="yil")    $result["yil"]  = floor($d/(60*60*24*365));
    if($format=="*" || $format=="hafta")  $result["hafta"]  = floor($d/(60*60*24*7));
    if($format=="*" || $format=="saat")   $result["saat"]  = floor($d/(60*60));
    if($format=="*" || $format=="dakika") $result["dakika"]= floor($d/60);
 
    if($format!="*") return $result[$format];
    else return $result;
}

Asağıdaki fonksiyon ile bir dizindeki dosyaları silebilirsiniz. Fonksiyon ihtiyacınıza göre farklı şekillerde çalışabilir. Bir dizini alt dizinleriyle birlikte silebilirsiniz, dosya silerken ‘regular expression’ kullanıp dosya adına göre silme işlemi yapabilirsiniz, dizinin sadece içeriğini silebilirsiniz. Aşağıda gerekli bilgileri ve kullanım örneklerini PHPDoc şeklinde türkçe olarak yazdım.

(Click for english: Remove a Directory and Its Content with PHP)

/**
 * bir dizin/klasör icindeki dosyalari siler.
 * kullanim sekli:
 * dizinSil(string $dizin [, bool $dizininKendisiniSil=true 
 *                      [, bool $altDizinleriSil=true 
 *                      [, string $regEx='/.* /']]]); 
 * 
 * kullanim ornekleri:
 * dizinSil('/home/gudubeth/resimler');
 *      //dizin icindeki dosyalari, alt dizinleri ve dizinin kendisi siler
 * dizinSil('/home/gudubeth/resimler', false);
 *      //sadece dizinin icerigini siler. alt dizinler silinir
 * dizinSil('/home/gudubeth/resimler', false, false);
 *      //sadece dizinin icerigini siler. alt dizinler silinMEZ
 * dizinSil('/home/gudubeth/resimler', false, true, '/.*\.jpg/');
 *      //dizin ve altdizinlerdeki jpg uzantili dosyalari siler.
 *
 * @param str $dizin
 *                      dizinin yeri. ornek: /home/guest/temp
 *                      veya c:/appserv/www/tmp
 * @param bool $dizininKendisiniSil
 *                      eger 'true' ise dizinin kendisini siler.
 *                      degil ise sadece dizin icerigi silinir.
 *                      varsayilan deger: 'true'
 * @param bool $altDizinleriSil
 *                      'true' ise yinelemeli (rekursif) calisip
 *                      alt dizinleri de siler.
 *                      varsayilan deger: 'true'
 * @param str $regEx
 *                      sadece $regEx ile secilen dosyalari siler.
 *                      regEx fonksiyonu olarak preg_match kullanilir.
 *                      varsayilan deger: '/.* /' (yani tum dosyalari sil).
 *                      ornek degerler:
 *                          mp3 uzantili dosyalari sil: '/.*\.mp3/'
 *                          adi a ile baslayan dosyalari sil: '/a.* /'
 *                          adinda 'tmp' gecen dosylari sil: '/.*tmp.* /'
 *
 * @return  bool        eger denenen her dosya silindiyse veya silinecek bir
 *                      dosya bulunamadiysa 'true' degerini dondurur.
 *                      Dosya silme islemlerinden herhnagi birisi hatali ise
 *                      'false' dondurur.
 * */
function dizinSil($dizin, $dizininKendisiniSil=true, $altDizinleriSil=true, $regEx="/.*/") {
    if(!$dh = @opendir($dizin)) return false;
    $sonuc=true;
    while (($dosya=readdir($dh))!==false) {
        if($dosya!='.' && $dosya!='..'){
            if(is_dir( $dizin.'/'.$dosya) && $altDizinleriSil)
                $sonuc = dizinSil($dizin.'/'.$dosya, true, true, $regEx) && $sonuc;
            else if(preg_match($regEx, $dosya))
                $sonuc = @unlink($dizin.'/'.$dosya) && $sonuc;
        }
    }
    closedir($dh);
    if($dizininKendisiniSil) $sonuc = @rmdir($dizin) && $sonuc;
    return $sonuc;
}

Kolaylıkların dili PHP ile tarih formatlamak gerçekten kolay bir iş ama sadece ingilizce siteler için. İngilizce bir sitede tarih göstermek için tek ihtiyacınız ‘date‘ fonksiyonu. İlk parametre olarak gireceğiniz belirli karakterlerle tarihi istediğiniz gibi gösterebilirsiniz. Mesela ‘January 12, 2009‘ yazdırmak için ‘echo date(”F j, Y”)‘ yazmanız yeterli olacaktır.

Türkçe Tarih & Saat Fonksiyonu

Tarih ve saat gösterimini en basit şekilde halledebilmeniz için aşağıdaki göreceğiniz fonksiyonu kullanabilirsiniz. Fonksiyonun çalışma prensibi çok basit: date fonksiyonunu çağırıp aldığı çıktıdaki ingilizce kelimeleri türkçeye çeviriyor. Fonksiyonun dışında kalan diziler de bu çevrimler için zaten. Doğrudan date fonksiyonu kullanıldığı için aldığı parametreler temelde date ile aynı. Sadece işleri biraz daha kolaylaştırmak için bu parametrelerin yeteneklerini arttırdım. Şöyle ki: tarih formatının belirlendiği ilk parametrede ay, gün, yıl gibi türkçe kelimeler; gösterilecek tarihin belirlendiği ikinci parametrede ise tek bir tane yerine çok daha çeşitli formatlarda tarihler kullabiliyorsunuz. Basitçe örneklersek, date(”d F Y”) fonksiyonunu tarih(”d F Y”) şeklinde yazabileceğiniz gibi tarih(”gun ay yil”) şeklinde de yazabilirsiniz (çıktısı ‘17 Mayıs 2009′ gibi birşey olacaktır).

Tanımlama:

tarih($format, [$zaman]);
$zaman ile belirtilen zamanı ilk parametrede belirtilen formatta biçimlendirir. $zaman parametresi girilmemişse çalışma zamanındaki zaman kullanılır.

Parametreler:

$format

Biçilendirilecek tarihin formatı. String içerisine yazılan format bilgilerinden oluşur (”d-F-Y” gibi). date fonksiyonunda kullanılan seçeneklerin hepsi bu değişken için de geçerlidir. php.net:date fonksiyonu adresinde detaylı seçenekleri görebilirsiniz. Bu sayfada belirtilen seçeneklerin yanı sıra aşağıda belirtilen türkçe değerler de kullanılabilir.

Biçim Açıklama Örnek sonuç
gun Ay günlerinin sıfır dolgulu iki haneli gösterimi 01′den 31′e
kisagun Ay günlerinin sıfır dolgusuz gösterimi 1′den 31′e
hgun Hafta günlerinin tam metinsel gösterimi Pazar’dan Cumartesi’ye
hgunkisa Ay günlerinin iki harfli metinsel gösterimi Pzt’den Paz’a
ay Ayın tam metinsel gösterimi, Ocak ya da Mart gibi Ocak’tan Aralık’a
kisaay Ayın üç karakterli, metinsel kısa gösterimi Oca’dan Ara’ya kadar
aysayi Ayın sıfır dolgulu sayısal gösterimi 01′den 12′ye
kisaaysayi Ayın sıfır dolgusuz sayısal gösterimi 1′den 12′ye kadar
yil Yılın 4 haneli sayısal, tam gösterimi 1999 ya da 2003 gibi
kisayil Yılın iki haneli gösterimi 99 ya da 03 gibi
saat Saatin, 24-saatlik sıfır dolgulu gösterimi 00′dan 23′e
kisasaat Saatin, 12-saatlik sıfır dolgulu gösterimi 01′den 12′ye
dakika Sıfır dolgulu dakika gösterimi 00 ile 59 arasında
saniye Sıfır dolgulu saniye gösterimi 00 ile 59 arasında
Örnek format Örnek sonuç
“ay, yil” Ocak, 2010
“kisagun ay, hgun” 7 Ocak, Pazartesi
“gun-aysayi-kisayil saat:dakika:saniye” 07-01-10 12:10:54

$zaman:

Biçimlendirilecek zamanı belirtir. Eğer girilmemişse o anki zaman kullanılır. $zaman değeri strtotime fonksiyonun kabul ettiği tüm değerler olabilir. MySQL veritabanından aldığınız değerleri doğrudan kullanabilirsiniz. Aşağıda bu parametrenin alabileceği bazı değerler örneklenmiştir:
“31-12-2009 13:23:10″
“2009-12-31 13:23:10″
“31-12-2009″
“3 gun once”
“-3 gun”
“+5 gun”
“2 yil sonra”

Kullanım Örnekleri

echo tarih("gun/ay/yil saat:dakika:saniye")."; ";
// çıktısı: 30/Aralık/2009 01:06:58;
echo tarih("gun-ay-yil, hgun saat:dakika", "3 gun once")."; ";
// çıktısı: 27-Aralık-2009, Pazar 01:06;
echo tarih("kisagun-kisaaysayi-kisayil, hgun saat:dakika", "+2 ay")."; ";
// çıktısı: 2-3-10, Salı 01:08;
echo tarih("yil.ay.gun saat:dakika:saniye", "2009-12-20 12:10:23")."; ";
// çıktısı: 2009.Aralık.20 12:10:23;
echo tarih("gun ay yil saat:dakika", "20081118100630");
// çıktısı: 18 Kasım 2008 10:06

Kod

$aylarIng=array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$aylarKisaIng=array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
$gunlerIng=array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
$gunlerKisaIng=array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
$aylar=array("Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık");
$aylarKisa=array("Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara");
$gunler=array("Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi", "Pazar");
$gunlerKisa=array("Pt", "Sa", "Ça", "Pe", "Cu", "Ct", "Pa");
 
/**
 * tarihi turkceye cevirir. tarih temelde date fonksiyonu ile olusturulur.
 * $zaman ise strtotime ile timestamp'e cevrilir. $format'in kullanımi
 * date fonksiyonunda oldugu gibidir. ayni sekilde  $zaman'in alacagi degerler
 * strtotime fonksiyonuna uygun secilebilir.
 *
 * @global array    $aylarIng, $aylar, $gunlerIng, $gunler, $aylarKisaIng,
 *                      $aylarKisa, $gunlerKisaIng, $gunlerKisa
 * @param str       $format
 * @param str/int   $zaman
 * @return str
 */
function tarih($format, $zaman=null){
    if(!$zaman) $zaman=time();
    else{
        $zaman=str_ireplace(array("once","ay", "gun", "yil","dakika","saniye","hafta"),
                           array("ago","month","day","year","minute","second","week"), $zaman);
        $zaman=strtotime($zaman);
    }
    $format=str_ireplace(
        array("kisaaysayi","kisaay","aysayi","kisagun","hgunkisa","hgun","gun","kisayil","yil","kisasaat","saat","dakika","saniye", "ay"),
        array("n",         "M",     "m",     "j",      "D",       "l",   "d",  "y",      "Y",  "h",       "H",   "i",     "s",      "F"),
        $format);
    $tarihStr=date($format, $zaman);
    if(strpos($format, "F")!==false){
        global $aylarIng, $aylar;
        $tarihStr=str_replace($aylarIng, $aylar, $tarihStr);
    }
    if(strpos($format, "l")!==false){
        global $gunlerIng, $gunler;
        $tarihStr=str_replace($gunlerIng, $gunler, $tarihStr);
    }
    if(strpos($format, "M")!==false){
        global $aylarKisaIng, $aylarKisa;
        $tarihStr=str_replace($aylarKisaIng, $aylarKisa, $tarihStr);
    }
    if(strpos($format, "D")!==false){
        global $gunlerKisaIng, $gunlerKisa;
        $tarihStr=str_replace($gunlerKisaIng, $gunlerKisa, $tarihStr);
    }
    return $tarihStr;
}

Kaynaklar:
‘date’ fonksiyonu

SetLocale ile Türkçe Tarih&Saat

Aslında strftime fonksiyonunu kullanarak da türkçe tarih gösterebiliyorsunuz. Fakat bunun için sunucunun bölgesel ayarlarının türkçe olacak şekilde değiştirilmiş olması gerekiyor. Bu ayar yapılamamış olsa bile eğer sunucunuz buna izin veriyorsa PHP kodunuzun başına bir yerlere
setlocale(LC_TIME, ‘tr_TR’);
satırını ekleyerek bölgesel ayarları türkçeye uygun hale getirebilirsiniz. Test için şu php kodunu suncunuzda çalıştırınız:

setlocale(LC_TIME, 'tr_TR');
echo strftime('%A, %d. %B %Y');

Eğer ‘Salı, 05. Ocak 2010′ gibi bir sonuç alıyorsanız bu yöntemi kullanabilirsiniz.

Kaynaklar:
’strftime’ fonksiyonu
’setlocale’ fonksiyonu

Linux uzmanı olmak bir yana, linux komut satırını doğru düzgün kullanmayı bile beceremem. Fakat arada bir sunuculara SSH ile bağlanıp türlü işler yapmam gerekebiliyor. Bu iş çok sık olmadığı için genelde kullandığım komutları unutuyorum. Bu yüzden görece sık kullandığım komutları bir yerlere not ediyorum. Aşağıdaki listenin büyük kısmını bu notlardan çıkardım. Birçoğu gerçekten basit ama yine de birilerinin işine yaracığını umuyorum. En azından benim işime yarayacak.

1. Metin içeren dosyanın içeriği nasıl okunur?
‘cat’ ya da ‘more’ komutları ile dosya içeriğini görebilirsiniz. Kullanımları gayet basit: komut + dosya adı.
> cat benioku.txt
> more benideoku.txt
bu iki komuttan ‘cat’ dosyanın içeriğini gösterip işini bitirirken ‘more’ dosya gösterim işini sayfa sayfa  yapar. Sayfalama modundayken sonraki sayfaya geçmek için <boşluk> tuşu, sonraki satıra geçmek için <giriş/enter> tuşunu kullanabilirsiniz. çıkış için de <q>’ya basınız.

2. Dosya arama nasıl yapılır?
dosya bulmanın en kolay ve hızlı yolu ‘locate‘ komutu.
> locate benibul
locate‘in yanına bir ‘i’ parametresi eklerseniz aramanız küçük-büyük harf ayrımı olmadan yapılır.
Yalnız ‘locate‘ komutunun düzgün çalışması için dosya listesinin önceden yedeklemiş olması gerekiyor. Yedekleme işlemi haftada bir kere otomatik olarak yapılır. Bu sebeple bulduğunuz sonuçlar pek güncel olmayabilir.

Diğer yöntem ise güncel arama yaptığınız find komutu. Tonlarca parametresi var ama bizim durumumuzda basitçe şöyle kulanılıyor:
> find / -name ‘benibul’
> find / -iname ‘benibul’
name parametresi dosya isminde arama yaptığımızı belirtmek, iname ise bu aramayı küçük-büyük harf ayrımı yapmadan yapmak istediğimizi göstermek için kullanılıyor. dosya isimlerinde joker karakter olarak ‘*’ işaretini kullanabilirsiniz. Yani uzantısı mp3 olan tüm dosyaları bulmak için find / iname ‘*.mp3′ yazmalısınız. komuttaki ‘/’ işareti hangi dizinde arama yaptığımızı belirtmek için kullanılıyor. eğer bulunduğunuz dizinde arama yapacaksanız kullanmanız gerekmiyor. Bütün dosyaları arayacaksanız buradaki gibi ‘/’ yazmalısınız.

3. Dosya içeriklerinde nasıl arama yapılır?
> find / -iname ‘*php’ | xargs grep ‘mysql’ -sl
Yukarıdaki komut tüm php uzantılı dosyalar içerisinde mysql geçen satırları arar, bulduklarını dosya ve satır şeklinde listeler. Yukarıdaki komutun sonucu şöyle birşey olabilir:
/home/gudubeth/public_html/index.php:     while($rs = mysql_fetch_assoc($q)){
/home/gudubeth/public_html/index.php:     else return mysql_errno();
/home/gudubeth/public_html/include.php:      if ($conn = mysql_connect($dhost, $duser, $dpass)){

4. Programlar arka planda (background) nasıl çalıştırılır?
Bazı uzun sürecek işleri arka planda çalıştırmak isteyebilirsiniz, böylece programın çalışması devam ederken siz diğer işlerinize devam edebilirsiniz. Bunu başarmak için tek yapmanız gereken komutun sonuna ‘&’ işareti koymak ya da program çalışırken <ctrl>+<z> tuşlarına basmak. Arka planda çalışan programları listelemek için ‘jobs’ komutunu kullanabilirsiniz. ‘jobs‘ yazıldıktan sonra gelen listedeki programlar ‘fg %n‘ komutu ile öne getirilebilir. Buradaki ‘n’ ‘jobs’ listesinde gösterilen programa ait numara oluyor. Şöyle örnekleyelim:
> gdbt@server [/home/]# man locate
(karşınıza locate komutu ile ilgili yardım sayfası gelecek. Bu ekrandayken <ctrl>+<z> tuşlarına basınız. Aşağıdaki gibi bir satır çıkacak.)
> [1]+  Stopped                 man locate
(arka plandaki programları listeleyelim)
> gdbt@server [/home/]# jobs
[1]+  Stopped                 man locate
(şimdi bu programı tekrar ön plana getirelim. ‘fg’ komutu ile birlikte kullanılacak sayı için yukarıdaki ‘jobs‘ listesinde programın adının bulunduğu satırın en başına bakıyoruz.)
> gdbt@server [/home/]# fg %1
(karşımıza tekrar man sayfası gelecek. ‘q’ ile bu sayfadan çıkabilirsiniz.)

5. Bir dizinin altındaki dosya sayısı nasıl bulunur?
> ls -laR | wc -l
Yukarıdaki komutu ilgilendiğiniz dizinin altında çalıştırın. Bu arkadaş alt dizinlerdeki dosyaları da sayar.

6. Disk kapasitesi ve disklerde kalan boş alan nasıl öğrenilir?
Bu en kolayı:
> df

7. Kısayol nasıl yaratılır?
> ln -s /link/verilecek/dosya/ya/da/dizin
‘ln’ komutunu kısayolun yaratılacağı dizinde çalıştırmalısınız. Örneğin /var/www dizini altında /home/naci/resimler dizinine bir kısayol yaratmak istiyorsunuz:
> cd /var/www
> ln -s /home/naci/resimler
Yukarıdaki komutlar ile /var/www dizini altında ‘resimler’ isimli bir kısayol oluşturdu.
> ls /var/www/resimler
komutunu yazdığınızda karşınıza /home/naci/resimler dizini altındaki dosyalar gelecek.

8. Daha önce girilen komutlar nasıl görülebilir?

Yukarı ok ile önceden girilen komutları görebildiğinizi bilyorsunuzdur. ‘history‘ komutu ile bunların tam bir listesini alabilirsiniz.
> history

9. Log’lar canlı olarak nasıl görüntülenir?
Sık güncellenen log’ları akan yazı şeklinde anında görüntülemek için ‘tail‘ komutunu kullanabilirsiniz. Bu komutu bir dosyanın son satırlarını görmek için de kullanabilirsiniz.
> tail -f -n100 /var/log/messages
Yukarıdaki komutta -f parametresi dosyaya son yapılan eklemelerin anında görüntülenmesini sağlar (akan yazı şeklinde). -f kullanmazsanız komut çalıştırıldığı andaki dosya gösterilir sadece. -n’den sonra gelen 100 sayısı dosyanın sondan başlayarak kaç satırının gösterileceğini belirtir. Bu örnekte dosyanın son 100 satırı görüntülenmiş. Son parametre de tahmin edileceği üzere görüntülenecek dosyamızın adı.

10. Bir dizin nasıl sıkıştırılır?
Dizin sıkıştırmak için:
> tar -c /dizinin/bulundugu/yer/dizinadi/ | bzip2 > dizinadi.tar.bz2
Sıkıştırılmış dosyayı aşmak için:
> bzip2 -dc dizinadi.tar.bz2 | tar -x
bzip2 yerine gzip de kullanabilirsiniz.

Kaynaklar:
Unix Job Control
Linux Commands: A Practical Reference

Konular: Genel
Etiketler:
devamı >

Web sitesi hazırlarken sayfalarınızın tarayıcı önbelleğine alınmasını (yani cache’lenmesini) engellemenin iki temel yolu var. Birincisi HTML içerisinde meta etiketleri yazmak, ikincisi sunucu tarafında sayfanın başlığına (header) gerekli satırları eklemek. Aşağıda bu iki yöntemi bulacaksınız.

1. HTML ile sayfanızın önbelleğe alınmasını engelleme

<meta http-equiv=”Pragma” content=”No-Cache” />
<meta http-equiv=”cache-control” content=”no-cache, no store” />
<meta name=”Expires” content=”Mon, 26 Jul 1997 05:00:00 GMT” />

Yukarıdaki kodu sayfanızda <head></head> etiketleri arasında yerleştirmelisiniz. Bu yöntemin dezavantajı XML ya da RSS gibi HTML olmayan sayfalarda kullanılamayacak olmasıdır.

2. Sunucu tarafında engelleme

Ön belleğe alma işlemini sunucu tarafında engellemek için, göndereceğimiz sayfa ile birlikte bazı başlıkları (header) göndermemiz gerekiyor. PHP, ASP.NET ve JAVA/JSP için bu başlıkların nasıl yazılacağını aşağıda bulabilirsiniz. Birinci yöntemden farklı olarak bu başlıkları resimlerde dahil olmak üzere her türlü dosyayı gönderirken kullanabilirsiniz.

PHP

 header("Expires: Mon, 01 Jul 1990 05:00:00 GMT");
 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
 header("Cache-Control: no-store, no-cache, must-revalidate");
 header("Cache-Control: post-check=0, pre-check=0", false);
 header("Pragma: no-cache");

ASP.NET

Response.ClearHeaders();
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.0

Yukarıdaki ASP.NET kodunu Stackoverflow’da şu sayfada buldum: Making Sure a Web Page is not Cached Across All Browsers. Denemiş değilim ama muhtemelen doğru çalışıyordur.

Java

response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", -1); //proxy seviyesinde engelleme
Konular: Programlama
Etiketler: , , ,
devamı >

MiniAjax Kütüphanesi

18 Aralık 2009

MiniAjax 1.4kb’lık boyutuyla gerçekten mini bir javascript kütüphanesi. MiniAjax, AJAX için gerekli tüm temel fonksiyonları barındırır. Böylece basit bir AJAX yüklemesi için Prototype gibi iri kıyım kütüphanelerle uğraşmazsınız. Üstelik aşağıda da göreceğiniz gibi kullanımı da çok basit. Projenin Google Code sayfasına buradan ulaşabilirsiniz: http://code.google.com/p/miniajax/. Aşağıda türkçe çevirisini yaptığım dökümantasyonu da yine bu sayfada bulacaksınız. Dzone’daki bu sayfada da kodla ilgili ingilizce yazışmalara ve farklı kişilerin yazdığı ek fonksiyonlar bulunmakta.

Kütüphanenin Kaynak Kodu:

 function $(e){if(typeof e=='string')e=document.getElementById(e);return e};
 function collect(a,f){var n=[];for(var i=0;i&lt;a.length;i++){var v=f(a[i]);if(v!=null)n.push(v)}return n};
 
 ajax={};
 ajax.x=function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest()}}};
 ajax.serialize=function(f){var g=function(n){return f.getElementsByTagName(n)};var nv=function(e){if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};var i=collect(g('input'),function(i){if((i.type!='radio'&amp;&amp;i.type!='checkbox')||i.checked)return nv(i)});var s=collect(g('select'),nv);var t=collect(g('textarea'),nv);return i.concat(s).concat(t).join('&amp;');};
 ajax.send=function(u,f,m,a){var x=ajax.x();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseText)};if(m=='POST')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a)};
 ajax.get=function(url,func){ajax.send(url,func,'GET')};
 ajax.gets=function(url){var x=ajax.x();x.open('GET',url,false);x.send(null);return x.responseText};
 ajax.post=function(url,func,args){ajax.send(url,func,'POST',args)};
 ajax.update=function(url,elm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.get(url,f)};
 ajax.submit=function(url,elm,frm){var e=$(elm);var f=function(r){e.innerHTML=r};ajax.post(url,f,ajax.serialize(frm))};

Mini Dökümantasyon:

ajax.x
İletişim için kullanılan XMLHttpRequest Nesnesi (veya Microsoft karşılığı)

ajax.serialize(f)
f:Dökümü alınmak istenen (serialize) form nesnesi.
Bu fonksiyon belirtilen HTML <FORM> içinde bulunan tüm alanların isim=fani&soyad=madida&yas=32 şekline çevirilip karşı sayfalara gönderilebilir hale getirilmesini sağlar. ajax.submit fonksiyonu tarafından formu göndermek için kullanılır.

ajax.get(url, func)
url: verilerin gönderileceği adres. Adreste soru işareti (?) ve sonrası parametreler kullanabilir. (ör: save.php veya save.php?s=1)
func: verilerin gönderildiği sayfadan cevap geldikten sonra çağırılacak fonksiyon (callback).
GET metodu ile belirtilen url’ye parametreleri gönderir ve sonucu aldıktan sonra ‘func’ ile belirtilen fonksiyonu çağırır. Asenkron çalışır.

ajax.gets(url)
url: verilerin gönderileceği adres. Adreste soru işareti (?) ve sonrası parametreler kullanabilir. (ör: save.php veya save.php?s=1)
GET metodu ile belirtilen url’ye parametreleri gönderir, cevabı bekler ve sonucu geri döndürür. Asenkron değildir. Dolayısıyla karşıdaki sayfadan cevap gelene kadar işlemleri bekletir. Yani gerekmedikçe kullanmayın.

ajax.post(url, func, args)
url: verilerin gönderileceği adres.
func: verilerin gönderildiği sayfadan cevap geldikten sonra çağırılacak fonksiyon (callback).
args: POST metodu ile gönderilecek parametreler.  param1=deger1&param2=deger2 formatında kullanılmalıdır.
POST metodu ile belirtilen url’ye parametreleri gönderir ve sonucu aldıktan sonra ‘func’ ile belirtilen fonksiyonu çağırır. Asenkron çalışır.

ajax.update(url, elm)
url: verilerin gönderileceği adres. Adreste soru işareti (?) ve sonrası parametreler kullanabilir. (ör: save.php veya save.php?s=1)
elm: güncellenecek html elemanı (id ya da nesnenin kendisi verilmelidir).
GET metodu ile belirtilen adrese istekte bulunur. karşıdan gelen cevabı olduğu gibi belirtilen elemanın içerisine yazar.

ajax.submit(url, elm, frm)
url: verilerin gönderileceği adres.
elm: güncellenecek HTML elemanı (id ya da nesnenin kendisi verilmelidir).
frm: gönderilecek form nesnesi
Çoğunlukla <FORM> etiketinin onsubmit olayında çalıştırılacak fonksiyon. Formu sunucuya gönderir ve gelen cevabı belirtilen elemana yazar.

Konular: Programlama
Etiketler: ,
devamı >

Etkileşimli ve çok dilli bir siteyle uğraştıysanız kullanıcı girişlerindeki aksanlı karakterleri, aksansız hale getirme ihtiyacı duymuş olabilirsiniz. Aksanlı karakterlerden kasıt ingiliz alfabesinde olmayan ğ, ş, ä gibi karakterler, aksansızlardan kasıt da bunların g, s, a gibi ingiliz alfabesinde bulunan aksansız biçimleri… Dün Wordpress’in kodlarına bakarken tam da bu işi yapan ‘remove_accents’  isimli bir fonksiyon buldum. UTF8 harici değişimler yapılan kısmını aşağıda bulabilirsiniz. Orjinal hali için: Wordpress’te wp-inlcludes/formatting.php içindeki remove_accents isimli fonksiyona bakabilirsiniz. Kod elinizde yoksa da formatting.php dosyasını online olarak görmek için buraya tıklayın.

Örnek kullanım:

echo remove_accents("ğüşıöç ĞÜŞİÖÇ äëïã ÄËÏÃ");
//çıktısı 'gusioc GUSIOC aeia AEIA' şeklinde olacaktır.

(daha fazla…)