Kategori arşivi: Bilgisayar

Bilgisayar ile ilgili herÅŸey..

Bahar temizliÄŸi – zor zamanlar

Merhabalar,

Geçti?imiz dönemde bir bahar temizliÄŸine giriÅŸtik. GiriÅŸtik diyorum çünkü ne ile karşılaÅŸacağımızı pek de bilmiyorduk açıkcası. Temizlik sırasında ön göremediÄŸimiz pek çok problem ile karşılaÅŸtık. Duvarlar üzerindeki fayansları yaÄŸ tabakası kaplamış ve aradan seneler geçtiÄŸi için bu yaÄŸ normal temizleyiciler ile çıkmadı. Kollarım koptu deyimini o an gerçekten yaÅŸadım.

Tüm bunlara ek olarak, uzun süre temizlenmemesi nedeniyle tüm metaller paslanmıştı. Yine standart temizleyicileri deneyip başarısızlığa uğradım.

Her iki konu için de başarısızlığı uğradıktan sonra abimden yardım istedim. Özkimsan.com üzerinden pas sökücü ve yağ sökücüler sipariş ettim. Sonuç tek kelime ile mükemmel. Standart yağ ve pas sökücülerle bildiğin yarım yamalak temizlediğim (veya temizlediğimi zannettiğim) yüzey ve malzemeleri çarçabuk temizledik. Sonra da kendime neden daha önce sipariş vermedim diye kızdım açıkcası.

Siz siz olun, profesyonel destek alıp bu iÅŸlere giriÅŸin. Ben Özkimsan.com’u kullandım memnun kaldım. Sizlere de tavsiye ederim.

Kolay gelsin.

Jetty Rails 0.8.1 ek güncellemesi

Merhabalar,

Bir süre önce, çalışmakta olduğum bir projenin Windows sistemleri üzerinde yayınlanma zorunluluğu ortaya çıktı. Daha önceki yazılarımda rails projeleri için Windows alternatiflerinden bahsetmiştim.

Jetty-rails 0.8.1 için belirttiÄŸim güncellemeleri yaptıktan sonra kullanılan jetty sürümünü “Jetty 6.1.26” olarak güncelledim. Cisco bir firewall’ın ardından çok uzun bir süredir herhangi bir performans ve güvenlik problemi olmadan uzun süredir hizmet veriyor.

Tavsiye ederim.

Sevgiler.

Ruby 2.0 Woow

Merhabalar,

Ruby 2.0 çıktı, hem de oldukça iddialı. Söylenene göre pratik kullanıma hazır ve nazır bir versiyon. Umarım ilk kullananlar görüşlerini paylaşır.

Yenilikler;

  • Keyword arguments: Python kullanıcıları bilir, method çaÄŸrımları sırasında parametrelerin isimleri ile atama yapabilme yeteneÄŸi.
  • Yeni Mix-in yöntemi
  • %w ile diziler oluÅŸturabiliyorduk, ÅŸimdi %i ile sembol dizileri oluÅŸturabileceÄŸiz. Belli ki Rails için :)
  • Artık varsayılan encoding UTF-8 olmuÅŸ nihayet.. valla nihayet
  • Enumerable‘dan türeyen diÄŸer tüm sınıflar için (genel anlamda diziler ve range’ler için) yeni mis gibi geliÅŸtirmeler.
  • Yeni regular expression motoru (Oniguruma), ilgili yazım
  • Daha geliÅŸmiÅŸ debug desteÄŸi, belki ÅŸu debug amaçlı logger’ların sayısını azaltabiliriz.
  • Bu önemli; GC (garbage collector…nam-ı deÄŸer çöp toplayıcısı) için “bitmap marking” yönteminin kullanılması. Normalde bu yöntem REE’deki arkadaÅŸlar tarafından uzun süredir kullanıyor ama performans konusunda iyileÅŸtirmeler yapılmış diye okudum bakalım ne kadar doÄŸru..
    REE’de yer alan GC performansı Q(n) di sanırım,
    Ruby 2.0’da bunu Q(1) olacak ÅŸekilde iyileÅŸtireceklerini söylüyorlardı.
  • Artık daha hızlı method çaÄŸrımı
  • Rail artık daha hızlı açılacakmış.. mesele açılması deÄŸil, çalışması :)
  • Noktalı sayılar için iÅŸlemleri de iyileÅŸtirmiÅŸler.

İyi çalışmalar.

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.

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

Rails için jetty_rails güncellemesi yazısına devam et

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.

Oracle 11g Cursor kullanımı yazısına devam et

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.
Ruby ile Kyoto Cabinet – 5 yazısına devam et

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.
Ruby ile KyotoCabinet – 4 yazısına devam et

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;

Ruby ile KyotoCabinet – 3 yazısına devam et

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;
Ruby ile KyotoCabinet – 2 yazısına devam et