Web teknolojileri ile ilgili teknik bir blog…

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!)

Frameworkler, Hibrid Tasarımcı, Web2.0

Nokta’ya geldiğim günden beri savunduğum bir yaklaşım vardı… Yeni gelişen web’de, buna web2.0 diyoruz aslında, teknik anlamdaki başarıyı getiren iki önemli, farklı faktör var:

1. Sürekli değişim
2. Hibrid tasarımcı kavramı

Sürekli Değişim

Eskiden sağlam bir planlama, tüm fonksiyonlara karar verip analiz etme ve ürünü çıkarma şeklinde işliyordu projeler.

Sonraki versiyon uzun bir süre sonra, yine benzer aşamalardan geçtikten sonra çıkıyordu. Çıkana kadar kimsenin bilmediği, gizli kapaklı hummalı çalışmalar sürüyordu.

Yeni yaklaşımda ise planlama yapılırken detaylara gömülmek yerine:

- ilk versiyonu çıkar
- kullanımı analiz et, ihtiyaçları belirle
- yeni versiyonu çıkar
- kullanımı analiz et, ihtiyaçları belirle
- yeni versiyonu çıkar

şeklinde ilerliyor herşey. O kadar çok versiyon çıkıyor ki, versiyon diye bir kavramı kullanmıyor bile bir çok proje… Versiyonlamamayı “sürekli beta” olarak adlandıranlar bir ara çok modaydı.

Bu, tasarımın defalarca değişmesi demek… Veritabanına eklenen/çıkan yeni alanlar, yazılımın arada bir tepetaklak olması demek.

Buna tasarımcıların ve yazılımcıların kendini hazırlaması ve sürecin doğal bir parçası olarak kabullenmeleri gerek.

Bu “yap-boz”ların hızla gerçekleştirebilmesi açısından framework’ler çok büyük şeyler kattı dünyadaki büyük projelere.
Ya da belki de tam tersi, büyük projeler framework’lere ilham kaynağı oldu. Framework kullanmayan büyük projeler de framework’lerin getirdiği avantajları sağlayan altyapılarını kurarak ilerlediler. Kendilerine özgü frameworkler kurdular diyebiliriz belki de…

Kibrit Tasarımcı!

Ne demek hibrid?? Ah be TDK yetişemiyorsun ne yazık ki gelişen teknolojiye…

“Wepçi” arkadaşlara dedim ki,

….. web tasarımcısı diyelim de ayıp olmasın

Web tasarımcısı arkadaşlara dedim ki, unutun o firmalara sayfa hazırlarken “ben fotoşop’ta yaparım, htmlci sayfa haline getirsin çünkü ben programcı değil sanatçıyım” laflarını…

Artık öyle bir şey kalmadı üzgünüm. CSS’i sevgilisinin yuvarlak hatları kadar bilmeyen web tasarımcısı 5-10 sayfalık kurumsal site tasarlamaktan öteye geçemez. Ajax’ı nerede kullanmaması gerektiğini bilmeyen, actionscript’in kabiliyetlerinden bihaber olan tasarımcı anca “bizim yeğen de yapıyor web sitesi” cümlesinin öznesi olabilir…

Sevgi Kelebeği - bengidiyorum.blogspot.com
sevgi kelebeği

Web tasarımcısı, grafik tasarımcısından farklı olarak, internet gurusu olmalı. Programlamaya, daha doğrusu analitik düşünceye çok ters olmaması lazım. Uçuk kaçık hayal dünyasında yaşayan, sanat kim içindir geyiklerine giren entellektüel sevgi kelebekleri yerine, estetik duygusu güçlü olan ve tasarım ilkelerini bilen, CSS’te organizasyon yapabilen, javascript’te 3-5 satır if-else cümleleri kurabilen programcı-tasarımcı arası ortaya karışık web tasarımcıları hayatta kalacak web2.0′da, web3.0′da ve hatta ‘web9.0.1rc1 build 3425′te…

Bu ortaya karışık yanar dönerli şeye hibrid tasarımcı diyoruz.

Sonuç

Yazılar giriş-gelişme-sonuç şeklinde olmalıdır. Buyrun size sonuç (lisedeyken de nefret ederdim edebiyat derslerinden, öys’de türkçeden top çekmiştim o ayrı…)

Arda Kutsal şu yazısında Türkiye’deki geliştiriciler olarak global ürün çıkarmamız gerektiğinden bahsetmiş.
Altına 3 sayfa huysuzluk yaptım, muhtemelen gıcık oldu Arda bana :)

Global ya da lokal, dünyadaki projelerle yarışacak boyutta proje çıkarmak istiyorsak üşenmeyeceğiz….

Framework’lere geçmek için üşenmeyeceğiz,
2 günde bir tasarım mı değişir canım demeyeceğiz,
Ben sanatçıyım kardeşim kodlama benim sanatımı öldürür diye kendimizi kısıtlamayacağız,
script.aculo.us neymiş ben de yazarım ne var ki’lerle vakit kaybetmeyeceğiz.

Bu iş teknik bir iş… Hem de çok teknik bir iş. “Fikrimgeldi”den öteye geçebilenler Türkiye’nin internetini ayağa kaldıracak olanlardır.

Benden söylemesi
(evet, hem huysuz hem de ukelayım!)

Web2.0 tarzı photoshop eklentileri

Güzel bir blog: Deziner Folio

Özellikle “Downloads” kısmında, gloss tarzı buton ve ikon sevenler için güzel photoshop stilleri ve ikonlar var. Ayrıca dfGallery de şık ve ücretsiz bir flash slideshow. Flickr, photobucket vs. de destekliyor.

Apache2.2 “The specified module could not be found”

Uzun süredir kendi bilgisarımda PHP çalıştırmak için IIS kullanıyordum ancak RESTless uygulamalar için web sunucusunun Rewrite özelliğinin olması lazım ki bu IIS’te yok. Bu işi yapan bir “ISAPI Rewrite” programı mevcut olsa da internetteki neredeyse tüm dokümantasyon LAMP’e (Linux-Apache-MySQL-PHP) göre hazırlanmış olduğu için anlamsız yere vakit kaybetmeme neden oluyor…
Bu devirde Amerika baştan keşfedilmemeli…

O yüzden yıllar sonra windows’uma Apache kurayım dedim.
Installer’ı indirmem ve kurmam yaklaşık 5-6 dakika sürdü. PHP’yi tanıtmam ise yaklaşık 1 saat 25 dakika!

İnatçı ve huysuz olmanın bir sonucu olarak WAMP‘a falan bulaşmadan azmettim başardım ama ben çektim belki bu yazıyı okuyan birileri çekmez diyerekten sorunu ve çözümü yazayım.

Aynen installation notlarındaki gibi kurup daha önceden kurmuş olduğum php5.1′in kurulu olduğu dizini tanıtmama rağmen Apache ısrarla “The specified module could not be found” hatasını verdi php için. Meğer Apache2.2 için php’nin yeni versiyonlarında php5apache2_2.dll diye farklı bir isapi dll’i varmış. Eskisi php5apache2.dll idi…

PHP 5.2.3′ü indirip kurduktan sonra bu DLL’i gösterince sorun kalmadı…

Zend Framework’ü kurcalamaya devam edebilirim artık…

1-2 kelam

“People likes RUI’s”

RUI: Rich User Interface. RUI’nin bokunu çıkartıyor yeni, fark yaratan siteler. Artık istemci tarafı programcılarla sunucu tarafı programcıların ayrılmasının vakti geldi. Yahoo’nun istemci tarafı programlama ile uğraşan ayrı bir mühendislik birimi varmış mesela…

 

“Design pundits going beyond functional: Emotional design”

Apple’ın login sayfası hatalı şifre girdiğinde titreşiyormuş. Emotion… hmm… Gereksiz mi? belki… belki de değil?

 

“Complexity needs to be managed, not striped out. Simplicity is not only substraction”

KISS (Keep It Simple Stupid) diyoruz ama herşeyin de bir sınırı olmalı sanki. Signal37 ürünlerini eleştiren bir blogdan görüp not almışım. Türkiye’de Pilli ürünlerine eleştiri olarak gönderilebilir… Yine de seviyoruz Signal37′ı ve Pilli’yi…

HTML Validator

Aslında trendlere çok takılmayan, daha çok pratik bir fakat düzenli, kalıcı çözümler üretmeyi severim. O yüzden de standartları pek sevmem.

XHTML yazmam mesela, tableless design umrumda değildir, kod semantik olsun diye dert etmem. Bunların hepsi mutlaka yararları olan standartlar ama aynı zamanda vakit alan, uğraştırıcı şeyler. Ama kodun temiz ve anlaşılır, tüm tarayıcılarda düzgün çalışmasına dikkat ederim o ayrı.

O yüzden HTML validator, CSS validator türevi kodunuzun ne kadar standartlara uyduğunu kontrol eden programları da pek kullanmam, zira ota boka hata mesajı çıkartırlar.

Mesela bu programlara FotoKritik‘te fotoğraf listelediğim bir sayfayı verdiğimde (rakamları atıyorum) 187 tane hata bulundu diyor, bunlardan 170′i “IMG” tag’ına “ALT” özelliği koymamam nedeniyle…

Bilmeyenler için: ALT özelliği görme engeli olan kişiler için düşünülmüş bi komuttur ve standartlar mutlaka tüm imajlarda bu özelliğin bulunması gerektiğini söyler. Aslında gerçekten dikkat edilmesi gereken bir kural…

Allahaşkına FotoKritik bir fotoğraf sitesi, görme engelli arkadaşların yararlanmak isteyeceği belki de son kaynak. Banane ALT özelliğinden…

Allahtan sağolsun benimle benzer düşünen birileri oturmuş Firefox’a bir eklenti yazmışlar: HTML Validator. Bu eklenti sayesinde HTML kodundaki standart dışı ve hatalı kullanımları listelerken ilgili olmadığını düşündüğünüz hata mesajlarını bir daha göstertmeyebiliyorsunuz. Özellikle sayfa görüntüleme ile ilgili problemlerin keşfinde çok işe yarıyor.

Şu yazımda web geliştiricisinin olmazsa olmazı bazı araçları kısaca tanıtmıştım, bu listeye HTML Validator’ı da eklesem iyi olacak…

HEAP tablo tipi

MySQL’in çoğu zaman gözden kaçan tablo tipi HEAP’ten bahsedesim geldi bugün. HEAP tipi tabloların özelliği MySQL’in bu tipteki tabloların verilerini doğrudan RAM’de tutması. Dolayısıyla disk I/O’suna bağlı olmadığı için çok yüksek hızda cevap verebilen bir tablo tipi.

Ancak RAM’de olması nedeniyle veritabanı sunucusunun yeniden başlatılması durumunda tüm veri haliyle kayboluyor. Ayrıca çok fazla veri kaydedilmesi durumunda sunucunun RAM’ini doldurma ihtimali de mevcut. Peki bu iki büyük engele rağmen neden böyle bir tablo tipine ihtiyaç duyulmuş?

Ben HEAP tabloları iki yerde kullanıyorum:

  1. Session bilgisi
  2. Kullanıcı cache

Session bilgisi dediğim PHP’nin session altyapısı değil. Session tablosunda o an online olan kullanıcıları, bağlandıkları IP adresini ve ihtiyaç duyduğum bazı birkaç kişiye özel bilgiyi ve son aksiyon zamanını tutuyorum. Böylece hatta kaç kişi online, hangi IP adresiyle bağlı takip etme imkanım oluyor. Aslında bunun bir ileri seviyesi PHP’nin session bilgisini tamamen bir HEAP tabloda tutmak.

PHP’nin session bilgisini böyle bir tabloda tutmak özellikle birden fazla web sunucusu ile yayın yaptığınızda faydalı olacaktır zira session datasını dosya sisteminde tutarsanız kullanıcı round robin ya da benzeri altyapılarla farklı sunuculara yönlendirildiğinde session bilgisi kaybolacaktır.

Cache

İkinci kullanım alanı ise kullanıcı cache’i. FotoKritik’te kullanıcıların hesap durumlarını her bir request’te kontrol ettirmem gerekiyor. Çünkü online kişiler kural dışı bir hareket yaptıkları anda hesapları moderatörler tarafından geçici ya da kalıcı olarak askıya alınabiliyor.

Ayrıca kullanıcıya yeni site içi mesaj gitmiş mi gibi bilgileri de sürekli sorguluyorum. Bu sürekli sorguları hafıza yerine disk üzerinden yapmak, az hit almayan bir sitede 15.000 devirli RAID yapılmış disklerinizi bile gereksiz bir yük altına sokabilir….

Bu iki tabloyu birleştirmek de mümkün olabilir, ben tercih etmedim ama önemli olan bu tarz sürekli yapılan ve sunucunun yeniden başlatılması durumunda kolayca tekrar yaratılabilecek bilgileri HEAP tipi tablolarda tutmanın gerçekten ciddi performans kazanımları sağlayacağıdır.

HEAP tablonun aşırı RAM tüketmesini engellemek için, tablo yaratılırken maksimum satır sayısını baştan belirleyebiliyorsunuz, ve belirlemenizi şiddetle tavsiye ederim ;)

Gebze Evden Eve Nakliyat