RadRails & Aptana 10/03/07
Bi’ kaç gün önce RadRails geliÅ?tiricisinin (Kyle) projeyi devretmek istemesi herkesi üzmüÅ?ken RadRails’in Aptana geliÅ?tiricileri tarafından devralındıÄ?ı açıklandı.
Hayırlı olur inÅ?allah.
layout ‘duzen’ 07/03/07
“layout” ve sayfa düzeni üzerine
Ruby On Rails, normal Å?artlar altında sayfayı ekrana yansıtmak için ayrı bir klasörde (app/views/…) bulunan “.rhtml” uzantılı dosyaları kullanır (eruby altyapısını kullanır). Hangi dosya olduÄ?unu ise “denetleyici adı”/”sayfa ismi”.”rhtml” Å?eklinde bulur. (”Partial” dosyaların baÅ?ına “_” koyarak…)
Normal Å?artlardan kasıt eÄ?er fonksiyon sonunda sayfaya veri döndürülmemiÅ? ise (örn: render :partial, render :text gibi render komutları “sayfaya veri döndüren” komutlardır.) anlamına gelmektedir.
Normalde ekrana görünüm dosyasını yansıtırken eÄ?er “app/views/layouts” klasöründe “application.rhtml” dosyası mevcut ise yansıtılacak olan görünüm dosyası “application.rhtml” dosyasında < %= @content_for_layout %> yahut < %= yield %> bulunan yere yerleÅ?tirilir.
Ã?rneÄ?in yalnızca yönetim paneli için kullanılacak bir sayfa düzeni oluÅ?turmak isterseniz oluÅ?turacaÄ?ınız “.rhtml” dosyasını “app/views/layouts” dizinine koyduktan sonra, yönetim paneline ait denetleyicilere bunu bildirmeniz gerekecektir.
# app/views/layouts/yonetim.rhtml
#
<html>
....
<body>
< %= @content_for_layout %>
</body>
</html>
#
# Denetleyici Dosyamız
#
class Yonetim::TestController < ApplicationController
# Genel sayfa düzeni olarak 'yönetim'i kullan
layout 'yonetim'
.....
Yukarıdaki denetleyici tüm sayfalarında (sayfalardan kasıt; oluÅ?turulmuÅ? fonksiyonlardır) kendisini “yonetim.rhtml” dosyası içerisine gömecektir.
Fakat, yalnızca alanlık olan görünüm dosyaları bunun dıÅ?ındadır. (Alanlık görünüm dosyaları dosya isimlerinin baÅ?ına “_” alırlar ve render :partial ile sayfada herhangi bir yere yansıtılabilirler.)
“Partial” görünüm dosyaları sayfa düzeni ile beraber ekrana yansıtılmazlar.
in_place_editor_field & Türkçe 05/03/07
Scriptaculous altyapısında bulunan “in place editor” alan düzenleme yapısı normal Å?artlar altında İngilizce mesajlar ile geliyor.
Ruby On Rails altyapısında bu özelliÄ?i kullanan yardımcı (helper) fonksiyonu (”in_place_editor_field”) otomatik TürkçeleÅ?tiren fonksiyon aÅ?aÄ?ıda yer alıyor. (EÄ?er bu fonksiyonu kullanmadan TürkçeleÅ?tirme yapmak isterseniz controls.js dosyası 476. satırdan itibaren kodlara göz atabilirsiniz)
Ã?ncelikle “in_place_editor nedir?” konusuna deÄ?inirsek

ApplicationHelper.rb dosyasına kaydedersiniz tüm görünüm dosyalarında sorunsuzca kullanabilirsiniz.
Sayfalama yaparken “önceki sayfa” “sonraki sayfa” baÄ?lantılarında yalnızca deÄ?iÅ?en kısım kayıtların listesinin bulunduÄ?u kısımdır. Madem Ajax diye bir olay var, bence kullanımının olacaÄ?ı en güzel yerlerden birisi de sayfalama olaylarıdır.
Yazıda hem Ajax’ın Rails içerisinde nasıl bir kullanımı olabileceÄ?ine deÄ?inecek, hem de sayfalama sistemini inceleyeceÄ?iz. Ayrıca yazıda “render” fonksiyonunu ve “layout” içeriÄ?ini yansıtmadan yalnızca dosya içeriÄ?ini yansıtmayı saÄ?layan “render :partial” olayını göreceÄ?iz.
Ajaxsal Sayfalama Mekanizması
Ruby On Rails, müthiÅ? iki JavaScript kütüphanesi olan Scriptaculous Ve Prototype ile beraber gelmektedir. Ajaxsal yordamları & efektleri bu iki kütüphane sayesinde Rails’in bize sunmuÅ? olduÄ?u fonksiyonlar ile oldukça hızlı Å?ekilde gerçekleÅ?tirebiliriz. “Pagination” sınıfının ne olduÄ?una ve örnek kullanımına bi’ kaç bildiri öncesinde yer vermiÅ?tim.
BaÅ?ka neler göreceÄ?iz?
Ayrıca yazıda “render” fonksiyonunu ve “layout” içeriÄ?ini yansıtmadan yalnızca dosya içeriÄ?ini yansıtmayı saÄ?layan “render :partial” olayını göreceÄ?iz.
Yazının devamında makalenin tamamını bulabilirsiniz.
Bazen öyle zaman olur ki bir deÄ?ere eriÅ?mek için diÄ?er bir tablonun o alandaki kaydını kullanırız (join).
“Join”i Å?öyle anlatayım, bize gerekli olan alanın deÄ?erini tuttuÄ?umuzu (foreign key) düÅ?ünelim, fakat bizim o deÄ?erinde (tablonun) alanlarına eriÅ?memiz lazım geldiÄ?ini varsayalım.
Bir örnek vermek gerekirse;
a tablosunda b tablosunda bulunan “id” deÄ?erini tuttuÄ?umuzu düÅ?ünelim. Aynı zamanda “b” tablosunda da “c” tablosunda bulunan kayıtların “id” deÄ?erinin tutulduÄ?unu düÅ?ünelim.
a.b_id
b.c_id
İÅ?te bu noktada, a tablosundan “c” tablosunda bulunan alanlara direkt eriÅ?im saÄ?lamak için “through” kullanıyoruz.
Yukarıdaki örnekte verilen a tablosundan “c” tablosunun alanlarına “direkt” eriÅ?im saÄ?lamak için aÅ?aÄ?ıdaki kodları kullanabiliriz.
through olmadan nasıl yapıyorduk?
:through kullanmadan öncelikle “b” tablosunu seçiyor daha sonra “c” tablosuna alanlarına eriÅ?ebiliyorduk.
# model b: belongs_to :c
# c tablosundaki isim alanına eriÅ?mek için
a.b.c.alan
# ----------
# model a: has_many :c, :through :b
# c tablosundaki isim alanına eriÅ?mek için
a.c.alan
Sayfalama (Pagination) İpucu 03/03/07
Ruby On Rails’in tabloları ve sonuçları otomatik sayfalandıran Pagination nesnesi birçok zahmetten bizleri kurtarıyor. Lakin, modelimize ait bir fonksiyonda dönen kayıtları sayfalandırmak için varsayılan olarak hazır bir yapı bulunmuyor. Mutlaka tüm dönen sonuç bilgilerini “pagination” nesnesinde “paginate” fonksiyonuna göndermek gerekiyor. Dönen kayıtların adeti, ilk ve son kayıt arası fark gibi.
Bizleri bu zahmetten kurtaracak olan ufak bir fonksiyon.
application.rb dosyasına bu fonksiyonu koyarsanız, iÅ?lev tüm yazılım denetleyicileri tarafından eriÅ?ebilir olacaktır.
# application.rb dosyasına konulduÄ?u takdirde tüm denetleyiciler
# tarafından kullanılabilir olacaktır.
# http://snippets.dzone.com/posts/show/389
def paginate_collection(collection, options = {:per_page => 10, :page => 1})
pages = Paginator.new self, collection.size, options[:per_page], options[:page]
first = pages.current.offset
last = [first + options[:per_page], collection.size].min
slice = collection[first...last]
return [pages, slice]
end
Kullanımına dair bir örnek:
Ruby On Rails ile uygulama geliÅ?tirirken mutlaka kullanılması gereken “muhteÅ?em” özelliklerinden biridir ActiveRecord’un alansal hata kontrol mekanizmaları. Lakin, varsayılan olarak hatalar İngilizce’dir. Bunları TürkçeleÅ?tirmek için ActiveRecord modülündeki Errors sınıfında bulunan @@default_error_messages “Hash” deÄ?iÅ?keni düzenlenmelidir.
Varsayılan durumlarda kullanılan mesajları, Ruby sınıfının tarihsel deÄ?iÅ?kenlerini ayrıca hata penceresi mesajlarını TürkçeleÅ?tiren turkce.rb dosyasını kullanıma sunuyorum, buyrun.
Kullanmak için tasarınızda herhangi bir yere kaydedip daha sonra “environment.rb” dosyasına bu dosyayı ekleyebilirsiniz.
Ã?rneÄ?in; app klasöründe turkce.rb adıyla kaydederseniz environment.rb dosyasına
eklemeniz gerekli ayarları yapacaktır.
Yazının devamında gerekli dosya içeriÄ?ini bulabilirsiniz.
M. Ozan Hazer günlüÄ?ünde Ruby’nin dolayısıyla Ruby On Rails’in performansının bu dili kullanıp/kullanmama konusunda ne kadar etkili olacaÄ?ına dair güzel bir yazı yazmıÅ?. (Ã?zerinden on gün geçmesine raÄ?men henüz paylaÅ?abiliyorum.)
Ã?zet olarak “Ã?oÄ?unlukla bir yerden kazanırsanız diÄ?er bir yerden kaybedersiniz”i Ruby On Rails ve diÄ?er altyapılar için ana fikir olarak seçerek “Programlamada da iÅ?ini ne kadar kolaylaÅ?tırırsanız o kadar performans kaybedersiniz” Å?eklinde yazılım konularında kullanmak üzere yazıyor.
Yazıya tamamıyla katıldıÄ?ımı belirtiyor, yazılım geliÅ?tiricinin yazılım yazarken zevk alması gerektiÄ?ini düÅ?ünüyorum.
Ruby On Rails İle Sunucuya Dosya Gönderimleri
GiriÅ?
Ruby On Rails altyapısında sunucuya dosya gönderme iÅ?lemi birkaç aÅ?amada gerçekleÅ?tirilebilir. Yazının sonunda kullanıcılardan resim alan, aldıÄ?ı bu resmi ve ufak boyutlu görüntüsünü (thumbnail) kaydeden ufak bir yazılım geliÅ?tirmiÅ? olacaÄ?ız.
Kullanıcılardan dosya almak için “form”umuzu “multipart” olarak tanımlamalıyız. Bunun için form oluÅ?turma etiketimize “:multipart => true” argümanını yollamak yeterli olacaktır.
Ã?rneÄ?i geliÅ?tirmek için kullanıcıya formu gösteren ekle fonksiyonu, formun gideceÄ?i kayit fonksiyonu ve resimleri ototomatik boyutlandırıp ve gerekli kaydetmeyi gerçekleÅ?tiren “private” Å?eklinde “resim_ekle” fonksiyonu kullanacaÄ?ız. Bunları aynı denetleyici içerisinde oluÅ?turmayı unutmayın - aynı denetleyici dıÅ?ında yapmak isterseniz formun gideceÄ?i noktayı deÄ?iÅ?tirmeniz gerektiÄ?ini unutmayın -
Formumuzun Tanımlanması
Ã?rnekte kullanmak üzere kullanıcıdan yalnızca dosya giriÅ?i yapmasını isteyen bir form tanımlayacaÄ?ız.
Bu ekran denetleyicinin “ekle” fonksiyonunda gözükecektir. Bunun içinde denetleyicide “ekle” isimli fonksiyon oluÅ?turuyoruz.
def ekle
end
# ekle.rhtml adı altında app/views/denetleyici klasörüne kaydediyoruz.
< %= "<h2>#{flash[:notice]}" if flash[:notice] %>
< %= form_tag({:action=>'kayit'}, :multipart => true) %>
< %= file_field_tag 'resim' %>
< %= submit_tag 'Ekle' %>
< %= end_form_tag %>
Yukarıda belirtilen kodlarla kullanıcıya dosya giriÅ?i sunan form sayfası oluÅ?turduk. Form “kayit” sayfasına gidecektir. Kayıt sayfasında gelen bu dosyayı sunucumuza kayıt edeceÄ?iz. Devamını Okumak İstiyorum
“CODE BLOCK” yapılı iÅ?levler oluÅ?turmak
Ã?nceki makalemizde “yapılar ve tekrarlayıcılar”ın genel kullanım türlerinden bahsetmiÅ?tik. Ã?rnek verirken Ruby tarafından bize sunulan kütüphaneleri ele almıÅ?tık. (Array.each gibi)
Bu makalede yapı kabul eden fonksiyonları kendimizin nasıl oluÅ?turacaÄ?ı üzerinde duracaÄ?ız.
Kendi oluÅ?turduÄ?umuz fonksiyona nasıl “kod yapıları” eklenebilir?
Kod yapısı kabul eden bir fonksiyon oluÅ?turmak için Ruby dili bize “yield” iÅ?levini sunar. Verilen kodun tekrarlanacaÄ?ı yere “yield” yazmak yeterlidir.
puts "Ã?alıÅ?tırılıyor..."
# kod yapısını çalıÅ?tıralım
yield
puts "Bitti..."
end
calistir { puts "merhaba" }
Yukarıda belirtilen fonksiyon “yield” iÅ?levinde verilen kod yapısını tekrar edecektir. Ã?ncesinde ekrana “Ã?alıÅ?tırılıyor…” yazacak yapılan kod tekrarlandıÄ?ında “Bitti” yazacaktır.
block_given?
Yeni Tasarım 26/02/07
Yeni tasarıma geçiÅ? gerçekleÅ?ti her ne kadar olsa da eksik noktalar.
1. KOD YAPILARI
Kod yapıları aslen bir fonksiyon olup, -kısaca- iÅ?lemden döndürülen sonuçları alarak bunları o an içerisinde iÅ?lemeye yarar. Bir fonksiyondan ayrıldıkları tek nokta çoÄ?u zaman isimlerinin olmayıÅ?ıdır. Ayrıca fonksiyona deÄ?er göndermek yerine dönen deÄ?eri/deÄ?erleri otomatik olarak yakalayıp, iÅ?leyebilir.
2. KOD YAPILARININ TANIMLANMASI
Ã?rnek olarak “Array” sınıfının “each” fonksiyonunda dönen deÄ?eri yakalayıp bu deÄ?er üzerinden iÅ?lem yapalım.
[1, 2, 3].each { |x| puts "DeÄ?er: #{x}" }
# Do-End Tarzı Yazım
[1, 2, 3].each do
|x| puts "DeÄ?er: #{x}"
end
Ã?rnekte verilen “Array.each” incelendiÄ?inde döngü içerisinde tüm elemanları sırayla aktarıldıÄ?ı görülecektir. Yapı ile biz bu elemanı yakalayıp, onun üzerinden iÅ?lem yaptık.
Ã?rneÄ?i yapı kullanmadan yazmaya çalıÅ?alım:
beÅ? nokta 20/02/07
kimsesiz bir alan için
birçok Å?eyleri vereceÄ?imiz vakitlerdi
bok renkli, devlet kokan binalarda
bahçe gibiydik
kim bilir kaçıncı bi’ kez mevsim gören
soÄ?ukluÄ?u mutlak binaların
var olan ufak sıcaklıÄ?ının oluÅ?umu da
öpüÅ?ümlerimize baÄ?lıydı
daha bi’ o kadar mutluluÄ?a uzak
mutlu bir çift olmamıÅ?tır
biz sayılmazsak
üstelik gördüklerimin en güzeliydi resmin
seni saymazsak
aÄ?latmacı kelimeler
mutluluÄ?a engel olamaz
tek göz iki kiÅ?ilik
gözyaÅ?ı salgılıyorsa
ve,
var olmayan yok olmayabilir de
biz gibi.
bi’ o kadar yaklaÅ?mıÅ?ken
geleceÄ?e
geçmiÅ? zamana geri dönüyordum.
biz giderdik,
bizsizler gelirdi
var olmayan yok olmaya da bilir
biz gibi.
murat ârif �eliker
Å?ubat 17, ‘07
sitemap.rb verilen yerel dosya üzerinde yahut aÄ? sayfası üzerinde tüm baÄ?lantıları takip ederek (tabii sunucunuzda bulunanları ve gerekli görünenleri) kısayoldan sitemap.xml dosyası oluÅ?turmaya yarayan, oluÅ?an dosyayı bilgilerinizi girdiÄ?iniz taktirde sunucunuza yükleyebilen araçtır.
Tasarı sayfasından da gerekli bilgilere ulaÅ?abilirsiniz.
Svn hesabından geliÅ?meleri takip edebilirsiniz.
svn checkout svn://rubyforge.org/var/svn/sitemap-rb
Neler Yapabilir?
- Verilen adresteki tüm baÄ?lantıları bulur. EÄ?er baÄ?lantı sunucunuz üzerinde ve belirlenen dosya formatlarının dıÅ?ında ise bunu listeye ekler.
- OluÅ?turulan dosyayı sunucunuza yükleyebilir.
- İÅ?ini yerine getirir!
Neler Yapamaz?
- BaÄ?lantı bilgilerini el ile ayarlama yok. İkinci sürümde olma ihtimali %100.
- Grafiksel bir arayüze sahip deÄ?il. İkinci sürümde olma ihtimali %100. (İlk “neler yapamaz”ın sebebi de grafiksel ekrandan yoksun oluÅ?u)
İlerisi İçin Tasarı GeliÅ?imi
Grafiksel arayüz eklenmesi ve hatalar var ise düzeltilmesi. Kodların genel bir incelenmesi.
Hata Olursa & Fikrim Varsa
Bunların sonraki sürümlerde yer alması/düzeltilmesi için yorum yazabilirsiniz.
sitemap.rb | sitemap.xml creator
sitemap.rb found all links - if it’s suitable - in local file or web site, then create sitemap.xml for you. if you agree, it’s send your sitemap.xml file to your server!
usage
if you want to use sitemap.rb, your system must have a ruby.
# create sitemap.xml from local file
ruby sitemap.rb index.html
# create sitemap.xml from web page
ruby sitemap.rb http://www.ikinoktayazilim.com/
download
downloadable files are in project page.
next versions?
Next version (probably 0.2) will have Graphical User Interface (gui). With new version you change every file unique properties. (like “how often updated?”)
Comments are welcome!
ScreenCast: NetSınav (3) 11/02/07
netSınav sistemi tasarısı hakkında daha ayrıntılı bilgiyi buradan bulabilirsiniz.
Bölüm İçin Yol Haritası:
- Sınav Sisteminin OluÅ?turulması
- Puan Sisteminin OluÅ?turulması
- Helper Kullanımı
- Session Kullanımı
- rescue ve kullanım yerleri
- �zel Fonksiyonların Tanımlanması
3. bölüme ait kaynak kodları buradan yükleyebilirsiniz (.tar.gz)
Detayları ve bölüm yazısını yazının devamında bulabilirsiniz… Devamını Okumak İstiyorum








