10 Ekim 2013 Perşembe

Temel Kavramlar - Ruby'de Array & Hash

Ruby'de Array kullanimi bazi kucuk nuanslari anladiktan sonra daha kolay ve kullanisli.

Oldukca geniz bir yelpazedeki array fonksiyonlari sayesinde mantigini anlayinca elinizde ne denli guclu bir yapi oldugunu kavrayabiliyorsunuz.

Array  (Dizi)

Ruby'de degiskenleri .NET de oldugu gibi onceden tanimlamak gerekmiyor. ilk aldiklari degere gore otomatik olarak tip atamasi yapiliyor. Dolayisiyla Array icin de onden bir tanimlama yapmak gerekmiyor.

x=[]

bu kadar

daha sonra icine istediginiz bilgileri farkli sekillerde koyabiliyorsunuz. Mesela kurek (shovel)  operatoru yani (<<) kullanarak
x << "word" 
veya
x.push("word") 
veya
x.unshift("word") ile


Simdi sadece ornekler verip aciklamayi uzun uzun yapana kadar ne yaptiklarini karsilarina yazarak kisace anlatmaya calisayim.

x=["a1", "a2", "a3"]
puts x.join(',')
-----------------------------------> a1, a2, a3

"this is a test".scan(/\w/).join('.)
----------------------------------> t,h,i,s,i,s,a,t,e,s,t

peki bu satir icin biraz konusalim. bunu benim de anlamam zor oldu. cunku komutlari ard arda baglayarak calistirdik.
parcalarsak belki biraz anlasilir. ama (/\w/) konusuna takiliyorsaniz bunun sadece bir regular expression oldugunu soyleyebilirim


puts "kisa metin. baska metin. son metin.".split(/\./).inspect
-------------> ["kisa metin","baska metin","son metin"]


Array Iteration

Hizli bir baslangica ne dersiniz ?

each


Yine ard arda baglanmis komutlar ve kod blogundan gecse de onemli kismi array'i each ile madde madde taramak.
Tarama esnasinda rastlanan madde element degiskenine gonderiliyor. pipe dan sonraki bolumde ise bu degisken string'e cevrilip sonuna x yazilarak ekrana yazdiriliyor.

bu bloklu yazma modu basta biraz ter geliyor ama zamanla insanin gozu de mantigi da alisiyor.

collect / map


Aciklama
internette bir kaynaga gore fark buymus. 
Array#collect (and Array#map) return a new array based on the code passed in the block. Array#each performs an operation (defined by the block) on each element of the array.

yani collect blokta istenenlere gore yeni bir array olarak donuyor
oysa each blokta istenilenleri array'deki maddelere uyarliyor.

first, last, -1, -2 

Array icindeki maddeler arasinda dolasirken isminden de anlasilacagi uzere ilk ve son maddelere girmek icin x.first veya x.last kullanmak mumkun. Ancak tam burada Ruby'deki array yapisini algilamak icin  bize bir firsat doguyor.

mesela [1,2,3,4,5] gibi bir array 5 maddeden olusuyor degil mi ?
[1,2,3,4,5].size dersek de 5 goruyoruz
simdi su referanslari bir inceleyelim

-1 referansinin array'in sonuna gittigini
-2 ile sondan bir oncekine ulastigimizi farketmissinizdir. sondan basa dogru sanki uc uca eklenmis gibi degil mi

ama referansini 5 veya 6 verdiginizde hata vermeyip nil ile donmesi de goze carpmasi gereken baska bir konu.

sondaki bir maddenin yeni giris icin bos tutulan yer oldugunu dusunmekte fayda oldugu yonunde duyumlar aldim. Benden soylemesi



Hash

Benim icin yeni olan bu kavram aslinda array kavrami ile oldukca yakin. Bugune kadar nedense hash denince hash koddan baska birsey dusunmedigim icin ilk karsilastigimda ne oldugunu idrak etmem biraz zaman aldi.

Dictionary objelerinden olusan bir array diye kisaca ozetleyebiliriz. yani ismi olan ve degeri olan ikililerin olusturdugu arrayler.

 dict = {'cat'=>'feline animal', 'dog'=>'canine animal'}
 bu tanimda iki tane madde oldugunu unutmayalim. yani dict.size = 2

dict['cat'] ----> feline animal

dict['cat'] = "fluffy animal"
puts dict['cat']  ---------> "fluffy animal"

yani icerigi bu sekilde degisebiliyor

each

Arraydeki gibi tek tek maddelerin ustunden gecmek icin kullaniyoruz ama bu sefer ikili olarak geliyorlar.

keys, values

hash icindeki tum key'ler ve tum value'lari alab'lmek icin kullanilir.
dict.keys
dict.values
gibi

delete, delete_if, delete_at

hash ustunden madde silmek icin kullanilir.
dict.delete("cat")
dict.delete_if{|key,value|, value<25}





Temel Kavramlar - Ruby'de String

Yazdigim sira size ters gelebilir ama inanin kurs da aynen bu sekilde ilerliyor. Once testler, ardindan alistirmalar simdi arastirma evresinde ise temel kavramlar.

Kursun icinde kelimesi bile edilmedi temel kavramlarin ama bu konuyu anlamadan ilerlemem mumkun olmadigi icin kitaplar internet vs ile arastirmalara daldim.

En basinda da belirttigim gibi bu konu bir cok baska altbaslikla birlikte Ruby'i ele aliyor. Yani kursun adi Ruby olsa da derslerde nadiren adini duyuyoruz.

Ben bu yazida sadece Ruby'deki temel kavramlardan string uzerine egilecegim.

Strings

her zamanki gibi once string ile baslayalim. Cunku hem cok kullanilan hem de oldukca fazla detayi olan bir kavram.  Ben sahsen bir konunun butun fonksiyonlarini ezberlemem ama neler yapabildigini mutlaka ogrenirim. 

String tanimlarken diger dillerden esnek olarak tek tirnak ile cift tirnak kullanimi su sekilde

myvar = "bu Ali'nin blogu"
myvar = 'ali "hey" diye seslendi '
her ikisi de dogru

"some string".length                      -> string'in boyu icin (tahmin etmissinizdir)
"some string".delete("st")              ->  some ring
"some string".gsub("g", "k")         -> some strink
"some string".gsub!("g", "k")         -> some strink ama variable'in kendisi de degisir
"some string".split("e")                  -> ["som", " string"]
"some string"[0..3]                        -> "some"       0+1+2+3 -> s+o+m+e
"some string"[3..-1]                      -> "estring"
"some string"[3..-2]                      -> "estrin"

someobject.to_s                              -> objeyi stringe cevirir

var = "fishy"
"something #{var} is going on"       -> something fishy going on 

x = 10
y = 20

puts "#{x} + #{y} = #{x+y}"    - >   10 + 20 = 30


"something".reverse            -> "gnirtsemos" - gosterir ama degiskenin kendisini degistirmez
"something".reverse!            -> "gnirtsemos" - gosterir ve degiskenin kendisini degistirir

"something".upcase                 -> "SOMETHING"
"SOMETHING".downcase    -> "something"
"SomeThing".swapcase          ->"sOMEtHING"
"something".capitalize            -> "Something"
"something".chop               -> somethin
"something".next               -> somethinh
"somethiiiiiiiing".squeeze   -> something


"test     some   thing".squeeze -> "test some thing" birden fazla space varsa tek space'e indirir. reverse gibi sonuna "!" kullanarak kullanmak mumkun

irb'de "".methods yazarak string ile ilgili methodlari listeleyebilirsiniz. 

Birden fazla satir iceren string nesneleri su sekillerde kullanilabiliyor

x=%q{bu bir
cok satirli
metindir}
x=%q!bu bir
cok satirli
metindir!
x=<<END_OF_TXT
bu bir
cok satirli
metindir
END_OF_TXT

%q tek tirnak manasina geliyor %Q ise cift tirnak
END_OF_TEXT metninin manasi yok siz ne isterseniz onu yazabiliyorsunuz.

size bir programci olarak "abc" * 5  desem hemen bir error cikacagini dusunursunuz degil mi ? ama degil. sonuc : "abcabcabcabcabc"

Stringleri karsilastirmak da mumkun ama karsilastirma yaparken ASCII degeri esas aliniyor. Yani buyuk kucuk harf konusuna dikkat..

"x" > "y"  -> false
"y" > "x"  -> true




9 Ekim 2013 Çarşamba

Odev Yapiyorum "Harry Potter Kata" adim adim

Tekrar Merhaba

Simdi kurs sirasinda verilen odevlerden "Harry Potter Kata"yi yapacagim. Senaryo su sekilde

Harry Potter Kata 
To try and encourage more sales of the 5 different Harry Potter books they sell, a bookshop has decided to offer discounts of multiple­ book purchases.

One copy of any of the five books costs 8 EUR.

If, however, you buy two different books, you get a 5% discount on those two books.

If you buy 3 different books, you get a 10% discount.

If you buy 4 different books, you get a 20% discount.

If you go the whole hog, and buy all 5, you get a huge 25% discount.

Note that if you buy, say, four books, of which 3 are different titles, you get a 10% discount on the 3 that form part of a set, but the fourth book still costs 8 EUR.

Your mission is to write a piece of code to calculate the price of any conceivable shopping basket (containing only Harry Potter books), giving as big a discount as possible.

For example, how much does this basket of books cost?

2 copies of the first book 2 copies of the second book 2 copies of the third book 1 copy of the fourth book 1 copy of the fifth book

Answer: 51.20 EUR
Once github'da repository olusturarak basliyorum. Daha yeteri kadar tecrubem olmadigi icin gorsel araclari kullanmak daha kolay geliyor.

Repository olusturuyoruz
Altta isaretlemis oldugum README dosyasi olusturma secenegi sayesinde projenin tanimini yazacagim bir dosyayi otomatik olarak olusmasini sagladim.

Sonraki ekranda basta yazdigim tanimi icine yazarak proje hakkinda on bilgi olusturdum.

Bu repository'nin adresi bana birazdan lazim olacak o yuzden repository sayfasina gecip harry_potter_kata repository'sini seciyor ve url'ini kopyaliyorum. (https kismi dahil) yani simdi elimde
https://github.com/Aliiybar/harry_potter_kata
gibi bir url var ve clippoard'da bekliyor.

command prompt'a gecip projeyi koyacagim klasoru olusturuyor ve icine giriyorum.

mkdir harry_potter_kata
cd harry_potter_kata

simdi git ile baglantisini kuracagim
git init 
git remote add harry_potter_kata https://github.com/Aliiybar/harry_potter_kata
git pull https://github.com/Aliiybar/harry_potter_kata

simdi program dosyalarimi olusturabilirim
touch hpk.rb
touch hpk_spec.rb

her iki komutla bos birer metin dosyasi olusturdum 
hpk_spec.rb dosyasini editor ile acip yazmaya basliyorum 


hpk_spek.rb
require './hpk.rb'

describe Hpk do
describe 'bookSet' do
it 'Returns with empty set array' do
hpk = Hpk.new
expect(hpk.bookset).to eq([0, 0, 0, 0, 0])
end
end
end


hpk.rb
class Hpk
bookset = []
def initialize ()
@bookset = []
5.times do |book_nr|
@bookset << 0
end
end

def bookset
return @bookset
end
end

simdi ilk testimize haziriz.
terminal penceresinde (command prompt) asagidaki komutu yaziyoruz.
rspec hpk_spec.rb
cevap olarak
Finished in 0.00051 seconds 1 example, 0 failures

veya bir hata varsa hata ile donuyor.

Simdi gelistirelim (renklerle ugrasamadim bu sefer)


hpk_spek.rb
require './hpk.rb'

describe Hpk do  
describe 'bookSet' do
it 'Returns with empty set array' do
hpk = Hpk.new
expect(hpk.bookset).to eq([0, 0, 0, 0, 0])
end
end

describe 'calculate' do
it 'Returns total amount' do
hpk = Hpk.new
expect(hpk.calculate_books_in_cart([2,2,1,0,0])).to eq(36.8)
end
end


describe 'calculate' do
it 'Returns total amount' do
hpk = Hpk.new
expect(hpk.calculate_books_in_cart([2,2,2,1,1])).to eq(51.2)
end
end
end


hpk.rb
class Hpk
BookPrice = 8

bookset = []
def initialize ()
@bookset = []
5.times do |book_nr|
@bookset << 0
end
end

def bookset
return @bookset
end

def calculate_books_in_cart(cart_arr)
looper = true
grand_total = 0.0
while looper
nr_of_books = 0 
5.times do |book_nr|
if cart_arr[book_nr] > 0 
nr_of_books += 1 
cart_arr[book_nr] = cart_arr[book_nr] - 1
end
end

case nr_of_books
when 5
grand_total += ((BookPrice * 5) * 0.75)
when 4
grand_total += ((BookPrice * 4) * 0.80)
when 3
grand_total += ((BookPrice * 3) * 0.90)
when 2
grand_total += ((BookPrice * 2) * 0.95)
when 1 
grand_total +=  BookPrice  
when 0 
looper = false
end

end
return grand_total
end

end


test yaptigimizda gorevden farkli bir sonuc elde ettik ama yine de verilen gorevi kismen yerine getirdik. o halde bu haliyle github'a gonderelim
git add .
git commit
git push harry_potter_kata
git commit'ten sonra commit mesajini yazmayi unutmuyoruz. Bu versiyonun neler icerdigini anlatan bir mesaj ileride faydali olacaktir.

bu odevdeki kodlara benim git adresimden ulasabilirsiniz.


https://github.com/Aliiybar


8 Ekim 2013 Salı

RSpec ve TDD

Derslere baslamadan once bazi konular hakkinda simdiye kadar ogrendiklerimi sizinle paylasirsam benim gibi zorluk cekmezsiniz diye dusunuyorum. Yani RSpec nedir bilmeden TDD olayini anlamadan baliklama konuya atlamak bazilarimiza biraz karisik gelebiliyor. 

TDD

Once Test Driven Development kavrami ile baslayalim. RSpec 2005 yilinda Steven Baker tarafindan olusturulmus. Bu kavramla benim gibi yeni karsilasanlariniz icin once tanimi vereyim. Temelde once testleri yazip, sonra bu testlerden basari ile gecek kodlari yazmak diyebiliriz. (size de ters geldi mi ?) 

Once basit bir test yaziyoruz, testi calistiriyoruz ve dogal olarak test basarisiz oluyor. Sonra bu testin sonucunu dogru dondurecek kod parcasini yaziyoruz (ama fazlasini degil) sonra testi tekrarliyoruz ve bu sekilde kod sekilleniyor. Kodlar arttikca tekrarlanan bolumleri sadelestiriyoruz (method'lar yaparak) ve sonucta yazilan kodlar temel test asamasini gecmis olarak doguyor. 

BDD

Behaviour Driven Development ise bir sonraki adim gibi. Yani bu sefer kucuk parcalardan bir buyugune yani modul boyutundaki butun parcalari test ediyoruz. Bu testler bir bakima programci ile is sahibinin arasindaki tercuman gibi calisiyorlar.  Kullanilan dil konusma dili (ama Ingilizce) 
Given
When 
Then 
yapisinda yazilan cumlelerin test'e tabi olmasi ile calisiyor. 
 
BDD'ye daha sonra tekrar donecegim. Simdi basliga sadik kalarak TDD konusuna donelim. 

RSpec 

Asagida bir test blogu ornegi bulacaksiniz. 

describe MovieList do
   context "when first created" do
      it "is empty" do
         movie_list = MovieList.new
         movie_list.should be_empty
      end
   end
end

Test sonucunda yazan yazi su sekilde olacaktir

MovieList when first created is empty
 
Neyin nereden geldigini renkler ile vermeye calistim.

Eger test blogunda pending varsa sistem testi yapmayi pas geciyor. 

Bu yaziya devam edecegim ... 



Ruby Dersleri Basliyor

Ingiltere'de butun egitimler mi boyle yoksa bu kursa ozel mi boyle bir durum var tam cozemedim ama bizdeki egitim anlayisindan cok farkli. Fazlasiyla bocaladigimi soyleyebilirim.

Biz genelde bir konunun anlatilmasi ve o konu ile ilgili alistirmalar yaparak pekistirilmesi uzerine sistemi kurmusuz. Burada birden bire duvara tosladim. cunku derse girdik hic birsey anlatilmadan alistirmalara baslandi. Dogal olarak hic birsey anlatilmadigi icin ne yapacagimi bile anlamam 15 dakika surdu.

Biraz intibak sorunu yasasam da sorunu cabuk atlattim.

Ruby ogrenmek sandigimdan daha kompleks bir konu. Sadece bir programlama dilini ogrenmekle bitmiyor. .NET programcisi olarak uzak kaldigimiz bir cok konunun icine de mevburen soktugu icin ayni anda sunlari da ogrenmek gerekiyor

  •  UBUNTU Linux
  •  GitHub
  •  RSPEC (Unit Test)
  •  Cucumber (test)
  •  Ruby
  •  Ruby On Rails

Yani kisaca ayri bir disiplin diyebiliriz.

Simdi herseye baslamadan once kisaca bir GitHub konusuna girmekte fayda var.

GitHub


Neredeyse bundan sonraki her adimda github ile kolkola gidecegiz. .NET ile tek tabanca program gelistirirken ihtiyacini hic hissetmedigim ama ekip olarak calismaya baslar baslamaz sorunu yasadigim ve cozum olarak cok uzaklara gitmeden microsoft'a basvurdugum bir konu var "Kod Paylasimi" ve "versiyon kontrolu"

Onceleri yalniz basima proje gelistirdigim icin gunluk backup almak versiyon kontrolu acisindan yeterli oluyordu. Hatta bu konuda simdi adini bile hatirlamadigim ama diski istenilen tarih ve saate donduren programlar da kullanmistim. Ekip olarak proje yazarken de r4gl veya ASP gibi projelerde calistigimiz icin sinirlarimizi belirler ve birbirimizin koduna dokunmadan projeyi yazardik. Ancak ilk defa kod baylasimi ve ekip olarak bir proje gelistirmeye giristigimde daha kompleks bir yapiya ihtiyac duyduk. Microsoft Visual Source Safe kurulumu yaptigimizda herseyin cozuldugunu gordum ve daha da fazla arastirmaya girismeden bunun uzerinde yurumeye basladik. Basitce bir sunucuya yaptigimiz isleri gonderiyor ve versiyon kontrolu, cakisma kontrolu ve kod arsivini temin etmis oluyorduk. .NET ile tam uyumlu oldugu icin kullanmasi da cok rahatti.

Server gene sirkette olan bir baska PC idi. yaklasik 3 sene hic sorun yasamadan bu sekilde proje gelistirdik. Ama takim kucuktu ve gene aslinda birbirimizin ayagina basmamayi konusarak hallettigimiz icin butun fonksiyonlari kullanmamistik.

Sonra Ingiltere'ye ilk geldigimde SVN ile tanistim. Ayni isi baska bir program ile yapiyorduk. Yine Visual Studio ile entegre calistigindan sorun olmadi. nispeten hizla adapte oldum.

Daha sonra sirket politikasi geregi SVN yerine GIT ile calismam gerekti. Sirketin geri kalani zaten git uzerinde oldugu icin beni de kolayca aldilar. Ama bu sefer de butun projede tek basima calistigim icin GIT'in butun nimetlerinden faydalanmadim. Sadece kendi kendime isi biten kodlari gonderiyordum o kadar. Sonra bir arkadas geldi yanima ama 2 projeyi birer birer paylasinca yapisal olarak gene birsey degismedi. Ben de islerin yogunlugundan pek uzerine dusmedim GIT'in.

Ve simdi Ruby'de karsima tum fonksiyonlari ile birlikte cikti. Daha once farketmedigim bazi farklari kisaca soyle anlatabilirim.

Bir kere klasor yapilanmasi farkli. Diger yapilarda bir kod gelistirilen ortam ve bir de sunucu varken bunda durum biraz daha farkli. Arada bir katman daha var.

Offline calismaya imkan veriyor herhangi bir zamandaki herhangi birinin yaptigi katkiya hizla bakmak mumkun.

Web tabanli yapisi ile kodlari incelemek, kimin ne yaptigini bulmak mumkun.

O kadar cok fonksiyon var ki, hersey ciddi ciddi dusunulmus. Ne yapmak istiyorsaniz ona uygun bir komut mutlaka var.

Acik kaynak kodlu. Kodlari paylasmak sartiyla ucretsiz. (aylik ucretini odeyip kimsenin goremeyecegi projeler olusturabiliyorsunuz.)

Simdilik oncelikli yapmaniz gereken eger bir github hesabiniz yoksa onu olusturmak. www.github.com adresinden kayit ucretsiz  oluyorsunuz

Ilk calisma ortaminin hazirligi

GitHub'a uye oldunuz. web'de git uzerinde bir repository olusturuyoruz.
olusturulan repository icin sagdaki resimde gordugunuz gibi bir adres olusacak onu kopyalayin ileride yapistiracagiz.

Simdi "code" diye bir klasor olusturup komut satirindan cd ile icine giriyoruz.

touch readme
readme diye bos bir text dosyasi olusturduk

subl readme
readme dosyasini editor ile actik icine birseyler yazip save edip kapatiyoruz.

git init
ile bu klasorun git ile ilk iliskisini baslatiyoruz

git add .
klasordeki herseyin git'e yollanacagini soyluyoruz.  (evet su anda bos)

git commit
git'e gonderilmek uzere isaretliyoruz. bu asamada bu gonderime dair notlari kaydetmek uzere bir metin dosyasi acilir. Aciklamalari yazip kaydediyoruz.

git remote add origin https://github.com/GitUserName/RepositoryName.git
bilgisayardaki klasor ile github.com'daki klasoru iliskilendirdik.

git push -u origin master
klasordeki son commit edilmis olanlari git'e gonderiyoruz. (git kullanici adi ve parolanizi soracaktir)

temel islemler bunlar.. Klasore yeni kodlar ve alt klasorler ekledikce "gid add ."  ile  eklemeyi unutmayin. sonra gene git commit'den itibaren tekrar ederek yuklemeyi yapabilirsiniz.

Ilk Ders


ilk dersin icerigini size aktararak Ruby ile tanismaya ne dersiniz.

oncelikle koans.heroku.com adresine girerek onunuzdeki iki yoldan birini secmeniz gerekiyor. Koans bunca yildir bu iste olmama ragmen kacirmis oldugum konulardan biri.

Size bir dil ile ilgili cesitli konseptleri anlatan kodlar verilerek bosluklara komutlar, islemler, sonuclar yazarak hata veren kodu hatasiz hale getirme yontemi diyebiliriz.

Yukarida verdigim adresteki koanlari bilgisayariniza indirerek kodlar uzerinde calisabilir veya web uzerinden cozerek ilerleyebilirsiniz. (acikca soyleyeyim cok kisa surmuyor tamaminin bitmesi icin 2-3 gun harcayabiliyorsunuz dolayisiyla bilgisayariniza indirmekte fayda var.) indirmek icin link sayfanin en altinda veya bu adreste http://rubykoans.com/

Benim tavsiyem direk koda atlamadan once biraz okumak. O yuzden ruby-doc.org adresine bakabilir veya http://tutorials.jumpstartlab.com/projects/ruby_in_100_minutes.html adresinden 100 dakikada ruby konusunu okuyabilirsiniz. Gercekten 100 dakikada ana hatlari ile bazi konulari anlayabiliyorsunuz.

Biz indirdik o yuzden sizin de indireceginizi farzediyorum.. indirdiginiz zip dosyasini onceden hazirladigimiz klasore aciyoruz.

rake 
komutu ile indirilan koanlar calistirilip adim adim hatalarin ayiklanmasi saglanir.


boylece unit test olayina baliklama atlamis olduk.






Ruby Ogreniyorum

Calistigim is yerinde ana programlama dili olarak Ruby on Rails kullaniliyor. Ben diger kullanilan diller kontenjanindan ASP.NET isleri uzerine calisiyorum. Ruby programcilarinin azligindan dolayi sirket programcilik bilgisi olan herkesin Ruby ogrenmesinin olasi bir zorlukta ise yarayacagini dusunmus olmali ki .NET, perl, javascript programcilarinin tamamini ve yanina yeni mezun hic bir dile bulasmamis yeni programcilari da katarak "Ruby Akademisi" olarak adlandirdiklari bir kursa yazdirdi.

Benim gibi .NET orijininden gelen  birisi icin sadece programlama dili degil yaninda ek olarak bir suru konu daha ogrenilmek zorunda. ben seneler once UNIX programciligi yapmistim ama rahat bir 15 senedir hic bakmadim bu konulara.

Dolayisiyla oncelikle Linux'dan baslamak gerekiyordu. Simdi size bu dili nasil ogrenmeye basladigimi nerelerden gectigimi adim adim yazacagim. Ogrendikten sonra degil ogrenitken yaziyorum o yuzden hatali yollara saparsam dogrusunu ogrendigimde duzeltecegime soz veriyorum.


Kursu ingilterede aldigim icin gosterebilecegim kaynaklarin tamami Ingilizce. Elimden geldigince cevirmeye calisacagim ama ingilizce kitaplar icin kusura bakmayin artik. Bu arada egitim veren arkadasin adi Steve Tooke (@tooky)

Turkiye'de Ruby konusunda pek kaynak olmadigini sadece bir kitap yazilmis oldugunu gordum. O yuzden yazdiklarimdan Turkce kaynak olarak faydalanabilmenizi umuyorum.

Genel olarak bakildiginda cok eski olmayan bir dil oldugu icin cok fazla kullanicisi yok. Yorumlayici ile calisiyor. Yani yazilan kodlar derlenmiyor. "Hersey bir objedir" den yola cikiyor dolayisiyla Nill bile bir obje . Isletim sistemlerinin tumunde calisabiliyor. Komut satirindan calistirilan IRB ile ruby komutlari tek tek calistirilabiliyor. Simdi de detaylara gecelim.

Evet basliyoruz. Oncelikle ortami program yazmaya uygun hale getirelim.

Not : Siz bunu okurken belki de versiyon numaralari degismis olacaktir o yuzden guncel versiyonlari secme isini size biraktim.

1 Ubuntu Linux Kuruyoruz

Bedava olan bu isletim sistemi icin gerekli herseyi www.ubuntu.com adresinde bulabilirsiniz
Eger windows kullaniyorsaniz ve mevcut sisteminizi koruyarak cift acilisli (dual boot) bir isletim sistemi kurmak istiyorsaniz kurulumu en kolay yapabilmeniz icin BU LINK'e tiklayin windows'dan cikmadan basitce sizin icin butun islemleri yapiyor.

Eger farkli bir sekilde yuklemek istiyorsaniz karar sizin.

2 Guncellemeleri yapiyoruz ve yuklemeye devam ediyoruz 

Ubuntu yuklendikten sonra bir terminal penceresi acarak (soldaki resimdeki siyah icon ile)
sirayla su komutlari yaziyoruz.

sudo apt-get update
sudo apt-get upgrade

bu komutlar calistirilirken size linux kurarken olusturdugunuz kullanici parolasi sorulabilir.

Sonra gerekli ortami yuklemek icin asagidaki sirayla satirlari yazip enter'lamaya devam ediyoruz. (Windows kullanicilari icin garip ama bu tarz yukleme isini ben cok sevdim)


sudo apt-get install build-essential
sudo apt-get install vim
sudo apt-get install libxml2-dev libxslt-dev #Needed for nokogiri gem
sudo apt-get install libcurl3-dev #Needed for curb gem
sudo apt-get install git-core
sudo apt-get install curl
sudo apt-get install libpq-dev # for pg gem

Sonra MySQL kuruyoruz
sudo apt-get install mysql-server mysql-client  libmysqld-dev

Sonra RVM (Ruby Version Manager) yi kuruyoruz.
curl -L https://get.rvm.io | bash

rvm install 1.9.3                                    
bu asamada ubuntu 13de sonralari bir sorun yasamaya basladim. Kurmama ragmen sistem bana rvm nin kurulu olmadigini soylemeye basladi. rvm'nin sitesine baktigimda soyle bir alternatif cozum gordum.

\curl -sSL https://get.rvm.io | bash -s stable
\curl -sSL https://get.rvm.io | bash -s stable --ruby
\curl -sSL https://get.rvm.io | bash -s stable --ruby=1.9.3
\curl -sSL https://get.rvm.io | bash -s stable --rails
Ancak bu sekilde ruby'nin istedigim versiyonunu yukleyebildim.
 
eger sadece rvm install derseniz Ruby'nin son versiyonu kuruluyor. Ama kursta ozellikle 1.9.3 versiyorununu kullandik

rvm use 1.9.3 --default
Bu satirla da bilgisayarimizda farkli ruby versiyonlari olsa bile 1.9.3 versiyonunun default olarak kullanilmasini soyledik.

3 Sublime Text 2 (Code Editor)  kuruyoruz

Kod editor secimi aslinda tercihe kalmis ama vi konusunda tecrubeli degilseniz en yaygin editor olarak Sublime Text 2 gosteriliyor. Dolayisiyla bunu kullanmak akillica bir karar olur. Kurmak icin http://www.sublimetext.com/2 adresine bakabilirsiniz. veya benim yaptigim gibi Ubuntu Software Center a girip sublime yazarak oradaki install linkini kullanabilirsiniz. (ubuntu toolbar'da alisveris poseti seklinde olan ikon)


Ruby Test'leri icin su plugin i kurmayin unutmayin
https://github.com/maltize/sublime-text-2-ruby-tests

ERB icin https://github.com/eddorre/SublimeERB

4 RSpec ve Cucumber kuruyoruz


gem install rspec --version 2.0.0
gem install cucumber
cucumber ileride anlatacagim test ortamlarindan birisi. 

5 Son hamleler 

gem install bundler

boylelikle kurulumu tamamladik artik ihtiyacimiz olan hersey bilgisayarimizda yuklu.