2008年4月29日 星期二

Ruby初試心得2

繼續上面那邊之後,又繼續寫了一些題目。前面這邊就來講一些比較小的重點吧~

>> <<
首先呢,是ruby的位元運算子是 >> 或是 <<,而其方向性就是代表左移或是右移。在數字的型態下可以很簡單的算出某數乘以2的n次方後的值。而同樣的符號用在陣列或是字串則是代表在尾端插入或是移出幾個元素,不過跟數字不同的是,因為陣列或是字串都是為指標,所以會造成變數值的改變。(也就是說,arr = [], 現在我想要取得比多幾個元素,arr2 = arr[] << "test" -> arr2 = ["test"], arr = ["test])如果想要避免這種情況,用+運算子會較恰當。

空白 ()
ruby不是style free的語言(好像也沒聽過有人說過),他對空白(white space)老實說很明顯的是sensitive。舉個例子 i = str.length -1這個statement是不合語法的,你可以在-號前後都加空白,或是只在後面加空白,但是就是不能只加在前面。有時候會遇到莫名其妙的編譯錯誤, 這時候請嘗試檢查一些步必要的空白,有時候就可以過了~"~。類似的情形還有(),在ruby方法後面的參數你可以選擇像一般語言使用()來傳遞,也可以用個空白來代替這樣的語法來增加可讀性。像是 my_score.is_greater_than your_score。不過在參數一多,或是方法中的參數有方法的時候,這樣的式子小則出現warning,大則無法通過編譯。所以..除了是非常簡明的方法外,盡量要少用這樣的語法。

Enumerable
重點來了,for each語法在ruby中算的上簡單又實用的語法,在實做圖論的一些演算法的時候,for each node in graph這樣虛擬碼,跟ruby語法幾乎沒兩樣。不過要實做他,必須包含Enumerable 此模組。當初看到的時候,是在是有點開心,可以這麼簡單就實做出來,不過是令苦惱的是說明文件上的一段話:The class must provide a method each, which yields successive members of the collection. 我知道要提供一個each方法讓他提供其他實做,問題是,那each裡面到底要寫些啥好?是丟出一個陣列還是也丟出一個each?在多方查詢之後...最後還是找到ruby論壇,裡面雖然沒有找到有人問過相同問題,不過也是看到的人家是如何利用此方法。其實就是利用區段的概念,每個block都可以傳遞參數與程式碼,在最外層的程式碼去呼叫each方法的時候,會將區段內的程式碼往內(上)層傳,最後實際做的程式碼則是最內層的each。然而要如何接收其他區段內的程式碼呢,其實就是利用yields。如果對ruby區段有了解的人應該就知道跟怎麼做了,不過因為小弟資值駑鈍,無法參透所以還是看了其他大大的範例才會。實作方法很簡單,首先引入Enumerable 像是
class MyClass
include Enumerable
...
然後去定義個方法
def each
@elements.each {|elemant| yield element}
end
在這個範例中,是用另一個集合的each去實做此類別的each。如果有其他應用的話,一樣就是利用yield把程式碼傳進來,然後再把參數丟進去就OK了。

Comparable
這是本章的重點之二,利用此模組可以實做某類別的比較運算子(<, >, ==, <=, >=)。只要提供一個方法<=>,那麼接下來去就可以去比較拉~~。這個模組的實踐比較簡單,回傳0表式等於,回傳+1表是大於,-1則是小於。至於怎麼定義,就要看實作的內容了。
比較有趣的是,因為我曾經為了要讓Array時做此類別,於是自行定義了<=>。在小於與大於的表現上都合乎與我的預期,但是在==上我卻發現引入Comparable此模組並不會覆寫其類別原本所定義的==。雖然這是我想要的結果,不過卻是出乎我意料(我以為會被<=>方法所影響,因為Comparable實做了除了===的其他比較運算子),本來還在考慮要不要自己再去覆寫==,沒想到省了一道功夫。這也說明一件事,類別方法被覆寫的優先順序應該是模組方法,類別方法,自訂類別方法(已經有的類別方法,又去再覆寫他),越後面的使越不容易蓋掉。至於更大範圍的測是我還沒玩過,有機會再說吧。

alias
這是今天最後的重點了,用個很快樂的東西做個ending吧。當我們在快樂的複寫方法的時候,而又想要使用原來的方法要怎麼辦呢?剛開始讓人想到的應該就是super吧,這個super很快樂沒錯,不過當我們不是繼承某類別,從其子類別要去覆寫父親類別方法,而是想要複寫某個已存在類別的方法。如果我們就這樣傻傻給牠覆寫下去,裡面又使用到相同名稱的方法...那結果就會出現很精彩的遞迴又遞迴的遞迴地獄。所以~~!這時候就是alias出場的時候了。利用alias把原本的方法名稱指定成其他名子,這樣就可以安心的在覆寫的方法中使用原本的方法。
如果我沒是皮癢想要複寫Fixnum中的+變成兩次,可以這樣做
class Fixnum
alias plus +
def +(num)
self.plus(num).plus(num)
end
end
print "1 + 2 = ", 1+2
結果就會很開心了XXXD
當然alias不只可以用在這種地方,不過通常方法沒有被覆寫的的時候,應該不需要再給他一個名子吧。

2008年4月27日 星期日

Ruby初試心得

最近沒事開始玩一些東西,其中一樣就是ACM,一種練習寫程式的好地方,裡面有上萬筆題目可以讓人來打發時間。其中第124題,看了之後覺得可以動手於是開始想要用哪種語言來寫。用C語言的話,我對其字串處理不熟,所以不知道該如何下手好;如果用JAVA應該還不錯,最近也看了一些軟體工程的書,說不定可以派上用場,也許可以用一些高階的資料結構來解這題。不過當我真的要開始下手的時候,遇到了一個我忘記的嚴重問題,我已經忘了java要如何從鍵盤(標準input裝置)去得到輸入的字串。只記得是用串流...然後就忘記了,結果是冏在哪邊。接下來我想VB也是可以OO,字串處理我也OK,標準輸入輸出也很簡單,只是剛開始要我碰真的有很多困難點,很多同義的語法,但是要用一些很奇怪的表示法,讓人難以適應。不過這都還算是小事,最讓我頭痛的是互相參考的類別編譯不能過...阿~~我承認在設計上是有這樣的瑕疵,但是不給過也太過份了,所以就跳槽到最近才開始碰的ruby。

Ruby是全OO的語言,我想應該沒啥問題吧...不過還是有很多問題XXD。一開始遇到的是Ruby沒有介面(Interface)!!很好...這樣設計模式第一條,針對介面而寫程式我就冏了。沒關係,那我就想像有一個介面在那邊,程式碼一樣寫,只不過是少了一個實作介面的步驟。在初步構想下,我是先將題目的概念轉化成一種節點與節點之間的關係,第一行輸入會讓程式將所有元素宣告成一種基礎節點(basenode),然後再經由第二條的條件式,去真的new出節點。而在這裡會產生的實例(Instance)會有兩種:一種是跟順序無關的節點(freenode);一種是被條件限制住的節點(limitnode)。經由程式去判讀條件式,並分別將基礎節點實際產生出節點實例。

基於上述想法,我就開始寫了下述錯誤的程式碼(邏輯上的錯誤)。不過讓我有fu的其實是其中雜湊所帶來的震撼,雜湊很有趣,很方便,可以給程式碼帶來更多的便利性以及高度的抽象化。但是當我正爽的時候,卻發現我要用for each取出其中的元素的時候,資料型態居然不是我當初所放進去的freenode/limitnode,而是array,使得下面的程式碼完全沒辦法跑,因為會有找不到方法的錯誤(因為is_bigger是節點的方法,而array本身沒有),最後才發現原來是雜湊在被call for each的時候會像是先利用call to_a轉換成陣列型態之後再被丟出裡面的元素,而其元素則是包含鍵與其值,也就是[key, value],所以丟出來的東西是array沒錯...當然沒辦法取得我所定義的方法。

我這邊的解法很簡單,取出第二個值就結束了XXD。不過剛剛看了一下hash的方法,應該還有其他的方法可以解,等等試試看^^~這邊就放錯誤的程式碼上來,以便可以觀察錯誤的地方。
以知有錯的地方有:is_bigger的邏輯(含limitnode的實作)、判斷free/limit node的程式區段
錯誤的程式碼

2008年4月12日 星期六

啥米哇糕,MaDa字幕製作程式?(What's it, Mada subtitle generator?)

最近天氣很糟...不是很熱就是很悶。考試也考的不怎樣...總覺得讓人有點傷心。想要買個CPU來讓自己爽一下,結果最近E8400大家都缺貨,不肯單賣,讓我硬是碰了釘子。討厭的日子總沒有好事會發生,因為...發生了就不叫做討厭的日子了XXD。


最近某J要我寫一個關於字幕的Replacer,他要用一些自訂標籤來玩字幕特效,但是發現單單使用一邊文書處理軟體的取代似乎不夠用(需要時間的phaser and counter),反正近日來也無所事事,就寫了。
本來打算要用新學的ruby來玩玩,但是發現在Pragmatic Programmers - Programming Ruby, 2nd Ed - 2005 這本書上找不到檔案寫入的方式!?從讀取檔案到字串處裡都還OK,卻讓我找不到寫檔的方法,害我當下冏到,另外我比較熟的語言就是c, java, vb。C的字串處理我不清楚,沒玩過C++;JAVA因為看了超越JAVA總覺得他的字串是弱項;剩下的就是勉強能用的VB,當然隨便拖一拖GUI就出來也是我會採用他的原因啦。反正字串處理的模組是另外寫,邏輯也盡量保持清楚,以後要改寫是不會需要很多時間。意外的花了不少時間,不過還是在一天內寫完了,後來就和J大討論看還要不要再擴展下去,不過J大一直就沒消息了XD。

不知道為什麼那種念頭一直在我心中圍繞不散,也許是最近真的太閒了。在找了一些關於ass字募的資料後,覺得如果要玩自訂標籤,乾脆寫一個產生器(generator)不是更好嗎?感覺上要省事的多。不過軟體開發有一條很清楚的規則是不能被忘卻的:不要再發明輪子。別人做過的東西就拿來用吧,不要再自己寫一次。於是我開始尋找一些產生器。嗯...看到了一個很虛的卡拉OK字幕製作程式,用VB6寫的,安裝後感覺真的鳥到爆,只有聲音讓你對時間軸...ma...也許這樣對一般人就夠了,但不是我想要的,另外他的宣傳文說啥彩色字幕是讓我覺得最蠢的東西~"~。
所以我就開始把visual studio 2005打開,看看有沒有可能寫出一個東西。於是我開始跟客戶(偽)開始對話:
我:程式中需要的的功能是什麼?
客:最重要的是有影片可以即時預覽,以及支援ass動態字幕的各種語法,可以讓我隨心所欲的變換各種不同的特效。
於是我開始找看看有沒有可以播放影片的插件可以使用(如果要我自己去找原始碼弄成dll再放進去那還是不要寫好~"~),結果發現了有wmp可以用,雖然大家都不怎麼喜歡wmp(有在看片的人),但是能簡單寫還是最重要哈,玩了一下,把時間軸給弄出來了。真是有趣XXD。因為wmp也是屬於吃系統編碼的那種撥放器,所以只要系統能播放的東西都可以看,所以基本上,最基本的基本已經做出來。接下來就是文字檔的匯入(簡單),然後存成ass(需要做一點字串處理),接下來是玩特效的結合,最後是能夠讀取ass檔並做編輯。大致上的開發流程就是這樣。

不過我不相信這個輪子沒人發明過,所以我又開始尋找的旅程...

就算找到...說不定我還是會作,因為我是學生ㄇㄟ~~而且是國小喔!!

2008年4月5日 星期六

第一個資料庫應用(with scaffold)--Ruby on Rails 完全新手手冊


在自己不斷遭受到失敗與挫折之時,雖然一度對ROR產生了小小的反感,"沒式改什麼版,書都沒用了"。不過仔細想想,沒有工具書到不全然是工具的問題,沒人出書這才是重點。其他較為流行的語言(例如C, Java)在國內都有許多不同的版本之書籍可供參考;反觀ROR,目前市面上幾乎都是翻譯書(我還沒看到有自己寫的~"~),而原文書有提到Rails2.0最快也要五月份才會有書出現(亞馬遜上查的)。難道這段時間就只能苦苦摸索嗎?!!終於皇天不負苦心人,讓我找到一篇關於在Rails使用靜態scaffold step by step (動態scaffold在Rails 2.0 已廢除)這邊文章。那麼就讓我們一起跟著做做看吧^^。

第一步:開始

在開始之前,先讓我們仔細想一想,我們要的東西是什麼?我們要怎麼樣安排資料庫中的資料?在這邊我就先舉一個簡單的例子:假設我們要開一個網路商店,那麼我就先建立一個store專案。(後面=>就是要輸入的程式碼)
=>rails store

第二步:建立資料庫

建立完專案之後呢,我們就要來決定我們的資料庫名稱。這個資料庫名稱老實說不怎麼重要,就隨便想想吧...嗯,那就也叫store好了XD。決定了之後我們就要來更改資料庫的設定檔。在 store\config 目錄下有個檔案叫做 database.yml 的檔案,打開文字編輯器來修改裡面的內容(在這邊建議使用 AptanaStudio 或是 SciTE來編輯,因為使用win的記事本會因為作業系統斷行符號的不同而產生難以閱讀的現象)。#號是註解符號,所以就不用看了。從developmet開始看,我們需要把內容改成下列這樣:
development:
adapter: mysql #調節器名稱,隨便填應該也可以拉
database: store_development #資料庫名稱
timeout: 5000 #可以不用管
username: root #mysql的帳號
password: #mysql的密碼
host: localhost #可接收的連線範圍
(這邊要注意一下,因為ruby對空白字元與tab是敏感的,所以在冒號後面一定要有一個空白,否則會出錯!!)這邊我們可以看到,資料庫名稱為 store_development,這樣的命名方式是內定的。其意義是指開發中的資料庫,在 development 敘述下還有test與production,其意義就是測試與成品資料庫。命名當然也就是 store_test 與 store_production。如果打算要做成品的話就要全部都填寫清楚,在這邊我們只是測試開發,所以可以只填好development的區段,其他就不管了。
修改完設定檔後,我們下這一行指令來建立資料庫:
=>rake db:create
(如果要順便建立test用與production的資料庫可以下 rake db:create:all)
執行之後如果沒有什麼錯誤訊息那就可以了,假如你不放心,那可以下mysql的指令或是利用像是phpMyAdmin的資料庫管理軟體來檢查是否資料庫已經建立。

第三步:Scaffolding!

在我參考的文章中在這一步有去做確認網站有沒有架好,但是我覺得這那真的是多餘的動作,所以就不做了。讓我們來想想下一步要怎麼進行。現在我們有了資料庫,那麼還要建立一個表格(table)來存放記錄(records),並且決定表格中的欄位(名稱)。這邊最重要的是表格的名稱,他最後會在MVC中都會出現(MVC有機會以後再說XD),依照命名規則,他必須是一個英文名詞,且須為複數型,那麼因為商店裡面有很多好玩的小玩意兒,所以就決定是...items拉(我知道很爛,但是不要打我)。接下來決定欄位的名稱,先做個簡單的吧,有名稱(title)、描述(decription)與價位(price)就夠了;名稱的資料型態為 string, 描述為text, 價位則為 integer。那麼輸入指令:
=>ruby script/generate scaffold Items title:string description:text price:integer
這時候就可以發現ruby又幫我們建立了許多檔案,其中在store\db\migrate中有一個 001_create_items.rb 我們可以打開來檢查看看,應該就會像下面這樣:
class CreateItems < ActiveRecord::Migration
def self.up create_table :items do |t|
t.string :title
t.text :description
t.integer :price
t.timestamps
end
end
def self.down drop_table :items
end
end

第四步:Migration

檢查完上面的檔案沒有問題之後,我們就可以來執行下面的指令:
=>rake db:migrate
出現成功訊息就好啦!!如果失敗的話呢...請檢查1.database.yml有沒有設定錯誤 2.mySql資料庫有沒有正在執行,使用者權限是否有開放給設定檔的那個使用者等等

第五步:執行server

老實說...就沒第五步ㄇㄟ,寫辛酸的拉,執行server已經在第一篇文章有說過了:
=>ruby script/server
這樣應該就能看到成果出現啦!!什麼?不知道怎麼看到網頁?唉呦,就是 http://localhost:3000/Items 因為在這邊我們用到的控制器(controller)是item的複數型態。

補充

其實在設定資料庫的幾個步驟,可以利用其他的資料庫軟體來完成,像是建立資料庫、建立table等,都有許多方法可以達到同樣的效果。不過在這邊就是盡量的使用ruby給我們的工具,來熟悉一下,等有心得了再來換成習慣的工具也不遲。
當然,這樣用scaffold做出來的網頁雖然快速,但是還是略嫌粗糙了點。所已接下來就是看書的時間拉,雖然rails1.2和2.0 scaffold使用的方法不同,但是書上在介紹完後,還是會開始繼續一些我們在製作動態網頁的技巧。所以階段性任務達成!!下次來研究架站或是考慮要不要把簡易ruby手冊的後半給補完^^"

*關於命名規則的單複數型態:在1.2版的 rails scaffold必須要在資料表格(table)、控制器(controller)使用複數型態,而在模型(model)使用單數型態。但在測試過 rails 2.0的 scaffold之後,發現應該沒有很明確的規定單複數要怎麼使用。藉由其 scaffold產生的模型、控制器、資料表格將會以相同的名稱命名。

**如果要以其他工具自行建置table,需注意 rails在 table中一定需要一欄為id的索引(作為主鍵),如果用rake來幫忙建造則會自動建置。

注:本篇圖案與主題無關....

2008年4月4日 星期五

Ruby簡介--Ruby on Rails 完全新手手冊


既然我們要玩的東西就是Ruby onRails,那麼了解ruby就是必然的事了。
那麼就讓我來簡單的介紹一下ruby這個玩意兒!
不過在開始之前,先來說明一下有兩種不同的環境可以選擇:其一是利用irb,一行一行撰寫程式碼,可以即時的從視窗中看到執行的結果;另一種就比較像是一般的程式語言一樣,先撰寫好程式碼,存成.rb檔,然後在執行 ruby xxx.rb就可以看到執行的結果。(注意:這裡的兩種方法都是在文字命令列下執行)在這裡推薦使用irb來玩會比較有趣^^。

基本輸入/輸出

puts, print / get
print=>輸出文字不換行
puts=>輸出文字且換行
printf=>同C的printg
demo:
puts "Hello World!!"
print "Hello"
print "World!!"
printf("Number: %5.2f,\nString: %s\n", 1.23, "hello")

get=>從鍵盤取得輸入的串流(含換行符號),如果沒有可以切受return的值,則會把值丟到$_
chomp=>將變數$_去掉尾部的換行符號
demo:
lines = get
puts line


由上面幾個簡單的例子我們可以有以下這些發現
1.method的括號可以省略不寫
2.method必有返回值(nil或是值)

基本資料型態

numbers/strings/ranges/regular expressions
數字(number) => 分為fixnum與bignum
字串(string) => 就是字串
範圍(range) => 一個遞增的範圍像是1..5、A..B,則分別表示{1, 2, 3, 4, 5},{A, B};若是三個點則為不包含最後的數(值)ex:1...5表示{1, 2, 3, 4}
*正規表示式(
regular expression) => 還蠻有趣的東西...晚點再來討論
demo:
num = 11
num = 99999999999999999999999
num = 0x6C #hex
num = 0r100101 #binary
num = 045172 #octal
num = 123_456_789 #123456789
rg = 1..5
rg == 5 #false
rg === 5 #true
rg = "abc".."abe" #{"abc", "abd", "abe"}
str = "#{'Ho! '*3} Merry Christmas!" #Ho! Ho! Ho! Merry Christmas!
str = "say \"Hello\"" #say "Hello"
str = "Hello " + "World!!"
str = 'Hello World!!'

基本流程控制

if..elsif(elseif)..else => 基本上要寫elsif才對,但式測試後發現elseif也可以過XXD
unless => if 的反敘述
case..when..else => 同C的swicth..case..default
while/until
for..in => 同for each語法
break/next/redo/retry =>限迴圈中使用,跳出/跳至下一個/再次執行同一個/重新執行迴圈(從頭)
demo:
def get_time(clock)
if clocck < clock ="=">
+clock.to_s+'點'
end
end
####我不是分隔線#####
count=0
for value in 1..10
count+=1 until value%2==1 #count+=1 if value%2==0
end
####我不是分隔線#####
score = 70
str = score>60?'passed':'not pass'

Array and Hash 陣列與雜湊

關於array基本上和我們平常在用的array差不多,所以基本的就不談了,來談談在Ruby中的array到底有什麼特別的地方。那麼首先來舉個例子:
a = [123, 9.8765, "LOVE"]
上述敘述將有三個元素的array指定給a,在Ruby中不同型態元素的array是允許的。接下來測試一下:
puts a[1] #9.8765
puts a.class #Array
puts a.length #3
puts a[3] #nil
puts a[-1] #LOVE
puts a[-4] #nill

從這邊我們可以看到有負數的索引值在,在array中索引-1代表的是陣列最後一個元素,-2則是倒數第二個元素...依此類推,長度為n的陣列第一個元素的index可以為-n或是0。而只要是沒有被assign值的地方將回return nil值。而這個陣列本身的長度為動態的,如果我們現在指定a[4]=99,那麼我們可以看到 a.length將會變成5,a[3]依然是nil。這在邊我們就可以發現到幾個要比較小心來處理的地方:因為負數的index可能有意義,要小心處理其範圍;如果讀到nil值不代表已經走到陣列邊界,包含nil這個元素的array是合法的。使用length屬性或是for each來處理可能較不容易出錯。

另外array也可使用雙index,其意義為Array[起始index, 元素個數]。也就是說,a[3]與a[3, 1]所得到的值是相同的。這邊有個array a=[1, 3, 5, 7, 9],則a[1, 3] = {3, 5, 7};a[-4, 2] = {3, 5}而不是{3, 1},元素個數都是從start index開始抓後面的元素。而多為陣列表示法則為[a][b]...[n]。

依照上面的想法,同樣的我們可以在array中使用range來做index。例如a[1..3]={3, 5, 7};負數Range也可以,不過切記range必須是要遞增的。
後註:array裡面同樣也可以塞array喔!依此觀念就能很容易實作長度不為一的多為陣列;a=["a", "b", "c"] => a=%w{a, b, c}

在Hash這邊我們先來看一個範例
my_favor = {
'animal' => '小雞',
'book' => '遊戲說明書',
'game' => '風色幻想',
'CD' => '天使領域 OST'}
測試一下,puts my_favor['CD'] #
天使領域 OST;puts my_favor.length #4
感覺還蠻簡單的不是嗎?陣列就有點像是比較tightly hash,限制了index的表示法。而相較之下hash的index就叫為多元化,數字與字串都可以做為index,如果能運用的恰當,則可增加成式的可讀性^^。

續待
iterator, block, class

小試ROR--Ruby on Rails 完全新手手冊



本篇文章由某G學弟死盯加上學了一點新東西做點筆記,對以後可以省掉不少找重覆資料的時間(我計性很差 = ="),所以就從最簡單的部分開始吧!!

準備

ROR的相關歷史簡介為了要符合DRY的精神,所以請自行參考相關書籍(其實是自己懶的寫=>踢飛)。最重要的還是先去官網看一看,目前已經有中文化的官網了(大心),不過說實在的,還蠻鳥的,看英文版的比較實在XXD。雖然在ptt上面大大比較推說自行下載ruby、rails、mySQL,然後自行分別安裝,不過正因為科技始終來自於惰性,所以還是下載了 Instant Rails來使用。
先來看一下Instant Rails裡面有什麼

嗯...有架過網站的人對裡面一些東西應該不陌生才對,不過這裡並不對裡面的東西討論(迷之音:那你幹蠻寫出來阿~"~),重點在於第三項,rails的版本是2.0.2。就一般程式語言來說,為了要向下相容,較高的版本通常能夠吃以前的東西。但很不幸的(對於初學者來說),Rails2.0以後的版本為了要實行REST拿掉了動態scaffold以及pagintation,改成了外掛形式,必須要另外安裝才能使用。而靜態的scaffold語法也較以往不同,詳細請參考 rails 2.0無法使用靜態的scaffold功能 此篇文章。

安裝

安裝Instant Rails很簡單,這邊以windows環境使用Instant Rails2.0做範例。解壓縮下載的檔案到目地資料夾後,執行InstantRails.exe,出現問題選項選擇"是",即可完成。同資料夾下有個use_ruby.cmd,看了一下裡面的內容後,應該是要在系統註冊path變數用的,不過我點了一下到是沒有作用,所以還是手動設定。設定法如下:控制台=>系統=>進階=>環境變數=>系統變數 找到變數'PATH'按一下編輯,把ruby\bin的位置輸入,還有mysql\bin的位置也要,基本上會跟use_ruby.cmd這個檔案裡面的位置會一樣(這裡面本來就是要設定系統變數的ㄇㄟ)。基本上這樣就安裝完畢拉~~!

執行

在執行方面,會較建議使用文字命令模式(命令提示字元,commond line mode)來執行整個環境。因為我們在上面已經做過設定系統變數:path的關係,現在就可以直接打上irb按下enter,這樣馬上就進入ruby介面。這...雖然一般沒什麼在用(對我來說),不過在測試上卻是一個好幫手。一樣,詳情參考ruby程設相關書籍。
現在來稍微觀察一下Instant Rails的目錄結構,有幾個看一就懂得像是ruby, apache, mysql就不管他了,其他的看起來也沒什麼特別重要。php資料夾內有個phpMyAdmin可以用來管理mySQL,要用的話要放到www的資料夾下(此apache伺服器預設跟目錄),rails_apps裡面放了兩個網站範例,有空可以玩玩看至於實際架站的方法有兩三種,這個因為目前還不熟,所以就先pass拉。
目前就只要知道在要測試網站的目錄下執行 ruby script/server 就可以在loaclhost:3000找到你自己的網站啦!!

Hello World!

0.先進入文字命令列模式
1.在你自己要建立專案的資料夾下鍵入 'rails 專案名' (ex: rails helloworld),這樣ruby就會自動幫你建置許多需要檔案
2.進入專案資料夾(ex:cd helloworld),並找到public資料夾,把裡面的index.html給取代掉就好啦!!
3.執行 ruby script/server
4.在瀏覽器的網址列上輸入 http://localhost:3000/ 就看的到拉~~

不過照這樣寫出來的東西總覺得有點沒意思,那麼我們可以怎麼改呢
那我們就把index.html的內容改成下列的樣子
<html>
<head><title>Hello World</title></head>
<body>
<h1><%= h('Hello World!!')%></h1>
<br />
</body></html>

嗯...這樣是不是比較有fu了一點。其中h這個method是用來完整輸出引數,也就是說不論放什麼字元下去,他都能在網頁上忠實的呈現出來,是不可或缺的小幫手^^"



第一篇大致上就到這邊結束,下面列一些好用的
一、參考書目(依優先順序排列)[ISBN]
  • 超越 Java:探討程式語言的未來 (Beyond Java)[9867794761]
  • Agile Web Development with Rails, 2/e[0977616630]
  • Programming Ruby: The Pragmatic Programmers' Guide, 2/e[0974514055]
第一本書談到了相當多的rails的術語與細節,不可不看,第二本則僅供參考,因為書中的範例還是使用了rails1.2的架構,拿到2.0來做會有問題(最前面有提到),而第三本因為還沒看,所以哈~

二、工具程式(主要程式除外)
  • AptanaStudio
  • Navicat
  • UltraEdit
前兩套都有免費版的可以下載,使用到目前為止也沒遇到什麼不順手的,免費版的就很好用了^^。第一套是ruby的IDE,使用套件(rails)更新後就可以直接啟動WEBrick,除錯上帶來不少方便性。第二套是mySQL的GUI管理工具,會用access就會用了,比起phpMyAdmin是要方便許多,lite版也夠一般使用了。最後一套應該大家都知道,雖然用來寫ruby不甚順手,但比起記事本還是方便許多。