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)