校園自由工作坊-Ruby 初探 @ 清華大學資工系

Update (2010/12/3): 本活動 12/7 才會開放報名。

又要開課了,和上一回類似的課程內容,這次 OSSF 和清大資工系合辦,時間地點是 12/23 在清華大學 :)

這次真的是大學生了,準備來把範例改成瞇圖程式(?)
anyway,能夠回母校上點課,真是開心 :)

Why “Not use default route”?

In my Rails Best Practices slides, I only give simple code without any description (unless you heard my talk :p), so let me explain here.

my point is: “If you use RESTful design, you should NOT use default route.” Why?

For example:


map.resources :users
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

You expect only “PUT /users/1” will update user data, but because you keep default route, so “GET /users/update/1?user[email]=[email protected]” still works!!

In the same way, “GET /users/create” and “GET /users/destroy/1” works too!! Even worse, the latter can create/update/destroy data without Request Forgery Protection :/ Rails does not check CRSF for HTTP GET.

Conclusion: Remove default route, use purely resource-based routes and named routes for special purpose.

部落格換新網址 ihower.tw

心血來潮,買了新的網址 ihower.tw,即刻生效。
原來的 ihower.idv.tw 之前就買到 2012 年了,所以暫時不會有什麼影響,也用了以下的 Apache 設定把流量都轉到新網址:


<VirtualHost *:80>
ServerName ihower.idv.tw
ServerAlias www.ihower.idv.tw
RedirectMatch 301 ^(.*)$ http://ihower.tw$1
</VirtualHost>

BTW,測試了一下,新的網址大陸應該可以直接連,(暫時?)毋須翻牆。

Social: 在 iPhone 上掛 IRC

iPhone 上面不是沒有 IRC client,但是要掛站就不太方便了。我平常是用 screen+irssi 的方式來掛站,但是要在 iPhone 上使用 SSH terminal 連上 server 看 irc,實在太苦了 :/

Social 是 gugod 的最新力作,它會在 server 上登入 IRC 和跑起來一個 Web server,而且還使用了 HTTP streaming 的方式將訊息即時推送到瀏覽器上,達成隨時打開手機瀏覽器就可以看到掛站的訊息的任務。

安裝的方式,首先確定有 Perl (在ubuntu上內建就有了),接著裝:

sudo cpan YAML
sudo cpan Encode
sudo cpan AnyEvent::IRC
sudo cpan FindBin
sudo cpan HTML::Entities
sudo cpan Plack
sudo cpan Plack::Request
sudo cpan Tatsumaki
sudo cpan AnyEvent::Twitter
sudo cpan AnyEvent::Plurk
sudo cpan Moose

下載 Social,編輯設定檔加入 IRC 頻道,Social 也支援 Twitter 和 Plurk。
然後執行 ./social -c config.yml -p 9999

最後就是打開 iPhone 的 safari 連上去就出現啦!!

經過詢問,如果要做 authorization,目前可以用 Apache 來做 http auth 當前端,然後執行 social 時加上 -h 127.0.0.1 的限制。