<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>{&#124;ihower.tw&#124; blog } &#187; Ruby</title>
	<atom:link href="http://ihower.tw/blog/archives/category/ruby/feed" rel="self" type="application/rss+xml" />
	<link>http://ihower.tw/blog</link>
	<description>Ruby, Ruby on Rails, Mac and Agile development</description>
	<lastBuildDate>Mon, 30 Aug 2010 14:49:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Ruby 1.9.2 和 Rails 3.0.0 正式版發佈</title>
		<link>http://ihower.tw/blog/archives/4736</link>
		<comments>http://ihower.tw/blog/archives/4736#comments</comments>
		<pubDate>Mon, 30 Aug 2010 00:48:51 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4736</guid>
		<description><![CDATA[歷經了兩年的開發，這個月 Ruby 社群有了兩個重大的世代交替消息： 2010/8/18 Ruby 1.9.2 發佈正式版 2010/8/29 Rails 3.0.0 發佈正式版 關於 Ruby 1.9，可以參考我之前的演講：Ruby 1.9 投影片，最重要的部分就是 M17N Encoding 了。至於安裝請服用 RVM。 關於 Rails3，可以參考我之前整理的： Rails3 Beta 發佈: 重點導覽 Rails3 RC 發佈: 重點導覽 如果是 Rails 初學者，可以直接看我正在撰寫的 Ruby on Rails 實戰手冊 一書。 BTW，JRuby 1.5.2 也是這個月發佈，而且 Rails3 也說支援 JRuby 1.5.2+，這個月真熱鬧。有人說今天就差 TextMate 2 發佈了 XDXD]]></description>
			<content:encoded><![CDATA[<p>歷經了兩年的開發，這個月 Ruby 社群有了兩個重大的世代交替消息：</p>
<ul>
<li>2010/8/18 <a href="http://www.ruby-lang.org/zh_TW/news/2010/08/18/ruby-1-9-2-/">Ruby 1.9.2 發佈正式版</a></li>
<li>2010/8/29 <a href="http://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s-done">Rails 3.0.0 發佈正式版</a></li>
</ul>
<p>關於 Ruby 1.9，可以參考我之前的演講：<a href="http://ihower.tw/blog/archives/2722">Ruby 1.9 投影片</a>，最重要的部分就是 M17N Encoding 了。至於安裝請服用 <a href="http://rvm.beginrescueend.com/">RVM</a>。</p>
<p>關於 Rails3，可以參考我之前整理的：</p>
<ul>
<li><a href='http://ihower.tw/blog/archives/3653'>Rails3 Beta 發佈: 重點導覽</a></li>
<li><a href='http://ihower.tw/blog/archives/4590'>Rails3 RC 發佈: 重點導覽</a></li>
</ul>
<p>如果是 Rails 初學者，可以直接看我正在撰寫的 <a href="http://ihower.tw/rails3/">Ruby on Rails 實戰手冊</a> 一書。</p>
<p>BTW，<a href="http://jruby.org/2010/08/20/jruby-1-5-2.html">JRuby 1.5.2</a> 也是這個月發佈，而且 Rails3 也說支援 JRuby 1.5.2+，這個月真熱鬧。<a href="http://twitter.com/ryanbigg/status/22478629033">有人</a>說今天就差 TextMate 2 發佈了 XDXD</p>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4736/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rails3 實戰手冊</title>
		<link>http://ihower.tw/blog/archives/4723</link>
		<comments>http://ihower.tw/blog/archives/4723#comments</comments>
		<pubDate>Sun, 22 Aug 2010 13:12:57 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4723</guid>
		<description><![CDATA[Rails3 實戰手冊，這是我最近一次上課的講義，也是預計年底出版的內容 (書名未定)。也因為會要出版的關係，這份手冊的內容是 Copyright 的，而不是我一般慣用的 CC 授權 (除了投影片仍用 CC 授權)，所以請不要轉載內文，更何況我會一直修訂啊。 之前應 OSSF 工作坊開了 Ruby/Rails 課程好幾次，所以陸陸續續開始寫投影片跟教材，加上這禮拜趁去台北市教師研習中心開課又重新好好整理了一次。目前狀況前幾章的完成度較高，會繼續努力修改成完整一本書的樣子，預計年底由 PcUSER 電腦人出版。 希望這本書能讓想入門 Rails 的朋友，可以實際應用在工作上無礙。有任何意見(書名有建議嗎?)，歡迎告訴我。]]></description>
			<content:encoded><![CDATA[<p><a href="http://ihower.tw/rails3/">Rails3 實戰手冊</a>，這是我最近一次上課的講義，也是預計年底出版的內容 (書名未定)。也因為會要出版的關係，這份手冊的內容是 Copyright 的，而不是我一般慣用的 CC 授權 (除了投影片仍用 CC 授權)，所以請不要轉載內文，更何況我會一直修訂啊。</p>
<p>之前應 <a href="http://www.openfoundry.org/">OSSF</a> 工作坊開了 Ruby/Rails 課程好幾次，所以陸陸續續開始寫投影片跟教材，加上這禮拜趁去台北市教師研習中心開課又重新好好整理了一次。目前狀況前幾章的完成度較高，會繼續努力修改成完整一本書的樣子，預計年底由 PcUSER 電腦人出版。</p>
<p>希望這本書能讓想入門 Rails 的朋友，可以實際應用在工作上無礙。有任何意見(書名有建議嗎?)，歡迎告訴我。</p>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4723/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Rails3 RC 發佈: 重點導覽</title>
		<link>http://ihower.tw/blog/archives/4590</link>
		<comments>http://ihower.tw/blog/archives/4590#comments</comments>
		<pubDate>Mon, 16 Aug 2010 12:30:35 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4590</guid>
		<description><![CDATA[Rails3 changesets View more presentations from Wen-Tien Chang. RailsConf 結束之後就嚷嚷要發佈的 Rails 3 Release Candidate 候選版本終於出了(好吧，是三個禮拜前的事情了，這篇拖稿了 XD)，如果你還沒進場，又是一個好時機。從我上次(疑，竟然是半年前了!!)整理 Rails3 Beta 發佈: 重點導覽 以來，又有了一些不錯的文件，經過筆者過濾挑選，重新整理 Rails3 的八大重點： 1. Bundler 2. ActiveRecord 的新 Query API 3. ActiveRecord 的新 Validation API 4. Views: XSS, Block Helper, UJS 5. I18n 6. 新的 Routing API 7. 新的 ActionMailer 8. Metal 如果喜歡看 screencast，官方也錄了 http://rubyonrails.org/screencasts/rails3。 [...]]]></description>
			<content:encoded><![CDATA[<div style="width:425px" id="__ss_4989776"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ihower/rails3-changesets" title="Rails3 changesets">Rails3 changesets</a></strong><object id="__sse4989776" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rails3-changesets-100817063914-phpapp02&#038;stripped_title=rails3-changesets" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4989776" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=rails3-changesets-100817063914-phpapp02&#038;stripped_title=rails3-changesets" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ihower">Wen-Tien Chang</a>.</div>
</div>
<p>RailsConf 結束之後就嚷嚷要發佈的 Rails 3 Release Candidate 候選版本<a href="http://weblog.rubyonrails.org/2010/7/26/rails-3-0-release-candidate">終於出了</a>(好吧，是三個禮拜前的事情了，這篇拖稿了 XD)，如果你還沒進場，又是一個好時機。從我上次(疑，竟然是半年前了!!)整理 <a href="http://ihower.tw/blog/archives/3653">Rails3 Beta 發佈: 重點導覽</a> 以來，又有了一些不錯的文件，經過筆者過濾挑選，重新整理 Rails3 的八大重點：</p>
<p>1. Bundler<br />
2. ActiveRecord 的新 Query API<br />
3. ActiveRecord 的新 Validation API<br />
4. Views: XSS, Block Helper, UJS<br />
5. I18n<br />
6. 新的 Routing API<br />
7. 新的 ActionMailer<br />
8. Metal</p>
<p>如果喜歡看 screencast，官方也錄了 <a href="http://rubyonrails.org/screencasts/rails3">http://rubyonrails.org/screencasts/rails3</a>。</p>
<h3>安裝</h3>
<p> 升級到 ruby 1.8.7 或 1.9.2，以及 rubygems 要 1.3.6 以上</p>
<pre>
<code>
gem update --system
gem install rails --pre
gem install mysql2
</code>
</pre>
<p>開始改用 mysql2 gem 吧，這一套修正了 multithreaded 及 Ruby 1.9 的 Encoding 問題</p>
<h3>升級</h3>
<p>如果是升級，重點 Bundler 和 Views 部分必須先搞懂，不然完全動不了。其他 API 變更的部份(Routing, ActiveRecord, ActionMailer) 在 Rails 3.1 之前暫時是可以 works。當然有空還是趕快研究一下囉。以下是兩篇有關升級的新文章：</p>
<p>* <a href="http://www.railsdispatch.com/posts/upgrading-a-rails-2-app-to-rails-3">Upgrading a Rails 2 App to Rails 3</a><br />
* <a href="http://www.simonecarletti.com/blog/2010/07/the-way-to-rails-3/">The Road to Rails 3: make your Rails 2.3 project more Rails 3 oriented</a></p>
<p>Rails 本身升級是沒有問題，怕的是周邊的 Plugin 沒能跟上。<a href="http://railsplugins.org">http://railsplugins.org</a> 有整理一些，可以找找 github 上有沒有 branch，而 Rails3 透過 Bundle 安裝還蠻方便的。</p>
<h3>1. Bundler</h3>
<p>* <a href="http://ihower.tw/blog/archives/4464">Bundler: Rails3 用來管理 Gem dependencies 的神器</a></p>
<h3>2. ActiveRecord Query Interface</h3>
<p>Rails2 的 finders, named_scope, with_scope 等用法，在 Rails3 統一為一種 Relation 用法，可以更容易做 composable(chainable)、Decoupled from SQL 以及 Lazy Loading。另外如果是有傳參數的 scope，也偏好定義成 class method，而不是 scope + lambda 了。以下是一些不錯的文章：</p>
<p>* <a href="http://m.onkey.org/2010/1/22/active-record-query-interface">Active Record Query Interface 3.0</a> 基本用法介紹<br />
* <a href="http://www.railsdispatch.com/posts/activerelation">ActiveRelation: ActiveRecord Gets a Facelift</a> 基本用法介紹<br />
* <a href="http://asciicasts.com/episodes/202-active-record-queries-in-rails-3">Active Record Queries in Rails 3</a> 基本用法介紹<br />
* <a href="http://asciicasts.com/episodes/215-advanced-queries-in-rails-3">Advanced Queries in Rails 3</a> 進階用法介紹<br />
* <a href="http://edgerails.info/articles/what-s-new-in-edge-rails/2010/02/23/the-skinny-on-scopes-formerly-named-scope/">The Skinny on Scopes (Formerly named_scope)</a> 進階用法介紹，跨 Model 的 Scope 太厲害了。<br />
* <a href="http://blog.plataformatec.com.br/2010/07/new-active-record-scoping-syntax/">New Active Record scoping syntax</a> 如果你在 Rails2 有使用 with_scope 或  with_exclusive_scope( :find => x, :create => y ) 請讀這篇。新的 Rails3 建議你改用 scoping, unscoped, create_with 等新用法，因為舊的用法行為有差異。    </p>
<h3>3. ActiveRecord Validation</h3>
<p>* AR Validation 提供了新的 API 只要一行就可以整合同一個屬性的多個驗證，可以減少行數。<br />
* 可以客製 EachValidator 整合進上述的新 API 之中<br />
* 可以客製 Validator 包裝一大堆 validations，例如 validates_with ReallyComplexValidator<br />
* save(false) 終於拿掉了，要跳過驗證儲存請 save(:validate => false)</p>
<p>* <a href="http://asciicasts.com/episodes/211-validations-in-rails-3">Validations in Rails 3</a><br />
* <a href="http://omgbloglol.com/post/392895742/improved-validations-in-rails-3">Improved validations in Rails 3</a><br />
* <a href="http://lindsaar.net/2010/1/31/validates_rails_3_awesome_is_true">validates :rails_3, :awesome => true</a><br />
* <a href="http://edgerails.info/articles/what-s-new-in-edge-rails/2009/08/11/what-s-new-in-edge-rails-independent-model-validators/">Independent Model Validators</a></p>
<p>另外就是驗證錯誤的 API 也改了：</p>
<p>* Errors#on 跟 on_base 拿掉了，請改用 Errors#[]<br />
* Errors#add_to_base(msg) 拿掉了，請改用 Errors#[:base] << msg<br />
* Views 裡面常用的 error_messages_for 跟 error_message_on Helper 被拿掉了，請自己寫過(你可以參考 scafffold 產生出來的程式)或裝回 <a href="http://github.com/rails/dynamic_form">legacy plugin</a>。</p>
<h3>4. View</h3>
<p>* <a href="http://ihower.tw/blog/archives/3917">Rails3 如何換使用 jQuery</a><br />
* <a href="http://www.simonecarletti.com/blog/2010/06/unobtrusive-javascript-in-rails-3/">Unobtrusive JavaScript in Rails 3</a><br />
* 所有有傳 code block 的 Helper 都改成 &lt;%= 的形式，<br />
請參考 <a href="http://ihower.tw/blog/archives/4225">Rails3 如何寫 Helper 可以傳 Block 參數</a> 一文<br />
* Rails3 處理 XSS: <a href="http://www.railsdispatch.com/posts/security">Rails 3 Security Strategy</a>，HTML 預設都會逸出了，不要逸出請用 raw Helper 或字串的 html_safe! 方法。</p>
<h3>5. I18n</h3>
<p>* 詞彙檔中的變數替換由 {{}} 變成 %{} 了。這有點惱人，我還碰到 redmine 的問題(redmine 使用 Rails2，但是卻因為裝了 Rails3 所以 i18n 也升級到 0.4.1 版本就爆炸了)<br />
* 提供更多 backends，例如 <a href="http://github.com/svenfuchs/i18n/tree/master/lib/i18n/backend">ActiveRecord</a><br />
* 加速功能!! <a href="http://blog.plataformatec.com.br/2009/12/run-i18n-run/">Run, I18n, run!</a></p>
<h3>6. Routing</h3>
<p>* <a href="http://ihower.tw/blog/archives/3653">Rails3 重點導覽：新的 Routes</a><br />
* <a href="http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/">The Lowdown on Routes in Rails 3</a> 很詳盡的用法介紹<br />
* <a href="http://www.railsdispatch.com/posts/rails-routing">The Powerful New Rails Router</a> 進階用法<br />
* <a href="http://asciicasts.com/episodes/222-rack-in-rails-3">Rack in Rails 3</a> 結合 Rack 端點的應用</p>
<h3>7. ActionMailer</h3>
<p>底層由 TMail 換 <a href="http://www.rubyinside.com/ruby-email-library-2782.html">Mail gem</a>，一整個砍掉重練 API 大改。原本動態的 Notifiter.deliver_welcome_email 寫法變成 Notifiter.welcome_email.deliver，其中的 Notifiter.welcome_email 是一個 Mail::Message 物件。</p>
<p>* <a href="http://www.railsdispatch.com/posts/actionmailer">A Whole New ActionMailer</a><br />
* <a href="http://asciicasts.com/episodes/206-action-mailer-in-rails-3">Action Mailer in Rails 3</a><br />
* <a href="http://gist.github.com/281420">一個範例</a><br />
* <a href="http://lindsaar.net/2010/6/7/inline-attachments-for-actionmailer">Inline Attachments for ActionMailer</a></p>
<h3>8. Metal</h3>
<p>* <a href="http://ihower.tw/blog/archives/4561">Rails3: 新的 Metal 機制</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4590/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ruby Taiwan 近況及 Ruby Tuesday #13</title>
		<link>http://ihower.tw/blog/archives/4614</link>
		<comments>http://ihower.tw/blog/archives/4614#comments</comments>
		<pubDate>Tue, 03 Aug 2010 15:09:30 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4614</guid>
		<description><![CDATA[Update(2010/8/17): 投影片請見 Rails3 RC 發佈: 重點導覽 最近花了些時間弄了兩個 Ruby Taiwan 子站台。一個是 找文件，主要是翻譯文件，也包括了 Ruby 中文官網。另一個則是 找工作，一個免費的 Job Board。請大家多多支持。 另外就是 Ruby Tuesday 聚會第十三場確定了，因應 Rails3 RC 發佈，這一次的主題為 Rails3，包含三場小演講： * ihower: Rails3 changesets * tsechingho: Rails 3 專案產生器 (generator 實例應用) * xdite: Upgrading to Rails3 時間: 2010/8/17（週二）晚上七點到九點半。 地點: 台北市 果子咖啡 報名網頁: http://registrano.com/events/ruby-tuesday-13 還有，我開了一個唯讀的 Mailing list 在 http://groups.google.com/group/ruby-taiwan，方便大家第一時間收到 Ruby Taiwan 的重要訊息，例如有什麼活動之類的。]]></description>
			<content:encoded><![CDATA[<p>Update(2010/8/17): 投影片請見 <a href="http://ihower.tw/blog/archives/4590">Rails3 RC 發佈: 重點導覽</a></p>
<p>最近花了些時間弄了兩個 <a href="http://ruby.tw">Ruby Taiwan</a> 子站台。一個是 <a href="http://guides.ruby.tw">找文件</a>，主要是翻譯文件，也包括了 <a href="http://www.ruby-lang.org/zh_TW/">Ruby 中文官網</a>。另一個則是 <a href="http://jobs.ruby.tw">找工作</a>，一個免費的 Job Board。請大家多多支持。</p>
<p>另外就是 Ruby Tuesday 聚會第十三場確定了，因應 Rails3 <a href="http://weblog.rubyonrails.org/2010/7/26/rails-3-0-release-candidate">RC</a> 發佈，這一次的主題為 Rails3，包含三場小演講：</p>
<p>* ihower: Rails3 changesets<br />
* <a href="http://github.com/tsechingho">tsechingho</a>: Rails 3 專案產生器 (generator 實例應用)<br />
* <a href="http://blog.xdite.net/">xdite</a>: Upgrading to Rails3</p>
<p>時間: 2010/8/17（週二）晚上七點到九點半。<br />
地點: 台北市 果子咖啡<br />
報名網頁: <a href="http://registrano.com/events/ruby-tuesday-13">http://registrano.com/events/ruby-tuesday-13</a></p>
<p>還有，我開了一個唯讀的 Mailing list 在 <a href="http://groups.google.com/group/ruby-taiwan">http://groups.google.com/group/ruby-taiwan</a>，方便大家第一時間收到 Ruby Taiwan 的重要訊息，例如有什麼活動之類的。</p>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4614/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bundler: Rails3 用來管理 Gem dependencies 的神器</title>
		<link>http://ihower.tw/blog/archives/4464</link>
		<comments>http://ihower.tw/blog/archives/4464#comments</comments>
		<pubDate>Tue, 01 Jun 2010 10:33:14 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4464</guid>
		<description><![CDATA[Update(2010/7/27): Bundle 1.0.0 之後不需要 bundle lock 了，只要 bundle install 就會自動 lock。預設都裝到 system gem 的位置。 Bundler 是一套為了 Rails3 所打造的全新 Gem dependencies 管理工具：一套基於 Rubygems 的更高階套件管理工具，適合讓 Application 管理多套 Gems 依存關係的複雜情境。而你在 Rails3 中 (Bundler 不只用在 Rails3，其他例如 Sinatra 或是 Rails2 也都可以使用) 要使用的 Gems，也都必須宣告在它的 Gemfile 裡，沒寫在裡面的話，就算手動 require 也找不到。這跟已往你可以直接 require 任意 rubygems 不同，在使用 Bundler 的環境中，要 require 什麼 rubygems 必須透過 Gemfile 管理。 Gemfile [...]]]></description>
			<content:encoded><![CDATA[<p>Update(2010/7/27): <a href="http://yehudakatz.com/2010/07/26/whats-new-in-bundler-1-0-0-rc-1/">Bundle 1.0.0</a> 之後不需要 bundle lock 了，只要 bundle install 就會自動 lock。預設都裝到 system gem 的位置。</p>
<p><a href="http://gembundler.com/ "><img src="http://gembundler.com/images/bundler-small.png"></a></p>
<p><a href="http://gembundler.com/ ">Bundler</a> 是一套為了 Rails3 所打造的全新 Gem dependencies 管理工具：一套基於 Rubygems 的更高階套件管理工具，適合讓 Application 管理多套 Gems 依存關係的複雜情境。而你在 Rails3 中 (Bundler 不只用在 Rails3，其他例如 Sinatra 或是 Rails2 也都可以使用) 要使用的 Gems，也都必須宣告在它的 Gemfile 裡，沒寫在裡面的話，就算手動 require 也找不到。這跟已往你可以直接 require 任意  rubygems 不同，在使用 Bundler 的環境中，要 require 什麼 rubygems 必須透過 Gemfile 管理。</p>
<p>Gemfile 的寫法大致如下：</p>
<pre>
<code>
  # 第二個參數可以指定版本
  gem "rails", "3.0.0.beta3" 

  # 如果 require 的檔名不同，可以加上 :require
  gem "sqlite3-ruby", :require => "sqlite3"

  # 可以用 Git 當做來源，甚至可以指定 branch, tag 或 ref。
  gem 'authlogic', :git => 'git://github.com/odorcicd/authlogic.git',
                            :branch => 'rails3'

  # 可以直接用電腦裡的其他目錄
  gem "rails", :path => '/Users/ihower/github/rails'

  # Group 功能可以讓特定環境才會載入
  group :test do
    gem "rspec-rails", ">= 2.0.0.beta.8"
    gem "webrat"
  end

</code>
</pre>
<p>設定好 Gemfile 之後，我們有一些指令可以用：</p>
<ul>
<li>bundle check 可以檢查目前缺少哪些 rubygem，然後你可以手動透過 sudo gem install 安裝到系統裡。</li>
<li>bundle install 安裝所有需要的套件。如果系統已經有裝了，就用系統的，不然會裝到 $BUNDLE_PATH 下，預設是你家目錄 ~/.bundle (因此請不要用 sudo 執行 bundle install)。如果來源是 git (例如上述的 authlogic)，每次執行 bundle install 就會自動 git pull 更新，十分方便。</li>
<li>bundle lock 和 bundle unlock 會做 snapshotting 記錄下目前所有套件的版本在 Gemfile.lock，建議這個檔案也一起 commit 出去。適合要佈署或多人開發時，可以確保大家的版本都一致。</li>
<li>bundle package 如果你的 Server 沒聯外網路，或是怕 rubygems.org 連不上，可以用這個指令把所有套件都打包到 vendor/cache 下。基本上，跟以往 Rails 1.X 2.X 時代佈署時會建議你盡量打包依存套件並 commit 出去，在使用 Bundler 後已經大大地不需要了，因為透過 bundle lock 我們就可以確保每台機器上執行的套件版本一致。</li>
<li>bundle exec 因為 Bundle 可以說是獨立出一個套件環境，所以如果有非 Rails 的指令需要執行，而且你的系統 Gems 又沒有安裝，那就會需要透過 bundle exec XXX 來執行。例如 bundle exec cucumber。</li>
<li>bundle show gem_name 可以查看這個 gem 的目錄位置</li>
<li>bundle open gem_name 可以用編輯器打開這個 gem 的目錄</li>
</ul>
<p>開發 Rails3 實際用一陣子之後，發現很偏好將套件裝成 Gem 了(如果有提供 Gem 版的話)，之前 Rails 1.X 2.X 時代會比較喜歡裝成 Plugin，因為想說別人要裝 Gem 可能會有問題，以及佈署也怕出包。但是有了 Bundler 之後，只要 Bundle install 就可以裝好並確保大家的版本一致會動。不像已往的 rake gems:install 超不可靠。可以透過 Bundle 裝這些依存套件也減少了需要 commit 出去的 vendor/plugin 檔案，讓你的專案 repository 變乾淨了。另外，我也超喜歡的 Bundler 可以支援 Git 來源，只要 bundle install 就會更新，不需要額外的管理工具去煩惱更新 plugins。</p>
<p>其他推薦閱讀:</p>
<ul>
<li><a href="http://www.railsdispatch.com/posts/bundler">Library Management Gets an Update in Rails 3</a>: 一般性介紹</li>
<li><a href="http://asciicasts.com/episodes/201-bundler">ASCIIcasts 201: Bundler </a>: 一般性介紹</li>
<li><a href="http://yehudakatz.com/2009/11/03/using-the-new-gem-bundler-today/"> Using the New Gem Bundler Today</a>: 有 Bundler 的設計目標，推薦看第一段即可。</li>
<li><a href="http://yehudakatz.com/2010/02/09/using-bundler-in-real-life/">Using Bundler in Real Life</a>:  Bundle 的使用情境介紹，非常推薦一看</li>
<li><a href="http://yehudakatz.com/2010/04/12/some-of-the-problems-bundler-solves/">Some of the Problems Bundler Solves</a>: 深入舉例 Bundler 要解決的問題，為什麼單靠 Rubygems 和之前的 config.gem 做不到。有時間的話，也推薦一看。
<p>   例如，其中最主要解決的問題是，目前的 Rubygems 同一時間只能 require 一個版本，所以如果你有兩個套件有不同版本的需求，例如一個套件指定需要 rspec 1.1.12，另一個指定需要 1.2.0。那就爆炸了，會出現 can&#8217;t activate rspec(= 1.1.12 runtime), already activated rspec-1.2.0 的錯誤。</li>
<li><a href="http://yehudakatz.com/2010/04/21/named-gem-environments-and-bundler">Named Gem Environments and Bundler</a>: 深入解釋了 Bundler 如何處理 dependency 問題</li>
<li><a href="http://yehudakatz.com/2010/05/09/the-how-and-why-of-bundler-groups/">The How and Why of Bundler Groups</a>: 深入解釋 Group 功能</li>
<li>Yuhada 在 RubyConf 2009 的演講： <a href="http://rubyconf2009.confreaks.com/20-nov-2009-10-25-polishing-rubygems-yehuda-katz.html">Polishing Rubygems</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4464/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>演講: Designing Beautiful Ruby APIs @ RubyConf China 2010</title>
		<link>http://ihower.tw/blog/archives/4494</link>
		<comments>http://ihower.tw/blog/archives/4494#comments</comments>
		<pubDate>Fri, 28 May 2010 08:56:02 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4494</guid>
		<description><![CDATA[感謝 Shanghai on Rails 社群再度邀請我前往上海，參加今年的 RubyConf China 2010 大會，日期是 2010/6/26。 我的演講的題目和上個月我在 RubyConf Taiwan 一樣是 Designing Beautiful Ruby APIs，所以可以先預習我之前的投影片。雖然題目一樣，不過內容應該會再好好編排過，預期再加入一些 DSL 素材範例。 說到上海，好像應該去世博會走一走(?)]]></description>
			<content:encoded><![CDATA[<p><a href="http://rubyconfchina.org"><img src="http://ihower.tw/blog/wp-content/uploads/2010/05/rubyconfchinalogo.png" alt="" title="rubyconfchinalogo" width="250" height="156" class="alignnone size-full wp-image-4523" /></a></p>
<p>感謝 <a href="http://groups.google.com/group/shanghaionrails?pli=1">Shanghai on Rails</a> 社群再度邀請我前往上海，參加今年的 <a href="http://rubyconfchina.org">RubyConf China 2010</a> 大會，日期是 2010/6/26。</p>
<p>我的演講的題目和上個月我在 <a href="http://rubyconf.tw">RubyConf Taiwan</a> 一樣是 Designing Beautiful Ruby APIs，所以可以先預習我之前的<a href="http://www.slideshare.net/ihower/designing-ruby-apis">投影片</a>。雖然題目一樣，不過內容應該會再好好編排過，預期再加入一些 DSL 素材範例。</p>
<p>說到上海，好像應該去世博會走一走(?)</p>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4494/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rubygems 套件管理工具</title>
		<link>http://ihower.tw/blog/archives/4496</link>
		<comments>http://ihower.tw/blog/archives/4496#comments</comments>
		<pubDate>Fri, 28 May 2010 08:32:30 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4496</guid>
		<description><![CDATA[(本篇的對象是 Library 開發者，如果您是單純的 Library 使用者，可以先參考 RubyGems 簡介) 套句流行的話，RubyForge Must Die!! 大概是今年二月底的事情 (外電報導、簡中翻譯)，新的 gemcutter.org 取代了 rubyforge.org，目前已經成為 Ruby 社群的官方 Gem 儲存庫：http://rubygems.org，包括 gems.rubyforge.org 也是指向 rubygems.org。 RubyForge.org 最大的問題之一，就是他不是用 Ruby 寫的(無誤)，而新的 rubygems.org，使用了 Rails 當做前台，以及 Sinatra 當做 Gem server，背後技術包括 delayed::job 跟 Amazon S3 來處理所有上傳的 Gem package，讓發佈 Gem 的速度也大大提昇。整個站甚至也 open source 出來在 http://github.com/qrush/gemcutter。問題之二，就是 RubyForge 的介面實在不怎麼樣，功能也雜亂，而新 rubygems.org 有著全新的簡潔介面，提供具有親和力的資訊。問題之三，就是 API 了，新的 rubygems.org 配合新版的 rubygems [...]]]></description>
			<content:encoded><![CDATA[<p>(本篇的對象是 Library 開發者，如果您是單純的 Library 使用者，可以先參考 <a href="http://ihower.tw/blog/archives/1665">RubyGems 簡介</a>)</p>
<p>套句流行的話，RubyForge Must Die!! 大概是今年二月底的事情 (<a href="http://www.infoq.com/news/2010/03/rubygems">外電報導</a>、<a href="http://www.infoq.com/cn/news/2010/04/rubygems">簡中翻譯</a>)，新的 gemcutter.org 取代了 rubyforge.org，目前已經成為 Ruby 社群的官方 Gem 儲存庫：<a href="http://rubygems.org">http://rubygems.org</a>，包括 gems.rubyforge.org 也是指向 rubygems.org。</p>
<p>RubyForge.org 最大的問題之一，就是他不是用 Ruby 寫的(無誤)，而新的 <a href="rubygems.org">rubygems.org</a>，使用了 Rails 當做前台，以及 Sinatra 當做 Gem server，背後技術包括 delayed::job 跟 Amazon S3 來處理所有上傳的 Gem package，讓發佈 Gem 的速度也大大提昇。整個站甚至也 open source 出來在 <a href="http://github.com/qrush/gemcutter">http://github.com/qrush/gemcutter</a>。問題之二，就是 RubyForge 的介面實在不怎麼樣，功能也雜亂，而新 rubygems.org 有著全新的簡潔介面，提供具有親和力的資訊。問題之三，就是 API 了，新的 rubygems.org 配合新版的 rubygems library (1.3.6以上，如果你還沒升級，請打 sudo gem update &#8211;system)，讓發佈 Gem 變得非常簡單。</p>
<p>還有個插曲，之前 <a href="http://github.com">github.com</a> 有一度可以支援當做 Gem server，不過自從 gemcutter 計畫展開之後，他們就決定取消這個功能，請見 <a href="http://hasmygembuiltyet.org">http://hasmygembuiltyet.org</a>。</p>
<h3>如何打包及發佈 Gem</h3>
<p>說到發佈 Gem 啊，我一直以為是有點麻煩的事情，最早我曾經用過 <a href="http://rubygems.org/gems/hoe">Hoe</a>，也看過 <a href="http://github.com/technicalpickles/jeweler">jeweler</a> 這個工具。不過一直到前一陣子看了 Yehuda 的 <a href="http://yehudakatz.com/2010/04/02/using-gemspecs-as-intended/">Using .gemspecs as Intended</a> 這篇文章之後，才發現其實很簡單，根本不需要用到其餘的工具啊，那到底要怎麼做呢?</p>
<p>首先，我們要把你的 library 打包成一個 Gem package，假設我們的 library 叫 foobar 好了：</p>
<p>步驟一： 撰寫 foobar.gemspec 檔，這是一個描述 Gem package 的 metadata 檔案。以下是一個基本夠用的範例。如同 Yehuda 所說的，你其實不需要用其他的工具來產生這個 gemspec 檔案。</p>
<pre>
<code>
 Gem::Specification.new do |s|
  s.name        = "foobar"
  s.version     = "1.1.1"
  s.date        = "2010-05-14"
  s.authors     = ["Wen-Tien Chang"]
  s.email       = ["ihower@gmail.com"]
  s.homepage    = "http://example.org"
  s.summary     = "blah"
  s.description = "blah blah"

  # s.add_dependency('log4r', '>= 1.0.5')
  # s.add_dependency('log4r', '~> 1.1.0') # 表示 1.1.y 都可以
  # s.add_dependency('log4r', '~> 1.0') # 表示 1.x.y 都可以
  # s.add_runtime_dependency # add_dependency 的別名
  # s.add_development_dependency # 只有在 gem install xxx --development 才會安裝

  s.files = Dir.glob("{lib}/**/*") + %w(LICENSE README) # 只有列在這裡的檔案會打包到 Gem package 裡面。
  # s.executables = [] # 放在 bin 下的執行檔有哪些
end
</code>
</pre>
<p>   更多完整的規格請參考 <a href="http://docs.rubygems.org/read/chapter/20">http://docs.rubygems.org/read/chapter/20</a></p>
<p>步驟二：執行 gem build foobar.gemspec 便會包裝出單一 Gem package 套件檔 foobar-1.1.1.gem</p>
<p>這時候，你就可以透過 gem install foobar-1.1.1.gem 來安裝到自己的電腦了。如果跑 gem server 起來，別人也可以透過你的 gem server 安裝這個套件 (gem install GEMNAME &#8211;source http://your_gem_server_host:8808)。</p>
<p>接下來，怎麼發佈 Gem 到 <a href="http://rubygems.org">http://rubygems.org</a> 讓全世界的開發者都可以安裝你的大作呢? 在 Rubygems 1.3.6 之後已經內建有 gem push 功能：</p>
<p>步驟一：在 http://rubygems.org/ 註冊一個帳號，拿到 API key，加到 ~/.gem/credentials 裡。<br />
步驟二：執行 gem push foobar-1.1.1.gem 就會發佈出去了</p>
<h3>Ruby Library 最佳實務</h3>
<p>一個 Ruby library 的組成，大致都是這樣的：</p>
<p>* README<br />
* lib 目錄和會被使用者 require 的檔案，例如 lib/foobar.rb<br />
* test 目錄 (optional)<br />
* example (optional)<br />
* bin 目錄 (有執行檔的話)<br />
* LICENSE</p>
<p>如果你沒什麼概念，可以看看 <a href="http://blog.rubybestpractices.com/posts/gregory/022-rbp-now-open.html">Ruby Best Practice</a> 一書的第八章 Skillful Project Maintenance，作者講解了一個 Ruby Library Project 的組成，還有介紹到如何用 RDoc 跟 Rakefile。如果你比較初學，建議一看。</p>
<p>接著 <a href="http://weblog.rubyonrails.org/2009/9/1/gem-packaging-best-practices">Gem Packaging: Best Practices</a> 這一篇非常值得一看，介紹一些最佳實務，像是：</p>
<p>1. 不要在你的 library 裡依賴 rubygems。例如 require &#8216;rubygems&#8217;、rescue Gem::Load、gem &#8220;foo&#8221; 等等都不要用<br />
2. 因為 lib 這一層目錄會進 $LOAD_PATH，所以不要放不是要給終端使用者 require 的檔案在 lib 下 (而且命名也不要太 general，不然可能會跟其他 library 撞到名字)，其他檔案用 module namespace 的方式放到 lib 的子目錄下。例如你看 <a href="http://github.com/nex3/haml">http://github.com/nex3/haml</a> 的 lib 下就只放了 haml.rb 跟 sass.rb。<br />
3. 承上，在 foobar.rb 中如果要 require 其他檔案，不需要寫 File.dirname(__FILE__) ，直接 require &#8220;foo/bar&#8221; 就會 require lib/foo/bar.rb 這個檔案了。</p>
<p>如果你想繼續多了解一些故事，可以看看：</p>
<p>* Gemcutter(rubygems.org) 作者在 RubyConf 2009 的演講：<a href="http://rubyconf2009.confreaks.com/20-nov-2009-11-15-gemcutter-the-next-step-in-gem-hosting-nick-quaranto.html">Gemcutter: The Next Step in Gem Hosting</a> 以及他的投影片 <a href="http://next.heroku.com/">http://next.heroku.com/</a><br />
* Yuhada 在 RubyConf 2009 的演講： <a href="http://rubyconf2009.confreaks.com/20-nov-2009-10-25-polishing-rubygems-yehuda-katz.html">Polishing Rubygems</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4496/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>我的 QA 時間：Ruby Wednesday 定期聚會</title>
		<link>http://ihower.tw/blog/archives/4454</link>
		<comments>http://ihower.tw/blog/archives/4454#comments</comments>
		<pubDate>Wed, 12 May 2010 13:31:51 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4454</guid>
		<description><![CDATA[最近其實收到不少人來信問 Rails 問題，但是有些問題(特別是入門問題)用 E-mail 往返實在太沒效率了(一來我看不到你的程式碼，二來我也不了解你的程度)，如果當面溝通跟示範，想必能夠更快更全面地解決你的問題。對我來說，當面聊也比較有趣，能有更多的交流學習。 完整的公告詳見 Ruby Wednesday 定期聚會，我每週三晚上會出現在生態綠，如果有意外的話(例如：那天我沒空)，請注意我的 Twitter。]]></description>
			<content:encoded><![CDATA[<p>最近其實收到不少人來信問 Rails 問題，但是有些問題(特別是入門問題)用 E-mail 往返實在太沒效率了(一來我看不到你的程式碼，二來我也不了解你的程度)，如果當面溝通跟示範，想必能夠更快更全面地解決你的問題。對我來說，當面聊也比較有趣，能有更多的交流學習。</p>
<p>完整的公告詳見 <a href="http://ruby.tw/post/592398890/ruby-wednesday">Ruby Wednesday 定期聚會</a>，我每週三晚上會出現在生態綠，如果有意外的話(例如：那天我沒空)，請注意我的 <a href="http://twitter.com/ihower">Twitter</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4454/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RubyConf Taiwan 日記與感言</title>
		<link>http://ihower.tw/blog/archives/4272</link>
		<comments>http://ihower.tw/blog/archives/4272#comments</comments>
		<pubDate>Sun, 09 May 2010 16:43:03 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4272</guid>
		<description><![CDATA[RubyConf Taiwan 2010 結束兩個禮拜了，來把日記寫一寫好了。 在台灣辦一場 RubyConf 的這個想法，最早最早是在去年四月 OSDC.TW 中，高橋征義先生在他的 Lightning talk 介紹了日本的 RubyKaigi 跟 Regional RubyKaigi (當時他的投影片)，他說辦 Meetings 是非常有趣的!! 而台灣的 Ruby 社群既然有 Ruby Tuesday 聚會，那麼何不考慮來辦 conference 呢 (事實上，他這場talk，我覺得完全打中我啊~~~ 讓我去了日本參加 RubyKaigi，讓我辦了 RubyConf Taiwan&#8230;&#8230; XDXD )。其實會後高橋才認識我就是 Ruby Tuesday 的主辦人，他也對我當時演講的 Ruby 1.9 十分讚賞。充滿熱血的我就在那時候種了 RubyConf Taiwan 的火苗 XDXD 時光飛逝到了七月，我第一次出國，去了東京參加 RubyKaigi。印象最深刻的是，當 Matz 出場時，全場六七百人的歡聲雷動，讓我感動地留下淚來，我也是這偉大的社群一份子 XDXD 當時也碰到了高橋先生，允諾了他明年 RubyKaigi 時，我還要來，而且要投 paper 上台演講 (喔，我剛投了)。 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://ihower.tw/blog/wp-content/uploads/2010/05/rubyconftw-ihower-300x223.jpg" alt="" title="喜歡 Ruby 嗎? 請舉手。(設計對白)" width="300" height="223" /></p>
<p><a href="http://rubyconf.tw/2010">RubyConf Taiwan 2010</a> 結束兩個禮拜了，來把日記寫一寫好了。<br />
<span id="more-4272"></span><br />
在台灣辦一場 RubyConf 的這個想法，最早最早是在去年四月 OSDC.TW 中，高橋征義先生在他的 Lightning talk 介紹了日本的 <a href="http://rubykaigi.org">RubyKaigi</a> 跟 <a href="http://regional.rubykaigi.org/">Regional RubyKaigi</a> (當時他的<a href="http://www.slideshare.net/takahashim/rubykaigi-rubyhuiyi-1328259">投影片</a>)，他說辦 Meetings 是非常有趣的!! 而台灣的 Ruby 社群既然有 Ruby Tuesday 聚會，那麼何不考慮來辦 conference 呢 (事實上，他這場talk，我覺得完全打中我啊~~~ 讓我去了日本參加 RubyKaigi，讓我辦了 RubyConf Taiwan&#8230;&#8230; XDXD )。其實會後高橋才認識我就是 Ruby Tuesday 的主辦人，他也對我當時演講的 Ruby 1.9 十分讚賞。充滿熱血的我就在那時候種了 RubyConf Taiwan 的火苗 XDXD</p>
<p>時光飛逝到了七月，我第一次出國，去了東京參加 RubyKaigi。印象最深刻的是，當 Matz 出場時，全場六七百人的歡聲雷動，讓我感動地留下淚來，我也是這偉大的社群一份子 XDXD 當時也碰到了高橋先生，允諾了他明年 RubyKaigi 時，我還要來，而且要投 paper 上台演講 (喔，我剛投了)。</p>
<p>九月在 Y! 的活動碰到了 OSDC.TW 的主辦人 hcchien，他慫恿我來辦 RubyConf，最重要的目的是邀請 Matz 來 (因為 Matz 海外只出席 Ruby 研討會，可惜後來我也沒成功，因為週日他不出門)。他可以支援我場務，像是場地跟食物等等，並告訴我辦 Conference 很簡單啦~~~ 我只要瞧好一整天的講者就好了(我果然很好騙)。然後那時候也剛好辦完 Ruby Tuesday #6 很成功，辦完之後很 high，所以腦袋開始認真思考要來辦 RubyConf 了&#8230; XDXD</p>
<p>臨界點是，我又碰到高橋了，我十月去了一趟上海參加 KungfuRails 大會，剛好我們都是受邀講者。我一時逞強就跟他說，我們要辦 RubyConf Taiwan 了，會跟 OSDC.TW 一起這樣。話說出口就非辦不可啦 :p</p>
<p>找講者倒是沒有太困難，一天的議程要安排九位，其中有五位我早已認識，於是再邀請了王牌 Gregg Pollack，加上高橋推薦的角谷先生(我在 RubyKaigi 也聽過他的演講，非常有熱情!)、Foy 剛好在上海出差所以回程順道來台灣、新井前一陣子剛好也來台灣，透過 deduce 所以知道了 RubyConf。大概今年一月，我就已經敲定講者群了。</p>
<p>初期對於找贊助還蠻樂觀的，但是結果非常慘，幾乎一家都找不到，真是絕望啊。最後一個月透過 Cardinal blue 找到了 New Relic、T客邦則是因為 xdite 剛好過去負責技術部門、OptimisDev 則是一家透過 E-mail 認識的外商，最後倒數三天才決定贊助。所以不得已只好每次碰到人都無恥地伸手要錢，感謝 Grass Brook 的 tsechingho, tkalu, Mason Chang, Tyler Lin, bencrox, RulingDigital 的 allen 等朋友慷慨解囊。最後只讓自己墊了幾萬塊算是萬幸了。因為找不到錢，一度讓自己非常洩氣，覺得幹嘛自找苦吃辦研討會，看來錢的問題仍然是明年辦 RubyConf 最大考驗。 </p>
<p>anyway, 這場 conference 幾乎事情大大小小都是自己一手安排，邀請講者、拉贊助、安排講者行程接機住宿、印刷品等、協調翻譯攝影錄影志工。我開始佩服 hcchien 為什麼可以一個人辦這麼多次 OSDC.TW 了。說多不多，但這些事情堆積的壓力也是不小。更慘的是，我還得準備自己的演講 XD 會後 kakutani 跟 Gregg 聽到是我自己辦的，大吃一驚，鼓勵我應該要有個 team 來弄。well, 不是不想有，只是沒有人啊。出嘴巴人人都會，真要負責做事才知道可不可靠，畢竟大家都有自己的 full-time 工作 (我的工作是約聘的彈性最大，沒有固定上下班時間，我也把整個四月的工作幾乎都排開)。不過，真正的理由可能也是，我自己想辦怎樣的 conference，是我自己的願望。如果我自己辦，當然我想邀誰就邀誰，想幹嘛就幹嘛，哈哈。</p>
<p>辦 conference 與其說是在國內推廣 Ruby (其實我對 &#8220;推廣&#8221; 兩個字有點感冒，因為那好像帶有 &#8220;傳教&#8221;意涵，但我並不想興致勃勃地免費教你Ruby)，倒不如說，其實，我是自己想辦一場有趣的研討會而已 (Have fun!)。而研討會最有趣的部份之一，就是外國朋友的參與了(特別是台灣的 Ruby 社群這麼小，人我都認識的差不多啦)。所以我想要請 Gregg 來，我想要請 Takahashi 來。這一次的 RubyConf，除了日本、美國朋友，也有從香港來的，要不是火山灰的影響，還會有德國朋友呢。(參加 conference 不只是可以學東西看東西，social 聊天認識朋友也是很重要的收穫~ )</p>
<p>另一個理由是，我希望能夠對整個 Ruby 社群有幫助有回饋，而不只是國內的使用者。所以我們的網站要做的漂漂亮亮 (evenwu++)，而且要提供英文版 (好處是，國外的Ruby社群在收集 Ruby Conference 資訊時，都可以知道 Taiwan 有 RubyConf !! 例如<a href="http://weblog.rubyonrails.org/2010/2/22/ruby-and-rails-conferences-2010">Rails 官網</a>)，我們也在會後迅速地提供所有的 slides 跟<a href="http://ruby.tw/post/555388929/rubyconf-taiwan-2010-speakers-videos">錄影</a>。我自己的演講雖然是用中文講，但是我自己的 slides 已經開始全面改用英文(除了入門的主題之外)，我也鼓勵我們台灣的講者，盡量使用英文投影片。另外，Gregg 也趁機<a href="http://podcast.rubyonrails.com/programs/1/episodes/foy-savas">訪談了 Foy</a> (哈哈，Foy 說，我以為在台灣發 Rails 牢騷沒人會知道，沒想到被 gregg 訪談記錄下來)。這些成果，都透過網路公開了，具體的得到國際能見度，也對整個 Ruby 圈有了回饋。我絕不想沒沒無聞的辦一場研討會，要辦，就要留下具體成果，一場高品質的 conference，這樣辦才爽啊。(話說有一次碰到一個做 Android 的外國朋友，我說我是 Ruby Taiwan 的人，他就說他印象中台灣有很厲害的 Ruby 社群，雖然不知道是不是客套，不過還是蠻爽的)</p>
<p>回過頭來看 conference 對我的影響，我得說是 OSDC.TW 啊。大概三四年前第一次參加 OSDC.TW 時，看到這麼多外國講者，感到非常震撼跟感觸，深深覺得自己也是全世界 open source 的一份子。接著我投了 OSDC.TW 成為講者，不只是待在下面，也與一些其他國際講者有了進一步交流 (要成為講者才能參加專屬的會後 speaker dinner 喔~)，認識了高橋先生，他鼓勵了我來辦 RubyConf 。現在我翅膀長硬了(?)，自己辦專屬 Ruby 的 conference，希望也可以帶給所有來參加的朋友，深刻了解及體會我們也是全世界 Ruby 圈的一份子，而不只是默默無名的使用者而已，無論是寫 open source project，或是補丁回報 bugs，或是成為一個講者分享你的經驗所學，甚至舉辦 Meeting 聚會。你也可以做出貢獻，而不只是一直待在台下。</p>
<p>最後我要感謝 xdite、deduce、小蟹、澤清、andy、tka、SJH、Brecht、慕凡、allen 的幫忙，以及有點可惜沒派上用場的日文翻譯 ericyu、我的英文老師 Roy 幫忙訂正英文、OSDC.TW 專業的工作人員幫忙顧攤位，當然還有 OSDC.TW 主辦人 hcchien。</p>
<p>明年還會有 RubyConf Taiwan 嗎? 其實啊，台灣也沒什麼 Ruby 的廣大使用者，辦這樣的 International conference 規模其實有點誇張 (得意!)。不過我不是為了誰，也不是為了要推廣 Ruby，我就是 hava fun! 而已。所以，應該會有吧，明年見。</p>
<p><a href="http://www.flickr.com/photos/u-suke/4553557884"><img src="http://farm5.static.flickr.com/4046/4553557884_cb2441f39c.jpg" title="@ihower and @takahashim"></a></p>
<p><a href="http://www.flickr.com/photos/deduce/4567380017/"><img src="http://farm5.static.flickr.com/4036/4567380017_9ce06f64dc.jpg" title="@ihower and @greggpollack"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4272/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ruby Tuesday #12 開放報名</title>
		<link>http://ihower.tw/blog/archives/4337</link>
		<comments>http://ihower.tw/blog/archives/4337#comments</comments>
		<pubDate>Thu, 06 May 2010 08:51:55 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4337</guid>
		<description><![CDATA[Ruby Tuesday 聚會的第十二場，照慣例有兩場演講： ryudoawaru: Ruby on Discuz!-用Ruby擴充論壇的社群功能 ihower: Ruby Object Model &#38; Meta-Programming 我的部份，主要是講上次準備好但時間不夠沒講到的 Designing Beautiful Ruby APIs: Part2 (p.58)，如果你喜歡我在 RubyConf 的演講，歡迎繼續來聽下半場更進階的部分。 時間: 2010/5/18（週二）晚上七點到九點半。 地點: 台北市 果子咖啡 報名網頁: http://registrano.com/events/ruby-tuesday-12]]></description>
			<content:encoded><![CDATA[<p>Ruby Tuesday 聚會的第十二場，照慣例有兩場演講：</p>
<ul>
<li><a href="http://twitter.com/ryudoawaru">ryudoawaru</a>: Ruby on Discuz!-用Ruby擴充論壇的社群功能 </li>
<li><a href="http://ihower.tw/blog/">ihower</a>: Ruby Object Model &amp; Meta-Programming</li>
</ul>
<p>我的部份，主要是講上次準備好但時間不夠沒講到的 <a href="http://www.slideshare.net/ihower/designing-ruby-apis">Designing Beautiful Ruby APIs: Part2 (p.58)</a>，如果你喜歡我在 <a href="http://rubyconf.tw/2010/#2">RubyConf</a> 的演講，歡迎繼續來聽下半場更進階的部分。</p>
<p>時間: 2010/5/18（週二）晚上七點到九點半。<br />
地點: 台北市 果子咖啡<br />
報名網頁: <a href="http://registrano.com/events/ruby-tuesday-12">http://registrano.com/events/ruby-tuesday-12</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4337/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>校園自由軟體工作坊 &#8211; Meet Ruby on Rails</title>
		<link>http://ihower.tw/blog/archives/4320</link>
		<comments>http://ihower.tw/blog/archives/4320#comments</comments>
		<pubDate>Mon, 03 May 2010 14:20:12 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4320</guid>
		<description><![CDATA[Update: 投影片下載：遇見 Ruby on Rails。 遇見 Ruby on Rails View more presentations from Wen-Tien Chang. 這週三 (2010/5/5) 晚上我在台大有一場 &#8220;Meet Ruby on Rails&#8221; 的演講，是由 OSSF 和台大資工系學會所合辦的工作坊。 不同於上次在清大的校園課程，這次只有安排 talk，沒有安排電腦教室給學員實作。給大學生講這個題目，我目前想要多準備一點軟性題目，少談一點程式碼。像是介紹 Web 軟體開發產業、為什麼採用 Web framework、為什麼用 Rails? 為什麼用 scripting 動態語言? 為什麼用 Ruby? 以及除了學校課程以外，我認為作為一個 Web-based 軟體設計師，可以學習的方向。當然，還有 Rails 的 live demo。 某方面來說，雖然題目是遇見 Ruby on Rails，但是我希望也可以讓聽眾遇見 Web application 軟體開發的樂趣。台灣的資工系學生畢業之後，大部分都投入硬體相關產業吧 (不同於美國的軟體業產值超過硬體，台灣的軟體業產值只有硬體的九分之一，真是九牛一毛啊 :~ )。如果這場演講可以讓他們多了解 Web [...]]]></description>
			<content:encoded><![CDATA[<p>Update: 投影片下載：<a href="http://www.slideshare.net/ihower/meet-ruby-on-rails">遇見 Ruby on Rails</a>。</p>
<div style="width:425px" id="__ss_3973821"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ihower/meet-ruby-on-rails" title="遇見 Ruby on Rails">遇見 Ruby on Rails</a></strong><object id="__sse3973821" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=meet-rails-100505034826-phpapp01&#038;stripped_title=meet-ruby-on-rails" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse3973821" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=meet-rails-100505034826-phpapp01&#038;stripped_title=meet-ruby-on-rails" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ihower">Wen-Tien Chang</a>.</div>
</div>
<p>這週三 (2010/5/5) 晚上我在台大有一場 &#8220;<a href="http://whoswho.openfoundry.org/workshop/details/86--meet-ruby-on-rails.html">Meet Ruby on Rails</a>&#8221; 的演講，是由 <a href="http://www.openfoundry.org">OSSF</a> 和台大資工系學會所合辦的工作坊。</p>
<p>不同於上次在清大的校園課程，這次只有安排 talk，沒有安排電腦教室給學員實作。給大學生講這個題目，我目前想要多準備一點軟性題目，少談一點程式碼。像是介紹 Web 軟體開發產業、為什麼採用 Web framework、為什麼用 Rails? 為什麼用 scripting 動態語言? 為什麼用 Ruby? 以及除了學校課程以外，我認為作為一個 Web-based 軟體設計師，可以學習的方向。當然，還有 Rails 的 live demo。</p>
<p>某方面來說，雖然題目是遇見 Ruby on Rails，但是我希望也可以讓聽眾遇見 Web application 軟體開發的樂趣。台灣的資工系學生畢業之後，大部分都投入硬體相關產業吧 (不同於美國的軟體業產值超過硬體，台灣的軟體業產值只有硬體的九分之一，真是九牛一毛啊 :~ )。如果這場演講可以讓他們多了解 Web 軟體產業，無論是不是喜歡 Ruby 或 Rails (就算是喜歡上 Python, Perl 也不錯)，那就達到我演講的目的了。</p>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4320/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Designing Beautiful Ruby APIs 投影片</title>
		<link>http://ihower.tw/blog/archives/4279</link>
		<comments>http://ihower.tw/blog/archives/4279#comments</comments>
		<pubDate>Tue, 27 Apr 2010 09:58:56 +0000</pubDate>
		<dc:creator>ihower</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ihower.tw/blog/?p=4279</guid>
		<description><![CDATA[Update: 被 The Ruby Show #126 介紹了，Audio 在第 8:55~9:32 秒，Video 在第 8:00~8:35 秒。 這是我在 RubyConf Taiwan 2010 所做的演講: Designing Ruby APIs View more presentations from Wen-Tien Chang. 因為時間不夠的關係，整個 Part2: Ruby Object Model and Meta-programming 其實在現場並沒有講到。會有 Part2 也真是意外，本來並沒有想要準備這些內容，可是因為隨著 Designing Beautiful Ruby APIs 越來越進階，有一些設計方式我發覺如果沒有 Part2 的基礎，就進展不下去，沒辦法解釋。所以我竟然花了一半的時間在準備上台不會有時間講到的 slides&#8230; XDXD]]></description>
			<content:encoded><![CDATA[<p>Update: 被 <a href="http://5by5.tv/rubyshow/126">The Ruby Show #126</a> 介紹了，Audio 在第 8:55~9:32 秒，Video 在第 8:00~8:35 秒。</p>
<p>這是我在 <a href="http://rubyconf.tw/2010/#2">RubyConf Taiwan 2010</a> 所做的演講:</p>
<div style="width:425px" id="__ss_3844035"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ihower/designing-ruby-apis" title="Designing Ruby APIs">Designing Ruby APIs</a></strong><object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=designing-ruby-apis-100424202457-phpapp01&#038;stripped_title=designing-ruby-apis" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=designing-ruby-apis-100424202457-phpapp01&#038;stripped_title=designing-ruby-apis" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ihower">Wen-Tien Chang</a>.</div>
</div>
<p>因為時間不夠的關係，整個 Part2: Ruby Object Model and Meta-programming 其實在現場並沒有講到。會有 Part2 也真是意外，本來並沒有想要準備這些內容，可是因為隨著 Designing Beautiful Ruby APIs 越來越進階，有一些設計方式我發覺如果沒有 Part2 的基礎，就進展不下去，沒辦法解釋。所以我竟然花了一半的時間在準備上台不會有時間講到的 slides&#8230; XDXD</p>
]]></content:encoded>
			<wfw:commentRss>http://ihower.tw/blog/archives/4279/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
