Archive for the 'Genel' Category

Başlık biraz geyik oldu ya neyse…
Şöle bi baktım da yazmayalı epey bir ay olmuş… Ama huysuz olmamın dışında mazeretim var… Nokta‘daki görevimi bırakıp tekrar Bilkent Üniversitesi‘ne dönüş yaptım.

Nokta benim çok değer verdiğim insanların kurduğu çok özel ve Türkiye’ye çok büyük katkısı olan gönülden bağlı olduğum bir firma. Oldukça emeğimin geçtiğini düşündüğüm de bir firma, Nokta’nın teknik yapısını yönlendirirken kuramadığım kendi şirketim yerine koyacak derecede özümsediğim bir firma diyebiliriz.

Çocuğum gibi büyüttüğüm FotoKritik‘i, ona gözü gibi bakacağından şüphemin hiç olmadığı bir ana-babaya tamamen, gönül rahatlığıyla bıraktım. FotoKritik’in daha da iyi yerlere geleceğinden hiç şüphem yok…

Zend Framework eksiklerini gideriyor.
Ruby on Rails’in literatüre geçen devrimlerini yakından takip eden Zend boş durmuyor ve Rails’i yakından takip edeceğini gösteriyor sanırım.

Henüz kurcalayamadım ama ekledikleri yeni özellikleri şöyleymiş:

  • Ajax desteği: Zend_Form’da ajax destekli form elemanları ve ajax otomize etmeye yarayacak özel helper + action’lar
  • Lucene desteği biraz daha gelişmiş ve v2.1 indekslerini destekler hale gelmiş. Hala eski hantallığıyla mı indeksliyor bilmiyorum ama en azından sorgu başarılı
  • View için muhtelif helper’lar gelmiş. İncelemediğim için yorum yapamıyorum…
  • Technorati, SlideShare, ve Remember the Milk web servisleri. Diğer web servisleri oldukça kullanışlı idi, listeye bu siteler de eklenmiş oldu
  • Infocard, OpenID ve LDAP adaptörleri ve PDF için utf-8 desteği.
  • Zend_Layout

Bugün otomatik güncelleştirmeler Internet Explorer 7′yi getirdi karşıma… Tasarım testleri için makinemde IE6′yı bulunduruyordum hala…
Bu güncelleştirmede dikkatimi çeken nokta “free” olarak bahsedilmesiydi…
Çünkü bildiğim kadarıyla Internet Explorer 7′yi yüklerken Windows’un kopya olup olmadığını kontrol ediyordu Microsoft…
Bu kontrolün kalkması demek Windows’u kaçak kullanan bir sürü insanın Internet Explorer 7′ye geçeceği anlamına geliyor aslında…
Windows Vista’nın da yaygınlaştığı düşünülürse artık yavaş yavaş kurtuluyoruz Internet Explorer 6′dan sanırım…

Gece gece mutlu oldum

Esnek programlamayı özetlersek:

  • Kullanışlı yazılımın müşteriye hızlı ve sürekli çıkarılması ile müşteri memnuniyeti
  • Çalışan haldeki yazılım sık aralıklarla çıkarılır (Aylar yerine haftalar)
  • Çalışan haldeki yazılım devam eden işleyişin temel ölçütüdür
  • Yazılıma başladıktan sonra ortaya çıkan ihtiyaçlar da karşılanır
  • Müşteri ile yazılımcı arasında sıkı, günlük iletişim ve kooperasyon
  • Yüzyüze konuşmak iletişimin en iyi yöntemidir
  • Projeler motive olmuş ekip elemanları üzerinden yürür, ekip elemanlarına sorumluluk almaları konusunda güvenilmelidir.
  • Teknik olarak mükkemmeliyetçiliğe ve güzel tasarıma sürekli dikkat edilir
  • Basitlik
  • Kendi kendini organize eden takımlar
  • Değişken çevre koşullarına sürekli adaptasyon

Notlar…

Müşteri

Burada müşteri illa bir firma ya da kişinin hizmet verdiği diğer firma ya da kişi olmak zorunda değil.

Müşteri proje elemanlarının kendisi de olabilir, proje yöneticisi olabilir, patron olabilir ya da web2.0 projeleri için kullanıcılardır. Web2.0 projeleri için kullanıcı geribeslemeleri değerlendirilerek müşteri talepleri ekip tarafından çıkartılır.

Çalışan yazılım? Çıkarmak? Ha ne ?!?

“Çıkarmak” olarak bahsettiğimiz “release” ya da “deliver” olarak geçer. Yazılımın ufak versiyonlarıdır.

Çalışan haldeki yazılımdan kasıt ise kağıt üzerinde ya da önizleme görüntüleri değil gerçekten çalışan yazılımdır.

Yap Boz

Esnek yazılımın en büyük özelliği sonradan gelen taleplerin de karşılanmasıdır. “Bu değişikliği yapmak için veritabanında değişiklik yapmamız gerekir ki bu da çok uzun süren bir işlem olduğu için bu özelliği eklemeyelim” bir mazeret değil. Altyapı bu tür değişikliklerin pratik bir şekilde yapılabilmesini sağlayabilecek türden olmalıdır.

Teknik yeterlilik ve estetik

Teknik olarak mükemmeliyet ve güzel tasarım ne yazık ki Türkiye’nin kanayan yarası. En baba programcıları tasarımcıları görüyorum ve üzülüyorum. Öğrenmekten çok atıp tutmaktan anlayan bir millet olduğumuz için üzülüyorum…

Basitlik

Basitlik: Arabirim veritabanına erişmek için bir araç değildir. Onun yerine kullanıcı neyi görmek istiyorsa o verilmelidir. Son kullanıcı olarak beni ilgilendiren son 1 haftanın fotoğraflarıysa gidip iki tane tarih kutusundan bugünü ve geçen haftayı seçmemeliyim, o veritabanı yaklaşımı: x tarihi ile y tarihi arasındaki fotoğrafları göster. Benim ilgilendiği “yeni neler gelmiş (yeni = son 1 hafta)”

Basitlik var olan arabirimden eleman eksilterek kullanıcının hala aynı işleve sahip olmasını sağlama sanatıdır…
Basitlik kullanıcıların ekrandakileri “okuyarak” değil “tarayarak” işleyişi anlamalarını sağlama sanatıdır…
Basitlik eğitime ihtiyaç duyulmadan yazılımın kullanılabilmesini sağlama sanatıdır…

Her eleman bir proje yöneticisidir aslında

Proje yöneticisi yapılacak işleri insanlara atayan değil insanların kendi işlerini organize etmelerini ve birbiriyle organize olmalarını sağlayan kişi olmalıdır. Ekipteki her eleman projeyle ilgili sorumluluğunu alabilir ve kendi kendinin bekçiliğini yapabilir. Bu konuda ekiptekilere güvenmek gerekir, tabii ekiptekilerin de bu yapıya uyum sağlamaları…

Kendi kendini organize olan ekipler bu güven ortamının oluştuğu ekiplerdir. Ekip kendi kendini organize ederken proje lideri koordinasyonu sağlamalı.

Değişken, koşul, adaptasyon ?!?

Yazılım yapılır, “usability testing”e sokulur, imkan varsa istatistikler incelenir (mesela Google analytics), MySQL’in yeni versiyonu çıkar, müşteriden ek özellik istenir ya da var olan özellik farklılaştırılır. Çok kullanıcı gelir altyapının birden fazla sunucuya gereksinimi olur. İşte değişken koşullar bunlar ve diğerleri…

Bunlar sürekli olacak, yazılımı yaptım bitti yok artık. Sorunlar sürekli olacak ve çıkacak, genelde de adet olarak çok olmasına rağmen aynı sorunlar ortaya çıkar. Esnek olmak demek bunlara adapte olmak demek, hem de sürekli adapte olmak…

Ruby on Rails’i ilk gördüğümde çok etkilenmiştim ancak Ruby’nin hantallığı ve yıllardır süregelen PHP alışkanlıklarım Rails’i boş zamanlarımda minik uygulamalar yaptığım ve tasarlayanların bulduğu kolaylıkları öğrenme amaçlı kullandığım bir araç mertebesinde bıraktı.

Daha sonra Zend Framework çıktı (Symfony ve Cakephp de var framework olarak ama onları seçmeme nedenim ayrı) ama açıkçası ZF benim için hep “hiç yoktan iyidir” framework’ü oldu zira şu haliyle ZF’yi anlamak için bol bol araştırma yapmak ve debugger’ınızı açıp adım adım nasıl çalıştığını görmeniz gerekiyor.

21 Aralık’ta ZF ekibinin duyurduğuna göre ZF v1.5′te bence en büyük eksiklik olan “programcıyı yönlendirme” işine eğilmiş gözüküyorlar. Zend Framework’ün diğer framework’lerden farkı programcıyı kendi altyapısına uymaya zorlamaması. Kütüphaneleri veriyor ve programcıyı istediği yapıda kullanmakta özgür bırakıyor ancak MVC Model 2′nin karmaşıklığı, framework’teki kütüphanelerin çokluğu öğrenme zorluğu yaratıyor. Özellikle projenin organizasyonu hakkında (modeller nerede duracak, kontroller yapısı nasıl olacak vs.) Öğrenip kullanmaya başladığınızda ise birçok şeyi kopyala - yapıştır yaptığınızı fark ediyorsunuz.

ZF v1.5′te opsiyonel olarak proje yapısını otomatik sunma betiklerle işlemleri kolaylaştırma üzerine yoğunlaşmışlar gibi gözüküyor. Rails’i inceleyenler bu tür betiklerin getirdiği kolaylıkların farkındadır zaten, ZF’de de artık bu kolaylıkları görebileceğiz gibi duruyor.

Benim öngörüm ileride framework’lerin etkisiyle web tabanlı yazılımların üretilme zamanları oldukça kısalacak. Rails, ZF, Django, CakePHP, Symfony derken bunların IDE’lere entegrasyonu önplana çıkacak. Biz web2.0 geliştiricileri performans, güvenlik ve stabilite kaygılarıyla kendi yapılarımıza bağlı kalacağız belki, ancak web tabanlı servis veren diğer yazılımlar için bu altyapılar geliştirme sürelerinin azalmasına ve dolayısıyla maliyetlerin düşmesine destek olacak…

Diğer taraftan Javascript framework’leri de büyük bir hızla gelişiyor. Katmanlı yapı sayesinde birçok geliştirici artık projelerini en az 5-6 katmanda düzenliyor: CSS, Javascript, (X)HTML 3 ayrı katmanda semantik webi de destekleyerek önyüz mühendisliği adı altında gelişirken arkada template sistemi ile önyüze bağlanan page/interaction logic, application logic, data store gibi katmanlar birbirinden ayrı ve düzenli bir yapıya giriyor.

Javascript framework’leri RUI (Rich User Interface) oluşturulmasını hızlandırıyor, hatta biraz iddialı olacak belki ama birçok kişi için mümkün kılıyor. Javascript IDE’leri bile yavaş yavaş ortaya çıkmaya başladı: Bkz. Aptana

Sektör artık framework’lere doğru yönlenmiş vaziyette. Kullanmayacaksak bile altlarındaki çözümleri iyi öğrenmemiz gerek…

Dec 06

Yeni balon…

No comment - Post a comment

Here Comes Another Bubble - The Richter Scales

Süper video…

“Teknoloji’de balon yoktur”

Facebook 15 milyar $
Ford 16.8 milyar $

peh :)

Oct 16

Güvenlik…

No comment - Post a comment

Anne exploit’i :P

En çok rastlanan güvenlik açıklarına bir göz atalım:

  1. SQL Injection
    SQL cümlesi içerisine parametre olarak gönderilen değişkenin saldırgan tarafından değiştirilerek gönderilmesiyle oluşan açıktır.
  2. Session Fixation
    O an siteye giriş yapmış ziyaretçinin session id’sini bir şekilde alarak ziyaretçinin aktif session’ından yararlanma felsefesine dayalı bir güvenlik açığıdır.
  3. Session Poisoning
    Programcının gönderilen parametreleri kontrolsüz bir şekilde session değişkenlerine ataması nedeniyle oluşan açıktır.
  4. XSS (Cross Site Scripting)
    Saldırganın sayfaya bir açıktan yararlanarak javascript, css, html kodu yazabilmesi nedeniyle oluşan açıktır.
  5. XSRF (Cross Site Request Forgery)
    Saldırganın o an siteye giriş yapmış ziyaretçiye farkında olmadan istediği aksiyonu yaptırması ile ilgili bir güvenlik açığıdır.
  6. RFI (Remote File Inclusion) ve LFI (Local File Inclusion)
    Programcının gönderilen parametreleri kontrolsüz bir şekilde çalışan koda “include” etmesi nedeniyle oluşan bir güvenlik açığıdır.
  7. Referrer Spoofing
    HTTP_REFERER ziyaretçinin bir önce ziyaret ettiği sayfayı tutan bir environment değişkenidir. Ancak bu değişken istemci tarafından gönderildiği için bu değişkene dayanarak yapılan güvenlik kontrolleri kolayca aşılabilir.
Oct 05

Virütik Oyun

No comment - Post a comment

Viral pazarlama 1996′da netleştirilen bir konsept ve en yaygın uygulaması da internet üzerinde görülüyor. Aslında web2.0′ı başarıya götüren en etkili yöntemlerden biri. API’ler, widget’lar, Facebook Application’ları aslında birer viral pazarlama stratejisi diyebiliriz.

Dün katıldığım bir eğitimde Starwars’ın 1,2 ve 3. bölümleri yayına sokulmadan önce nasıl 1970′lerde çıkan 4,5 ve 6. bölümlerin tekrar hatırlatıldığı ve fan gruplarının ateşlendiğinden bahsediliyordu. Fan grupları ateşlendikten sonra insanlar heyecan içerisinde yeni 3 bölümü beklemeye başladılar. Fan siteleri viral pazarlama yöntemi olarak kullanılmıştı.

FanKit ScreenShotBugün StarCraft II‘nin RSS beslemesinde fan sitesi yapmak isteyenler için “fansite kit” görünce ilk önce “Türkçe StarCraft sitesi yapmak” geldi aklıma…

Keyifli olur hakkaten, iş yoğunluğu arasında keyif için site yapmanın kendime çok şey kattığına inanırım. Keyif için site yaptığınızda yaklaşımınız çok daha farklıdır çünkü…

… sonra bir anda viral pazarlama stratejisinin beni nasıl içine çekiverdiğini hissettim.

Türkçe bir StarCraft II sitesi yapacağım, sonra kendi yaptığım bu siteyi insanların kullanması için haliyle birçok kanaldan duyurmaya çalışacağım ve aslında StarCraft’ın çok etkili bir reklamını yapmış olacağım… Çok etkili diyorum çünkü reklamın inandırıcılığı azdır. Yani, bir arkadaşınızdan methini duyduğunuz bir cep telefonunu sabah akşam reklamı yapılan bir telefona tercih edersiniz.

Tabii bundan olumsuz bir anlam çıkmasın, bu şekilde yazınca sanki Blizzard fan sitesi yapanların sırtından geçiniyormuş izlenimi verebilir. Ancak görselleri orijinal StarCraft ekibi tarafından sağlanan, site yapma ve başarıya ulaştırma ipuçları da yer alan bir dokümana sahip “fansite kit” sayesinde amatör bir web tasarımcısı, başarılı ve belki üzerinden reklam geliri elde edebileceği bir site ortaya çıkarabilir…

Viral pazarlamanın, API’lerin, widget’ların etkili olmasının nedeni zaten bu: Karşılıklı kazanç…

Projemiz hızlı çalışsın diye muhtelif performans optimizasyonları yapıyoruz. PHP, apache, MySQL ve sunucuya ince ayarlar çekip optimizasyonun yeterli ya da ekonomik olmadığı durumlarda donanım güçlendiriyoruz.

Optimizasyonun fazlası gereksiz pahalı oluyor, çünkü optimizasyon için ayırdığınız vakit aslında bir maliyet (personelin saatlik ücreti üzerinden düşünebiliriz). Belli bir temel optimizasyondan sonraki ince ayar yerine donanıma yatırım yapmak daha ekonomik olabilir.

Ne Kadar Hızlı?

Peki ne kadar hızlı? “Hızlı”nın sonu yok aslında… 10Mbps yerine 20 Mbps, 4GB ram yerine 16GB ram, quadcore bir sürü cpu, sunucu “çiftliği”… ve hatta Yahoo’nun site hızıyla ilgili 13 prensibinden bir tanesi yerel sunuculardan bahsediyor. Yani her şehre bir sunucu koyarsanız çok daha hızlı sunabilirsiniz projenizi.

Yahoo’nun diğer bir prensibi web sunucusuna yapılan istemleri (request) sayıyor. Javascript, CSS ve imajlar gibi statik öğelerin yüksek sayıda olması demek, tarayıcınızın web sunucusuna bir sürü istek yapması demek. Ancak bu statik içeriklerin aslında “cache”de tutulduğu düşünülür ve KeepAlive’ın doğru düzgün ayarlandığı hesaba katılırsa atılan istem sayısının performansa etkisi çok da abartılı değil… Bu da istem sayısını düşürmeye yönelik önlemlere ne kadar vakit ayırmak gerektiği konusunda ikilemde bırakıyor insanı…

Bütün bunların geri dönüşü ne kadar etkiliyor peki?

FotoKritik

Bugün FotoKritik’e ek bir sunucu daha ekledik. Son zamanlarda 1 sn’nin üzerine çıkmaya başlayan php işlem hızı (exec time), tekrar 0.05 mertebelerine düştü.

Anlık ziyaretçi sayılarını karşılaştırdığımızda düne göre 1.5 ~ 2 kat arasında daha çok ziyaretçi gözlemliyoruz. Bunun sayfa gösterimini etkisini önümüdeki günlerde göreceğiz ve önemli bir yükseliş olacağı kesin.

Aslında sitenizin performans nedeniyle ziyaretçi kaybettiğinizi istatistiklerden de görebilirsiniz. Tekil kullanıcı sayınız artıyor ancak sayfa gösterimleriniz düşüyorsa, ya da tekil kullanıcıdaki değişimle kıyaslandığında sayfa gösterimlerinizdeki değişim eksi yönde açılıyorsa performans nedeniyle ziyaretçi kaybettiğiniz sonucuna varabilirsiniz.

Tabii ki ziyaretçi ve gösterim sayılarını etkileyen bir sürü faktör var, bunların içinde gündemden tutun tatillere, benzer içerikteki rakip sitelerin durumundan Türkiye’nin yurtdışı çıkışlarına kadar bir sürü değişken var. Bu değişkenleri takip edip istatistikleri yorumlamak da tabii ki ilgili projenin ekibine kalıyor…