Tek Gözlü Devlerin Yönettiği, Ütopik Fısıltılar Korosu

Mayıs 19th, 2009 meddah 2 comments

Başlığı elimden geldiğince bir yığın isim tamlamaları ile yaptım belki bu yazı dikkatinizi çeker diye!. :-) Bugün tatil olması münasebeti ile JWF geliştirmesi ile uğraşırken, takıldığım bir konuda yardım almak için @yalazi‘ya müracat ettim. Sohbet sohbeti açtı ve akşam kendisi ile buluştuk.

Kendisi web çatılarından nefret etmesi münasebeti ile üzerinde çalıştığım JWF’i kendisinin beğenisine sundum. Sanırım bu sefer doğru yolda ilerliyorum. :) JWF beni tanıyanlar bilir bir türlü tamamlayamamıştım. Neyse..

Aslında sohbetimizin en dikkat çeken tarafı, blog@yalazi üzerinde bulunan, “On Simulation-Reality Prediction” başlıklı yazısı. Yazı kısaca şundan söz ediyor, dünyadaki herşeyi simüle eden bir yazılım yazsak ve bu yazılım ile gerçek yaşamdan bir anı ve simülasyon yazılımını eş zamanlı çalıştırarak aynı sonuca ulaşırsak, geleceğe dair “bazı şeyleri daha yaşanmadan hesaplamak mümkün müdür?” sorusunu dile getiriyordu. İşte bizim ütopya fısıltılarımız evrene bu noktadan itibaren yayılmaya başladı..

Yalazı öyle ilgimi çeken bir konuya parmak basmıştı ki, “ütopya master planım” diyebileceğim fikrimi paylaştım kendisi ile. Aynı çözümün farklı bir amaç için kullanımından başka birşey değildi bu fikir. Ben de dünyada ki, tüm yaşanmışların modellenebileceğine inananlardanım. Yarı profesyonel olarak ilgilendiğim bir konu olan Öyküleme (Tiyatro, Sinema, Roman) sanatında bazı kalıplar vardır. “İki köpek bir kemik” (iki adam bir kadın) gibi. Aşağı yukarı aynı öykü üzerine kuruludur bu kalıplar, Bir sorunun birçok çözümü olabilir ama bu çözümler sonsuz değildir. Aynı bir satranç oyunu programlaması gibi olabilecek tüm doğru hamleler bellidir. Bu da bize benim ütopya projeme götürüyor, bir sorun karşısında bizim danışabileceğimiz, doğru yolu seçmek için bize yol gösterecek, “Bilgisayar Yaşam Asistanı”. Hele günümüzde herkes’in elinde PDA benzeri cep telefonları olduğunu ve sürekli nette olduğumuzu düşünürsek bu çok da ütopik gelmiyor insana :)

Tekrar Yalazı’nın yazısına geri dönersem, simülasyon ve gerçekliğin 5 saat sonrasına gittiğimizde aynı sonuç çıkmıyorsa burada oluşan fark kümesi bizim çözüm için gerekli olan yol haritamızı verebilir sanırım. En azından Yalazı’nın iddiasından benim anladığım sonuç bu şekilde.

Peki şimdi anlatılmak isteneni anladıktan sonra bunun mümkün olup olmadığına bir bakalım. Modelleyebilmemiz için ciddi bir veri yığınına ihtiyacımız var. Nasıl böyle bir model içerik oluştururuz diye düşünüyorum bir an ve Internet cevabı ile Arşimet gibi buldum buldum nidaları atıyorum bir an!. Peki nasıl modellenecek, Web 2.0 ve servisleri ile bu veri toplanabilir mi? Evet!. Peki nasıl anlamlandırılacak belki Web 3.0 bir başlangıç olabilir. Peki bize nasıl ulaşacak, iPhone ve Android gibi araçlar ile olması pek muhtemel görünüyor. Peki bunu parametrelere sahip kaç “Tek Gözlü Dev” tanıyoruz!. Bence bir tane var, O da Google!.. Belki de Google’ın Master Planı böyle birşeydir kimbilir :)

Peki Bilgisayar Bilimlerinde bu konunun hangi başlık adı altında geçtiğini biliyor musunuz?  Şu kitapta anlatılan Modeling ve Simulations kavramları olabilir mi?

Bu kadar ütopik muhabbetten sonra, son birşey daha söylemek istiyorum. Veritabanı programcılığı dışında Bilgisayar Bilimlerinin incelediği konular hakkında konuşmayı çok  özlemişim… Yalazı çok saolsın!..

Categories: Bilgisayar Bilimleri Tags:

Hakkımda 7 Şey

Mart 8th, 2009 meddah No comments

Geçen hafta Onur Yalazı beni “Hakkımda 7 Şey” konusuyla mimlemiş. Böyle şeyleri pek beceremem. Ama saolsun hayatımda benim için önemli olan 7 şeyi düşünmemi sağladı. İşin içinde sayılar olduğu zaman, bunları bulmak, ayıklamak ve seçmek zor olabiliyor…

  1. Ailem: Bana her zaman destek olan ailem. Hayatımın her anında ilk sırada olmalıdır. İfade problemim olsada onları çok seviyorum. Ve herzaman listenin ilk sırasında olacaklar.
  2. İnternet: Internet benim için çok ama çok değerli. Geleceğe dair tüm planlarımda bir yeri var. Bunlardan başlıcaları, netology, dahius, mahsul-ü hayal
  3. Hikayeler: İnsanı anlatan öyküleri çok seviyorum. Olaylar örgüsünü, bu örgüde düğümlenmeler ve çözülmeler aynı inişler ve çıkışlar gibi. 2 yıl boyunca tiyatro oyunları yazmak için 5 üstadtan eğitim aldım. Hemde her pazar günü hiç usanmadan. Bu sebeple tiyatro ilk aracımdır. Diğerleri ise şiir, müzik ve fotoğraftır.
  4. Çalışma Odam ve Arşivlerim: Benim için evim kutsal bir mabeddir ve sığınaktır. Evimi çok seviyorum. Küçük bir çalışma odam ve bir duvarı kaplayan ve tüm rafları tıkabasa kitap dolu bir kütüphanem var.
  5. Mobil Yaşam: Mobil bir yaşam sürmeyi seviyorum. Hayatımın en önemli şeylerini yanımda taşımak ve ihtiyaç anında erişmek güzell birşey. Bu konuda özellikle, iphone çok faydalı bir araç.
  6. Hayat Görüşüm: Benim hayat görüşümün temelinde Vahdet-i Vucud* ve Samurayların ve Zen rahiplerinin felsefesi bulunmaktadır.
  7. Sağlıklı Yaşam ve Spor(Aikido): Özellikle lise yıllarımda çok fazla spor yaptım. Boks, Kickbox ve Basketbol olmak üzere. Üniversite sınavlarına hazırlanma süreci ile birlikte hayatımdan spor çıkmış oldu. Askerdede spor yapmayınca iyice spordan uzaklaştım. Bu durum vücud disiplinimin farkına varıncaya kadar sürdü. Hayri’nin tavsiyesi ile Aikido yapmaya başladım. Ve bu yeni yaşam tarzı ok  çok yeni olsada umarım bir ömür sürer.

Şimdi adet yerini bulması için; bende 7 kişiyi mimliyor ve beni mimleyen Onur Yalazı‘ya teşekkür ediyorum.

      Categories: Diğer Tags:

      İçimdeki İnternet Aşkı Bambaşka!..

      Mart 2nd, 2009 meddah No comments

      Hava bahardan kalma ve güneş dünyaya gülümsüyordu. Günlerden pazar günüydü. Dışarı çıkma planları yapmış, bloguma yeni bir yazı girişi yapıyordum ki, veritabanı çok fazla bağlantı hatası vermeye başlayınca “Ne oluyor laan!” cümlesi ağzımdan çıkı verdi. Sunucunu loglarına bakınca saniyede 50-100 arası istek olduğunu görünce saldırı olduğunu düşündüm. (Normalde sunucuma bu kadar istek gelmez!) Sonra incelediğimde sorunun sebebinin kissa.be servisi olduğunu gördüm. Kissa.be yurtdışında az-buçuk tanınan bir servis olduğu için neden bu kadar istek geldiğine baktım. Halen saldırı olduğunu düşünüyordum fakat inceleyince gördümki, kissa.be’yi kullanan kişi Çin’deki bir Porno Forumuna kissa.be linki vermiş. Ve bu yazıyı yazarken Uniq istek 150.000 civarındaydı. Sunucum ve benim için çok fazla olan bu isteği kara listeye almak istemiyordum. Sonuçta kissa.be bir servisti herşeye garanti veriyordu.

      Peki bu sorunu nasıl çözdüm? Sihirli sözcükleri söylediğinizi duyar gibiyim. Evet Memcached! Hayat kurtaran asrın buluşu icat. Hemen memcache sisteme aktif ettim. İnsert işlemlerinide bir  havuza soktum. SQL sorguları bir havuzda toplu olarak güncelleniyor. Sorun çözüldü böylece, kissa.be servisi icin yapmayi bile dusunmedigim stress testi boylece gerceklesti.

      Evet güzel pazar günüm bu işle uğraşarak gitti. :) Peki pişman mıyım? Hayır! Kızgın mıyım? Evet Kendime kızgınım!. Kodları bu hafta daha ciddi bir şekilde yeniden düzenleyeceğim. Her geçen gün biraz daha şekillenen Joy Framework mimarisine taşımaya karar verdim. İnterneti ve yüzbinlerce (pornocu) insanın farkında olmadan benim sitemi kullanmaları çok eğlenceliydi. Apache log’u her an aktığını ne zamandır görmüyordum. :)

      Evet sıradaki sınavlar için  hazırım :)

      Categories: Diğer Tags:

      Yazılım Mühendisi’nin Şerefi

      Mart 1st, 2009 meddah 1 comment

      Merhaba Üstad, biliyorum uzun süredir yazamıyorum. Son dönemde yazmak için çok okudum çok araştırdım ama yazmak için ataletimi yenemedim. Öğrendiklerimi yakın zaman içinde seninle paylaşacağım ama öncesinde yaşadığım bir şeyi paylaşmak isterim. Yıllar önce öğrettiğin temel şeylerin öneminin farkına galiba yeni vardım. Unutmamak ve öğrencilerine anlatman için bunu seninle paylaşmak istedim.

      Yakın gelecekte, çaylakların yapmayacağı kadar basit bir hatam ve çok daha büyük bir sonucu oldu. Hatasız yazılım olmaz ama bu hatadan dolayı gerçekten çok utandım. Sonuçta şirketim, bozmak için değil yapmak için kodları bana emanet etmişti. Emanete hıyanet etmiştim. Samurayların böyle bir durumda Harakiri yaptıklarını çokça duymuşuzdur. Bu aslında daha iyi birine yol açmak için yapılır. En iyinin bile en iyisi vardır. Bunu hiçbir zaman unutmamak gerekir. Bu sebeple bende gereğini yaptım ve istifamı verdim. Fakat yöneticim bunu reddetti ve hatımın sebebini sorgulamamı istedi…

      Profesyonel bir kurumda işinizi yapar ve karşılığınızı alırsınız. Bulunduğunuz pozisyondan dolayı kibir ve özgüveniniz gereksiz büyüyebilir ve basit hataları farketmemize engel olur. İşte bendeki en büyük sorun buydu. Bir yazılım geliştiricisi için en büyük tehlike fazla özgüven ve kibirdir. Çünkü diğer önemli kuralları gözden geçirmenize engel olur. Üstadım evet sende hiç kibir ve ego görmedim hiçbir zaman. Ama öğrencilerine ilk anlatman gerek şey bu olmalı. Yoksa benim yaşadığım utanç verici duruma düşebilirler.

      Yazılım geliştiricisinin diğer görevlerini de, burada yazmak istiyorum. Bu maddelerin üzerine elbet eklentiler yapacağım ve/veya içinden bazı maddeleri çıkaracağım. Yol haritam olacak bu maddeleri bir daha unutmayacağım. Şimdi bu maddeleri burada tekrar hatırlayalım.

      1) Alçak gönüllülük; bildiklerim denizde bir damla kadar ve daha öğrenilecek çok şey var ve biliyorum ki her zaman benden daha iyisi var. Kıstasım her zaman daha iyi olan olmalıdır.

      2) Okunabilirlik (readibility); Yazılan kod herkes tarafından anlaşılabilir olamalı. Karmaşık kodlardan kaçılınılmalı. İsimlendirmeler öyle uygun olmalıki ne işe yaradıklar hakkında fikir vermeli. Yorum satırları olmalı. Kod standardına uygun yazılmalı.

      3) Verimlilik (efficiency); Uygulamanın hızını yavaşlatabilecek hatalı algoritma ve mantıklardan kaçınılmalı. Method çağrıları ‘profiler’ araçları ile incelenmeli.

      4) Nesnellik (objectivity);

      • Yapısallık (structurally); Veri bütünlüğünü doğru bir şekilde parçalamak ve yönetmek için kullanılır. Doğru veri bloklarına doğru işler yapması sağlanabilir. İş parçalarını doğru yönetmek ve dağıtmak için iyi bir yöntemdir. Özellikle Handler mekanizmalarıyla hayata giren “tek giriş ve tek çıkış” sağlamak gibi tekniklerle.
      • Bölümlere Ayırma (Modularity); Kod ilgilerine göre bölümlere ayrılabilmelidir.
      • Tekrar Kullanılabilirlik; Kod tekrarı yapmak en büyük günahlardan biridir. Kodun tasarımında tekrar yapılması kesinlikle engellenmelidir.

      6) Güvenlik (security); Güvenlik açığı oluşturulabilecek sorunlar tespit edilmeli ve kod içerisinde gereği yapılmalıdır. Güvenlik söz konusu olduğunda verimlilik ve hızdan bir miktar taviz verilmesi doğaldır.

      7) Taşınabilirlik (portability); Uygulama; platform geçişlerine minimum değişiklik ile geçirilebilmelidir. Bunlara örnek, C kodlarındaki değişken veri tiplerinin uzunlukları ve işletim sistemine özel fonksiyon çağrıları verilebilir. Ya da uygulamada veritabanı değişikliğinde mevcut kodların en az seviyede etkilenmeside taşınabilirlik için iyi bir örnektir.

      8) Esneklik (Flexibility); K.I.S.S. kuralına göre kod olabildiğince basit tasarlanmalıdır. Çevik yöntemlerse, geleceği düşünerek kod yazmak bir hatadır. Fakat bunu  düşünememek demek değişikliği yok saymak demek değildir. Bu sebeple uygulamanın kodları basit ve esnek olmalıdır.

      9) Yeterlilik; Uygulamayı ve değişikliğin etkilerini iyi bilmek gerekir. Değişikliğin etkildeği yerler çıkartılabilmelidir.

      10) Test edilebilirlik; TDD ile hayatın kod geliştirme döngüsünün içinde olmazsa olmaz bir parçası haline gelmiştir.

      Benim temel ilkelerim bunlar üstadım; Eklemek ve düzeltmek istediğin birşey varsa sabırsızlıkla cevabını beklemekteyim.

      Categories: Programlama Tags:

      PHP 6′da Olması Gereken Özellikler

      Aralık 4th, 2008 meddah 4 comments

      Hayalini kurduğum framework için çıktığım yolda hergün yeni şeyler öğreniyorum. İtiraf etmem gerekiyorki ASP.NET mimarisinden çok etkilendim. Yazılım mimarileri ile uğraştığımdan dolayı sanırım C# diline ayrı bir sempatim var. Her açıdan çok iyi tasarlanmış bir dil. PHP’de web için biçilmiş kaftan fakat nesne yönelimli mimariler geliştirirken çok eksik olduğunu görüyoruz. Neden C# değilde PHP yazdığım sorusu aklınıza gelebilir. Bunun en büyük sebebi, C# projesinin Windows gibi baş ağrıtan kötü bir işletim sistemi üzerinde koşması geliyor. Mono ile daha önce bir web projesi geliştirmiş biri olarak yetersiz olduğunu söyleyebilirim.

      Bu yazıda PHP6′da olması gerektiğini düşündüğüm özelliklerden söz edeceğim. Öncesinde küçük bir araştırma yaptım. Benim gibi PHP6 beklentileri olanlar var mı diye? Stephan Schmidt‘in 6 parçadan oluşan yazısı görmeliler.

      1. Namespaces
      2. Annountions
      3. Type Hint
      4. Reflection
      5. Delegate & Event & Lambda
      6. Function overloading
      7. Properties (Variable Get/Set)
      8. Extensions Methods & Partial Class

      1. Namespaces

      Eğer bir framework yazıyorsanız birbirine benzeyen sınıf isimleri olması çok doğaldır. Bu durumlarda namespace’ler olması çok işe yarar. Neyse ki PHP 5.3′ten itibaren gelecek olan bir özellik. (Ref. http://marc.info/?l=php-internals&m=118355320225178&w=2)

      2. Annountions

      C#’ta buna Attribute denir. Amaç kod içine meta veriler sokmaktır. Ve bu verileri Reflection yöntemiyle dinamik olarak okuyarak işleme tabii tutmaktır.

      Bir örnek ile açıklamak gerekirse, MVC yapısı kurduğumuzu düşünün. Her sınıfın bir sayfa her methodununda action/view işlemini yaptığını varsayalım. Action bazlı sayfa giriş yetkilendirmesine ihtiyacımız var. Bu sayfa eğer ödeme sayfası ise, sadece https olarak erişilmesi gerekiyor. Bunuda bir şekilde belirtmek gerekir. İşte bu gibi ihtiyaçları tanımlamak için annountions özelliğine ihtiyacımız var. Henüz resmi olarak desteklenmesede PHP genişletmeleriyle eklenebilir.

      @SimpleAnnotation
      @SingleValuedAnnotation(true)
      @SingleValuedAnnotation(-3.141592)
      @SingleValuedAnnotation('Hello World!')
      @SingleValuedAnnotationWithArray({1, 2, 3})
      @MultiValuedAnnotation(key = 'value', anotherKey = false, andMore = 1234)

      (Ref. http://code.google.com/p/addendum/)

      3. Type Hint

      Method parametreleri veya değişken tanımlarında, değişkenin tipini yazmak hem okunabilirliği arttırır. Hem de editörlerin kod tamamlama özelliğini daha sağlıklı yapılmasına imkan sağlar. Ayrıca hata yakalama işlemlerinde de büyük kolaylık sunar.

      4. Reflection

      Reflection dinamik olarak kod içerisinde gezinebilmeyi, kodu kısmen değiştirebilmeyi sağlar. Mesela; MVC’deki authentication işlemlerini sayfa sınıfının protected olan methodları için yap diyebiliriz.

      self::set_module_name($class_name);
      self::set_action_name($method);
      
      eval("\$class = new $class_name();");
      $reflect = new ReflectionMethod($class_name, $method);
      if ($reflect->isProtected()) {
      $class->authentication();
      }
      call_user_method_array($method, $class, $method_arguments);

      Ayrıca reflectionlar sayesinde Dependency Injection diye adlandırılan mimariler yaratabiliriz. Dependency Injection, Bir kod parçasına dışarıdan müdahale etmek demektir. Örneğin bir scheduler uygulaması yazacaksınız. Bu schedulera “şu sınıfın şu methodunu” çalıştır demek için kullanabilirsiniz.

      (Ref. http://tr2.php.net/reflection)

      5. Delegate & Event & Lambda

      Delegate kavramı C# ile beraber hayatımıza girmiştir.  Aslında C programcılarının bildiği gibi delegate’ler, fonksiyon göstericileridir. C# gibi dillerde sınıflar arasında global kavramı olmadığı için bir sınıftan diğerine mesaj yaptırmak  gerekebiliyor bazı durumlarda. İtiraf etmem gerekir ki bu bizi event mimarilerine ve lambda operatörüne götürür.  Delegate kullanımı C’deki prototip tanımlanması gibidir.

      public delegate function int myDelegate(int $x);

      Bu şu anlama gelir. Geri dönüş değeri int olan ve parametresi int olan fonksiyonu işaret et. Görüldüğü üzere bu tanım bize başka bir ihtiyaç daha doğurur. type hint ve method signs kavramları. Dinamik bir dilde bu kadar tip güvenli kod rahatsız etmiş olabilir. C# dilinde bunun çözümü lambda operatörüdür.

      Lambda, kısaca değişken olarak tanımlanabilen process blockları demektir. İstenilen yerde yaratılır ve öldürülür.

      6. Function overloading

      Fonksiyon yazarken farklı parametrelerle aynı method adıyla yazabilme  durumudur function overloading.  Bilindiği üzere PHP dilinde parametre sınırı yok. İstenildiği kadar parametre girilebilir. Bu parametrelerin dinamikliği sayesinde, aynı method ismi ile farklı parametrelerde func_get_arg alınabilir. Fakat okunabilirliği zorlaştıracak bir kod bloğu oluşmasına sebep olur. Bunu desteklerken bu dinamik yapının kaldırılmasını elbette istemeyiz.

      Method overloading yapabilmek için methodların imzasını tutmak gerekir. Bu imza parametrelerin tipleri ve geri donus deger tipleri ile birlikte oluşturulur.

      int function fonk(int $b);
      int function fonk(int $b, string $c);

      Yukarıdaki örnek PHP’de syntax hatasına sebep olur.

      7. Properties (Variable Get / Set)

      Properties kavramı C# dilinde kullanılan Cross-Cutting yada Aspect oriented denilen bir teknolojidir. Amacı sınıf değişkenlerinin aldığı değerlerin arasına girmenin bir yolunu bulmaktır. Özellikle get ve set işlemlerinin arasına girmek türetilen sınıflarda overloading yöntemi ile farklı bir şekilde değer atanmasını veya değer kontrolunun yapılması burada sağlanabilir.

      private $_item;
      public property $Item
      {
      get { return $this->_item; }
      set { $this->_item = value; }
      }

      $this->Item = 4;

      Yukarıdaki kod blogu gibi olmasada AOP yontemiyle dolaylı olarak yapabilmek mümkün. Bunun için PHP Aspect‘ten faydalanılabilir.

      8. Extensions Methods & Partial Classes

      Aslında bu iki özellik betik(script) olan bir dilde ne gerek var diye düşünebilirsiniz. Bu iki özellikte özellikle projelere dahil olan 3. parti yazılımların bakımını yaparken çok işimize yarar. Genellikle 3. parti yazılımları projenin içine dahil ederken ufak değişiklikler yapar ve projeyi bir bakıma çatallamış (fork) etmiş oluruz. Yeni versiyon geçişlerinde ise sıkıntı yaşarız. Bunu engellemek için başka bir yerde bu 3. parti yazılımların sınıflarını genişletebilsek (partial class) veya methodlarını aşırı yükleye bilsek (extensions methods) hayat daha güzel bir hale gelebilir. Peki bunu nasıl yaparız?

      extend function string::is_null(string $value) { return ($value == null);  }

      Yukarıdaki şekilde tanımlanabilir. string nesnesi için is_null adında bir method eklenmiş olur. Ve aşağıdaki şekilde çalıştırılabilir.

      string $a = “merhaba”;

      if ($a::is_null()) { // biseyler yap }

      Partial class yapısı ise, bir sınıfı içeriğini bir parçasını aynı isimde başka bir sınıfı tanımı yaratarak onun içine atamak demektir. Bakıldığında partial class ile extensions methods’ların bir farkı olmayabilir. C# kendi tasarımlarında partial classlar aynı assembly (paket) içerisinde olmasını ön koşul olarak koşar. Fakat bu durum extensions method mimarisinde zorunlu değildir.

      Elbette bu iki özellik birleştirilerek daha iyi tasarlanabilir.

      Benim PHP’nin yeni versiyonundan beklediklerim aklıma geldiği kadarıyla bu şekilde. Aslında bunların bir kısmı PHPv6 ya alındı. Bir kısmı ise bekliyor. Daha detaylı bilgiye, Derick Rethans’ın toplantı notlarında bulabilirsiniz. Bu konu ilginizi çektiyse, toplantı notlarının yapılacak listesine ve hangilerinin yapıldığına  buradan erişebilirsiniz.

      Benim aklıma gelenler şimdilik bunlar. Programlama dillerine ve Nesneye Yönelimli PHP’ye yönelik yazılarımı öğrendikçe burada paylaşmaya devam edeceğim…

      Categories: Programlama, Yazılım Mimarisi Tags:

      Kendime bir dost(asus eee-pc 1000h) edindim

      Kasım 30th, 2008 meddah 4 comments

      Laptop’larım sürekli peşimde oldukları için bugüne kadar gölge ismini veriyordum. Lakin, iPhone sahibi olunca özelliklerinden dolayı iPhone’uma gölge adını koydum. Emektar dizüstü btilgisayarımda bana son bir kazık atınca ve bir e-ticaret siteside kuru sabitleyince dizüstünü değiştirmem zamanı geldiğini anladım. iPhone gölge adını alınca yeni bilgisayarıma da dost anlamına gelen buddy kelimesini uygun gördüm.

      Şimdi biraz dostumdan söz edeyim. Üzerinde Intel Atom işlemci, 1GB ram ve 160gb’da disk var. Beyaz bir kasanın içinde çok karizmatik olduğunu itiraf etmeliyim. 1.4 kg ağırlığındaki bu dost hiç bana yük olmuyor :) 6 hücreli pili ile yarı yolda bıraktığıda olmadı. Tuşlar normal laptop tuş boyutlarına çok yakın. Sadece alışkanlıklarınızı değiştirmeniz gerekecek. Ben 1 hafta içinde bu klavye düzenine alıştım.

      Yeni dostum ile tek anlaşamadığım konu ise sürücülerini Linux gibi işletim sistemleri tanıyamadığı için Windows XP Home edition ile gelmiş olması idi. Fakat Windows’u sevmediğim gibi x2 kat daha fazla home edition’dan nefret ediyorum. Acaba lisans para iadesi istesem alabilirmiyim.

      Neyse efendim dostum biraz sızlansada ubuntu 8.10′u kurdum. Lakin generic kernel wireles’ı bulamadı. Nette biraz araştırma yapınca ubuntu seven hacker abilerimizin, dostum için özel bir kernel derlediklerini öğrendim. Ve hemen o kernel’a geçtim. Tabii siz isterseniz bu kernel’ın varsayılan olduğu birkaç dağıtımda** mevcut.

      Categories: Diğer Tags:

      Web Geliştiricileri İçin Firefox Eklentileri

      Kasım 30th, 2008 meddah 4 comments
      Categories: Diğer Tags:

      PHP ile Dinamik Method Çağrıları

      Ekim 2nd, 2008 meddah No comments

      Dinamik method çağrısı, parametrelerinin uzunluğunu bilmediğiniz bir methoda çağrı yapmak için kullanılır. Hangi durumlarda buna ihtiyacımız olur derseniz; MVC’ler buna iyi bir örnektir. Yazımın ikinci bölümünde söz edeceğim dinamik obje yaratma durumlarındada çok işe yararlar. Peki az laf çok örnek yaparak konuyu özetleyeyim.

      Diyelim ki;

      http://example.com/blog/categories/200810/general

      yukarıdaki gibi bir çağrıyı doğru şekilde yönlendirmemiz gerekiyor. İşte böyle bir durumda dinamik method çağrısı çok işe yarar.

      class blog extends controller

      {

      function categories($date, $cat_name)

      {….}

      }

      Peki bunu nasıl yapıyoruz?

      • call_user_func
      • call_user_func_array
      • call_user_method
      • call_user_method_array

      Yukarıdaki 4 fonksiyon adı (anahtar kelime) yeterlidir sanırım. Peki yukarıdaki örneğimizde bu çağrı nasıl yapılıyor ona bakalım.

      URL parse edildikten sonra;

      call_user_method_array($method, $class, $args);

      method çağrısı ile gerçekleştirebilirsiniz.

      call_user_xxx methodlarını __construct methodu için kullanamazsınız. Yani olurda benim gibi dinamik olarak obje yaratmak isterseniz bu methodlar işe yaramaz. İşte bu durumlarda işinize yarıyacak bir method örneği vereceğim.

      $db->comment = using(”dal.comment”, $db);

      Biraz methodun ne yaptığını açıklamam gerekir sanırım. Biliyorsunuz PHP 5.3 ile beraber namespace kavramı hayatımıza girdi. Kendi geliştirmekte olduğum framework’te import işlemleri için çok basit bir şekilde çalışan bir namespace sistemi oluşturdum. using ile ise; aynı isime ait iki sınıf, kazaren çakışması durumunu engellemek için yazmıştım. İlk parametre sınıfın paket bilgisi ikincisinde ise, __construct methodunun aldığı parametreler söz konusu. İşte bu işi call_user_XXX kullanmadan yapmanın yolu;

          function using($class)
          {
              require_once(_get_class_path($class));
              $class_name = _find_class_name($class);
      
              $args_count = func_num_args();
      
              $args = "";
              for ($i = 1; $i < $args_count; $i++)
              {
                  eval("\$arg_{$i} = func_get_arg($i);");
                  $args .= "\$arg_{$i},";
              }
              $args = rtrim($args, ",");
      
              eval("\$obj = new $class_name($args);");
              return $obj;
          }
      
      Categories: Programlama Tags:

      Google bir “Arama Motoru”dur

      Eylül 3rd, 2008 meddah 2 comments

      Google Hikayesi

      2002′de ben askerdeyken ilk kez duymuştum Google kelimesini. Basit arayüzlü ve son derece hızlı arama sonuçlarını getiren bir arama motoruydu. O yıllarda askerde olduğumdan çok üstünde durmamıştım. Askerliğimi bitirip, web dünyasına bulaşınca çok daha önemli olmaya başladı. O kadar önemliydi ki, insanlar sitelerinin aramalarda üst sıralara çıkması için Google’ın PageRank algoritmasını kurcalayan insanlar, bağlantı değişimi (link-exchange) yapıyorlardı. İnternet üzerinde bulunabilir olmak çok önemli olmaya başladı.

      Gelir modellerini reklam üzerine kuran bu firmanın sitesinde reklamlar sadece metin tabanlı idi. Ama bir ayrıcalığı varda aranılan kelime ile orantılıydı. Böylece, aranılan kelime üzerinden gelir elde etmeye başladılar. Ama reklam veren bazı şirketler için , damlaya damlaya göl olur atasözünü hatırlayarak, o zamana kadar yapılmayan birşeyi yaptılar. Reklam aracıları sadece ciddi hit alan sitelere reklam veriyorlardı. Google bu sebeple ve “damlaya damlaya göl olur” atasözünüde göz önünde bulundurarak küçük, büyük tüm site sahipleri (yayıncılar)nin reklam gelirinden pay vererek sitelerine reklam almalarını sağladılar. Reklam veren müşterilerin paralarının hakk etmek için kötü niyetli kişileri anlayan algoritmalar geliştirdiler. Böylece, çok değerli bir firma oldular. (Bu modeli borsaya açıldıklarında da kullandılar ve küçük yatırımcılarla da hisselerini paylaştılar)

      Reklam verenlerin en doğru hedef kitleye ulaşması için, 2004 yılında davet yoluyla kullanıcıların üye oldukları bir eposta sistemi kurdular. Gmail adını verdikleri bu epostanın arabirimi çok kullanışlı idi. Javascript ustaları ajax’ı o kadar iyi kullanıyorlardı ki, halen daha iyi bir eposta istemcisi yok! Unutmadan eposta servisleri 1-5 mb kota verirken, Google gb’lik kotalarla dikkatleri üzerine çekti.

      Borsaya açıldıklarında bu şirket bir efsane olmuştu. Balon olmadıklarını tüm dünyay kanıtlamışlardı. Ve arama üzerine, iş modellerini geliştirmeye devam ettiler. Filmlere ve sözlüklere giren bir marka haline geldiler. Ayrıca “Şeytanlık Yapma” ve imkansız denilen şeyleri yapmalarından dolayı bir çok insanın saygısını kazandılar. (Google Print) Ama Google her yaptıkları şey arama motoru iş modeline dayanıyordu.

      2006 yılından sonra Youtube vb servisleri kendi bünyelerine katmalarıyla her geçen gün dahada büyüdüler. İnternet’in abisi dediğimiz bir firma haline geldi. İnsanlar bu şirketin master planı üzerine komple teorileri geliştirmeye başladı. İnsanların profillenmesi vb konularda sürekli konuşuldu durdu.

      Tekelleşme

      Son 2 yılda çıkardıkları servislerle arama motoru kimliğinden bir internet şirketi kimliğine bürünmeye başladılar. Google’ın Adsense adını verdiği reklam teknolojisi yüzünden birçok teknoloji etkilendi. Bloglar daha belirgin hale geldi. Kaliteli yazılar yazıldı. Ama sonra iş çığrından çıktı ve Google’ın adsense interneti kirletmeye başladı. Çünkü arama sonuçlarına ve SEO denilen yeni iş türü yüzünden kötü içerikler ve aradığınızı bulamadığınız bir yığın kalitesiz içerik yaratıldı.

      Özellikle çıkardıkları son 2 web sitesi ile Google’a karşı endişelerim arttı. Google internet’in efendisi sahibi olmaya çalışıyordu. Açık kaynak fikrini en iyi kullanan şirket olma yolunda adımlar attı. (bknz: OpenSocial, Android vb..) Yeni bir fikri olan şirketi ya satın oluyor ya da açık kaynak bir platform altında kuralları kendileri koymaya çalışyorlardı. Ama bardağı taşıran son damla Knol ve Chrome oldu.

      Knol, wikipedia’ya alternatif olarak ortaya çıkarttılar. Wikipedia ciddi bir kültür olmuştu. Kutsal bir bilgi kaynağı. Şimdi soruyorum topluluklara destek veren bir şirket neden, bu platforma destek olmak yerine  böyle bir servis yayına açtı???

      Chrome ise daha da ilginç, 4 büyük web tarayıcısının iyi özelliklerinin kendinde toplayan bir tarayıcı çıkarttılar. İşin ilginci web geliştirici ve tasarımcıları 4 büyük arama motorunda da düzgün görüntülenen stiller yazmak için CSS-Hack adını verdikleri yöntemler geliştirmişlerken. Aklıma takılan bir diğer soru ise şu; neden Google bir çok insanın saygısını kazanan Firefox, herkes tarafından beğenilen tek sorunu fazla hafıza tüketmek olan bu kültürle beraber yürümek ve bu platforma destek olmak yerine bir çok açığa sahip bir arama motoru çıkarttı? Açıklar elbette kapatılacaktır sorun bu değil ama neden Mozilla Vakfı’na destek olma yolunu seçmedi?

      Bunu en güzel açıklayanlardan biri, Türkiye Yazılım Mühendisliği Yahoo Eposta Grubunda, CyberSoft‘un kurucusu Semih Çetin’in tespitleri.

      1) Chrome, Safari ile ayni rendering engine’i (WebKit) kullanmakta. Belki Google-Apple arasinda bir isbirligi mumkun. Kime karsi? IE.

      2) Chrome; orijinal kaynak kodu olarak bir Visual Studio 2005 projesi. Ilk hedeflenen platformlar Windows XP ve Windows Vista. Kime karsi? IE.

      3) Chrome’un en onemli ozelliklerinden birisi en hizli JavaScript engine’i hedeflemis olmasi. Kime karsi? IE ve FireFox.

      4) Chrome’un bir baska temel ozelligi desktop uygulamalarini tamamen bir Web tarayici ile ortadan kaldirmak. Kime karsi? MS.

      5) IE 8 bunyesinde daha once hedeflenen bir plan dahilinde arama motorlari ile elde edilen gelirlerin sinirlandirilmasi dusunulmekte. Kime karsi? Google.

      6) iPhone ile Apple; mobil dunyasindaki Web tarayicisi kullaniminda standardlari oldukca yukseltti. Kime karsi? MS, Nokia, Samsung ve BlackBerry.

      Kesinlikle rekabete ve yeniliğe karşı değilim. Bu gibi yaklaşımlar kalite ve rekabet için gerekli ama. Google’ın yaklaşımı biraz tekel olma çabası gibi geliyor.

      Bu sebeple, bir arama motoru olan Google’ın diğer tüm servislerini boykot ediyor ve sizide buna davet ediyorum. İnternet kimsenin malı değildir. Lütfen, Chrome kullanmayın. Sitenizi Chrome’a uygun bir hale getirmeyin. Eğer bir internet kullanıcı iseniz, açıklarla dolu bu web tarayıcısını makinenize kurmayın! Firefox’a katkıda bulunun.

      Eğer benim gibi Google’ın arama dışındaki servislerini kullanmaya karar verdiyseniz. Google servislerine alternatif birkaç açık kaynak servis önereceğim.

      Google Servislerine Alternatif

      Diğer servisleri yerine emin olun alternatifleri vardır. Benimle paylaşırsanız bu listeye eklemekten mutluluk duyacağım.

      Google, arama konusunda uzmanlaşmış bir şirkettir. Ve bu konuda ilerlemeye devam etmesi, tüm internet camiası için daha iyidir. Ve kendisinden beklenen, diğer konularda işin uzmanı olan kurumlara destek vermesi olması yeniden saygımızı kazanmasını sağlayacaktır.

      Categories: Web Trends Tags:

      Merhaba Dünya! (ver. 2.0)

      Temmuz 21st, 2008 admin No comments

      Yeniden Merhaba,

      Bir önceki blog‘uma kıyasla bu blog arasında bazı farklılıklar var. Önceki blogum Mono platformunda benim tarafımdan yazılmıştı. Artık bu konuda işin uzmanı(wordpress) tarafından profesyonel destek almaya karar verdim. Yaklaşık 5 yıldır web dünyasında birşeyler yapmaya çabalıyorum. Öncesinde masaüstü platformu için uygulama geliştiriyordum. Fakat web’in büyüsüne bi kapıldımı aklını başından alan bir tarafı var. Bu blog”un amacı; kendi web çalışmalarımı kayıt altına almaktır.

      Tamamen web odaklı bir blog olacağını söylemiştim. 5 yıllık web tecrübemde (2 yıl PHP, 1 yıl Java ve 2 yıl da C#) programlama dilleri ve araçlarıyla uygulamaları geliştirdim. Bu kadar yıllık deneyimime dayanarak aslında hepimizin bildiği birşeyi tekrar etmek istiyorum. Biz web programcıları aslında sadece metin dosyaları yaratan kodlar üretiyoruz. Aslında çok basit gibi görünen bir iş için çok karmaşık mimariler kuruyor ve kullanıyoruz. Web çatıları(framework) tasarlıyoruz ki aslında bu, kendi kendimize koyduğumuz kanunlara benziyor ve bu kanunlar çerçevesinde kendimizi çok kısıtlayabiliyoruz. 5 yıllık yaşamım boyunca anladım ki, web’de hangi platformu ve araçları kullandığınız kimsenin umurunda değildir. Bu konuda takıntılı olmak ise s.dik yarışından başka birşey değildir. Bazen körü körüne bu yarışa devam etmek rüzgara karşı işemek anlamına gelebilir. Bu yüzden blog sahibi araçta değilde sektörde uzmanlaş düşüncesini sahiplenmiştir.

      Blog’ta web dünyasındaki yenilikler ve disiplinler ile ilgili öğrendikçe veya yeni birşeyler keşfettikçe burada paylaşıyor olacağım. İşinize ne ölçüde yarar bilemiyorum, önceliğim veya amacım, okuyucu kitlesini memnun edecek yazılar yazmak değil ama kaliteli birşeyler yazmak. Yazılar bazen çok teknik olabilir. Programlama veya sistem yönetimi ile ilgili olabilir. Bu yazıları takip edebilmek için, LAMP (Linux, Apache, MySQL, PHP) araçları hakkında fikir sahibi olmak gerekir. Bazı zamanlarda da web’in gidişatı ile ilgili değerlendirmeler yapmaya çalışacağım. Sektör ve/veya ürün incelemelerine bakıp gelecek hakkında değerlendirme yapacağım.

      Bir sonraki yazıya kadar hoşça kalın.

      Categories: Diğer Tags: ,