對抗垃圾信!請您點這裡:

我的E-mail:
我的Skype:My status

2007年3月26日

HAML

最近開始接觸HAML
在Rails中,預設使用ERb來當作模板描述語言,可是這樣寫個人認為非常醜也非常累...
而之前看到HAML時感覺到那東西似乎沒有太大的可用性,難道要Designer也學Ruby嗎?
不過後來我想通了..

架構這部分可以給Coder作,Designer乖乖設計CSS就夠了..
來看看底下這個Sample吧:

這是rhtml

原始碼請看這地方:http://blog.pixnet.net/zusocfc/post/3520168

這是HAML

#content
.left.column
%h2 Welcome to our site!
%p= print_information
.right.column= render :partial => "sidebar"

看!少了多少行?
可以讓開發速度變快耶= v =...
最主要的是,看起來也比較美觀了!

參考:
http://haml.hamptoncatlin.com/tutorial/
http://haml.hamptoncatlin.com/docs/




2007年3月11日

Rails 安全性漏洞一則 -- attr_protected 與 attr_accessible

我沒辦法在這邊正常的發布有表單HTML tag的文章,請連結至:
http://blog.pixnet.net/zusocfc/post/3220943
觀看完整文章!

Rails中有個安全性漏洞,請參考

* http://manuals.rubyonrails.com/read/chapter/47
* http://www.javaeye.com/topic/58686

假設我們有個users table,表格欄位如下:

* username # 很明顯就是帳號
* password # 這就是密碼
* role # 權限名稱

而我們提供給使用者註冊的頁面只會有username跟password欄位
然後你的後端如果是這樣:

User.create(params[:user])

哦.. 這就真的好玩了..
使用者在註冊時直接提權..
那這要怎樣處理呢?

我們可以在
app/model/user.rb
內新增這行:

attr_protected :role

這樣一來,該欄位就會確定被忽略掉而不會被新增..
不過你得做一下這道手續:

user = User.new(params[:user])
user.role = sanitize_properly(params[:user][:role])

===== 分 - 隔 - 線 =====

另外,我們可以使用

attr_accessible :username, :password

這有點類似白名單的方式,可以過濾掉沒出現的欄位...


2007年3月4日

Rails -- InPlaceEdit

用過Flickr嗎?
如果你有Flickr相簿,應該對於修改照片標題、說明的方式記憶猶新吧?
那種就叫做 In Place Editing
在Rails中,要實做這種技術並不難,因為本身就內建這個功能
不過到了Rails 2.0將會把這個從內建移除變成Plugins形勢存在
可以參考這篇:In-plcae-editing by Rails
不過我在這裡重新說明一次使用方式吧
如果有<%= javascript_include_tag :defaults %>的話,那只剩下兩個步驟:
Controller:

class ObjectController < ApplicationController
in_place_edit_for :object, :method
end


View:

<%= in_place_editor_field :object, :method %>

這樣就可以建立起最基本的InPlaceEditing欄位
可是最基本的都是英文,因此Rails也提供了修改參數,可以參考這篇
in_place_editor_field欄位有四個參數:
in_place_editor_field(object, method, tag_options = {}, in_place_editor_options = {})
而修改的部分則是放在第四個參數;假設我要修改:saving_text:
<%= in_place_editor_field(:object, :method, {}, {:saving_text => "儲存中..."} %>
改好後記得重新整理頁面!

另外,如果要建立多個欄位的話,必須用這種方法:
class ObjectController < ApplicationController
in_place_edit_for :object, :method1
in_place_edit_for :object, :method2
in_place_edit_for :object, :method3
end


這樣寫超麻煩的!因此可以這樣:

class ObjectController < ApplicationController
%w"method1 method2 method3".each do |m|
in_place_edit_for :object, m.to_sym
end
end

這樣未來在新增刪除上都會很方便!

Ruby/GTK 中文教學

這是http://www.ruby-lang.org/zh_TW/ 站長所寫的一篇教學
網址是:http://info.sayya.org/~sjh/sjh_rubygtk.pdf
寫得很詳細、簡單明瞭!
如果有需要可以看看

2007年3月1日

Balloon -- Ruby百寶箱

http://balloon.hobix.com/

Here, Try a Balloon

Balloon is a site for Rubyists to create demos of their code. Have Balloon download Gems, fetch code from Subversion, run scripts and then close up without leaving a trace!

簡單的說,Balloon提供給Ruby Coders一個可以建立demo的平台,如果有玩過DOB首頁製作百寶箱作者群的人應該可以很快上手,因為跟發布文章的介面有點類似
它定義了幾個Actions:
  • Run some Ruby code
  • Fetch a gem
  • Fetch a Ruby library(non-Gem)
  • Download code from Subversion
  • Use a Gem Server
可以看看底下範例:
http://balloon.hobix.com/serve.rb
http://balloon.hobix.com/Win32_MessageBox

寫好的Code還可以嵌入到部落格中喔

快速處理HTML/XML文件

XML文件我是用ReXML啦.. 不過我這邊不是要介紹ReXML,是要來介紹hpricot這個Library的
安裝方式:
gem install hpricot
or
gem install hpricot --source http://code.whytheluckystiff.net

第一個會連線到gem server去抓來裝,不會有最新的更新;第二個會連到指定的gem server,那邊更新速度較快,我還看到jruby版本的gem..

OK,廢話不多說,趕緊來看看
官方網站是:http://code.whytheluckystiff.net/hpricot/

如果會jQuery的人,這個是用jQuery當底層的喔!
我來個例子吧


require 'rubygems'
require 'hpricot'
require 'open-uri'
doc = Hpricot(open("http://article.zuso.org.tw/show.php?id=1453"))
tb = doc.search("//table")
puts "Tables: #{tb.size}"
puts tb[0]