Ruby (Ruby on Rails)

Ruby Bucak Semineri

Merhabalar,

Geçtiğimiz hafta sonu çok güzel bir organizasyona katıldık. Bu güzel anı bizlerle paylaştıkları için organizasyonu düzenleyen çok değerli Öğretim üyelerime ve katılımcılara çok teşekkür ederim. Burdur-Bucak’ta gerçekten çok güzel, organize ve istekli insanlarla karşılaştık. Umarım bu istekleri devamlı olur, eğitimlerini başarı ile tamamlar ve sektÖrde Önemli yerlere gelirler. Tüm ihtiyaçlarının kendi ellerinde olduğunu anladıklarını tahmin ediyorum.

Hüseyin GÖmleksizoğlu ile beraber çıktığımız bu yolculukta, Hüseyin’in bazı çekinceleri ve şüpheleri vardı, ama sorunsuz bir yolculuktan sonra Bucak’a vardır.

Merak edenler olabilir hemen anlatayım; İstanbul-Bucak arası, uçak ve otobüs macerası :)
İstanbul’dan 19:10’da kalkan Pegasus’a ait uçağımız saat 20:10’da Antalya havaalanına indi. Daha sonrasında Havaş’ın servisi ile Antalya’nın diğer ucunda bulunan otobüs terminaline gittik, vardığımızda saat 21:15 idi. İstanbul’dan yaptığımız telefon gÖrüşmelerinde 20:00’dan sonra Bucak’a gidemeyeceğimizi kesin bir dille sÖylemişlerdi. Ama benim gazımla beraber Hüseyin’de ikna olunca biz şansımızı denemeye karar vermiştik, terminale gittiğimizde, 2. sorduğumuz kişiden 18 ytl karşılığında saat 22:00 otobüsünde Bucak için bilet almıştık. Bu kadar kolay bulmamıza şaşırarak bileti hemen aldığımız için kendimize kızdık, hiç araştırmamıştık belki başka bir firmada 21:30 otobüsünde yer vardı :) neyse almıştık işte biletleri; saat 22:00’da otobüs kalktı ve saat 23:00’da Bucak’taydık.

Kısadan hisse durumuna indirecek olursak; tüm tur yetkililerinin veya otobüs işletmecilerinin o saatte gidemezsiniz dediği İstanbul – Bucak arasını uçak + otobüs ile 4 saat gibi bir sürede katettik :) mutluyuz, gururluyuz :)

Ruby’nin Yeni Sürümü

Merhabalar arkadaşlar,

Uzun süredir beklenen Ruby 1.8.6 sürümü nihayet duyuruldu. ruby-lang.org adresinden indirilebilir. Windows kullanıcıları için küçük bir not, bu yazı yazılırken henüz One-Click Installer güncellenmemişti, download esnasında dikkatli olunuz.

Gelen yeniliklere deyinecek olursak;

  • Artık Visual C++ 8 Sp1’de de Ruby’yi derleyebilirmişiz.
  • Date sınıfı güncellenmiş.
  • TK bağlayıcısında (bindings) geliştirmeler yapılmış.
  • Kernel ve Module sınıflarına reflection’a yÖnelik yeni methodlar eklenmiş.
    – Kernel#instance_variable_defined?
    – Module#class_variable_defined?
  • Thread işlemleri, yeni bir yÖntem kullanılarak, daha da hızlı hale getirilmiş.
  • Uzun süredir nokta bile eklenmeyen Webrick’de bazı geliştirmeler yapılmış.
  • Digest üzerine dosyalar üzerinde de işlem yapma yeteneği eklenmiş.
  • nkf de güncellenen sınıflar arasında yer almış.

Değişiklikler (Change Log) ve yenilikler ruby’nin resmi sitesinde de okunabilir.

Kolay gelsin :)

MapCache.rb – 2

Merhabalar arkadaşlar,

Uzun bir aradan sonra tekrar berebariz. Aranızda hiç evlilik hazırlıkları yapan var mı ? Var ise halimden anlayacaktır, bu adam neden yazı yazmaz, bu süre içerisinde ne yapar gibi sorular soruyor olabilirsiniz. Ama bu aralar herşey birbirleri ile sÖzleşmiş gibi ardı arkasına yoğunlaşıyor, yeni hareket alanları açılıyor..vs..vs. Bunların üzerine bir tutam, olmazsa olmaz, arkadaşlarımın Özellikle dostlarımın bu yoğunluğumdan şikayetçi olması eklenince, inanın tadından yenmez bir hal alıyor. Ama en çok şikayet eden benim ama duyan yok. Neyse her zamanki gibi, yoğunluk can sıkıntısından iyidir. SÖzleri ile bir Önceki MapCache.rb – 1 (Detayları Öğrenmek için lütfen tıklayın) adlı yazımızda başladığmız küçük yazı dizisini bitirelim.

Öncelikle bir Önceki yazımıza yorum yapan Hüseyin GÖmleksizoğlu’nun dediği gibi, MapCache uygulamamıza Threading ekleyelim ki, Http sunuculardan daha hızlı verileri alabilsin, çalışabilsin. Üstelik sizlere Threading ile ilgili gerçek hayat Örneği verebilmek ise bu işin artısı olsun.

Yazımıza başlamadan Önce bazı şeyleri belirtmem gerekiyor.
– Http sunucudan yaptığımız istek içerisinde yer alan v=w2.37 alanını v=w2.43 olarak değiştirmeliyiz. Muhtemelen bu bilgi version(sürüm) bilgisini taşıyor, bu nedenle bizim bu projeyi gerçekleştirdiğimiz tarihlerde 2.37 olan sürüm 2.43’e çıkmış. Kodları güncellemek gerekir.
– MapCache.v3.rb uygulamasını denemek için MapCache.v3.rb’nin bulunduğu klasÖrün içerisine sunucu_1, sunucu_2 ve sunucu_3 adlı klasÖrler açmalıyız. Bunun nedenini sizlere kodu verdikten sonra açıklayacağım.

$stdout.sync = true

require 'net/http'

proxy = nil
proxy_port = nil
port = 80

allThread = []

[1,2,3].each do |index|
	# Yeni bir Thread yaratılıyor, index -> ServerNo olarak
	# Thread-safe biçimde Thread içerisine aktarılıyor.
	thread = Thread.new(index) do |serverNo|
		httpObj = Net::HTTP.new("mt#{serverNo.to_s}.google.com", port, proxy, proxy_port)
		httpObj.start do |http|
			19000.upto(19125) do |x|
				12250.upto(12375) do |y|
					puts "X=#{x.to_s} Y=#{y.to_s}"
					resp = http.get("/mt?n=404&v=w2.43&x=#{x.to_s}&y=#{y.to_s}&zoom=2")
				   
					file_name = "sunucu_#{index}\\temp_#{x.to_s}_#{y.to_s}.png"
					open(file_name, "wb") { |file|
						file.write(resp.body)
					}
					puts "#{file_name} adlı dosya başarı ile yazıldı..!"
				end
			end
		end
	end
	# Yeni yaratılan Thread'in yÖnetilebilmesi için
	# allThread adlı diziye ekleniyor.
	allThread << thread
end
# Ana thread üzerinde, tüm Thread'lerin bitmesi için bekleniyor.
allThread.each { |thread| thread.join }

Programı çalıştırdığımızda 3 ayrı Http sunucusuna 3 farklı Thread kullanarak istek gÖndermeye başladığımızı gÖreceksiniz. Bu bizlere büyük Ölçüde performans kazandıracaktır. Peki nasıl kazandıracak ? Önceki MapCache sürümlerinde sadece bir Thread üzerinden 3 farklı sunucuya sırası ile erişip isteklerde bulunuyorduk, yani ben bir sunucudan veri alırken diğer sunucular işlem sırasının kendilerine gelmelerini bekliyorlardı, bu sürümde eklediğimiz Multi-Threading yapı ile artık bu bekleme sona erdi. BÖylece işlem hızımızı arttırmış olduk.

MapCache uygulamasının (elbetteki bu yazı dizisi için) son sürümü olan v4 için yapacak tek bir şey kaldı. Hüseyin arkadaşımızın bir Önceki yazıya yaptığı yorumda da belirttiği gibi sunuculardan verileri alırken problem yaşıyorduk, bu nedenle 3 farklı sunucudan veri almaya başladık ve bu verileri farklı klasÖrlere kayıt etmeyi başardık. Şimdi bize 3 farklı sunucudan gelen verileri yorumlayıp, kayıp verileri ayıklayan bir program bloğu daha gerekiyor. Ama bu programı melesef ben yazamıyorum. Umarım sizler yazıp bana gÖnderirsiniz. :) Elbetteki yazan kişinin adını ve notunu yayınlayacağım.

Kolay gelsin :)

MapCache.rb – 1

Merhaba arkadaşlar,

Bugün sizlerle eskişehirde yaptığımız seminerde yapmayı planladığım fakat seminer saatlerinin değişmesi neticesinde tamamlayamadığım sunumun konularından birisi olan MapCache adlı küçük uygulamayı sizlerle paylaşacağım.

– MapCache nedir ?
– MapCache, Hüseyin GÖmleksizoğlu‘nun “Nasıl yapsamda cep telefonumda varolan GPS uygulamasını internete (GPRS’e) bir dünya para vermeden (ücretsiz) kullansam ?” sorusu üzerine doğmuştur. MapCache uygulamasının ilk versiyonu bu şekilde Hüseyin arkadaşımız tarafından yazıldı (Kendisinin sÖylediğine gÖre kaynak olarak esiyo.net’i kullanmış :) ). Daha sonra, Hüseyin arkadaşımız uygulamayı bana ulaştırdı ve iyi olup olmadığı sordu, ben de birkaç değişiklik yapıp çok güzel olduğunu belirttim ve kendisinden seminerde kullanmak için izin istedim. Sağolsun izni verdi ve bu konuyu sizlerle paylaşma fırsatı buldum.

MapCache uygulaması Ruby ile uygulama yazımını çok güzel ve mantıklı biçimde işlediği için anlatımı oldukça basit fakat sizlerin daha rahat anlamabilmesi ve benim belli konulara daha çok ağırlık verebilmem için uygulamayı adım adım oluşturacağız.
Continue reading…

Ruby Eskişehir Semineri

Merhabalar,

Uzun süredir yazı yazmadım. Bu kadar sessiz kalmamın nedeni inanın tembellik değil. Tembel bir adam değilim (Bunu kendime uzun süredir sÖylüyorum, sanırım iyileşme gÖstermeye başladım.:) ). Tam aksine çok çalışkan bir ruh hali içerisindeyim. Hatta ve hatta arada sırada çalışacağım diye kendimi paraladığımı bile düşünüyorum ama hemen bu düşünce aklımdan uzaklaşıyor.. az bile çalışıyorum… (Bunu da kendime uzun süredir sÖylüyorum :) )

Şimdi koltukta yer alan karpuzları sıralayalım;
– Taşındım.. Artık beylikdüzünde oturuyorum.
– Evlilik hazırlıkları içerisindeyim, inşallah 5 mayısta evleneceğim.
– Geçen hafta sonu Eskişehir’de gerçekleşen bu etkinlikte Ruby hakkında bir konuşma yaptım.

Ehh tüm bunlar bu ay içerisinde başladı, bazıları bitti, bazıları devam ediyor. Durum bÖyle olunca pek yazı yazamadım. Sizlerden Özür dilerim ama arayı kapatmaya gayret edeceğim, bilginize..

Eskişehir hakkında birşeyler yazacak olursam, gerçekleşen seminer oldukça güzeldi. Hüseyin ile beraber gerçekleştirdiğimiz bu seminerde organizasyonu yapan arkadaşlar Önceden bizlere her birimizin 1,5 saatlik süresi olduğunu hatta ve hatta istersek uzatabileceğimizi belirtikten sonra, her ikimizinde 1,5 saat içerisinde bitirmesini istemek gibi gaddarca bir tutuma sahip olsa da seminer düzenleyicileri, bizler mutlu ayrıldık. Umarım seminerleri izlemeye gelen arkadaşlar da mutlu ayrılmıştır.

Fakat yiğidi Öldürelim hakkını verelim. Çok çok iyi insanlarla tanışma fırsatı bulduğum için organizasyonu yapan arkadaşlara teşekkür etmem gerekir, iyi ki bu şekilde bir organizasyon yapmışlar.

Yaptığım konuşmanın tam metni yok, fakat dÖkümanları ve kullandığım küçük kod parçalarını ilerleyen günlerde yavaş yavaş yayınlamak istiyorum. Şimdilik sizlere Eskişehir notları başlığı altında Örnekleri ve vakit darlığından sunamadığım sunumu vermek istiyorum.

İlerleyen günlerde bu dÖküman içerisinde yer alan bilgileri ve konuları daha direnlemesine inceleyeceğim.

Kolay gelsin :)

Ruby ile Reflection – 2

Merhabalar,

Bir Önceki Ruby ile Reflection adlı yazımda anlatmaya başladığım Reflection konusunu, bu yazı ile bitiriyoruz. Önceki yazımda Reflection‘ın tanımı yapmış, yazılımcıların neden kullanmak istediklerini felsefik anlamda incelemiştik. Hatta tüm bunlar yetmemiş bir de kapsamlı bir Örnek yapmıştım.

Bu yazıda biraz daha güncel hayat Örnekleri ile beraber Özellikle Rails’de bu işler nasıl yapılmış ona değineceğim. Daha doğrusu değinmeye çalışacağım.

İlk olarak Ruby on Rails üzerinde Model kavramı ile çalışmaya başladığınızda ilk veya ikinci Örnekte aşağıda yer alan kod satırını gÖrürsünüz. (Örnek; Agile Web Development With Rails’den alınmıştır.)
[ruby]
class Product < ActiveRecord::Base validates_presence_of :title, :description, :image_url end[/ruby] Bu Örnekte validates_presence_of methodu ile title, description ve image_url bilgilerinin boş olamayacağını belirtmiş oluyoruz. Kodun yazım şekli biraz garip olabilir, ilk zamanlar (Ruby ile Reflection’ı Öğrenmeden Önce) bana garip gelmişti :)

Şimdi bu yazım şekli de nereden çıktı diyeceksiniz, aslında çok basit; Ruby’de “:” işareti bir methodu veya değişkeni ifade etmek için kullanılır. Bu işaretle biz aslında o methodu veya değişkeni kullanmak istemediğimizi sadece ifade etmek istediğimizi belirtiyoruz. Eski dilde, tabir-i caiz ise adresini kullanıyoruz. Yani “:title” aslında “title” değişkenini ifade eder.
Continue reading…

Ruby ile Reflection

Merhabalar,

Bu yazımızda Ruby üzerinde, daha Önce yazmış olduğum Ruby ile Çalışma Zamanı ve nesneler aynı mı ? yazılarında az da olsa değindiğim fakat genel anlamı ile hiç ele almadığım Ruby ile Reflection konusunda yazmaya karar verdim.

Reflection tanım olarak, çalışma zamanında programda tanımlanmış nesnelere veya methodlara dinamik erişimi tarif eder.
Aşağı yukarı günümüzde tüm modern (hatta bazı klasik) programlama dilleri bu olguyu destekler. Ruby, çalışma ve tasarım zamanlarının birbirlerinden farklı olmaması nedeni ile Reflection olgusunu tüm yÖnleri ile destekler.

Günümüzde Reflection Özelliği üzerine kurulu Reflective Programming adlı yeni bir yazılım geliştirme felsefesi de bulunmaktadır.

En temel anlamda düşünürsek, bir yazılımcı olarak yazdığınız program üzerinde %100 kontrol sahibi olmak isteriz. Tasarım zamanında (yani programı yazarken) elimizde olan bu gücü, çalışma zamanında da kendi yazdığımız diğer yazılımlar sayesinde (veya aracılığı ile) korumak isteyebiliriz. Reflection, tam bu esnada kullanmamız gereken teknolojinin adıdır.
Continue reading…

Ruby ile GUI Toolkits (Tk)

Merhabalar,

Bugünkü yazımız ‘tk’ ile ilgili olacak. Aslında bu yazı ile beraber GUI Toolkits adlı yazı dizisinin sonuna gelmiş oluyoruz. Bu yazımda Tk’dan daha fazla, tüm kullanıcı grafik arabirimleri arasında karşılaştırmalar yapmak istiyorum. Öncelikle ‘Tk‘ konusunda bazı bilgileri sizlerle paylaşalım. Tüm Ruby dağıtımlarında, varsayılan olarak Ruby/Tk bağlayıcısı mevcuttur. Ama sadece bağlayıcı(bindings) yetmez, Windows kullanıcıları için Tk’nın binary kütüphanesi varsayılan olarak gelmez. Bu nedenle ActiveState‘e bağlı standart ActiveTcl ürünü ile bu kütüphaneyi ücretsiz elde edebilirsiniz. ‘Tk’ Windows, Linux ve Mac üzerinde sorunsuz çalışan bir kütüphanedir. Kendi gÖrüntü teması mevcuttur GNOME, Fox ve wxWidgets gibi sistemlerin gÖrüntü temaları Tk’dan daha güzel ve çeşitli olabilir. Ruby One-Click Installer ile beraber gelen Programming Ruby(The Pragmatic Programmer’s Guide) adlı kitapta pek çok güzel Örneklerle açıklanmış ve anlatılmıştır. İş bu nedenle (Ha..ha sanki resmi yazışma gibi oldu.. :p) herhangi bir Örnek vermeyeceğim. Aslına bakarsanız pek tavsiye ettiğim bir kütüphane değil kendileri, Tk yerine FxRuby, WxRuby veya Gtk’nın kullanılması çok daha verimli ve kolay olur gÖrüşündeyim. Özellikle Windows işletim sistemi için yapılacak basit uygulamalarda VisualuRuby(VRuby)‘nin kullanılmasını şiddetle tavsiye ederim.

Bu yazı dizisinin sonuçunu merak ediyorsanız, ‘diğer kütüphanelerle uğraşmak istemiyorum’ ve ‘bana adam gibi bir kütphane tavsiye et, iyisi ile kÖtüsü ile kullanmak istiyorum’ diyorsanız. Önceki yazılarımda bahsettiğim gibi WxRuby’den başlayabilirsiniz ;)

Kolay gelsin…

Ruby ile GUI Toolkits (Gtk)

Merhabalar,

Bu yazımızda konumuz GTK ile gÖrüntü arabirimleri oluşturmak. Öncelikle belirtmem gerekir ki, bu konu ile yazacağım yazıdan çok daha iyisi Pinguar tarafından seminer olarak verildi. Pdf’i buradan bilgisayarınıza yükleyebilir ve güzel güzel okuyabilirsiniz.
Aklınızdan şÖyle bir soru geçebilir; “be adam, Pinguar konu ile ilgili güzel bir yazı yazmış diyorsun, ee peki sen neden bu yazıyı yazıyorsun…?”.. geçti değil mi ? Benim de geçti. Bu sorunun cevabı ise aslında çok basit, Pinguar çok güzel bir seminer vermiş (Öyle duydum..) Ama pdf’in uzunluğu 28 sayfa kadar, eee durum bÖyle olunca, sizlere Gtk ile ilgili Ön bilgiler vermek ve küçük de olsa bir giriş yapmak bana kaldı. Üstelik Gtk’nın anlatılmadığı “Ruby ile GUI Toolkits” yazı dizisi düşünemiyorum doğrusu.

Hemen küçük Ön bilgiler ile konumuza bir giriş yapmaya çalışalım. Yazının yazıldığı sıralarda Ruby-Gtk2‘nin ‘0.16.0‘ sürümü duyrulmuştu. Bu proje isminden de anlaşılacağı gibi Ruby’nin yeni nesil GNOME 2.0 bağlayıcısıdır. Proje içerisinde iki farklı paket bulunmaktadır;

  • Bunlardan ilki ‘ruby-gtk2‘ paketi. Bu paket içerisinde sadece standart grafik arabirim işlemleri destekleyici sınıflar içeren bileşenler bulunur.
  • Diğer ise ‘ruby-gnome2-all‘ paketidir. Bu paket, standart olarak kullanılan ‘ruby-gtk2‘ paketi üzerine çok yÖnlü ve birçok durumu destekleyen büyük bir mimari içerir.

Kurulum konusuna gelirsek, Gtk+, sadece Linux, FreeBSD ve Microsoft Windows işletim sistemleri üzerinde çalışır. Linux ve FreeBSD kurulumları oldukça basittir. Bu adreste yer alan bilgilerden faydalanılarak rahatlıkla kurulumu gerçekleştirilebilir.
Continue reading…

Ruby ile GUI Toolkits (wxRuby)

Merhabalar,

Bu yazımızda Ruby ile GUI Toolkits başlattığımız yazı dizisine devam ediyoruz. Bugün WxRuby kütüphanesini inceleyeceğiz. WxRuby kütüphanesi oldukça gelişmiş olan wxWidgets kütüphanesi üzerine kurulu bir yapıdır. WxRuby Microsoft Windows, Mac OS X, Linux ve BSD üzerinde sorunsuzca çalışır. Kendisinin herhangi bir gÖrüntü teması yoktur. Hangi işletim sistemine yüklenirse, o işletim sisteminin gÖrüntü temasını kullanır. Hemen hemen tüm Ruby uygulamalarında olduğu gibi gem ile kurulumu oldukça basit ve kolaydır. Aynı zamanda Python bağlayıcısı da (wxPython) bulunan bu yapı, C++‘da yazılmış olan wxWidgets kütüphanesinden güçünü alır.
Windows, Linux ve Mac OS X için kurulumu; gem install wxruby2-preview ile gerçekleşir… Linux ve Mac OS X’de ‘Super User(sudo)‘ ile bu işlem yapılmalıdır.

Öncelikle wxWidgets kütüphanesinin gerçekten çok güçlü olduğu tekrar vurgulamakta fayda var. Bu bilgi ışığında WxRuby’nin Önceki sürümlerinin çok kÖtü olduğunu duymuş olabilirsiniz.. duymadıysanız şimdi duydunuz, gerçekten çok kÖtü idi. Bunun farkına varan sevgili yazılımcı kardeşlerimiz, wxRuby2’yi ortaya çıkardılar ve geliştirmelerini bu yapı üzerinde yapmaya başladılar. WxRuby2, şu anda oldukça iyi durumda, yazılım geliştirme, biraz sonra Örnekte de gÖreceğiniz gibi, VRuby’den zor :) fakat FxRuby’den kolay. WxRuby‘nin genel ağ adresinden daha fazla bilgiye ulaşabilirsiniz.
Continue reading…