18 Temmuz 2012 Çarşamba

Obfuscation nedir? (php)

Obfuscation, türkçe karşılığı gizlemek olan bir işlemdir. Bu işlem, yazılımda, kodların anlaşılabilirliğinin daha az olması için yapılmaktadır. Yapılma amacı ise güvenlik ve gizliliktir. Obfuscator dediğimiz araçlar ise, yazdığımız kodları anlaşılabilirliği daha zor hale getiren, yani obfuscate işlemini yapan şeylerdir. İnternette çoğu yazılım dili için olduğu gibi php için de bir sürü obfuscator var. Bunlardan bir tanesi de bu adresteki obfuscator. İşleme de örnek verelim, ilk olarak benim yazdığım deneme.php dosyasını ardından da obfuscate ettikten sonraki halini yazıyorum.
  < ?php    class Deneme{            public function deneme(){          echo "deneme";      }            public function dubluve(){          echo "dubluve";      }        }    $dubluve = new Deneme();  $dubluve->deneme();  echo "
"; $dubluve->dubluve(); ?>
    < ?php class Deneme{public function deneme(){echo"den\x65m\x65";}public function dubluve(){echo"\x64\x75b\x6cuve";}}${"\x47\x4c\x4f\x42\x41\x4cS"}["\x72\x68\x77l\x6f\x65sd\x74"]="\x64\x75\x62\x6c\x75v\x65";${${"\x47\x4c\x4fB\x41L\x53"}["\x72\x68\x77\x6co\x65\x73d\x74"]}=new Deneme();$dubluve->deneme();echo"\x3c\x62r>";$dubluve->dubluve();  ?>  
Bu iki kodun da yaptığı işlemler aynı olacaktır. Yani obfuscation işlemi, kodun işleyişine bir etkide bulunmaz, sadece kodun anlaşılabilirlik derecesini zorlaştırır. Bir nevi kodumuzu kilitlemiş oluyoruz. :) Kodumuzu kilitliyoruz da, ne faydası olacak bunun? diye düşünüyorsanız, haklısınız. Obfuscate işlemini yapmak, kendimizi kandırmaktan başka bir işe yaramıyor ne yazık ki. Örneğin kodlarınız üzerinde düzenleme yapmak ve bugları gidermek sizin için oldukça zor olacaktır, bu bir dezavantaj. Ayrıca encrypt yaptığımız işlemin bir de decrypt hali mevcut. Yani obfuscate yaptığımız kodları, tam tersi bir işlemden geçirerek okunabilir(bilgisayarın değil, bizim okuyabilir olmamızdan bahsediyorum) hale getiren araçlar da mevcuttur. Onun da basit bir örneğine buradan göz atabilirsiniz. Devamı için : Obfuscation nedir? (php)

9 Temmuz 2012 Pazartesi

Sık kullanılan Linux komutları

Bash Komutları

uname -a : bu komut, sistem ve kernel bilgilerini verir. (kernel dediğimiz linux çekirdeğidir.) head -n1 /etc/issue : kullandığımız linux dağıtımını görüntüler. mount : dosya sistemini monte etmeye yarar date : bilgisayarın saatini ve tarihini görüntüler. uptime : sistemin ne kadar süredir kesintisiz çalıştığını, sistemdeki aktif kullanıcı sayısını ve sistemin yük ortalamalarını görüntüler. whoami : Who Am I? komutu, sistemdeki kullanıcı adınızı görüntüler man [command] : man kelimesinden sonra girilen komutun, hangi parametrelerle nasıl kullanılacağına dair bilgi verir.

Bash kısayolları

CTRL - z : o an çalışan komutun çalışmasını durdurur, beklemeye alır. CTRL - c : o an çalışan komutu sonlandırır. CTRL - a : komut yazdığımız sırada, satırın başına gider CTRL - e : komut yazdığımız sırada, satırın sonuna gider CTRL - u : komut satırında, yazdığımız komutun herhangi bir karakterinin üzerindeyken, satırın başından başlayıp bulunduğumuz karaktere kadar olan karakterleri keser CTRL - k : komut satırında, yazdığımız komutun herhangi bir karakterinin üzerindeyken, satırın sonundan başlayıp bulunduğumuz karaktere kadar olan karakterleri keser CTRL - r : girdiğimiz karakterlere göre, yaptığımız aramaları teker teker görüntüler !! : son çalıştırdığımız komutu tekrar çalıştırır. !abc : abc ile başlayan son komutu tekrar çalıştırır. !abc:p : abc ile başlayan, çalıştırdığımız son komutu gösterir. çalıştırmaz, sadece print eder. !* : son çalıştırdığımız komutun parametrelerini gösterir. !$ : son çalıştırdığımız komutun son parametresini gösterir.

Bash Değişkenleri

env : sistemdeki tüm değişkenleri listeler echo $name : name adındaki değişkenin hangi değere sahip olduğunu gösterir export name = value : name değişkenine value değerini atarız. $HOME : ana dizini gösterir. $PATH : path dizinin gösterir.

Dizin Komutları

pwd : o anda bulunduğumuz dizini gösterir. ls : bulunduğumuz dizindeki dosyaları ve klasörleri listeler. mkdir [directory] : yeni bir dizin yaratır. cd [directory] : bulunduğumuz dizinden farklı bir dizine geçmemizi sağlar. cd .. : bir üst dizine çıkmamızı sağlar.

Dosya Komutları

touch [filename] : yeni bir dosya yaratır. cat [file1] [file2] : dosyaları ard arda sıralayarak standart çıkışa yazar less [filename] : satırlarını numaralandırarak dosyanın içeriğini gösterir. file [filename] : Dosyanın türünü gösterir. cp [file1] [file2] : file1 dosyasını file2 dosyasına kopyalar. mv [file1] [file2] : file1 dosyasını file2 dosyasına taşır. bunu dosyayı farklı bir dizine taşırken, ya da dosyanın ismini değiştirirken kullanabiliriz. rm [filename] : dosyayı siler. head [filename] : dosyanın ilk 10 satırını görüntüler. tail [filename] : dosyanın son 10 satırını görüntüler. tail -f [filename] : dosyanın son 10 satırını, değiştikce canlı olarak görüntülemeye devam eder.

İşlem Komutları

ps : o anda kullandığımız işlemleri listeler psaux : o anda bilgisayarın da gerçekleştirdiği tüm işlemleri listeler top : anlık olarak işlemleri gösterir, sistemin ne kadar hafıza kullandığı vb. parametreler anlık olarak değişir. kill [pid] : yukarıdaki komutlarla listelediğimiz işlemlerin her biri bir PID'e sahiptir, bu PID'ı kullanarak işlemi sonlandırabilir.z pkill [name] : listelediğimiz işlemleri bu komutla isimlerini kullanarak da sonlandırabiliriz. killall [name] : name ismi ile başlayan tüm işlemleri sonlandırmaya yarar.

Arama komutları

grep [kelime] [file] : file dosyası içindeki kelime geçen tüm satırları gösterir. grep -v [metin] [file] : dosyada, içinde aranan metin geçmeyen satırları gösterer. grep -o [metin] [file] : dosyada aranan metin varsa, sadece onu gösterir grep -r [metin] [file] : içinde aranan metin geçen satırları sondan başa doğru gösterir grep -i [metin] [file] : büyük-küçük harf duyarlı arama yapar. find /dir/ -name name* : name ismi ile (name*) başlayan dosyaları bulur. find /dir/ -user name* : isminde name kelimesi geçen dosyaları bulur. find /dir/ -mmin num : dizinde, num (num yerine bir sayı yazılacak) dakikadan daha az saniye önce değiştirilmiş dosyaları bulur. whereis [command] : girilen komutun, binary / source / manual dosyalarının nerelerde olduğunu gösterir. locate [filename] : ismi girilen dosyanın bilgisayarda nelerde olduğunu listeler, aynı isme sahip birden çok dosyanın dizinlerini alt alta listeler. sistem indexi içinde arama yapmak gibidir.

IO (input/output) komutları

cmd < file : dosyayı, komut ile birlikte çalıştırır. Örneğin, gedit < deneme.txt yazdığımız zaman, deneme.txt dosyasının içeriğini alır, yeni bir txt dosyasıymış gibi gedit ile açar. cmd1 < (cmd2) : cmd2 komutunun çıktısını, cmd1 komutunun içerisinde kullanır. örneğin, cmd2 komutunda, grep ile bir arama yaparız, bunun çıktısını alıp cmd1 komutunda gedit ile yeni bir metin dosyası ile kullanabiliriz. cmd > file : cmd komutu ile elde edilen çıktıyı file dosyasına yazar. cmd 2> file : komut sırasında oluşan hataları dosyaya yazar cmd &> file : komut sırasında oluşan tüm çıktıları dosyaya yazar

Sırayla komut çalıştırma

cmd1 ; cmd2 : cmd2 komutundan sonra cmd1 komutu çalışır cmd1 && cmd2 : cmd1 komutu başarılıysa, cmd2 komutu çalışır. cmd1 || cmd2 : cmd1 komutu başarılı değilse, cmd2 komutu çalışır. cmd & : komut arkaplanda çalışır

ls komutu parametreleri

ls -a : dizindeki tüm dosya ve klasörleri listeler ls -R : dizindeki dosyaları, klasörleri ve klasörlerin içindeki dosyaları da listeler ls -r : dizindeki tüm dosya ve klasörleri tersten listeler ls -t : dizindeki klasör ve dosyaları son değiştirilme tarihlerine göre listeler ls -S : dosyaları ve klasörleri boyutlarına göre listeler ls -l : dosyaları ve klasörleri, detaylı şekilde listeler. (son değiştrilme tarihleri, oluşturan kullanıcı vs.) ls -1 : her dosya ve klasör ismini tek satır olacak şekilde listeler ls -m : dosya ve klasör isimlerini aralarına virgül koyarak listeler ls -Q : dosya ve klasör isimlerini çift tırnak (" ") içerisinde listeler

Nano komutları

CTRL-R : dosyayı açar CTRL-O : dosyayı kaydeder CTRL-X : dosyayı kapatır ALT-A : text seçmeyi başlatır, yön tuşları ile text seçilebilir CTRL-K : seçilen metni keser CTRL-U : metni yapıştırır ALT-/ : dosyanın sonuna gider CTRL-A : satır başına gider CTRL-E : satır sonuna gider CTRL-C : satırın kaçıncı satır olduğunu ve tüm dosya içerisinde % kaçıncı satır olduğunu gösterir CTRL-_ : belirtilen satıra gider CTRL-W : dosya içinde arama yapar ALT-W : arama yaptıktan sonra bir sonraki metni bulur CTRL-\ : bul ve değiştir işlemini yapar

Screen komutları

screen : yeni bir screen oturumu başlatır screen -r : screen oturumunu kaldığı yerden devam ettirir screen -list : aktif screenleri listeler CTRL-A : screen için ekran komutlarını etkinleştirir CTRL-A c : yeni bir pencere açar CTRL-A n : bir sonraki pencereye geçer CTRL-A p : bir önceki pencereye geçer CTRL-A " : terminalleri gösterir CTRL-A A : bash ismini değiştirmeye yarar CTRL-A K : screen oturumunu bitirir

Dosya izinleri

chmod 775 [file] : dosya modunu 775 olarak değiştirir chmod -R 600 [folder] : klasör modunu 600 olarak değiştirir chown [user]: [g-roup] [file] : dosyanın kullanıcı ve kullanıcı grubunu değiştirmeye yarar

Dosya izin numaraları

4 : okuma (read (r)) 2 : yazma (write (w)) 1 : çalıştırma (execute (x)) Devamı için : Sık kullanılan Linux komutları

8 Temmuz 2012 Pazar

LESS - Dinamik Stil (CSS) Dili

Twitter Bootstrap'i (ayrı bir konuda buna da değinmek gerekir) incelerken LESS ile karşılaştım. Bootstrap, LESS ile tamamen entegre şekilde çalışıyormuş ve gayet de iyi yapıyormuş :) Hemen derinlemesine LESS nedir ne işe yarar diye araştırmaya koyuldum ve sizlere de bahsetmek istedim. LESS, CSS'i dinamik hale getiren bir programlama dili. CSS yazarken dert yandığım değişken ve fonksiyon tanımlama işlevlerini CSS'te kullanılır hale getiriyor. Aslında CSS'te kullanılır hale getiriyor çok doğru olmadı, siz LESS yazıyorsunuz ve LESS derleyicisi onu CSS'e çeviriyor. Gerçekten çok hoşuma gitti. LESS'in sitesinden bir örnekle sizi baş başa bırakayım. Detaylarına sitesinden bakabilirsiniz. Öncelikle LESS kodu:
// LESS kodu  @color: #4D926F;  #header { color: @color; }  h2 { color: @color; }
LESS kodunu derleyince oluşan CSS kodu:
/* Derlenmiş CSS */   #header { color: #4D926F; }  h2 { color: #4D926F; }
Bir de fonksiyonumsu ile ilgili bir örnek alıntılayalım. Önce LESS kodu:
// LESS kodu  .rounded-corners (@radius: 5px) {   border-radius: @radius;   -webkit-border-radius: @radius;   -moz-border-radius: @radius;  }  #header {    .rounded-corners;  }  #footer {   .rounded-corners(10px);   }
Derlenmiş CSS kodu:
/* Derlenmiş CSS */
#header {   border-radius: 5px;   -webkit-border-radius: 5px;   -moz-border-radius: 5px;  }  #footer {   border-radius: 10px;   -webkit-border-radius: 10px;   -moz-border-radius: 10px;  }
Derleme konusu yine sitesinde mevcut. Javascript ile de derlenebiliyor ancak ben beceremedim. Windows için çok kullanışlı bir program buldum; SimpLESS. Kullanımı çok basit. Sadece LESS dosyanızı programa ekliyorsunuz. Kendisi arka planda çalışıyor ve dosyayı gözlemliyor. Dosyada değişiklik olduğu zaman otomatikman CSS dosyasına derliyor. Çok kullanışlı. Devamı için : LESS - Dinamik Stil (CSS) Dili

6 Temmuz 2012 Cuma

diagram designer - sekil cizme ve modelleme programı

Herkes yaptığı sistemi, mimarisini, çalışma şekillerini bir başkasına göstermek ister. Ancak koddan bir şey anlatamazsınız. Üstüne üstlük bir de hevesiniz kaçar.. Diagram designer, yazılımlarınızın mimarisini, akış diagramını, aklınızdakileri aktarabilecğeiniz küçücük (<2MB) ancak çok değerli bir şekil çizme programıdır. SmartDraw, Microsoft zımbırtıları ile çok kasmış ancak, bir türlü rahat edememiş biri olarak, bu programı keşfettiğime çok mutluyum. UML , akış diyagramı (flowchart), sistem tasarımı, vb.. gibi şeyleri rahatça çizebilirsiniz. Hızlı da bir kullanımı var. http://logicnet.dk/DiagramDesigner/ adresinden indirip, http://d16912502.u227.surftown.dk/DiagramDesigner/Templates/ adresinden de tüm çalışma setlerini (paletlerini) indirebilirsiniz. Tavsiye ediyorum. Devamı için : diagram designer - sekil cizme ve modelleme programı

5 Temmuz 2012 Perşembe

Zend framework Zend_Db_Adapter ile veritabani persistent connection olusturma

Zend framework ile Zend_db_adapter kullanarak herhangi bir veritabanına persistent (kalıcı) bğalantı oluşturmak istiyorsanız, config.ini dosyanıza (veya adı application.ini olabilir artık hangisi ise )
database.params.persistent = TRUE
yazmanız yeterli olacaktır. peristent connection nedir merak ediyorsanız, bir önceki yazım için tıklayınız. Devamı için : Zend framework Zend_Db_Adapter ile veritabani persistent connection olusturma

database - mysql persistent connection nedir?

Persistent connection nedir?

Persistent connection, bağlantının sürekli açık tutulduğu bağlanma biçimine denir. Normal olarak, yazılım dilleri bir veritabanına bağlanacağı zaman, bilgisayardaki bir port üzerinden veritabanına bağlantı açar. Daha sonra kodun sonunda, veya isteğe bağlı bir yerine bağlantıyı kapatır. Ayrıca connection kapatılmadıysa, yazılım dillerinde otomatik kapatma seçenekleri de bulunmaktadır. Örneğin 5 sn sonra kapat, 10 sn sonra kapat, biter bitmez kapat gibi seçenekler mevcuttur.

Persistent connection ın avantajları

Veritabanı bağlantısının otomatik. olarak açılıp kapatılması, en az ayar gerektiren şey olabilir. Ancak performansınızı persistent connection ile artırabilirsiniz. Bir web sayfası isteği geldi diyelim. Yazılım dili kodu çalıştırdı. Varsayalım ki 1 Query gerekti bu sayfa için. 1- Hazırda bir bağlantı yok. İşletim sisteminden ilgili portu kullanmak için müsade istedi. 2- Daha sonra ilgili porta bağlandı. 3- Sonra querysini çalıştırdı. 4- Sonucunu ilgili porttan okudu. 5- Kod bitince de mysql bağlantısını kapattı. persistent connection bu noktada, 1. aşamayı hızlandırır, 2. aşamayı direkt ortadan kaldırır, 4. aşamayı hızlandırır ve 5. aşamayı ortadan kaldırır. ... Baktığımızda query önemli bir maliyet olabilir tabi ki querysine göre değişir ancak, yüklü bir serverda bahsettiğim durumun bariz hız kazandıracağı aşikar. ---- Persistent connectionın diğer bir avantajı da , yüksek load altında, saçmalayan bir yapıya müsade etmemesidir. Persistent connection sayınızı yazılım dilinden ayarladığınızda, diyleim ki 200 verdiniz, sitenize aynı anda 1000 kişi bile gelse, serverinizin stabilliğini korur. Otomatik olarak bir sürü bağlantı açtırsaydık, bunları yönetmemiz imkansız olacaktır. (tabi kullanıcılar mysql bağlanamadı hatası alırlar, ancak siteniz çökmez bu daha önemlidir, en önemlisi de sistemi ince ayar yaparak bu ihtiyaçları da karşılayabilir hale getirmeniz sizin elinizdedir.) Mysql olarak anlattık hep, mysql de persistent connection kullanmanız inanılmaz kolay. tek yapacağınız mysql_connect yerine mysql_pconnect kullanmanız. Bir de eğer mysql_close kullanıyorsanız, bunlar kodunuzdan kaldırmanız. (tabi ki başka bir database e bağlanacaksanız o ayrı durum) ----- Bu sadece mysql için değil hemen hemen tüm veritabanlarında ortak olan bir özelliktir. --- Hele ki database serverini ayrı bir server olarak kullanıyorsanız, ve bu makina sadece database e özel bir makina ise şiddetle tavsiye ederim. Ben aktif olarak mysql ve mongoda persistent connection kullanıyorum. dipnot : Mysql ve Mongo persistent connectionları için PHP'de mod_php ile Apache 'yi tercih etmeyiniz. Nginx veya lighthttpd yanında kurulu bir phpfcgi(php fast cgi), yüksek load altında apacheden hem çok daha stabil çalışıyor, hem de performans olarak %500 den fazla hızlı çalışıyor. En önemlisi, yapacağınız ayarları "DOĞRU" olarak çalıştırıyor. Devamı için : database - mysql persistent connection nedir?

3 Temmuz 2012 Salı

Sunucumu Hangi İsletim Sistemi ile kurmaliyim?

Eğer bir sunucu kurmak istiyorsanız, burada sizleri ilgilendiren bir kaç şey paylaşmaya çalışacağım. İlk etapta ne kuracaksanız, hangi amaca yönelik bir sunucu kuracaksanız kurun, Microsoft Mahsüllerinden (klavye, mouse hariç) uzak durun. Her şeyi paralı bilindiği üzere. Ayrıca Windows Serverlar bir miktar stabilliği yakalamış olmasına rağmen, "Windows" kelimesinin altına bastıra bastıra uzuk durun derim. Burada mantıklı bir karar vermek istiyorsanız, community'si gelişmiş, bir işletim sistemi kurmanızın faydalı olacağını belirtirim. Bir web sunucusu kurmak istiyorsanız, Debian, Ubuntu, Centos veya Fedora nın server sürümlerini kurabilirsiniz. (desktop olanı farklı, server olanı farklı. desktop da pekala kuurlabilir ancak performans düşürmeye gerek yok) Bu noktada, az uğraşmak, çok iş yapmak, stabil çalışmak istiyorsanız, Ubuntu veya Debian önerebilirim. Ubuntu 12.04 versiyonu gelecek 5 yıllık bir destek ile birlikte taze yayınlandı. Tavsiye ederim. Program kurması en zahmetsiz olanı, ve en hızlı zamanda en fazla iş yapabileceğiniz bir ortamı çok daha kolay sağlarsınız. Bunun yanında Performansın en ufağı bile sizin için süper bir şey ise, CentOS kurmanızı öneririm. Çünkü bu işletim sistemi gereksiz en ufak bir kaynak bile harcamamaya özen gösteriyor. Yine de program vb kurmanız biraz dertli olsa da, işlerinizi yapabiliyor, stabil bir yapı kuraibliyorsunuz.   Bana sorarsanız eğer, Ubuntu-Server diyorum, 4-5 aydır. Kullanmaya başladıktan sonra, Diğer server işletim sistemlerinde yaşadığım külfetleri gördüm çünkü. Tabi ki bunlar kişisel görüşlerdir, tavsiyedir. Herkesin kararına saygılıyızdır :) Devamı için : Sunucumu Hangi İsletim Sistemi ile kurmaliyim?