28 Ağustos 2012 Salı

Eclipse IDE Performans Arttırma Önerileri

Eclipse IDE kullanırken yaşadığım performans problemleri, Eclipse IDE nin aşırı derecede yavaş çalışması ve sık sık donması beni bu konuda araştırma yapmaya itti. Yaptığım araştırmalar sonucu bir sürü faydalı yöntem öğrendim. Türkçe bu konuda internette herhangi kaynağa rastlamadığımdan bu yazıyı yazmaya karar verdim.   Uygulamanızı tavsiye ettiğim yöntemleri maddeler halinde açıklayacağım.
  • Herşeyden önce dikkat etmeniz gereken en önemli şey Eclipse ve JDK'nın son sürümlerini kullanmak.
  • Bilgisayarınızda Eclipse dosyalarının içerisinde bulunan eclipse.ini isimli dosyayı açarak burada Eclipse için ayrılmış olan bellek boyutlarıyla ilgili ayarları değiştirebilirsiniz. Benim bilgisayarımdaki dosya aşağıdaki şekildedir. Burada -Xmx değeri önemlidir. Makinenizin RAM değeri ne kadar yüksekse bu değeri o kadar arttırabilirsiniz. Benim makinemin Ram değeri 2GB ben 512m olarak ayarladım bu değeri sizin makinenizin RAM değeri 4GB ise ve Eclipse'in çok rahat çalışmasını istiyorsanız bu değeri 1024 olarak ayarlayabilirsiniz. Sizin makinenizin RAM değerini tam olarak bilemediğimden kesin rakamlar vermem mümkün değil o yüzden bunları internetten araştırmanızı tavsiye ediyorum. Bu link bu konuda size yardımcı olabilir: http://stackoverflow.com/questions/477871/eclipse-ini-configuration Ayrıca eclipse.ini dosyasına -Xverify:none satırını ekleyerek bu VM ye yüklediği tüm dosyaların .class olanlarının doğrulama işlemini yapmamasını söyler. Bu Eclipse'in açılmasını hızlandırır. Bunun dışında XXMaxPermSize bellek miktarını arttırmayı da ihmal etmeyin. eclipse.ini
  • Eclipse de Window-Preferences-Validation izleyerek doğrulamayla ilgili ayarları değiştirebilirsiniz. Aşağıdaki resimde karşınıza çıkacak ekran görünmektedir. Buradan Manuel kısmında işinize yaramayan validation türlerinin karşısındaki tikleri kaldırabilirsiniz. Eclipse Performance
  • Kullanmadığınız projeleri kapatmak performansda artış sağlayacaktır. Ayrıca server'a deploy edilmiş kullanılmayan projeleri de serverden silmeniz gerekir. Eclipse performans
  • Windows -> Preferences; General -> Appearance -> Label Decorations yolunu izleyerek gereksiz decoration'ları kaldırmanız Eclipse performansını aktarmanıza katkıda bulunabilir. Windows -> Preferences; General -> Appearance -> Label Decorations
  • Eclipse IDE'nizin açılış performansını arttıracak en önemli ayarlardan birisi de Windows -> Preferences; General -> Startup and Shutdown yolunu izleyerek açılış ve kapanış ayarlarını değiştirmeniz olacaktır. Burada açılış zamanı aktif olmasını istemediğiniz pluginlerin önündeki tiki kaldırın. Özellikle Subeclipse çok fazla yavaşlatıyor Eclipse'i onu kesinlikle deaktif etmenizi tavsiye ediyorum. Windows -> Preferences; General -> Startup and Shutdown
  • Windows-->Preference-->General-->Editors-->Text Editors-->Spelling yolunu izleyerek spelling ayarını deaktif etmeniz gerekmektedir. Bu performans açısından çok faydalı olacaktır. Sonuçta Eclipse bir text editörü değil ve kelimelerin doğruluğunun kontrol edilmesi çok da önemli değil.  Eclipse Performans ipuçlar
Kaynaklar : http://stackoverflow.com/questions/316265/tricks-to-speed-up-eclipse http://www.pakkatechies.com/2011/07/making-eclipse-ide-faster.html http://developersland.net/index.php/java/111-eclipse-ide-hizlandirmak-icin-performans-onerileri.html
Devamı için : Eclipse IDE Performans Arttırma Önerileri

Eclipse IDE Performans arttırma önerileri

Eclipse IDE kullanırken yaşadığım performans problemleri, Eclipse IDE nin aşırı derecede yavaş çalışması ve sık sık donması beni bu konuda araştırma yapmaya itti. Yaptığım araştırmalar sonucu bir sürü faydalı yöntem öğrendim. Türkçe bu konuda internette herhangi kaynağa rastlamadığımdan bu yazıyı yazmaya karar verdim.   Uygulamanızı tavsiye ettiğim yöntemleri maddeler halinde açıklayacağım.
  • Herşeyden önce dikkat etmeniz gereken en önemli şey Eclipse ve JDK'nın son sürümlerini kullanmak.
  • Bilgisayarınızda Eclipse dosyalarının içerisinde bulunan eclipse.ini isimli dosyayı açarak burada Eclipse için ayrılmış olan bellek boyutlarıyla ilgili ayarları değiştirebilirsiniz. Benim bilgisayarımdaki dosya aşağıdaki şekildedir. Burada -Xmx değeri önemlidir. Makinenizin RAM değeri ne kadar yüksekse bu değeri o kadar arttırabilirsiniz. Benim makinemin Ram değeri 2GB ben 512m olarak ayarladım bu değeri sizin makinenizin RAM değeri 4GB ise ve Eclipse'in çok rahat çalışmasını istiyorsanız bu değeri 1024 olarak ayarlayabilirsiniz. Sizin makinenizin RAM değerini tam olarak bilemediğimden kesin rakamlar vermem mümkün değil o yüzden bunları internetten araştırmanızı tavsiye ediyorum. Bu link bu konuda size yardımcı olabilir: http://stackoverflow.com/questions/477871/eclipse-ini-configuration Ayrıca eclipse.ini dosyasına -Xverify:none satırını ekleyerek bu VM ye yüklediği tüm dosyaların .class olanlarının doğrulama işlemini yapmamasını söyler. Bu Eclipse'in açılmasını hızlandırır. Bunun dışında XXMaxPermSize bellek miktarını arttırmayı da ihmal etmeyin. eclipse.ini
  • Eclipse de Window-Preferences-Validation izleyerek doğrulamayla ilgili ayarları değiştirebilirsiniz. Aşağıdaki resimde karşınıza çıkacak ekran görünmektedir. Buradan Manuel kısmında işinize yaramayan validation türlerinin karşısındaki tikleri kaldırabilirsiniz. Eclipse Performance
  • Kullanmadığınız projeleri kapatmak performansda artış sağlayacaktır. Ayrıca server'a deploy edilmiş kullanılmayan projeleri de serverden silmeniz gerekir. Eclipse performans
  • Windows -> Preferences; General -> Appearance -> Label Decorations yolunu izleyerek gereksiz decoration'ları kaldırmanız Eclipse performansını aktarmanıza katkıda bulunabilir. Windows -> Preferences; General -> Appearance -> Label Decorations
  • Eclipse IDE'nizin açılış performansını arttıracak en önemli ayarlardan birisi de Windows -> Preferences; General -> Startup and Shutdown yolunu izleyerek açılış ve kapanış ayarlarını değiştirmeniz olacaktır. Burada açılış zamanı aktif olmasını istemediğiniz pluginlerin önündeki tiki kaldırın. Özellikle Subeclipse çok fazla yavaşlatıyor Eclipse'i onu kesinlikle deaktif etmenizi tavsiye ediyorum. Windows -> Preferences; General -> Startup and Shutdown
  • Windows-->Preference-->General-->Editors-->Text Editors-->Spelling yolunu izleyerek spelling ayarını deaktif etmeniz gerekmektedir. Bu performans açısından çok faydalı olacaktır. Sonuçta Eclipse bir text editörü değil ve kelimelerin doğruluğunun kontrol edilmesi çok da önemli değil.  Eclipse Performans ipuçlar
Kaynaklar : http://stackoverflow.com/questions/316265/tricks-to-speed-up-eclipse http://www.pakkatechies.com/2011/07/making-eclipse-ide-faster.html http://developersland.net/index.php/java/111-eclipse-ide-hizlandirmak-icin-performans-onerileri.html
Devamı için : Eclipse IDE Performans arttırma önerileri

27 Ağustos 2012 Pazartesi

PHP Web Service

Merhaba, Size PHP ile web service (SOAP) hizmetinden bahsedeceğim. Web service bir haberleşme standardıdır. Standart bir yapı olması nedeniyle projelerinizde kullanmış olduğunuz yazılım dillerinden bağımsız olarak düşünmeniz gerekecektir. Projeler aynı dille yazılmış olmaksızın veri alışverişi sağlayabilirsiniz. Kapsamlı projelerde ihtiyaç olarak doğan veri alışverişini sağlayabileceğiniz güzel bir altyapıyı PHP ile örnekleyerek anlatmaya çalışacağım. Sözü fazla uzatmadan örneklemelerime başlamak istiyorum. Aşağıdaki iki sayfayı çalışma ortamınızda oluşturmanızı isteyeceğim.
  1. server.php
  2. client.php
Server.php web service bağlantısı açarken, client.php bu hizmetten yararlanarak veri transferini gerçekleştirecektir. Ben local çalışma ortamıma www.project.mil hayali domain ile bağlandığım için örnekte de bu adresi verdim. Siz kendi çalışma ortamınıza göre düzenlemeler yapabilirsiniz.
<?php  class MyWebService{    const STATIC_EXAMPLE_MESSAGE = "hello web service";    public function getMessage(){  return self::STATIC_EXAMPLE_MESSAGE;  }  }    $server = new SoapServer(null,array("uri" => "http://www.project.mil/server.php"));  $server->setClass("MyWebService");  $server->handle();  ?>
Yukarıda ki örnekte MyWebService isimli class'ı web service de kullanılacak olan class olarak atadım. Yani client olarak bağlanan kullanıcılar "public" özelliğe sahip tüm methodları çağırabilirler. Bu arada web service altyapısı için illaki class kullanmak zorunda değilsiniz. Ancak ben class kullanmayı tercih ettim. Hizmete erişilecek olan adresi uri parametresi ile belirliyoruz ve class ismini atıyoruz. Bkz : http://php.net/soapserver Yukarıda ki aşamaları tamamladıysak artık dışarıdan gelen misafirleri karşılayabilir ve veri alışverişi sağlayabiliriz.
<?php  $options = array(  "uri" => "http://www.project.mil",  "location" => "http://www.project.mil/server.php"  );  $client = new SoapClient(null, $options);  $result = $client->getMessage();  echo $result;  ?>
Yukarıda ki örnekte az evvel oluşturduğumuz web service hizmetine bağlandık ve getMessage methoduna bağlanarak oradan dönen sonucu ekrana yazdırdık. Kodu çalıştırdığınızda ekrana "hello web service" yazdığını göreceksiniz. Görüldüğü üzere basit bir web service bağlantısı oluşturmuş olduk. Çeşitli hata ayıklama işlemleri, güvenlik işlemleri v.s. gibi çalışmalarla güçlendirerek projelerimizde ki veri alışverişi ihtiyacını gidermiş olabiliriz. Umarım faydalı olmuştur. Devamı için : PHP Web Service

25 Ağustos 2012 Cumartesi

PHP interface

Merhaba, Bugün PHP interface yapısından bahsetmek istiyorum. Bilindiği üzere interface Türkçe "arayüz" anlamına gelmektedir. Ancak burada görsel birşeyler düşünmeyelim. Yapı yani modelleme arayüzü olarak düşünebiliriz. Birden fazla adaptorü olacak bir yapımızın olduğunu düşünelim. Örnek vermek gerekirse bir veritabanı altyapısı hazırlıyorsunuz ve mysql,oracle gibi birden fazla adaptorünüz var. Bu adaptorlerde ki yapıların birbiri ile aynı olmasını istiyorsak burada interface devreye girecek. Bir proje de birden fazla geliştiricinin olması gibi durumlarda standart bir yapının korunmasını sağlamış olacağız. Yapı dışında birşey yapılmak istenirse hata alınacaktır. Yapıda ki genel kuram bu şekilde. Şimdi kodlarla açıklamaya çalışacağım.
< ?php  interface database{
   public function setData($data);
   public function getData($key);
}  ?>
Yukarıda ki örnekte "database" isimli bir interface oluşturduk ve bu interface  kullanan tüm class larda "setData" ve "getData" methodlarının olmasının şart olduğunu söylemiş olduk. Burada methodlar süslü parantez açılarak tanımlanmaz. Sadece method ismi yazılır ve kapatılır. Yine en önemli özelliklerinden biri de methodlara gönderilecek parametreleri dahi burada belirleyebiliyor olmamız. Eğer class içinde eksik parametre tanımlarsak hata vererek bizi bu yapıya uygun kod yazdırmaya zorlayacaktır.
< ?php
class mysql implements database{
    public function setData($data){
       // ilgili işlemler burada yapılır.
    }
    public function getData($key){
       // ilgili işlemler burada yapılır.
    }
    public function example1(){
       // başka methodlara ihtiyaç duyuyorsak ekleyebiliriz.
    }
}
class oracle implements database{
    public function setData($data){
       // ilgili işlemler burada yapılır.
    }
    public function getData($key){
       // ilgili işlemler burada yapılır.
    }
    public function example2(){
       // başka methodlara ihtiyaç duyuyorsak ekleyebiliriz.
    }
}
?>
Yukarıda ki örnekte oluşturduğum mysql ve oracle classlarının interface olarak "database" arayüzünü kullanmasını sağladım. Hata almamak için interface içinde belirtilen methodları tanımladım ve tüm classlarım standart bir yapıya kavuşmuş oldu. Yine örnekte görüldüğü üzere interface kullanmak için "implements" yazdıktan sonra interface adını yazmamız gerekiyor. Umarım faydalı olmuştur. Geliştirerek kendi projelerinizde de kullanabilirsiniz. Devamı için : PHP interface

PHP interface

Merhaba, Bugün PHP interface yapısından bahsetmek istiyorum. Bilindiği üzere interface Türkçe "arayüz" anlamına gelmektedir. Ancak burada görsel birşeyler düşünmeyelim. Yapı yani modelleme arayüzü olarak düşünebiliriz. Birden fazla adaptorü olacak bir yapımızın olduğunu düşünelim. Örnek vermek gerekirse bir veritabanı altyapısı hazırlıyorsunuz ve mysql,oracle gibi birden fazla adaptorünüz var. Bu adaptorlerde ki yapıların birbiri ile aynı olmasını istiyorsak burada interface devreye girecek. Bir proje de birden fazla geliştiricinin olması gibi durumlarda standart bir yapının korunmasını sağlamış olacağız. Yapı dışında birşey yapılmak istenirse hata alınacaktır. Yapıda ki genel kuram bu şekilde. Şimdi kodlarla açıklamaya çalışacağım.
< ?php  interface database{
   public function setData($data);
   public function getData($key);
}  ?>
Yukarıda ki örnekte "database" isimli bir interface oluşturduk ve bu interface  kullanan tüm class larda "setData" ve "getData" methodlarının olmasının şart olduğunu söylemiş olduk. Burada methodlar süslü parantez açılarak tanımlanmaz. Sadece method ismi yazılır ve kapatılır. Yine en önemli özelliklerinden biri de methodlara gönderilecek parametreleri dahi burada belirleyebiliyor olmamız. Eğer class içinde eksik parametre tanımlarsak hata vererek bizi bu yapıya uygun kod yazdırmaya zorlayacaktır.
< ?php
class mysql implements database{
    public function setData($data){
       // ilgili işlemler burada yapılır.
    }
    public function getData($key){
       // ilgili işlemler burada yapılır.
    }
    public function example1(){
       // standart methodlar dışında başka methodlara ihtiyaç duyuyorsak buraya ekleyebiliriz.
    }
}
class oracle implements database{
    public function setData($data){
       // ilgili işlemler burada yapılır.
    }
    public function getData($key){
       // ilgili işlemler burada yapılır.
    }
    public function example2(){
       // standart methodlar dışında başka methodlara ihtiyaç duyuyorsak buraya ekleyebiliriz.
    }
}
?>
Yukarıda ki örnekte oluşturduğum mysql ve oracle classlarının interface olarak "database" arayüzünü kullanmasını sağladım. Hata almamak için interface içinde belirtilen methodları tanımladım ve tüm classlarım standart bir yapıya kavuşmuş oldu. Yine örnekte görüldüğü üzere interface kullanmak için "implements" yazdıktan sonra interface adını yazmamız gerekiyor. Umarım faydalı olmuştur. Geliştirerek kendi projelerinizde de kullanabilirsiniz. Devamı için : PHP interface

PHP interface

Merhaba, Bugün PHP interface yapısından bahsetmek istiyorum. Bilindiği üzere interface Türkçe "arayüz" anlamına gelmektedir. Ancak burada görsel birşeyler düşünmeyelim. Yapı yani modelleme arayüzü olarak düşünebiliriz. Birden fazla adaptorü olacak bir yapımızın olduğunu düşünelim. Örnek vermek gerekirse bir veritabanı altyapısı hazırlıyorsunuz ve mysql,oracle gibi birden fazla adaptorünüz var. Bu adaptorlerde ki yapıların birbiri ile aynı olmasını istiyorsak burada interface devreye girecek. Bir proje de birden fazla geliştiricinin olması gibi durumlarda standart bir yapının korunmasını sağlamış olacağız. Yapı dışında birşey yapılmak istenirse hata alınacaktır. Yapıda ki genel kuram bu şekilde. Şimdi kodlarla açıklamaya çalışacağım.
< ?php  interface database{
   public function setData($data);
   public function getData($key);
}  ?>
Yukarıda ki örnekte "database" isimli bir interface oluşturduk ve bu interface  kullanan tüm class larda "setData" ve "getData" methodlarının olmasının şart olduğunu söylemiş olduk. Burada methodlar süslü parantez açılarak tanımlanmaz. Sadece method ismi yazılır ve kapatılır. Yine en önemli özelliklerinden biri de methodlara gönderilecek parametreleri dahi burada belirleyebiliyor olmamız. Eğer class içinde eksik parametre tanımlarsak hata vererek bizi bu yapıya uygun kod yazdırmaya zorlayacaktır.
< ?php
class mysql implements database{
    public function setData($data){
       // ilgili işlemler burada yapılır.
    }
    public function getData($key){
       // ilgili işlemler burada yapılır.
    }
    public function example1(){
       // standart methodlar dışında başka methodlara ihtiyaç duyuyorsak buraya ekleyebiliriz.
    }
}
class oracle implements database{
    public function setData($data){
       // ilgili işlemler burada yapılır.
    }
    public function getData($key){
       // ilgili işlemler burada yapılır.
    }
    public function example2(){
       // standart methodlar dışında başka methodlara ihtiyaç duyuyorsak buraya ekleyebiliriz.
    }
}
?>
Yukarıda ki örnekte oluşturduğum mysql ve oracle classlarının interface olarak "database" arayüzünü kullanmasını sağladım. Hata almamak için interface içinde belirtilen methodları tanımladım ve tüm classlarım standart bir yapıya kavuşmuş oldu. Yine örnekte görüldüğü üzere interface kullanmak için "implements" yazdıktan sonra interface adını yazmamız gerekiyor. Umarım faydalı olmuştur. Geliştirerek kendi projelerinizde de kullanabilirsiniz. Devamı için : PHP interface

PHP interface

Merhaba, Bugün PHP interface yapısından bahsetmek istiyorum. Bilindiği üzere interface Türkçe "arayüz" anlamına gelmektedir. Ancak burada görsel birşeyler düşünmeyelim. Yapı yani modelleme arayüzü olarak düşünebiliriz. Birden fazla adaptorü olacak bir yapımızın olduğunu düşünelim. Örnek vermek gerekirse bir veritabanı altyapısı hazırlıyorsunuz ve mysql,oracle gibi birden fazla adaptorünüz var. Bu adaptorlerde ki yapıların birbiri ile aynı olmasını istiyorsak burada interface devreye girecek. Bir proje de birden fazla geliştiricinin olması gibi durumlarda standart bir yapının korunmasını sağlamış olacağız. Yapı dışında birşey yapılmak istenirse hata alınacaktır. Yapıda ki genel kuram bu şekilde. Şimdi kodlarla açıklamaya çalışacağım.
< ?php  interface database{
   public function setData($data);
   public function getData($key);
}  ?>
Yukarıda ki örnekte "database" isimli bir interface oluşturduk ve bu interface  kullanan tüm class larda "setData" ve "getData" methodlarının olmasının şart olduğunu söylemiş olduk. Burada methodlar süslü parantez açılarak tanımlanmaz. Sadece method ismi yazılır ve kapatılır. Yine en önemli özelliklerinden biri de methodlara gönderilecek parametreleri dahi burada belirleyebiliyor olmamız. Eğer class içinde eksik parametre tanımlarsak hata vererek bizi bu yapıya uygun kod yazdırmaya zorlayacaktır.
< ?php
class mysql implements database{
    public function setData($data){
       // ilgili işlemler burada yapılır.
    }
    public function getData($key){
       // ilgili işlemler burada yapılır.
    }
    public function example1(){
       // standart methodlar dışında başka methodlara ihtiyaç duyuyorsak buraya ekleyebiliriz.
    }
}
class oracle implements database{
    public function setData($data){
       // ilgili işlemler burada yapılır.
    }
    public function getData($key){
       // ilgili işlemler burada yapılır.
    }
    public function example2(){
       // standart methodlar dışında başka methodlara ihtiyaç duyuyorsak buraya ekleyebiliriz.
    }
}
?>
Yukarıda ki örnekte oluşturduğum mysql ve oracle classlarının interface olarak "database" arayüzünü kullanmasını sağladım. Hata almamak için interface içinde belirtilen methodları tanımladım ve tüm classlarım standart bir yapıya kavuşmuş oldu. Yine örnekte görüldüğü üzere interface kullanmak için "implements" yazdıktan sonra interface adını yazmamız gerekiyor. Umarım faydalı olmuştur. Geliştirerek kendi projelerinizde de kullanabilirsiniz. Devamı için : PHP interface

24 Ağustos 2012 Cuma

child pid ... exit signal Segmentation fault (11) - cpanel - centos

Centos 5.5 içinde cpanel yüklü sistemde child pid ... exit signal Segmentation fault (11)hatası almaktaydım. Her yerde memory'nin yetmediğini belirten , diskin tutarsız olduğunu felan söyleyen yazılar gördüm. Bu hatayı , apache nin error loglarından görebiliyordum, son kademe log olarak burada yakalayabildim. Ancak bir detay vermiyordu. Php 5.2 sistem, mysql 5.1 kullanıyorum. Daha sonra hatayı tespit etmek için tüm veritabanını local bilgisayarıma aktardım, ve aynı hatayı almaya çalıştığımda, windows ortamında , (php5.3, mysql 5.5) bana "Maximum function nesting level of '100' reached" diye bir hata verdi. Yani diyor ki, "içiçe 100den fazla derinliğe kadar indin, sınıra ulaştın". Anladığım kadarıyla, php5.2 de bunu handle edebilecek bir mekanizma yok. Hatanın sebebi , sınıf içinde recursive olarak kendi sınıfından üreten bir metodun es kaza yanlış çalışması durumu vardı. Şöyle :
  class X{      function load(){          //...bişeyler bişeyler...          $this->load();      }  }  
Nitekim, koddan bu tarz bir döngü oluşturabilecek durumun önüne geçtim, ve hata düzeldi.   Devamı için : child pid ... exit signal Segmentation fault (11) - cpanel - centos

23 Ağustos 2012 Perşembe

mysql insert delayed

insert delayed komutu, bir tablo üzerinde aynı anda fazla işlem yaptığımız zaman işimize yarayabilir. Yaptığı işlem, gelen insert sorgularını bir process olarak tutmak, ve en uygun olan zamanda tabloya insert etmek. İlk olarak, insert delayed nedir ne değildir ondan bahsedelim. insert delayed çalıştığı zaman, geriye sorgunun çalıştığına dair yanıt döndürür ama veriler eklenmek üzere bekletilir. insert delayed komutu, insert komutundan daha yavaş çalışmaktadır. Sebebi, insert kullandığımız zaman direk tabloya etki etmemiz, insert delayed kullandığımızda ise bir süre bekletilmemizdir. O yüzden insert delayed komutunu sadece gerçekten ihtiyacımız varsa kullanmalıyız. Birden fazla insert işleminde, insert delayed kullanıldığı zaman, bunlar tek bir işlem olarak tutulur ve birlikte insert edilir. Yani bir sürü insert sorgusunun çalışmasındansa sadece 1 kere insert işlemi yapılır. insert delayed ile insert etmek istediğimiz verileri, veriler tabloya insert edilmeden önce select komutu kullandığımızda göremeyiz. lock tables komutu kullanıldıktan sonra insert delayed komutu kullanıldığında hataya yol açar, sebebi ise, kilitlenmiş tabloya bir işlem yaptıramayışımız. Yani biz tabloyu kilitlersek, ona bir işlem ekleyemeyiz. insert delayed, tablo için ayrı bir processtir. insert delayed komutu, yalnızca MyISAM, MEMORY ve ARCHIVE tablolarda çalışır. insert .... select ve insert .... on duplicate key gibi sorgularda delayed iş görmez, yok sayılır. Sebebi ise, insert delayed sorgusunun hemen yanıt verip ama işlemi process olarak tutması. Insert işlemi gerçekleşmeden last_inserd_id() kullanırsak hataya yol açar. mysql'de show status komutunu çalıştırdığımızda aşağıda verdiğim parametreler insert delayed işlemi ile ilgilidir, gerekli durumlarda takip edilebilir.
Delayed_insert_threads : gelen INSERT DELAYED sayısı
Delayed_writes : INSERT DELAYED ile yazılmış satır sayısı
Not_flushed_delayed_rows : Yazılmak için bekletilen satır sayısı
Peki insert delayed komutu verileri tabloya ne zaman ekler? Bu noktada önemli olan parametrelerden 2 tanesi delayed_insert_timeout ve delayed_insert_limit. insert delayed komutu çalıştırıldığı zaman, ilk olarak daha önceden bekletilen işlem olup olmadığına bakılır. Ardından da bu iki parametreye bakılır. Eğer delayed_insert_limit sayısına ulaşılmışsa, veya delayed_insert_timeout vakti gelmişse, veriler veritabanına insert edilir :) Bu parametreleri de mysqld ile değiştirebiliriz nasıl olduklarına buradan ve buradan bakabilirsiniz. Daha detaylı bilgi için buraya göz atabilirsiniz. Devamı için : mysql insert delayed

TEB - sikayet - 444 0 666

Firmamız Bu teb bankasıyla çalışma başladıktan sonra, sinir katsayımız parabolik olarak artmaya başladı. Her gün en az 5 kere arayıp en az 2 kere mesaj atan bir bankadan bahsediyoruz. Spam sistemleri de bozulmuş, konuşamıyor da.. Bozulmuş spam cihazı, arıyor ama sesi çıkmıyor.. Sizin kampanyanıza da, size de, nalet olsun.. Keşke maaş müşteriniz olmasaydım, keşke.. Bu insanlar kibar konuşulmasından anlamazlar, kampanlayaları onlar için en önemli şeylerdir. Evde, işte, tuvalette, hastanede, diş hekiminde, tatilde, sağda, solda.. Kim veriyor size bu hakkı kim? 350928 sayfalık sözleşmeleirnizde karınca duası gibi yazmasını bahane olarak gösterirsiniz siz. Maaşımı alamicam o sözleşmeyi imzalamazsam eğer.. Benim bir ihtiyacım olunca ararım sizi arkadaş, aramayın beni.. Aradım telefon şubesini sinirle bağırdım, çağırdım oradaki kişiye. Onun kabaheti yoktur haliyle. Level 1 operatörden başka muhatap bulamayız ancak bu tip yerlerde.. Adamı hiyerarişi ile sindirirler..   Devamı için : TEB - sikayet - 444 0 666

19 Ağustos 2012 Pazar

aptana studio php otomatik tamamlama (aptana studio php autocomplete)

Öncelikle, henüz yapmadıysanız, Ubuntu'da Aptana Studio kurulumu için buraya göz atabilirsiniz. Aptana Studio'da yeni bir proje ile çalışırken, sadece projeyi eklemek yeterli olmuyor. Ek olarak bir ayar daha yapmak gerekmekte. Eklediğimiz projeya sağ tıklıyoruz ve açılan menüden en altta bulunan Properties'a geliyoruz. Açılan pencerede sol menüde Project Natures kısmına geliyoruz. Burada PHP'nin yanına bir tik koyuyoruz. Artık autocomplete özelliğimiz açık :) İyi çalışmalar! Devamı için : aptana studio php otomatik tamamlama (aptana studio php autocomplete)

ubuntu 12.04 aptana studio kurulumu

Php ile çalışırken windows üzerinde Zend Studio ve Netbeans, ubuntu üzerinde ise sadece Netbeans kullanıyordum. Bunların dışında da güzel IDE'lerin olduğunu biliyordum ve denemek istedim. Doğruyu söylemek gerekirse Zend Studio'da autocomplete sorununu çok fazla yaşamıştım. Autocomplete bir gün çalışıp bir gün çalışmıyordu :D Her ne kadar burada çözümü bulunmuş olsa da ben farklı ortamlarda çalışmayı denemek istiyordum. Oturdum araştırdım ve Aptana gibi bir nimet daha buldum. Kurulumunu anlatayım; Öncelikle Aptana Studio'nun kurulması için gerekli şeyleri şu şekilde install ediyoruz;
sudo apt-get install openjdk-7-jdk libjpeg62 libwebkitgtk-1.0-0 git-core
Aptana, resmi olarak OpenJDK desteklemiyor, o yüzden alternatif olarak SunJDK kullanabilirsiniz. O da şu şekilde;
sudo apt-get install libjpeg62 libwebkitgtk-1.0-0 git-core  sudo add-apt-repository ppa:webupd8team/java  sudo apt-get update  sudo apt-get install oracle-java7-installer
Araştırdığımda okuduklarım arasında en çok dikkat edilmesi gereken şeyin libjpeg62 olduğu söyleniyor, buraya kadar olan kurulumda libjpeg62 ile ilgili bir hata almamış olmanız gerekmekte. Şimdi sıra geldi Aptana Studio'yu download etmeye. Onu da buradaki adresten yapıyoruz. Download tamamlandıktan sonra bu kod ile extract ediyoruz.
sudo unzip [indirdiğiniz AptanaStudio dosyası].zip -d /opt
Herşey tamamlandı, şimdi de ana menüye bir kısayol ekliyoruz, onu da şu şekilde yapıyoruz;
wget http://www.samclarke.com/wp-content/uploads/2012/04/AptanaStudio3.desktop  sudo mv AptanaStudio3.desktop /usr/share/applications/AptanaStudio3.desktop

Kaynak

Devamı için : ubuntu 12.04 aptana studio kurulumu

18 Ağustos 2012 Cumartesi

php debug_backtrace fonksiyonu

dubug_backtrace

PHP'de debug_backtrace() fonksiyonu, çalıştırıldığı yere kadar çalışan tüm metodları, bunların argümanlarını kullanılan nesneleri classları, çalışan dosyanın tam yolunu vs bilgileri bize array olarak veren bir metoddur. Adı üzerinde, backtrace'leri debug ediyor :) Örnek olarak hazırladığım 2 adet php sayfası var. Bunlardan biri default.php diğeri start.php. Biraz karmaşık gibi görünebilir, debug_backtrace fonksiyonunun ne işe yaradığını gösterebilmek için tünel kazarak fonkisyondan nesne yaratıp metodlara gittim start.php içeriği şöyle;
  < ?php  require_once 'default.php';    start("dubluve", "dubluve.net");    function start($param1, $param2){  		$default = new DefaultClass($param1);  		$default->deneme();  }  ?>  
Burada default.php sayfasını require_once ile aldık, daha sanra start(); fonksiyonunu çalıştırdık. start(); fonksiyonu içerisinde ise DefualtClass için bir nesne yarattık, ardından da deneme(); metodunu çalıştırdık. default.php içeriği şöyle;
  < ?php  class DefaultClass{    	protected $_var = "a";  	private $_var2 = "b";  	public $value = "c";  	  	public function __construct($param){    	}    	public function deneme(){  		$this->_defaultDebug($this->_var);    	}    	protected function _defaultDebug(){  		$result = debug_backtrace();  		print_r($result);  	}    }  ?>  
Burada da DefaultClass clasımız var. Bu class için nesne yarattığımızda çalışan __construct metodu 1 adet parametre alıyor. Ardından çalıştırdığımız deneme(); metodu ise protected olan _defaultDebug(); metodunu çağırıyor. Burada da dubug_backtrace yapıyoruz. Ayrıca DefaultClass classında 3 adet property var. Şimdi bakalım bunun sonucuna;
  Array  (      [0] => Array          (              [file] => A:\deneme\default.php              [line] => 13              [function] => _defaultDebug              [class] => DefaultClass              [object] => DefaultClass Object                  (                      [_var:protected] => a                      [_var2:DefaultClass:private] => b                      [value] => c                  )                [type] => ->              [args] => Array                  (                      [0] => a                  )            )        [1] => Array          (              [file] => A:\deneme\start.php              [line] => 8              [function] => deneme              [class] => DefaultClass              [object] => DefaultClass Object                  (                      [_var:protected] => a                      [_var2:DefaultClass:private] => b                      [value] => c                  )                [type] => ->              [args] => Array                  (                  )            )        [2] => Array          (              [file] => A:\deneme\start.php              [line] => 4              [function] => start              [args] => Array                  (                      [0] => dubluve                      [1] => dubluve.net                  )            )    )  
Sonuç olarak dönen array içinde 3 adet array var, gelin bunları tek tek inceleyelim.
  • İlk arrayimiz, dubug_backtrace(); metodun içinde olduğu _defaultDebug metodunun çağırıldığı yer. yani deneme(); metodunun içerisi. [file] parametresinde bu metodu çağıran yerin tam yolu, [line] parametresinde ise o dosyada kaçıncı satırda çağırıldığı bilgisi var. [function] parametresinde de çağırılan metod var. Bu metodun içerisinde bulunduğu class [class] parametresinin içerisinde. [object] parametresi içerisinde de, nesnemiz ve bunun içerisindeki propertyler yer almakta. [arg] içerisinde de argümanlar mevcut.
  • İkinci arrayimizde ise, ilk arrayde çalışan metodun çağırıldığı yer var. yani deneme(); metodunun çağırıldığı yer. Biz deneme metodunu, start.php içerisinde bir nesne yaratarak çağırmıştık, diğer argümanlara baktığımızda bunu da görebiliyoruz.
  • Son arrayimizde ise start.php içerisinde çağırdığımız start(); fonksiyonu yer almakta, çünkü biz ilk oalrak bunu çağırdık. Burada argümanlarını da açıkca görebiliyoruz.
Gelen sonuçlarda [file] parametresindeki dosyanın tam yolunun, include işlemlerinde de işimize yarayabileceğini düşünüyorum.

debug_print_backtrace

debug_print_backtrace(); fonksyionu da debug_backtrace ile hemen hemen aynı işi yapmakta. Farkları, debug_backtrace kadar fazla detay vermemesi, ve geriye hiç birşey döndürmemesi. Geriye hiç birşey return etmiyor, sonucu direk ekrana basıyor. Şöyle ki, yukarıda verdiğim örnekteki _defaultDebug(); metodu böyleyken;
  protected function _defaultDebug(){  		$result = debug_backtrace();  		print_r($result);  	}  
şu hale getirirseniz;
  protected function _defaultDebug(){  		debug_print_backtrace();  	}  
debug_print_backtrace metodunun verdiği sonucu da görmüş olursunuz. Verdiğim örnekte aşağıdaki sonucu aldım;
  #0 DefaultClass->_defaultDebug() called at [A:\deneme\default.php:13]  #1 DefaultClass->deneme() called at [A:\deneme\start.php:8]  #2 start(dubluve, dubluve.net) called at [A:\deneme\start.php:4]  
Görüldüğü üzere çalışan metodları ve nereden çağırıldıklarını listelemekte. Devamı için : php debug_backtrace fonksiyonu

windows tracert komutu (tracert command)

tracert komutu, TCP/IP sayesinde kullanabildiğimiz bir komuttur. Bu komut, yazdığımız ip adresi ve ya domaine gönderilmek istenen veri paketinin, oraya ulaşana kadar geçtiği ağ geçitlerini tek tek listeler. Örneğin dubluve.net için tracert komutunun verdiği sonuçların bir kısmı şu şekildedir;
    1    96 ms   101 ms   101 ms  192.168.1.1    2     *      196 ms   101 ms  85.102.64.1.dynamic.ttnet.com.tr [85.102.64.1]    3   235 ms    91 ms   101 ms  81.212.77.253.static.turktelekom.com.tr [81.212.77.253]    4   225 ms   101 ms   102 ms  prtkl-4-1-bhclvlr-3-1.turktelekom.com.tr [212.156.118.22]    5   226 ms    27 ms    25 ms  byrmpsa-3-1-fth-2-1.turktelekom.com.tr [212.156.107.82]    6    46 ms    50 ms    51 ms  212.156.131.166.static.turktelekom.com.tr [212.156.131.166]  
tracert komutunun bir kaç parametresi de vardır, en çok kullanılanlar şu şekilde; -d : IP adreslerinin bilgisayar çözümlemelerini yapmadan sonuç verir. Yani 81.212.77.253.static.turktelekom.com.tr [81.212.77.253] yerine sadece 81.212.77.253 verir. Kullanımı => tracert -d www.dubluve.net -h maximum_hoops : Girilen adrese gitmek için kullanılacak geçit sayısını gireriz. Kullanımı => tracert -h 10 www.dubluve.net -w timeout : Her paket için geridönüş süresi belirtmemize yarar. Kullanımı => tracert -w 5 www.dubluve.net Bu komutun linuxcası için sizi şu adrese alalım : http://dubluve.net/2012/08/18/linux-mtr-komutu-linux-mtr-command Devamı için : windows tracert komutu (tracert command)

linux mtr komutu (linux mtr command)

Mtr komutu, gitmek istediğimiz ip adresine ulaşıncaya kadar geçtiğimiz ağları tanılamaya yarayan komuttur. Kullanımı ise oldukça basittir. Şöyle ki, terminalden; mtr --report www.dubluve.net yazdığımız zaman karşımıza o adrese gidinceye kadar geçilen ağları tek tek listeler, yanında da veri paketleri alış-verişi sırasında geçen süreyi ve gerekli detayları verir. mtr --report www.dubluvet.net yazdığımızda karşımıza çıkan sonuçların bir kısmı şöyledir;
  HOST: ubuntu                      Loss%   Snt   Last   Avg  Best  Wrst StDev    1.|-- 192.168.1.1                0.0%    10    1.0   6.4   0.9  53.4  16.5    2.|-- 85.102.128.1.dynamic.ttne 10.0%    10   27.7  30.6  20.7  60.5  13.6    3.|-- 81.212.77.253.static.turk  0.0%    10   21.0  52.6  21.0 122.5  44.6      |  `|-- 212.156.118.22    4.|-- fth-2-1-fth-3-1.turktelek 30.0%    10   21.2  37.4  21.2  90.3  25.1    5.|-- byrmpsa-3-1-fth-2-1.turkt  0.0%    10   35.4  48.8  22.0 140.4  33.4    6.|-- 212.156.131.166.static.tu  0.0%    10   87.8  52.0  20.6 105.1  30.0    
--report (veya -r) parametresini yazmazsak karşımıza anlık olarak değişen bir tablo çıkar. Bu tabloda, gitmek istediğimiz adrese gidene kadar geçtiğimiz ağ geçitleri ve anlık olarak gönderilen veri paketlerinin istatistikleri yer alır. mtr komutunun parametrelerinden en çok kullanılanları ise şöyledir; -n (--no-dns) : Sonuçlar kısmında ağ geçitlerinin bilgisayar isimlerinin görünmemesi için kullanılan parametre. Yalnızca geçilen IP adresleri listelenir. -i SECONDS (--interval SECONDS) : Gönderilen veri paketleri için süre sınırlaması yapabilmemize yarayan parametredir kendileri. -c COUNT (--report-cycles COUNT) : Gönderilen veri paketlerinin kaç kere gönderileceğine karar vermemize yarayan parametre. Yani biz 1 veri paketini bir ağ geçidinden 3 kere geçirip bunun sonucunu analiz edebiliriz. -4 parametresi, sadece IPv4 kullanarak ağ geçitlerine veri gönderilmesini sağlar, -6 parametresi ise aynı işlemi sadece IPv6 kullanarak yapar. Diğer parametrelere man mtr komutunu kullanarak ulaşabilirsiniz. Bu komutun windowscası işe şudur ; http://dubluve.net/2012/08/17/windows-tracert-komutu-tracert-command Devamı için : linux mtr komutu (linux mtr command)

17 Ağustos 2012 Cuma

Roundcube Sunucu hatasi: UID COPY: Quota exceeded (mailbox for user is full)

UID COPY: Quota exceeded (mailbox for user is full) hatasının sebebi :  Oradaki silmek tuşu aslında çöpe taşımak işine yarıyor. Mantıken de çöpe taşırken de ilk önce kopyalıyor, sonra gelen kutusundakini siliyor. Hiç kotası olmadığı için de bu ilk kopyalama işlemini yapamıyor. UID COPY: Quota exceeded (mailbox for user is full) hatasının çözümü :  silinmek istenen maile tıklayıp daha sonra shift+delete tuşlarına basarak çöpe taşımadan kalıcı olarak direkt silme işlemi yapabilirsiniz. Devamı için : Roundcube Sunucu hatasi: UID COPY: Quota exceeded (mailbox for user is full)

Zend Studio php otomatik tamamlama (autocomplete) hatasi ve cozumu

Zend Studio'nun asırlık bir sorunu var. Nedir bu sorun? Php de otomatik tamamlama (autocomplete) özelliğinin durduk yere bozulması veya hiç çalışmaması. Neredeyse bütün zend sürümlerinde en az 40 kere yaşamışımdır bu sorunu. En sonunda bir çözüm buldum. (İnşallah sizin için de çözüm olur, bu bug tam bir baş belası çünkü..)

Zend Studio 9 autocomplete hatasının çözümü

Projenizin klasörü içindeki .buildpath dosyasını bir metin editörü ile açın ve içine aşağıdaki kodu koyun. (Zaten aynısı varsa dokunmayın :) )
  <?xml version="1.0" encoding="UTF-8"?>  <buildpath>  <buildpathentry kind="src" path=""/>  <buildpathentry kind="con" path="com.zend.php.phpunit.CONTAINER"/>  <buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>  <buildpathentry kind="con" path="org.zend.php.framework.CONTAINER"/>  </buildpath>  
İşlem Sırası şu şekilde olmalı :
  1. Zend studio'da ilgili projeyi kapatın. (Soldaki explorer'daki projeye sağ tıklayıp close'a basın)
  2. .buildpath dosyasını yukarıda bahsettiğim şekilde editleyin. (bu dosya yoksa oluşturun. Windowsta ".buildpath" adında bir dosyayı ancak cmd ekranından yapabilirsiniz.)
  3. Zend Studio'da projeyi açın
  4. Üst menü'den Project kısmının altında Clean
sonra da ilgili projedeki herhangi bir php dosyası üzerine örneğin var_dump yazmaya bşalarken autocomplete özelliğinin çalıştığını göreceksiniz. (inşallah işe yarar ve görürsünüz) Bende bu şekilde düzeldi. Kaynak olarak da buradan yararlandım. Devamı için : Zend Studio php otomatik tamamlama (autocomplete) hatasi ve cozumu

16 Ağustos 2012 Perşembe

adam akilli kisiler #1 – Dennis M. Ritchie

Dennis MacAlistair Ritchie, birlikte çalıştığı arkadaşı Ken Thompson ile birlikte C programlama dilini ve Unix işletim sistemini yazan saygın bilgisayar mühendisidir. 1983'te Turing Ödülünü, (Genel işletim sistemi teorisinin geliştirilmesi ve bu teorinin UNIX işletim sistemi olarak gerçekleştirilmesi.) 1999'de Ulusal Teknoloji Madalyası Ödülünü aldı. 12 Ekim 2011'de hayatını kaybetmiştir. Ne yazık ki, insanlar Dennis Ritchie'nin yapmış olduğu işin önemini kavramak istemiyorlar. Kendisi günümüz bilişim teknolojisinin temelini hazırlamıştır. Wikipediada Dennis Ritchie : http://tr.wikipedia.org/wiki/Dennis_Ritchie Dennis Ritchie'nin çalışmalarını ve işlerini de bulabileceğiniz kendi sayfası : http://www.cs.bell-labs.com/who/dmr/ Devamı için : adam akilli kisiler #1 – Dennis M. Ritchie

14 Ağustos 2012 Salı

Yandex istanbul trafiginin stres haritasini cikardi

Yandex, İstanbul'da yaşayan kullanıcıların, sabahları İstanbul'un belirli noktalarından Avrupa veya Anadolu yakasındaki şehir merkezlerine ve akşamları şehir merkezinden o noktalara arabayla ulaşmak için direksiyon başında ne kadar zaman geçirdiğini analiz ederek, trafiğin yoğun olduğu saatlerde şehrin çeşitli semtlerinin arabayla ulaşılabilirliğini haritaya aktardı. Bu linkten ulaşabilirsiniz. http://company.yandex.com.tr/press_center/infographics/istanbul_heatmap.xml Devamı için : Yandex istanbul trafiginin stres haritasini cikardi

13 Ağustos 2012 Pazartesi

htpasswd sifre olusturmak ve ayarlamak

Herhangi bir yerde bir dosya olusturun. Bu linki kullanarak (kullanıcı adı ve şifre gireceksiniz) oluşacak datayıyeni açtığınız dosya içine kopyalayıp kaydedin. Şimdi Apachenin bu dosyayı ilgili sitemiz için görmesini sağlayalım. 2 yöntem var.

1. HTACCESS dosyası yardımıyla htpasswd ayarlamak

.htaccess dosyasının içinden yapabiliriz. Bunu anlatan bir sürü site var. (biri budur).

2. HTTPD.Conf içerisinden htpasswd ayarlamak

ilgili klasörü tagiyle apache ye tarif edelim. İçinde de htpasswd dosyasını gösterelim. Linux : AuthName "sifre giriniz" AuthType Basic AuthUserFile /var/www/sites/deneme/htpasswd_olan_dosya_adi require valid-user Windows : Windowstaki tek fark, dosya yollarının başında disk sürücünüzü yazmaktır. AuthName "sifre giriniz" AuthType Basic AuthUserFile D:/web/deneme/htpasswd_olan_dosya_adi require valid-user Daha sonra da , apache'mize restart attıktan sonra, işlem tamamlanmış olur. Devamı için : htpasswd sifre olusturmak ve ayarlamak

11 Ağustos 2012 Cumartesi

Domain ... has exceeded the max defers and failures per hour (6/5 (50%)) allowed. Message discarded.

Cpanel üzerinde çalışan bir mail sisteminiz var ve domainleriniz mail gönderirken bu hatayı alıyorsa, konu şu : http://www.mediaserve.com/knowledgebase/98/Why-am-I-getting-a-Domain-has-exceeded-the-max-defers-and-failures-per-hour-error-.html adresinde okuduğum bilgilere göre, Cpanel, Mart 2012 de çıkardığı sürüm ile birlikte (11.32 den itibaren) Gönderilen - gönderilemeyen ve başarısız mail için bir oran belirlenmesine müsaade ediyor. Örneğin Son 1 saatte 100 Mail gönderdiniz. bunların 40 ı başarılı, 60 ı da başarısız, veya ertelenmiş ise, sizin gönderim oranınız %40. Eğer Cpaneldeki bu ayarınız %40 ın altındaysa, bu domain üzerinden yeni bir mail gönderimi yapabilmek için bir süre beklemeniz gerekiyor. http://docs.cpanel.net/twiki/bin/view/AllDocumentation/WHMDocs/MailLimitingFeatures linkinde Cpanelin kendi dökümanlarında okuduğum bilgiye göre, "The percentage of Fail/Defer mails/hour to trigger hourly protection per domain" ; Yani, Bu % değeri, domain başına saatlik korumayı tetikler. Ancak bu ayar 5 mail gönderimi için 2 başarılı 3 başarısız ise de devreye giriyor. O yüzden bir alt limit belirleyebilseymişiz daha iyi olurmuş. Bu yüzden en az %75 vermenizi önerebilirim.

"Domain ... has exceeded the max defers and failures per hour (6/5 (50%)) allowed. Message discarded." hatasının çözümü :

İlgili ayarı değiştirmek için de Cpanel WHM ye root olarak login olduktan sonra, Soldaki hızlı arama kısmına "Mail" veya "Tweak Settings" yazın. Gelen linke tıklayıp ilgili sayfayı açın. Sayfa ortalarındaki "Maximum percentage of failed or deferred messages a domain may send per hour" yazan kısım, bahsi geçen ayarın yapıldığı yerdir. Umarım faydası olur. Devamı için : Domain ... has exceeded the max defers and failures per hour (6/5 (50%)) allowed. Message discarded.

Chrome Dil Ayarlarını Değiştirme

Siz de benim gibi uygulamaları Türkçe kullanmakta zorlananlardansanız ve en çok kullandığınız uygulamalardan biri olan (en azından benim öyle) Chrome'u da İngilizce olarak kullanmak istiyorsanız doğru yerdesiniz :)
  1. Öncelikle sağ üst köşedeki ingiliz anahtarı simgesine tıklıyoruz ve açılan menüden Ayarlar'ı seçiyoruz.
  2. Açılan sayfanın en altında Gelişmiş ayarları göster...'e tıklıyoruz.
  3. Burada Diller bölümünde Diller ve yazım denetleyicisi ayarları... butonuna tıklıyoruz.
  4. Açılan ekranda İngilizce'yi (veya istediğiniz bir dili) seçerek Google Chrome için bu dili kullan butonuna tıklıyoruz. İstediğiniz dil listede yoksa Ekle butonuyla dil ekleyebilirsiniz.
  5. Değişikliklerin geçerli olması için Chrome'u yeniden başlatıyoruz.
Not: Bilgiler, en güncel versiyon olan 21.0.1180.75 versiyonuna göre verilmiştir. Chrome sürekli kendini güncel tuttuğu için sizlerin de versiyonu yüksek ihtimalle budur.   Devamı için : Chrome Dil Ayarlarını Değiştirme

adam akilli kisiler #1 - Linus Torvalds

Linus Torvalds

Linux çekirdeğinin bulucusu. Dünyada bir çığır açacak bu işletim sisteminin çekirdeğini yazmaya tamamen spontane ve zevk amaçlı başlayan Linus Torvalds, çıkan ürünün sonunda şu anki haline varacağını bilmiyordu. Kendisi aynı zamanda bin yılın teknoloji ödülünün de sahibi oldu. http://www.bbc.co.uk/news/technology-18423502 linuxfoundation.org adlı sitede anasayfada gösterilen, Linuxun nasıl üretildiğini anlatan aşağıdaki kısa videoyu seyretmenizi öneririm. http://youtu.be/yVpbFMhOAwE Ayırca Wikipedia'daki Linus Torvalds içeriğine de bakmanızı önerebilirim. Devamı için : adam akilli kisiler #1 - Linus Torvalds

10 Ağustos 2012 Cuma

Java 7 - Birden Fazla Exception Aynı Alanda

Daha önceki Java versiyonlarında, bir try blogundan veya bir metottan birden fazla farklı exception atıldığında, her bir exceptionı ayrı catch bloğunda yakalamamız gerekiyordu.
public void throwTestMethod()           throws IllegalArgumentException, FileNotFoundException, NullPointerException  {  	// ...  }    public void throwTest() {  	try {  		throwTestMethod();  	} catch (IllegalArgumentException e) {  		// Do special process for IllegalArgumentException   	} catch (FileNotFoundException e) {  		// Do special process for FileNotFoundException   	} catch (NullPointerException e) {  		// Do special process for NullPointerException   	}  }
Aynı catch bloğunu kullanmanın yolu vardı;
public void throwTest() {  	try {  		throwTestMethod();  	} catch (Exception e) {  		// Do special process for all Exceptions  	}   }
Ancak, burada gördüğünüz üzere tüm exceptionları aynı blokta kullanmamız gerekiyordu. Örneğin, 3 exception atılan bir metod için sadece 2 exceptiona özel bir blok oluşturamıyorduk (aynı interface'i kullanmak gibi dolambaçlı yöntemler var tabii ki). Java 7 ile birlikte exceptionları catch bloklarında gruplayabilme özelliği gelmiş oldu. Artık,
public void throwTest() {  	try {  		throwTestMethod();  	} catch (IllegalArgumentException e) {  		// Do special process for IllegalArgumentException   	} catch (FileNotFoundException | NullPointerException e) {  		// Do special process for FileNotFoundException and NullPointerException   	}  }
şeklinde bir kullanım gerçekleştirebiliyoruz. Kod yeniden kullanılabilirliği için gayet faydalı bir geliştirme olmuş. Devamı için : Java 7 - Birden Fazla Exception Aynı Alanda

centos + cpanel sunucu tmp alanini artirma

Bezn sunucunuzdaki tmp alanı, geçici işlemlerinizi yapmaya yetmiyor olabilir. Bu durumda, /tmp alanınızı artırmanız gerekmektedir.

tmp alanı ne işe yarar

Bu tmp alanı windowstaki swap mantığında çalışmakta. Yani Ram'e yazılamayan işler tmp de diske yazılarak halledilebiliyor. Linus Torvald (linux çekirdeğinin bulucusu) da linuxta, memory yetmediği durumlarda hard diskin memory gibi çalışabilmesini başarabilmesi ile büyük bir yol katetmişti. İşte o memory gibi kullanılabilen alan genelde /tmp klasörü oluyor.

Cpanel yüklü Centos sunucuda tmp alanını arttırma

/scripts/securetmp dosyasını nano yada başka bir editör ile açın
  nano /scripts/securetmp  
içindeki my $tmpdsksize değerini 512000 den 1024000 a değiştir ve ardından kaydedip dosyayı kapatın. Daha sonra sırayla
  /bin/umount -l /tmp  /bin/umount -l /var/tmp  /bin/rm -fv /usr/tmpDSK  /scripts/securetmp  /scripts/restartsrv_mysql  /scripts/restartsrv_httpd  
Komutlarını çalıştırın. Bunları yaparken size soracak, securetmp bilgisayar açılrırken başlatılsın mı, bir sonraki başlangıç için başlatılsın mı? Bunlara da size uygun bir cevabı veriniz. benim denememde farketmedi.

/tmp boyutunu artırmanın diğer yolları

Ayrıca bu işlemi şuradaki kodlar ile de yapabileceğiniz söylenmiş, : http://www.hostco.com/manage/knowledgebase/21/Increase-cPanel-Securetmp-Partition-Size.html Farklı kaynak bulduğumda da buraya ekleyeceğim. Devamı için : centos + cpanel sunucu tmp alanini artirma

9 Ağustos 2012 Perşembe

Linuxta kalici alias vermek (.bashrc)

Linuxta bir kısayol komutu oluşturmak için alias komutunu kullanırız.
alias deneme='cd /home/emre/deneme'
Örneğin bu komutu yazdıktan sonra, komut satırına deneme yazdığımda, o /home/emre/deneme klasörüne gitme işlemini yapıyor. Ancak sistemden logout yaptığında bu alias gidiyor. Peki nasıl kalıcı alias vereceğiz? 1- /root/.bashrc dosyasını nano ile (veya herhangi bir text editörü ile) açınız.
nano /root/.bashrc
    2- Daha sonra düzenli olması için en alta inip az önce komut satırına yazdığınız şeyi (alias deneme='cd /home/emre/deneme') buraya yazın.     3- Daha sonra da kaydedip çıkın.    Sistemden bir kere logut yapıp tekrar giriş yaptığınzda yazdığınız komutu deneyin, çalıştığını göreceksiniz.    
Devamı için : Linuxta kalici alias vermek (.bashrc)

8 Ağustos 2012 Çarşamba

apt - Ubuntu paket yonetimi komutlari

apt-get update : uygun durumdaki güncellemeleri yeniler. apt-get upgrade : tüm paketleri upgrade eder. (en üst sürüme yükseltir) apt-get dist-upgrade : Ubuntu versiyonunu yükseltir. apt-get install {paket} : {paket} paketini yükler. apt-get remove {paket} : {paket} paketini siler. apt-get autoremove : eski paketleri siler. apt-get -f install : hatalı paketleri tamir etmeye çalışır. dpkg --configure -a :  hatalı paketleri tamir etmeye çalışır. (bir üst satırdakiyle aynı) dpkg -i paket.deb : paket.deb dosyasını yükler   Apt depolarının olduğu liste ise /etc/apt/sources.list dosyasıdır.   Devamı için : apt - Ubuntu paket yonetimi komutlari

7 Ağustos 2012 Salı

ping.eu - online network gerecleri

Aşağıdaki listedeki network gereçlerini kullandırmaya yarayan basit, sade, kullanışlı bir internet sitesi keşfettim. Siz de İhtiyacınız olduğunda kullanınız. Ping.eu
  • Ping
  • Traceroute
  • DNS lookup
  • WHOIS
  • Port check
  • Proxy checker
  • Bandwidth meter
  • Network calculator
  • Network mask calculator
  • Country by IP
  • Unit converter
Devamı için : ping.eu - online network gerecleri

Node.js nedir?

Node.js, Chrome'un Javascript motorunun üzerine kurulmuş, ölçeklenebilir, yazması kolay kurması kolay network uygulamalarıdır. Node.js olay güdümlü (event-driven) , bloklaman I/O (input output) modelini kullanır ki, bu da onu hafif ve etkili olmasına sebep olur. Canlı uygulamalar için bire birdir. Node.js Github üzerinden çatallayabileceğiniz bir projedir ve tam olarak şuradan çatallanabilir. Node.js Microsoft, Yahoo, Ebay ve bir çok güçlü referansa sahiptir. Bu noktada ya asli uygulamalar, ya da uygulamalarını destekleyecek yan uygulamalar için node.js kullandıklarını belirtmektedirler. Etraftan node.js ile ilgili topladığım küçük-büyük bilgileri de derleyip toplayıp, bir başka node.js yazısında sizlere aktaracağım. Devamı için : Node.js nedir?

6 Ağustos 2012 Pazartesi

Java 7 - switch İfadelerinde String Nesnesi Kullanımı

Java'nın 7 versiyonundan önce switch ifadelerinde sadece primitive tipler (char, int, byte, short), bunların wrapper sınıfları (Character, Integer, Byte, Short) ve enumareted tipler (enum) kullanılabiliyordu. Java 7 ile birlikte switch ifadelerinde artık String nesneleri de kullanılabiliyor. Eski usül bir örnek verecek olursak;
public static final int MONTH_JAN = 1;  public static final int MONTH_FEB = 2;  // ...    public void monthProcess (int month)  {      switch (month) {          case MONTH_JAN:          // ...          break;          case MONTH_FEB:          // ...          break;          // ...      }  }
Şimdi de aynı örneğin Java 7'de String nesneleriyle kullanımına bakalım;
public void monthProcess(String month) {      switch (month) {          case "Jan":          // ...          break;          case "Feb":          // ...          break;          // ...      }  }
Java 7'den önce bu örneği if-else if yapısıyla kullanıyorduk.
public void monthProcessWithIf(String month) {      if (month.equals("Jan")) {          // ...      }       else if (month.equals("Feb")) {          // ...      }      // ...  }
Artık doğrudan switch ifadelerinde kullanabiliyoruz. Ayrıca burada belirtildiğine göre Java derleyicisi switch ifadelerinde String kullanınca if-else if yapısına göre daha efektif byte-code üretiyor. Son olarak, switch ifadelerinde kullandığımız String ifadeleri büyük küçük harf duyarlı. Gözden kaçmasın. Ayrıca, Netbeans ve Eclipse (kullanıyorsanız) IDE'lerinin son versiyonlarını yüklemeyi unutmayın. Eski versiyonlar Java 7 desteği vermiyor.  Doğrudan java derleyicisi kullananlar için bu açıdan sorun yok. Devamı için : Java 7 - switch İfadelerinde String Nesnesi Kullanımı

5 Ağustos 2012 Pazar

web hata ayıklama (debug) metodolojileri ve teknikleri

Herkes bir yerlerde elbet bir hata ile karşılaşmıştır. Düşünsenize, o hatayı nasıl giderdiniz? Bir şekilde gidermişsinizdir değil mi? Hata ayıklamanın da yöntemleri mevcut. Bunları, kendim tecrübe ettiğim kadarını (genelde web ile ilgili) sizlerle paylaşmak istiyorum. Bunlardan bazılarını mecbur yapacağız, bazılarını ise alternatifleri arasından tercih edip yapacağız. Örnek Senaryo : Sitenizde bir kısmında hata meydana geldiği, bir tuşun işlevini yerine getirmediği belirtilmiş. Mecburen siteye girip, hatayı kendimiz elde etmeye çalışırız. Bu çok önemlidir. Elde edemiyorsak, hatayı raporlayan kişiyle iletişime geçmemiz gerekiyor. * Bir log yapısı ile bu hata loglanmış mı diye kontrol ederiz. hata loglanmış ise, logda yeterli bilgi muhtemelen vardır, buna göre aşağıdaki yöntemlere geçeriz.

Hata ayıklama için çalışma Şekilleri

  • Canlıda Çalışma : İnsan mecburda kalınca bazen canlıda çalışması gerekebiliyor diyebilirsiniz. Ancak benim bu konudaki tavrım net, canlıda bir şey çalışacak hale getirmeyin kendinizi. Yine de çalışmanız gerekiyorsa bu noktada, Sitenin hizmetini $_SERVER["REMOTE_ADDR"] yardımıyla sizin IP niz dışındakilere kapatınız. Sizin IP'niz dışındakilere güncelleme çalışması yapıldığını belirtiniz.
  • Test ortamında çalışma : Gerçek Projenin aynısını kendi bilgisayarınıza veya test ortamınıza aktararak hatayı orada elde edip, düzeltmeye başlayın.
  1. Yayını Durdurun : Eğer hatanın nüksetmesi kritik önem arz ediyorsa, yayını ivedilikle durdurun. Ziyaretçilere bakım çalışması bilgisi verin. Bu müşterilerinize veya ziyaretçilerinize sizin hatadan haberdar olduğunuzu ve üzerinde çalıştığınızı göstererek, size çalışmak için zaman sağlayacaktır.
  2. Mevcut durumu Garanti altına alın : Hem dosyaları hem de veritabanını daha kötü bir senaryo için yedek alın. Yedek aldığınız veriler, önceki yedeklerin üzerine yazmamasına özen gösterin. Sıkışırsanız, veya daha kötü bir senaryo oluşursa en son state'e (hatanın oluştuğu ilk noktaya) geri döneceksiniz.
  3. Hata mesajlarını artırın , kapalıysa açın : Php hata mesajlarını ve Loglama hizmetlerini yazılım katmanından artırabiliyorsanız artırın. Kapalıysa açın.
  4. Sistemi kurtarmayı aşamalandırın : Hatayı tespit ettikten sonra ne yapacağınızı düşünmeniz gerekir. Madde madde bunları çıkarın. Mümkünse her maddeden sonra yedek alıp, durumu garanti altına alın.
  5. Yazılım hizmetlerini durdurun : Örneğin, yazılımınızda bir mail atma servii var. Siz hatayı tespit ederken sistem herkese mail atıyor olabilir. Bunun önüne geçmek için bu tarz hizmetleri durdurun veya sadece kendinizi ilgilendirecek şekilde düzenleyin.
  6. Log ekleyin : Hatayı tespit etmek için loglama yapın, varsa eğer, loglanan veri miktarını artırıp, logu detaylandırın.
  7. Çözümü Uygulayın : Bazı hatalar barizdir. Bazı hatalar ise bazen oluşur ki en beter hatalar bu şekilde ara-sıra oluşan hatalardır. Çözümü uygulayıp durum değerlendirmesi yapın.
  8. Sorunun çözüldüğünü Teyid edip, siteyi ayağa kaldırın : Artık işlemler bittiğinde, hatanın tekrar oluşmaması için tedbirinizi de alın. Ve siteyi tekrar yayına alın.
  9. Fazladan almış olduğunuz yedekler ile ilgilenin. (Dilerseniz silin, dilerseniz bir kaç gün sonra silmek üzere bir cronjob oluşturun)
Devamı için : web hata ayıklama (debug) metodolojileri ve teknikleri

dubluve.net guncel isletim sistemi oranlari

Dubluve.net in istatistiklerine dayanarak insanların hangi browser'i kullandığını merak etmiştim, yanıtı da paylaşmak istedim.

Birinci Windows!

Google analytics'ten edindiğim verilere göre, dubluve.net'i ziyaret eden kullanıcıların neredeyse %90 ı Windows işletim sistemi kullanıyor. Bunda %95 türkiye ağırlık ziyaretçimizin olmasının etkisinin büyük olduğunu düşünüyorum. İlk 3 veriyi de aşağıda paylaşmak istiyorum. Güncelleme : 05.08.2012  
Browser 4 Ağustos 2012 % Ziyaret
1. Windows
87.95%
2. Linux
8.96%
3. Macintosh
2.45%
Dubluve.net in yazılım ve araştırma ağırlıklı içeriğinin hitap ettiği kesime benzer kesim için bilgiye ihtiyacınız olursa faydalanılabilir diye düşündüm. Devamı için : dubluve.net guncel isletim sistemi oranlari

2 Ağustos 2012 Perşembe

MySQL Table is marked as crashed and last (automatic?) repair failed hatasi

Bu hatayı repair table komutu çalışmayı bitiremedikten sonra tekrar repair etmeye kalktığınızda alırsınız. Normalde Mysql tablonuz crash olduysa;
  repair table tablo_adi;   
komutuyla tablonuzu tamir etmeye çalışabilirsiniz. Ancak gelin görün ki bu işe yaramıyor diyorsanız, en azından MyIsam tablolarda çalışabilecek bir yöntem daha var. /var/lib/mysql/database_adi yoluna gidin. (veya veritabanınızın dosyaları her neredeyse..)
  myisamchk -r -v -f --sort_buffer_size=128M --key_buffer_size=128M /var/lib/mysql/database_adi /tablo_adi.MYI  
şeklinde crash edilmiş bir myIsam motorlu tablonuzu kurtarabilirsiniz.

Tavsiye

Tabi ki bu hale gelip de bu yazıyı gördüyseniz, yedek alma sisteminiz henüz mevcut olmayabilir. Eğer kendinize ait bir sunucunuz var ise, Veritabanı yedekleme cronjobu eklemenizi tavsiye ederim. Buradan mysqldump ile yedek almayı öğrenin. Kendinize ait bir sunucunuz yok ise de hosting hizmeti aldığınız firmadan ISRARLA talep ediniz. Devamı için : MySQL Table is marked as crashed and last (automatic?) repair failed hatasi

yazılımcı adayına tavsiyeler #2

Bu yazıda, yazılımcı olmak isteyen genç arkadaşlarımıza bazı tavsiyelerim olacak. Önceki tavsiyelerime şuradan ulaşabilirsiniz. Tabi belirtmek gerekir ki yine nacizane görüşlerimi paylaşıyorum. Bana katılan veya katılmayan olabilir.

Diğer yazının başında da belirttiğim gibi olmazsa olmaz bir madde söylemek istiyorum : İngilizce MUTLAKA Öğrenin!

1 - Şimdi ne yapsam deme, listeye bak!

Elinde her zaman bir @todo listen olsun ki, mevcut işin bittiğinde veya elinde bir iş olmadığında neler yapacağın konusunda kararsız kalma. Bunu ister bilgisayar ortamında tut, ister çok sevdiğin defterinde. Fakat tut!

2 - Community ve stackoverflow.com

Dünyada yazılımla ilgilienen çooook fazla kişi var. Türkiyede kulaktan dolma bilgiler biraz daha ön planda olsa da, yurtdışında hem kalite olarak hem de sayıca çok fazla kişi bulabilirsiniz sizin yaptığınız şey ile ilgilenen. Yardım isteyin. Fikir isteyin. Community dediğimiz şey, açık kaynak veya ücretsiz yazılımlarda özellikle ayrıca faydalanılması gereken bir konu. Bu kişileri (doğru kişileri) ve bu siteleri (doğru siteleri) takip etmeniz çok iyi olacaktır. stackoverflow.com da bunlardan birisi. Arkadaşlarınızla yarışma yapın. Örneğin stackoverflow.com da 1 ay içinde kim en yüksek puana ulaşırsa, ona kendi içinizde bir ödül alın. Bu 2 açıdan önemli. * 1. si başkalarının kodlarında veya sorunlarında, onların deneyimlerini görüp, tecrübelerini edinebiliyorsunuz. * 2.si başkaları da sizin kodlarınıza veya sorunlarınıza yönelik çözüm önerileri sunuyorlar. Siz probleminizi çözmeye uğraşırken bilin ki başkaları da bunla ilgileniyor.

3 - Dünya Web'de buluşuyor.

Arkadaşlarınız ile bir yerde buluşackasanız bu cafe veya bir lokanta olabiliyor. Veya bir çay bahçesinde görüşebiliyorsunuz. Ancak ölçeği büyütürsek, tüm dünyanın bir araya gelebileceği tek yer Web (www).

Masaüstü yazılım devri azalıyor. İşletim sistemlerinin bile internetten açılması tasarlanan günümüzde, buna göre ya entgere sistemler üzerine ya da web üzerine çalışmanızı tavsiye ederim.

4 - Doğru çalışma ortamınızı (workbench) kurun

Bir işle ilgilenirken , o iş ile ilgili gereksinimler her ne ise, onu çalışma ortamınızda aynen simule etmeniz gerekiyor. Aksi takdirde canlı sistemde çalışmak ve hata üstüne hata yapmak zorunda kalabilrsiniz.

Örneğin facebook eklentisi geliştiriyorsunuz. Kendinize facebook ortamını simule edecek bir yapı kurun. Facebook api'sinden bir array bekliyorsanız, o array'i ilgili metodlarınıza siz gönderin. Facebook'a gerçekten bağlanma ihtiyacını local ortamınızda simule etmiş olursunuz.

5 - Hata loglama

Her ne geliştiriyorsanız geliştirin, kodunuzun bir yerinde hata olma olasılığını bilin. Ancak bu hatayı bize sadece geliştirici araçları raporlamaz. Bir şekilde canlıda çalışan kodlarınızda da hata meydana gelecektir.

Doğru bir hata loglama sistemi kurmanız gerekir demeden önce, sizi bunu önemini idrak etmeye davet ediyorum. ÇOK ÖNEMLİDİR.

Hataları doğru veya yanlış , bir şekilde loglamayı prensip haline getiriniz. Bir hata olduğunda ilk bakacağınız yerler buralar olması lazım. Daha sonra doğru loglamayı kendi ihtiyacınıza göre yaparsınız zaten.

Devamı için : yazılımcı adayına tavsiyeler #2