15.1.11

Bir bilene soralım

Toplum olarak, bir konuda yetkili bir kişinin fikrini alıyoruz. Bu konuda oldukça meraklı ve istekliyiz. Bence iyi de yapıyoruz. Yalnız küçük bir farkla! Soruyu konusunda ehil kişiye sormak yerine başka bir konunun erbabına soruyoruz. Adam nasıl olsa usta ama bu konuda değil!! Hayatında sadece şarkıcılık yapmış birisine vizyondaki sinema filmi hakkındaki yorumuna vereceği cevap, benim için sokakdaki herhangi bir insandan farkı yoktur.
Konu ile ilgili çok hoşuma giden bir olay... Vakti zamanında Dünya bankasında da çalışmış ve pekde iyi olmayan ekonominin başına getirilen Kemal Derviş Milli Basketbol takımının maçına gider. Maçı büyük mücadele sonunda kazanan Türkiye, salondaki ve Televizyon başındaki herkesi mutluluğa boğmuştur. Maç sonunda Kemal Dervişi bulan spiker maç hakkındaki yorumlarını ister. Koskoca Ekonomiden sorumlu devlet bakanı Kemal Derviş'e bir basketbol maçı hakkındaki yorumları sorulur, biraz şaşkın biraz gülerek cevabı verir "İnşallah ekonomiye yansır".
Bir gün belki kime neyi sormamız gerektiğini öğreniriz :)

16.4.10

Kontör-TL mağduriyeti

Ön ödemeli hatlarda (bilinen adı ile kontörlü hatlarda) 100 kontörü 20TL ye alır, bunun karşılığında (örneğin) 100 dk konuşurdunuz (dakikası 1 kontör). Kontör kullanılırken 2 tür zam söz mevcuttu. ,
1. Dakikası 1 kontör yerine 2 kontör olabilir
2. 100 kontör 20 TL yerine 40 TL olabilir

Kontör-TL geçisinden sonra operatörlere tek zam seçeneği kalıyor o da 1. seçenek. Yani zam sadece dakika başına TL fiyatının artması ile söz konusu.

Kontörlü zamanda 20 TL lik kontör satın alan birisi ödediği bedel karşılığında 100dk konuşma hakkı kazanır. Kontör yükledikten sonra 100 kontörün fiyatı 40 TL olsa bile 100 dk konuşabilir. Kontör-TL geçisinden sonra ise durum biraz daha farklı. 20 TL yüklemiş birisi 100 dk konuşabiliyorken, yapılan zam ile 50 dakika konuşabiliyor olacak. Peşin olarak ödediği bedel ile daha az hizmet alabiliyor olacak. Bu durumdaki mağduriyeti önlemek için zam gelince mevcut liralarınızın zam oranında artması ya da TL leri yüklediğiniz zaman ki dakika fiyatından ücretlenmeniz gerekmektedir. Böyle bir uygulama yoksa, vatandaşımız mağdur durumdadır. Kazandığı bir haktan mahrum edilmektedir.

Not : Merak edenler için faturalı hat kullanıcısıyım :)

Twitter

Hoşuma gidip 140 karakterde anlatabildiğim herşey için buradan lütfen www.twitter.com/etaskin

7.8.09

Funny Volley

Yine bir oyun, yeni bir oyun

Iphone için geliştirdiğim 2. oyun "funny volley" 0.99$ lık fiyatı ile appstore da satışa çıktı. Oyun efsanevi "blobby volley" oyunu baz alınarak yazıldı. Şu an sadece iphone a karşı oynayabiliyorsunuz ama çok yakın bir zamanda 2 kişi karşı karşıya oynayabileceksiniz. Oyunun kuralları çok basit, topu en fazla 3 vuruşda karşı tarafa geçirmek, Oyuncuyu haraket ettirmek için ekranın köşesindeki okları kullanıyoruz, zıplamak içinse ekranın herhangi bir yerine basmamız yeterli.

İyi eğlenceler

Oyunun appstore linki





25.6.09

Okunabilirlik performansa karşı - Log4j

private void newUser(String isim, String soyad) {
      ...

      logger.debug("Ad : " + isim + " soyad: " + soyad );

      ...
}

Java ve Log4j kullananlar için son derece sıradan bir kod parçası. newUser fonksiyonunu pek sık çağırmıyorsanız ya da programınızın performansı önemli değilse kod bloğu hala sıradan :) Aksi durumu düşünücek olursak, kodun her yerinde fazlasıyla logger.debug() satırı mevcutsa ve performans sizin için önemliyse?
Çözüm basit
if(logger.isDebugEnabled()) {
      logger.debug("Ad : " + isim + " soyad: " + soyad );
}

Logların birden fazla faydası vardır. Gerek debug sırasında hayatınızı kolaylaştırırlar gerekse kodun okunabilirliğini arttırırlar (en azından isDebugEnabled() gelene kadar öyleydi). İçinde bir sürü if(logger.isDebugEnabled()) satırı olan bir kod parçasının okunabilir olduğunu söylemek oldukça zor. Log yazdırma işini tek satırda yapıp performansı iyileştirmek adına bir alternatif çözüm mevcut.

Öncelikle sorunu doğru belirlemek adına,

logger.debug("Ad : John soyad: Lock");
logger.debug("Ad : " + isim + " soyad: " + soyad );

Yukarıdaki 2 satır arasında performans farkı vardır. 1. satırda tek string vardır ve onu parametre olarak gönderir, 2. satırda parametre olarak tek string alır fakat tek stringi oluşturmak için 4 stringi birleştirme işlemi yapılmaktadır ki performans sorunu buradan doğmaktadır.

Alternatif çözüm olarak değişken parametreli bir fonksiyon yazmak,

private static void logDebug(Object... param) {
      if (logger.isDebugEnabled()) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < param.length; ++i) {
                  sb.append(param[i]);
            }
            logger.debug(sb.toString());
      }
}

Bundan sonra
logger.debug("Ad : " + isim + " soyad: " + soyad );
yerine
logDebug("Ad : ", isim, " soyad: ", soyad );
fonksiyonunu kullanmak. Tek yapmanız gereken parametreleri "+" operatörü yerine "," ile ayırmak. Koddaki değişikliği minimum düzeyde tutarak performansda iyileştirmeye gidebilirsiniz.

Konu ile ilgili yaptığım testin sonuçları da şu şekilde oluştu.

Kod1 :
logger.debug("d" + i + "e" + i + "b" + i + "u" + i + "g" + i);

Kod2:
if(logger.isDebugEnabled())
{
      logger.debug("d" + i + "e" + i + "b" + i + "u" + i + "g" + i);
}

Kod3:
log(“d”,i,”e”,i,”b”,i,”u”,i,”g”,i);

Kod4:
log("1", i, "2", i, "3");


Log seviyesi ERROR de 10milyon iterasyonda Kod1 Kod2 den ortalama 85 kat daha yavaşken Kod3 Kod2 den 10 kat daha yavaştır. log fonksiyonu aldığı parametre sayısına bağlı olarak hızı değişmektedir. Kod4 Kod2 den 8 kat daha yavaştır.

20.5.09

Güzel Sözler

İnternette gezerken rastladığım programcılık ile ilgili güzel sözleri uzun zamandır biriktiyordum. İçlerinde faydalı sözler olduğu kadar komik sözlerde var

  • Measuring programming progress by lines of code is like measuring aircraft building progress by weight - Bill Gates

  • your code is for a human first and a computer second

  • In order to understand recursion, one must first understand recursion

  • Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. - Brian Kernighan

  • There are only two kinds of languages: the ones people complain about and the ones nobody uses - Bjarne Stroustrup

  • It works on my machine

  • Debuggers don't remove bugs. They only show them in slow motion

  • Any fool can write code that a computer can understand. Good programmers write code that humans can understand - Martin Fowler

  • Every language has an optimization operator. In C++ that operator is ‘//’

  • Java: Write Once, Debug Everywhere

  • When I am working on a problem I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong. - R. Buckminster Fuller

  • Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why.

  • Before software can be reusable it first has to be usable.

  • Debugging is like farting - it's not so bad when it's your own code.

  • Code never lies, comments sometimes do

  • If we can't fix it, then it ain't broke

  • We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil - Donald Knuth

  • First, solve the problem. Then, write the code.

  • There's no test like production

  • All real programmers know C of course - Jeff Atwood

  • Talk is cheap, show me the code ! - Linus Torvalds

  • If you don't have time to do something properly, you certainly don't have time to do it twice!

  • Don't code today what you can't debug tomorrow

  • Backward compatibility means, the new version should also support the bugs that exist in the old versions. - Ranganathan

  • Good code is its own best documentation. As you're about to add a comment, ask yourself, 'How can I improve the code so that this comment isn't needed?' Improve the code and then document it to make it even clearer. - Steve McConnell Code Complete
  • 4.3.09

    Iphone a Türk Oyunu : IPONG





    IPONG oyunu 2 Türk yazılımcının 3 aylık yoğun emeği ile hazırlandı. Bazı imajlar ve sesler dışında tamamen Türk. IPong eski arcade oyun tarzında hoş vakit geçirebileceğiniz bir uygulama. 1 hafta içinde apple store da satışa sunmayı planlıyoruz.

    - 5 stage de 6şar levelden toplam 30 farklı kademe bulunuyor.
    - Topların içinden çıkan bonuslar ile aynı anda yapabileceğiniz maksimum ateş sayısını arttırabilir, topları bir süreliğine durdurabilir ya da ekstra hak alabilirsiniz.
    - Oyunda farklı top tipleri mevcut. Yerçekiminden etkilenen (yerden seken), doğrusal hareket yapabilen ve birbirleri ile çarpışabilen toplar ile çok eğleneceksiniz.
    - Oyuncunun hareketini ekranın alt tarafındaki bara tıklayarak, sürükleyerek ya da accelerometer yardımı ile yapabilir, ateş etmek için Sağ alt taraftaki "fire" butonunu kullanabilirsiniz.
    - Oyunu istediğiniz zaman pause edip devam edebilirsiniz.
    - En yüksek skora sahip 10 kişinin ismine high score tablosundan ulaşabilirsiniz.
    - Arkaplan müziği ve oyun içindeki ses efektleri ile de güzel vakit geçirmenizi sağlayacak.

    Ipong fikrini ortaya atan, kod yazan, resimleri tasarlayan proje arkadaşım Murat'a sonsuz teşekkürlerimi iletiyorum.

    Her türlü öneri ve eleştirilerinizi bekliyoruz.

    7.4.08

    Sene 88

    88-89 eğitim-öğretim yılı. İlkokul birinci sınıftayım. Elimde o yıllara ait 2 tane defter var. Defterleri biraz karıştırınca eğitim sistemi hakkında beni düşünmeye sevk etti. Öğretmenim bana okuma yazma öğretirken bazı mesajlarıda empoze etmiş.

    "Okula geç kalma"
    "Kızılay pulu ver"
    "Kemal uslu oyna"

    Yıllarca ne okula geç kaldım, ne kızılay pulu vermemezlik ettim.Pek uslu olduğumu söylemesemde bu cümlenin etkisi altında kalmadığımı söylemek pek doğru olmaz sanırım.

    Diğer dikkatimi çeken bir husus cümlelerin önemli bir kısmı yemek ile ilgili.

    "Annem turşu yaptı"
    "Babam şeker aldı"
    "Işık ayva ye"
    "Cemile mısır patlat"

    Eğitim-öğretim sistemimiz bunu da bilinçli mi yapmış acaba.