Aylık arşivler: Kasım 2007

Kasım Ayı Ezdi Geçti

Merhaba arkadaÅŸlar,

Bu aralar evde ve iÅŸ yerinde oldukça yoÄŸun ve yorucu bir dönem geçiriyorum. Özellikle Vodafone’da oldukça sert bir dönemi geride bıraktık ama baÅŸarı ile bıraktık :) yani en azından teÅŸekkür maili aldık, bizi bu kadar yoran ÅŸey ise Vodafone’un yeni özelliÄŸi “Tek Fatura” (Single Invoice), iÅŸin büyük kısmı Fatura üzerinde olduÄŸu için canımız çıktı diyebiliriz, ama baÅŸarının verdiÄŸi o güzel hazzı, projenin son gününden 1-2 gün önce tatmayı baÅŸardık. Ãœstelik Vodafone IT departmanı 2 sene sürmesi planlanan bir deÄŸiÅŸim sürecine girdiÄŸi ÅŸu sancılı günlerde yaptık bunu :) kolay iÅŸ deÄŸil yani…. YoÄŸunluk diyorum, diyorum ama aklınızda soru iÅŸareti oluÅŸmasın, tüm bu çalışma boyunca (6~7 yıldır olduÄŸu gibi) ben hiç fazla mesai yapmadım, çalışma arkadaÅŸlarımdan Salih Diler ise, sadece birkaç gün fazla mesai yaptı.

Hayatımdaki yoÄŸunluÄŸun Vodafone kısmı bu ÅŸekilde devam ederken, dertsiz başıma bir de yeni televizyon alma derdini eklendim, sanki sizleri duydum “iyi halt ettin” mi dediniz ? Eh teknoloji ile ilgileniyoruz yaa, bu iÅŸlerden anlıyoruz yaa.. öyle gözümüzü kapatıp “aaaa bu televizyon güzelmiÅŸ, hemen alalım ÅŸunu” diyemedik, 2 hafta boyunca girmediÄŸim site, okumadığım yazı, bakmadığım özellik açıklaması kalmadı, üzerine bir de iÅŸin felsefesine kaçtık, fiyat performans çıkartırken mantık çercevesinde her bir özelliÄŸin ne kadar edeceÄŸini bulmaya çalışıp, bu özelliklerin fiyatları ne kadar etkilediklerine baktım, inceledim.. falan filan.. uzun uzun yazmadan hemen sonunu söyleyeyim, gözümü kapadım ve Sony Bravia aldım… aldıktan sonra “bu iÅŸi baÅŸtan yapsaydım” dedim :)

Öncelikle birÅŸeyi belirtmek zorundayım, ÅŸu plazma ve lcd tartışmaları artık gözümde son buldu. Şöyleki tüm özellikler artık birbirlerine denk gibi, fakat en ayırt edici özellik LCD’lerin daha az elektrik yakması (Çevreye duyarlı bir vatandaÅŸ olarak bu benim için çok önemli) ve yüksek çözünürlüğe sahip olmaları. Özellikle LCD’lerdeki parlaklık sorunuda çözüldükten sonra (Kontrast Oranı 5000:1’den düşük almayın, hatta yanına yaklaÅŸmayın, tersini söyleyen kiÅŸiye inanmayın) LCD, plazmanın önüne geçti. Özellikle son teknoloji LED LCD’ler ve 100 Hz’lik LCD’ler tam bir sanat eseri. Cebinizde 10.000 YTL’niz var ise Samsung’un bir modeli var.. kaçırmayın derim, benim yoktu kaçırdım bir dahaki bahara artık.

Ä°ÅŸin felsefi tarafını özetlemek gerekir ise, bir televizyona 3000 YTL’den fazla verilmez. Bu tarihte (Kasım 2007’de) Full HD almanın bir anlamı yok Blue-Ray veya HD-DVD sistemlerinin yaygınlaÅŸması gerekiyor. Fakat 1080i giriÅŸi destekleyen bir model almalısınız.

Ek bir bilgi olarak http://www.istanbulbilisim.com.tr adresinden modellerin detaylı bilgileri bakabilirsiniz, fiyat olacak pek cazip bir site olmasada, diğerlerinden daha fazla model ve özellik açıklamaları bulabilirsiniz.

Bir de Amerika’da birkaç arkadaÅŸ var ki, bu aralar canımıza okuyorlar :) Ahh ÅŸu Stanford’lu gençler yok mu…

Kolay gelsin.

Diziler (Uzmanlar için)

Merhabalar,

Uzun süredir herhangi bir yazı yazmıyordum, arkadaÅŸlar arasında konuÅŸurken “neden yazmıyorsun” gibi sorulara maruz kaldım, “eee dedim yazacak pek bir ÅŸey kalmadıki, ben ruby veya yazılım ile ilgili konularda yazıyorum” dedim. “eÄŸer herhangi bir konuda istek gelir ise o konuda yazarım ama, ÅŸimdilik böyle bir konu yok” dedim. Dedim de hemen cevabı yapıştırdılar suratımın orta yerine.. “Ruby dizileri gerçekten basit tutmuÅŸ, herhalde hız için.. Lisp veya fonksiyonel programlama dileri kadar esnek deÄŸil” dediler.. “Eneee” dedim :) bana yazı yazacak konu çıktı.

Şimdi öncelikle biraz konu ile ilgili kendimizi motive edelim; Neden dizi işlemleri bu kadar önemli ? Ya da diğer işlerden farkı ne olabilir ki ?

Öncelikle bir konuya açıklık getirmek gerekir, günümüzde yazılan programlar içerisinde pek çok durumda dinamik veya durağan veri kümeleri ile işlemler yapılıyor. Bu işlemler, yazdığımız programlar içerisinde performansı etkileyen en önemli etken olarak karşımıza çıkıyor. Ve günümüzdeki daha fazla veri üzerinden daha doğru bilgi edinme anlayışı nedeni ile dizilerin boyutları gün geçtikce artıyor ve üzerlerinde yapılan işlemler gün geçtik fazlalaşıyor, bu performans etkeni daha da önemli hale geliyor. Yanlış anlaşılma olmasın, burada bahsettiğim performans Şişirme Veri Girişi adlı yazıda bahsettiğim veri yoğunluğunun artması ile beraber ortaya çıkan performans kötüleşmesi.

Diziler üzerinde yapılacak işlemlerde öncelikle iki ana başlıkta değerlendirilmelidir;
1- Kolay kullanım,
2- En iyi algoritmanın kullanılması.

Ä°kinci maddenin neden gerekli olduÄŸu konusunda fazla söze gerek yok ama, birinci maddenin neden gerekli olduÄŸu konusunda aklınızda sorular olabilir, bu soruları ortadan kaldırmak için ÅŸu ÅŸekilde bir açıklama yapabilirim. “Diziler üzerinde yaptığınız optimizasyonlar, algoritma seçimleri veya memory optimizasyonları” gerçekten zor ve uygulanması oldukça tartışmalı olabilir. ÖrneÄŸin google’ın java dili için çıkardığı “Google Collections Library” buna örnek olarak gösterilebilir. Kolay kullanım ve entegrasyon yazılımcılar tarafından her zaman tercih edilir.

Peki Ruby tüm bunların karşısında bize güzel silahlar veriyor. Aslında tüm Ruby iÅŸlemlerinde olduÄŸu gibi performans basitliÄŸin gerisinde kalmış, yüzlerce kez söylediÄŸim gibi “yazılımın çalışma hızı sonsuza giderken, geliÅŸtirme süresi sıfıra gitmeli” felsefesine ters deÄŸil.

data = [1,2,4,8,12,5,7,3,0,13,10,11,3]

# For..In
data.each { |x| puts "x=#{x}" }

# data içerisindeki tüm elemanları tek tek verilen 
# blok içerisindeki işlemden geçirir ve sonuçlardan yeni bir dizi üretir.
puts data.collect { |x| x + x }

# For..In :) ile indexleri verir.. :) pek çok programlama dilinde 
# karşılığı bulunmaz.
data.each_with_index { |x, index| puts "#{index}. eleman = #{x}" }

# 5'den büyük ilk kayıdı bulur.
puts data.detect { |x| x > 5 }

# 5'den küçük olanları true_data değişkenine, 
# diÄŸerlerini false_data deÄŸiÅŸkenine dizi olarak atar.
true_data, false_data = data.partition { |x| x < 5 }
puts true_data
puts false_data

# 5'den küçük olanları diziden çıkartır ve geri döner.
puts data.reject { |x| x < 5 }

# Varsayılan sıralama işlemi
puts data.sort

# Belirlenmiş kritere göre sıralama işlemi (string olarak sıralama)
puts data.sort_by { |x| x.to_s }
# veya
puts data.sort_by { |x| (x+5)/x }

Kolay gelsin.. :)