Web teknolojileri ile ilgili teknik bir blog…

Yeni maceralara yelken açarken :P

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…

IE6′dan kurtuluyo muyuz nedir?

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

Agile Programming – Esnek Programlamanın temel ilkeleri

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

Yazının Devamı»

Zaman Framework Zamanı

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…

Web Sitelerindeki En Yaygın Güvenlik Açıkları

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.

Yeni başlayanlar için web teknolojileri

Performansın sayfa ziyaret istatistiklerine etkisi ile ilgili bir yazıma gelen bir yorum ne zamandır aklımda olan web teknolojileri üzerine genel bir bilgilendirme yazısını yazma fikrini getirdi aklıma pazar pazar… Zaten sıkılıyordum :)

Konuya tamamen yeni olan kişiler için derinlemesine fakat mümkün olduğunca kısa bir şekilde anlatmaya çalışacağım…

Bu yazıda şunlar var:

  • Tanımlar
    Web teknolojileri ile ilgili tanımlar. Kulak aşinalığı olsun diye…
  • İstemci Tarafı Teknolojiler
    HTML, CSS, JavaScript, DHTML, Flash nedir
  • Sunucu Tarafı Teknolojiler
    PHP, ASP, JSP, ColdFusion, CGI, Apache, IIS, MySQL, Oracle, PostgreSQL

Bu yazı kimler için?

Eğer web hakkında kulaktan dolma birşeyler bulduysanız ama toparlayamadıysanız, bir sürü terim duyuyor ve “bunlar da ne ola” diyorsanız kendi kendinize, bu doküman sizin için diyebilirim.

Ayrıca birçok geliştiricinin, hatta çok tecrübeli olanların bile, işin arkaplanını bilmedikleri için bariz hatalar yaptıklarına sürekli şahit oluyorum. Bu uzun sıkıcı yazıyı “aman biliyorum ben bunları zaten” demeden okuma sabrını gösterebilirseniz 1-2 ipucu da yakalayabilirsiniz belki…

Yazının Devamı»

Performans sitenize gelen ziyareti ne derece etkiler?

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…

Yahoo tasarım kalıpları

Web gelişiyor. Web2.0 diye isim koydu buna O’reilly, bundan da iyi ekmek yiyor ama olay 2.0, 3.0 değil. Web gelişiyor ve gelişmeye devam edecek.

Gelişirken de tasarımcının en büyük kabusu, kullanıcıya sunulması gereken bir sürü fonksiyonu çok basit bir şekilde sunmak, ortaya çıkartılan komplike aksiyonları kullanıcının kolaylıkla anlayabileceği gibi sunmak.

Bu konuda hepimiz deneme yanılma ile, yapılan örnekleri inceleyerek, tecrübe ederek birşeyler yapmaya çalışıyoruz.

Yahoo bunu kütüphaneleştirme yoluna gitmiş:
http://developer.yahoo.com/ypatterns/index.php

Tasarımın robotlaştırılmasına, bu tarz kütüphanelerle belirli limitlere sokulmasına karşıyım ancak bu kütüphaneyi takip ederek güzel çözümlere ulaşılabilir ve tasarım çözümleri konusundaki dağarcığımız geliştirilebilir…

Web2.0 projemi nasıl patlatırım?

Web dünyasını gün geçtikçe daha çok gerçek dünyayla birleştirmeye başlıyorum. Gerçek hayatta iş hayatımızda, özel hayatımızda neleri yaşıyorsak webde de aynılarını yaşıyoruz.

Canımız sıkılınca film izliyoruz, arada bir sanat galerine gidiyoruz, haber kanallarını açıp şöyle bir bakıyoruz neler olup bitmiş diye… Yatkın olanlarımız “gece hayatı” (!) ‘na takılıyor.

İlgi alanlarımıza giren sosyal gruplara takılıyoruz, sonra bu topluluklarda bazı gruplaşamalar olmaya başlıyor. Kimi kimini sevmiyor, bazen bir bakıyoruz “buralar da bozuldu artık abuk subuk insanlar doldu” diyoruz küsüyoruz bir süre gitmiyoruz.

Güzel bir kız gördük mü dönüp bakıyoruz, efendi olanlar çaktırmadan bakıyor, ayılar bakmakla kalmayıp sözle taciz ediyor. Allahtan internette elle taciz biraz zor :P

İş hayatında ise türlü türlü stratejiler geliştirmek gerekiyor. İyi bir ürün üretmeniz yetmiyor. Müşteri ilişkilerinden pazarlamasına, halkla ilişkilerine, işbirliklerine ve stratejisine kadar birçok alanda çaba göstermeniz gerekiyor.

İnternet çok büyük bir mecra. “Word of mouth marketing” (ağızdan ağıza pazarlama olarak çevirilebilir belki) dediğimiz pazarlama o nedenle çok etkili oluyor.

Halkla ilişkiler için, nasıl profesyonel firmalar medyada şirketleri ile ilgili haberlerin çıkması için çaba gösteriyorsa, web2.0 projeleri de bloglarda tartışılabilmek için yarışıyor. Ego tatmini için değil, pazarlama ve markanın benimsetilmesi için. Projeler artık yayına çıkmadan önce blog yazarlarına “özel gösterim”ler sunuyor. Blog yazarları da kendi medyalarında çıkmak üzere olan bir projeyi diğerlerinden erken yayımlamak için yarışıyorlar…

Dünyadaki web2.0 projeleri markaya çok büyük önem veriyor. “Sana” nasıl bir marka olduysa, Vakko, Beymen nasıl ismini kafalarımıza kazıdıysa flickr, yahoo, google, facebook, dig, technoratti de web dünyasında kafalara kazınıyor. Jenerik isimlerden uzak duruyor markalar…

Pazarlama için ise web2.0′da farkı yaratan şüphesiz ki widget’lar (kutucuk)…
Viral pazarlamanın en etkili yönü olan kutucuklar, aynı gerçek hayatta burnumuzun akmasına neden olan grip virüsü gibi siteden siteye yayılıyor. Hem markalaşmaya katkı sağlıyor, hem bedava reklam yapıyor hem de Google pagerank’imizin artmasını sağlıyor.

Komik bir şekilde bu projelerin gelişmesinde en küçük etkeni ise reklam sağlıyor. Diğer alanlarda hazırlık yapmadan yaptığınız reklam kampanyaları projelerinizi sadece bir noktaya kadar geliştirebiliyor. Gerçek hayatta nasıl reklam stratejisi belirlenmeliyse web’de de öyle. Gerçek hayatta takip eden ürün olarak çıkıp devasa reklam bütçeleriyle kendini batıran bir sürü firma var. Bir o kadar web projesi de var.

Web2.0 projesini patlatmanın “modern” yöntemleri var. Ben sadece aklıma geldiği gibi 1-2 anahtar terimden bahsettim. Umarım bu anahtar kelimelerden ilham alanlar olur…

Bırakın içeriğinizi çalsınlar

Rahmetli babam yasaklar koymazdı biz büyürken. Kendisi zamanında az haylaz olmadığı için sanırım, yasakların ihlal edilmek için konduğunu bilirdi.

Otur da ders çalış diye baskı yapmadı bana hiç, ben ders kitabının arasına mecmua koyar okurdum derdi, beni zorlasa benim de muhtelif uyanıklıklarla kendisini atlatabileceğimi ya da atlatmaya çalışacağımı bilirdi. Onun yerine başarının hayatımı kurtaracağını kısa ve öz söyler çekilirdi. Onu da çok nadir söylerdi zaten… Konuşmadan da anlayabilirdik biz birbirimizi…

Kahvehane gibi bilardo salonları vardı eskiden. Ben çocuğum olsa gitmesini istemezdim böyle yerlere. Babam ona da karışmazdı tasvip etmese bile, sadece gidip gitmediğimi bilmek isterdi.

Ne kadar sıklıkla, hangi zamanlar gidiyorum, okulu ne zaman asıyorum onu birinci ağızdan bir şekilde öğrenirdi sadece. Böylece kontrol her zaman elinde olurdu.
Hiç sınırı aşmadım, ama şu an biliyorum ki aşsaydım orada müdahale edip beni kurtaracak biri bekliyordu aslında…

API’yi anlamıyor hala geliştiriciler. Binbir güçlükle toparladıkları içeriği API gibi bir nimetle altın tabakta sunmak istemiyorlar. Ya da projelerinin “kurcalanması” fikri hoşlarına gitmiyor. API geliştirmekte harcadıkları zamanın kendilerine nasıl bir geridönüş sağlama potansiyeline sahip olduğunun farkında değiller.

Web2.0′ı alevlendiren en önemli faktörlerden biri de API’ler aslında. Çalmaya niyeti varsa insanların, bizden habersiz içeriğimizi sömürmesi yerine bizim belirlediğimiz kurallar içerisinde, bizim bilgimiz dahilinde çalmalarına izin vermek daha etkin bir çözüm.

Üstelik projenin yaygınlaşmasında da çok büyük desteği var. Tasarım prensibi olarak çok fonksiyon sunmak değil, ihtiyaçlara cevap verecek minimum fonksiyonu sunabilmek asıl maharet… Peki sunulmayan o fonksiyonlar ne olacak? İşte orada API devreye giriyor.

API, servisinizin eksiklerini keyiflerine göre tamamlayacak geliştiriciler kiralamanız demek… Üstelik kira ücretini sizin ödemenize gerek yok, yaptığı ek servisten kazançlarını kendi planlayacak geliştiriciler.

… ve emin olun, dünya çapındaki büyük web2.0 projelerinden gördüğümüz kadarıyla API sunan proje, API’yi kullanan geliştiricilerden daha çok kazanç sağlıyor.

“Dolaylı yoldan! API’nizi parayla sunmaya kalkmayın sakın ondan bahsetmiyorum :)”

Web2.0 paylaşım üzerine inşaa edilmiş bir paradigma, API bu paylaşımın en uç ve en etkin noktası. Geliştiriciler olarak bu konuya daha çok eğilmemiz lazım (özeleştiri!)