BAŞA DÖN

Celal Bayarın tapusu Köşkten çıktı

Cumhurbaşkanlığında dijitalleştirme projesi kapsamında birçok belge hassas işlemlerden geçirilip dijital ortama aktarılıyor.

Projeyle ilgili basında çıkan haberlerden birini sizinle paylaşmak isterim.

 

Haber; Radikal gazetesine ait.

Cumhurbaşkanlığı Genel Sekreteri İsen, tapu belgelerini Bayar ın torununa takdim etti.

ANKARA- Cumhurbaşkanlığı arşivlerinin dijital ortama aktarılması, Köşk’te ‘51 yıldır bekleyen bir tapuyu’ da gerçek sahipleriyle buluşturdu. Arşiv taramasında ortaya çıkarılan ve 3. Cumhurbaşkanı Celal Bayar’a ait olduğu belirlenen tapu belgeleri, Cumhurbaşkanlığı Genel Sekreteri Mustafa İsen tarafından Bayar’ın torunu Emine Gürsoy Naskali’ye takdim edildi. Naskali, tapunun Celal Bayar Köşkü olarak bilinen Ankara Atatürk Bulvarı’ndaki 2 katlı eve ait olduğunu belirterek, “Yeni bir yere ait sürpriz bir tapu değil. 27 Mayıs sonrası malum şartlar altında Köşk’ten ayrıldıkları için alamadıkları tapu” dedi. 
İsen, Cumhurbaşkanlığı arşivinin dijital ortama geçirilmesi çalışmaları sırasında buldukları bir dosyanın içinde Bayar’a ait kişisel tapu belgelerinin yer aldığını söyledi. 
Tapuların hikâyesini Bayar’ın torunu Naskali, Radikal’e anlattı. Kendilerine aktarılan tapuların Ankara Atatürk Bulvarı’nda bulunan ve Celal Bayar Köşkü olarak bilinen 2 katlı eve ait olduğunu belirten Naskali, “Anneannemle dedemin evine ait tapular. Zaten biz o evi devrettik. Bizim için bilinmeyen bir yere ait bir tapu değil. 27 Mayıs’ta malum şartlar altında Köşk’ten ayrıldıkları için orada kalmış” diye konuştu. Naskali, Atatürk Bulvarı’ndaki Celal Bayar Köşkü’nün yapılış hikâyesini de anlattı. Bayar ve eşi Reşide Bayar’ın Ankara’ya ilk geldiklerinde Keçiören’de bir evde kaldıklarını anlatan Naskali, Celal Bayar’ın Keçiören’den Çankaya’ya gidiş-gelişleri sırasında atların dinlenebilmesi için evin bulunduğu arsayı satın aldığını söyledi. Daha sonrasında ise yaşamak için bir ev fikrinin oluştuğunu belirten Naskali, “Anneannem yaşamak için 2 katlı bir ev istiyor ve Etnografya Müzesi’nin mimarı Arif Hikmet Koyunoğlu’na gidiliyor” diye konuştu. 

3 milyon evrak var
Bir süredir devam eden Köşk arşivlerinin dijital ortama aktarılması kapsamında, Cumhurbaşkanlığı’nda hummalı bir çalışma sürdürülüyor. 20 kişilik bir ekip, 3 milyon evrakı teker teker inceleyerek dijital ortama geçiriyor. Çalışmalar sırasında gerekli oldukça dışarıdan uzmanların bilgisi ve görüşüne de başvuruluyor.


Çalışmalarımızda dikkat ettiklerimiz

Blog'da daha önce bir kaç yazı da geçen çeviklik [1],[2] iş üretmemizi ciddi manada etkiliyor. Hızlı kararlar alıp, sıkı takipçisi olabiliyoruz. Ekip içinde nelere dikkat ettiğimize dair kısa bir eposta yazarken alttaki yazı ortaya çıktı. Nelere dikkat ediyoruz, nasıl çalışıyoruz? diye merak edenler için bir kaç ipucu içeriyor.

Projelerimiz kişiye bağımlı olarak gitmiyor, kişiler projelere bağımlı gidiyor. Yani her hangi birimiz herhangi bir projede modifikasyon / geliştirme yapabiliyoruz. Bu bakımdan, yeni bir ek kod yazmadan önce mutlaka ve mutlaka var olan iş parçacığı inceleniyor, mantıksız bile gelse o kodu yazan arkadaşın ne yapmak istediği / yaptığı analiz edildikten sonra geliştirme yapılıyor. Anlaşılmayan noktayı ilgili kişilere soruyoruz.

Yaptığımız çalışmaları önce kendimiz test ediyoruz. Bir link dahi koysak bu link çalışıyor mu çalışmıyormu kontrol ediyoruz. Kendi arkamızı başkasına toplatmamak için elimizden gelen gayreti gösteriyoruz. Bu konuda bazen kaçaklar olsa da günden güne daha iyiye gidiyoruz.

Çalışmalarımıza özen gösteriyoruz. Yaptığımız ufak bir iş dahi olsa, küçük bir pencereden değil, daha geniş bir perspektiften bakmaya çalışıyoruz. İstenilen işi yapmaya başlamadan önce daha sonradan oluşabilecek ihtiyaçları göz önünde bulunduruyoruz.

Hiç değer atanmadığını bildiğimiz bir değişken dahi silerken düşünüyor, emin oluyoruz. Yapacağımız işle bir ilgisi yoksa hiç bir yeri ellemiyor, mıncıklamıyoruz. En iyi kod çalışan koddur felsefesini uyguluyoruz. Fakat bu görülen hataları not etmediğimiz ve ilgilisine bir iş (case) veya bir kod inceleme kalemi (code review) olarak dönmeyeceği anlamına gelmiyor.

Ayarların saklandığı dosyalara yeni değer (value) eklenmedikçe ne commit ediyor ne de push ediyoruz. Herkesin kendine göre db, url vb. gibi ayarları bulunuyor. Eski konfig değerlerine getirmek can sıktığı gibi ekstra uğraşmamız iş kaybına sebep oluyor.

İş takip sistemine ve kod versiyonlama & koruma sistemine (revision control) sonuna kadar bağlı kalıyoruz. İşlerimizi sistemden alıyor, sistem dışı gelenleri sisteme giriyor (takip.erkyazilim.com.tr) ve çalışmalarımızı oradan takip ediyoruz. Kodlarımızı düzenli olarak gönderiyor (push), gönderirken de ilgili iş kalemini (Case ID) veya açıklamasını eklemeyi ihmal etmiyoruz.  Aynı projede farklı kalemlerde uğraştığımızda herkes kendi kalemini gönderiyor (commit & push) ve bir çakışma varsa diğer parçalar ile birleştirmeye (pull & update & merge & push) erinmiyoruz.

Yaptığımız bir işte mutlaka ve mutlaka başka arkadaşın görüşünü alıyoruz. Tek başımıza karar vermeyip, bir birimizin tecrübelerinden faydalanıyoruz. XP denen şeye inanıyor, yeri geldiğinde diğer bir gözün ne kadar başarılı bir şekilde sorunları görüp kolayca çözdüğünü unutmuyoruz.

İşlerin her aşamasında anlamadığımız, takıldığımız konularda bir birimize soru sormaktan çekinmiyoruz. Hiç birimiz soru sorduğumuz için diğerine kızmıyor. Sadece zamanlaması kötü olduğunda üf püf ediyoruz ama mutlaka cevaplıyoruz. :)


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.


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)