Edge Rails’e has_finder eklentisi dahil edilmiş ve ismen named_scope adını almış.
Biri yukarıdaki cümleyi kursa hiç heyecan duymazdım, çünkü bilmezdim ki has_finder eklentisinin ne kadar güzel olduğunu.
Misalen;
Şu iken;
def self.onay
find(:all, :conditions => {:onay => true})
end
..
Şu oldu:
named_scope :etkin, :conditions => { :onay => true }
end
Aşağıdaki örnek ile farklı bir kullanım alanını da görebiliriz (orjinali).
named_scope :inactive, :conditions => {:active => false} do
def activate
each { |i| i.update_attribute(:active, true) }
end
end
end
# Re-activate all inactive users
User.inactive.activate
Gibi.
named_scope yazılım geliştiricisinin işini kolaylaştıran, ruby dili esnekliğinden yararlanan güzel bir çalışma olmuş. Faydalı.
Rails 2.0 Duyuruldu 08/12/07
Haber servisi kıvamına dönen “blog” sitemden bir duyuru daha diyelim;
Rails 2.0 duyuruldu hatta güncelleme bile çıkarıldı (:
2.0.1 numaralı sürüme geçiş için
gem install rails -y
komutunu verdikten sonra yeni özellikleri kurcalamaya başlayabilirsiniz.
Rails Güncellemesi (RC2) 30/11/07
Bir türlü oturup uzun uzun yazılar yazamıyorum, bi’ kaç gün daha böyle gidecek sanırım.
En azından “haber servisi” görevinde bulunalım diyerek Rails 2.0 RC2 duyurulduğunu belirtmek isterim. Stabil sürümün en geç 2 haftaya çıkacağı söyleniyor.
Güncelleme işlemleri için RC1 bildirisine bakabilirsiniz.
rails 1.2.6 & jRails 25/11/07
Birkaç güvenlik güncelleştirmesi ve sorunu gideren yeni rails sürümü duyuruldu.
gem install rails -y
Bu arada bugün jRails‘e denk geldim. Mevcut rails metodlarında Prototype/Scriptaculous yerine jQuery kullandırabilmeyi amaçlamış.
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 (:
Rails 2.0 RC1 duyuruldu 10/11/07
Rails’in 2.0 sürümüne yaklaşırken Preview1 den sonra RC1 ara sürümü gem depolarında yerini aldı. Rails 2.0 dan önceki son ara sürüm olması muhtemel olan RC1′e yükseltmeyi iki şekilde yapabilirsiniz.
1. Yol: Sistemi Yükseltme
Gem paketini kaynaktan yükleyerek sisteminizdeki Rails sürümünü yükseltebilirsiniz.
gem install rails --source http://gems.rubyonrails.org
2. Yol: Uygulama için Rails kurulumu
Rails kaynak kodunu uygulamanız içine (vendor/rails) gömerek sistem sürümünü yükseltmeden uygulamanız için RC1′e geçebilirsiniz.
SVN deposunda RC1 “rel_2-0-0_RC1″ etiketi ile yer alıyor.
rake rails:freeze:edge TAG=rel_2-0-0_PR
komutu ile vendor klasörüne kopyalama yapabilirsiniz.
Aklımda Rails 2.0 hakkında daha kapsamlı bir yazı yazmak var, biraz vakit ve güç bulunca inşallah.
Ufak bir bilgi olması açısından;
Rails 2.0 a geçiş için dikkat edilecek en önemli husus “DEPRECATION WARNING” uyarını dikkate almak. Bu uyarıları development.log dosyalarından takip edebilirsiniz.
Bunun dışındaki gelişmeler sistem altyapısı ile ilgili gelişmeleri ve yeni özellikleri içeriyor. Bunları zamanla yazılımıza entegre ederek daha güçlü bir yazılıma sahip olabiliriz.
İyi çalışmalar.
Detaylı NetBeans Ruby İncelemesi 17/10/07
30 Ağustos’ta yayımlanmış bir yazı, diğer editörlerle de ufak bir karşılaştırma yapılmış. Şimdiye kadar gözden kaçmış bir inceleme olmasına üzüldüm.
Buradan ulaşılabilir: Netbeans THE best ruby on rails IDE
TurkceRb << Sayı-Yazı Çeviricisi 15/10/07
TurkceRb projesinin yeni sürümünü yakında sunacağım inşallah. Gem paketini kurduktan sonra require “turkce” require “turkce_rails” diyerek kullanabileceğiz, ayrıca rails ile ruby modülleri de ayrılacak. Konu hakkında daha detaylı girdiyi gem paketini oluşturduktan sonra (süresi belli değil henüz) detaylıca yazacağım inşallah.
Yeni sürümü beklemeden “yaziya_cevir” fonksiyonunu siteden paylaşmayı uygun gördüm.

yaziya_cevir
Verilen sayıyı yazıya çeviren bir fonksiyon. Örnek olarak
=> OnBirTrilyonİkiYüzYirmiBirMilyarÜçYüzOnİkiMilyonYediYüzElliBeşBinYüzYirmiÜç
Yazının devamında kaynak kodlarını bulabilirsiniz.
Bedava Ruby On Rails Kitabı 09/10/07
Vakt-i zamanında SitePoint’in tarafından yayımlanan Patrick Lenz tarafından yazılmış olan “Build Your Own Ruby On Rails Web Application” 60 gün boyunca bedava ve tam sürüm olarak indirilebiliyor.
Kitaba çok önceden göz gezdirmiştim, başlangıç seviyesinde yararlanılabilecek bir kitap. Rails’in çalışma mantığını basit bir uygulama eşliğinde anlatıyor. Zaten Rails’i anlamanın ve öğrenmenin en güzel yolu da örnek uygulama geliştirmek. Üzerinde çalıştığım kitap projesinde aynı yolu bende izliyorum daha doğrusu izleyeceğim inşallah.
Piyasaya çıkmış olan tüm Ruby destekleyen editörleri denemeye çalışıyorum. Zaman zaman bunların değerlendirmesini bu sayfada yayımlıyorum.
Uzunca bir süre kodlamalar için Eclipse üzerine RDT ve RadRails pluginlerini kurup işlerimi öyle hallettim. Zira RadRails güncel RDT sürümünü kullanmadığı için otomatik kod tamamlama ve folding olayları kendi içerisinde gelmiyordu.
Fakat son zamanlarda tüm ruby kodlamalarımı NetBeans üzerinden yapıyorum, halen ilk deneme sürümü olmasına rağmen şu anki hali bile kullanımda büyük kolaylık sunuyor. Eğer hala denemediyseniz sadece Ruby paketini içeren NetBeans sürümünü (19 MB) yükleme sayfasında bulabilirsiniz.
Gelelim yazının asıl konusuna, Ruby için “Dark Pastels” renklendirmesi yayımlandı dün, kod yazarken koyu zeminlerden hoşlanıyorsanız tavsiye ederim.

Kurmak için buradaki dosyayı bilgisayarınıza kaydettikten sonra, NetBeans ana menü barında “Tools > Plugins” menüsünden “Downloaded” tabını seçip “Install” düğmesine basarak eklentiyi kurabilirsiniz. Daha sonra “Options” menüsü altında bulunan “Font & Colors” sekmesinden Ruby Dark Pastels profilini seçip, NetBeans’ı yeniden başlattıktan sonra yeni renk düzeninize geçilmiş olacaktır.
Shift+ESC bir de üstüne Alt+Shift+Enter yaparsanız, tadından yenmez oluyor.

Rehber, Ruby kütüphanelerini ve bu kütüphanelere ait fonksiyonları örnekler eşliğinde açıklamayı hedeflemektedir.
Rehber-ül Ruby, Ruby Rehberi, Rehber ya da daha başka bir isme sahip olabilecek bu tür bir sistem çalışmasına başladım. İlk deneme sürümünü inceleyip yorumlarınızla ve göndereceklerinizle katkıda bulunursanız sevinirim.
Şu an ulaştığınız sürümünde yalnızca olayın örneği olması açısından bi’ kaç sınıfa ait bi’ kaç fonksiyon ekledim. Sistemin ilk incelenmesinden sonra sizlerden gelecek yönergeler eşliğinde kararlı sürümü çıkartıp verileri de tam olarak sisteme geçmeye başlayacağım inşallah.
Aklımda olan kesin olarak eklenecek özellikler:
- Arama mekanizması (modül, sınıf, fonksiyon, örnek)
- Son eklenenler (RSS)
Şunların eklenip eklenmemesi konusunda yorumlarınıza ihtiyacım var:
- Yüklenebilir örnekler / modüller / sınıflar (Pdf, .rb, Html)
- E-Postanıza her gün bir modül/sınıf açıklaması
Gönderdiğiniz/göndereceğiniz modüller,sınıflar,fonksiyonlar ve örnekler ve ayrıca yorumlar için şimdiden teşekkürlerimizi sunuyoruz.
Tablomuzda kayıt ekleme yahut güncelleme anında mutlaka doldurulması gereken alanlar olabilir.
Giriş
Rails tümleşik bir geliştirme ortamıdır. Yazılımın bölümleri arasında ki düzeni siz belirttiğiniz sürece otomatik olarak sağlayabilir.
ActiveRecord modülü gerekli alanların kontrolünü yapmak için bizlere oldukça geniş imkanlar sunar.
Avi formatında, yüksek çözünürlüklü ekran görüntüsüne ulaşabilirsiniz.
validate fonksiyonu
ActiveRecord sınıfı ve buna ait alt sınıflar “validate” fonksiyonuna sahiptir. Bu fonksiyonu yeniden yazarak kendimize göre özelleştirebiliriz.
validate fonksiyonu her kayıt öncesinde çalışır.
# ...
# ...
protected
def validate
errors.add(:isim, "Aynı isimle daha önce mesaj yazılmış") if isim_kontrol(isim)
errors.add(:soyisim, "Boş bırakılamaz") if soyisim.empty?
end
end
Bazı kontrollerin sadece yeni bir kayıt anında yapılmasını ya da bazılarının sadece güncelleme anında yapılmasını isteyebiliriz.
validate_on_create & validate_on_update
Yalnızca yeni kayıt anında kontrol yapılmasını istiyorsak “validate_on_create” fonksiyonunu yeniden yazabiliriz. Aynı biçimde, yalnızca güncelleme anlarında kontrol için de “validate_on_update” fonksiyonunu yeniden yazabiliriz.
Hazır Denetleme Fonksiyonları
Rails, genel denetlemeler için bize hazır fonksiyonlar sunmuştur.
- Alanın mutlak doluluğunu kontrol etmek için: validates_presence_of
Örnek kullanım: validates_presence_of :isim - İçeriğin belirli formata uyma zorunluşuğı: validates_format_of
Örnek kullanım: validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i - İçeriğin uzunluğunun kontrolü: validates_length_of
Örnek kullanım: validates_length_of :isim, :maximum=>30 - İçeriğin sayısallığının kontrolü: validates_numericality_of
Örnek kullanım: validates_numericality_of :oy, :only_integer => true - İçeriğin kayda özel olmasının kontrolü: validates_uniqueness_of
Örnek kullanım: validates_uniqueness_of :isim, :on => :create
Sunum
Makaleye ait sunumu izleyerek örneklerin çalışmasını ve detaylı kullanımını görebilirsiniz.
Avi formatında, yüksek çözünürlüklü ekran görüntüsüne ulaşabilirsiniz.
Dreamhost üzerinde Rails projesi 16/08/07
Rails uygulamaları geliştiriyor ve sunucu olarak Dreamhost kullanıyorsanız, uygulamanızda eklenti (plugin) kullanmadan önce eklentinin sunucuda çalışıp çalışmadığını test etmekte fayda var. Zira sonrasında fazlaca baş ağrıtabiliyor.
Dreamhost ve Rails Uygulaması
- ssh üzerinden sunucuya bağlanın.
- projenizi oluşturun: rails proje
- yereldeki “app” klasörünü, “config/routes.rb” ve “public” klasöründe değiştirmiş olduğunuz dosyaları gönderin.
- eklentilerinizi sunucuya kurun
- config/environment.rb dosyasından projenizi “production” ortamına geçirin.
- config/database.yml dosyasını güncelleyin.
- rake db:migrate ile tablolarınızı ayarlayın.
- public/.htaccess dosyanızı açın ve dispatch.cgi yi dispatch.fcgi ile değiştirin
Bir ipucu:
Dreamhost panelinde sayfanızın “home directory” alanına proje/public yazarak (subdomain yahut domain) alan adınıza erişenlerin direkt projeye girmesini sağlayabilirsiniz.
Eğer projelerinizde in_place_edit kullanıyorsanız, kullandığınız değer sıfırlandığında kullanıcının bunu yeniden değiştirme şansı olmayacaktır. Bu nedenle ufak bir kodla bu soruna çözüm bulabilirsiniz.
Öncelikle bunu uygulayacağımız “model”imizi açıyoruz ve kayıttan önce bu alanı kontrol ediyoruz.
before_save :kontrol
private
def kontrol
self.aciklama = 'Açıklama Yazmak İçin Tıklayın' if self.aciklama.empty?
end
end
Sayfanızda değişkeni göstereceğiniz yerde ise ufak bir ön kontrolden sonra yazdırabilirsiniz.
str == 'Açıklama Yazmak İçin Tıklayın' ? '' : str
end
“Açıklama Yazmak İçin Tıklayın” i sabit olarak tanımlamak tabii ki her daim daha iyidir.






