31 Mart 2012 Cumartesi

Git Versiyon Kontrol Sistemine Giris

Git Nedir?

Daha önceki yazılarımızda versiyon kontrol sistemlerinin yazılım geliştirme için önemini belirtmiştik. Bu yazıda diğer versiyon kontrol sistemlerinden farklı ve  oldukça esnek bir yapıya sahip olan Git versiyon kontrol sistemini genel olarak anlatacağım. Git versiyon kontrol sistemi, Linus Torvalds tarafından BitKeeper yerine geliştirilmeye başlamış bir versiyon kontrol sistemidir.  Linux'un geliştirilmesinde kullanılan BitKeeper'ın açık kaynak lisansı kaldırılınca Git sistemi geliştirilmeye başlamıştır. Git geliştirilirken ön planda tutulan tasarım kriterleri dağıtık olması, tutarlı olması, büyük projelerde verimli bir şekilde çalışması ve doğrusal olmayan çalışma şekillerini desteklemesi olarak sayılabilir. Git sisteminin bazı özelliklerinin şöyle listeleyebiliriz:
  • Dağıtık (Distributed)  Sistem: Git işletim sisteminde, her kullanıcının lokal çalışma alanı bir sunucu görevi görür. Her kullanıcı kendi lokalinde versiyonlama ve geri yükleme yapabilir, SVN'de olduğu gibi başka sunuculara ihtiyacı yoktur. Dilediğinde lokalindeki değişiklikleri merkezi bir sunucuya atarak herkesle paylaşabilir. Birçok işlem lokalde gerçekleştiği için yapılan değişiklikleri listelemek, yenilerini commit etmek, geri almak, yeni bir branch açmak ve ya branch'ları birleştirmek işlemleri hızlıca gerçekleşir. Yani örneğin internet olmayan bir yerde tüm geliştirmelere devam edip, daha sonra uzak bir sunucuya değişiklikleri atabilirsiniz.
  • Performans: Birçok işlem lokalde yapıldığından, diğer versyion kontrol sistemlerine göre Git daha hızlı sonuç vermektedir. Ayrıca branch işlemlerinde de diğer sistemler gibi branch dosyalarını ek bir klasörde tutmayarak bir çeşit pointer mantığı kullanmaktadır. Böylece çok sayıda branch içeren büyük projelerde de iyi sonuç vermektedir.
  • Tutarlılık (Integrity) : Versiyon kontrol sistemlerinde versiyonlar arası geçişlerde bilginin bozulmaması ve tutarlılık çok önemlidir. Git, sisteme eklenen her bir dosyanın SHA-1 algoritmasıyla hash bilgisini oluşturarak bu bilgiyi kaydetmektedir. Bu nedenle versiyonlar arası geçişte bilgi kaybı olması söz konusu değildir.
  • Mevcut Protokollerle Entegrasyon : Git  sunucuları HTTP üzerinden hizmet verebilirken, SSH ve ya Git protokolü üzerinden de dosyalarınızı sunabilirsiniz.

Git Sisteminin İşleyişi

Git sistemini ve komutlarını doğru kullanmak için işleyişini net olarak anlamak gerekiyor. Aşağıda anlatılanlar ve şemayı anlamak oldukça kritik, bunları anladıktan sonra Git kullanmak çok kolay diyebilirim :) Git sisteminde dosyalarımızın bulunabileceği 3 durum bulunuyor:  modified(düzenlenmiş),  staged(gönderilecek), ve committed(gönderildi). Git'e eklemediğimiz fakat proje klasöründe yer alan dosyalar ise untracked (takip edilmiyor) durumunda oluyor. Dosyaları Git sistemine eklersek ve ya zaten eklenmiş olan dosyalarda değişiklik yaparsak bu dosyalar modified durumuna geçiyor. Modified durumundaki dosyaları bir sonraki commit işleminde gönderilmek üzere işaretlersek durumu staged olarak değişiyor . Daha sonra commit işlemi gerçekleştirdiğimizde sadece staged durumdaki dosyalar commit işlemine dahil ediliyor ve commit ile gönderiliyor, böylece committed  durumuna sahip oluyorlar.     Yukarıdaki şemada da genel kullanım sırasına göre klasörler arası geçişi görebilirsiniz. Önce bir Git klasöründen (git directory) ilgili dosyaları lokal çalışma alanımıza (working directory) alıyoruz (checkout). Daha sonra projede değişiklikler yapıp bu değişiklikleri gönderilecek olarak işaretliyoruz, ilgili dosyalar gönderilecekler alanına atılıyor (staging area). En sonunda da bu değişiklikleri gönderiyoruz (commit) ve ilgili Git klasörüne bunlar gönderiliyor. Burada Git klasörü SVN'deki gibi uzak bir sunucuda yer almıyor, her kullanıcının lokal çalışma alanı bir sunucu görevi gördüğü için, bu işlemler lokalde yapılıyor. Eğer durum geçişlerini tam olarak anladıysanız bundan sonraki yazılarda anlatacağım komutları anlamakta zorluk çekmeyeceksiniz demektir :) Git'e hoşgeldiniz diyelim o zaman :) Kaynaklar http://progit.org/book/ http://en.wikipedia.org/wiki/Git_(software) Devamı için : Git Versiyon Kontrol Sistemine Giris

30 Mart 2012 Cuma

php 5.4 Diziler (Array) – Php Yeni Özellikler

Php 5.4 ün içindeki yeniliklerden biri de dizilerdeki (array'lerdeki) kısaltılmış kullanım özelliğidir. Aşağıda bu kullanım ile ilgili bir örnek verdim.
  //Php 5.4'ten önce  < ?php  $array = array(      "key1" => "value1",      "key2" => "value2",  );    // PHP 5.4 'ten itibaren  $array = [      "key1" => "value1",      "key2" => "value2",  ];  
Ayrıca geri döndürdüğü (return değeri) array olan fonksiyonlarda da eskiden uğraştığımız ilk önce değişkene atama çilesi, php 5.4 ile bitmiş olacak. Artık fonksiyon çağırdıktan sonra doğrudan köşeli parantez ile istediğimiz indisi alabiliriz. Not : Bu durum optimize çalışmayan metodlar, fonksiyonlar yazmanıza sebep olabilir, bu konuda sistemin gereksiz enerji harcamamasına dikkat ediniz.
  < ?php  function getArray() {      return array(1, 2, 3);  }  // php 5.4'ten önce  $tmp = getArray();  $secondElement = $tmp[1];    //PHP 5.4'ten itibaren  $secondElement = getArray()[1];    // veya  list(, $secondElement) = getArray();  ?>  
Devamı için : php 5.4 Diziler (Array) – Php Yeni Özellikler

25 Mart 2012 Pazar

PHP gibi Javascript yazmak (PHP functions in JavaScript)

Bir web geliştiricisiyseniz, yolunuz bir yerde bir browser script dili olan Javascript ile mutalak kesişir. Browser üzerinde bir fonksiyon, bir işlem, bir doğrulama, vb.. yapmak istersiniz. Fakat Javascript'e o kadar da aşina değilsiniz, ne yapacaksınız? Burada Bir alternatif devreye giriyor. phpjs.org adresinde göreceğiniz projede, insanlar php fonksiyonlarını javascript e port ediyorlar. (port etmek = uyarlamak) yani ben bu siteden ilgili dosyaları çağırdığımda, artık javascriptte şunu çalıştırabileceğim ; bildiğimiz echo.
  echo('

abc

abc

');
Şu an sitede bir çok php fonksiyonu js'ye uyarlanmış şekilde var. Ayrıca bir çok fonksiyon da devam ediyor veya sırasını bekliyor. Eğer işinizi gördüyse, siz de bu OPENSOURCE projeye, port edilmemiş fonksiyonlardan birkaçını portlayarak katkıda bulunabilirsiniz. Devamı için : PHP gibi Javascript yazmak (PHP functions in JavaScript)

rich snippets şikayet sitesi

Google'ın rich snippets özelliği yavaş yavaş sitelere entegre olurken, bu özelliği fake olarak kullanan da bir çok site türedi. BUnlardan en önemlisi wordpress eklentisi olanlar. Bunun yanında Eticaret sitelerinde, ürün yorumu olarak kullananlar da var tabi yine fake. Bu fake snippetl verilerini şikayet edebileceğimiz bir adres mevcut. aşağıda paylaşıyorum. Umarım haksızlığın bir miktar önüne geçebilirler. http://support.google.com/webmasters/bin/request.py?contact_type=rich_snippets_spam Devamı için : rich snippets şikayet sitesi

23 Mart 2012 Cuma

Linuxta Bash ile Döngü Örnekleri

Linux / Unix işletim sisteminde shell seviyesinde döngüleri nasıl yaparım? 2,3 Parametreli bir döngü algoritmasını nasıl yazarım? Döngü demek , aynı işlemlerin veya birbirine çok yakın işlemlerin tekrar tekrar yapılması demektir. Peki Shell seviyesinde bu işlemleri nasıl yaparız? Ön Not : bu kodları herhangi bir dosyaya yazıp daha sonra bu dosyayı sh komutu ile çalıştırırsanız da olacaktır. Ben bu şekilde deniyorum.

For döngüsü :

yazımda numaralı çalışma şekli aşağıdaki gibidir. Döngü 5 kere dönecektir. Ayrıca döngü içinde değişkeni de kullanabilirsiniz. Normal Bash yani.
  #!/bin/bash  for i in 1 2 3 4 5 .. N  do  	echo "$i inci defa calisiyor"  done  
Ayrıca aşağıdaki şekilde döngüdeki değişkeni örneğin 2şer 2şer artmasını sağlayabiliyorsunuz.
  #!/bin/bash  echo "Bash versiyonu ${BASH_VERSION}..."  for i in {0..10..2}    do       echo "$i inci defa calisiyor"   done  

C stili for döngüsü :

  #!/bin/bash  for (( c=1; c< =5; c++ ))  do  	echo "$c inci defa calisiyor"  done  

Sonsuz Döngü :

Önemli olarak demeliyim ki ; Sonsuz döngü kullanınca sistem kaynaklarını çok basit bir komutla tüketebilirsiniz. Bu yüzden burada sleep komutu koyup işleminizi en azından saniyede 1 yapmanızda yarar var.
  #!/bin/bash  for (( ; ; ))  do     sleep 1     echo "sonsuz dongu [ cikmak icin CTRL+C yapınız. ]"  done  

Duruma bağlı döngüler, (break komutuyla birlikte )

Aşağıdaki kod, /etc/ dizinindeki tüm dosyaları okuyup bunları bir dongu halinde gezer. dogru dosyayı bulunca , istdigi islemi yapar (dosyanin icinde kaç tane nameserver varsa bunları listeler) ve donguden cıkar.
  #!/bin/bash  for file in /etc/*  do  	if [ "${file}" == "/etc/resolv.conf" ]  	then  		countNameservers=$(grep -c nameserver /etc/resolv.conf)  		echo "${file} dosyasında toplam  ${countNameservers} nameserver tanimlanmis"  		break  	fi  done  
break, gibi yine continue özelliğini de kullanabilirsiniz. Ayrıca döngüde if içinde döngü yapılan klasör içindeki dosyaadı.bak dosyayı varsa bir işlem yapmak istiyorsanız veya istemiyorsanız, (örnğein yedeği varsa yedeğini alma işlemini continue edebilirsiniz) döngüde aşağıdaki if komutunu kullanabilirsiniz.
  #!/bin/bash  FILES="$@"  for f in $FILES  do          # dosyaadı .bak yedek dsoyası varsa, diğer dosyaya geç  	if [ -f ${f}.bak ]  	then  		echo "$f dosyasini atliyoruz..."  		continue  # sonraki dosyayı okuması icin cp komutunu geçiyoruz.read next file and skip cp command  	fi          # bu noktada yedek dosyanin olmadigi durum algilandigindandosyayı kopyalamak icin cp komutu kullaniyoruz  	/bin/cp $f $f.bak  done    Ekstra olarak da farkettiğiniz gibi, bir bash dosyası içinde yorum eklemek istiyorsanız başına # koymanız da yeterli. Umarım işinize yarar.   
Devamı için : Linuxta Bash ile Döngü Örnekleri

Sifremi bana geri gonderebilen site - Yemeksepeti

Bir zamanlar abidik gubidik sitelerde yaşadığım hadise tekrardan başıma geldi. Gece yarısı, yemeksepeti.com'dan yemek söylemek için sitelerine girdim ama şifremi hatırlamıyordum. Hatırlatma kısmından email adresimi yazdım. Güvenlik kodunu doldurdum. Kullanıcı adı ve şifrem emailime geldi. Ama yeni bir şifre değildi gelen, eski şifremi geri göndermişlerdi. "YANİ BU VATANDAŞLAR, BENİM ŞİFREME ERİŞEBİLİYORLAR" En junior programcı bile üyelikli basit bir web sitesinde, şifreleri md5 leyerek saklar. bu belirli bir level güvenlik kademesi sağlar. Ama şu başıma gelen olaydan inanın tiksiniyorum. Bu yüzden site adını da açık açık belirttim. Diyeceksiniz tabi her siteye farklı şifre girmemiz gerekiyor. İyi güzel de, hadi ben yaparım bi şekilde de, % kaç oranla yapılır bu her siteye ayrı bir şifre belirleme olayı? Devamı için : Sifremi bana geri gonderebilen site - Yemeksepeti

windows sembolik link olusturma (symbolic link)

Daha önceki bir yazımda sembolik link kavramını ve linuxta sembolik link oluşturmayı anlatmıştım. (İlgili yazı için tıklayınız.) Şimdi de windows üzerinde bu işlemi nasıl yapacağınızı göstermek istiyorum. Başlat->çalıştır->cmd yazıp enter'a basınız. (veya windows + R ye basınız ve cmd yazıp enter'a basınız.) Siyah komut ekranınızın açılmış olması gerekiyor ve ekranda C:\Windows\System32> yazması gerekiyor. Eğer yazmıyorsa C:\Windows\System32 klasörüne gitmeniz gerekiyor. (sırasıyla c: yazıp enter'a, cd Windows yazıp enter'a sonra da cd System32 yazıp enter'a basınız.) daha sonra yapacağımız işlem ise yine Linux'takine çok benzer ama argümanları tam tersi : ilk parametre linkin bulunacağı adresi, 2. parametre ise ana dosyayı veya klasörü işaret ediyor.
  C:\Windows\system32>mklink D:\linkin\bulunacagi\klasor\deneme.txt D:\ana\dosyanin\klasoru\deneme.txt   
Burada linuxtan farklı olarak bir durum daha var. Klasör linklemek istiyorsak bir parametre daha (/D parametresi) eklememiz lazım. Bu işlem de şöyle oluyor :
  C:\Windows\system32>mklink /D D:\deneme\link D:\ana\klasor  
Umarım işinize yarayacaktır. Not : Windows 8 de denemedim, deneyen varsa bizimle paylaşırsa sevinirim. Devamı için : windows sembolik link olusturma (symbolic link)

21 Mart 2012 Çarşamba

Firefox Menü Çubuğunu Gösterme

Mozilla Firefox'un son sürümlerinde (sanırım 4 sürümünden itibaren) eski usül menü çubuğunu gizleme (tamamen kaldırılmadı) yoluna gitti. Onun yerine pencerenin sol üstünde bulunan  biraz daha modern bir menü sistemi getirildi. Eski menü çubuğundan daha derli toplu durmasına rağmen, ben eski menü çubuğunu kullanmak istiyorum diyenler için hemen bir çözüm sunalım. Eğer geçici olarak göstermek istiyorsanız halihazırda ekranda menü çubuğu gözükmüyor iken klavyeden Alt tuşuna basarak menü çubuğunu geçici olarak gösterebilirsiniz. Yok kalıcı olarak açık bırakmak istiyorum diyorsanız; yeni menüden (ilk anlattığım menü) Seçenekler > Menü Çubuğu yoluyla veya eski usül menü çubuğundan (ikinci anlattığım menü) Görünüm > Araç Çubukları > Menü Çubuğu yoluyla menü çubuğunu kalıcı hale getirebilirsiniz. Devamı için : Firefox Menü Çubuğunu Gösterme

linux sembolik link nedir linux sembolik link olusturma (symbolic link)

Sembolik bağ (symbolic link) Nedir?

İşletim sistemlerinde her dosya bir dizinin (klasörün) içindedir. Bizim dosyamız bir klasörün içinde bulunuyor ve aynı zamanda farklı bir klasörde daha olmasını istiyorsak, ama bunu yaparken dosyanın kopyalarını oluşturmak istemiyorsak, (sadece oradan da erişilebilmesini istiyorsak) dosyayı diğer klasöre kopyalamak yerine sembolik bağ (symbolic link) oluşturabiliriz. Böylece tek dosya olmuş olacak (değişiklik yapıldığında her yere tek tek kopyalamak zorunda kalmayacaksınız) hem de diğer link oluşturulan yerlerden de erişim verebilmiş olacaksınız. Disk maliyeti de daha düşük olacaktır. Sembolik link ile klasörleri de linkleyebilirsiniz. Bu sayede bir sürü link oluşturmanız gereken durumları da sürklase etmiş olursunuz.

Linux için sembolik link oluşturma şöyle yapılır :

  ln -s /dosyanin/bulundugu/dizin/dosya.txt /linkin/olusturulacagi/dizin/dosya.txt  
Aynı şekilde linklemenin bir klasör için de yapabileceğinizi belirtmiştim yukarıda. Dosya adı yerine klasörü kullandığınızda da klasör için linkleme yapmış olursunuz. Özellikle sunucularda, paket program mantığında çokça kullanabileceğiniz bu işlem ile, 200 Account olan bir serverda kaynak dosyalardan dolayı oluşan disk maliyeti 1/200 oranına azalmış olacaktır. yani %99,5 avantajlı olacaksınız. Dosya okuma hızı konusunda da avantajlı olacaksınız. Çünkü işletim sistemi (günümüz işletim sistemlerinin hemen hepsinde var bu) sürekli kullanılan dosyaları önbelleğine alacaktır. Ama siz dosya okuma konusunda daha da hız istiyorsanız, bu konuya farklı bir yazıda değineceğim. (Bu konuda bir kaç şey daha yapılabilir.) Devamı için : linux sembolik link nedir linux sembolik link olusturma (symbolic link)

20 Mart 2012 Salı

javascript fonksiyon var olma kontrolü (function_exists)

Herhangi bir yazılım dilinde, kullanacağınız bir fonksiyon, tanımlı mı diye yer yer kontrol etmek isteriz. Bu javascript'te de mümkün. 10 dakikalık araştırmamda 2 farklı çözüm buldum ve denedim, 2 si de çalışmaktadır. 1. si :
  function deneme() {  	  }    if(window.deneme) {    alert('deneme fonksiyonu var');  }  else {    alert('deneme fonksiyonu yok');  }  
deneyin göreceksinz. 2. si
  function deneme() {  	  }  if(typeof deneme== 'function') {     alert('deneme fonksiyonu var');   }else{    alert('deneme fonksiyonu yok');  }  
Örnekleri Doğrudan kopyala/yapıştıryaparsanız, var diye alert edecektir. Eğer deneme adlı fonksiyonları silerseniz de yok diye alert edecektir. Böylece siz de bir fonksiyon yoksa boşu boşuna o şeyi çalıştırmaya çalışmak zorunda kalmayacaksınız. Ayrıca denedim, Internet explorer'da tabii ki uyuz bir durum oluşuyor. Deneme sayfanızı açarken bile "Activex içeriği otomatik engellendi" diye bir uyarı çıkıyor ve yanında izin ver tuşu çıkıyor. İzin vermezseniz sayfa komple açılmıyor. Internet explorer ile bir süre daha (tarihin sayfasına gömülene kadar) problem yaşamak istemezsiniz. Bu yüzden bunu kullanacaksanız; kendi test ortamınız için kullanmanızı, veya chrome , firefox eklentilerinizde kullanmanızı tavsiye ederim. Devamı için : javascript fonksiyon var olma kontrolü (function_exists)

19 Mart 2012 Pazartesi

Diigo: Bookmark Yöneticisi

Bookmark'larımı yönetebileceğim güzel bir uygulama var mı diye ararken belki de aradığımdan da iyi bir uygulamaya rastladım: Diigo. Aslında Diigo, bir Bookmark Yöneticisi'ne göre oldukça güzel özellikleri olan bir uygulama. Genel olarak özelliklerini sıralarsak: * Klasör yapısı yerine, kaydedilen sayfalara tag(ya da taglar) veriyoruz, daha sonra aramak istediğimiz sayfaları taglara göre aratabiliyoruz. Yani mesela Linux'ta bash ile ilgili önceden kaydettiğimiz sayfaları arıyorsak, Linux ve bash taglarını aratarak, bu taglar ile ilgili kaydettiğimiz tüm sayfaları bulabiliyoruz. Diğer bookmark yöneticilerini çok fazla bilmiyorum ama klasör yapısı kullanan sistemlere göre bence avantaj. Hele ki benim gibi sınıflandırırken fazla detaya giriyorsanız. Hangi kategorinin klasörüne koyacağınızı düşünmek yerine istediğiniz kategorinin tagını yazın gitsin. * Highlight özelliği: Bir sayfadaki herhangi bir yazıyı seçip highlight yapabiliyorsunuz. Bu highlight yaptığınız kısmı daha sonra sayfayı ziyaret ettiğiniz zaman görebildiğiniz gibi, my library kısmında da görebiliyorsunuz. Ayrıca burada sayfanın tamamını da izleyebiliyorsunuz(Sayfayı ayrıca açmadan). * Not ekleme: Highlight yaptığınız metin hakkında (ya da resim vs. başka birşey) kendinize not yazabiliyorsunuz. Bu da çok faydalı bi özellik olabilir. * Resim kaydetme özelliği: Ben henüz denemedim ama kaydetmek istediğiniz bir resmi, metni highlight yapma mantığı ile aynı şekilde kaydedip gerekirse not ekleyebiliyorsunuz. * Son olarak da benim için en ilgi çekici özelliklerinden biri, network özelliği. Twitter'daki gibi insanların bookmarklarını takip edebiliyorsunuz ya da kişiler sizin bookmark'larınızı takip edebiliyor. Paylaşmak istemediklerinizi de "private" kutucuğunu tıklayarak gizleyebiliyorsunuz. Henüz yeni kullanmaya başladım uygulamayı, belki başka özellikleri de vardır. Şu ana kadar kullandığım kadarıyla bookmark manager ihtiyacı duyan ya da başka bir uygulamayı kullanan arkadaşlara şiddetle tavsiye ediyorum. Devamı için : Diigo: Bookmark Yöneticisi

18 Mart 2012 Pazar

php 5.4 yeni ozelikler - traits

Php 5.4 ile ilgili yeni özelliklerden bir tanesi trait kavramı. trait denilen şeyin bir türkçe karşılığını bulamadım. Bir class'ın birden çok miras alması durumu php'de olmayan bir şey. Bildiğim kadarıyla sadece C++'ta var. Traitler bizi birden çok miras alma durumlarına benzer ihtiyaçları çözmek için getirilmiş bir yenilik gibi gözüküyor. Normalde 2 adet farklı classımız aynı bir fonksiyonu kullanması gerekiyorsa, o iki class'ın parent sınıfı olarak tanımlar, o metodu onun içine koyar, 2 farklı classımızı da ondan türeterek bu konuyu halledebilirdik. Peki ya, zaten extend ettiğimiz bir class var ise, ve e ekleyeceğimiz metod ile alakasız ise o zaman ne yapacağız? Bu durumda duplicate (tekrarlayan) kod yazmamak için traitleri kullanmamız faydalı olabilir. Php'nin sitesindeki örneği vereyim.
  < ?php  trait ezcReflectionReturnInfo {      public function getReturnType() { /*1*/ }      public function getReturnDescription() { /*2*/ }  }    class ezcReflectionMethod extends ReflectionMethod {      use ezcReflectionReturnInfo;      /* ..bişeyler bişeyler... */  }    class ezcReflectionFunction extends ReflectionFunction {      use ezcReflectionReturnInfo;      /* .. bişeyler bişeyler... */  }  ?>  
Yukarıda 1 trait , 2 class mevcut. 2 classın extend ettiği bir class daha var. (bu kodda yok) Bu durumda 2 farklı classta, ana classta olmayan yeni metodlar istiyorsam, classın içinde use ecReflectionReturnInfo diyerek bu traiti class içinde kullanılabilir hale getirmiş oluyorum. Yani bu trait içinde yazılı metodlar sanki classın çinde yazılmış public functionlar olarak davranacaklardır. O yüzden trait kelimesini türkçeye "sınıfçık" olarak çeviriyorum :) Bu mantıkta traitler içinde değişken, static function, vb.. gibi şeyler tanımlayabiliyoruz. Ayrıca Hangisini hangisinin yerine kullanacağının ayarllamalarını da detaylı yapabiliyoruz. Henüz deneyemediğim ve yazılımda ihtiyaç olarak ne şekilde kullanabilceğimin tam oturmadığı diğer bu konular hakkında okumaya devam etmek için php'nin kendi sitesinden devame edebilirsiniz. http://tr2.php.net/traits Devamı için : php 5.4 yeni ozelikler - traits

linux stat komutu (command)

Linuxta bir klasörde ls -l komutuyla görebildiğiniz dosya yetkileri, dosya sahibi, oluşturulma tarihi , vb.. gibi bilgileri tek dosya için göstermeye yarayan komuttur. Yani parametre olarak gönderilen dosya için ilgili bilgileri ekrana basan komuttur.
  stat dosyaadi  
şeklinde yazdığınızda ekrana bu bilgilerin hepsini yazar. klasör listeniz genişse direkt olarak tek dosya için bu komutu kullanabilirsiniz. Devamı için : linux stat komutu (command)

E-ticaret ucuz bir sey, krediye ihtiyacınız yok!

Son zamanlarda Bazı bankaların 20bin TL'lik 30bin TL 'lik eticaret destek kredisi kapsamında krediler verdiğini görüyoruz. Bu parayı sadece eticaret altyapınıza harcayacaksanız çok yazık. Çünkü eticarete girmek istiyorsanız 1000-2000 TL arasında maliyetlerde orta seviye özellikli kaliteli hizmetler alabiliyorsunuz. İhtiyaçlarınıza göre ek modülleri sonradan zten alabilirsiniz. Bütün modüllerin en üst sürümlerini de alsanız, 20bin 30 bin tutmaz. Kendiniz eticaret altyapısı yazdırsanız zaten 5000 lira aylık masrafla 2 yazılımcıya 4 ayda yaptırabilirsiniz :) Ben insanların araştırma yapmadan karar vermemeleri konusunda bir uyarıda bulunmak istiyorum. Böyle kredilerle iş yapmaya grek yok, eticaret yapmak için en azından altyapı hazırlamak için kredi mredi yüklü para ihtiyacınız yok. Aman dikkat! Devamı için : E-ticaret ucuz bir sey, krediye ihtiyacınız yok!

mysql table id leri siralamak ve yeniden dizmek. (reorder primary_key)

tablo1 tablosu; id ve label adlı 2 sütundan oluşuyor ve id primary key auto increment mevcut.
  insert into tablo1 values(11,'ahmet'),(3,'mahmut'),(4,'muharrem'),(5,'sedat'),(1,'emre');  
Şeklinde bir komut ile satırlarınızı olutşturduysanız,
SELECT * FROM tablo1;
komutu çalıştırdığınızda order by komutu kullanmazsanız, sonuçlar aşağıdaki gibi ekleme sıranıza göre gelecektir.
  id      label  11	ahmet  3	mahmut  4	muharrem  5	sedat  1	emre  
Bu tabloda
ALTER TABLE tablo1 ORDER BY id ASC;
komutunu çalıştırırsanız, yeni
Select * from tablo1;
komutunuzun sonucu şöyle olur:
  id	label  1	emre  3	mahmut  4	muharrem  5	sedat  11	ahmet  
--------------------------------- İnsanlar yukarıda yazdığımla şu yazdığımı birbirine karıştırıyor. Şimdi ayrı bir konu olduğunu belirterek; bu satırların id lerini de tekrar sıraya dizmek istiyorsak şöyle yapabiliriz.
  SET @count = 0;  UPDATE `tablo1` SET `id` = @count:= @count + 1;
Sonuçlar:
  Select * from tablo1;  
Sonuçlar :
  id      label  1	emre  2	mahmut  3	muharrem  4	sedat  5	ahmet  
şeklinde görüldüğü gibi tablo id'lere göre sıraya dizilmiş bir şekilde olacaktır. Bu konuyla ilgili araştırıyorsanız (neden araştırdığınızı siz biliyorsunuz zaten, benim bunu uygulama derdim; düzenli olması ve en önemlisi bu veritabanını kullanan herkes için bir standart oturtmak istememdi), en mantıklısı ilk yaptığımdan sonra 2. yaptığımı uygulamaktır. Böylece hem satırlar default eklenme sırasına göre değil de , ilgili id'ye göre sıralanmış olacaktır. Daha sonra da , bu idleri de 1 den başlayacak şekilde tekraradan dizmiş olacağız. Yani bahsetmiş olduğum 2 olayı komutu birlikte kullanınca, artık idleri 1 den ardışık bir şekilde devam eden bir tablonuz olmuş oalcaktır. Özellikle ayar tablolarınızın arada sırada primary_key alanında böyle bir güzelleştirme yaparsınız diye düşündük.. :) Devamı için : mysql table id leri siralamak ve yeniden dizmek. (reorder primary_key)

16 Mart 2012 Cuma

Diablo III - 150512 - Yine Yeniden Diablo

Ve nihayet beklenen gerçekleşiyor. Tam 12 sene aranın ardından Diablo ile yeniden buluşabileceğiz. Tabii ki en son 12 sene önce oynamadık :) Sayıyı büyük söyleyince daha bir etkili oluyor :) Hatta gün hesabı yaparsak daha etkili olabilir ...

Öhöm. Konudan çok fazla çıkmadan asıl haberi verelim. Diablo 3 çıkış tarihi resmi olarak duyuruldu. 15 Mayıs'ta muhteşem oyunun yeni versiyonuyla buluşuyoruz. Çok özledik kendisini. Bir not; oyun ilk çıktığında PvP olmayacak. Sanırım ileride patch ile ekleyecekler oyuna. Az kaldı. Sabır... Devamı için : Diablo III - 150512 - Yine Yeniden Diablo

9 Mart 2012 Cuma

file_get_contents failed to open stream hatasi

PHP'de Eğer dış bir URL'den file_get_contents veya fopen ile veri okumak istiyorsanız, ve bu tarz bir hata alıyorsanız (file_get_contents failed to open stream: no suitable wrapper could be found hatası), php.ini nizde aşağıdaki satırı yazmanız gerekmektedir. (veya önünde ; varsa, bunu kaldırmanız gerekmektedir.)
  allow_url_fopen = On  
Wamp kullanan windowslarda, sırasıyla wamp simgesi, php, php settings, allow url fopen simgelerini tıkladığınızda bu dediğimi kendisi otomatik olarak yapıyor. Hepimize bir hatırlatma olsun. Bu genelde php ortamınızı değiştirdiğinizde, php.ini ayarlarınızın sıfırlanmasıyla ilgili karşılaşabilecğeiniz bir durumdur. Yine de bu tarz küçük hataların arada çıkması bence iyi oluyor. Çünkü, neyin nereden geldiğinin ezberi bozulmuş oluyor, bu da anlamayı kuvvetlendiriyor diye düşünmekteyim. Devamı için : file_get_contents failed to open stream hatasi

8 Mart 2012 Perşembe

Ubuntu'da `Requires installation of untrusted packages´ sorunu

Bir kaç gündür Ubuntuma bir şeyler yüklemek istiyordum fakat hatayla karşılaşıyordum. Update Manager kullandığımda ise böyle bir hata çıktı. [caption id="attachment_925" align="alignnone" width="300" caption="Requires installation of untrusted packages @ubuntu"]Requires installation of untrusted packages @ubuntu[/caption] Öncelikle Update Manager'ın download yaptığı serverı United States yerine Main Server yapıp denedim, ama çözüm olmadı. Daha sonra terminalde NO_PUBKEY şeklinde bir hata olduğunu farkettim. Onun da resmi şöyle; [caption id="attachment_926" align="alignnone" width="300" caption="terminal @ubuntu"]terminal @ubuntu[/caption] Resimde de altını çizdiğim olaymış derdimiz meğer :) Yapmamız gereken şu, öncelikle terminali açıp update ediyoruz. sudo apt-get update Çıkan PUBKEY'leri bir kenarda tutalım, çünkü birazdan işimize yarayacaklar. Bende 1 tane vardı, sizde birden fazla varsa ayrı ayrı işlem yapabilirsiniz. sudo apt-key adv --recv-key --keyserver keyserver.ubuntu.com XXXXXXXXX XXXXXX yazdığım yere PUBKEY gelecek, yani ben B725097B3ACC3965 yazdım. Daha sonra tekrar update; sudo apt-get update Artık rahat rahat download yapabilirsiniz! Devamı için : Ubuntu'da `Requires installation of untrusted packages´ sorunu

SQL Max Fonksiyonu Kullanımı

Bir değişiklik yapıp konuya hızlıca girmek istiyorum. Zaten başlık konuyu yeterince anlatıyor :) Max fonksiyonu, adı üstünde, bir kolonun en büyük (maximum) değerini veriyor. Öncelikle basitçe tek tablo üzerinde max fonksiyonu kullanımına bakalım. Öncelikle isim ve yaş kolonlarına sahip bir antika tablosu tanımlayalım.
id isim yas
1 Saat 20
2 Mobilya 29
3 Porselen 50
4 Dolap 13
Şimdide elimizde bulunan en eski antikayı bulalım.
SELECT MAX(yas) FROM antika
Sorgu sonucu karşımıza şu sonuç geliyor.
MAX(yas)
50
Görüldüğü gibi sorgu sonucunda en eski antikanın yaşını vermiş oldu. Şimdi işin içine bir de teklif tablosunu ekleyelim.
id ant_id teklif_miktarı teklifveren
1 1 500 Hasan
2 1 550 Münevver
3 1 525 Mert
4 2 1400 Mert
5 2 1250 Münevver
6 3 900 Hasan
7 3 1050 Mert
8 4 2000 Mert
9 4 1800 Hasan
Tabloda teklif hangi antikaya yapıldığını gösteren antika_id alanı, teklif miktarı ve teklif eden kişi tutuluyor. Şimdi de her bir antikaya verilen en yüksek teklifi bulalım.
 SELECT antika.name, MAX(teklif.price) FROM antika LEFT OUTER JOIN teklif ON antika.id=teklif.ant_id GROUP BY antika.name ORDER BY antika.id
Bu sorguda ne yapmış olduk? antika ve teklif tablosunu birleştirerek bir antikaya verilmiş en yüksek teklif miktarını belirlemiş olduk. Sorgura GROUP BY terimi MAX fonksiyonunu (veya SUM gibi diğer fonksiyonların) antika isimleri özelinde çalıştırmamızı sağlıyor. Yani her bir antikanın sahip olduğu max teklifi bulmamızı sağlıyor. GROUP BY terimini kaldırırsak sadece en yüksek teklifi ve hangi antikaya ait olduğunu gösteren sonuç dönüyor. Sorgu sonucu da şöyle;
İsim Teklif_miktarı
Saat 550
Mobilya 1400
Porselen 1050
Dolap 2000
Herkese iyi çalışmalar. Devamı için : SQL Max Fonksiyonu Kullanımı

6 Mart 2012 Salı

Versiyon Kontrol Sistemleri ve Yazılımdaki Önemi

Bir çok zaman yazılımlar 1'den fazla kişi tarafından yapılır. Bir yazılımın yapılması kimi zaman kolay ise de, genellikle çok büyük zahmetlerle doludur. Bu yüzden yazılan çizilen, 3 gün önce yaptığınız, "ya bu bir ara çalışıyordu böyle değildi" diyebileceğiniz şeylerin aslında bir çözümü var. Versiyon Kontrol sistemleri. Bu sistem kısaca şöyle çalışıyor. Bir dosya merkeziniz var. Burada dosyalar, değiştikçe, versiyon kontrol sistemi o dosyanın bir önceki halini saklıyor. Bu da gerektiğinde 1000 kere değişiklik yapılmış bir dosyada 300. halini görebilme imkanı dahi sağlıyor. Bunları yaparken ise gerekli yorumları yazdığınız takdirde, önceden ihtiyacınız olp da yaptığınız her şeyi görebiliyorsunuz. Dosya merkezini internete açık bir bilgisayara kurarsanız da, oraya erişebilen tüm kullanıcılar projeye dahil olabilmiş olur. Yaptıkları değişiklikleri buraya gönderirler (commit) ve yazılımın ana haline dahil etmiş olurlar. Bazen 2 veya daha fazla kişi aynı dosya üzerinde değişiklikler yapıyor olabilirler. Bu gibi durumlarda ise "sen ne yaptın, ben şurayı düzelttim, al sana MSN den yolladım, oraya yapıştır, ama şurayı da düzeltmen gerekiyor, off puff..." gibi duyumları öncelerden sıkça duyuyoruz. Bu gibi durumlarda versiyon kontrol sistemlerinde gerek dosya kilitleme, (o dosyada kimsenin çalışmasına izin vermeme), gerekse de kim önce değişikliği gönderdiyse, sonradan gödnerenin yaptıklarının kaybolmadan - en azından tamamen silinmeden işlerini devam ettirme ve tamamlama şansı olabiliyor. TortoiseSVN benim sıkça kullandığım programdır. http://tortoisesvn.tigris.org/ adresinden ulaşabilirsiniz. Bir de bu hizmeti ve bunla birlikte dahili olarak yazılım geliştirmek için hizmet veren çeşitli internet tabanlı , siteler de mevcut. http://www.repositoryhosting.com da bunlardan biri. Bu konuya da başka bir yazımda değinmeyi düşünüyorum. Büyük veya küçük çaplı tüm projelerde versiyon kontrol sistemleri mutlaka kullanılmalıdır diye düşünüyorum. Bir proje başlattığınızda ilk versiyonu ne zaman çıkaracaksanız da, bunun için kendinize bir sayaç oluşturup, buna bağlı kalmanızı tavsiye ederim. :) http://www.coonter.net Devamı için : Versiyon Kontrol Sistemleri ve Yazılımdaki Önemi

5 Mart 2012 Pazartesi

Veri Madenciliğinin önemi - bilginin parasal değeri

Web'de bir projeye başlarken, yani elinizde henüz veri yokken, veri madenciliği akla gelen son şey olabilir. Hatta aklınıza hiç gelmemiş olabilir. Enerjinizi projenizin asıl amacına yönelik kullanırsınız. Veri madenciliği şey, elde veri olmadan düşünülmesi zor bir konudur. Projenin ilerleyen aşamalarında neler getireceği belirli olmadığından, kullanıcılıarın bu sistemin alışkanlıklarını edinirken vb, bunları ilk etapta tutmazlar. 1. önemli kısım burada kaçırılmış olur. Kullanıcının ilk andan itibaren alışkanlıkları loglanmalıdır. Anasayfa linkine tıklayark mı anasayfaya geldi, yoksa site en altındaki footerdan mı tıkladı? Nerelerden tıklıyorlar? ne yapıyorlar? Üye olma paneline gelip kaç kişi üye olmadan geri dönmüş, üye panelim mi zor acaba? soruların yanıtlarını giriş aşamasında, yani en önemli aşamada filtreleyememiş oluyorlar. Bence veri madenciliği altyapısı temel özellikleri ile proje ilk başlarken gömülmeli, daha sonra ise geliştirmeler yapılmalıdır. 14 Şubat haftası herkesin birbirine çiçek alacağı hediye alacağı aşikar. Ama ya 27 şubat? şubatın sonlarına doğru insanlar neler alıyor? Bunlardan güzel anlamlar çıkararak, size bir sonraki adımınız hakkında ipucu veriyor.. Sitenizde ziyaretçi sayısı kadar ziyaret var. O zaman sitenize bir gelen sonra hemen kaçıp gidiyor. Sitenizde insanları bağlayan bir şeyleriniz olması gerekir yorumunu yapıyorsunuz hemen.. Google webmaster tools, veri madenciliğinizin ilk aşamasına "bence" yetecek kadar özellik veriyor. Lakin projenizin amacı neyse, verileri toplayın, daha sonra bunları bilgiye dönüştürebileceğinizi bilin. Bilginin parasal değeri ise şöyle hesaplanır. (Okuldaki hocamız sn Mehmet Ahlatçıoğlu veya sn Mustafa Sivri tarafından anlatılmıştı) Örneğin bir fırın günde 10 pasta üretiyor varsayalım. Tanesi 10 TL.  Pazartesi günleri en fazla 5 adet satabileceğini ben ona söylesem, (istatistiklerime dayanarak, ki bunlar da veri madenciliğinden tecrübe ederek elde ettiğim şeyler) pazartesi günü için 10 değil 5 pasta üretse, burada bilginin değeri ziyan olacak 5 pasta x 10 TL = 50 TL dir. Aynı şekilde bir internet projeisnde de düşünün; bir eticaret sitesinde, klavye alan kişi, %85 ihtimalle yanında mouse alıyor diye bir bilgi çıkarılsa, o sırada da sitede mouse satılmıyorsa,  klavye ürününün sayfasında mouseları da ekleyerek böylece, satışı mouse satışları kadar artırmış oluruz, klavyelere dokunmadan. Burada bilginin değeri mouse satışından elde edilecek kar kadardır.. Veri madenciliği nitekim önemlidir. Ama en baştan beri önemseyenler, bu işin karını daha erken alacak kişilerdir. Veri madenciliği, veritabanı demektir. Verileri bilgiye dönüştüren kişi, insandır, bilgisayar değildir. Devamı için : Veri Madenciliğinin önemi - bilginin parasal değeri

php 5.4 çıktı

Php 5.4 çıkmasıyla birilikte beraberinde getirdiği bir çok yenilik var. Bunlardan önüzmüdeki günlerde deneyerek bahsetmeye çalışacağım. Php ye yakışacak şekilde değişiklikler olduğunu düşünüyorum ilk etapta. Temel bazlı birkaç konuya da el atılmış. Bunlar arrayler, ve döngüler gibi durumları içeren konular. Bazı Deprecated özellikleri de kaldırmışlar. (Nihayet magic_quotes_gpc de kalktı) İlerleyen yazılarımızda paylaşmaya çalışacağım. Herkese hayırlı olsun. Devamı için : php 5.4 çıktı

4 Mart 2012 Pazar

PHP Saydam (Transparent) Resim Yaratmak

PHP'de GD ile eklediğiniz resimlerin arkası varsayılan olarak siyah oluyor. Eğer saydam bir arka planı olmasını istiyorsanız, şu şekilde ilerlemek gerekiyor: Önce yeni ve boş bir resim yaratıyoruz:
 $im = imagecreatetruecolor(100, 100);
Daha sonra bu resimden saydam olacak rengi oluşturuyoruz. Aşağıdaki örnekte beyaz renk saydam olacak, sizin resminizde bu renk kullanmadığınız herhangi bir renk olabilir.
$transparent = imagecolorallocatealpha($im, 255, 255, 255, 127);
Yarattığımız bu renk saydam olacağı için, boş resmi bu renk ile dolduruyoruz:
imagefill($im, 0, 0, $transparent);
Artık bu resme istediğimiz herhangi bir nesneyi ekleyebiliriz. Örneğin yazı ekleyelim, önce yazı rengini belirleyelim. Bu renk arka plan renginden farklı olmalı ki saydam olmasın:
$black = imagecolorallocate($im, 0, 0, 0);
imagestring ($im , 5 , 0 , 0 , "dubluve" , $black);
Yazımızı da ekledikten sonra, saydamlığı destekleyen PNG formatında resmi kaydetmemiz gerekiyor:
imagepng($im,"dubluve.png");
Saydam resminizle mutluluklar dileriz :) Devamı için : PHP Saydam (Transparent) Resim Yaratmak

3 Mart 2012 Cumartesi

Eclipse Kod Şablonları (Code Templates)

Eclipse'te Java kodu yazarken sürekli for ya da do while döngüsü veya public void metot kalıbı yazmaktan bıktınız mı? Bir çözüm mü arıyorsunuz? Tam aranan yerdesiniz. :) Eclipse içerisinde bu şablonları sizin için otomatik oluşturan bir sistem mevcut. Üstelik halihazırda birçok kalıpla birlikte. Hemen bunlara nasıl ulaşacağımıza bakalım.
  1. Window -> Preferences ekranını açıyoruz.
  2. Açılan ekrandaki ağaçtan Java (veya hangi dili istiyorsanız) -> Editor -> Templates kısmını açıyoruz.
Göreceğiniz gibi burada birçok öntamınlı şablon sizin için halihazırda mevcut. Örneğin; listede if satırına giderseniz preview kısmında if için oluşturulacak şablonu görebilirsiniz. Şimdi de kendimiz nasıl şablon oluşturacağımıza bakalım. Örneğin; public static final için bir şablon oluşturalım.
  1. Önce listenin sağındaki New butonuna tıklıyoruz.
  2. Açılan ekranda Name kısmına psf (veya kullanacağınız ismi) yazıyoruz. Description kısmına istediğiniz açıklamayı yazabilirsiniz (örneğin public static final).
  3. Şimdi asıl önemli konu olan şablon kısmı için Pattern yazan bölüme aşağıdaki satırı yazıyoruz.
public static final ${cursor};
Burada ${cursor} terimi, imlecin bu kısma konumlanmasını sağlıyor. Insert Variable butonuyla istediğiniz değişkenleri ekleyebilirsiniz. Şimdi bu şablonları nasıl kullanacağımıza gelelim. Şablonu kullanmak istediğimiz kodda if şablonu için if yazarak kod tamamlama kısayoluna basıyoruz (Ctrl+Space veya siz hangi kısayolu kullanıyorsanız). Karşımıza if için birden fazla seçenek çıkıyor (çünkü if için birden fazla şablon var). İstediğiniz şablonu seçtikten sonra karşımıza if'in şablonu geliyor. Doldurmanız gereken alanlar arasında Tab ve Shift+Tab kısayollarıyla gezinebilirsiniz. Kendi yarattığımız şablonu kullanmak için psf yazarak kod tamamlama işlemini gerçekleştiriyoruz ve şablonumuz imleç şablonda ${cursor} yazdığımız yere konumlanmış şekilde şablonumuz karşımıza geliyor. Siz de kendi şablonlarınızı oluşturarak sık kullandığınız kod parçalarını hızlıca otomatik olarak yazabilirsiniz. Herkese iyi çalışmalar. Devamı için : Eclipse Kod Şablonları (Code Templates)

1 Mart 2012 Perşembe

Sencha Designer 2 çıkıyor

Henüz Betada olan Sencha Designer 2, Ext Designer programının yeni jenerasyonu olarak ifade ediliyor. En basit EXT JS arayüz üreticisinden, tamamıyla kompleks masaüstü ve mobil uygulama geliştirme platformu olarak nitelendiriliyor.
Sadece Sencha2 için destek eklenmekle kalınmamış, aşağıdaki birkaç özelliği de ekleyerek önemli bir yol kat edilmiş gözüküyor.
Bu özellikler :
 * Inline dökümantasyon,
 * Kullanıcılara anında destek verebilmek için canlı dizayn görünümü
 *- Oluştuurulan kodun çalışmasının garanti edilmesi
 * Mobil için native paketleme, vb..
Extjs ile uygulama geliştirenlere sesleniyorum, saçlarınızın daha az dökülmesini istiyorasanız, hele ki dökümantasyondan bir şey anlamayıp veya bulamayıp, bir şeyi nasıl çalıştıracağınızı arıyorsanız, en azından visual bir IDE olan Sencha Designer 2 ile , bence işinizi önemli ölçüde daha hızlı yapabilirsiniz.
Şu anda sipariş alımında ve 299$ diye mail gelmiş.
Devamı için : Sencha Designer 2 çıkıyor