14 Ocak 2012 Cumartesi
trap.it
Trap.it size ilgi alanlarınıza göre kişiselleştirilmiş haber ve içerik sağlar. Nasıl? Yeni web uygulaması Trapit, haber okumada yeni bir dönem olarak nitelendiriliyor. İlgilendiğiniz alanları "traps" kısmından ekleyin. Gerisi Trapit'e kalmış. Trapit size seçmiş olduğunuz başlıklara göre filtrelenmiş haber ve içerik sağlar. Okudukça ve beğenme butonuna bastıkça da Sizi öğrenerek, Tam istediğiniz tür şeyleri önünüze getirecektir. Ayrıca? Geniş bir alanda kategori , tip ve başlık seçebilirsiniz. Bir haber okuduğunuzda onu beğenerek Trapit e kendinizi öğretebilirsiniz. Daha sonra okumak için haberlerinizi bir okuma listesine de gönderebilirsiniz. Facebookta sağda solda paylaşma zaten herkeste var. Bunda da var. Sonuç olarak Bu kişiselleştirilmiş haber okuyucusu rss lerinizi yönetirken en mantıklı uygulamanız olabilir. İlgisini çekenlere buraya alalım : trap.it Extra not : Üye olurken facebook hesabımla bağlanacağım diyelim, Her izni istiyor benden. Vermek istemiyorum arkadaşım? Devamı için : trap.it
SSL Nedir?
SSL Nedir? İnternette gezinirken veri güvenliği için SSL (Secure Socket Layer) güvenli soket katmanı ne manaya gelir? SSL ağ üzerinde veri transferi sırasında güvenlik ve gizliliğin sağlanması amacıyla Netscape tarafından geliştirilmiş bir güvenlik protokolüdür. 1996 yılında 3.0 versiyonunun çıkarılmasıyla hemen bütün Internet tarayıcılarının (Microsoft Explorer, Netscape Navigator vb) desteklediği bir standart haline gelmiş ve çok geniş uygulama alanları bulmuştur. SSL gönderilen bilginin kesinlikle ve sadece doğru adreste deşifre edilebilmesini sağlar. Bilgi gönderilmeden önce otomatik olarak şifrelenir ve sadece doğru alıcı tarafından deşifre edilebilir. Her iki tarafta da doğrulama yapılarak işlemin ve bilginin gizliliği ve bütünlüğü korunur. Veri akışında kullanılan şifreleme yönteminin gücü kullanılan anahtar uzunluğuna bağlıdır. Anahtar uzunluğu bilginin korunması için çok önemlidir. Örneğin; 8 bit üzerinden bir iletimin çözülmesi son derece kolaydır. Bit, ikilik sayma düzeninde bir rakamı ifade eder. Bir bit, 0 veya 1 olmak üzere 2 farklı değer alabilir. 8 bit ise sadece 28=256 olası farklı anahtar içerir. Bir bilgisayar bu 256 farklı olasılığı sıra ile inceleyerek bir sonuca ulaşabilir. Yani 1 sn den çok daha az bir sürede tüm ihtimaller hesaplanabilir ve doğru anahtar bulunarak şifre kırılabilir. SSL protokolünde 40 bit ve 128 bit şifreleme kullanılmaktadır. 128 bit şifrelemede 2128 değişik anahtar vardır ve bu şifrenin çözülebilmesi çok büyük bir maliyet ve zaman gerektirir. Kötü niyetli bir kişinin 128 bit'lik şifreyi çözebilmesi için 1 milyon dolarlık yatırım yaptıktan sonra 67 yıl gibi bir zaman harcaması gerekir. (bu süre ve maliyet teknoloji ilerledikçe azalmaktadır tabi ki..) Bu örnekten anlaşıldığı gibi SSL güvenlik sistemi tam ve kesin bir koruma sağlar. Yine de hackerlar çok güçlü şifreleri kırmak için hep basit ve alternatif yönetmleri incelerler. kimse 67 milyon dolarlık bir yatırım yapmaz tabi ki. Bunun yerine bilgisayarınıza bir virüs yüklemeyi tercih ederler. Sosyal medya ilerledikçe, sistemler insanların alışkanlıklarını tuttukça, benim hangi sitelere ne veri yazacağım da ileride tahmin edilebilir bir hale dönüşebilir. O yüzden kişinin kendine güzel prensipler belirleyip, her siteye farklı şifre vb kullanması her geçen gün daha önemli olacaktır. Devamı için : SSL Nedir?
Memcache in Telnet ile kullanımı
Memcache'in telnet üzerinden kullanımı. Linux işletim sisteminde de ps -ef komutuyla memcache'in hangi porttan çalıştığını görebilirsiniz. Memcache başlamadıysa konsoldan
memcached -m 128 -l localhost -p 11211 -d -u nobodyyazarak başlatabilirsiniz. (bu kod 128 MB ram ile 11211. porttan, nobody olarak çalıştırır.) Yine konsoldan
telnet localhost 11211yazarak bağlanınız. Supported Commands Example get deneme //varsa deneme adlı memcache verisini getirir. set deneme 0 60 5 //koşulsuz olarak deneme verisini set eder add deneme 0 60 5 // deneme adlı yeni bir key oluşturur. replace deneme 0 60 5 // deneme verisinin yerine yenisini yazar. append deneme 0 60 15 // deneme key'inin sonuna veri ekler prepend deneme 0 60 15 // deneme key'inin başına veri ekler incr deneme 2 // değeri sayısal olarak verilmiş deneme değerinin değerini 2 artırır. decr deneme 5 // değeri sayısal olarak verilmiş deneme değerinin değerini 5 azaltır. delete deneme // deneme adlı key i siler. flush_all // bütün belleği boşaltır. flush_all 900 // 900 saniye içindeki tüm verileri boşaltır. stats // genel istatistikleri basar. stats slabs // bellek istatistiklerini basar. stats malloc // bellek istatistiklerini basar. stats items stats details stats sizes // daha yüksek seviyeli atama istatisiklerini basar. stats reset // istatistikleri sıfırlar. version // versiyonu basar. verbosity // loglama seviyesini artırır. quit // telnet oturumunu kapatır. Bunlardan benim telnetten en sık kullandıklarım flush_all ve stats'dır. Diğer konulardaki işlemleri ilgili yazılım dillerinde yaptığımızdan, sadece istatistikleri görmek (kaç istek var kaçı memcacheten okudu, kaçında isabet var vb.. gibi..) benim için telnetten yeterli olabiliyor. Veri set etme ve replace etme olaylarını ben deneme hariç kullanmadım diyebilirim. Yine de ihtiyaç duyulabilir ve kullanılabilir. Devamı için : Memcache in Telnet ile kullanımı
11 Ocak 2012 Çarşamba
internet explorerdan muhteşem reklam
Internet explorer 6 da yaşanan hadiseyi herkes biliyordur herhalde. Bilmeyenler için hatırlatayım, microsoft kendisi bir açıklama yapmıştı ve sistemlerinde açık olduğundan dolayı "geçici bir süre başka bir browser kullanın" diye bir tavsiyede bulunmuşlardı. (Buyrun hackleme videsounu buradan seyredin : http://vimeo.com/8771582 )Bu gerçekten internet explorer'ı geliştiren microsoft için utanç verici olsa gerek. Şimdi de bir sitede tepede banner reklam gördüm. Internet explorer 9 a ait. Gördüğüm muhteşem reklam da şu :
5 kat daha güvenli demek. Gülerim ancak... Birlikte gülelim istedim. Devamı için : internet explorerdan muhteşem reklam
Symfony2 Veritabanı degisiklikler - database migrations
Bir süredir PHP framework'u Symfony2 ile ilgileniyorum. Daha önceki versiyonlarında biz yazılım geliştiricilerin hayatını kurtaran özellikleri olan Symfony2, yeni versiyonuyla daha performanslı, daha basit ve daha esnek bir yapıyla karşımıza çıkıyor. Her ne kadar eski versiyonda olan admin-generator gibi muhteşem araçları henüz "resmi" olarak içermese de (bazı geliştiricilerin yüklenebilir ek paketleri var), yeni projelerimizi Dubluve olarak Symfony2'de geliştirme kararı aldık :) Daha önceden Ruby On Rails'ta kullandığım ve çok faydalı bulduğum "database migrations" özelliğinin Symfony2'nin resmi paketlerinden biri olduğunu öğrendiğimde gerçekten çok sevindim. Database migrations, veritabanında sık sık değişiklik olan projelerde, bu değişikliklerin takibini kolaylaştıran ve değişiklikleri tek tek uygulamayı ve geri almayı sağlayan bir özelliktir. Her yapılan değişiklik için bir migration kaydı (Symfony2'de bu kayıt bir PHP sınıfı, Ruby On Rails'te Ruby sınıfıdır) oluşturulur. Bu sınıfta genel olarak iki farklı fonksiyon yardımıyla yapılan değişiklik ve geri alma işlemleri tanımlanır. Kurulum Symfony2'de database migrations özelliğini kullanmak için DoctrineMigrationsBundle isimli paketi kurmak gerekiyor. Hali hazırda çalışan bir Symfony2 projemiz olduğunu varsayarak, bu paketi kurabilmek için deps dosyasına aşağıdaki satırları ekliyoruz: [doctrine-migrations] git=http://github.com/doctrine/migrations.git [DoctrineMigrationsBundle] git=http://github.com/symfony/DoctrineMigrationsBundle.git target=/bundles/Symfony/Bundle/DoctrineMigrationsBundle Daha sonra paket kurulumunun başlaması için, komut satırında proje klasörüne geçiyor ve tüm paketlerin güncellenmesi için ilgili komutu çalıştırıyoruz. Projenin D:\ diskinde olduğunu vekullandığımızı varsayıyorum: cd d:\wamp\www\{proje_klasoru} php bin/vendors install Paket kurulumu tamamlandı, fakat şu an bu paketi projemizde kullanamıyoruz. Paketi projede kullanabilmek için önce bu paketin ait olduğu namespace'i projemizin görmesini sağlamalıyız. Bunun için projemizin app klasöründe yer alan autoload.php dosyasına aşağıdaki şekilde ekleme yapıyoruz: $loader->registerNamespaces(array( //... 'Doctrine\\DBAL\\Migrations' => __DIR__.'/../vendor/doctrine-migrations/lib', 'Doctrine\\DBAL' => __DIR__.'/../vendor/doctrine-dbal/lib', )); Bu fonksiyonda başka satırlar da mutlaka olacaktır. Biz ek olarak DoctrineMigrationsBundle paketini bir namespace ile de yüklenmesini sağladık. Bu iki satırdan 'Doctrine\\DBAL' ile başlayan satırı zaten array içerisinde görebilirsiniz, eğer mevcut ise eklemenize gerek yok. Önemli bir nokta: 'Doctrine\\DBAL\\Migrations' ile başlayan satırı, 'Doctrine\\DBAL\\' ile başlayan satırdan mutlaka önce kullanmanız gerekiyor. Bu fonksiyonda namespace'ler listedeki sırayla kayıt edildiğinden, eğer 'Doctrine\\DBAL\\' satırını daha önce belirtirseniz, 'Doctrine\\DBAL\\Migrations' satırındaki namespace kayıt edilmeyecektir, Symfony bunu 'Doctrine\\DBAL\\' namespace altında kabul edecektir. Namespace kaydını tamamladık, şimdi paketi yüklenecek paketler listesine eklememiz gerekiyor. Yine app klasöründeki AppKernel.php dosyasına şu şekilde ekliyoruz: public function registerBundles() { $bundles = array( //... new Symfony\Bundle\DoctrineMigrationsBundle\DoctrineMigrationsBundle(), ); } Paket Kullanımı Paketle ilgili tüm ayarlar bitti, şimdi biraz kullanımdan bahsedelim. Öncelikle belirtelim ki, DoctrineMigrationsBundle paketi, Symfony2'yi komut satırından kullanırken bize ek komutlar sağlıyor. Bu da tabii ki migration kullanmak için büyük kolaylık sağlıyor. Windows komut satırında, projemizin klasöründeyken, aşağıdaki komutu çalıştırarak yeni migration komutlarını görebiliriz: php app\console | find "migrations" Bu komutlardan örneğin "status", bize şu anki durum hakkında bilgi verir: $ php app\console doctrine:migrations:status == Configuration >> Name: Application Migrations >> Database Driver: pdo_mysql >> Database Name: {veritabani_adi} >> Configuration Source: manually configured >> Version Table Name: migration_versions >> Migrations Namespace: Application\Migrations >> Migrations Directory: D:\wamp\www\{proje_klasoru}\app/DoctrineMigrations >> Current Version: 2012-01-10 09:00:34 (20120110090034) >> Latest Version: 2012-01-10 09:00:34 (20120110090034) >> Executed Migrations: 2 >> Available Migrations: 2 >> New Migrations: 0 DoctrineMigrationsBundle paketi, hangi değişikliklerin yapıldığını, şu an projenin hangi değişiklik versiyonunda olduğunu, veritabanında kendi tablolarında tutuyor. Yani tablo değişiklikleri için bir nevi versiyon kontrolü sistemi oluşturuyor. İlk yüklemeden sonra, paketin kendi tabloları henüz veritabanında olmadığı için, bu tabloları oluşturmak gerekiyor. Bu tabloları oluşturmak için komut satırında aşağıdaki komutları çalıştırıyoruz: php app\console doctrine:migrations:diff php app\console doctrine:migrations:migrate Yeni Migration Yaratmak Paket tabloları yaratıldı. Artık migrations kullanarak tablolarımızda değişiklikler yapabileceğiz. O zaman hemen bir migration sınıfı yaratalım ve içeriğini inceleyelim :) Yine komut satırında aşağıdaki komutu çalıştırıyoruz: php app\console doctrine:migrations:generate Yeni bir migration dosyası ve sınıfı projemizin app\DoctrineMigrations klasöründe yaratılmış oldu. Bu dosyada up() ve down() isminde iki fonksiyon bulunuyor. Bu fonksiyonlardan up() ilgili migration uygulandığında yapılacak değişikliği, down() ise bu değişiklik geri alındğında yapılması gerekenleri içeriyor. Bir migration dosyasının içeriği örneğin şu şekilde olabilir: addSql('CREATE TABLE addresses (id INT NOT NULL, street VARCHAR(255) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB'); } public function down(Schema $schema) { $this->addSql('DROP TABLE addresses'); } } Her bir veritabanı değişikliği için yeni bir sınıf üretmek ve ilgili komutları burada tutmak biraz zor gelebilir. Fakat asıl güzel nokta burada ortaya çıkıyor: Symfony2'de veritabanı değişiklikleri otomatik tespit edilerek ilgili migration dosyası otomatik yaratılıyor. Mesela yeni bir alan ekledik, bunu ilgili entity sınıfına ekliyoruz, fakat migration oluşturmuyoruz. Komut satırından php app\console doctrine:migrations:diff komutunu çalıştırdığımızda, veritabanının mevcut hali ile entity sınıfları karşılaştırılıyor ve değişiklikler migration sınıfı olarak otomatik generate ediliyor. Bize sadece php app\console doctrine:migrations:migrate komutunu çalıştırmak ve yeni değişiklikleri uygulamak kalıyor. Eski Bir Migration Anına Dönmek Projemizin ilerleyen safhalarında, yaptığımız bazı değişiklikleri geri almamız gerekirse, istediğimiz herhangi bir ana dönmek de oldukça kolay. Yaratılan migration sınıflarının özel bir isimlendirme metodu olduğun fark etmişsinizdir. Bu sınıflar Version{migration_id}.php olarak oluşturulurlar. Buradaki migration_id ilgili değişikliği tekil olarak temsil eder. Eski bir migration anına (örneğin 20120110085916) dönmek için aşağıdaki komutu komut satırında çalıştırmak yeterli: php app/console doctrine:migrations:migrate 20120110085916 İşte bu kadar kolay! Hem database migration tanımıyla yeni tanışanlar, hem de daha önceden Ruby on Rails gibi framework'lerde bu özelliği kullanmış olanlar için umarım faydalı olmuştur. Zevkle yazılım geliştireceğiniz günler dilerim! Devamı için : Symfony2 Veritabanı degisiklikler - database migrations
windows memcache kurulumu (windows 7 dahil)
Memcache modülünün Windows üzerinde çalışan php-apache üzerine kurulması :
- Php extensions klasörünü kontrol edin. C:\php\ext gibi bir şey olması gerekiyor. (Wamp kullanıyorsanız c:/wamp/bin/php/php5.3.4/ext gibi bir şeydir.) Bu klasörün içinde php_memcache.dll adlı dosyanın olup olmadığına bakın. Yoksa bu dosyayı bir şekilde edinin. Buradan indirebilrisiniz isterseniz : http://downloads.php.net/pierre/php_memcache-2.2.6-5.3-nts-vc9-x86.zip
- Şimdi sistemde kullanılan php.ini dosyanızı bulun. wamp için wamp klasöründe bir yerlerde oluyor. Sağ alttaki wamp simgesine tıklayıp orada php kısmında php.ini ye basınca gelen dosyadır. bu dosyanın sonuna bir yere yeni bir satırda extension=php_memcache.dll yazın kaydedin.
- Apache nizi restart edin.
- memcached.exe yi çalıştırın. Buradan edinebilirsiniz : http://www.splinedancer.com/memcached-win32/ Normalde, memcached.org adresinde de var fakat, compile edilmemiş hali var ve compile etmek için bir sürü teane gerekiyor. İsterseniz oradan kurun. Memcached.exe çalışınca bir siyah pencere açılacak ve orada kalıcak, anormal bişey yok, (servis olarak arka planda çalıştırmak ile farkı yok, birazdan onu da anlatacağım.)
- Aşağıdaki kodu çalıştırın
< ?php $memcache = new Memcache; $memcache->connect("localhost",11211); # varsayılan ayar olarak memcache 11211 protu kullanır. belki localhost yerine 127.0.0.1 yazmanız gerekebilir. echo "Memcache versiyonu: " . $memcache->getVersion() . "
\n"; $tmp_object = new stdClass; $tmp_object->str_attr = "test"; $tmp_object->int_attr = 123; $memcache->set("key",$tmp_object,false,60); echo "Veriyi cache'te sakla.(Veri 60 saniye boyunca cachete tutulacak.)
\n"; echo "cacheten okuduğum değer :
\n"; var_dump($memcache->get("key")); ?> - Ekrana hata yerine yukarıdaki şeyleri görüyorsanız, memcache'iniz çalışıyor demektir. Memcacheinizi denemenizin bir diğer yolu da telnet üzerinden bağlanmaktır. (windowsunuzda telnet hizmetini aktif etmeniz gerekiyor, eğer açık değilse, bu konuyu zorlaştırmamak için burada anlatmıyorum.) cmd'den
telnet localhost 11211
diyeceksiniz. Bağlanırsa, tamam çalışıyordur. (Telnetten memcahce kullanabilemk için de ilgili parametreler vb ile ilgili bir yazı ekleyeceğim) - Extra not : memcached.exe yi arka planda çalışan servis olarak çalıştırmak için cmd yi yönetici yetkisiyle çalıştırın. (ctrl+shift+click). Daha sonra
c:/memcachein_bulunudugu_dizin/memcached.exe -d install c:/memcachein_bulunudugu_dizin/memcached.exe -d start
10 Ocak 2012 Salı
Linux/unix sleep komutu (linux/unix sleep command), örnek (example)
Sleep komutu, beklemek manasına geliyor. Tek yaptığı iş beklemek. Beklemenin ne gibi bir işe yaradığını ile ancak birazcık işin içine girmiş olanlar bilebilir diyorum. Bazı şeylerin yapıldığından emin olmak, bittiğinden emin olmak için, veya void metodlardan yanıt alınmayacağı durumlarda, istatistiksel olarak ne kadar sürdüğünü bilenler, bu komutu kullanabilirler. Linux gurusu olan biri, bir hatırlatıcı olarak bile kullanabilir bu komutu. Küçük bir örnek olarak
sleep 1h; mail -s "Ahmeti ara!" ben@mailadresim.com1 saat sonra mailime gelen "ahmeti ara" mailiyle birden irkilip, ahmeti aramam gerektiğini hatırlayabilirim. burada 1h deki h harfi hour yanisaat manasındadır. bir şey yazmazsanız saniyedir. (s) dakika için minute yani m harfi kullanmalısınız. Programcılar sleep komutunu genelde belirli bir süre kodu duraklatmak için kullanırlar. Siz de çok yük getirici bir işlem yapıyorsanız, ara sıra diğer kullanıcıların işlemlerini aksattırmamak için sisteme bir nefes aldırmak isteyebilirsiniz, öyleyse kullanın. Devamı için : Linux/unix sleep komutu (linux/unix sleep command), örnek (example)
Kaydol:
Kayıtlar (Atom)