Rails on Cygwin #2

by winson, about 1 year ago.

瞭解最麻煩的MySQL安裝之後,這裡回過頭來看看怎樣安裝Cygwin以及怎樣在Cygwin底下安裝Rails:

1.到Cygwin首頁的右上角下載安裝程式setup.exe。

2.一直按下一步,直到Choose Download Site的畫面,這裡輸入台大的主機:

ftp://ftp.ntu.edu.tw/cygwin
這樣下載安裝套件的連線速度會比較快。按Add新增。

3.再來選擇要安裝的套件,一開始只要展開Devel,點選gcc, make, ruby這三個即可,如果有需要用到subversion也可以多選這一個。以後如果有需要其他套件,重新進入Cygwin的setup.exe再選就好。


  • Posted in Windoz, on Monday, May 28, 2007, at 03:24 AM.

Rails on Cygwin #1

by winson, about 1 year ago.

如果你是shell指令愛好者,非常喜歡用shell下指令玩Rails的話,除了Mac, Linux之外,最好的選擇就是在Win32平台上安裝Cygwin

安裝Cygwin有什麼好處呢?這可以讓你在Win32底下使用一些常見的Linux工具程式,例如: joe, nano, vim, emacs, mc, gcc, make等,其他像top, ls, man, ps, mv等常見的指令也都相容。

由於Cygwin已經相當完整、成熟,在上頭安裝Rails不會有什麼太大的問題。比較麻煩的是安裝MySQL,當然你可以去下載原始碼,然後傻傻地在Cygwin底下花幾個小時用gcc重新編譯。

或者你也可以直接安裝Win32版本,啟動成什麼服務之類的,但是如果你都要在Cygwin下使用Rails的話,事實上,可以有更簡單的方式,因為Cygwin裡面那些Linux工具程式,其實也都是Win32的exe,MySQL也不例外。方式如下:


  • Posted in Windoz, on Monday, May 28, 2007, at 02:15 AM.

JMX Scripts using JRuby

by winson, about 1 year ago.

好吧,如果真的有人喜歡透過JRuby去呼叫Java,不妨可以參考這裡,看看怎樣在Ruby裡面呼叫JMX。

我欣賞Ruby、我欣賞Rails、我欣賞ActiveRecord、我欣賞RSpec、我欣賞RDoc、我欣賞所有R開頭的東西,我欣賞這整套運作方式的流暢、舒服、美感、直覺、簡單、方便。

而Java那套方式,除了語法毫無美感之外,整個邏輯、處理、思考方式都讓人覺得非常不舒服。


  • Posted in Java, on Saturday, May 26, 2007, at 06:09 PM.

Stickies plugin

by winson, about 1 year ago.

在Rails裡頭要做訊息提示最簡單的就是利用flash[:notice],然後把你要的訊息餵給它就好。

如果你覺得這種方式太陽春的話,麻煩好好把CSS設計一下,訊息提示其實可以做到很炫。

好吧,炫不炫是另外一回事,如果你要區分警告、提示、錯誤、除錯幾種訊息呢?當然你可以自己創造flash[:error]、flash[:warning]等等,然後設計不同顏色的CSS來展示不同的訊息。


  • Posted in Plugins, on Tuesday, May 22, 2007, at 12:55 AM.

Missing route on Rails

by winson, about 1 year ago.

處理404 not found的解法有很多,大概有幾種處理方式:

1. 在Application controller宣告一個method_missing,把所有找不到的method導過去處理。

2. 利用Exception handler。

3. 利用Route設定。

1和2大概除了程式不同之外,後續處理都一樣,都是放一個404 not found要用的網頁,而且還要在Route裡頭宣告,寫程式當然可以做很多你想要做的處理,但缺點是太過麻煩。


  • Posted in Routing, on Monday, May 21, 2007, at 09:55 AM.

CodeGear unveils Ruby on Rails IDE

by winson, about 1 year ago.

先是四月底備受Sun青睞的JRuby邁向0.9.9版,接著微軟在五月一日跟Silverlight一同發表了IronRuby(鐵紅寶石?),而今天CodeGear(從Borland分割出來的過氣公司)宣佈下半年將會推出Ruby On Rails IDE工具,而這工具將會和新的JBuilder一樣,一齊向Eclipse靠攏。

看起來熱鬧的很,其實多半了無新意。

請問在JVM上跑Rails要幹嘛?用.Net開發Rails又如何?就打text_field還多一點的字就可以有文字方塊,請問這還需要用IDE去拉嗎?Ruby/Rails程式寫好,開瀏覽器馬上可以跑,既不用Compile、也不需要打包起來,更不用Deploy,那是要IDE幹嘛?

如果是Dreamweaver推出Rails外掛,我相信那會很有幫助,因為當寫程式、測試、除錯,甚至包括Ajax的Coding工作都相當輕鬆愉快時,剩下難搞的就是網頁設計。

不過這也證實了眾家大廠的確對這塊領域頗感興趣就是。而DHH倒是很大器的說,歡迎CodeGear加入Ruby On Rails行列。

因為Ruby/Rails天生簡潔、單純的關係,在這塊領域上IDE工具幫助不大,或說根本毫無幫助,而且短期之內大概也不會有什麼IDE或程式碼編輯器可以超越TextMate


  • Posted in Java, TextMate, on Tuesday, May 15, 2007, at 08:04 AM.

Find randomly

by winson, about 1 year ago.

隨機挑資料庫某一筆資料的方式大概有這兩種:

def self.random
  # find(rand count) rescue ActiveRecord::RecordNotFound random
  find(:first)[rand count]
end
第一種先隨機挑,找不到拋出例外再去Rescue例外並挑下一筆,等於跑一個遞迴;第二種是先把全部挑出來,再利用ActiveRecord傳回陣列的特性,從陣列隨機挑一筆。

除非運氣太差,要不很顯然第一種方式快;但第二種語法比較精簡。我個人比較喜歡第二種精簡的方式。

要注意呼叫rand傳回的亂數是從0開始,但資料庫的ID沒有特別設定都是從1開始,第一種方式改成這樣:

find(rand(count) + 1) rescue ActiveRecord::RecordNotFound random
可以保證不會挑到第0筆而再跑一次;但無論如何,就算多跳幾次也應該比第二種方式快,所以加不加1無所謂。

無論採用哪種方式,ActiveRecord都是一種看起來簡單,卻蘊含豐富的變化資料封裝處理,非常討人喜歡啊。


  • Posted in ActiveRecord, on Friday, May 11, 2007, at 11:10 PM.

Acts as Taggable

by winson, about 1 year ago.

Rails裡頭很多外掛都叫做acts_as_xxx之類的,例如你的Model取名為Book的話,掛上acts_as_taggable就變成”可以加Tag的書”了。我真的愛死這種直覺又有效率的方式。

關於Acts as Taggable的安裝,網路上可以找到很多英文的說明文件,這裡不多描述,只要別打錯字就好。

以下是一些注意事項和偷懶的方式:


  • Posted in Plugins, on Sunday, May 06, 2007, at 07:46 AM.

bcrypt-ruby

by winson, about 1 year ago.

在Rails裡面處理密碼加密雖然已經夠簡單了,不過至少需要以下3個步驟:

1. 自己引用演算法(MD5之類的)或裝外掛(例如: Acts as Authenticated)。

2. 用before_filter。

3. 設定方法,例如用authorized或checkpassword檢查密碼。

大部分的做法會把Salt、加密過的密碼一起存入資料庫(hash(password, salt)),雖然被破解的機率不高,但有Salt就是有跡可循,而且利用SQL Injection搞不好可以一次把整個資料庫的密碼、Salt偷出來。


  • Posted in Gems, Ruby, on Friday, May 04, 2007, at 07:00 AM.

TextMate

by winson, about 1 year ago.

TextMate寫程式真的是太爽快了,用下去完全不可自拔,有人甚至為了要用TextMate而去買了一台Mac,所以TextMate號稱史上最貴的程式碼編輯器。

根據我的使用經驗,TextMate保證了一件事: 他保證程式愈寫愈快。

簡單的說,TextMate沿用emacs的哲學: 記憶快速鍵。


  • Posted in Mac, TextMate, on Thursday, May 03, 2007, at 02:38 AM.