Ruby on Rails projelerinde özelikle development aşamasında sürekli yaptığımız işlem rails s ile http://localhost:3000 üzerinde uygulamamızı çalıştırmaktır. Eğer birden fazla projemiz varsa ve bunları aynı anda çalıştırmak istiyorsak bu bize biraz külfetli gelir. Her seferinde çalışan projeyi sonlandır, diğer projeye geç ve rails s ile tekrar çalıştır gibi keyifsiz bir durum ile karşı karşıya kalırız. Eğer development ortamında birden fazla proje ile çalışmak istiyorsanız sizi, rails’ in yaratıcılarının yaptığı hafif bir web server ile tanıştırmak istiyorum. Server’ ın adı Pow ve en önemli tarafı hiç bir konfigürasyon yapmadan rails uygulamalarını çalıştırabiliyor olmamız. Kurulum dahil olmak üzere sadece iki üç satır ile bu işleme geçebiliriz.
Mac OS X 10.6 ve üzeri sistemlerde terminal’ i açıp aşağıdaki komutu yazıyoruz. Kurulum bu kadar basit.
$ curl get.pow.cx |sh
Eğer kaynak kodlarını görmeden kurmam! Kurulumu kaynak kodlarından yapacağım derseniz o zaman terminal’ de aşağıdaki komutlar ile bu işlemi gerçekleştirebilirsiniz.
Pow’ u sistemden kaldırmak için de $ curl get.pow.cx/uninstall.sh | sh komutunu kullanıyoruz.
Kullanmak için de pow’ u kurduğumuz klasöre giriyoruz. Çalıştırmayı istediğimiz rails projele klasörlerini link ediyoruz.
$ cd ~/.pow
$ ln-s/Users/murat/Sites/muratguzel
Yukarıdaki komut ile muratguzel ismindeki projeyi klasör içerisinde link ediyoruz. Artık http://muratguzel.dev/ şeklinde projemize istediğimiz zaman ulaşabiliriz. Bunun gibi birden fazla projeyi de link ederek aynı anda çalıştırmamız mümkün.
Tabiki burada şöyle bir sorun ortaya çıkıyor. Bazen rails s yazdığımızda log/development.log dosyasını sürekli okumak isteyebiliyoruz. Eğer pow kullanırsak bu otomatik olarak çalışmayacaktır. Bu yüzden proje klasörümüze girip aşağıdaki komut ile log akışını sağlayabiliriz.
$ tail -f log/development.log
Ayrıca POW ile kullanabileceğimiz hoş araçlar da var. Örneğin powder pow server’ ın yönetimini yapmamızı sağlayan güzel bir araç.
Pow ile kullanmaktan keyif aldığım hoş bir uygulama ise showoff. Showoff ile localhost’ da çalıştığınız bir rails uygulmasını web üzerinden paylaşabilirsiniz. http://uygulamaadi.kullaniciadiniz.showoff.io/ gibi bir adresten uygulamanızı herkez görebilir. Amaç yaptığınız projeyi release edip, production moda almak değil, development aşamasını diğer kullanıcılarla paylaşmanızdır. Müşterilerinize sunum yapmanın en tatlı yolunun bu olduğunu düşünüyorum. Çünkü Rails camiasında bir projeyi alpha veya beta aşamasını yayına açmak için genelde heroku kullanıyoruz ancak bazı kullandığınız gem’ lerin heroku ile uyumlu çalışması için yapılması gereken işlemler olabiliyor. Bu yüzden showoff bu açıdan en temiz yöntem. Showoff kısaca web ile sizin local’ deki projeniz için bir tunnel yaratıyor. Akıllarda bir soru işareti olmaması için oldukça güvenli olduğunu da belirtelim. Ayrıca beleş olmadığını da söyleyelim Gerçi açacağınız tunnel 5 dk. süreyle aktif olacaksa herhangi bir ücret yok. Günlüğü $1 aylığı da 5$.
Showoff.io kullanmak için
$ gem install showoff-io
Kurulum yapıldıktan sonra ücretsiz kullanmak için (5 dk. süreyle)
$ show dev
komutunu çalıştırıyoruz. Bize bir adres veriyor bena verilen adres şu şekilde http://r12t.showoff.io/ İşte bu adrese subdomain olarak pow altına link ettiğiniz proje adlarını verebilirsiniz. Örneğin http://muratguzel.r12t.showoff.io/ adresi ile muratguzel isimli projenize herkes ulaşabilir. Tabiki 5 dk
Eğer size de form yaratmak, kodlamak ve tasarımını yapmak sıkıcı geliyorsa, formtastic’ i incelemenizi öneririm. Bu yazımda formtastic’ in kurulumu ve kullanımı hakkında paylaşacağım. Formtastic Justin French tarafından yapılmış bir ruby on rails gem’ i dir. Formtastic hakkında daha detaylı bilgi için https://github.com/justinfrench/formtastic adresine bakabilirsiniz.
Kurulum için öncelikle Rails projenizde Gemfile içerisinde
gem 'formtastic'
eklemesini yapıyoruz. Ardından bundle install çalıştırıyor ve aşağıdaki gibi kurulumu gerçekleştiriyoruz.
Kullanımına gelirsek aslında her zaman kullandığım rails’ in form helper’ ından pek te bir farkı yok. Normal olarak kullandığımız form_for helper’ ı nın başına semantic eklememiz (semantic_form_for) yeterli olacaktır.
<%= semantic_form_for @carsdo|f|%>
Eğer routes.rb içerisinde resources kullanmıyorsak (ki kullanmalıyız) form action’ ı da verebiliriz.
Model içinde olan tüm attribute ları almak form içerisine almak istediğimizde ve buttonları da otomatik olarak oluştursun dersek kodumuz aşağıdaki gibi olacaktır.
<%= semantic_form_for @carsdo|f|%><%= f.inputs# tüm fieldları tipine göre getirecektir. %><%= f.buttons%><%end%>
Ben bu şekilde kullanımın yanlış olduğunu düşünenlerdenim. Esnek bir uygulama istiyorsak bile tüm modeli forma almak çok yanlış olacaktır. Bunun için aşağıdaki şekilde kullanmak daha akılcıldır.
Buraya kadar oldukça şık ilerledik. Ancak modelimiz içerisinde date tipinde bir attribute varsa o zaman yapmamız gereken bir iki işlem var. Default olarak kullandığımızda date tipini formtastic anlıyor ve bizim için tarih alınacak 3 select ekliyor.
Ay isiminlerinin ingilizce olduğunu göreceksiniz. Bunu değiştirmek için config -> locales -> en.yml dosyası içerisine aşağıdaki kodları eklememiz gerekiyor.
date:
month_names: [~, Ocak, Şubat, Mart, Nisan, Mayıs, Haziran, Temmuz, Ağustos, Eylül, Ekim, Kasım, Aralık]
abbr_month_names: [~, Oca, Şub, Mar, Nis, May, Haz, Tem, Ağu, Eyl, Eki, Kas, Ara]
Select tipinde değerler için de :collection methodunu kullanabiliriz.
Basit anlamda oldukça etkin kullanılabilecek bir gem. Şu anda rails camiasında da oldukça tutulmaktadır. Formtastic’ i kullanmak model ilişkilerinde de büyük kolaylık sağlıyor.
Bazı adamlar vardır çok takdir edilir. Bazı adamlar vardır başarılı olur. Bazı adamlar vardır dünya için çok faydalı şeyler yapar. Bazı adamlar vardır hemen hemen herkesin hayatına bir şekilde girmiştir. Steve Jobs işte böyle bir adamdı. İsterseniz Microsoft kullanıcısı olun, isterseniz MAC kullanıcısı olun hiç farketmez. Şu anda kullandığımız teknolojinin altında sayısız imzası olan adamlardan biridir. Türkiye’ de biraz daha geç tanınan biri oldu. Bilgisayarlarla haşır neşir olmayan kimseler, izledikleri pixar filmlerinden bile ismini pek duymadı.
Kişisel olarak ta Steve Jobs ile ilgili iki kitap okudum. Hayatını biraz daha net öğrendikten sonra daha çok sevmeye başladım. Evlatlık olarak bir aile verilmiş, üniversiteyi bitirememiş, çocukluk ve gençlik yıllarını maddi sıkıntılarla geçirmiş olması ve sonradan yakaladığı başarısı herkesi etkileyecek nitelikte.
Rails üzerinden sql server’ a bağlanmak diğerlerine göre (sqlite3, mysql, oracle) hafif zor olsa da yine de oldukça kolaydır. Öncelikle sisteminize kurmanız gereken bazı eklentiler vardır. Özellikle FreeTDS kurulması gerekiyor. FreeTDS sizin mssql ile bağlantınızda protokol görevi gören tds’ in open source hali. PHP üzerinden sqlserver’ a native olarak bağlanmak istediğinizde de kullanacağınız bir arabirim.
Bu tarz bir ihtiyacın doğması da şu şekilde oldu. Yaptığım bir proje mysql database’ i kullanıyor. İş mantığı çerçevesinde bazı tablolara veri yazdığım zaman aynı kayıt uzaktaki bir sqlserver 2008′ e de veri eklemesi gerekiyor. Bu sebeple rails 3.1.0 üzerinde sql server bağlantısı yapıp, sql cümlelerini execute etmem gerekti.
Kullandığım işletim sistemi Mac OS X Lion ve verdiğim kurulum örnekleri de mac için olacaktır. İlk olarak homebrew’ u kuruyoruz. Bunun için aşağıdaki kodu kopyalayıp, terminal window’ a yapıştırmanız yeterli olacaktır.
İlgili yerlere kendi connection bilgilerinizi yazdığınızda artık projemiz sql server için hazır hale geliyor. Eğer amacınız tüm proje içerisinde veritabanı olarak sql server kullanmaksa ( ki bunu yapmayın:) ) o zaman bu kadar şey işinizi çözecektir. Ancak amacınız ek bir veritabanı olması ise ve sadece belli modellere mssql bağlantısı yapacaksanız o zaman oluşturacağınız model aşağıdaki gibi olmalıdır.
class Mssql <ActiveRecord::Base
establish_connection (ActiveRecord::Base.configurations["mssql_database"])self.abstract_class = trueend
Böylece Microsoft Sql Server’ a bir sql cümlesi göndermek istediğinizde aşağıdaki gibi modelimizi kullanabiliriz.
Kimileri çok sessiz çalışır, kimileri de müzik dinlemeden çalışamaz. Eğer siz de benim gibi ikinci gruptaysanız önerilerimi dikkate alın. Öncelikle jazz, fusion ve rock müzikten hoşlandığımı belirteyim. Fakat çalışırken slap solo atan bir bass, double time giden bir davul veya groove’ un dibine vurmuş bir gitar rif dikkatimi dağıtabiliyor. Bu yüzden son zamanlarda çalışırken iki favori paul’ um var.
Paul Carrack
Eğer yapacağım iş rutin ve senelerdir yaptığım bir iş ise tercihim paul carrack oluyor. Youtube üzerindeki favori playlist‘ im.
Paul Simon
Yaptığım yazılım biraz daha kastırıyorsa, en güzel seçenek Paul Simon’ dur. Otostopçunun galaksi rehberini yazan merhum Douglas Adams da kitabını yazarken sürekli Paul Simon dinlermiş. Gerçekten iyi geliyor. Favori parçam ve albümüm Hearts and Bones.
Bu sezon sanırım Peter Bishop nerede diye merak edeceğiz ve bunu çözmeye çalışacağız. Haydi şimdiden herkese hayırlı traşlar. Daha 15, 20 sn. promolar olmasına rağmen millet senaryoları ve olası tahminleri çizmeye başlamış. Aslında ben bu fringe olayına sonradan dahil olanlardanım. İlk sezon pilot bölümü 3, 4 kez izlemiş ve beğenmemiştim. Israrla devam edip, sabredip, izleyip bir iki bölüm devirdikten sonra bağımlılık başladı. Şöyle dışarıdan bakıyorum da aslında hiçbir numarası da yok. J.J. Abrams abimiz yaptı diye takılıyoruz. 4. sezon bakalım nasıl olacak. Bu cuma Amerika’ da yayınlanıyor ve cumartesi biz izleriz. Umarım klasik fringe sezonlarından biri (sezon yarısında kadar baygın bölümler ve sonradan alevlenen konu değişimleri vs.) daha olmaz.
Promolardan bir bukle sunmadan da geçmeyelim. Bu yazıyı yazdığım sırada da fring rsmi twitter hesabından tesadüfen (ya da paralel evrenin bir ilgili olabilir) Fringe’ in 5. promosu yayınlandı diye tweet atıldı. Unutmadan …. Eğer teaser’ lardan gördüğümüz gibi görüntüler sürekli titreyecekse ayvayı sağlam yedik.
Küçükken hastasıydım. Gargameli ve kedisini bile severdim. Tesadüf oldu ki kızımı ilk kez sinemaya götürdüm ve bu da şirinler oldu. Eğer ki onu götürmek durumunda kalmasaydım sanırım gitmezdim.
Filme gelecek olursak aslında oldukça başarısız bir film olmuş. Konu namına hiç birşey yok. Eskinden 15 – 20 dk. şirinler bile konu olarak daha doyurucu olurdu. Ancak şirinleri tekrar görmek ve o meşhur soundtrack’ i tekrar dinlemek filmin konusunu unutturuyor. Türkçe seslendirmeleri de gayet başarılı. Hala gösterimdeyken vakit kaybetmeden gidin derim.
Bu yazıda ruby üzerinde array ve list kullanımından bahsedeceğim. Kanımca veri yapıları arasında en önemlisi dizilerdir. Ruby üzerinde dizi kullanımları oldukça basit ve etkindir. Yine de array kullanımı açısından PHP’ yi kıskandığımı da söylemem lazım. Ancak yine de PHP’ deki kadar olmasa da Ruby üzerinde de çok keyifli şekilde dizilerle çalışabilirsiniz. Önce dizilerin nasıl yaratıldığına bakalım. 5 elementli ve her elementi integer olan bir dizi yaratacağız ve üzerinde verilerle ilgili basit işlemler yapacağız. Aşağıda vermiş olduğum örnekler “# =>” bölümü ekran çıktısında olabilecek değerlerdir. puts kullandığımız zaman normalde satır satır değerleri almamız gerekiyor ama ben örneklerin çıktıları anlaşılsın diye tek satır olarak gösterdim.
x = [1,2,3,4,5]puts x[0]puts x[1]# 2 numaralı index' in değerini 10 arttıralım ve ekrana basalım.puts x[2]+= 10puts x[2]#=> 13# 0 numaralı index içerisindeki integer olan değeri string ile değiştirelim ve ekrana basalımputs x[0] = "String "*3# tüm diziyi ekrana basalımputs x #=> ["String String String, 2, 13, 4, 5]
Şimdiki örneğimizde boş bir array yaratalım ve içerisine yeni elementler ekleyelim. Yeni element eklerken < < operatöründen faydalanacağız. Bu operatör ile push yöntemini çalıştırmış oluyoruz. Aynı işlemi x.push(“Ruby”) şeklinde de yapabiliriz. Oluşturduğumuz diziden elementleri pop yöntemi ile aldığımıza da dikkat edin. Burada önemli olan nokta pop ile aldığımız değeri ekrana bastıktan sonra array’ den de ilgili elementin siliniyor olmasıdır.
x = []
x <<"Murat"
x <<"Ruby"
x <<"Rails"
x <<"Güzel"puts x.length#=> 4puts x #=> ["Murat","Ruby", "Rails", "Güzel"]puts x.popputs x.popputs x.length# => 2
Dizi işlemlerinde sık kullanacağımız fonksiyonlardan birisi de join dir. Join ile tüm array içerisindeki elemntleri yan yana yazdırabiliriz. Ayrıce vereceğimiz parametre ile istediğimiz formatta da listeleyebiliriz. Örneğin
Array içerisindeki son ve ilk elemente ulaşmak için first ve last fonksiyonlarını kullanabiliriz.
x = [1,9,3,4,6,423,2,165,15,45,8]puts x.last#=> 8puts x.first#=> 1
Dizi içerisindeki bir elementi aradığımız zaman include? fonksiyonunu kullanabiliriz.
x = ["Sarı","Mavi,"Kırmızı","Mor"]
puts "Sarı rengi mevcut" if x.include? "Sarı"
puts "Yeşil rengi yok" unless x.include? "Yeşil"
Diziyi sıralı bir dizi haline getirmek için sort fonksiyonunu kullanıyoruz. Sıralı olmayan rastgele bir dizi almak istediğimiz zaman shuffle fonksiyonunu kullanabiliriz.
Diziden istediğimiz kadar eleman alıp yeni bir dizi olarak kullanmak için take fonksiyonunu kullanıyoruz. Belirli bir karar yapısına göre eleman almak için de take_while fonksiyonunu kullanabiliriz. Gerçek uygulamalarda oldukça işe yarayan bir fonksiyondur. Sıklıkla kullanabileceğimiz bir başka fonksiyonda uniq’ dir.
x = [8,1,69,254,2,0]# orjinal dizi
x.take2# => [8, 1]
x.take_while{|z| z<100}# => [8, 1, 69]
x <<2
x <<0
x <<2puts x # => [8, 1, 69, 254, 2, 0, 2, 0, 2]puts x.uniq# => [8, 1, 69, 254, 2, 0]
Text ve Strings işlemleri bir programlama için can alıcı şekilde önemlidir. Bu konuda Ruby kendi dil yapısı nedeniyle çok sade ve temiz bir kod dizimine sahiptir. Özellikle tüm programcıların sytnax’ ın dan iğrendiği ve korktuğu regular expression söz dizimlerini de oldukça temiz bir şekilde kullanmamızı sağlar.
puts “Merhaba Dünya!” yazdığımız zaman otomatik olarak string oluşturmuş ve bunu ekrana basmış oluyoruz. Hangi class’ a sahip olduğumuzu görmek için console’ a şu şekilde kodu yazalım ve görelim
puts"Merhaba Dünya!".class
Yukarıdaki kodu yazdığımız zaman ekranda String yazılı olduğunu göreceğiz. Buradan anlaşılacağı üzere bir string yarattığımız zaman ille de bunu bir değişkene atmak zorunda değiliz. String’ i direk yazdığımız zaman String class’ larının methodlarına ulaşabilir ve çalıştırabiliriz. Örneğin “Merhaba Dünya!” string’ i içerisinde kaç karakter olduğunu ekrana basalım.
puts"Merhaba Dünya!".length
Bir char’ ın ASCII değerini almak da son derece basit. ?x bize x’ in ascii değerini vermektedir.
puts ?x
puts 120.chr
String işlemlerinde çoğu zaman kodun okunmasını zorlayan string’ leri birleştirmektir. Bununla ilgili olarak c# da çok basit bir kod örneği vermek istiyorum.
int x=10;int y=20;
Console.Writeline(x.ToString()+" + "+ y.ToString()+" = "((x+y)).ToString());
Ruby’ de bu işlemi yapmak istersek,
x = 10
y = 20puts"#{x} + #{y} = #{x + y}"
Başka bir örnek daha verelim. C# altında “merhaba, nasılsınız” diyelim ve bir de ruby altındaki kod yapısına bakalım.
string adi ="Murat Güzel";
Console.WriteLine("Merhaba "+ adi +", nasılsınız ?");
Ruby altında
adi = "Murat Güzel"puts"Merhaba #{adi}, nasılsınız ?"
Kontrollerin ve mantığın olmadığı programlar sadece hesap makineleri gibidir.
Bu yazımda Ruby üzerinde karar yapılarından bahsedeceğim. Ruby dili kod yapısı olarak ingilizce gibi bir dil olduğunu ve yazımının son derece keyifli olduğunu da söylemem gerekiyor.
IF Kalıpları
c# ile şöyle bir kod yazalım. Eğer 18 yaşından küçük bir değer varsa ekrana “Çok gençsiniz, tadını çıkarın!” yazdıralım.
int yas =10;if(yas>18)
Console.WriteLine("Çok gençsiniz, tadını çıkarın!");
Evet yukarıdaki kodu çalıştırırsanız herhangi bir yanıt alamayacaksınız. Çünkü yas 12 den büyük değildir. Bunun için şöyle bir kod yazabiliriz if yerine unless kullanıyoruz.
x > y ( Büyüktür )
x < y ( Küçüktür )
x == y ( Eşittir )
x >= y ( Büyüktür veya Eşittir )
x < = y ( Küçüktür veya Eşittir )
x <=> y ( Eğer x ve y eşitse 0 döndürür, x büyük ise 1 döndürür ve y büyük ise -1 döndürür )
x != y ( Eşit değildir )
If Else kalıbı diğer dillerden alışkın olduğumuz gibi
x=1if x >2puts"x 2' den büyüktür"elsif x < = 2and x!=0puts"x' in degeri 1' dir"elseputs"Numarayı tahmin edemiyorum :)"end
Benzer karar yapısını unless ile uygularsak;
x=1unless x>2puts"x degeri 2' den küçüktür."elseputs"x değeri 2' den büyüktür."end
Basit İterasyonlar
Ruby' de herşey bir objedir. Bunun sağlamış olduğu bir avantaj ile aşağıdaki gibi bir döngü yapabiliriz.
10.timesdoputs"murat "end
Yukarıdaki kodu çalıştırdığınızda göreceksiniz. Ekranda 10 defa murat yazıyor. do ve end anahtar kelimelerini kaldırarak aşağıdaki gibi de yazabiliriz.