Yazılım Notları

uordek.esiyo.each

Super Superonline Faciası — Son hız devam ediyor

Merhabalar,

Onlarca kez müşteri hizmetlerini aramama rağmen halen superonline’dan 2009 yılında aldığım fiber hizmet ÇALIŞMIYOR. Ama adamın biri benim yerime aşağıdaki gibi güzel güzel kullanım yapıyor. Ama ilginçtir son zamanlar kullanımı biraz düşmüş neden acaba?

Veri İletim Yöntemi Oturum Açılma Tarihi Oturum Kapanma Tarihi İndirilen Miktar(MB) Gönderilen Miktar(MB)
Fiber 22.11.2011 03:43:10 25.11.2011 15:43:44 0,51 0,22
Fiber 22.11.2011 03:43:11 25.11.2011 03:43:45 85,67 8,44
Fiber 22.11.2011 03:43:13 24.11.2011 15:43:44 0,51 0,22
Fiber 22.11.2011 03:43:11 24.11.2011 03:43:45 31,62 1,14
Fiber 22.11.2011 03:43:12 23.11.2011 15:43:43 0,52 0,22
Fiber 22.11.2011 03:43:12 23.11.2011 03:43:46 7,10 1,47
Fiber 22.11.2011 03:43:13 22.11.2011 15:43:40 0,55 0,23
Fiber 18.11.2011 03:19:25 22.11.2011 03:40:43 22,10 1,28
Fiber 18.11.2011 03:19:23 21.11.2011 15:20:00 0,51 0,22
Fiber 18.11.2011 03:19:24 21.11.2011 03:20:01 442,65 11,14
Fiber 18.11.2011 03:19:25 20.11.2011 15:19:51 27,65 4,08
Fiber 18.11.2011 03:19:24 20.11.2011 03:19:49 291,28 17,05
Fiber 18.11.2011 03:19:26 19.11.2011 15:20:06 738,05 14,72
Fiber 18.11.2011 03:19:26 19.11.2011 03:20:05 137,45 4,32
Fiber 18.11.2011 03:19:26 18.11.2011 15:19:56 234,92 16,84

Ehh züperonline faciaları devam edecek gibi duruyor. Zaten şu zamana kadar iletişime geçtiğim hiç bir superonline personelinin kendi çalıştığı firmayı sevdiğini düşünmüyorum. Düşünselerdi, “bakın ben internete erişemiyorum, yanlış yazdığınız modem seri nosu nedeniyle başka birisi erişiyor, lütfen kontrol edin veya bir an önce ettirtin.” dediğim zaman dikkate alıp kontrol edilmesini sağlarlardı, ama nafile.

Kolay gelsin.


Superonline faciası

Merhabalar,

Sizin başınıza gelebilir dikkatli olun. 2009′dan beri hiç sorunsuz kullandığım firma bir anda nasıl değiştiğini ben de anlamadım. Önce 14.10 tarihinde uydurma bir kampanya tanımladılar. Bir sürü telefon, bin bir dereden su getirmeler falan 30.10′da bu kampanyayı iptal ettiler. Parasını 15.11′de geri ödediler.

Şimdi sıkı durun, 30.10′da kampanyayı iptal ederken, kampanya ile beraber tanımadığım başka bir adama verdikleri modemin internet erişimini iptal edeceklerine benim kullandığım modemin internet erişimini iptal ettiler.

30.10′dan beri her gün superonline müşteri hizmetlerini arayıp duruyorum ama son durum inanılır gibi değil ama şöyle; adamın biri benim adıma tanımlanmış ama benim olmayan bir modem ile internete “sınırsız” bağlanabilirken, ben bağlanamıyorum.

Bu kötü hizmeti ne duydum, ne de biliyorum. İnsanın cinnet geçirip telefonda çıldırası ve internette alay konusu olası geliyor. 20 gündür bu karışıklığı çözemez mi bir firma.

Size superonline’sız mutlu internetler dilerim.

Kolay gelsin.


Adobe Flash mobil platformdan çekiliyor

Merhabalar,

Adobe Flash için mobil platformlardan çekilme kararı almış.
Konu ile ilgili haberler için;

1999 sonlarında veya 2000′in başlarında “tüm ara birimler bir gün Flash olacak” gibi bir yorum yapmıştım. İlk başlarda Macromedia ve Adobe
bu sözlerimi haklı çıkarmak için çok uğraştılar ve çok sıkı çalıştılar. Ama bu aralar Adobe geleceğin platformu olan mobil sistemler ve yeni browser’lar üzerinde daha fazla geliştirme yapmayacağını açıklaması biraz ilginç bir karar.

Yapılan açıklamada bahsedilen diğer bir konu var; Adobe’un, Flash uygulamalarını Adobe AIR üzerinde daha iyi çalıştırmak için daha fazla kaynak ayıracağı. Sanırım yakın gelecekte Flash’in yeni versiyonlarını çalıştırmak için AIR kullanıyor olabiliriz.

Ekleme
Sanırım Microsoft da bu konuda bazı adımlar atabilir. Örneğin bir sonraki sürümden sonra Adobe’un Flash için yaptığının bir benzerini Silverligth için yapmak gibi.

Microsoft may halt development work on Silverlight plugin after next release

İyi çalışmalar.


Ruby 1.9.3 çıktı

Merhabalar,

Ruby üzerinde 1.9 sürümlerinin yeni versiyonu 1.9.3 karşımızda. Bu versiyon ile beraber özellikle “garbage collector” üzerinde bir takım iyileştirmeler yapılmış. Bununla beraber Change Log adresinde özellikle thread sınıfı için işletim sistemlerine göre daha detaylı güncelleştirmeler yapılmış gibi görünüyor. Ek olarak daha fazla “unicode” desteği de eklenmiş miş..

Yakın zamanda internet üzerinde performans değerlendirmeleri dolaşmaya başlar.

Kolay gelsin. Sevgiler.


Blackberry ödevi

Merhabalar,

Bir arkadaşımla konuşurken söz MBA’den açıldı. Kendine İstanbul Bilgi Üniversitesinde MBA yaptığımı işlerin iyi gittiğini, bitirmek üzere olduğumu falan anlattım. Sonrasında bana MBA’de yaptığım ödevleri veya çalışmaları neden paylaşmadığımı sordu, iyi ki sordu :)

Aşağıda 2009-2010 eğitim döneminin hemen başında (yani Aralık, 2009 gibi) Blackberry için yaptığım akademik çalışma mevcut. Hatamız var ise affola.

Read the rest of this entry »


Rails için jetty_rails güncellemesi

Merhabalar,

Bir önceki yazımızda rails için jruby kullanımından ve windows üzerinde rails uygulamalarının servis edilmesi hakkında bir yazı yazmıştık. Bu yazıda jetty_rails’in sürümünün biraz eski olduğundan (son güncelleme tarihi 2009-07-08 20:28) bazı problemle karşılaştığımı yazmıştım.

Bu yazıda sizlere bu problemleri nasıl ortadan kaldıracağımızı anlatmak istiyorum.

1. Öncelikle jetty-rails’i standart gem yöntemleriyle yüklüyoruz.

jruby -S gem install jetty-rails

Read the rest of this entry »


Rails için yazılım geliştirme ortamı

Merhabalar,

Ne zamandır arkadaşlarım rails için yazılım geliştirme ortamı sorup duruyorlar, aslında ortada çok fazla alternatif olduğu için kafa karışıklığına neden olabiliyor.

Son (bir windows sunucu da host etmek zorunda olduğumuz) projem de redcar + jruby 1.6.3 + rails 3.0.9 + mysql >5 (arabirim olarak mysql workbench) ortamında yazılım geliştirme gerçekleştirdim.

Neden redcar;

  • Netbeans Build-in debugger’ı code-complete özelliği ile tam bir editör ama 6.9.1′den sonra desteği yok.
  • Redcar’ın kısa yolları ve “snippet” lerine alışırsanız oldukça hızlı ve efektif şekilde uygulamanızı geliştirebilirsiniz.
  • Diğerlerini denemeyin bile :)

Neden MRI değil de jruby kullandığımı soracak olursanız, cevabı yukarıdaki parantez içerisinde yazdığım küçük cümlecikte saklı. Evet malesef rails için windows üzerinde yüksek TPS değerlerine erişebilecek bir sistem kurmak oldukça zor ve problemli. Bu nedenle jruby ile java‘nın bu getirilerinden faydalanmak istedim.

JRuby’nin bu gücünü kullanmak içinde bazı çalışmalarım oldu. GlassFish, Tomcat :) hatta IIS üzerinde koşturup, performans değerlerini inceledim. Tomcat ve IIS için pek olumlu konuşamayacağım, belki de ayarlarını tam yapamadığım için olabilir ama GlassFish gerçekten iyi bir performans grafiği çizdi. GlassFish’in tek kötü yanı çok büyük ve gereksiz birçok bileşen içermesi ama elbette bazı projelerin bu bileşenlere ihtiyacı olabilir, bu durumda tercih edilebilecek bir sunum ortamı olabilir.

Benim tercihim ise jetty oldu. jetty_rails adlı bir eklenti ile işler kolaylaşıyor fakat ne yazık ki eklenti oldukça eski bir sürüme ait bu nedenle bazı ufak tefek düzeltmeler yapmamız gerekiyor. Lafı çok uzattık bu düzeltmeleri daha sonra sizlerle paylaşırım.

Son söz olarak, rails uygulamanızı yazarken aşağıdaki maddeleri göz önüne almanızı tavsiye ederim;

  • Rails uygulamanızı kendiniz host etmeyin.
  • Rails uygulamanızı gerçekten kendiniz host etmeyin.
  • Rails uygulamanızı Linux bir sunucuda host edin. Linux için zilyon tane başarılı alternatifi deneyebilirsiniz.
  • Rails uygulamanızı Windows sunucuda host etmeyin.
  • Rails uygulamanızı Windows sunucuda host etmeyin, gerçekten.
  • Rails uygulamanızı Windows üzerinde host etmek istiyorsanız, jruby uyumlu olmasına özen gösterin. Host etmek istediğiniz zaman duruma göre glassFish veya jetty kullanabilirsiniz.

Kolay gelsin :)


Oracle 11g Cursor kullanımı

Merhabalar,

Geçenlerde Oracle 11g’de üç çeşit cursor’ın karşılaştırmalı performans sınamasını gerçekleştirdim. Aslında iş için gerekti ama fırsattan istifade sizlerle de paylaşmak istedim. Bu aralar aktif şekilde blog yazımı ile ilgilenmesem de buna benzer fırsatları değerlendirmek gerekli :)

3,629,848 adet kayıt için 11g’de performans değerleri aşağıdaki gibidir;

1- Cursor ve Bulk Collect (Open / Fetch Bulk limit 10000 / Close) ~2,5sn – belirlenmiş memory kullanımı.
Start:34.26.163863000 PM +03:00
End: 34.28.616085000 PM +03:00

2- Sadece Implicit (For) Cursor ~4,5sn – düşük memory kullanımı (1. maddenin limit 100 ile kullanımı kadar)
Start: 33.22.212231000 PM +03:00
End: 33.26.701057000 PM +03:00

3- Eski tarz (Open / Fetch / Close) Cursor ~50sn – çok düşük memory kullanımı
Start: 27.52.405369000 PM +03:00
End: 28.42.254359000 PM +03:00

1. madde ile 2. madde arasındaki fark tamamen “limit 10000″ den kaynaklanıyor. 2. Madde için oracle sistemi varsayılan olarak 100 değerini kullanıyor. Bu nedenle 2.nin memory kullanımı 1.ye göre daha az olduğu yönünde genel bir kabul mevcut.

Kolay gelsin.

Read the rest of this entry »


Ruby ile Kyoto Cabinet – 5

Merhabalar,

Birkaç arkadaşım yazıları okuduktan sonra Kyoto Cabinet’in sorgu performansını merak etmiş. Bunun üzerine küçük bir çalışma ile sorgulama performanslarını sizlerle paylaşmak isterim.

Hemen sonuçları yazmakta fayda görüyorum :)

MySQL üzerinden daha önceki yazılarımda yer alan konfigurasyon ile (engine: Innodb, primary key üzerinden sorgulama yapılıyor.) 100 thread ile 1.000.000 kayit 48.56 sn’de sorgulanmıştır.

KyotoCabinet üzerinden daha önceki yazılarımda yer alan konfigurasyon ile (engine: Hash, ek parametreler DB::OCREATE | DB::GCONCURRENT ve key üzerinden sorgulama yapılmıştır) 100 thread ile 1.000.000 kayit 4.54 sn’de sorgulanmıştır.

Şaka değil gerçek.
Read the rest of this entry »


Ruby ile KyotoCabinet – 4

Merhabalar,

Bir KyotoCabinet yazısına daha hoşgeldiniz. Bugün sizlerle MySql’in 100 thread üzerinden “insert” yetenekleri ile kyoto cabinet’inkileri birbirleriyle karşılaştıracağız. Peki bunu neden yapıyoruz, çünkü bir önceki yazımızda tek thread üzerinden kyoto cabinet üzerine veri yazma işlemi mysql’a göre ~10 kat daha hızlı olduğunu gördük.

Bu durum, tüm transactional tablolarımızı kyoto cabinet’e taşımamıza neden olmasa bile, yazılım geliştirirken kullandığımız bir çok “log” tablolarını taşımamızın kapısını aralar diye düşünüyorum. Yazılım geliştirirken bu kayıtları için bir log tablosuna veya dosyaya yazarız. Fakat dosyaya attığımız kayıtları tekrar okumak veya istediğimiz kayıda erişmek istediğimizde problemlerle karşılaştığımız için genelde “log” tablolarını tercih ederiz. İşte bu tercihlerimizde, eğer bu testten de başarı ile geçerse, log işlemleri için (hatta belki daha fazlası için) mysql yerine kullanılabilir.

Veya tecrübe ile sabit, web sistemlerinin session yönetimi ve loglaması için kullanılabilir. Aklınıza bir soru gelebilir, çünkü session tablosunda sorgu atmak için kullandığımız tek alan SessionId’dir. Yani ID üzerinden yapacağımız tüm işlemlerde bu veri tabanı yapılarının klasik veri tabanı yapılarına göre çok daha hızlı olduğunu unutmayalım.
Read the rest of this entry »


Ruby ile KyotoCabinet – 3

Merhabalar,

Bir önceki yazımızda Ruby üzerinden KyotoCabinet’e 1.000.000 (1 milyon) veri girişini çok kısa bir sürede tamamlamıştık. Daha sonra içime bir kurt düştü, acaba mysql’de durum nasıldı? Yani aynı koşullar altında mysql veri tabanına 1.000.000 kayıdı kaç sn içerisinde yazabilecektim?

Makinanın özelliklerini bir önceki yazımızda vermiştim.

Bu işlemin testi için öncelikle kendimize oldukça hızlı olduğuna inandığım, KyotoCabinet’in Ruby arabiriminde olduğu gibi C dili ile yazılmış MySQL/Ruby bir arabirim kütüphanesi buldum ve 2.8.2 versiyonunu kurdum. Bununla beraber MySQLClient versiyonunun 5.1.41 olduğunu söylemeliyim.

Daha sonra key, value tutacağımız bir veri tabanı oluşturdum. Öncelikle MyISAM motorunu kullanan bir tablo oluşturdum ve testlerimi bu tablo üzerinde yaptım.

CREATE TABLE `kyoto_cabinet`.`simple_table` (
  `key` CHAR(12) UNICODE NOT NULL,
  `value` CHAR(12) UNICODE NOT NULL,
  PRIMARY KEY (`key`)
)
ENGINE = MyISAM
CHARACTER SET utf8 COLLATE utf8_turkish_ci;

Read the rest of this entry »


Ruby ile KyotoCabinet – 2

Merhabalar,

Bir önceki yazımıza kaldığımız yerden devam ediyoruz. Bu sefer Kyoto Cabinet’in insert (kayıt ekleme) performansını inceleyeceğiz.

Öncelikle bu bir performans çalışması olduğu için makinamın özelliklerini verelim;
- 2 x AMD Athlon x64 3800+
- 2 G Ram
- Ubuntu 10.04 LTS
- FileSystem ext4
- Ruby 1.8.7 (2010-01-10 patchlevel 249)
- KyotoCabinet 1.2.2
- KyotoCabinet ruby kütüphanesi 1.14

En azından bu özelliklerle yapılan bir test sizleri kodu kendi makinanıza alıp denemeniz için cezbedebilir. Sonuçta bir önceki yazıdan kurulum işlemleri uygulayıp sonrasında aşağıda belirteceğim kod parçasını uygulayacaksınız. Sonuçları benimle paylaşabilirsiniz.

require 'kyotocabinet'
include KyotoCabinet

DB::process('subscribers.kch') { |db|
  # resmi sitede yer alan örneklerde set_encoding olarak gösteriliyor fakat aslında tune_encoding olmalı.
  db.tune_encoding('utf-8')

  # Telco sektöründe çalıştığımız için, numara bir MSISDN'e benziyor degil mi :)
  start_number = 905000000000

  start_time = Time.now
  puts "sira;gecen_sure;toplam_gecen_sure"
  100.times { |index|
    first_loop_start_time = Time.now
    10000.times {
      start_number += 1

      # Evet alt satirda KyotoCabinet üzerinde "Insert" islemi yapıyoruz.
      db[start_number] = start_number
    }
    loop_elapsed = Time.now.to_f - first_loop_start_time.to_f
    total_elapsed = Time.now.to_f - start_time.to_f
    puts index.to_s + ";" + loop_elapsed.to_s + ";" + total_elapsed.to_s
  }

  puts "1.000.000 kayit eklenmistir. Toplam süre: " + (Time.now.to_f - start_time.to_f).to_s
}

ruby kyoto_test01.rb > output.csv ile çalıştırırsanız çıktı dosyasını bir office programında açar ve performans analizinizi daha hızlı yapabilirsiniz. Unutmadan uygulamayı Netbeans veya Scite gibi editörlerin üzerinden çalıştırmayın toplamda benim makinamda 3 sn gibi fazlalıklara neden oldular.

İşte benim makinam üzerindeki sonuçların bir özeti;
Read the rest of this entry »


Ruby ile KyotoCabinet

Merhabalar,

Uzun bir aradan sonra kendimde tekrar yazı yazabilecek enerjiyi bulabildim. Nasıl mı? Aslında ben de bilmiyorum. Yeni doğan kızım Nil (evet, artık benim bir kızım var, kendisi daha 22 günlük :) ) nedeniyle evde çok neşeli bir telaşımız var ama yine de bir cumartesi akşamı ben bu yazıyı yazabiliyorum.

Ayrıca bugünün cumartesi olması ve şu saatlerin de akşam olması ve artık bir kızımın olması nedeniyle ilk kez akşam gezintileri için “benden geçmiş” demek zorunda hissettim kendimi. :)

Neyse konumuza dönelim, konumuz Kyoto Cabinet‘in ruby’de kullanılması olacak. Öncelikle

Kyoto Cabinet nedir;
Aslında bilenler var ise Kyoto Cabinet, Tokyo Cabinet gibi, Memcache gibi yüksek performanslı non-relational (türkçe çevirisi için ‘ilişkisiz’ den daha iyi fikri olan söylesin) veri tabanı sistemidir. Limitleri oldukça yüksektir ve performans konusunda gerçekten dudaklarınızıda uçuklatabilir. Kesinlikle oracle, mysql veya postgre gibi relational (ilişkili) veri tabanı sistemleri ile kıyaslanmamadır. Bu elma ile armut kıyaslanması gibi olur.

Kyoto Cabinet aslında “Key” ve “Value” ikilisini bir veri tabanında (bir dosyada) tutmak ve yönetmek için yapılandırılmış bir kütüphanedir. Bir dosya üzerinde yer alan Key ve Value alanları farklı uzunluklara sahip ve farklı tiplere sahip olabilir. Ayrıca bu kayıtları B-Tree veya Hash olarak tutabilmektedir.

Peki hemen aklınıza bir soru gelebilir. Nedir bu B-Tree ve Hash denen arkadaşlar? Sayfaları ziyaret edin, kullanın öğnenin diyorum başka da birşey demiyorum. Yaptığınız işe göre, kullanmanız gereken algoritmaya göre seçeceğiniz yapı yazılım performasını etkileyen en büyük unsur olacaktır. Ve malesef bunların bir tanesi hepsini dövmüyor/dövemiyor.

Hadi Kyoto Cabinet kuralım
0- Linux’da çalışıyor. Benim kullandığım ubuntu üzerinden kurulumu anlatacağım.
Read the rest of this entry »


Çizginin Dışındakiler

Geçtiğimiz günlerde Malcolm GLADWELL’in “Outliers” Çizginin Dışındakiler adlı kitabını okudum. Oldukça güzel ve hoş bir kitap olduğunu düşünüyorum bu nedenle sizler için, daha doğrusu sizlere kitabı satabilmek için :) bu yazıyı yazmaya karar verdim.

Genel Değerlendirme:
Yazılara tersten başlamak adetim değildir ama bu sefer böyle yapmak istedim. Genel değerlendirmem kitabın oldukça iyi olduğu yönünde. Özellikle yine son zamanlarda okuduğum bir diğer popüler kitap olan Martin Lindstrom’un Buyology adlı kitabı ile karşılaştırdığımda bir baş yapıt olduğunu söylemek herhangi bir sakınca görmüyorum.
Aslında Outliers’da kolay bir kitap olmaktan çok uzak. Kitabın sonundaki yazarın kendi kritiğini yapması ve kitabın genel hatları insanda bazı karamsar duyguların oluşmasını sağlıyor. Tarih boyunca başarılı olmuş karakterlere birer mit olarak bakmaktansa yakınızda yer alan ve doğru zamanda doğru kararlar vermiş birer insan olarak göstermesi, başarıyı kâf dağından ayaklarımızın dibine getirebiliyor. Aynı zamanda bunu son derece mantıklı ve kanıtlara dayandırarak yapması, bunun mümkün olacağını belitiyor.
Yazar başarıyı ayaklarımızın dibine getirirken, diğer yandan fırsat ve zamanlama konusunda insanın elinde olmayan daha büyük bir güçün varlığına işaret ediyor ki işte o zaman daha da karamsarlığa kapılıyorsunuz.
Genel olarak başarının olmazsa olmaz maddeleri ile beraber bu maddeleri yapsanız dahi “niye çizginin dışındakiler kadar başarılı olamadığınızı” anlatan harika bir kitap.
Read the rest of this entry »