Oyuncak

Bir gün bir çocuk evde bir sistem buldu. Sistem kapanmıştı. İçinde binlerce fotograf, video, ses, yazı,….
Bir kaçının hayatını merak etti.
Ve onlarin kardeslerinin, anne ve babalarinin…
Dizinleri gezindi bir müddet.
Anlık , sistem geçmişinin snaphotları, kesik kesik, frame frame.
Bu baktiği dünya gerçekten var olsaydi, nasıl olurdu?
Tekrar sistemi çalıştırsa acaba herkes alınmış snapshotlardaki gibi aynı mı olurdu?
Benzer mi?
Tamamen farklı mı?
Sistemi çalıştırdı.

Sistem ilk defasinda ayağa kalkmadı. Yıllardır bir köşede unutulmuş bu demode oyuncağın çeşitli sistem paramatreleri artık kullanılamaz olmuş, şebekedeki çesitli servis noktaları artık yok veya farklı arayüzler kullanmaktaydı.
Çok meraklanmıştı. Elindeki christmas oyuncağını sallayıp içindeki suda yüzen kar tanelerinin nasıl yavaş yavaş su içinde hareket edip tabana düşeceklerini merak ediyordu.
Babasına kostu. Saat geç olmustu. Babası oyuncağı hemen hatırladı, gülümsedi :)
Oyuncağı kodlayan ustayı hatırlıyordu. Aldığı günü, usta hala yaşıyor muydu?

Geç oldu, yarın ilk iş ilgileneceğim dedi çocuğa.

Pragmatik Araştırmacı

Akademiye geçmeden önce bir süre özel bir şirkette çalışmıştım, orada çevik (agile) metodları benimsemiştik. Farkettim ki piyasadaki durum, öğrenci olarak yapılması gerekenlerle pek fazla örtüşmüyor. Bunun başlıca nedeni öğrenci iken bakımı yapılacak şekilde bir ürün üretmiyorsunuz. Örneğin yaptığınız ödevler tek seferlik; bir kere öyle ya da böyle çalışır birşey elde ettikten sonra sonuçlarınızı elde edip yazdığınız kodları bir daha yüzüne bakmamak üzere rafa kaldırıyorsunuz. Araştırma yaparken durum birazcık daha farklı, yazdığınız kod üzerinde biraz daha uzun süre uğraşıyorsunuz , kodları elinizde biraz daha uzun süre tutuyorsunuz, fakat tecrübe ettiğim kadarıyla sonuç pek fazla değişmiyor, kodlar iş bittikten sonra bir köşeye terk ediliyor. Bu yüzden akademideki kod kalitesi bazı istisnalar (ör. Zemberek) dışında oldukça düşük.

Uzun süren araştırmalar bu duruma pek uymuyor, tez gibi uzun soluklu çalışmalarda mecburen kodunuzun bakımını yapmanız gerekiyor. Kimse yapmıyor o ayrı mesele. Yazdığınız kodu güzel yazmadıkça, bakımını yapmadıkça teknik borç (technical debt) birikiyor. Bu borç kısa vadede ilerlemenizi sağlayan fakat orta vadede size ayakbağı olacak eylemlerinizi açıklayan bir kavram. Bugün az bir emek harcayıp kodunuzu güzelleştirmek, ya da bir şeyi doğru şekilde yapmak yerine günü kurtarırsanız, daha sonra atacağınız adımlar daha da güç olacaktır. Az evvel dediğim gibi akademide yazılan kodlar çok kısa ömürlü olduğu için bu pek sorun olmuyor.

En azından makro ölçekte bu böyle. Son dönemlerde deneyimlerim ödevlerin, projelerin kısa ömürlü olmasına rağmen güzel programlama pratiklerine ihtiyaç duyduğu yönünde. En son arkadaşımı benim 1 günde bitirdiğim yapay sinir ağı ödevi için 3-4 gün harcamasını gördüğüm zaman farkettim bu durumu. İşlerimizi kolaylaştıracak yöntemlerin başında temiz kod yazmak geliyor. Temiz kod yazmanın, kısa süreli projeler olsa dahi, hayatımızı nasıl daha güzel kılacağını bir örnekle tarif etmeye çalışayım.

Diyelim ki $w_{i2}x+w_{i1}$ gibi bir ifadenin sonucunu sigmoide sokacağız, bu işi halletmenin MATLAB’da en düz yolu:

   y = 1 ./ (1 + exp(-x.*w(i, 2) + w(i, 1)));

Benim tercih edeceğim yol:

   y = sigmoid(x.*w(i, 2) + w(i, 1))

   function ret = sigmoid(x)
      ret = 1 ./ (1 + exp(-x));
   end

Sigmoid’i fonksiyon olarak ayrıştırarak

  1. Yeniden kullanılabilirliğini arttırdık. Bu örnekte, yapay sinir ağlarıyla uğraştığımızdan, birden fazla yerde sigmoid’i gönül rahatlığıyla kullanabiliriz. Her defasında yeniden aynı ifadeyi yazmakla uğraşmayız.
    Sigmoid’i yazarken bir yanlışlık yaptıysak dahi, bu yanlışlığı her yerde düzeltmemiz gerekmez. Sadece bir yerde düzeltmemiz yeterli olur. Diğer türlü sigmoid ifadesinin geçtiği her yeri bulmaya çalışırken gözümüzden bir kaç tanesini kaçırmamız çok olası.
    Hatta bunun bir adım ötesi, yavaş yavaş kendi kullanacağınız kod parçacıklarını kütüphaneleştirme yoluna gitmek olur. İleride size avantaj sağlayacaktır. Doğrudan kendi deneyimimi paylaşayım. Bir dönem projesi için çeşitli uzaklık metriklerini ($\chi^2$, Bhattacharaya, Kolomogrov vs.) implement etmiştim. Bir sonraki dönem başka bir dersin hocası verilen ödevde kullanacağımız her farklı uzaklık metriği için bonus puan vereceğini söyledi. Hiç uğraşmadan elimdeki hazır yazılmış 3-5 metriği çaktım geçtim.
  2. İfade daha anlaşılır oldu. Anlaşılır olması tekrar geri dönüp baktığınızda ilgili ifadede ne olup bittiğini çabucak kavramanızı sağlar. Anlaşılır kılarken ayrıca bug oluşumunu da engellersiniz aslında. Verdiğim kötü örnekte aslında bug var, exp() içine alırken, “-” toplamın iki elemanını da negatiflemeliydi, yani ifade y = 1 ./ (1 + exp(-x.*w(i, 2) - w(i, 1))); olmalıydı. Gördüğünüz gibi  böylesi “obscure” durumda hata yapmak daha kolaylaşıyor, hatayı bulması da zorlaşıyor. Sigmoid’i ayrı bir fonksiyon olarak yazdığımız durumda hata çabucak gözümüze çarpardı.

Bazıları önerdiğim yöntemin, fonksiyon çağrıları ve pass-by-value yüzünden daha yavaş olduğunu söyleyecektir, hele ki akademide mikro optimizasyonlar oldukça önemli olabiliyorken. Pragmatik programcılığın altın kurallarından biri de

  1. Profile et
  2. Darboğazı bul
  3. Optimize et

der. Profile etmek, kodunuzdaki ifadelerin hangilerinin koşmasının ne kadar zaman aldığını ölçmektir. Yıllardır yazdığım kodların hiçbirinde (abartmıyorum, 1 tanesinde bile olmadı bu) darboğaz tahmin ettiğim yerde değildi, ve bu tip mikro optimizasyonlar performansa hiç katkıda bulunmadı. Ayrıca, modern diller, hatta hantal MATLAB, bile kodlarınızı sizin için derlediğinizde ya da hemen koşturmadan önce optimize edebiliyor. awesome engineerO yüzden mutlaka ilkin profile edin ve kodunuz en çok zamanı nerede harcıyormuş onu bulun ve orayı hızlandırmaya çalışın.

Son olarak MATLAB’a özel bir tüyo vereyim, yıllardır MATLAB yazan insanların kodlarında bile görüyorum bu kötü uygulamayı. Matris işlemleri yaparken for döngüsü kullanmayın, kodunuzu vektörize edin. Vektörize etmek kodunuzu daha anlaşılır kılar, çünkü matematiksel ifadeleri neredeyse aynı şekilde ifade etmiş olursunuz hem de kodunuz hızlanır. Çünkü MATLABda array elemanlarına erişim oldukça maliyetli. Gerçi son dönemki MATLABdaki değişiklikler (JIT-accelerator), döngüler ve vektörizasyon arasındaki farkı önemsiz kulabiliyor.Yine de benim önerim kodunuzun güzelliği ve aklınızın sağlığı açısından vektörizasyon kullanmanız.

Thundercats vektorel logo

Thundercats logo Thundercats adli cizgifilmdeki ortalikta hoplayip ziplayan insan-kedilerin armasi, vektorel halde:

Sorun çıktı

Laaaayn! Veritabanının göçmesi sonucu yazılara yapılan tüm yorumları kaybettik. Yazıların yaklaşık 2.5 katı fazla yorum olduğu düşünülürse kaybımız büyük.
Kurtarmaya çalışırken de sistemin arka planındaki kimi işlevsellikleri yitirdik.
Bilginize.

Son durum: sistem billur gibi calisiyor

Bi takım sorunlar

sorunsalSunucumuz ile ilgili biraz dert yasamaktayiz bu aralar. Sorun yasarsaniz, derin nefes alip sakinliginizi muhafaza etmeye calisin.

Son durum:
Sorunlarımız çözülmüş bulunmaktadır, haberiniz ola.

karga karga gak dedi

karga (crow)

Corvus cinsinden olan, siyah, büyükçe kuşlara halk arasında karga deriz. En yaygın olan tür ise Corvux Corax‘tır. Corvus cinsi kuşların kökenleri ilginçtir ki Avusturalya’ya dayanır, ve yine gariptir ki kuşlar arasında en yüksek Avian IQ’ya sahip olan cinstir (Avian IQ: Kuşların IQ’sunu ölçmeye yönelik bir method). Amacım ne zekaları hakkında övgüler düzmek, ne de şeytani görünüşleri hakkında şiirsel yorumlar yapmak. bir kaç olayın üstüste gelmesiyle bu hayvanların ömürleri hakkında ufak bir bilgi sahibi oldum ve bu konuda birşeyler yazmak istedim.

Geçenlerde arkadaşlarımla sohbet ederken laf bir şekilde kargaların kaç yıl yaşadığına geldi. Yapılan tahminlerden en azı 50 yıldı. Burada şunu da belirteyim, bu tahminleri yapan insanlar genetik üzerine yüksek lisans yapıyorlar, kargaların çok uzun yaşadığına dair efsaneden onlar bile nasibini almıştı. Hatta bir keresinde yeterli kültürel ve ekonomik düzeye sahip bir arkadaşımın kargaların 400 yıl yaşadıklarını zannettiğine bile şahit oldum.

Peki kargalar gerçekten kaç yıl yaşarlar? Doğa koşullarında yaşayanların ömrü 5-10 yıl arasında değişirken, insan kontrolü altında yaşayanların 30 seneye kadar yaşamaları söz konusu.

şimdiye kadar kaydedilmiş doğadaki en fazla yaşamış karga ömrü 13 yıl 4 aydır.İnsan kontrolü altında 80 yıl yaşamış bir karga da kayıtlara geçmiştir. Ayrıca Londra’da bir merkezde (kuş yetiştirme merkezi gibi bir şey sanırım) yaşayan kargaların ortalama 44 yıl yaşadığı saptanmış. Ayrıca bu veriler de Corvus Corax türüne ait, diğer türler bu kadar uzun yaşamıyorlar. Sonuç olarak, aslında kargalar sanıldığı kadar uzun yaşamıyorlar.

Sanırım kargaların uzun yaşadığına dair kanı bir tek ülkemizde var, çünkü bu bilgileri toplarken hiç biryerde böyle bir mite denk gelmedim. Ve yine bence, bu yargının nedeni mitoloji kökenli. İlyada ve Odessiya’nın yaratıcısı olan Homerosun eserleri ile ilgili kayıtlara baktığımızda şöyle bir ifadeye rastlıyoruz:

A chattering crow lives out nine generations of aged men, (…)

Yani, geveze bir karga 9 insan ömrü yaşar. Ortalama bir insan ömrünü (kötümser bir yaklaşımla) 60 sene kabul edersek, 60×9 = 540 sene sonucuna ulaşırız ki, bu abartı rakam insanların kafasındaki rakamla örtüşen tek sonuç.

Edit: bilim.org forumundaki bir başlıktaki tartışmada Homeros döneminde insanların 60 yaşına kadar yaşayamayacağını söylemişler, ve haklılar, o dönemde insanların ömrü daha kısaydı.

Yine aynı başlıkta, bu yazıya ilişkin, internetteki bilgilere güvenilemeyeceğini söylemişler, ve gene haklılar. Bundan sonra bu tip yazılarda kaynakları belirtmeye özen göstereceğim. şu an yararlandığım tüm kaynakları bulamasam da, ciddi, güvenilir kurumların yayınladıkları kaynaklardan faydalanarak bu yazıyı yazdığımı belirtmek isterim.

Edit 2:

Dünyanın en yaşlı evcil kargası olduğu iddia edilen Tata, 59 yaşında öldü.

kaynak: hurriyet – 09 Temmuz 2006

[tags]karga, karga ömrü[/tags]