Archives Posts
November 29th, 2007 by Tankut ŞENTÜRK
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.
Archives Posts
November 13th, 2007 by Tankut ŞENTÜRK
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.. :)