Ruby (Ruby on Rails)

Ruby ile GUI Toolkits – 2 (Güncellendi)

Merhabalar arkadaşlar,

Bu yazımızda Ruby ile GUI Toolkits – 1 (VRuby) ile başlattığımız akımı devam ettiriyoruz. Geçen yazımızda konuya giriş yapmış daha sonra VRuby ile ilgili güzel bir Örnek yapmıştık. Bugün Fox isimli kütüphaneye değineceğiz. Fox kütüphanesinin Ruby (FxRuby), FxPy (Python), EiffelFox (Eiffel) dillerine başlayıcıları(bindings) bulunan ve pek çok işletim sisteminde çalışan bir uygulama olduğunu belirtmek gerekir. Yazılımların oluşturulması her ne kadar Windows’a benzemese de, sonuç yani gÖrünüm gerçekten Windows’a çok benziyor.. İyi mi, kÖtü mü, ben bilemem ama benziyor..?

FxRuby, form designer‘ı, dÖkümantasyonu ve kullanıcı kılavuzu bulunan, gerçekten güzel ve gelişmiş bir kütüphanedir. VRuby gibi değildir… Hız ve kolaylık acısından VRuby, FxRuby’i açık ara geride bırakır :). Fakat elbetteki FxRuby’nin birçok işletim sisteminde çalışması bir avantaj olarak kabul edilebilir.

Windows işletim sisteminde kurmak için, sadece “One-Click Ruby Installer” yeterli. Fakat bu yazının yazıldığı tarihlerde “One-Click Ruby Installer” içerisinde gelen FxRuby’nin 1.6.1 sürümünde bazı problemler mevcut. Herhangi bir FxRuby programı çalıştırdığınızda bir çok ‘warning’ ile karşılacaksınız. Bu sorunu gidermek için ‘gem update –include-dependencies fxruby‘ komutunu uygulayarak FxRuby kütüphanesini (şu anki sürümü)1.6.5’e güncellenmesi gerekir.

Linux için, “gem” kullanarak FxRuby’yi kurmak yeterli. Kurulumu basit olan kütüphaneleri kim sevmez :).
Continue reading…

Ruby ile GUI Toolkits – 1

Merhabalar,

Bu yazımızda Ruby ile yazdığımız programlara bir arabirim eklemek istersek ne gibi alternatifler var, avantajları ne, dezavantajları ne gibi sorulara cevap arayacağız. Umarım buluruz ;)
Ruby Özgür ve açık kaynak kodlu olmasından dolayı, gÖrüntü arabirimi küyüphanesinde birkaç alternatif mevcut. Bunlardan başlıcaları; Tk, Ruby/GTK, Ruby/Qt, wxRuby, FxRuby/Fox ve VRuby şeklinde sıralanabilir.

Hepsi ile birer tane Örnek yapmak istiyorum, ama bu yazıda sadece bir tane yapabilirim ;) Ben derim ki listenin en kolayından başlayalım,
VRuby
Sadece Windows işletim sistemi için bir kütüphanedir. Windows için Ruby kurulumu olan One-Click Ruby Installer ile beraber gelir. Herhangi bir şekilde ekstra kurulum yapmaya gerek yoktur. Proje ile ilgili dÖkümantasyon çok kÖtü olmamasına rağmen oldukça azdır. Fakat bu sayfa başlangıç sayfası olarak kullanılabilir. Kütüphaneyi yapan kişiler Visual Basic kadar basit olması gerektiğine karar vermiş ve bu yÖndede çok güzel ve Önemli adımlar atmışlardır. Kütüphanenin kolay olan kullanımı ve ‘One-Click Ruby Installer’ ile birlikte gelmesi, Ruby programlarının Windows versiyonları için çok iyi bir avantaj olarak gÖze çarpar. Form Designer‘ı ve CHM dÖkümantasyonu ve bir çok Örneği mevcut olan VRuby, Windows için gerçekten çok güçlü bir alternatiftir.
Continue reading…

Ruby ile Thread İşlemleri

Merhabalar,

Şu zamana kadar yazdığım yazılarda Ruby ile ilgili pek çok konuya değindik, bu konular arasında POP3 ve SMTP, HTTP ve FTP, Dosya İşlemleri, Çalışma zamanı, Module yapısı, Hata yakalama, Resim işlemleri, ODBC veri tabanı bağlantısı, Ruby nesnelerinin karşılaştırılması gibi konular mevcut. Aslında tüm bu yazılardan küçük bir kitap bile çıkabilirdi ama elbetteki yazım dilinin tekrar bir elden geçirilmesi gerekli. Her neyse, şu zamana kadar yazdığım yazılar umarım sizlerin de işine yaramıştır :). Benim yaradı valla, ben Ruby ile ilgili bazı konularda kendi bloğuma bakıyorum :).

SÖzü uzatmadan başlıktan da anlaşılacağı gibi yazımızın konusuna yani Thread’lere(Türkçe’sini tam kestiremedim, hoşgÖrün lütfen) geçelim. Şimdi eğer bir yazılımcıysanız, daha Önceden Multi-Thread uygulamalar ile uğraşmıssanız, kolay bir konu olmadığını bilirsiniz. Gerçekten Özellikle zor zamanlarda çok uyuz bir konu olabilir. Tüm bunlardan Öte, yapımı ve tasarlanması çok pahalıya patladığı için, yazılımcılar tarafından pek tercih de edilmez. Ama işler Ruby’de biraz daha farklı, çünkü Ruby’de bu işlemler oldukça basit ve etkileyici :).
Continue reading…

Ruby ile POP3 ve SMTP

Merhabalar,

Önceki yazımızda Ruby ile FTP ve HTTP‘den bahsetmiş ve bu konuda birkaç Örnek yapmıştık. Bununla beraber Ruby’nin ağ yetenekleri içerisinde POP3, SMTP gibi elektronik posta ile ilgili yüksek seviyeli sınıfların varlığından da bahsetmiştik. Başlıktan da anlaşılacağı gibi, bu yazımızda sizlerle beraber POP3 ve SMTP konularına değineceğiz. Kendimize güzel ve popüler birkaç sorun bulup bu sorunları çÖzmeye çalışacağız.

Öncelikle POP3 protokolü ile herhangi bir elektronik mail sunucusu ile haberleşme konusunu inceleyelim, sonrasında SMTP protokolü ile ilgili Örneğimize geçiş yaparız.

POP3 protokolü ile ilgili popüler bir sorun olarak; WordPress‘i Örnek verebiliriz. Şimdi “ne alakası var kardeşim” diyeceksiniz, demeyin :) biraz sabredin.. :) WordPress’in güzel bir yeteneği var, belirli bir e-posta adresini kontrol edebiliyor, eğer bu e-posta adresine bir e-posta gelmiş ise, bu e-postanın içeriğini bir yazı olarak yayımlıyor… :) güzel bir Özellik değil mi, peki biz bunu Ruby’de nasıl yaparız ? İşte asıl soru bu.
Continue reading…

Ruby ile FTP ve HTTP İşlemleri

Merhabalar,

Bugün yazımızda Ruby’nin ağ(network) ve genel ağ(web) kütüphanelerini inceleyeceğiz. Bu kütüphaneleri, mail gÖndermek, ftp ile başka bir makinaya dosya kaydetmek, herhangi bir başka web sitesininden bir sayfayı okumak veya düşük seviyeli (socket bazlı) işlemler yapmak için kullanabiliriz.

Bu yazımda, tabii sizlerde izin verirseniz, düşük seviyeli bağlantılar (Socket, BasicSocket, IPSocket, TCPSocket, SOCKSSocket.. vb.) yerine, yüksek seviyeli bağlantılardan HTTP ve FTP’yi incelemek istiyorum. Özellikle bu tür yüksek seviyeli bağlantılar için Ruby’nin gerçekten güçlü silahları vardır, bu silahlar ile pek çok uygulamayı zorlanmaksızın yazabilir, pek çok problemini kolayca çÖzebilirsiniz.
Continue reading…

Ruby ile Dosya İşlemleri

Merhabalar,

Bugün ruby’de dosya işlemleri ve ‘standart input/output’ olarak bildiğimiz konuyu işleyeceğiz. Öncelikle çok basit bir Örnek verelim, ekrandan isim ve yaş bilgilerini alarak tekrar ekrana yazalım. Ve bunu yaparken tüm bu ‘input/output’ işlemlerine Örnek vermiş olalım.
[ruby]
$stdout.sync = true # İşlemleri yaparken buffer kullanmaz, verilen işlemi anında yapar.

p “Lütfen adınızı giriniz: ”
name = gets.chomp # gets ile kullanicidan herhangi bir string (get’s’) bilgisi alınır.
print “Lütfen yaşınızı giriniz: ”
age = gets.chomp.to_i # chomp işlemi ile girilen son karakter çıkarılır, bÖylece enter karakteri işleme alınmaz.
puts “Lütfen kendiniz hakkında birşeyler yazın: ”
descr = readline.chomp # Birkaç satır bilgi almak için kullanılır(mış).

# C dilinde kullanılan bir yazım tekneği
printf “Merhaba %s, %i biraz yaşlanmışsınız.\n%s\n”, name, age, descr
[/ruby]

Bir sonraki aşamada Ruby’nin dosyalar üzerindeki işlemlerine değinelim. Öncelikle ruby’nin dünyasında herşeyin nesne olduğunu unutmayalım. Eğer bir dosya açacaksak, bu kesinlikle bir sınıf ile eşleşmeli ve işlemleri bu sınıf üzerinden yapmalıyız.
Continue reading…

Ruby’nin Çalışma Zamanı

Merhabalar,

Bugünkü konumuz biraz daha ruby on rails’e yaklaşmak, ruby’nin dosyalar, çalışma ve tasarım zamanları ile ilgili bir kaç bilgi vermek olacak.

Öncelikle bir konudan bahsetmek istiyorum, diğer birçok dilde çalışma zamanı ile tasarım zamanı birbirinden farklı ve ayrı kavramlardır. Örneğin C#’da programınızın derlenmesi ve çalışması ayrı zamanlarda gerçekleşir. Fakat Ruby’de bu kavram arasında herhangi bir fark yoktur. Ruby’de tasarım da, çalışma da aynı temellere dayanır, ikisi arasında hiçbir fark yoktur. Evet çok sert bir kavram ama sanırım bir Örnek yaptıktan sonra daha rahat anlaşılacaktır.
Continue reading…

Ruby’de Modül Yapısı – 2

Merhabalar bir Önceki yazımızda module kavramına değinmiş ve basit anlamda kullanımını işlemiş be bu yazımızda da çok güzel bir mudule mixin Örneği olduğunu sÖylemiştik. Şimdiki yazımızda Module kavramını daha da derinden işleyeceğiz.

Öncelikle module ile class arasındaki farktan bahsedelim. Evet fark diyorum çünkü sadece bir-iki küçük fark var. Elbette temelde birbirinden çok farklı yapılar ama, son kullanıcı yani bizler için aralarındaki fark at ile deve değil.
– class’ların anlık kopyaları olabilir, module’lerin olamaz.
– class’ların içerisinde module’ler olamaz, module’lerin içerisinde class’lar olabilir.
– class’lar ve içlerindeki Öğeler protected, private gibi erişim denetleyici Özelliklere sahip olabilirler, module’ler sahip olamazlar, tüm Öğeleri public’tir.
Continue reading…

Ruby Modülleri (Ruby Modules)

Merhabalar,

Bugün Ruby’nin çok güçlü olduğu bir konuya değineceğim, modüller. Özellikle çok büyük uygulamalar yazarken, bazı durumlarda ‘Object Oriented’ tasarım yaklaşımının sınırlarını zorlamak gerekir. Günümüzdeki pek çok programlama dilinde olduğu gibi Ruby’nin tasarımcıları da ‘multiple inheritance’ kavramını desteklememiştir. Fakat bu Özelliğin bulunmaması elbetteki bazı kısıtlamaları beraberinde getirmiştir. Bu engelleri ortandan kaldırmak için modüllerin kullanımı ve Özellikleri arttırmış ve sonuçta ortaya çok güzel bir yapı ortaya çıkmıştır.

Aslında ‘module’ kavramı Ruby dili içerisinde pek çok alanda kullanılabilir. Bir modül ‘static’ bir sınıf gibi davranabileceği gibi, bir ‘namespace’ gibi de kullanılabilir. Tüm bu kullanım alanlarına ek olarak sınıfların genişletilmesi için kullanılır ki, bu gerçekten çok güzel bir Özelliktir.
Continue reading…