BAŞA DÖN

Özel bir yenilikçi proje - Cumhurbaşkanı Nerede?

Göreve geldiği günden beri teknolojik yeniliklere büyük önem veren Cumhurbaşkanı Abdullah Gül’ün günlük çalışmalarının, mesajlarının, kabullerinin, yurtiçi ve yurtdışı gezilerine ilişkin detaylı bilgilerinin yer aldığı Cumhurbaşkanlığı resmi Internet sitesinde yeni özellikler kazandırmaya devam ediyoruz.

Cumhurbaşkanlığı Resmi İnternet Sitesi için yaptığımız yeni proje, Google Maps altyapısını kullanarak, Cumhurbaşkanımızın ziyaret ettiği yerleri harita üzerinde etiketlenmesine olanak sağlıyor. Etiketler üzerinden de ziyaret edilen yerde çekilmiş fotoğraflara ve ilgili içeriklere ulaşılmasını sağlıyor.

(http://www.tccb.gov.tr/cumhurbaskaninerede/)


Google maps IP engeline web sunucusu tabanlı reverse proxy çözümü

Ocak 2009'da yayına alınan Google Maps altyapısını kullanan "Cumhurbaşkanımız Nerede?" uygulaması Google servislerine ait bazı IP adreslerine mahkeme kararı ile erişim yasağı koyulmasının ardından hizmet veremez hale gelmişti. Aradan geçen bunca zamana rağmen Google tarafından çözüm üretilmemesi üzerine sorunu kendi yöntemlerimiz ile ortadan kaldırmak üzere durumu incelemeye koyulduk.

Google yoğun ziyaretçi trafiğini sunucular arasında dengelemek için çeşitli yöntemlere başvuruyor. Ülkemizden gelen bağlantılarda Google DNS sunucuları engellenmiş olan IP adresini içeren bir çözümleme yapıyor ve sorunda burada başlıyor. Kullanıcıların kendi bilgisayarlarında yapacakları bazı ayarlar ile bu problemi gidermek mümkün. Ziyaretçilere "Cumhurbaşkanımız Nerede?" uygulamasını kullanabilmek için bu ayarları yapmaları gerektiğini söylemek hiç mantıklı olmayacağı gibi birçok kullanıcının üstesinden gelemeyeceği teknik detayları içeren bir konu olmasıda işin cabası. Öyleyse bu işi kullanıcıların yerine uygulama sunucusunun kendisi yapmalıydı "Reverse Proxy" fikri bu gerekçe ile ortaya çıktı.

http://khm.google.com, http://khm1.google.com, http://mt0.google.com, http://mt1.google.com sunucularının IP adreslerindeki engelden dolayı haritaların yüklenemediğini tespit ettik. Öncelikle uygulama sunucusunda DNS çözümleme ayarlarında bazı değişiklikler yaparak bu servislere erişimi engel bulunmayan IP'ler üzerinden yapmasını sağladık böylece sunucu üzerinde Google Maps servisi çalışır hale geldi. Uygulamada kullandığımız "Google Map Javascript API" yi hazırladığımız Reverse Proxy üzerinden çağırdık.

<script type="text/javascript" src="webproxy.ashx?Url=http://maps.google.com/maps/api/js"></script>

webproxy.ashx dosyası "Url" parametresi ile kendisine gönderilen adrese ziyaretçinin gönderdiği bazı temel üstbilgileri ekleyerek sunucu tarafında bir istekte bulunur (http://msdn.microsoft.com/en-us/library/debx8sh9.aspx). Google sunucusundan alınan yanıt "text/javascript" tipinde ise kullanıcıya bu dosya transfer edilmeden (http://msdn.microsoft.com/en-us/library/system.net.webresponse.aspx) önce IP adreslerine erişim engeli bulunan sunucu adreslerine müdahale edilir. Yerleşik String.Replace metodu kullanılarak örneğin "http://khm.google.com/" adresi "webproxy.ashx?Url=http://khm.google.com/" şeklinde değiştirilir. Böylece kullanıcının internet tarayıcısına ulaşan "Google Map Javascript API" dosyasında erişim engeli bulunan diğer sunuculara yapılacak isteklerin "Reverse Proxy" üzerinden geçmesi gerektiği belirtilmiş olur. Ayrıca Google tarafından kullanıcı oturumunu takip etmek için gönderilen çerez bilgileri kullanıcıya özel bir "Session" değişkeninde saklanır (http://msdn.microsoft.com/tr-tr/library/system.net.httpwebrequest.cookiecontainer.aspx) aksi taktirde daha sonra yapılacak bir dizi isteği Google Map sunucusu ilişkilendiremeyerek yanıt vermeyi kesecektir.

O anda ekranda görülen bölgenin harita fotoğrafları "Google Map Javascript API" dosyasında dinamik olarak yaptığımız değişiklik sayesinde "webproxy.ashx?Url=...." adresi üzerinden talep edilir. Yeni hedefi "Url" parametresinden alan "webproxy.ashx" dosyası kullanıcıya özel olarak saklanan çerez bilgilerini ve kullanıcının tarayıcısından gönderilen bazı temel üstbilgileri ekleyerek sunucu tarafında yeni bir istekte bulunur. Google Maps sunucusu tarafından gönderilen içerik tipinin (MIME) "image/png" olduğu teyit edildiği taktirde istemciye aktarılırken sunucu performansı için istemci tarafı önbellekleme komutları eklenir (http://msdn.microsoft.com/en-us/library/system.web.httpresponse.cache(v=VS.90).aspx). Tüm bu işlemler ziyaretçi farketmeden ve kullandığı internet tarayıcısında yada işletim sisteminde hiçbir ayar değiştirmeyi gerekli kılmadan arka planda kendiliğinden gerçekleşmiş olur.

Yeterli teknik ve kodlama bilgisine sahip değilseniz kendi "Reverse Proxy" uygulamanızı baştan yazmak yerine http://www.codeproject.com/KB/IP/reverseproxy.aspx ve http://www.codeproject.com/KB/web-security/HTTPReverseProxy.aspx adresindeki gibi açık kaynak kodlu projelerden yararlanmayı tercih edebilirsiniz. Eğer PHP tabanlı bir sistem kullanıyorsanız http://www.glype.com/ adresindeki açık kaynak kodlu uygulamaya eklenti yazmayı deneyebilirsiniz.


T.C. Cumhurbaşkanlığı web sitesi de KolayPortal WCM kullanıyor!

Cumhurbaşkanlığı resmi web sitesi alt yapısını, şirketimizin bir ürünü olan KolayPortal WCM’a geçirdik.  Siteye girdiğiniz zaman gözle görülür hiç bir değişiklikle karşılaşmamanız normal. Çünkü yapılan çalışma görsel olmayıp, site alt yapısını statik html dosyalarından kurtarıp, dinamik bir içerik yönetim sistemine geçirmeyi amaçlıyordu. Yaklaşık iki yıllık bir çalışma neticesinde de bunu başarmış durumdayız.

Sistemin dinamik olmasıhata olasılığını en aza indirerek, hızlı bir şekilde siteyi yönetmek anlamına geliyor. Bu da Cumhurbaşkanımız’ın yoğun temposunun, saniye saniye kamuoyuna aktarılmasını kolaylaştırıyor.

Çalışma esnasında bizi en çok yoran kısım, tasarımının ve sayfa adreslerinin  birebir kalmasını sağlamak oldu. KolayPortal XL’in foto albüm modülü, içerik editörü gibi bir çok özelliğini Cumhurbaşkanlığı için modifiye edip, onların alışkanlıklarına ve kullanım tercihlerine göre yeniden düzenledik.

Alt yapı değişikliği ile birlikte yaptığımız ve kullanımı daha da kolaylaştıran ufak tefek iyileştirmelerden de bahsetmek istiyorum. Bunlardan ilki uzun sayfalarda sağ alt köşede çıkan “Yukarı” linki. Bu link sayesinde sayfa altıdan üste hızlı bir şekilde scrool kullanmadan hızlıca çıkılabiliyor.



Arama özelliği de site bölümlerine göre yapılabilir hale getirildi. Bu sayede Cumhurbaşkanlığı arşivinde aranan bir konuşma yada haber daha hızlı bulanabilir oldu.

RSS sayfası eklendi ve daha önceden olmayan Açıklamalar, Mülakatlar gibi kategorilerde de rss hizmeti sunulmaya başlandı.

Anasayfadaki haberler kısmı hareketlendirildi ve canlılık kazandırıldı.


Usta olabilmek

Bir süredir arabam yolda giderken birden bire gazı kesiyor ve "usta tabiri ile" yığılma yapıyordu. Şöyle düşünebilirsiniz; 120 ile giderken birden ayağınızı gazdan çekiyorsunuz ve araç anında 80'e iniyor. Arkadan gelen araçlar ise birden dibinizde bitiveriyorlar. Özellikle otoyol ve ışık sonrası kalkışlarda oldukça sıkıntılı anlar yaşanmasına sebep oluyor. Demedi demeyin.

Yakıt almadaki bu problemi karbüratörlü araçlarda pislik gelmesi gibi birşey diye yorumlayıp geçer belki diye boşuna ümit etmişim. Geçen gün Mustafa ile sanayiye gittik, aklımdaki ilk şey LPG sistemi ile alakalı olduğu idi, 2 yere sorunca 3. yerde bizim marka LPG ustasını bulduk. Bilgisayarda kontrol etti, beraber tur attık, "abi" dedi, "bunun sorunu elektrik ile alakalı, LPG sistemi iyi çalışyıor. Endüksiyon bobininden olabilir, sen bunu şuradaki Toyota'cı Adil ustaya göster"

Kalktık, Adil ustaya gittik, beraber bir tur attık, "bunun sorunu bobinden" dedi. Elektrik sisteminde kesinti olduğu için araba yığılıyor ama bunu gidip serviste yaptırırsan bobini garantili takarlar daha iyi olur dedi. Tahmini rakam ise yalan olmasın 300 civarı olurmuş.

İyi dedik, ayrıldık. Mustafa "abi servisten önce başka bir ustaya da göstermekde fayda var, benim ustalara bir gidelim mi?" diye teklif edince, kabul ettim. Tek başıma olsam sormam ama söz dinleyesim geldi.

Ustaya uğradık, beraber tur attık, "bu Endüksiyon bobinden olabilir" dedi :)  Bir ihtimal buji kablolarından da olabilirmiş. Toyota parçacısına uğradık, parçacı "ben hiç görmedim bu modellerde bobin arızası" diyerek ortaya yeni bir tez koyuverdi. Onu biraz kınasa da denemek için bir set kablo aldık. Usta araçla biz yayan dükkana döndüğümüzde, ileri geri manevra yapıyorlardı. "Bu" dedi, "geri giderken kesilme yapmıyor, sadece ileri giderken yapıyor, kesin LPG takılırken bir kablo açık kalmıştır, öne gidince kablo sıkışıyor ve şase yapıyor, bak gör!"

Aracı aldılar dükkana, abi kardeş kabloları çekip bırakmaya başladılar, 1-2 dk geçti geçmedi "bak işte!" sesi geldi. Hakikaten bir kablo sıyrılmış, onu bantladılar ve tüm sorun düzeldi.

Diğer ustalar da usta idi ama geri gitmeyi hiç düşünmemiş yahut geri gitseler de farkedememişlerdi. Yaşadıkları bu tür sorunlarda genel problem bobindi ve onu öne çıkarmışlar, gerisini  öngörememişlerdi.  Son usta ise, sorunun genel tespitini yapmış, elektrik kesintisi olduğundan hareketle, ihtimalleri değerlendirmiş, sonrasında tecrübesini konuşturarak hedefi 12'den vurmuştu.  Aklıma "çekici nereye vuracağını bilen usta hikayesi" geldi. Neyseki bizim çekiç bedeli 20 TL imiş.

Profesyonel olmak kolay, lakin bizler işimize ne kadar hakimiz? Ve ne kadar ustayız? Zor olan ise bu sorulardaki olması gereken cevabı verip, çekici yerine vuran usta olabilmek.

Not : Bu yazı, aynı zamanda kişisel bloğum olan http://www.kendimenotlar.com'da da yayınlanmıştır.


Yazılım sürecinde test etme ve kullanılabilirlik.

Geçtiğimiz perşembe akşamı (12 Kasım 2009UserSpots.com'un düzenlediği Dünya Kullanılabilirlik Günü etkinliğine katılma fırsatım oldu. Rahatlıkla "Son zamanlarda katıldığım en iyi etkinlikti" diyebilirim, yalan da olmaz. Etkinlik sahibi Mustafa Dalcı'ya ve mekan sponsoru BİE'ye teşekkürler.

Yazıyı o gece yazacaktım ama sunumların yayınlanmasını bekledim. (Geçen gün yayınlanmış Dünya Kullanılabilirlik Günü sunumları.) Ürün geliştiricilerin ve kendi açımdan yazılımcıların özellikle incelemeleri gerektiğini düşünüyorum.

Yazılımcılar uygulamalarda birim test (unit test, basitce : yazılan fonksiyonların test edilmesi) yaptığı gibi, arabirimleri de daha yolun başında test etmeli, kolları sıvayıp koda dalmadan önce ekran görüntülerini (eğer başka birimden gelmiyorsa) kağıda dökmeli, "en basit şekli ile bu ekranı nasıl tamamlarım ve işi çözerim?" sorusuna cevap aramalı ve cevabını da kağıda dökmeliler. Başka bir birimden çizimler geliyorsa bile üzerinde kafa yorup varsa çekincelerini bildirmeliler. 

Geliştirme sürecince ise, geliştiriciler/yazılımcılar, başka birini beklemeden ilk testlerini kendileri tam olarak yapabilirlerse;

  1. Ürün süreci hızlanacak (test sürecinde ve sonrasında geri dönüşler azalacak)
  2. Ürünler daha kaliteli olacak (az sorunlu ve dönüşü yüksek)
  3. Kullanıcılar bir kaç kat daha mutlu olacak (istediğine ulaşabilecek)
  4. Firma hedeflere daha yüksek oranlarda varmış olacaktır. (kârlılık artacak)
Bir fırsatı ürüne çevirmek için : 
  1. Hayal edin,
  2. Basit düşünün (KISS : Keep it simple stupid),
  3. Hayal edin,
  4. Basit düşünün,
  5. Çizin,
  6. Tartışın,
  7. Basit düşünün,
  8. Çizin
  9. Tartışın
  10. Çizin
  11. Yazın,
  12. Test edin,
  13. Yazın,
  14. Test edin,
  15. Yazın,
  16. Test edin,
  17. Yazın,
  18. Test ettirin,
  19. Yazın,
  20. Test edin,
  21. Test ettirin,
  22. Yayınlayın,
  23. Test edin,
  24. İzleyin (dönüşleri takip edin).
  25. goto 1: (yeni özellik geliştirme için)