powershell ve pash 08/04/08
Vakt-i zamanında powershell‘i kurcalamış ve çok güzel bir izlenim elde etmiş idim. PowerShell gerçekten güzel, kullanılabilitesi yüksek bir araç.
Bugün PowerShell’in açık kaynak kodlu benzeri|rakibi olan|olmayı hedefleyen ve diğer işletim sistemlerinde de çalışabilir vaziyette olan Pash‘a denk geldim. Desteklenesi bir proje.
firefox 3.0b4 ve YSlow 20/03/08
Yahoo’nun Firebug ile çalışan YSlow analiz sistemi, çıkmış olan en son beta sürümü 3.0b4 ile çalışmıyor. Resmi YSlow eklentisinde maxVersion 3.0b4pre olarak belirtilmiş. Bu nedenle yüklediğiniz xpi dosyasını - ki aslında bu bir “zip” dosyadır - bir klasöre açtıktan sonra “install.rdf” dosyasını açıp <em:maxVersion> etiketinin değerini 3.0b4 olarak değiştirirseniz sorun ortadan kalkıyor.
<em:maxVersion>3.0b4</em:maxVersion>
install.rdf dosyasını güncelledikten sonra çıkan dosyaları yeniden zip’leyip uzantısını xpi olarak güncellediğinizde ve ve bu dosyayı Firefox ile açtığınızda kurulum sorunsuz olarak gerçekleşiyor.
Kolaylıklar.
İlk göz ağrılarımızdan olan RadRails editörünün geliştirimi Aptana’ya geçtikten sonra 1.0 numaralı kararlı sürümü geçenlerde (11 Mart) duyuruldu. Hemmen incelemeye başladım ve ekran görüntüleri eşliğinde bir yazı hazırlamaya çalıştım.
RadRails’i kurabilmek için öncelikle Aptana Studio’nun sisteminizde kurulu olması gerekiyor.
Aptana Studio’da sırasıyla Help > Software Updates > Find and Install menüsüne ulaşıp buradan Search for new features to install seçimini yapıp Next dedikten sonra RadRails’i seçebilir ve kurabilirsiniz.
Yükledikten sonra Aptana Studio’yu kapatıp açmalısınız. Eğer Türkçe bir işletim sistemi kullanıyor iseniz fi tarihinde olan problem hala devam ettiği için -nl en-En parametresini kısayola eklemelisiniz. Ardından yeni bir rails projesine başlayabilir ya da var olan bir projenizi ithal (import) edebilirsiniz.
İlk dikkatimi çeken yeni bir rails projesi oluşturup o projeye geçtiğim halde görünümün (perspective) Rails’e geçmemesiydi. Bu nedenle bunu elle çevirmek durumundasınız. ( Window > Open Perspective > Other > RadRails )
RadRails’in yeni özelliklerine liste halinde karşılaştırmalı (karşılaştırmalar çok yanlı bu arada) olarak buradan bakabilirsiniz. Tabii bu liste de ayrı bir komedi. Zira listede "Eclipse Compability" özelliğinin (!) karşılaştırması da yer alıyor.
Ekran görüntüleriyle bazı özellikler şu şekilde:
Generator penceresi ilk sürümden bu yana hemen hemen aynı, görevini layıkıyla yapıyor.
Kod penceresinde helper/view/model/controller ve test dönüşümleri güzel düşünülmüş. Örn. controllerdan view’a dönerken fonksiyon içerisinde iseniz hangi tür dosya istediğiniz, herhangi bir fonksiyonunun dışında iseniz fonksiyon seçimi ve dosya tipi soruluyor ve yok iseler oluşturuluyor.
Rhtm düzenleme ekranında ufaktan xhtml düzenleme butonları yerleştirilmiş. Güzel olmuş.
Kod tamamlama özelliği geliştirilmiş, daha fazla dökümansal ayrıntıya yer vermeye başlamış.
Tab ile kod tamamlamalar ile geçiş yapılabiliyor.
Bu güzel bir özellik. Entegre tail sistemi.
Kelimesel ya da düzenli ifadeler eşliğinde renklendirme özelliği verilebiliyor. Bir editörün içinde bulunması çok güzel.
Tutulası bir özellik.
Rails Api ve Ruby Standart Kütüphanesine direkt erişim yapılabiliyor. Böylece yalnızca RadRails üzerinden tüm işlemlerin yapılabilmesi amaçlanmış. IDE’nin anlamını hatırlatıyor gibi bir nevi.
Entegre test sistemiyle testlerin sonuçları grafiksel ekranda sunuluyor.
NetBeans, Ruby için destek vermeye başladığından beri NetBeans kullanan ve öncelerinde RadRails kullanmış biri olarak, NetBeans’ın ben de daha ayrı bir güzellik olgusu oluşturduğunu da belirtmek isterim.
Ayrıca, yukarıda adresini verdiğim karşılaştırma tablosuna NetBeans IDE’nin Ruby geliştiricisi olan Tor Norbye tarafından yazılmış ve gerçek dışı/saptırılmış olan bazı özelliklerin gerçeklerine yer verilmiş cevabı okumakta fayda var.
Şimdilik incelediğim özellikler bunlar. RadRails güzel bir aşama kaydetmiş. Daha öncede söylediğim gibi editör savaşları her daim geliştiricilere yarayan bir karşılaşma.
İyi çalışmalar.
Heroku.com beta incelemesi için başvuru yapmış idim, bugün bir davetiye geldi. Bende biraz inceleme fırsatı buldum. Güzel düşünülmüş bir sistem.
Heroku.com nedir?
Heroku.com bize diyor ki;
Daha önceden geliştirmiş olduğunuz rails uygulamanızı heroku.com’a aktarın ya da heroku.com üzerinden yeni bir rails uygulaması başlatın (kendi içinde editörü, generate, consol, migrate, veritabanı ve diğer çoğu olay mevcut) herhangi bir gönderim ve ayar işlemi yapmadan uygulamanız anında kullanılabilir hale gelsin.
Güzel bir düşünce aynı zamanda güzel bir uygulama ile de birleştirilmiş.
Renklendirme eşliğinde, aynı zamanda uygulamayı düzenleyebilecek kullanıcıları belirtirek takım çalışması da yapabiliyorsunuz.
heroku.com güzel düşünülmüş ilginç bir sistem. Rails geliştiricileri için faydalı olacak bir sisteme benziyor. Günlüğüne de buradan ulaşabilirsiniz.
Facebook büyüdükçe büyüyor. Zamanla da büyüyecek gibi duruyor. Bu büyümeyi benim incelemem alanım dışında olduğu için sebeplerini araştırmayı pazarlamacılara bırakıyorum. Fakat geliştirici gözüyle Facebook’ta dikkat ettiğim en önemli olay “gerçekten güzel düşünülmüş bir altyapısı” olması. Özellikle “application” kavramı iyi düşünülmüş.
Yakında sunmayı planladığımız projemiz için ayrıca bir Facebook uygulaması da geliştirecektik. Öncesinde bir bilgi birikimim olması açısında Facebook Applications yapısına biraz göz attım.
Facebook java ve php geliştiricileri için official kütüphaneleri sunuyor. Özellikle PHP kütüphanesine ait bir çok örnek bulabilirsiniz.
Fakat, Kimyapacak.Com’u Ruby diliyle geliştirdiğim için RFacebook kütüphanesi benim ilgi alanıma giriyordu. RFacebook, “api”yi kullanan “api” olarak düşünülebilir. Alt yapısında “Hpricot” kullanıyor. RFacebook’un da en önemli kozu ruby “method_missing” fonksiyonu. Api’ye methodları bu şekilde iletiyor. Yani RDoc dökümantasyonunda Facebook fonksiyonlarının çoğunu görememiz bu yüzden, kullanamadığımızdan değil.
RFacebook’u gem paketi ile kurabiliyoruz:
sudo gem install rfacebook
Rails uygulamaları için; uygulamamızı kodlayıp en son bunu facebook’a entegre ediyoruz. Buradaki anahtar kelime “session” oluşturumu için :require_facebook_install | :require_facebook_login .
Kendime örnek bir uygulama seçerek ve “Burhan Altıntop” grubunun üye sayısını da göz önüne alarak Burhan Altıntop replikleri uygulaması geliştirdim. Bunun bir sebebi de fazla karmaşık bir uygulama olmamasıydı. Aslında böyle gibi dursa da işin en “zor” kısmından başladığımı sonradan anladım. Zira, facebook her sayfayı bellekte tutuyor. Özellikle profil sayfalarına büyük önem veriyor bu konuda. Yani “profil sayfasını” değiştirmek için facebook’a bilgi göndermek gerekiyor. Durum böyle olunca ve uygulama da sadece sözleri gösterince herhangi bir istek kullanıcılardan gelmemiş oluyor. Bunu çözmek için “Infinite session keys” kullanmak kaçınılmaz oluyor. Kullanıcı bir işlem yaptığı zaman (örn. uygulamayı kurmak) bunu veritabanına kaydetip daha sonra her kullanıcı için bu anahtarla giriş yapıp setFBML’yi kullanmak lazım oluyor.
Aslında tüm sayfalarda aynı içerik yer alacaksa bunun için FBML etiketi olan fb:ref düşünülmüş. Bu şekilde bir “handle” yahut “url” belirterek tüm heryeri güncelleyebiliyoruz fb:ref’e sahip olan. Fakat böyle olunca her profilde aynı içerik gösterilmiş oluyor.
Bir diğer değişken söz üretme tekniği ise uygulamayı yazdıktan sonra aklıma gelen bir sistem. Yine fb:random ile fb:ref’i birbirine katarak her sayfa güncellemesinde bir söz çıkartılabilir. Veritabanına yeni söz eklendiği zaman fb:ref’i güncellemek yeterli olacaktır.
Özet geçmek gerekirse, Facebook Applications, güzel bir yapıya sahip. İlk izlenimden elde edindiğim en önemli husus ve forumlarda da gördüğüm kadarıyla “profil kutuları” güncellenmesi. Güncelleme için mutlaka yazılıma istekte bulunulması lazım. Tetiklemeden güncellemek için (örneğin cron olayları için) infinite session’ları veritabanına kaydetmek lazım.
Bunun dışında normal bir uygulamayı facebook’a aktarmak inanılmaz bir yük değil. Özellikle kullanıcılara özel içerikli sistemlerde tabloda ekstradan “fb_user_id”yi tutan bir alan olursa sorgulamalarda user_id yerine fb_user_id ile çoğu kez işi götürebilirsiniz. (fb_user_id kullanıcının facebook id’si)
Bir de uygulamanız için iyi bir tasarımcı bulmayı ihmal etmeyin derim ben. Yazılımın tüm baloncuk hakları Sinan’a ait (:
vakit.rb 13/11/07
Namazvakti.com, güzel bir görünümle namaz vakitlerini kullanıcıya “online” olarak sunuyor. Aynı zamanda belirtilen şehire ait “xml” dosyasını da veriyor. Oldukça güzel bir sistem.
Bazen internet bağlantımın olmadığı zamanlar (kablomu çektiğim zamanlar) oluyor. Bu gibi zamanlarda hemen xml dosyasından günün tarihini okuyup ekrana yazdıran ufak bir araç geliştirdim. Kullanabilmek için namazvakti.com sitesinden şehrinizi arattırıp “yıllık xml” dosyasını vakit.rb’nin bulunduğu klasöre kaydetmeniz gerekiyor.
Diyanet.gov.tr ile namazvakti.com hesapları arasında oynamalar var. Bir kaç kaydı inceleyerek bunlar arasında farkın değerlerini çıkarttım. Yani sonuçları diyanet.gov.tr hesabına göre (arada yine bir-iki dakika oynama olabilir) görüyoruz.
Bursa için XML dosyası
İstanbul için XML dosyası
Kaynak kodlar
# aynı klasöre "vakit.xml" dosya adı ile kayıt ediniz..
#
# murat çeliker, murat.cekiker@gmail.com
# http://www.ikinoktayazilim.com/wordpress/
#
# kasım 12, 2007
#
# namazvakti.com verilerini diyanet saatine göre düzenler
# birkaç veri incelenerek aradaki farklar tespit edilmiştir
#
def d(vakit, ekleme)
vakit = vakit.split(':')
saat, dakika = vakit[0].to_i, vakit[1].to_i + ekleme
carpim = 1
carpim = -1 if dakika < 0
saat, dakika = saat + 1 * carpim, dakika + -60 * carpim if dakika >= 60 or dakika < 0
"#{saat}:#{dakika}"
end
require 'rexml/document'
include REXML
bugun = Time.now.yday * 2
bugun += 1 if (bugun % 2) == 0
vakitler = Document.new(File.new('vakit.xml')).root.to_a[bugun].text.split(/\t/)
puts "----- gunun namaz vakitleri ----- \n\n"
puts " imsak: #{d(vakitler[0], 15)} \n gunes: #{vakitler[2]} \n oglen: #{d(vakitler[5], -4)} \n ikindi: #{d(vakitler[6], -6)} \n aksam: #{vakitler[9]} \n yatsi: #{d(vakitler[11], -9)} \n"
puts "\n\ncikmak icin bir tusa basiniz... \n"
gets
Faydalı olması ümidiyle.

Bundan bi’ kaç hafta önce yazmıştım çevirgeç‘i anca atabildim internete.
Nedir?
Çevirgeç, belirtilen klasörlerdeki resimleri belirtilen sürede duvar kağıdı yapar. Tüm resimler duvar kağıdı olana kadar aynı ada sahip dosya bir daha duvar kağıdı olmaz. Süre ise saniye cinsinden belirtilir. Aynı zamanda win32 servisi olduğu için bellekte fazla harcama yapmaz.
Neden?
Bu tür bir çok yazılım piyasada mevcut. Bunların bir çoğunda sonraki resime basınca aynı resim gelebiliyor. Ve yine bir çoğunda süre ayarı için belirli dakikaların altına inme/üstüne çıkma olayları yoktu. Ve yine bir çoğu win32 servisi değildi. Ve yine, …
Aynı şekilde çevirgeç’in eksiklerini konu alan “ve ama” ile başlayan çokca satır da gelebilir.
Ve ama, çevirgeçin ayar penceresi yok, ayarlaması zor.
Ve ama, çevirgeç imagemagick convert.exe’ye bağımlı.
Ve ama, çevirgeçin kontrolü konsoldan ya da “hizmetlerden” yapılmak zorunda.
gibi…
Kurulum
Çevirgeçin kurulumu oldukça kolay ama ayar yapması biraz zor. Ayar programını bir sonraki sürüm için (eğer olursa) yazmayı düşünüyorum. Şimdilik “yaml” dosyasını düzenleyerek bu işlemi yapabilirsiniz.
- gem install cevirgec komutu ile çevirgeçi kurabiliyoruz.
- Bu sıralar Rubyforge yansılarında sorun var. Gem paketlerini listelemede sorun oluşuyor. Bu nedenle bu adresten dosyayı bilgisayarınıza kaydettikten sonra konsolda kayıt edilen klasöre girerek yukarıdaki komutu verebilirsiniz.
- Çevirgeçi hizmetlere kurmak için komut istemcisinde: cevirgec kurulum komutunu verebilirsiniz.
- Kurulum işlemi bu kadar.
Çevirgeç Ayarları
Çevirgeçi kurduktan sonra ayar yapmak için sırasıyla aşağıdaki yordamları izleyebilirsiniz.
- Ruby’nin kurulu olduğu dizine girin. (Gezginden)
- Daha sonra \lib\ruby\gems\1.8\gems\cevirgec-0.1-mswin32\lib\cevirgec klasörüne ulaşın.
- ayarlar.yaml dosyasını açıp düzenleme yapabilirsiniz.
- ImageMagick convert.exe programını buradan yükleyebilirsiniz. Ayarlar.yaml dosyasında yerini yüklediğiniz klasör olarak belirtmeyi unutmayınız.
Hmm, acilen ayar programı lazım, satırları yazarken bile yoruyor insanı.
Çalıştırma silme, durdurma
komut istemcisinde:
cevirgec kurulum | baslat | durdur | sil | araver | devam | durum
kurulum: cevirgec’i kurar. baslat: çalışmaya başlatır durdur: çalışmasını durdurur
sil: servislerden çevirgeçi siler. araver: çevirgeçin çalışmasına araverir. devam: yeniden çalışmaya başlatır durum: şu an ne durumdaya cevap verir.
Son;
Program sadece win32 sistemlerde çalışıyor. Ayrıca win32utils paketinden bir kaç bağımlılık bulunuyor. Gem otomatik olarak bunlara dair “kurmak ister misiniz?” sorusu soracaktır. “y” ile devam edebilirsiniz.
GVim Portable 31/10/07
NetBeans 6.0 Beta 2 Yayımlandı 24/10/07
NetBeans’ın kararlı 6.0 sürümüne yaklaşırken 2. Beta sürümü de yayımlandı.
http://download.netbeans.org/netbeans/6.0/beta2/ adresinden yükleme dosyalarını bulabilirsiniz.
NetBeans Türkçe çeviri grubuna hâla kayıt olmadıysanız buradan ayrıntılı bilgiye ulaşabilirsiniz. Bekliyoruz herkesi.
Görüşmek üzere.
JRuby ile Zemberek Kullanımı (2) 18/10/07
Bundan önceki yazımda JRuby ile Zemberek kütüphanesinin nasıl kullanılabileceğini basitçe görmüştük. Yazıda yer alan örneklere göz attığımızda Zemberek kütüphanesini kullanırken Java’da izlenen yolu birebir izledik.
Yani bir kelimeye ait önerileri bulmak için şu kodu kullandık.
oneriler.each_with_index do |oneri, i|
...
...
Oysa bu kod Ruby programcıları için pek de güzel sayılmayacaktır.
Şöyle bir erişimin daha güzel olacağı aşikar.
oneriler = "Meraba".oneriler
# Meraba'nın yazımı doğru mu?
puts "Meraba".yazim_dogru?
# Merhaba'yı heceler, heceleri kullanıma sunar
"Merhaba".hecele { |hece| print "#{hece}-" }
Bunları yapmak için öncelikle ufak bir sınıf ve modül yazmalı daha sonra bunu String sınıfına dahil etmeliyiz.
ZemberekJRuby sınıfı
#
# Murat ÇELİKER, murat.celiker@gmail.com
# http://ikinoktayazilim.com/wordpress/
#
require 'java'
require 'singleton'
# Basit Zemberek Ayrıştırıcımız
# Yalnızca bazı methodlar yer almaktadır
#
class ZemberekJRuby
include Singleton
# zemberek kütüphanemizi dahil edelim
require 'zemberek-tum-2.0.jar'
# zemberek sınıflarımızı dahil edelim
include_class 'net.zemberek.erisim.Zemberek'
include_class 'net.zemberek.tr.yapi.TurkiyeTurkcesi'
# bir tane zemberek oluşturalım
def initialize
@zembo = Zemberek.new(TurkiyeTurkcesi.new)
end
# kelimeDenetle çevirisi
def kelime_denetle(kelime)
@zembo.kelimeDenetle(kelime)
end
# hecele çevirisi
def kelime_hecele(kelime)
@zembo.hecele(kelime)
end
# oner çevirisi
def kelime_oner(kelime)
@zembo.oner(kelime)
end
end
Gördüğünüz gibi basit bir Zemberek JRuby sınıfı yazdık. Singleton kullanarak yalnızca bir kez oluşturulmasını da sağladık. Şimdi artık modülümüzü de yazıp String sınıfına dahil edip daha bi rubysel kullanım yapabiliriz.
TurkceJRb::Katar
#
# örn: "deneme".denetle
#
module TurkceJRb
module Katar
def yazim_dogru?
ZemberekJRuby.instance.kelime_denetle(self)
end
def hecele
heceler = ZemberekJRuby.instance.kelime_hecele(self)
if block_given?
heceler.each { |hece| yield(hece) }
else
return heceler
end
end
def oneriler
oneri_listesi = ZemberekJRuby.instance.kelime_oner(self)
if block_given?
oneri_listesi.each { |oneri| yield(oneri) }
else
return oneri_listesi
end
end
end
end
Katar sınıfını dahil edelim
#
class String
include TurkceJRb::Katar
end
Yeni Örneğimiz
İlk yazıdaki örneğimiz artık şu hale geldi:
#
# String.oneriler , String.denetle gibi
#
yazi = ARGV.shift || 'meraba'
if yazi.yazim_dogru?
puts "#{yazi} dogru yazilmis"
yazi.hecele { |hece| print "#{hece}-" }
else
oneriler = yazi.oneriler
# önerilerimizi ekrana yazdıralım
puts "#{yazi} icin size #{oneriler.length} tane onerim var:"
oneriler.each_with_index do |oneri, i|
puts "Oneri #{i+1}: #{oneri}"
end
# yahut
yazi.oneriler { |oneri| puts "#{oneri}" }
end
Dosyanın tamamına ait kaynak kod yazının devamında yer almaktadır. Devamını Okumak İstiyorum
Yararlı: Taskbar Shuffle (Windows) 24/09/07
Taskbar Shuffle, taskbar da yer alan açık yazılımların yerlerini değiştirmeyi kendine görev edinmiş daha doğrusu ettirilmiş diyelim, yazılımı yazan birileri var sonuçta.
Çokça yazılım çalıştıran biri iseniz ve ilişkilendirilmiş yazılımları sırayla açmamış iseniz yazılımdan yazılıma geçişi kolaylaştırmak için kullanılabilir.
646 Kb. büyüklüğündeki Taskbar Shuffle’ın buradan kurulum dosyasını indirebilirsiniz yahut kurulumsuz yalnızca “exe” dosyası içeren zip dosyasını edinebilirsiniz.
En basit ve etkili ufak editör 23/07/07
Editörlerin benim tarafımda inanılmaz değerleri vardır. İlginçtir, masaüstü uygulamaları geliştirmeye başlama sebebim kendime uygun bir editör tasarlamaktı. Adı “Düzenle” idi ve sanıyorum 368 adet sürüm çıkartmışımdır - benden başka kimsenin haberi yok tabii ki -
Bir editor deyip geçmemek lazım.
Windows ortamında şöyle eli yüzü düzgün bir editör arıyorken (daha önceleri editplus kullanıcısı olarak ve yaklaşık 1649 tane editör denemiş biri olarak) PSPad süper bir izlenim bıraktı bende.
Total Organizer 07/07/07

Total Organizer Pro, windows için yapılacaklar listesinizi (takvim ve not tutma olayı da mevcut) tutabileceğiniz basit ve güzel bir uygulama.
Projeler klasöründe 2006′nın 5. ayında ya da daha öncesinde başladığım ve sonrasında büyük ihtimal unuttuğum (evet, insan yazacağı programı unutabiliyor) “Tutaç” şimdilik alternatif olamıyor ne yazıkki bu programa.
UI 2.0 & boyoto 05/07/07
Boyahane Otomasyonu yazılımın da kullanım mutlaka en basit şekilde olmak zorunda. Programı kulllanacak kişilerin çoğu programı kullanmaya başlayarak ilk kez bilgisayar ile tanışıyor çünkü. Ayrıca işçiye iş çıkarmak yerine onu daha verimli çalıştırmak daha önemli, bunun için yazılım da gereksiz alan olmamak zorunda, kullanım basit olmak zorunda, kafa karıştırıcı hiçbir şey bulunmamalı. Ayrıca güzel bir pencere de bunları sunmak tabii tümünden daha önemli bence.
Masaüstü uygulamaları geliştirirken en çok dikkat ettiğim husus kolay kullanılabilirlik ve güzel görünüm. Kolay kullanılabilirlik aranılana hızlıca ulaşabilme, güzel görünüm ise bu ulaşılabilecek alanları en anlamlı biçimde yerleştirme.
Boyotodan örnek iki ekran. (Boyoto projesinin satır sayısı 60000 i geçti, hayırlısı artık.)

Kde altında güzel bir ftp istemcisi aranıyorsa KFtpGrabber zaten baştan elenmeli. Aklımda Ruby&Qt ile Ftp istemcisi yazmak var, o zamana kadar Kasablanca güzel bir çözüm olacak sanırım.







