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

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

2007年4月28日

Array.which_long? -- 剛出爐的函式

class Array
def which_long?
# Version 1.0
# Coded by CFC <>
# PLEASE DO NOT REMOVE THE COMMENT OF THIS FUNCTION, THANKS A LOT.
# Usage:
# ['a', 'ab', 'abc' 1234].which_long?
# => 1234
self.size.times{|i| self[i]=self[i].to_s}
max, long = 0, String.new
self.each{|item| item.size > max ? (max = item.size; long = item) : next}
long
end
end


以上是原始碼,使用方式如下:

puts ['a', 'ab', 'abc', 1234].which_long?
=> 1234

授權還沒定,不過大家還是可以拿去使用:P
請不要拿掉註解.. 謝謝

2007年4月24日

rubygems 0.9.2的問題

本文同步發佈至:http://blog.pixnet.net/zusocfc/post/4160285


升級Rubygems到0.9.2時,不論是安裝gem包還是升級gem包
都會產生一個Error:

ERROR:  While executing gem ... (NoMethodError)
    undefined method `refresh' for #<Hash:0xb799a478>

這個時候該怎麼辦呢?
根據這篇文章所寫:http://www.cnzxh.net/blog/Index.php?do=readArticle&articleId=145
我們可以做這個動作:

rm -f /usr/local/lib/ruby/gems/1.8/source_cache

經過測試後.. 真的就正常了..
所以如果你有出同樣問題 請照做吧:P
( 我想這問題只會發生在*nix系統上 )

2007年4月20日

大量帳號建置器 版本1跟版本2

先說好,跟往常一樣.. 到我Pixnet的網誌看會比較不頭痛:P
版本1可以不用寫群組名稱,但是程式碼好醜ˊˋ
版本2必須要有群組名稱,適用於學校(?)

版本1下載
版本2下載

版本1:

#!/usr/bin/env ruby
File.open(ARGV[0]) do |file|
  while a = file.gets
    a = a.chomp.split(/ /)
    print "username => #{a[0]} ", "password => #{a[1]} ", "group => #{a[2]}", "\n"
    a[2].nil? ? `useradd -m #{a[0]}` : `useradd -m -G #{a[2]} #{a[0]}`
    `echo #{a[0]}:#{a[1]} | chpasswd`
  end
end
exec "pwconv"

使用者清單寫法:

  帳號 密碼 群組

版本2:

#!/usr/bin/env ruby
require 'yaml'
YAML.load_file(ARGV[0]).each{ |grp|
  grp.each{ |usr|
    usr.each{ |i|
      info = i.chomp.split(/ /)
      `useradd -m -G #{grp[0]} #{info[0]}`
      `echo #{info[0]}:#{info[1]} | chpasswd`
    }
  }
}
`pwconv`

使用者清單寫法:

grp1:
  - usr1 pwd1
  - usr2 pwd2
grp2:
  - usr3 pwd3
  - usr4 pwd4
grp3:
  - usr5 pwd5
  - usr6 pwd6
使用方式都是:
./account list

程式授權.. 隨便啦

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
寫得很詳細、簡單明瞭!
如果有需要可以看看