LaTeX, TeXMAKER & Türkçe 29/03/07
Makale, kitap hatta mektup yazmak için bile kullanılabilen LaTeX dili için Türkçe bi’ Å?eyler karalamak isterken “Türkçe karakter hatası” sorunlarından kurtulabilmek için gerekli komutlar Å?unlar:
- \documentclass[12pt,a4paper]{book}
- \usepackage[turkish]{babel}
- \usepackage[latin5]{inputenc}
- \usepackage[T1]{fontenc}
- \usepackage{bookman}
Ayrıca Texmaker “platform baÄ?ımsız” güzel bir LaTeX editörü.
Kaynak koddan LaTeXsel renklendirme yapan “Highlight Converter” çok yararlı.
Windows için MiKTeX ile TeX paketlerini de kolayca yükleyebiliriz.
Malumunuz Rails “Prototype” alt yapısını kullanarak Ajaxsal olayları içerisinde bulunan “helper” dosyaları sayesinde oldukça kolay kullanıma indirgedi.
Yazıda “bildirgeç”te bulunan “tutma” sisteminin Rails ile nasıl yapılabileceÄ?ine veya bir oy sisteminin Rails ile nasıl yapılabileceÄ?ine deÄ?ineceÄ?iz. Yazının amacı “basit” ajax olaylarını nasıl yapabileceÄ?imizin dıÅ?ında “RJS” Å?ablon sistemini kullanabilmeyi göstermektir.
UYGULAMA Ã?RNEÄ?İNE BAKABİLİRSİNİZ.
Yazının sonunda “bildirgeç” üzerinde bulunan “tuttum” yapısının daha geliÅ?miÅ? bir sürümünü elde etmiÅ? olacaÄ?ız. “Daha geliÅ?miÅ?” çünkü tutulduÄ?u anda “tutan kiÅ?ilerin” listesini de güncelleyecek.
Not: Yazıda kullanıcılar ve kullanıcı giriÅ?leri Å?eklinde bir sistemimiz olmadıÄ?ı için oluÅ?turacaÄ?ımız fonksiyonları anlık yapacaÄ?ız. BaÅ?ta belirtildiÄ?i üzere asıl amaç “RJS” ile birden fazla alan güncellemesidir.
Ortamın Hazırlanması
rdt svn version & radrails 19/03/07
Ruby Development Environment’in (RDT) geliÅ?tirme aÅ?aması sürümlerini yükleyerek yeni sürümünde nasıl bir hâl alacaÄ?ını Å?imdiden görün derim. Eclipse üzerine kurup, üstüne RadRails paketlerini de kurarak Ruby On Rails için editör özellikleri arttırımından da faydalanabilirsiniz.
Kurulum için öncelikle Eclipse‘ye sahip olduktan sonra
Help > Software Updates > Find and Install
menüsünü izliyoruz. RDT için yeni güncelleme adresi olarak http://updatesite.rubypeople.org/nightly sayfasını ekliyoruz. RDT kurulumundan sonra http://radrails.sourceforge.net/update/ adresinden RadRails için de aynı yüklemeyi yapıyoruz.
SVN sürümünde patlama-çatlama olabilir, bu nedenle sürekli güncel tutmak yararlıdır.
NetBeans’ın de yeni sürümünde (6.0) “Ruby” desteÄ?i vermesiyle daha da kızıÅ?acaÄ?a benzeyen Ruby Editörü savaÅ?larında Å?imdilik Eclipse tabanlı RadRails önde gibi dursa da NetBeans’in özellikleri & sunumları beni oldukça etkiledi. Netbeans’in “geliÅ?tirim sürümü”nü inceledim lakin henüz “kullanılabilir” bir mükemmeliyete ulaÅ?mamıÅ?. Bu nedenle aramızın soÄ?umaması için kendisini incelememe kararı aldım.
Ben inceleme yapana kadar buradan NetBeans, Eclipse (RadRails) ve IntelliJ Idea geliÅ?tirme ortamlarının Ruby destekleri hakkında fikir sahibi olabilir ayrıca karÅ?ılaÅ?tırmalarına bakabilirsiniz.
Ruby 1.8.6 & Rails 1.2.3 14/03/07
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







