ShowOff 的安裝與基本使用

這一次 RubyConf 2011 許多講者使用 Sinatra 設計自己的簡報,而ShowOff就是最主要的執行Ruby Gem。

這一次的講者都有提供 Slide 讓參與者下載參考與復習,而使用 ShowOff 的都把 Slide 放在 github 上 clone ,初學者可能覺的不懂?為啥不用 pdf 或是用 ppt?就別囉唆了,這樣用就對了。

先安裝 ShowOff 一些必要的東西:
[cc lang=”bash”]
sudo apt-get install libxml2-dev libxslt-dev
[/cc]

然後再安裝ShowOff
[cc lang=”bash”]sudo gem install showoff[/cc]

完成之後去講師提供的 Github 網址把 Slide 給clone下來,再去目錄裡頭下這個指令執行 Slide
[cc lang=”bash”]showoff serve[/cc]

用 WebBrowser 打入網址:http://localhost:9090 就可以看到 Slide 了。

ShowOff 的使用方法:
https://github.com/schacon/showoff

陣列與字串轉換的方法

許多程式都會想要節省一些資料庫的結構,通常都會用某值代表某狀態。如果經過應用功能的設定就要取代這字串當中的某值,所以要取其中的值來取代。

如果我在資料庫中有某個值是這樣:

101010

該如何將第三位數予以取代成這樣:

103010

以irb溝通範例如下:
[cc lang=”ruby”]
$ irb
ree-1.8.7-2011.03 :001 > val=101010;
ree-1.8.7-2011.03 :002 > str=val.to_s
=> “101010”
ree-1.8.7-2011.03 :003 > arr=str.split(//)
=> [“1”, “0”, “1”, “0”, “1”, “0”]
ree-1.8.7-2011.03 :004 > arr[2]=”3″
=> “3”
ree-1.8.7-2011.03 :005 > arr
=> [“1”, “0”, “3”, “0”, “1”, “0”]
ree-1.8.7-2011.03 :006 > str2=arr.join
=> “103010”
[/cc]

步驟說明:
取出某值Ruby會當做int型別。
用 to_s 函數變成String型別。
用split(//)轉成陣列。
然後在第三位數取換某值如:arr[2]=”3″,記得 3 要是字串型別。
最後用 join 函數從陣列組合成字串

以上做法可以不用code block 以節省程式碼,好看又不跳針~

由一串「數字」轉換「字串」的方法

在 Ruby 中因為可以不用優先宣告資料型態,所以時常會讓程式搞不清楚哪些該是 String 與 Integer ,因此 Ruby 提供 to_s() 這個函數以供轉換。

狀況如下:
[cc lang=”ruby”]
$ irb
ree-1.8.7-2011.03 :001 > myval=101010;
ree-1.8.7-2011.03 :002 > myval[0]
=> 0
ree-1.8.7-2011.03 :003 > myval[0,1]
ArgumentError: wrong number of arguments (2 for 1)
from (irb):5:in `[]’
from (irb):5
from :0
[/cc]

由於要取其中的字串是要用於 String 的類型才能讓 Ruby 正確取得該值。然而我想要做的是我要把這一串數值依照我要的位置取得正確的值,比如說第一位數的 1 與 0 代表 A 功能項目的權限,第二位數代表 B 功能的權限。

使用 to_s 解決方案如下:
[cc lang=”ruby”]
ree-1.8.7-2011.03 :001 > myval=101010;
ree-1.8.7-2011.03 :002 > myval.to_s[0,1]
=> “1”
ree-1.8.7-2011.03 :003 > myval.to_s[1,1]
=> “0”
ree-1.8.7-2011.03 :004 > myval.to_s[2,1]
=> “1”
ree-1.8.7-2011.03 :005 > myval.to_s[3,1]
=> “0”
ree-1.8.7-2011.03 :006 > myval.to_s[4,1]
=> “1”
ree-1.8.7-2011.03 :007 > myval.to_s[5,1]
=> “0”
ree-1.8.7-2011.03 :008 > myval.to_s[0,6]
=> “101010”
[/cc]

因此就可以當作字串來依序取單一值了。

Mongo DB 工程師的香蕉芒果

這個標題的梗請參照這個連結,俺就不用多說。工程師平日忙於工作與電腦會很少三餐均衡,為了要提醒我們多吃水果,所以,不知道梗是啥的英文語系國家就偏偏把這個水果代號附加上自家的產品(例:微軟的智慧手機 Windows Phone Mango 7 )。芒果的英文叫做 Mango 而日文叫做 マンコ (日文意思請參考這個連結),所以這個 MongoDB 的取名應該是故意的吧!!XD

Mongo DB 是個目前所NoSQL大推的文檔式資料庫也是非關聯式的資料庫,為何需要用到文檔式的資料庫?跟關聯式的資料庫又是有什麼差別?

非關聯資料庫的出現不是為了取代關聯資料庫。具體的說,MongoDB 並不支援複雜的事務,只支援少量的原子操作,所以不適用於“轉帳”等對事務和一致性要求很高的場合。所以純粹是只做成消息發佈、留言板、計數器這一類的App就不必使用MySQL那樣大材小用。

Ubuntu的t安裝方式可以參考這裡

安裝過程很簡單,完成之後下指令mongo即可進入shell模式跟它玩玩。
[cc lang=”bash”]
$ mongo
MongoDB shell version: 1.8.2
connecting to: test
[/cc]
Continue reading Mongo DB 工程師的香蕉芒果

Ruby Conf Taiwan 2011

大會報告!!

引頸齊盼的年度大會RubyConf Taiwan2011將於8/26與8/27在中央研究院人文館會議廳舉行,有興趣參與這年度大盛會的同好們趕快把握這次機會報名,名額有限,慢來只有再等一年!!
按此前往報名:http://rubyconf.tw/2011/

Day1演講者簡報內容 (已於會後公佈)

Continue reading Ruby Conf Taiwan 2011

如何用git 將原始碼上傳至 github

前幾天為了要學 Ruby on Rails 後來有遇到雷,尋求社群的朋友請教,如果程式寫到後來有出問題的話,不是把錯誤訊息po給對方猜看看哪裡有問題,不然就是等到下班大家有空的時候才把筆電打開一起來除錯。
後來同好建議我把原始碼傳到github來一同檢視,並且也能trace錯誤。原來github的功能就是這樣子用的啊 ~~
Continue reading 如何用git 將原始碼上傳至 github

初探Ruby on Rails

起源與命名

Ruby意指為紅寶石,而在電腦程式碼界裡頭是一個簡單快速,物件導向的指令碼語言。Ruby的起源可以追朔到1995年由日本工程師「松本行弘」開發釋出,並遵尋GPL協定和Ruby License 。Ruby的命名之所以稱之是因為Perl的發音與6月的誕生石pearl(珍珠)相同,因此Ruby以七月的誕生石ruby(紅寶石)命名。

Ruby的理念與語言特性

人們特別是電腦工程師們,常常從機器著想。他們認為:「這樣做,機器就能執行的更快;這樣做,機器執行效率更高;這樣做,機器就會怎樣怎樣怎樣。」實際上,我們需要從人的角度考慮問題,人們怎樣編寫程式或者怎樣使用機器上應用程式。我們是主人,他們是僕人。

減少鎖碎的時間來提升開發效率與直接溝通的人性化語法是Ruby開發時所遵照的理念。所以作者認為Ruby > (Smalltalk + Prel )/2 ,可表示為能像Smalltalk一樣完全、完整的物件導向,指令碼執行又有Perl強大的文字處理功能的程式語言。
Continue reading 初探Ruby on Rails

在rails使用mysql語法

這個語法放在我的桌面上一直很久了,一直沒機會用,先貼些語法留著,以後會有機會用到!

code 1
[cc lang=”ruby”]
namespace :db do
desc “Cleanup the database by setting rows to deleted when older than xxx. Defaults to development database. Set RAILS_ENV=[production, test, etc.] to override.”
task :cleanup => :environment do
sql = “在這裡寫 sql 語法”
# used to connect active record to the database
ActiveRecord::Base.establish_connection
ActiveRecord::Base.connection.execute(sql)
end
end
[/cc]

code 2
[cc lang=”ruby”]
def fetch_value
sql = ActiveRecord::Base.connection();
sql.execute “SET autocommit=0”;
sql.begin_db_transaction
id, value =
sql.execute(“SELECT id, value FROM sometable WHERE used=0 LIMIT 1 FOR UPDATE”).fetch_row;
sql.update “UPDATE sometable SET used=1 WHERE id=#{id}”;
sql.commit_db_transaction

value;
end[/cc]

這個用法可以用自己的查詢方法來撈資料,但,不建議使用來 alter 資料表,因為會對版本更動會有很不好的狀況。

詳情請看這裡:http://www.anyexample.com/webdev/rails/rails_and_sql_queries.xml