15 Kasım 2013 Cuma

jquery.min.map nedir (What is jquery.min.map)

Bir süredir sitelerimizin hata loglarına düştüğünü görebileceğimiz jquery.min.map dosyası nedir? Jquery'nin eğer küçültülmüş verisyonunu kullanan bir sitemiz varsa, Chrome un geliştirici araçlarını açtığımız anda aşağıdaki görüntüye benzer bir görüntü ile karşılaşabiliriz. jquery.min.map-not-found   Bu durumda Geliştirici araçları daha detaylı hata kontrolü yapabilmek için bu dosyaya ihtiyaç duyuyor. Ancak bu dosyayı sadece Chrome request olarak server'a iletiyor. Yani bu dosyayı yüklemeniz şart değildir. Zaten dosyanın uzantısından da belli olacağı üzere, bir map (eşleme) dosyasıdır. Jqueryde bulunan değişkenleri ve hataları eşleyerek daha detaylı kontrol imkanı sunar. Tabi geliştiriciler için. Bu dosya Gerekli midir? Standart kullanıcılar için bu dosya gerekli değildir. Ancak sistemde hata logu görmek istemiyorsanız, Jquery.js dosyanızın yanına bu dosyayı ekleyebilirsiniz. Veya Webserverı ayarlarınıza (muhtemelen .htaccess dosyanıza) bir kural ekleyerek bu istekleri varsa bir bulunamadı sayfanız varsa oraya yönlendirebilrisiniz. Devamı için : jquery.min.map nedir (What is jquery.min.map)

22 Ekim 2013 Salı

SMS Spam Karalistesi (Blacklist)

Günümüzde telefon numaraları artık doğrudan ticari amaçlarla spama maruz kalıyor. Bir şeyler satmak isteyen, hizmet vermek isteyen, kredi vermek isteyen bankalar, vb..vb.. Bununla ilgili bir web service projesini https://github.com/ideasoft/antispam linkinde açtım ve kısa süre içerisinde kodlamayı düşünüyorum. Yine de listemi şimdiden oluşturmaya başlamak için paylaşmak istiyorum.  Bunlar tamamen spam içeriklidir. Bilgilendirme değildir. Bilgilendirmeleri buraya dahil etmiyorum. Ayrıca bana yapılan spam amaçlı aramaları da paylaşmaya çalışacağım. SMS SPAM KARA LİSTEM (gönderici ismi baz alınmıştır, bazılarının numarası gözükmemektedir) 0538 798 50 62 (para puanlarınız bilmem kaç TL ye ulaşmıştır, arayınca kredi kartı numarası istiyor direkt.) IS BANKASI PERFECTLOVE TTNETLIYIM HEPSIBURADA BASKENTGRUP (Cinsel içerikli satış) 0539 233 81 58 (elektronik ürünler satış) 118 70 (dava - icra takibi) CETMENMOB 0539 234 39 66 AVANTAJ (kredi kartı Konbara puanları bilmemkaç TL ye ulaşmıştır) 118 18 0212 211 80 88 (sigarayı bıraktıran elektronik sigara) 0534 439 78 54 (kredi kartı Konbara puanları bilmemkaç TL ye ulaşmıştır) 0542 550 51 82 (Just English Dil okulu) 0541 935 51 13 (kredi kartı Konbara puanları bilmemkaç TL ye ulaşmıştır) 0531 958 08 70 (kredi kartı Konbara puanları bilmemkaç TL ye ulaşmıştır) 0531 029 44 67 (kredi kartı Konbara puanları bilmemkaç TL ye ulaşmıştır) 0507 149 17 89 (Just English dil okulu) Makariya 0534 679 53 61 (kredi kartı Konbara puanları bilmemkaç TL ye ulaşmıştır) 0539 638 12 22 (Just English Dil okulu) DERIMOD 0539 847 42 49 Digiturk 0212 590 88 10 (satış) 0539 213 14 07 (derinet) TiViBU BASSAGLIK (sigarayı bıraktıran cihaz satışı) NTMSATIS (sigarayı bıraktıran cihaz satışı) REMFUAR (hediyelik eşya fuarı) +850 673 01 75 (4 büyük takım formasından birini kazandınız) AVANTAJAVEA 043 836 00 20 (Digiturk) 118 20 0536 470 04 60 (Fatih pimapen) PARO ENGLISHTIME LCAESARS CKELES (mobilya) Devamı için : SMS Spam Karalistesi (Blacklist)

8 Ekim 2013 Salı

Google HP ile HP Chromebook 11 i uretti

Google HP ile HP Chromebook 11 i urettiğini duyurdu. Güzel özelliklerini ve detaylarını buradan öğrenebilirsiniz. Devamı için : Google HP ile HP Chromebook 11 i uretti

26 Eylül 2013 Perşembe

Cok Onemli - Google Talk konusmalari baska kisilere gidiyor!

Sabahleyin gmailimi açtığımda inanılmaz bir tablo ile karşılaştım. Şriketimizdeki kişilerin kendi aralarındaki konuşmalar benim gmailime hangout konuşması olarak düşmüş. Bir arkadaşımıza hintli tanımadığı birinin konuşmaları da gelmiş. Bug report için bkz : http://ibnlive.in.com/news/gtalk-bug-alert-google-talk-delivering-messages-to-unintended-contacts/424653-11.html kredi kartı no, kullanıcı adı, şifre, gizli bilgilerinizi gogole talk üzerinden yazmayınız. SAKIN!   eğer versiyon 1.0.0.105 kullanıyorsanız da login bilgileriniz de gidebiliyormuş. Aman diyim. https://plus.google.com/102190493246946072611/posts/YJVMtdFvrQk Devamı için : Cok Onemli - Google Talk konusmalari baska kisilere gidiyor!

3 Eylül 2013 Salı

partition not found grub rescue hatası ve çözümü

İçerisinde Ubuntu ve Windows 7 işletim sistemleri dual boot olarak yüklü bilgisayarda, açılış sırasında aldığımız grub rescue hatasını aşağıdaki şekilde çözdük; Boot ayarlarından USB'ye öncelik verdik ve içerisinde Ubuntu bulunan usb ile bilgisayarı başlattık. Install etmeden çalıştırdık. Ardından terminali açtık. Aşağıdaki komutları çalıştırdıktan sonra bilgisayarı restart ettik.
   sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update   sudo apt-get install -y boot-repair && boot-repair  
Bu şekilde sorunu halletmiş olduk. Devamı için : partition not found grub rescue hatası ve çözümü

19 Ağustos 2013 Pazartesi

Azerbaycan E-ticaret pazarindaki 1.7 kat artis

Azerbaycan İstatistik biriminin açıkladığı verilere göre Ocak - Temmuz 2013 arasındaki verilere dayanarak Azerbaydan'da geçen yılın aynı bölümüne oranla 1.7 kat artış olduğu görülmekte. Yazının devamı için http://en.trend.az/capital/it/2178452.html Devamı için : Azerbaycan E-ticaret pazarindaki 1.7 kat artis

17 Ağustos 2013 Cumartesi

Git ile birden fazla RSA key tanımlamak

Merhaba, Github.com veya bitbucket.org üzerinde birden fazla projeniz olabilir ve tek bilgisayarda hepsine RSA key tanımlayarak çalışmak istiyor olabilirsininiz. Burada yapmamız gereken işlem hangi projenin hangi RSA key ile haberleşeceğini belirlemektir. Eğer bunu belirlemezsek sonradan eklediğimiz projelerde ilk eklenen projenin RSA keyi ile güvenli bağlantı kurmaya çalışır ve hata alırsınız. Eğer 2. bir proje için RSA key tanımlamak istiyorsanız zaten daha önceden RSA key tanımlamayı öğrenmişsinizdir diye düşündüm. Yine de bilmeyenler bu linkteki adımları izleyerek kolayca RSA key oluşturabilirler. İlk olarak RSA key dosyalarımızın bulunduğu dizine gidelim :
  cd ~/.ssh
Şimdi bahsettiğim hangi projenin hangi RSA dosyasını kullanacağı bilgilerini tanımayacağımız ayar dosyamızı oluşturalım :
  touch config
Şimdi bu dosyamızın içine şu ayarları ekleyelim :
  # ilk projemizin ayarları.  Host github.com  HostName github.com  User git  IdentityFile ~/.ssh/id_rsa    # ikinci projemiz  Host github-second-account  HostName github.com  User git  IdentityFile ~/.ssh/ikinci_projemizin_rsa_key_dosya_adi
Burada hangi dosyamızın hangi projeye ait olduğunu belirttik. IdentityFile alanında ilgili RSA dosyasının tam pathini veriyoruz. Host alanında bir maske oluşturuyoruz. Örneğin 2. projemizde github.com adresinde. Bu sebeple aynı yerlere bağlanıyorlar. O yüzden bağlanırken hangi RSA dosyasını alacağını bulmak için bir maske oluşturuyoruz ve farklı bir ad veriyoruz. Maske şu şekilde kullanılıyor. 2. projeyi çekerken :
  git clone git@github-second-account:user/project.git
Şeklinde kullanıyoruz ve proje çekildikten sonra RSA key aktif olmuş bir şekilde kullanmaya başlıyoruz. Afiyet olsun :)       Devamı için : Git ile birden fazla RSA key tanımlamak

2 Ağustos 2013 Cuma

linux toplu bul ve degistir (find and replace) islemi

Linuxta belirli dosyalar üzerinde find ve replace işlemi yapmak istiyorsak 2 komut kombinasyonu kullanarak bu işinizi halledebilirsiniz.
grep -l 'aratilacak_dizgi' * | xargs sed -e 's/aratilacak_dizgi/yeni_dizgi/' -i
sadece grep -l 'aratilacak_dizgi' ile içinde 'aratilacak_dizgi' olan dosyaları listeleyebilrsiniz. sed komutu ile de replace işlemini yapmış oluyoruz. Umarım işinize yarar. Devamı için : linux toplu bul ve degistir (find and replace) islemi

1 Ağustos 2013 Perşembe

Windows komut satirindan mail gonderimi

Linux üzerinde bu yazıda anlattığımız komut satırı üzerinden mail gönderimi windows için şu şekilde yapılabilmekte. Öncelikle bu linkten mailsend adlı programı indirin. https://code.google.com/p/mailsend/downloads/detail?name=mailsend1.17b12.exe Daha sonra bu exe dosyasını belirli bir yere kaydedin. Ben d:/ dizinime kaydettim. Komut satırı üzerinden örneğin aşağıdaki komut ile mail gönderiminizi yapabilirsiniz. (Ben burada örnek olması açısından SMTP üzerinden gönderim yaptım.)  
d:/mailsend.exe -to email@domain.com.tr -from emre@domain.com.tr -starttls -port 587 -auth -smtp mail.domain.com.tr -sub "mail basligi" -M "mail icerigi" -user emre@domain.com.tr -pass ******
Bu işlem windows 7 de denenmmiştir. Ayrıca, projenin anasayfasında konuyla ilgili detaylara ve detaylı kullanımlarına ulaşabilirsiniz. https://code.google.com/p/mailsend/ Bunu Neden kullanayım? Ben bu işlemi bir git reposu üzerinde master merge işlemi sornasında tüm arkadaşlarıma mail atmamı, otomatikleştirmek için kullandım. Sizin tabi ki farklı ihtiyaçlarınız da olabilir. Umarım işinize yarar. Devamı için : Windows komut satirindan mail gonderimi

26 Temmuz 2013 Cuma

ubuntu'ya ruby kurulumu

Ruby kurulumunda 2 seçenek var. Biri RVM olmadan, biri RVM ile. ( RVM = Ruby Version Manager )

RVM olmadan kurulum

İlk olarak terminali açıyoruz. Ardından ruby 1.9.3 versiyonunu kuruyoruz.
  sudo apt-get update  sudo apt-get install ruby1.9.3  
Kurduktan sonra
  ruby --version  
diyerek kurulduğunu görmüş oluruz.

RVM ile kurulum

Eğer sisteminizde curl kurulu değilse ilk olarak curl kurunuz.
  sudo apt-get install curl  
Ardından şu işlemleri yapınız.
  curl -L get.rvm.io | bash -s stable  source /usr/local/rvm/scripts/rvm  
RVM için gerekli paketlerin kurulu olup olmadığına bakıyoruz, eğer gerekli paketler varsa kuruyoruz. Şu şekilde ;
  rvm requirements  
Son bir işlemimiz kalıyor;
  rvm install 1.9.3  
Devamı için : ubuntu'ya ruby kurulumu

google, facebook, amazon, apple ve yahoo hangi verileri saklıyor?

Geçen günlerde denk geldiğim bir infografiği paylaşmak istiyorum. 5 büyük şirket; Google, Facebook, Amazon, Apple ve Yahoo hangi verileri saklıyor, kişisel bilgileri nasıl kullanıyor.   (Resmin büyük halini görmek, yakınlaştırmak için üzerine tıklayınız) [caption id="attachment_2709" align="aligncenter" width="575"]Kişisel bilgileriniz nasıl kullanılıyor Kişisel bilgileriniz nasıl kullanılıyor[/caption] Devamı için : google, facebook, amazon, apple ve yahoo hangi verileri saklıyor?

24 Temmuz 2013 Çarşamba

phpmyadmin session süresini arttırmak

Local ortamda çalışırken phpmyadmin'de sürekli timeout yiyerek tekrar giriş yapmak zorunda kalmak canımı sıktı. Bende bu süreyi nasıl uzatacağımı buldum. Öncelikle phpmyadmin'in config.inc.php dosyasını bulunuz. (linux'ta /etc/phpmyadmin/ klasörünün altında olması gerekiyor.) Buraya $cfg['LoginCookieValidity'] parametresini ekleyeceğiz. Ben 1 yıl timeout süresi verdim şu şekilde; $cfg['LoginCookieValidity'] = 31536000; /*365 * 24 * 60 * 60*/ NOT : BUNU SADECE LOCAL ORTAMDA ÇALIŞIRKEN UYGULAYINIZ!!! Devamı için : phpmyadmin session süresini arttırmak

hangouts uygulamasını gtalk'a geri alma

Google, gtalk uygulamasını güncelleyerek hangouts adını verdi, ve bence ortaya saçma sapan birşey çıktı. Ne kimlerin online olduğunu görebiliyorsunuz, ne de yazılanlar düzgün şekilde iletiliyor/ulaşıyor. Aşırı şekilde cpu kullanıyor olması ve yazma sırasında donması da ekstrası. Bunu google play'de yazılan yorumlardan da çok net görebilirsiniz. https://play.google.com/store/apps/details?id=com.google.android.talk Android cihazlarınızda, Ayarlar -> Uygulamalar kısmına gelip, Hangouts uygulamasını seçeerek, güncellemeleri kaldırabilirsiniz. Yani fabrika ayarına geri alabilirsiniz. Uygulamaya güncelleme geldiğinde ise bunu kurmayınız, eğer otomatik olarak güncelleme yapmasına izin verdiyseniz bunu da iptal ediniz. Gtalk yıllarca beta haldeydi, keşke beta kalsaydı. Devamı için : hangouts uygulamasını gtalk'a geri alma

19 Temmuz 2013 Cuma

Chrome proxy komut dosyasi indiriliyor durumunun giderilmesi

Chrome unuzu ilk açtığınızda bir siteye hemen girmeye çalışırsanız, sol altta "Proxy komut dosyası indiriliyor" diye bir ibare görürsünüz, ve siteniz yaklaşık 10 saniye açılmayabilir. Bu durumu giderebilmenin bir yolu evet var. Chrome ayarlar kısmından proxy araları kısmına tıkladığımızda bir menü gelir önümüze. (İnternet explorer'ın ayarlarıdır aslında bu). Bu menüden LAN settings(Yerel ağ ayarları)  kısmından Otomatik algılama işaretini kaldırırsanız, ışık hızında siteleriniz açılacaktır. Bu aynı zamanda yandex browser için de geçerlidir. (O ada aynı motoru kullanıyor zaten)   chrome-proxy Devamı için : Chrome proxy komut dosyasi indiriliyor durumunun giderilmesi

17 Temmuz 2013 Çarşamba

SVN loglarini cikti almak

SVN de dosyalarımızı commit ederken yazdığımız mesajları topluca bir kerede dışarı alabilmemiz mümkün. Bunun için komut satırında svn komutunu çalışır hale getirip (windows için system path'e eklemelisiniz) daha sonra şu komutu yazmalısınız : svn log Örnek Kullanım : 
svn log http://{svnhost}/{repo_name}/ -r 8536:HEAD > D:/logfile.txt
{svnhost} yerine svn reponuzun sunucu IP si veya domainini yazmalısınız. repo_name sizin proje adiniz olmalı. (projeye sağ tıklayıp, subversion kısmından zaten bu ikisini görebilrisiniz) Yukarıdaki komut ile, 8536 dan son versiyona kadarki tüm logları D:/logfile.txt içine almasını söylemiş olduk.  Bunları kendi ihtiyaçlarınıza göre değiştirebilirsiniz. Umarım işinize yarar. Not : Eğer şifreniz SVN de kayıtlı değilse, size bu komuttan sonra kullanıcı adı ve şifre soracaktır. Devamı için : SVN loglarini cikti almak

4 Temmuz 2013 Perşembe

Bigcommerce sifre hatirlatma (password reminder) - sifrem geri geldi

Bigcommerce.com'dan deneme amaçlı bir site açmaya karar vermiştim.  Daha önceden de denemiştim ancak tabi ki şifremi hatırlamıyordum. Web dünyasıın  en sinsi tuşu olan password reminder tuşuna bastım ve mail adresimi yazdım. Aşağıdaki talihsiz mail tarafıma ulaştı. Bu kadar büyük bir firmanın bu işi bu şekilde yapması sizce ne kadar doğru?   Yani yazdığınız şifreye erişebilir şekilde saklıyorlar. Bu da hiç güvenli değil. Şuradaki  yazımda da benzer bir durumu belirtmiştim. Yazık bize...   [caption id="attachment_2674" align="aligncenter" width="600"]bigcommerce password reminder mail bigcommerce password reminder mail[/caption] Devamı için : Bigcommerce sifre hatirlatma (password reminder) - sifrem geri geldi

21 Haziran 2013 Cuma

Linuxta belirli bir boyuttan buyuk dosyalari listelemek - find komutu

Linuxta belirli bir boyuttan büyük dosyaları listelemek istiyorsanız, yapacağımız şöyle : aşağıdaki kod bulunulan klasördeki 10 Megabayt üstü dosyaları listeler
 find . -size +10M -ls
aşağıdaki kod bulunulan klasördeki 10 kilobayt üstü dosyaları listeler
 find . -size +10k -ls
Devamı için : Linuxta belirli bir boyuttan buyuk dosyalari listelemek - find komutu

PHP 5.5 yayinlandi - yeni ozellikler

20 haziran 2013 itibariyle php.net php 5.5'in yayınlandığını duyurdu. Yeni özellikler neler?
  • Üreticiler (generators) ve eşyordamlar (coroutines) eklendi. (yield komutu eklendi). basitçe bir metodda array'e toplayıp array'i return ettiğiniz işi yapmaktadır. Dönen değerler foreach ile gezilerek işlem yapılabilir. bkz : http://tr1.php.net/manual/tr/language.generators.syntax.php
  • Exceptionlar için finally özelliği eklendi. Artık Try - catch te bir exception oluşması durumunda dahi son bir iş yapabileceğimiz bloğumuz olacak. Özellikle kod okunabilirliğini çok artırmasını tahmin ediyoruz.
  • md5, sha1 gibi eskimiş şifre üretme algoritmaları yerine password_hash fonksiyonu eklendi. bkz : http://tr1.php.net/manual/tr/function.password-hash.php
  • Array dereferencing (arrayde değişkene atama zorunluluğunun kalkması)
  • empty() fonksiyonu artık parametre olarak metod da alabilmeye başladı. !!!
  • foreach içinde list kullanabileceğiz. Mesela : foreach ($arr as list($var1, $var2)){...
  • SinifAdi::class yazarak sinifin tam yol adını alabilmemiz artık mümkün! get_class() benzeri bir işlev bu da. Ancak tam adını veriyor.
  • Resim işleme kütüphanesi olan GD ye eklemeler yapıldı.
  • Windows XP ve 2003 desteği kaldırıldı. bu demektir ki, php 5.5 windows xp'lerde ve 2003'lerde çalışmayacak!
Tüm değişiklikleri http://php.net/ChangeLog-5.php#5.5.0 linkinden okuyabilirsiniz. Devamı için : PHP 5.5 yayinlandi - yeni ozellikler

20 Haziran 2013 Perşembe

nginx virtual host ayarları (nginx vhost) -ubuntu

Nginx'in kurulumuna buradaki yazımızdan ulaşabilirsiniz : ubuntu nginx kurulumu (Ubuntu 12.04) Sanal sunucu yani virtual host ayarlarının nasıl yapılacağına bakalım şimdi. Örnek olarak, web sitelerimi barındırdığım dizin /home/khantunckale/sites Bunun içerisinde test diye bir klasörümüz olsun, içerisinde de index.html olsun.
  cd /home/khantunckale/sites  mkdir test  gedit test/index.html /*düzenleyip içine bişeyler yazalım*/  
Amacımız, buradaki index.html dosyasını browserımız üzerinden http://www.test/ olarak çağırmak. Şimdi nginx ayarlarını yapalım. Önce ayarları yapmak için nginx'in sites-available klasörüne gidiyoruz.
  cd /etc/nginx/sites-available  
Default config dosyasının bir kopyasını oluşturuyoruz.
  cp default test   
Ardından bu dosyayı bir editör ile açıp düzenleyelim. (gedit, nano vs.) Ben kendi ayarlarımı şu şekilde yaptım.
  server {      server_name www.test;      access_log /home/khantunckale/sites/test/access.log;      error_log /home/khantunckale/sites/test/error.log;      root /home/khantunckale/sites/test/public_html;        location / {          index  index.html index.htm index.php;      }        location ~ \.php$ {          include /etc/nginx/fastcgi_params;          fastcgi_pass 127.0.0.1:9000;          fastcgi_index index.php;          fastcgi_param SCRIPT_FILENAME /host/web/emfw/public_html$fastcgi_script_name;      }  }  
server_name : sitemizi çağırdığımız adres. root : sitenin index dosyasının olduğu dizin. access_log ve error_log parametreleri de yukarıda göründüğü üzere loglarla ilgilidir. Bu dosyayı kaydettiğiniz zaman, sitemiz sadece uygun durumda olur (available). Sitemizi aktifleştirmek için, sites-enabled klasörüne bir sembolink link yaratmamız gerekiyor. O yüzden şu komutu çalıştırmalıyız.
  ln -s /etc/nginx/sites-available/test /etc/nginx/sites-enabled/test  
Ardından da service nginx restart diyelim. Devamı için : nginx virtual host ayarları (nginx vhost) -ubuntu

5 Haziran 2013 Çarşamba

Googledan stresi azaltmak icin 3 oneri

Google'ın bloğunda,  terapistleri  Amy Colvin'in yayınladığı bir makalenin altında vermiş olduğu 3 öneriyi paylaşmak istiyorum. Stresi Azaltmanın İp Uçları
  1. Nefesizine odaklanın. Zihninize ve vücudunuza rahatlaması için fırsat verin. Kısa bir süre için bunu deneyin. (1 veya 2 derin nefes alarak) - Nefes alıdığınızda fiziksel olarak göğüs kafesinizin yukarı çıktığına emin olun! Günde 1 dakika belirgin bir değişiklik yaratacaktır.
  2. Sevdiğiniz hoşunuza giden şeyleri düşünün. Olumlu düşünce,  daha olumlu tutumlara ve bakış açısına giden bir yol oluşturacaktır.
  3. Sadece 1 şeye odaklanmaya çalışın. Göreceksiniz ki, arkanıza yaslanıp aynı anda sadece 1 parça iş yaptığınızda, sanki parça - parça dizdiğiniz bir yapboz üzerinde çalışıyormuşsunuz gibi olacaktır. Sonuç olarak da, hepsinin bir araya sistematik olarak geldiğini göreceksiniz.
kaynak : http://googleblog.blogspot.com/2013/06/teaching-awareness-at-google-breathe.html Devamı için : Googledan stresi azaltmak icin 3 oneri

4 Haziran 2013 Salı

Windows Live Mail icin Klavye Kisayollari

Windows Live mail kullanımı için klavye kısayolları şöyledir : Not : Burada Sıkça kullanılanları eklemeye çalıştım. Daha farklı olarak kısayollar da mevcuttur. Yeni Mail : ctrl+N Yeni Etkinlik(Takvim) : ctrl+shift+E Bir maili açmak (seçtikten sonra) : ctrl+o Yazdır : ctrl+P İleti Arama : ctrl+shift+F Seçili Maili Klasöre Taşı : ctrl+shift+V Sil :  ctrl+D Bloklanan Resimleri Göster : F9 Okundu olarak işaretle : ctrl+Q Toplu Konuşmaları okundu olarak işaretle : ctrl+T Tümünü Okundu Olarak İşaretle : ctrl+shift+A HTML formatında görüntüle : Alt+shift+H Önceki Mail : ctrl+< Sonraki Mail : ctrl+> Sonraki Okunmamış Mail : ctrl+U Sonraki Okunmamış Toplu Mail (Conversation) : ctrl+shift+U Bir sonraki okunmamış klasör : ctrl+J Klasör'e git : ctrl+Y Takvim'e git : ctrl+shift+X Kişi Ekle : ctrl+shift+C Feed'lere(haber vb) git : ctrl+shift+K Mail gönder / al : F5 Herşeyi gönder/al : ctrl+F5 Maili yanıtla : ctrl+R Herkese Yanıtla : ctrl+shift+R İlet : ctrl+F İstenmeyen (spam) olarak işaretle : ctrl+alt+J Maile bayrak koy : Alt+a+a Farklı Kaydet : Alt+f+a Ekleri kaydet : Alt+f+v Okunmadı olarak işaretle : Alt+e+n Mail Kuralları : Alt+t+r+m Haber Kuralları : Alt+t+r+n Ek şeklinde ilet : Alt+a+d Devamı için : Windows Live Mail icin Klavye Kisayollari

28 Mayıs 2013 Salı

Test Istanbul Turkiye Yazilim Kalitesi Raporu yayinlandi

www.testistanbul.org adresinden ulaşabileceğimiz gibi, test istanbul 2013 - 2014 yazılım kalitesi raporu ( TURKEY SOFTWARE QUALITY REPORT 2013 - 2014) yazyınlandı. yazılım da test konusu ile ilgili güzel bir infografik içermektedir. http://www.testistanbul.org/TurkeySoftwareQualityReport_2013_2014.pdf  adresinden görebileceğiniz döküman ilginizi çekecektir diye düşünüyorum. Devamı için : Test Istanbul Turkiye Yazilim Kalitesi Raporu yayinlandi

27 Mayıs 2013 Pazartesi

class_exists ve spl_autoload

Eğer spl_autoload ile bir autoloader belirttiyseniz, daha sonra kodunuzun herhangi bir yerinde class_exists() ile o sınıfın olup olmadığını kontrol ediyorsanız, zaten kontrol etme işlemiyle birlikte sınıfı load etmiş oluyorsunuz. Bunu http://www.php.net/manual/en/function.spl-autoload-register.php#95456 linkindeki yazıdan da görebilirsiniz.   Bir örnek kod da vermeye çalışacağım ilerleyen zamanlarda. Devamı için : class_exists ve spl_autoload

25 Mayıs 2013 Cumartesi

TTNET - Yine spamda bir ilk

bir gün facebook'a girmeye çalışırken önünüze : http://bilgi.ttnet.com.tr/ttnetlilereozel/index.aspx?fid=1&host=www.ttnet.com.tr sayfası açılırsa, bilin ki TTNET kullanıyorsunuzdur. TTnet pismanlıktır. Devamı için : TTNET - Yine spamda bir ilk

23 Mayıs 2013 Perşembe

Chrome - Virus Taramasi Basarisiz Oldu Hatasi

Chrome'da herhangi bir dosyayı indirmeyi tamamladıktan sonra bu hatayı ("Virüs Taraması Başarısız Oldu" veya "Failed-Virus scan failed") veriyor ve dosyayı siliyordu. Aslında bu hata sadece Chrome'da ortaya çıkmadı. Aynı zamanda Firefox ve IE'da da herhangi bir dosyayı indiremiyordum. Çözümü ise basit bir Kayıt Defteri elemanını değiştirmekten geçiyor.
  1. Öncelikle Başlat > Çalıştır'ı açarak çıkan pencerede regedit yazarak Kayıt Defteri Düzenleyicisi uygulamasını çalıştırın.
  2. Açılan ekranda aşağıdaki değeri bulun.
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Attachments\ScanWithAntivirus
  3. ScanWithAntivirus değerine çift tıklayarak açın ve değeri 2 veya 3 ise 1 yapın. Burada değer 2 veya 3 ise virüs tarama aktif, 1 ise pasif durumda oluyor.
  4. Sisteminizi yeniden başlatın.
Uzun uğraşlar sonucu bu yöntemi buldum ve benim sorunuma çözüm oldu. Umarım aynı şekilde sizin sorununuza da çözüm olabilir. Devamı için : Chrome - Virus Taramasi Basarisiz Oldu Hatasi

20 Mayıs 2013 Pazartesi

Mysql - birden fazla IP den mysqle baglanmak

Eğer 2 farklı IP'deki sunucunuz, aynı mysql sunucusuna bağlanması gerekiyorsa yapmanız gereken temel olarak bir kaç maddelik işiniz var demektir. Bunları listeleyelim :
  1. Bağlanılan (mysql-server'in olduğu makinenizde) mysql konfigürasyon dosyanızı bulun. (işletim sisteminiz centos ise /etc/my.cnf gibi bir yerde, ubuntu ise, /etc/mysql/my.cnf gibi bir yerdedir). 
  2. my.cnf içerisinde bind-address diye bir parametre varsa, onu 0.0.0.0 şeklinde düzeltin, yoksa
    bind-address = 0.0.0.0
    şeklinde yeni bir satır ekleyin (çünkü varsayılan değeri 127.0.0.1 yani localhost tur)
  3. my.cnf içerisinde skip-networking diye bir parametre varsa onu silin. (veya başına # işareti koyarak yorum haline getirin.)
  4. Mysqlinizi yeniden başlatın. (service mysql restart)
  5. şu anda veritabanınız dışarıdan bağlantılara açık hale geldi. Ancak bu bi güvenlik tehdidini de beraberinde getirir. Doğrudan bir tehlike değil bu ancak, root şifrenizi deneye yanıla(brute-force teknikleri de dahil) bulabilirler, veya yanlış vermiş olduğunuz yetki, user var ise, bunları keşfedebilirler)  Bu yüzden bir firewall kullanmalıyız. Halihazırda iptables vardır diye düşünüyorum. iptables için bir kural ekleyelim ve istemediğimiz ipler dışındaki istekleri drop edelim, böylece sadece istediğimiz IP'ler networkten içeri girebilsin. :
    iptables -A INPUT -p tcp --dport 3306 ! -d xxx.xxx.xxx.xxx -j DROP
  6. bir user ekleyin.
    CREATE USER 'kullanici'@'ip_Adresi' IDENTIFIED BY 'şifre';
  7. Bu kullanıcıya ilgili IP için yetki verin(hangi yetkileri istiyorsanız)
    GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES , CREATE VIEW , EVENT, TRIGGER, SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON `database_adi` . * TO 'kullanici'@'ip_Adresi';
  8. Testlerinizi yapın. Bu testleri hem bağlanmasını istediğiniz makineler için, hem de istemediğiniz makineler için mutlaka yapın. mysql-client yüklü ise şöyle yapabilirsiniz :
    mysql -u kullanici -h ip_Adresi database_adi
mysql bağlantıları için iptables kuralları kaynak: http://www.cyberciti.biz/faq/unix-linux-mysqld-server-bind-to-more-than-one-ip-address/ Devamı için : Mysql - birden fazla IP den mysqle baglanmak

17 Mayıs 2013 Cuma

Amazon S3 - Klasor Mantigi

Amazon S3 (Simple Storage Service) üzerindeki klasör mantığı şu şekildedir : S3, üzerine UTF8 formatlarını destekleyen her türlü dosya ismi verebiliyorsunuz. Bu dosya isimlerine "/" (slaş) karakteri de dahil. Bİr çok kolaylaştırıcı S3 arayüzünde(aws management console da dahil) ise içinde slaş geçen dosya isimlerinde slaştan önceki kısım bir klasör şeklinde gösteriliyor. Örnek vermek gerekirse 1- ben amazons3 üzerine API bir dosya gönderdim. Dosyanın adı da my/test.txt olsun. Bu durumda, Amazon üzerinde aslında bir my klasörü ve içinde de bir test.txt dosyası varmış gibi görebilirsiniz Aws management console üzerinden. Ancak amazonun kendi apisinde yazdığı listObjects metodu ile içerideki dosyaları listelediğimizde, 1 klasör ve bir dosya şeklinde değil sadece bir dosya gözükecektir. 2- Aws Management console üzerinden bir klasör oluşturup içine de bir dosya koyduğumuzda ise, dönen sonuç 2 tanedir. bir tane my/ adlı dosya, bir tane de my/test.txt adlı dosya. İlk örnekte my/test.txt yi sildiğimde my/ diye bir klasör görünümlü dosya da görmezsiniz, İkincide ise my/test.txt yi sildiğinizde my/ diye bir klasör görünümlü dosya hala vardır, ve onu ayrıca silmeniz gerekmektedir. Sonuç : Amazon üzerinde klasör diye bir şey yoktur. Sadece arayüzde anlamayı kolaylaştırmak için içinde / geçen karakterlere göre gruplama yapılmaktadır. O yüzden klasik hard disk üzerinde yapabileceğiniz işlemleri, directory exist kontrollerinizi yapmadan buraya rahatça uygulayabilirsiniz. Çünkü oluşturduğunuz her şey bir dosyadır. Klasör sadece gruplama amaçlıdır, ve web arayüzlerinde görmenizi kolaylaştırır. Devamı için : Amazon S3 - Klasor Mantigi

13 Mayıs 2013 Pazartesi

Amazon S3 - static website hosting - The specified bucket is not valid hatasi

Amazon s3 üzerinde bir bucket (demet) yaratıp, bunu static website hosting ile dışarı yayına vermek istiyorsanız, Bucketi seçip sağ taraftan properties kısmından, static website hosting kısmında ayarlarınızı kayıt etmeniz gerekiyor.   Ancak The specified bucket is not valid. hatası alıyorsanız, burada bucket isminizde geçersiz karakterler olabilir. Örneğin bemim bucket ismimde test_test gibi bir alt çizgi (underscore) vardı. Amazon s3 bu siteyi yayınlayabilmek için bana bir dns kaydı oluşturacağından ve dns kaydında alt çizgi bulunamayacağından ötürü "The specified bucket is not valid." hatası veriyordu. Bucket ismimi değiştirdim, ve artık save işlemini yapabildim. Umarım işinize yarar. Devamı için : Amazon S3 - static website hosting - The specified bucket is not valid hatasi

PHP - Sayfanin iframe icerisinde acilmasini engellemek

Bazı durumlar olur ki, sitenizin, veya bir web sayfanızın iframe içinde açılmasını istemezsiniz. Bu durumda ne yapabiliriz diye bir bakındım ve güncel browser'ların kullandığı bir yöntem gördüm. Örneğimiz şöyle olacak : 1 adet test.html sayfası, 1 adet test.php sayfası. test.html içeriği
test.php in iframe <br />  <iframe src = 'test.php'>
test.php içeriği :
<?php  header("X-FRAME-OPTIONS: DENY");    echo "hello world";    ?>

Görüldüğü gibi, php dosyamızda bir adet header gönderiyoruz, ve burada Frame seçeneklerini DENY yani engellemesini söylüyoruz. Böyle olunca örneğin chrome ve mozilla'da iframe içinde "hello world" yazmıyor, çünkü request'i deny üstteki header'dan dolayı ediyor. Chrome ek olarak konsol'a bir uyarı da basıyor. Ekran görüntüsü de chrome için şu şekilde oluyor. php-deny-iframe

Devamı için : PHP - Sayfanin iframe icerisinde acilmasini engellemek

30 Nisan 2013 Salı

PHP - singleton pattern vs clone

    Class Test{         /**  	 * Örnek Değişken  	 */  	public $sampleVariable = NULL;    	/**  	 * Singelton bir yapı kullanılmaktadır  	 * @var Preferences  	 */  	private static $_instance;         /**  	 * Singelton yapıyı desteklemek için private constructor yarattım içi boş.  	 */  	private function __construct(){    	}    	/**  	 * Singelton yapıyı destekleyen getInstance metodu  	 * @return Test  	 */  	public static function getInstance(){  		if (self::$_instance == null) {  			self::$_instance = new Test();  		}  		return self::$_instance;  	}  }  
Yukarıdaki kod basitçe bir singleton mimariyi gösteriyor. Burada ben
 $test = new Test() 
yaratamıyorum. Çünkü constructor method'un erişilebilirliği "private" olarak belirlenmiş. Yani ancak bu sınıfı
$test = Test::getInstance() 
diyerek kullanabilirim. Peki gelin görün ki, unuttuğumuz bir şey var. Php'de "clone" diye bir obje kopyalama özelliği var. Nedir bu?
  $a = new stdClass();  $k = $a;  
dediğimizde, $a->var = 5 dediğimizde, $k da aynı şekilde değişiyor. yani bu ikisi aynı objeyi işaret ediyor. Ancak
  $a = new stdClass();  $k = clone $a;  
Yazdığımızda ise, artık $k, $a nın en son halinden kopyalanıp yeni bir obje olarak oluşturuluyor. Yani ben ilk örnekte,
$test = Test::getInstance();
yazdıktan sonra bir yerlerde $anotherTest = clone $test; dersem, artık yeni bir obje türetebilmiş oluyorum. Buyrun deneyin :
  $test = Test::getInstance();  $anotherTest = clone $test;    $test->sampleVariable = 5;  $anotherTest->sampleVariable = 10;    var_dump($test);  var_dump($anotherTest);  
Birbirinin aynısı olmayan, aynı objenin farklı 2 instance'ını singleton mimaride de yapabilmiş oldum. Sonuç : Demek ki, PHP de singleton mimarisi güvenilir değildir. Yine de güzel bir design patterni olarak beğeniyorum. Ancak bilinçli kullanmanızı tavsiye ederim. Devamı için : PHP - singleton pattern vs clone

22 Nisan 2013 Pazartesi

phpunit - assert internal type error - CLI HAS STOPPED WORKING

phpunitteki bir test metodumda yanlışlıkla assertInternalType kısmında 2 parametre yerine tek parametre ile işlem yapmıştım.
$this->assertInternalType('string',$oid);
yazacağıma
$this->assertInternalType($oid);
yaazmışım. $oid ise string tipinde rastgele bir veri. Ancak phpunit bu kısımda bazen hata veriyor, bazen vermiyordu. Hata vermediğinde ilerleyen aşamalarda ise, CLI has stopped working diye windowsumda işlem duruyordu. Bu herhalde bir bug. Ancak hem windowsta ara sıra başıma geliyordu, hem de derdimi nasıl anlatacağımı bilmediğimden bug kaydı oluşturmadım. Yazmam gerektiği gibi yazınca ise, artık problemin düzeldiğini gördüm. Buradan sizinle paylaşmak istedim. Devamı için : phpunit - assert internal type error - CLI HAS STOPPED WORKING

6 Nisan 2013 Cumartesi

linux ngrep komutu (ağ trafiği işlemleri)

ngrep komutu, bildiğimiz grep komutunun network versiyonudur. Başlıkta da belirttiğim gibi ağ trafiğini inceleme işlemlerinde kullanılır. Kullanımı sırasında regex işlemlerine izin vermektedir. Yani data paketleri içerisinde arama da yapabiliyoruz. HTTP, SMTP, FTP gibi her türlü ağ trafiğini izlemek ve analiz etmek için kullanılmaktadır. Ayrıca kaynak ve port seçmemize de olanak sağlıyor. Kurulumu şu şekildedir;
  apt-get install ngrep  
Kullanımı için bir kaç örnek vermek gerekirse;
  ngrep -d any port 80  
80. port ile ilgili tüm trafiği ekrana basacaktır. -d parametresi host üzerinde bulunan tüm network interfaceleri üzerindeki trafiği görmek için eklenmiştir, özelleştirmek için -d eth0 diyerek özel bir interface üzerindeki trafiği görebiliriz. Çıktıları gözümüze biraz karmaşık gelebilir. O yüzden, çıktıları satır satır görmek için, -W Byline parametresini de ekleyebiliriz.
  ngrep -d any -W Byline port 80  
Detayları için bu sayfayı ziyaret edebilirsiniz : http://ngrep.sourceforge.net/usage.html Devamı için : linux ngrep komutu (ağ trafiği işlemleri)

linux hardware bilgileri detayları (inxi)

inxi, donanımınız ile ilgili detayları gösteren bir shell scriptdir. Bir shell script olduğu için, bu scripti kullanıcılara ait programların olduğu dizine (usr/local/bin) koyarak, kurulumunu yapmış oluruz. Kullanabilmek için ek olarak gawk paketini de kurmamız gerekmekte. Aşağıdaki komutları uyguladığımızda kurulum tamamlanır;
  apt-get install gawk  cd /usr/local/bin && wget -Nc smxi.org/inxi && chmod +x inxi  
Kullanımı ise şu şekilde; eğer tüm sistem bileşenleri ile ilgili bilgiyi aklmak istiyorsak inxi -F , sadece CPU bilgisini almak istiyorsak inxi -f , network adaptörü ile ilgili bilgiyi almak istiyorsak inxi -n , kullandığımız makinenin bilgilerini almak istiyorsak inxi -M komutları ile görebiliyoruz. Parametre listesinin tamamı burada mevcut; https://code.google.com/p/inxi/wiki/inxi Devamı için : linux hardware bilgileri detayları (inxi)

21 Mart 2013 Perşembe

php strict standards - only variables should be passed by reference error

strict standards - only variables should be passed by reference error hatasını alıyorsanız, referans olarak değişken göndermeniz gereken yere, siz farklı bir şey göndermişsiniz demektir. Ben hatayı şöyle almıştım.
$var = end(explode( "/", $filename ));
end işlemini yaptığım şey explode işleminin sonucu. Ancak explode bir array döndürürken, bu arrayi bir değişkene atamadığım için, arrayin sadece adresini döndürmüş oluyor. Bu da end fonksiyonunun çalışmamasına sebep oluyor. Çalışması için aşağıdaki gibi basit bir düzenleme yapıyoruz :
$tmpArr= explode( "/", $filename);  $var = end($tmpArr);
Bu problem php 5.4.x sürümlerinde karşınıza çıkmıyor ancak php 5.3.x sürümlerinde mevcuttur. Devamı için : php strict standards - only variables should be passed by reference error

17 Mart 2013 Pazar

Linux terminalde temel network komutları

Dosya indirirken, kullandığımız network üzerindeki işlemleri incelerken, istatistiklerine bakarken, network problemlerine göz atarken kullandığımız arayüzü gelişmiş programlar veya internet siteleri var. Tabi bunların her biri için kullanabildiğimiz birer linux komutları da var, genel olarak onlardan bahsetmek istedim.

curl & wget

curl veya wget, internet üzerinden dosya indirmemize yarar. curl kullanıyorsanız -O parametresi ile, wget kullanıyorsanız parametresiz bir şekilde bulunduğunuz dizine dosyayı indirebilirsiniz.
  curl -O website.com/file  wget website.com/file  

ping

ping komutu ECHO_REQUEST paketleri göndererek, bilgisayarınızın yazdığınız ip adresi veya domain ile iletişime geçip geçemediğini size bildirir. Ancak bunu kullanırken bazı sistemlerin ping komutuna yanıt verebilecek şekilde yapılandırılmadığını da göz önünde bulundurmalısınız. Windowstaki ping komutu belirli sayıda paket göndererek size yanıtları gösterir, ancak Linux üzerinde siz sonlandırana kadar paket göndermeye ve size sonuç göstermeye devam eder. Bu yüzden Linuxta ping komutuna parametre olarak -c ve paket adedini yazarak kaç paket ile ping atılacağını yönetebilirsiniz.
  ping -c 5 dubluve.net  

tracepath & traceroute

tracepath komutu ile traceroute komutu birbirine benzer işlemler yapmaktadırlar. (tracepath Ubuntu'da kurulu olarak gelmektedir.) Eğer internet ağınızda bir yavaşlama veya bir problem varsa, bu komut size nerede hata olduğunu göstermektedir.
  tracepath dubluve.net  

mtr

Mtr komutu, gitmek istediğimiz ip adresine / domaine ulaşıncaya kadar geçtiğimiz ağları tanılamaya yarayan komuttur. Detayları için buradaki yazıyı inceleyebilirsiniz. Windowstaki kullanımı için de (tracert) buradaki yazıyı inceleyebilirsiniz.
  mtr dubluve.net  
(Çıkış yapmak için q veya ctrl-c kullanabilirsiniz.)

host

Domain kullanarak ip adresi öğrenebilen komuttur.
  host dubluve.net  

whois

whois komutunu kullanarak websitesinin kimin adına kayıtlı olduğunu, name serverlarını vs. birçok bilgiyi öğrenebiliriz.
  whois dubluve.net  
Ubuntu'da whois kurulu olarak gelmemektedir, sudo apt-get install whois diyerek install edebilirsiniz.

ifplugstatus

ifplugstatus Ubuntu'da kurulu olarak gelmemektedir, sudo apt-get install ifplugd komutu ile install ediniz. ifplugstatus komutu size network interface üzerindeki statusları gösterir.
  ifplugstatus  
Çıktısı şu şekilde olur;
  eth0: unplugged  lo: link beat detected  wlan0: link beat detected  
link beat detected demek, bağlı olduğunu gösterir, unplugged ise olmadığını gösterir.

ifconfig

ifconfig ağ üzerindeki bir çok bilginizi görmeye yarar. IP adresiniz, bağlantı türünüz, kullandığınız network arayüzü, aktif arayüzler vs.
  ifconfig  

dhclient

dhclient komutu bilgisayarınızın ip adresinden yeni bir DHCP server yaratır. DCHP serverın ne olduğu hakkında bilgi edinmek için buradaki yazıyı okuyunuz. dhclient Ubuntu'da root olmanızı istemektedir, eğer ip adersinizin aynı kalmasını istiyorsanız -r parametresi ile kullanınız.
  sudo dhclient -r  sudo dhclient  

netstat

netstat komutu network arayüzünüzle ilgili bir çok bilgiyi sunmaktadır.
  netstat  
-p parametresi ile programların ilişkili olduğu socketleri görüntülersiniz.
  netstat -p  
-s parametresi ile portların detaylı istatistiklerini görüntülersiniz.
  netstat -s  
Devamı için : Linux terminalde temel network komutları

16 Mart 2013 Cumartesi

ubuntu'da statik ip adresi ayarları

Ubuntu'da komut satırından statik ip ve dns adreslerini ayarlama işlemleri şu şekilde olmaktadır; İlk olarak network interface ayarlarımızı düzenliyoruz. Herhangi bir text editörü kullanarak bu işlemi yapabiliriz, örneğin nano ile yapmak için;
  sudo nano /etc/network/interfaces  
Açtığınız dosyanın içerisinde şunları göreceksiniz;
  auto lo eth0  iface lo inet loopback  iface eth0 inet dynamic  
Eğer birden fazla network kartınız varsa, hangi network interface üzerinde ayar yaptığınıza dikkat etmelisiniz. Dosyanın içerisini şu şekilde düzenliyoruz, ardından kaydediyoruz;
  auto lo eth0  iface lo inet loopback  iface eth0 inet static          address xxx.xxx.xxx.xxx(buraya ip adresini yazıyoruz)          netmask xxx.xxx.xxx.xxx          gateway xxx.xxx.xxx.xxx(buraya router ip adresini yazıyoruz)  
Ardından DNS ayarlarımızı değiştiriyoruz. Bunun için /etc/resolv.conf dosyasını düzenliyoruz.
  sudo nano /etc/resolv.conf  
Dosyayı açtıktan sonra içerisini şu şekilde düzenleyip kaydediyoruz;
  nameserver xxx.xxx.xxx.xxx(dns server ip'si)  nameserver xxx.xxx.xxx.xxx(alt dns server ip'si)  
Son olarak network interface için restart yapıyoruz;
  sudo /etc/init.d/networking restart  
Eğer isterseniz ifconfig yazarak yaptığınız ayarları kontrol edebilirsiniz. Kaynak : http://www.howtoforge.com/linux-basics-set-a-static-ip-on-ubuntu Devamı için : ubuntu'da statik ip adresi ayarları

15 Mart 2013 Cuma

TypeHinting nedir? Php Typehinting

Typehinting demek, bir class'a ait metodun aldığı parametrelerin türünün önceden belirlenmesi, force edilmesi demektir. Ancak bu işlemi sadece objelerde ve arraylerde yapabilmekteyiz. Örnek verecek olursak;
  class Dubluve{   public function deneme(array $a){    var_dump($a);   }  }  $obj = new Dubluve();  
deneme metodu için şunları söyleyebiliriz;
  // bu kodlar hata verecektir  $obj->deneme("php");  $obj->deneme(123);  $obj->deneme("1");    // bu kod çalışacaktır  $obj->deneme(array("a", "b", "c"));  
Type hinting işlemini düzgün olarak array ve objelerde kullanabiliyoruz onun da şöyle bir püf noktası var. Metoda gönderdiğimiz parametre için default değer olarak NULL atarsak, gönderdiğimiz parametre de NULL olabilir. Bunu da örnekle açıklamak gerekirse,
  class DubluveRSS{   public function deneme(Dubluve $dubluve) // $dubluve değişkeni sadece Dubluve'nin objesi olabilir   public function deneme(Dubluve $dubluve = NULL) // $dubluve değişkeni Dubluve'nin objesi olabilir veya NULL olabilir  }  
Öte yandan ;
  public function deneme(array $dubluve = array("a", "b", "c"))  
bu fonksiyonu deneme(null); şeklinde çalıştıramayız. Ancak diyorsak ki, null parametre gönderilebilsin ancak null geldiyse default olarak bir şeyler atayabileyim, o zaman da şöyle birşey yapabiliriz
  public function deneme(array $dubluve = null){   if($dubluve === null){     $dubluve = array("a", "b", "c");   }   .   .   .  }  
Typehinting fonksiyonlarda da çalışmaktadır. Yine class metodlarında olduğu gibi sadece obje ve arrayler ile işlem yapılabilmektedir. Devamı için : TypeHinting nedir? Php Typehinting

12 Mart 2013 Salı

php 5.4 array dereferencing

php 5.4 ile gelen yeni özelliklerden biri de, array döndüren metodları kullanırken kolaylık sağlıyor. Aşağıdaki örnekte getData metodu, array döndüren bir metod. Ve metodu çağırır çağırmaz ise, array keyini yazıp hemen dönen sonucu kullanabiliyoruz. Tabi burada tanımsız ise hata almanız kaçınılmaz, bu yüzden yanlış veya olmayan bir key'i çağırmamaya dikkat etmeniz şart. Çok da hata bakımından kontrol edilebilir bir şey değil çünkü bu.
  function getData() {      return ['firstname' => 'Emre', 'lastname' => 'Macit'];  }    echo getData()['firstname'];    
Devamı için : php 5.4 array dereferencing

php 5.4 callable typehint

Php 5.4 te gelen yeni bir özellik de "callable" typehinti. Callable ile , "çağrılabilir" bir parametre geleceğini ifade etmiş oluyorsunuz. ve istediğiniz zaman bunu çağırabiliyorsunuz.
  class Meyve  {      function __construct($name)      {          $this->name = $name;      }        public function selam()      {          return "Selam " . $this->name;      }  }  //fonksiyonumuzu tanımlarken $f yi callable olarak cast ediyoruz. (hint ediyoruz)  function selam(callable $f) {  //ve bu şekilde çağırabiliyoruz.      $f();  }    selam([new Meyve("Armut"), 'selam']);
Devamı için : php 5.4 callable typehint

11 Mart 2013 Pazartesi

Php 5.4 Sinif Metoduna Hizli Erisim

php 5.4 ile birlikte sınıf metodlarına hızlıca erişimin de önü açıldı. böylece 2 satırda yapacağımız işleri artık tek satırda yapabiliyoruz.
  class Araba  {      public $name;      function __construct($name)      {          $this->name = $name;      }        public function selam()      {          return "Selam " . $this->name;      }  }    // eski stil  $araba = new Araba("Mersedes");  echo $araba->selam();    // yeni harika stil  echo (new Araba("Ferrary"))->selam();  
Devamı için : Php 5.4 Sinif Metoduna Hizli Erisim

6 Mart 2013 Çarşamba

windows salt-okunur (read-only) isaretini kaldirmak

windowsta bir dosyaya veya klasöre sağ tıkladığımızda özellikler kısmından eriştiğimiz ve seçili olarak görüdğümüz salt-okunur (read-only) işaretini aşağıdaki kod ile komut satırından da kaldırabiliriz. Ancak bu klasör veya dosya herhangi bir program tarafından kullanılıyorsa, değiştirilemiyor. İlk önce kullanan programları kapatmanız gerekiyor. İşin ilginç yanı hata da vermiyor windows :)  
  attrib -R ornek.txt  
Bu komut ile ornek.txt nin salt okunur işaretini kaldırmış oluyorsunuz. Devamı için : windows salt-okunur (read-only) isaretini kaldirmak

27 Şubat 2013 Çarşamba

Ubuntu Yüklenmiş Paketleri Listelemek

Merhaba, Ubuntu makinanıza kurmuş olduğunuz tüm paketleri listelemek isterseniz aşağıdaki komutu terminal (komut satırı) aracılığıyla çalıştırınız. Burada sadece sizin yüklediğiniz değil işletim sisteminizle beraber yüklü olarak gelen paketleri de göreceksiniz :
dpkg --get-selections
Selamlar. Devamı için : Ubuntu Yüklenmiş Paketleri Listelemek

20 Şubat 2013 Çarşamba

Webrazzi E-Ticaret'2013

Merhaba, Her yıl Webrazzi tarafından düzenlenen E-Ticaret konferansı bu yıl İstanbul Point Hotel Barbaros'da gerçekleşti. Sabah 9:30 da başlayan etkinlik saat 17:00 de sonlandı. Bende katılımcılar arasındaydım. Bu sektörün bir parçası olarak her ne kadar önemli işler yapıyor olsak da çoğu zaman biz yazılımcılar yaptığımız işin ne kadar önemli olduğundan bihaber durumda oluyoruz. Bize çok normal gelen çalışmaların aslında önemli kilometre taşları olduğunu bu gibi etkinliklerde bu ortamın havasını koklayarak anlamak mümkün. Etkinliklere pek çok önemli firma katıldı. Bunlardan bazıları : - IdeaSoft - Hepsiburada.com - Yemeksepeti.com - BKM - Gittigidiyor.com - Turkcell - Limango Önemli firma yöneticilerinin ortak görüşleri e-ticaretin önümüzdeki yıllarda hızla büyüyecek olması. Bu bağlamda her ne kadar detaylı bilgi verilmesede bu pastadan pay kapmak için tüm firmaların yeni projeleri ve pazarlama stratejileri olduğunu söylemek isterim. Tüm firmalar yine kendi sektörleriyle alakalı geçmiş yılların istatistikleri ve tahmini gelecekle ilgili beklentilerini anlattılar. BDiCC1KCAAAo-Qc Etkinlik için firmalara ayrılan sürenin kısıtlı olması yüzeysel bilgi verilmesine yol açtı diyebilirim. Genellemeler üzerinden hızlı bir sunum yapıldı. Ben sunumların sonunda internette bu firmalar hakkında arama yaparak ulaşabileceklerimden daha fazlasını alamadım. Sunum gerçekleştirecek olan firma isimleri ve onları temsilen sahnede olacak isimler her ne kadar heyecan uyandırsada pek doyurucu olmadığını düşünüyorum. Yine sahne alan firma yöneticilerinin kendinden önceki yada sonraki firmalara kılçık attığını ve üstünlük kurma çabalarının olduğunu kendi gözlemlerime dayanarak söyleyebilirim. Biraz gövde gösterisi gibi oldu diyebiliriz. BKM Genel Müdürü Soner Canko'nun diğer sunum yapan firma rakamlarını yalanlaması, Yemeksepeti.com'un Genel Müdürü Nevzat Aydın'ın kendinden emin ve "bizden büyüğü yok çok firma rakip olmaya çalıştı ama çoğunuz ismini bile bilmezsiniz" şeklinde rahat tavırlarıyla çoğu kez Yemeksepeti'ni övmesi, Evim.net Genel Müdürü Ali Özen'in esprili ve samimi cevapları konferansa damgasını vurdu. Genel gözlemlerim firmaların bu kadar büyük şirketler haline gelmesinin 2 ana sebebi var. Birincisi 2000'li yıllarda henüz Türkiye'de internet sektörü çok yeni gelişmeye başlarken Avrupada ki başarılı projelerin ülkemize getirilmesi (Yemeksepeti.com, Mynet.com) sonucu rakipsizleşmek ve ikincisi dev firmaların internet sektöründe ki pazardan pay almak için dev yatırımları. O yüzden kendi çabalarınızla internette bir yerlere gelmek istiyorsanız özgün şeyler üretmeniz gerekiyor diye düşünüyorum. Ne şuan 2000 yılındayız nede arkanızda dev bir yatırım var. O zaman özgün birşeyler üreterek bir yerlere gelmek hala mümkün gibi gözüküyor. Bu yazı tümüyle benim naçizane görüşlerimi barındırıyor. Sürç-i lisan ettiysek affola. Selamlar. Devamı için : Webrazzi E-Ticaret'2013

ubuntu network device not managed hatasi

Virtual Box içinde çalışan ubuntu desktop 12.04 te durduk yere device not managed hatası aldım. bu hatayı düzeltmeden önce static verdiğim ip nin başka bir bilgisayar tarafından aldığını gördüm ancak bir hata var belli. çünkü çakışma vb diye beni uyarmadı.  Anladığım kadarıyla hatayı bu Aynı IP alma durumu tetikledi.   daha sonra buradaki yöntemleri uyguladım ve sorunum çözüldü. Türkçesi :  Terminalden yapıyoruz :
sudo nano /etc/NetworkManager/NetworkManager.conf  
managed=false yazan satırı managed=true diye editliyoruz. Network yöneticisini yeniden başlatıyoruz.
sudo service network-manager restart  
herhangi ihtimale karşı birazdan düzenleyeceğimiz dosyanın yedeğini alalım.
sudo cp /etc/network/interfaces /etc/network_interfaces_backup  
Dosyayı açalım
sudo nano /etc/network/interfaces  
buradaki ayarlarınız static ip için yapılanmış olabilir. Ancak ne var ne yok silip aşağıdaki otomatik kodu koymanız ilk etapta işinizi çözecektir. (ben silmedim, sadece IP'mi değiştirdim.)
auto lo  iface lo inet loopback  
Dosyayı kaydettikten sonra network yöneticisini yeniden başlatalım.
sudo service network-manager restart
  Ve işte düzelmiş olmalı! Devamı için : ubuntu network device not managed hatasi

17 Şubat 2013 Pazar

Zend Studio 10 cikti

Zend Ekibinin bir süredir üzerinde çalışıyor olduğu Zend Studio 10 yayınlandı. Bu linkten download edebileceğiniz Zend Studio 10'un release notlarına buradan bakabilirsiniz.   Mobil ve cloud özellikleri ve kabiliyetleri geliştirilen Zend Studio 10 için  ilk etapta ayrıca Zend Framework 2 ile daha uyumlu olduğunu söyleyebiliriz. Dahasını ilerleyen günlerde paylaşabilmek üzere.. Devamı için : Zend Studio 10 cikti

15 Şubat 2013 Cuma

PHP Namesapace Autoload

Merhaba, PHP 5.3.x ile beraber gelen namespace konusuna bu yazımda değinmiştim. Şimdi namespace autoload konusuna değinerek sizlere bilgilerimi paylaşmak istiyorum. Koskoca bir proje tek bir include ile olur mu demeyin oluyor. Kullanmak istediğimiz namespace'yi use diyerek çağırmak ve ilgili sınıfın otomatik olarak include edilmesi için autoload mekanizması var. Şimdi bu yapıyı kurmak için proje dizinimize composer.json dosyası oluşturarak içine şu jsonu ekleyelim :
  {       "autoload":{        "psr-0":{           "" : "library" // sınıflarımın bulunduğu path (index.php ile aynı seviyede)        }     }  }
Not : composer işletim sisteminizde yüklü olmalıdır (ubuntu için curl -s https://getcomposer.org/installer | php) Şimdi komut satırından proje dizinine gelerek şu komutu çalıştıralım ve ilgili dosyalarımızı oluşturalım :
composer install
Bu komutu çalıştırdıktan sonra vendor isminde bir klasör ve içerisine iligli dosyalar gelmiş olacak.Aynı zamanda composer ile uğraşmak istemiyorsanız internetten çeşitli kaynaklardan bu vendor içindeki dosyaları edinebilir veya kendiniz yazabilirsiniz. Nihayetinde PHP dosyaları ve composer sadece bu işi kolaylaştıran bir yapı. Şimdi kullanımına gelecek olursak index.php dosyamıza vendor klasörü içindeki autoloader.php dosyamızı include etmek dışında hiçbirşey kalmıyor :) Devamı için : PHP Namesapace Autoload

14 Şubat 2013 Perşembe

PHP Namespace

Merhaba, Nedir bu namespace diyerek Google'nin başına geçmiş, araştırmalar yapmış ve tam olarak kafanıza oturmadan çalışmaları sonlandırmış olabilirsiniz. Biraz gerçekçi senaryolar üzerinden giderek sonuca ulaşmaya çalışalım. - library - Form - Data.php (class Data) - Database - Data.php (class Data) Şeklinde iki adet Data.php dosyalarına tanımlanmış Data isimli sınıflarımız var. Buraya kadar sorun yok. Şimdi bunları aynı sayfa üzerinde çalıştırmaya çalışalım.
<?php    require_once('library/Form/Data.php');    require_once('library/Database/Data.php');    $object1 = new Data();    $object2 = new Data();    ?>
İşte burada işler karıştı ve fatalı yediniz. PHP size kızdı. Muhtemelen kullandığınız IDE bile size kızdı. Yazıklar olsun dedi. PHP 5.3.x ile beraber gelen namepsace bu konuda bize çözüm sağlıyor. library/Database/Data.php :
<?php    namespace Database;    class Data{    }    ?>
library/Form/Data.php
<?php    namespace Form;    class Data{    }    ?>
Şimdi namepsace ile doğru kullanımına geçelim
<?php    require_once("library/Database/Data.php");    require_once("library/Form/Data.php");    $object1 = new \Database\Data();    $object2 = new \Form\Data();    ?>
Evet şimdi işlet tıkırında giti ve PHP'de IDE'de kızmadı bize. Çalıştı. Eğer namespace kullanmamış olsaydık 2. Data classımız için Data yerine başka belkide anlamsız bir isim vermek zorunda kalacaktık. Özellikle büyük çaplı projelerde iç içe klasör yapıları ve classlar ile daha anlamsız class isimleri oluşturmak durumunda kalacaktık. Buda kod okunurluğunu ve OOP yapısına uygun olmayan sonuçlar doğurabilirdi. Umarım faydalı olmuştur. Devamı için : PHP Namespace

Twig Kurulumu ve Kullanımı

Merhaba, Profesyonel yazılım projelerinde yazılım tasarımdan ayrı tutularak tasarlanır ve geliştirilir. Özellikle özel şirketlerde yazılım, tasarım ve arayüz için farklı departmanlar bulunmaktadır. Konusunda uzman kişiler çalışmalarını birbirlerine ayak bağı olmadan ilerletir. Ne arayüz geliştiricilerin her iş için yazılımcılara ihtiyacı olur ne de yazılımcıların her iş için tasarımcılara ihtiyacı. Bu bağlamda basit bir yazılım dili gibi HTML değişkenler ile birçok çalışma yapmak mümkün. Önemli template motorlarından Twig kurulumu ve birkaç basit çalışmayı sizlerle paylaşmak istiyorum. Twig 1.12.2 sürümünü indirmek için buraya diğer sürümlere erişmek için buraya tıklayınız. İndirmiş olduğunuz dosyayı çalışmak istediğiniz dizine çıkarmanız gerekiyor. Aslında kurulumdan kastımız buydu :) Sadece çalışır duruma gelmesi için birkaç düzenleme daha yapacağız. Cache ve template dosyalarımızın bulunacağı 2 klasör daha isteyecek bizden. Oluşturmanız gereken klasörleri aşağıda listeliyorum - compilation_cache - templates Templates klasörümüzün içine index.html ekleyelim. Basit bir sayfa olacak
<!DOCTYPE html>  <html>      <head>          <title>My Webpage</title>      </head>      <body>          <h1>My Webpage</h1>          {{ message }}      </body>  </html>
Proje dizinimize index.php oluşturup içine şu kodları ekleyelim :
<?php  require_once 'lib/Twig/Autoloader.php';  Twig_Autoloader::register();    $loader = new Twig_Loader_Filesystem('templates');  $twig = new Twig_Environment($loader, array('message' => "Hello Word!"));  echo $twig->render('index.html');
Twigi oluşturup template dizinimizi belirttik. index.html ile haberleşecek olan verileri array olarak gönderiyoruz. message değişkenimiz var şuan sadece. En son olarak index.html'i render ederek çalıştırmış olduk. Ekrana "Hello Word" yazıldığını görürseniz başardınız demektir :) Devamı için : Twig Kurulumu ve Kullanımı

Ubuntu PHP 5.4'den 5.3'e Geçiş (Downgrade)

Merhaba, Ubuntu ile pek çok şeyin kurulumu oldukça basittir. Bunlardan biride PHP. Tabi sudo apt-get install php5 diyerek en güncel PHP sürümüne erişmiş oluyoruz. Yazıyı yazmış olduğum tarihte ki en güncel versiyon PHP 5.4.6. Tabi ki geliştiriciler olarak en güncel versiyonları takip etmek ve ayak uydurmak durumundayız. Oldukça hızlı gelişen bir platform üzerinde çalışmalar yapmaktayız. Ancak mevcut projeleriniz veya araştırma geliştirme çalışmalarımız için PHP 5.3 sürümüne ihtiyaç duyabiliriz. Bunun için derlenmiş durumda olan PHP 5.3.3 sürümünü makinamıza kuracak olan bir bash script dosyamız mevcut. İndirmek için https://www.box.com/s/utzf230qwdt1i5ifvmiu adresini kullanabilirsiniz. İndirdikten sonra yapmanız gerekenleri aşağıda yazıyorum. Sonrasında PHP 5.3.3 versiyonuna sahip olmuş olacaksınız.
sudo sh php5_4_downgrade_5.3.sh
  Devamı için : Ubuntu PHP 5.4'den 5.3'e Geçiş (Downgrade)

12 Şubat 2013 Salı

3 Genel E-ticaret Hatasi

E-ticaret yapanların genel olarak yaptıkları 3 temel hata süzüldüğünde aşağıdaki maddeler ön plana çıkıyor. Bunlara dikkat ederek ise, kalite standardınızı bir tık yukarı çıkarabilirsiniz. 
  • Trafik yüklenmesinin yanlış hesaplanması.  Çoğu satıcı, satışlarının (ve trafiklerinin) büyük bir oranını tatil zamanlarında yapar. Ancak bir çoğu sitelerinin böyle bir trafiğe ve satış artışına hazır olup olmadığını bilmez. Buna karşın, sitenizi sürekli olarak test gereçleriyle trafiğine göre hazır halde bulundurmasını önerebiliriz onlara.
  • Zayıf  ve Etkisiz Promosyonlar. Genel olarak satıcılar promosyonlarını planlı olarak çıkmaz. Böylece çok satış yapsanız bile, sinirli ve memnun edilmemiş bir müşteri kitlesi edinir. 50 kişilik restorana 500 kişi çağırmak gibi bir şey bu. 450 tane memnun olmayan müşteriniz, bir sonraki tercihini sizden yana kullanmayacaktır.
  • Tamamlama ve teslimat  kısmındaki yavaşlık. Bu tarz gecikmeler, müşterinizi hayal kırıklığına sevk eder. Özellikle tatil, özel günler gibi durumlarda, müşteriler siparişlerinin vaktinde sağlam bir şekilde teslim edilmesini ister. Buradaki çıkabilecek problemleri gidermek ise ayrı bir meziyet istiyor. Çünkü kargo tarafında oluşan bir durumu, müşteri çözmeye çalışırken, senaryo gitgide kötüleşiyor. Şikayet sitelerine konu oluyorsunuz.
Devamı için : 3 Genel E-ticaret Hatasi

CentOS ve Fedora icin Bash Mail komutunun yuklenmesi

CentOS ve Fedora icin Bash Mail komutunun yuklenmesi

Bu komut çok kullanışlı bir komuttur. Biz de genelde cronjoblarınız bir işi yaptıktan sonra outputunu mail olarak bir yere göndermek isteyebiliyoruz.
Normal kullanımı şöyle :
$ cat /bir/dosya | mail adres@domain.com
veya
$ echo "birseyler birseyler" | mail adres@domain.com
Eğer bu mail komutu yüklü değilse şöyle bir hata verecek sisteminiz : $ -bash: mail: command not found  Programı yüklemeniz için ise yapacağınız şey çok basit. Şöyle :
$  yum install mailx
Faydası olur umarım.
Devamı için : CentOS ve Fedora icin Bash Mail komutunun yuklenmesi

6 Şubat 2013 Çarşamba

Owning Side/Inverse Side Terimleri Ne Anlama Geliyor

Bugün Doctrine dokümantasyonunu okurken, kafamı karıştıran bir konu oldu. Dokümantasyonda belirtilen "owning side" ifadesi, yani iki nesne arasındaki "sahip" olan taraf, bildiğimin tam tersi bir anlamda kullanılmıştı. Örneğin bir müşterinin siparişlerinden bahsedersek, "Müşteri" değil, "Sipariş" tablosu sahip taraf olarak belirtilmişti. Bu durumu araştırırken, cevabımı stackoverflow'da buldum. Burada bir cevapta anlatıldığı üzere, OO kodlama yaparken düşündüğümüz sahip taraf, yukarıdaki örnekte tabii ki "Müşteri" oluyor. Yani müşteriye ait siparişler olacağından, müşterinin siparişlere "sahip" taraf olduğunu düşünüyoruz. Fakat bu durum, ORM jargonunda tam tersi olarak belirtiliyor. Müşterilerin ve siparişlerin tabloları olduğunu düşünelim. Siparişler tablosundaki her bir sipariş, bir müşteri referansı tutacaktır. Yani siparişler tablosunda, ilgili müşteriye ait bir referans foreign key olarak tutulacaktır. İşte ORM ile ilgili konuşurken, "sahip taraf (owning side)" bu foreign key'e sahip olan taraf olarak kabul ediliyor. Yani OO programlama yaparken düşündüğümüzün tam tersi :) Umarım bu bilgi faydalı olur. İlerleyen zamanlarda nesneler arası bağlantılar (assosication) ve bağlantı yönleri (unidirectional-bidirectional) hakkında da bir yazı hazırlayacağım. Örneğin yukarıda bahsettiğimiz durum Unidirectional ManyToOne bağlantıya bir örnek teşkil ediyor. Tekrar görüşmek üzere. Devamı için : Owning Side/Inverse Side Terimleri Ne Anlama Geliyor

4 Şubat 2013 Pazartesi

"the update information is outdated" sorunu (ubuntu linux)

Ubuntu 12.10'da bir kaç gündür şu şekilde bir uyarı çıkmaktaydı. Üzerine tıkladığımda da "The update information is outdated" şeklinde bir hata bildirisi vardı. (Kırmızı, ünlem.) the update information is outdated update ve upgrade ettiğimde gördüm ki download repositorylerinde 404 not found şeklinde warning vermekteydi. Bunların altında da "E: Some index files failed to download. They have been ignored, or old ones used instead." diye ne olduğunu açıkca belirtiyordu. Screenshot from 2013-02-04 10:59:50 System Settings -> Software Sources menüsüne girip üstteki tablardan Other Software olanda, tüm repolar bulunmakta. Bulunamayanları buradan kaldırdım ve sorun çözüldü. Bu yazıya işiniz düştüyse buradaki yazıyı da incelemenizde fayda olacaktır. Devamı için : "the update information is outdated" sorunu (ubuntu linux)

3 Şubat 2013 Pazar

Ubuntu DNS Ayarlarını Değiştirmek

Merhaba, Ubuntu işletim sistemi üzerinde DNS ayarlarımızı nasıl güncelleyebileceğimizden bahsedeceğim. Çeşitli sebeplerden ötürü DNS ayarlarınızı değiştirme ihtiyacı duyabilirsiniz. Yaygın olarak kullanılan Google DNSlerini kullanarak ben bu işlemi size anlatacağım. Sizler ihtiyaçlarınıza göre farklı DNS bilgilerini kullanarak işlem yapabilirsiniz. İlk işimiz /etc/dhcp/dhclient.conf dosyasını açarak prepend domain-name-servers yazan satırı bulalım (CTRL+W ile arama yapabilirsiniz.) Muhtemelen bu satırın başında # işareti olacaktır. Bu işareti kaldırarak satırı şu şekilde düzenleyelim ve kaydedelim :
prepend domain-name servers 8.8.8.8 8.8.4.4
Son olarak bir işlemimiz daha kaldı. /etc/network/interfaces dosyamızı açarak düzenleme moduna geçelim. Aşağıdaki gibi düzenleyelim ve kaydedelim :
auto lo  iface lo inet loopback  dns-nameservers 8.8.8.8 8.8.4.4
An itibari ile DNS ayarlarımızı güncellemiş olduk. Yukarıda da bahsettiğim gibi Google DNS bilgilerini kullandım (8.8.8.8 8.8.4.4) Siz başka DNS de tercih edebilirsiniz. Umarım faydalı olmuştur. Devamı için : Ubuntu DNS Ayarlarını Değiştirmek

1 Şubat 2013 Cuma

linux swap değerini arttırma (ubuntu 12.10 - wubi)

Bilgisayarınızdaki swap değerinin kaç olduğunu görmek için öncelikle free -m komutunu kullanabilirsiniz. Yada htop komutunu kullanarak değişimi anlık olarak izleyebilirsiniz. Aşağıdaki komutlar sistemin swap değerini 2 GB yapmakta. Buradaki count değerini ne kadar alan ayırmak istiyorsanız ona göre değiştirebiliriniz.
  sudo su  swapoff -a  cd /host/ubuntu/disks/  mv swap.disk swap.disk.bak  dd if=/dev/zero of=swap.disk bs=1024 count=2097152  mkswap swap.disk  swapon -a  free -m  
Eğer swap değeriniz arttıysa swap.disk.bak'ı kaldırabiliriniz. Eğer bir hata oluşursa swap.disk.bak'ı geri yükleyip tekrar deneyiniz. Detaylar için bu sayfayı inceleyebiliriniz. Devamı için : linux swap değerini arttırma (ubuntu 12.10 - wubi)

26 Ocak 2013 Cumartesi

windows 8 - dual boot problemi

Bir arkadaşımın uyarısı üzerine bir kaç araştırma yaptım ve Microsoft'un yine şaşırtmadığını gördüm. Arkadaşımın yapmak istediği şey, windows 8 yüklü bilgisayarına Wubi.exe aracılığıyla Ubuntu kurmak, yani bigisayrında çift işletim sistemi kullanmaktı. Windows XP, Vista ve 7' hiç bir sorun yoktu. Tıpkı ben gibi bir çok arkadaşım da bilgisayarlarında çift işletim sistemi kullanıyordu bu sayede. Ancak Windows, heralde haberi almış olacak ki buna dur demiş. Önce bilgisayarınızda bir disk ayırıyorsunuz, ardından girip wubi ile ubuntuyu buraya kuruyorsunuz. Bilgisayarınızı yeniden başlattığınızda ise karşınıza gelmesi gereken ekran, sizin kullanacağınız işletim sisteminizi seçeceğiniz ekran olmalı. Okuduklarıma göre, kimi bilgisayarlarda (sanırım windows 8 sürümü ile alakalı) bu ekran bile çıkmazken, kimi bilgisayarlarda ise hiç sormadan bilgisayar windows 8 ile başlamaktaymış. Yani kısacası Microsoft, windows 8 makinanıza dual boot yapmaya izin vermiyor. Yani elinizdeki donanıma birden fazla işletim sistemi kuramıyorsunuz. Windows 8 varsa, sadece windows 8 var demektir. Windows 7'nin lisans ücreti yaklaşık 300$ iken windows 8'in lisans ücretinin 20$ olmasının sebepleri çok konuşulmuştu ama bu gözden kaçmış sanırım :) Eğer windows 8 bilgisayarınıza dual boot yapmak isterseniz Microsoft'a 40$ bir ödeme yapmanız gerekmekteymiş. Pazarlama stratejisi açısından bakarsak elbette zekice. Ancak kullanıcılar için bu durum aşırı derecede saçma. Ben neden bilgisayarımı istedim gibi kullanamıyorum? Gerçi kullanıyorum, windows 8 kullanmayarak bilgisayarımı istediğim gibi kullanmış oluyorum. O yüzden buraya buyrunuz. Sanırım yazıma eklemeler yapmam gerekecek :D Devamı için : windows 8 - dual boot problemi

19 Ocak 2013 Cumartesi

Gömülü Sistemler

Merhaba, Pek çok kez adını duyduğumuz (yazılım dünyasında) gömülü sistemler(embedded system) ne işe yarar diye biraz araştırmaya koyuldum. Evimde bulunan çeşitli kaynaklardan edindiğim bilgileri özette olsa sizle paylaşarak bilmeyenler için fikir sahibi olmanıza yardımcı olacağım. Gömülü sistemleri mini bilgisayarlar olarak adlandırabiliriz. Bir kişisel bilgisayardan ziyade daha önceden tanımlanmış işleri dışarıdan tetikleyerek veya otomatik olarak gerçekleştiren sistemlerdir. Belirli sistemleri kontrol ederler ve bazı durumlarda kendilerini de kontrol ederler. Bu sistemler genellikle salt-okunur (read-only) bir bellek üzerinde bulunur. Hayatımızın pek çok yanına dağılmış olarak bu sistemleri kullanmaktayız. Örnek vermek gerekirse mikro dalga fırın, çamaşır makinesi, otomobillerde ki yol bilgisayarlarını örnek olarak verebiliriz. Bu da demek oluyorki her eve bir bilgisayar kampanyasına gerek yok :) zaten her evde var. Üniversitede bir projem çerçevesinde ışıklandırma amacıyla kullanılacak olan bir gömülü sistem projem vardı. PIC ile yazıyorduk (yazmaya çalışıyorduk) Hayatımızın her alanına dağılmış olan ve günlük yaşantımızı kolaylaştıran bu sistemlerden ufakta olsa bahsetmek istedim. Umarım fikir sahibi olmuşsunuzdur.   Devamı için : Gömülü Sistemler

12 Ocak 2013 Cumartesi

c programlama dilinde linked list (bağlı listeler)

Bir zaman önce C dilinde yapılar ve kullanımları (structures in C) başlıklı bir yazı yazmıştım. Eğer struct konusuna hakim değilseniz bir göz gezdirmenizi öneririm. Bu yazımda, C programlama dilindeki linked listlerin ne olduğundan, neden ihtiyaç duyduğumuzdan bahsedeceğim. Ardından da kod parçacıkları ile örnek vereceğim.

Linked List nedir?

Düğüm (node) adı verilen ve göstericiler (pointer) sayesinde birbirine bağlanan kendine dönüşlü yapıların doğrusal bir şeklidir. Bu noktada kendine dönüşlü yapının ne demek olduğuna örnek vermek gerekirse;
      struct Node{          int data;          struct Node *next;      }  
Buradaki Node ismindeki struct, içerisinde data isminde int türünde bir değişken ve kendi tipinde bir struct gösteren pointer'a sahiptir. Buna kendine dönüşlü yapı denmektedir. Bu tanım şu an hafızamızda pek yer etmemiş olabilir, yazının devamında neden böyle birşey yaptığımızı daha iyi anlayabiliriz. Linked list tanımını yaparken bir de doğrusal diye bir terim kullandık. Bunun anlamı esasında fiziksel olarak değildir. Hafızada, her node farklı bir yerde olur, ancak biz çalışmamız sırasında işlerimizi rahat ilerletebilmek için buna doğrusal deriz. Çünkü kağıda kalemle çizdiğimizde, linked listlerde her node birbirinin ardından gelir. Yazının devamında göreceğiz. Bir linked liste, listin ilk düğümünü gösteren gösterici sayesinde erişilir. Ve genellikle son düğümdeki pointer, listin sonu olduğunu belirtmek amacıyla NULL değere eşitlenir. Linked listlerde veriler dinamik olarak tutulur. Yani her düğüm ihtiyaç olduğunda silinir veya oluşturulur. Yukarıda kendine dönüşlü yapılardan bahsetmiştim. Bir linked list içerisinde sadece kendi tipinden değil, başka türden structlar da olabilir. Yani sadece kendi tipinden structlar olacak diye bir kural yoktur. Linked list oluştururken ilk olarak yapmamız gereken malloc ve sizeof işlemlerini kullanmaktır. sizeof ile elimizdeki structın boyutunu alırız, ve malloc fonksiyonu ile hafızada o kadar alanlık bir yer ayırırız. Linked listlere yeni bir düğüm ekleme işlemini 3 farklı yere yapabiliriz. Listenin en başına, listenin en sonuna, ve herhangi iki düğüm arasına. Şöyle bir yapı oluşturduğumuzu düşünelim;
  typedef struct linked_list {      int data;      struct linked_list *next;  } NODE;  
Bu şekilde bir yapıya art arda yeni düğümler eklemek için aşağıdaki kod parçacığını kullanabiliriz.
  void insert(int value){        if(head==NULL){ /// ilk düğüm oluşturulmadıysa önce onu oluşturuyoruz.          head = (NODE *)malloc(sizeof(NODE));          head->data = value;          head->next = NULL;          tail = head; /// Sadece ilk düğüm için, head = tail      } else {          NODE *temp = (NODE *)malloc(sizeof(NODE)); /// Eklenecek düğümler için memory allocation          temp->data = value;          temp->next = NULL;          tail->next = temp;          tail = tail->next;      }      printf("Eklenen data %d\n", value);  }  
Listeye başından ekleme yapmak için şu kod parçacığını kullanabiliriz;
  void head_insert(int value){        if(head==NULL){ /// İlk düğüm oluşturulmadıysa..          head = (LL *)malloc(sizeof(NODE));          head->data = value;          head->next = NULL;          tail = head; /// Sadece ilk düğüm için, head = tail      } else {          NODE *temp = (NODE *)malloc(sizeof(NODE)); /// Eklenecek düğümler için memory allocation          temp->data = value;          temp->next = head;          head = temp; /// Listenin başına yeni düğüm ekledik.      }      printf("Listenin başına eklendi --> %d\n", value);  }  
Herhangi bir elemandan önce veya sonra ekleme yapmayı da aynı yukarıdaki mantıkla yapabiliriz. while döngüsü ile listeyi dolaşırız. Oluşturduğumuz yeni düğümü veri kaybı olmadan iki düğüm arasına yerleştiririz.
  void insert_after(int insert, int foo){ ///insert değerini foo değerinden sonrasına ekliyoruz      LL *curr, *temp; /// gerekli işlemleri yapabilmek için 2 pointera ihtiyacımız var      if(head!=NULL){ /// tabi ki bu işlemi liste boş değilse yapabiliriz                curr = head; /// listenin en başından başlayacağız.            while(curr!=NULL){ /// next değeri NULL olan elemana kadar listeyi dolaşıyoruz (yani listenin sonuna kadar)                      if(curr->data==foo){ /// aradığımızı bulduk                                temp = (NODE *)malloc(sizeof(NODE));                  temp->data = insert;                   temp->next = curr->next;                  if(curr->next==NULL){                      tail = temp;                   }                  curr->next = temp;                  curr = curr->next;               }              curr = curr->next; /// aradığımızı bulamadıysak bulunduğumuz düğümden bir sonrakine geçiyoruz          }      }  }  
Daha sonraki yazılarımda linked listler ile ilgili farklı örnekler de vereceğim. Devamı için : c programlama dilinde linked list (bağlı listeler)

11 Ocak 2013 Cuma

Planlanmis bir site bakim calismasi durumunda arama motorlari icin ne yapmaliyim

Diyelim ki bir web siteniz var, ve sitenizde bir güncelleme, bakım, vb.. gibi geçici süre hizmeti durduracak bir işlem yapmak istiyorsunuz. Peki ya bu sırada arama motorları sitenizi indexlemeye gelmişse? Öyleyse sitenizde ekrana basılan hata kodlarını bir güzel indexler. Saçma tabi ancak yapabileceğiniz bir şeyler olduğunu tahmin ediyorsunuzdur. Bu durumda google botu için verebilceğiniz en güzel yanıt, HTTP 503 durum koduyla (503 status code) (tüm durum kodları listesi için buraya buyrunuz.) bir response üretirseniz, bir de "ne zaman geri gelmesini istediğimizi" belirtebilirsek - ki bu da, Retry-After headeri ile verebileceğimiz bir şey, O zaman işler yolunda devam etmiş oluyoruz. Bir diğer yapabilecğeimiz şey de, google'a bunu robots.txt den söylemek. Ancak, Google her zaman indexlenen bir sitenin - hem de anasayfasının - neden indexlenmesini istemediğimiz konusunda şaşırabilir :) O yüzden tavsiyem, 503 ve Retry-After vermeniz olacaktır. Aşağıdaki 2 header ile bu işlemi yapabilirsiniz.
header('HTTP/1.1 503 Service Temporarily Unavailable');  header('Retry-After: Sat, 8 Jan 2013 13:14:00 GMT');
Bu iki satırın manası şudur : Benim hizmetim şu an geçici olarak erişilemez durumda. Lütfen 8 ocak 2013 saa 13.14 te tekrar uğrayınız. Umarım faydalı olmuştur. Devamı için : Planlanmis bir site bakim calismasi durumunda arama motorlari icin ne yapmaliyim

HTTP (HTTP/1.1) Durum Kodlari (Status Codes)

Status Code Definitions

Each Status-Code is described below, including a description of which method(s) it can follow and any metainformation required in the response.

10.1 Informational 1xx

This class of status code indicates a provisional response, consisting only of the Status-Line and optional headers, and is terminated by an empty line. There are no required headers for this class of status code. Since HTTP/1.0 did not define any 1xx status codes, servers MUST NOT send a 1xx response to an HTTP/1.0 client except under experimental conditions. A client MUST be prepared to accept one or more 1xx status responses prior to a regular response, even if the client does not expect a 100 (Continue) status message. Unexpected 1xx status responses MAY be ignored by a user agent. Proxies MUST forward 1xx responses, unless the connection between the proxy and its client has been closed, or unless the proxy itself requested the generation of the 1xx response. (For example, if a proxy adds a "Expect: 100-continue" field when it forwards a request, then it need not forward the corresponding 100 (Continue) response(s).)

10.1.1 100 Continue

The client SHOULD continue with its request. This interim response is used to inform the client that the initial part of the request has been received and has not yet been rejected by the server. The client SHOULD continue by sending the remainder of the request or, if the request has already been completed, ignore this response. The server MUST send a final response after the request has been completed. See section 8.2.3 for detailed discussion of the use and handling of this status code.

10.1.2 101 Switching Protocols

The server understands and is willing to comply with the client's request, via the Upgrade message header field (section 14.42), for a change in the application protocol being used on this connection. The server will switch protocols to those defined by the response's Upgrade header field immediately after the empty line which terminates the 101 response. The protocol SHOULD be switched only when it is advantageous to do so. For example, switching to a newer version of HTTP is advantageous over older versions, and switching to a real-time, synchronous protocol might be advantageous when delivering resources that use such features.

10.2 Successful 2xx

This class of status code indicates that the client's request was successfully received, understood, and accepted.

10.2.1 200 OK

The request has succeeded. The information returned with the response is dependent on the method used in the request, for example: GET an entity corresponding to the requested resource is sent in the response; HEAD the entity-header fields corresponding to the requested resource are sent in the response without any message-body; POST an entity describing or containing the result of the action; TRACE an entity containing the request message as received by the end server.

10.2.2 201 Created

The request has been fulfilled and resulted in a new resource being created. The newly created resource can be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the resource given by a Location header field. The response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. The origin server MUST create the resource before returning the 201 status code. If the action cannot be carried out immediately, the server SHOULD respond with 202 (Accepted) response instead. A 201 response MAY contain an ETag response header field indicating the current value of the entity tag for the requested variant just created, see section 14.19.

10.2.3 202 Accepted

The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There is no facility for re-sending a status code from an asynchronous operation such as this. The 202 response is intentionally non-committal. Its purpose is to allow a server to accept a request for some other process (perhaps a batch-oriented process that is only run once per day) without requiring that the user agent's connection to the server persist until the process is completed. The entity returned with this response SHOULD include an indication of the request's current status and either a pointer to a status monitor or some estimate of when the user can expect the request to be fulfilled.

10.2.4 203 Non-Authoritative Information

The returned metainformation in the entity-header is not the definitive set as available from the origin server, but is gathered from a local or a third-party copy. The set presented MAY be a subset or superset of the original version. For example, including local annotation information about the resource might result in a superset of the metainformation known by the origin server. Use of this response code is not required and is only appropriate when the response would otherwise be 200 (OK).

10.2.5 204 No Content

The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. The response MAY include new or updated metainformation in the form of entity-headers, which if present SHOULD be associated with the requested variant. If the client is a user agent, it SHOULD NOT change its document view from that which caused the request to be sent. This response is primarily intended to allow input for actions to take place without causing a change to the user agent's active document view, although any new or updated metainformation SHOULD be applied to the document currently in the user agent's active view. The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty line after the header fields.

10.2.6 205 Reset Content

The server has fulfilled the request and the user agent SHOULD reset the document view which caused the request to be sent. This response is primarily intended to allow input for actions to take place via user input, followed by a clearing of the form in which the input is given so that the user can easily initiate another input action. The response MUST NOT include an entity.

10.2.7 206 Partial Content

The server has fulfilled the partial GET request for the resource. The request MUST have included a Range header field (section 14.35) indicating the desired range, and MAY have included an If-Range header field (section 14.27) to make the request conditional. The response MUST include the following header fields:
      - Either a Content-Range header field (section 14.16) indicating          the range included with this response, or a multipart/byteranges          Content-Type including Content-Range fields for each part. If a          Content-Length header field is present in the response, its          value MUST match the actual number of OCTETs transmitted in the          message-body.
      - Date
      - ETag and/or Content-Location, if the header would have been sent          in a 200 response to the same request
      - Expires, Cache-Control, and/or Vary, if the field-value might          differ from that sent in any previous response for the same          variant
If the 206 response is the result of an If-Range request that used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. If the response is the result of an If-Range request that used a weak validator, the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers. Otherwise, the response MUST include all of the entity-headers that would have been returned with a 200 (OK) response to the same request. A cache MUST NOT combine a 206 response with other previously cached content if the ETag or Last-Modified headers do not match exactly, see 13.5.4. A cache that does not support the Range and Content-Range headers MUST NOT cache 206 (Partial) responses.

10.3 Redirection 3xx

This class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request. The action required MAY be carried out by the user agent without interaction with the user if and only if the method used in the second request is GET or HEAD. A client SHOULD detect infinite redirection loops, since such loops generate network traffic for each redirection.
      Note: previous versions of this specification recommended a        maximum of five redirections. Content developers should be aware        that there might be clients that implement such a fixed        limitation.

10.3.1 300 Multiple Choices

The requested resource corresponds to any one of a set of representations, each with its own specific location, and agent- driven negotiation information (section 12) is being provided so that the user (or user agent) can select a preferred representation and redirect its request to that location. Unless it was a HEAD request, the response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content- Type header field. Depending upon the format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection. If the server has a preferred choice of representation, it SHOULD include the specific URI for that representation in the Location field; user agents MAY use the Location field value for automatic redirection. This response is cacheable unless indicated otherwise.

10.3.2 301 Moved Permanently

The requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link references to the Request-URI to one or more of the new references returned by the server, where possible. This response is cacheable unless indicated otherwise. The new permanent URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s). If the 301 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.
      Note: When automatically redirecting a POST request after        receiving a 301 status code, some existing HTTP/1.0 user agents        will erroneously change it into a GET request.

10.3.3 302 Found

The requested resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field. The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s). If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.
      Note: RFC 1945 and RFC 2068 specify that the client is not allowed        to change the method on the redirected request.  However, most        existing user agent implementations treat 302 as if it were a 303        response, performing a GET on the Location field-value regardless        of the original request method. The status codes 303 and 307 have        been added for servers that wish to make unambiguously clear which        kind of reaction is expected of the client.

10.3.4 303 See Other

The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on that resource. This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource. The new URI is not a substitute reference for the originally requested resource. The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable. The different URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).
      Note: Many pre-HTTP/1.1 user agents do not understand the 303        status. When interoperability with such clients is a concern, the        302 status code may be used instead, since most user agents react        to a 302 response as described here for 303.

10.3.5 304 Not Modified

If the client has performed a conditional GET request and access is allowed, but the document has not been modified, the server SHOULD respond with this status code. The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields. The response MUST include the following header fields:
      - Date, unless its omission is required by section 14.18.1
If a clockless origin server obeys these rules, and proxies and clients add their own Date to any response received without one (as already specified by [RFC 2068], section 14.19), caches will operate correctly.
      - ETag and/or Content-Location, if the header would have been sent          in a 200 response to the same request
      - Expires, Cache-Control, and/or Vary, if the field-value might          differ from that sent in any previous response for the same          variant
If the conditional GET used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. Otherwise (i.e., the conditional GET used a weak validator), the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers. If a 304 response indicates an entity not currently cached, then the cache MUST disregard the response and repeat the request without the conditional. If a cache uses a received 304 response to update a cache entry, the cache MUST update the entry to reflect any new field values given in the response.

10.3.6 305 Use Proxy

The requested resource MUST be accessed through the proxy given by the Location field. The Location field gives the URI of the proxy. The recipient is expected to repeat this single request via the proxy. 305 responses MUST only be generated by origin servers.
      Note: RFC 2068 was not clear that 305 was intended to redirect a        single request, and to be generated by origin servers only.  Not        observing these limitations has significant security consequences.

10.3.7 306 (Unused)

The 306 status code was used in a previous version of the specification, is no longer used, and the code is reserved.

10.3.8 307 Temporary Redirect

The requested resource resides temporarily under a different URI. Since the redirection MAY be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field. The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s) , since many pre-HTTP/1.1 user agents do not understand the 307 status. Therefore, the note SHOULD contain the information necessary for a user to repeat the original request on the new URI. If the 307 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

10.4 Client Error 4xx

The 4xx class of status code is intended for cases in which the client seems to have erred. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. User agents SHOULD display any included entity to the user. If the client is sending data, a server implementation using TCP SHOULD be careful to ensure that the client acknowledges receipt of the packet(s) containing the response, before the server closes the input connection. If the client continues sending data to the server after the close, the server's TCP stack will send a reset packet to the client, which may erase the client's unacknowledged input buffers before they can be read and interpreted by the HTTP application.

10.4.1 400 Bad Request

The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.

10.4.2 401 Unauthorized

The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request with a suitable Authorization header field (section 14.8). If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user SHOULD be presented the entity that was given in the response, since that entity might include relevant diagnostic information. HTTP access authentication is explained in "HTTP Authentication: Basic and Digest Access Authentication" [43].

10.4.3 402 Payment Required

This code is reserved for future use.

10.4.4 403 Forbidden

The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information available to the client, the status code 404 (Not Found) can be used instead.

10.4.5 404 Not Found

The server has not found anything matching the Request-URI. No indication is given of whether the condition is temporary or permanent. The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable.

10.4.6 405 Method Not Allowed

The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. The response MUST include an Allow header containing a list of valid methods for the requested resource.

10.4.7 406 Not Acceptable

The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request. Unless it was a HEAD request, the response SHOULD include an entity containing a list of available entity characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. Depending upon the format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.
      Note: HTTP/1.1 servers are allowed to return responses which are        not acceptable according to the accept headers sent in the        request. In some cases, this may even be preferable to sending a        406 response. User agents are encouraged to inspect the headers of        an incoming response to determine if it is acceptable.
If the response could be unacceptable, a user agent SHOULD temporarily stop receipt of more data and query the user for a decision on further actions.

10.4.8 407 Proxy Authentication Required

This code is similar to 401 (Unauthorized), but indicates that the client must first authenticate itself with the proxy. The proxy MUST return a Proxy-Authenticate header field (section 14.33) containing a challenge applicable to the proxy for the requested resource. The client MAY repeat the request with a suitable Proxy-Authorization header field (section 14.34). HTTP access authentication is explained in "HTTP Authentication: Basic and Digest Access Authentication" [43].

10.4.9 408 Request Timeout

The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time.

10.4.10 409 Conflict

The request could not be completed due to a conflict with the current state of the resource. This code is only allowed in situations where it is expected that the user might be able to resolve the conflict and resubmit the request. The response body SHOULD include enough information for the user to recognize the source of the conflict. Ideally, the response entity would include enough information for the user or user agent to fix the problem; however, that might not be possible and is not required. Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being used and the entity being PUT included changes to a resource which conflict with those made by an earlier (third-party) request, the server might use the 409 response to indicate that it can't complete the request. In this case, the response entity would likely contain a list of the differences between the two versions in a format defined by the response Content-Type.

10.4.11 410 Gone

The requested resource is no longer available at the server and no forwarding address is known. This condition is expected to be considered permanent. Clients with link editing capabilities SHOULD delete references to the Request-URI after user approval. If the server does not know, or has no facility to determine, whether or not the condition is permanent, the status code 404 (Not Found) SHOULD be used instead. This response is cacheable unless indicated otherwise. The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient that the resource is intentionally unavailable and that the server owners desire that remote links to that resource be removed. Such an event is common for limited-time, promotional services and for resources belonging to individuals no longer working at the server's site. It is not necessary to mark all permanently unavailable resources as "gone" or to keep the mark for any length of time -- that is left to the discretion of the server owner.

10.4.12 411 Length Required

The server refuses to accept the request without a defined Content- Length. The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message-body in the request message.

10.4.13 412 Precondition Failed

The precondition given in one or more of the request-header fields evaluated to false when it was tested on the server. This response code allows the client to place preconditions on the current resource metainformation (header field data) and thus prevent the requested method from being applied to a resource other than the one intended.

10.4.14 413 Request Entity Too Large

The server is refusing to process a request because the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request. If the condition is temporary, the server SHOULD include a Retry- After header field to indicate that it is temporary and after what time the client MAY try again.

10.4.15 414 Request-URI Too Long

The server is refusing to service the request because the Request-URI is longer than the server is willing to interpret. This rare condition is only likely to occur when a client has improperly converted a POST request to a GET request with long query information, when the client has descended into a URI "black hole" of redirection (e.g., a redirected URI prefix that points to a suffix of itself), or when the server is under attack by a client attempting to exploit security holes present in some servers using fixed-length buffers for reading or manipulating the Request-URI.

10.4.16 415 Unsupported Media Type

The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method.

10.4.17 416 Requested Range Not Satisfiable

A server SHOULD return a response with this status code if a request included a Range request-header field (section 14.35), and none of the range-specifier values in this field overlap the current extent of the selected resource, and the request did not include an If-Range request-header field. (For byte-ranges, this means that the first- byte-pos of all of the byte-range-spec values were greater than the current length of the selected resource.) When this status code is returned for a byte-range request, the response SHOULD include a Content-Range entity-header field specifying the current length of the selected resource (see section 14.16). This response MUST NOT use the multipart/byteranges content- type.

10.4.18 417 Expectation Failed

The expectation given in an Expect request-header field (see section 14.20) could not be met by this server, or, if the server is a proxy, the server has unambiguous evidence that the request could not be met by the next-hop server.

10.5 Server Error 5xx

Response status codes beginning with the digit "5" indicate cases in which the server is aware that it has erred or is incapable of performing the request. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. User agents SHOULD display any included entity to the user. These response codes are applicable to any request method.

10.5.1 500 Internal Server Error

The server encountered an unexpected condition which prevented it from fulfilling the request.

10.5.2 501 Not Implemented

The server does not support the functionality required to fulfill the request. This is the appropriate response when the server does not recognize the request method and is not capable of supporting it for any resource.

10.5.3 502 Bad Gateway

The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.

10.5.4 503 Service Unavailable

The server is currently unable to handle the request due to a temporary overloading or maintenance of the server. The implication is that this is a temporary condition which will be alleviated after some delay. If known, the length of the delay MAY be indicated in a Retry-After header. If no Retry-After is given, the client SHOULD handle the response as it would for a 500 response.
      Note: The existence of the 503 status code does not imply that a        server must use it when becoming overloaded. Some servers may wish        to simply refuse the connection.

10.5.5 504 Gateway Timeout

The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URI (e.g. HTTP, FTP, LDAP) or some other auxiliary server (e.g. DNS) it needed to access in attempting to complete the request.
      Note: Note to implementors: some deployed proxies are known to        return 400 or 500 when DNS lookups time out.

10.5.6 505 HTTP Version Not Supported

The server does not support, or refuses to support, the HTTP protocol version that was used in the request message. The server is indicating that it is unable or unwilling to complete the request using the same major version as the client, as described in section 3.1, other than with this error message. The response SHOULD contain an entity describing why that version is not supported and what other protocols are supported by that server.   kaynak : http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html Devamı için : HTTP (HTTP/1.1) Durum Kodlari (Status Codes)