<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>tag:blogger.com,1999:blog-16145282</id><updated>2024-09-14T20:52:24.693+08:00</updated><category term="ruby"/><category term="rails"/><category term="programming"/><category term="tools"/><category term="api"/><category term="activerecord"/><category term="hemidemi"/><category term="array"/><category term="php"/><category term="video"/><category term="Offical Website"/><category term="Taiwan"/><category term="Website"/><category term="account"/><category term="documentation"/><category term="error"/><category term="error message"/><category term="generator"/><category term="google"/><category term="gtk"/><category term="gui_toolkit"/><category term="haml"/><category term="hobix"/><category term="html tag"/><category term="html_parser"/><category term="ide"/><category term="in place editing"/><category term="lecture"/><category term="library"/><category term="lifetype"/><category term="linux"/><category term="plaintext"/><category term="randomize"/><category term="regular expression"/><category term="rubygems"/><category term="sample"/><category term="screencast"/><category term="security"/><category term="select"/><category term="sms"/><category term="twrug portal"/><category term="wxwidgets"/><category term="yahoo"/><category term="中文化"/><title type="text">CFC on Rails</title><subtitle type="html">I'm on the way..</subtitle><link href="http://zusocfc.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default?alt=atom" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/" rel="alternate" type="text/html"/><link href="http://pubsubhubbub.appspot.com/" rel="hub"/><link href="http://www.blogger.com/feeds/16145282/posts/default?alt=atom&amp;start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><generator uri="http://www.blogger.com" version="7.00">Blogger</generator><openSearch:totalResults>60</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-16145282.post-482248407300059164</id><published>2008-07-03T03:16:00.000+08:00</published><updated>2008-07-03T03:17:22.445+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type="text">HTTP Response 500!?</title><content type="html">&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;剛剛在解決一個小Bug&lt;br /&gt;用瀏覽器瀏覽某個會丟301的網站時，在Ruby或Telnet都會丟500回來&lt;br /&gt;什麼鬼.. 怎麼會這樣？&lt;br /&gt;&lt;br /&gt;其實這是因為沒有User-Agent的關係啦&lt;br /&gt;有些Web Server可能會Reject一些Header中沒有User-Agent的Request&lt;br /&gt;所以這時候只要在丟request時加上User-Agent這個Header即可&lt;br /&gt;原本的原始碼：&lt;br /&gt;&lt;blockquote&gt;response = Net::HTTP.get_response(URI.parse(uri_str))&lt;br /&gt;&lt;/blockquote&gt; 改成：&lt;br /&gt;&lt;blockquote&gt;uri = URI.parse(uri_str)&lt;br /&gt;http = Net::HTTP.new(uri.host)&lt;br /&gt;response = http.send_request('GET', uri.request_uri, {"User-Agent" =&gt; "Mozilla/5.0"})&lt;br /&gt;&lt;/blockquote&gt; 這樣一來不管是301、302，還是最該死的404都沒問題啦XD&lt;br /&gt;&lt;br /&gt;(( 因為這篇是工作上的心得，所以只好擺在Rails啦XD&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/482248407300059164/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/482248407300059164" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/482248407300059164" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/482248407300059164" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2008/07/http-response-500.html" rel="alternate" title="HTTP Response 500!?" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-5663196836044742816</id><published>2008-06-24T01:05:00.002+08:00</published><updated>2008-06-24T02:31:31.470+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="error message"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="中文化"/><title type="text">修改error_messages_for，讓表單錯誤資訊中文化更完整</title><content type="html">今天摸會了Git，就順便應用上了&lt;br /&gt;error_messages_for大家都用過，也都知道這個不管再怎樣中文化，欄位名稱一樣都會出現給你看！&lt;br /&gt;這真的是令人又愛(英語體系者愛)又恨(非英語體系者恨)的功能啊..&lt;br /&gt;沒辦法，只好自己動手了...&lt;br /&gt;我剛剛發了Git pull給Rails團隊，他們接受不接受我不知道，所以在這邊教大家如何自己搞定這一切&lt;br /&gt;首先，先打開Rails這部份的原始碼&lt;br /&gt;假設我Ruby安裝在C:\&lt;br /&gt;所以路徑就是：C:\ruby\lib\ruby\gems\1.8\gems\actionpack-2.1.0\lib\action_view\helpers\active_record_helper.rb&lt;br /&gt;接 著，跳到error_messages_for那段程式碼，在options = params.extract_options!.symbolize_keys底下加入：fields = options[:fields].nil? ? {} : options[:fields]&lt;br /&gt;然後把error_messages = objects.sum {|object| object.errors.full_messages.map {|msg| content_tag(:li, msg) } }.join這行註解，改為：&lt;br /&gt;&lt;blockquote&gt;error_messages = objects.sum {|object| object.errors.full_messages.map {|msg|&lt;br /&gt;              unless fields[msg.split(" ")[0].downcase.to_sym].nil?&lt;br /&gt;                msg = msg.split(" ")&lt;br /&gt;                field_name = msg.shift.downcase!&lt;br /&gt;                msg = msg.reverse.push(fields[field_name.to_sym]).reverse.join(" ")&lt;br /&gt;              end&lt;br /&gt;              content_tag(:li, msg)&lt;br /&gt;} }.join&lt;/blockquote&gt;存檔離開，然後這樣用：&lt;br /&gt;&lt;blockquote&gt;error_messages_for(:project, :fields =&gt; {:name =&gt; "專案名稱", :summary =&gt; "專案摘要"})&lt;br /&gt;&lt;/blockquote&gt;而content_tag產生出來的就會是&lt;br /&gt;&lt;blockquote&gt;&lt;li&gt;專案名稱 can't be blank&lt;/li&gt;&lt;!-- 或其他的錯誤訊息 //--&gt;&lt;br /&gt;&lt;li&gt;專案摘要 can't be blank&lt;/li&gt;&lt;!-- 或其他的錯誤訊息 //--&gt;&lt;br /&gt;&lt;/blockquote&gt;很簡單吧:P?&lt;br /&gt;注意，只能夠傳小寫的symbol進去&lt;br /&gt;沒辦法，我功力太差了=_=|||&lt;br /&gt;可以參考這邊：&lt;a href="http://github.com/cfc/rails/commit/9e38903fd10a2de9ae9c2ca53623469f3575b43c" target="_blank"&gt;http://github.com/cfc/rails/commit/9e38903fd10a2de9ae9c2ca53623469f3575b43c&lt;/a&gt;&lt;br /&gt;有任何問題歡迎提出，也可以在github上commit給我&lt;br /&gt;多謝多謝:P</content><link href="http://zusocfc.blogspot.com/feeds/5663196836044742816/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/5663196836044742816" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/5663196836044742816" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/5663196836044742816" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2008/06/errormessagesfor.html" rel="alternate" title="修改error_messages_for，讓表單錯誤資訊中文化更完整" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-2015112806700003782</id><published>2008-04-17T00:50:00.000+08:00</published><updated>2008-04-17T00:52:20.153+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="api"/><category scheme="http://www.blogger.com/atom/ns#" term="lifetype"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="yahoo"/><title type="text">Yahoo-LifeType-API (Yahoo!奇摩生活+ Ruby API)</title><content type="html">今天剛看到生活+釋出API(其實早就釋出了，API網址：&lt;a href="http://tw.developer.yahoo.com/lifestyle_api.html"&gt;http://tw.developer.yahoo.com/lifestyle_api.html&lt;/a&gt;)後，就開始把NetBeans打開來寫程式了XD&lt;br /&gt;現在RubyForge的專案還沒開，倒是GoogleCode的已經開了(網址：&lt;a href="http://code.google.com/p/yahoo-lifetype-api/"&gt;http://code.google.com/p/yahoo-lifetype-api/&lt;/a&gt;)&lt;br /&gt;程式是BSD授權，忘記怎樣包裝Gem檔，等到哪天想起來再包XD&lt;br /&gt;程式使用範例(列出生活+的分類)：&lt;br /&gt;&lt;blockquote&gt;&lt;pre class="prettyprint"&gt;&lt;a id="Example_(Traditional_Chinese)"&gt;#!/usr/bin/env ruby&lt;br /&gt;APPID = &amp;quot;NhYX9XjV34FPxdq7zD8T7wwc4QGI5VWu_48NHh03zbPYUfPpcWrpZzhcVDKFQsH9dQ--&amp;quot;&lt;br /&gt;require 'lifetype'&lt;br /&gt;require 'rexml/document'&lt;br /&gt;include REXML&lt;br /&gt;&lt;br /&gt;puts &amp;quot;獲取生活+類別中... 請稍後&amp;quot;&lt;br /&gt;doc = Document.new(LifeType::Class.new(APPID).listClasses)&lt;br /&gt;puts &amp;quot;獲取類別結束&amp;quot;&lt;br /&gt;puts &amp;quot;類別總數： &amp;quot; + doc.get_elements(&amp;quot;//rsp/ClassList&amp;quot;)[0].attribute(&amp;quot;count&amp;quot;).to_s&lt;br /&gt;puts &amp;quot;列出類別中... 請稍後&amp;quot;&lt;br /&gt;doc.elements.each(&amp;quot;//rsp/ClassList/Class&amp;quot;) do |ele|&lt;br /&gt;  puts &amp;quot;ID: #{ele.attributes[&amp;quot;id&amp;quot;]} -- #{ele.get_elements(&amp;quot;Title&amp;quot;)[0].text}&amp;quot;&lt;br /&gt;end&lt;br /&gt;puts &amp;quot;列出類別結束&amp;quot;&lt;br /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class="prettyprint"&gt;很簡單的就可以使用了，還有doc喔！&lt;br /&gt;有Bug可以丟到GoogleCode的Issues或者丟到我信箱內&lt;br /&gt;謝謝^^&lt;/pre&gt;&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/2015112806700003782/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/2015112806700003782" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/2015112806700003782" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/2015112806700003782" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2008/04/yahoo-lifetype-api-yahoo-ruby-api.html" rel="alternate" title="Yahoo-LifeType-API (Yahoo!奇摩生活+ Ruby API)" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-5285702348061624425</id><published>2007-09-13T22:04:00.000+08:00</published><updated>2007-09-13T22:08:00.703+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="sample"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type="text">偵測DNS是否還活著.. 用Ruby</title><content type="html">有鑒於某台主機的DNS常常掛掉.. 所以就寫了這個小程式..&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;while true&lt;br /&gt;&amp;nbsp; `ps aux | grep named`.split(&amp;quot;\n&amp;quot;).each{|line|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; user, pid, cpu, mem, vsz, rss, tty, stat, start, time, *command = line.split(&amp;quot;\s&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flag = true if command[0] == &amp;quot;/usr/sbin/named&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `/etc/init.d/named start` unless flag&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; sleep 300&lt;br /&gt;end&lt;/blockquote&gt;&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/5285702348061624425/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/5285702348061624425" rel="replies" title="2 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/5285702348061624425" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/5285702348061624425" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/09/dns-ruby.html" rel="alternate" title="偵測DNS是否還活著.. 用Ruby" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-7594046505425708538</id><published>2007-09-10T08:52:00.000+08:00</published><updated>2007-09-10T08:55:21.578+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="regular expression"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="tools"/><title type="text">線上Ruby Regular Expression Editor</title><content type="html">Ruby/Rails寫到一半.. 忽然需要用到RegExp來驗證某個東西(Ex: E-mail)，卻臨時找不到工具可以測試自己寫的RegExp是否正確該怎辦？&lt;br /&gt;沒關係！這邊有個網站：&lt;a href="http://www.rubular.com/"&gt;http://www.rubular.com/&lt;/a&gt;&lt;br /&gt;這個網站可以讓您線上測試RegExp是否正確唷:)&lt;br /&gt;可以試試看！&lt;br /&gt;&lt;br /&gt;資料來源：China on Rails &lt;a href="http://chinaonrails.com/topic/view/723/1.html"&gt;http://chinaonrails.com/topic/view/723/1.html&lt;/a&gt;&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/7594046505425708538/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/7594046505425708538" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/7594046505425708538" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/7594046505425708538" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/09/ruby-regular-expression-editor.html" rel="alternate" title="線上Ruby Regular Expression Editor" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-8177163684523873877</id><published>2007-07-30T13:56:00.000+08:00</published><updated>2007-07-30T13:58:35.655+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gui_toolkit"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="wxwidgets"/><title type="text">WxWidgets初體驗</title><content type="html">最近無聊想寫點小程式.. 可是不想用Visual Basic寫，用Ruby + GUI Toolkit寫&lt;br /&gt;可是該選哪套GUI Toolkit? 說真的.. GTK+好難用喔ˊˋ.. Qt完完全全不想用&lt;br /&gt;WindowsAPI? 那我乾脆用VB就好了=..=&lt;br /&gt;選來選去看來看去.. 乾脆就看了godfat的建議，去玩wxWidgets&lt;br /&gt;wxWidgets在Ruby上的binding叫做WxRuby，我們先來做準備吧。&lt;br /&gt;首先，我們要安裝wxWidgets跟WxRuby&lt;br /&gt;連線到&lt;a _fcksavedurl="http://www.wxwidgets.org/" href="http://www.wxwidgets.org/"&gt;http://www.wxwidgets.org/&lt;/a&gt;下載wxWidgets&lt;br /&gt;接著打開命令提示字元，輸入gem i wxruby -y&lt;br /&gt;一切搞定後，就可以開始先來寫個"哈囉握的"&lt;br /&gt;開啟irb，輸入以下程式碼&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;require 'rubygems'&lt;br /&gt;require 'wx'&lt;br /&gt;include Wx # =&gt; 我比較懶XD&lt;br /&gt;&lt;br /&gt;class HelloWorld &lt;&gt; on_init override&lt;br /&gt; helloframe = Frame.new(nil, -1, "HelloWorld")&lt;br /&gt; StaticText.new(helloframe, -1, "Wa ha ha")&lt;br /&gt; helloframe.show&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;HelloWorld.new.main_loop&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;在wxWidgets中，每個視窗都是一個Frame，而StaticText則是Label(在VB中就叫做Label，SWT我不知道XD)&lt;br /&gt;Okok.. 可以動對不對？ 不能動那就.. (( 當作沒看到&lt;br /&gt;&lt;br /&gt;繼續...&lt;br /&gt;或許各位會認為很奇怪，為什麼要自己慢慢寫.. 不要用視覺化的開發工具呢？&lt;br /&gt;現在來跟各位介紹，在GTK中有所謂的Glade，那在wxWidgets呢？當然有wxGlade！&lt;br /&gt;如果不喜歡wxGlade，這邊也有列表：[&lt;a _fcksavedurl="http://zh.wikipedia.org/wiki/WxWidgets#.E6.95.B4.E5.90.88.E9.96.8B.E7.99.BC.E7.92.B0.E5.A2.83.EF.BC.88IDE.EF.BC.89.E8.88.87.E5.BF.AB.E9.80.9F.E9.96.8B.E7.99.BC.E5.B7.A5.E5.85.B7.EF.BC.88RAD_tools.EF.BC.89" href="http://zh.wikipedia.org/wiki/WxWidgets#.E6.95.B4.E5.90.88.E9.96.8B.E7.99.BC.E7.92.B0.E5.A2.83.EF.BC.88IDE.EF.BC.89.E8.88.87.E5.BF.AB.E9.80.9F.E9.96.8B.E7.99.BC.E5.B7.A5.E5.85.B7.EF.BC.88RAD_tools.EF.BC.89"&gt;網址太長請點我&lt;/a&gt;]&lt;br /&gt;在wxWidgets中，支援一種叫做XRC(XML Resource)的格式檔案，很多視覺化工具，如wxGlade都支援輸出這種檔案。&lt;br /&gt;這種檔案的好處是不管是哪種開發工具或者程式語言，都可以藉由這個XRC檔案來產生一樣的介面。&lt;br /&gt;各位可以到&lt;a _fcksavedurl="http://wxglade.sourceforge.net/" href="http://wxglade.sourceforge.net/"&gt;http://wxglade.sourceforge.net/&lt;/a&gt;下載wxGlade，安裝後就可以開始拖拉了。&lt;br /&gt;弄好一個介面後，我們選擇產生XRC檔案。&lt;br /&gt;接著在同個目錄下，新增一個.rb檔案。&lt;br /&gt;假設我們有一個Frame與一個Button&lt;br /&gt;Frame: MainFrame&lt;br /&gt;Button: btnButton&lt;br /&gt;程式碼如下&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;require 'rubygems'&lt;br /&gt;require 'wx'&lt;br /&gt;include Wx&lt;br /&gt;&lt;br /&gt;class MainFrame &lt; btn =" find_window_by_id(xrcid('btnButton'))" xml =" XmlResource.get" xrc_file =" File.join(File.dirname(__FILE__)," main =" MainFrame.new"&gt;&lt;br /&gt;OK，大致上就這樣囉..&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;&lt;/blockquote&gt;</content><link href="http://zusocfc.blogspot.com/feeds/8177163684523873877/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/8177163684523873877" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/8177163684523873877" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/8177163684523873877" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/07/wxwidgets.html" rel="alternate" title="WxWidgets初體驗" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-885409460094744129</id><published>2007-06-29T03:07:00.000+08:00</published><updated>2007-06-29T03:08:01.113+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="select"/><title type="text">Rails中實做下拉式選單</title><content type="html">太久沒有寫文章了.. 最近接到一個案子.. 剛好讓我重溫Select的使用方法..&lt;br /&gt;嗯.. 結果卡在multiple，不知道是我太想睡還是怎樣.. 居然傻了..&lt;br /&gt;跑去#rubyonrails問，一位名為carpet_the_walls的網友給了我他寫的文章，網址是：&lt;br /&gt;&lt;a href="http://shiningthrough.co.uk/Select+helper+methods+in+Ruby+on+Rails"&gt;http://shiningthrough.co.uk/Select+helper+methods+in+Ruby+on+Rails&lt;/a&gt;&lt;br /&gt;在此先謝謝&lt;font color="#ff0000"&gt;carpet_the_walls (Thank you, carpet_the_walls)&lt;/font&gt;！&lt;br /&gt;&lt;br /&gt;來做個Memo.. 不然又忘記了..&lt;br /&gt;在Rails中真的有一堆Select helper可以用.. 不只carpet_the_walls混淆，連我也模糊不清！&lt;br /&gt;常見的有三個..&lt;br /&gt;select, select_tag, collection_select(其餘的什麼select_date那些不談)&lt;br /&gt;我們先來看看一個基本的下拉式選單骨架&lt;br /&gt;&lt;blockquote&gt;&amp;lt;select name=&amp;quot;selection&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;option value=&amp;quot;1&amp;quot;&amp;gt;Opt1&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;option value=&amp;quot;2&amp;quot;&amp;gt;Opt2&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;/select&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;在一個下拉式選單中，有一些是必備的資訊，像是&amp;quot;name&amp;quot;、&amp;quot;value&amp;quot;與&amp;quot;text&amp;quot;三個，在回傳資訊給Server時，&amp;quot;name&amp;quot;將是接收資訊用的，而&amp;quot;value&amp;quot;會傳回被選的值，而&amp;quot;text&amp;quot;則是使用者會看到的字，依上面的例子來講，Opt1、Opt2這兩個就是屬於&amp;quot;text&amp;quot;&lt;br /&gt;&lt;br /&gt;開始講講那三種Select helper&lt;br /&gt;&lt;br /&gt;&lt;font size="5"&gt;select:&lt;/font&gt;&lt;br /&gt;&amp;nbsp; select(object, method, choices, options = {}, html_options = {})&lt;br /&gt;&amp;nbsp; 在ActionView::Helpers::FormOptionsHelper中定義&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;object是一個實體化變數，這裡很明顯的就是要擺上model物件嘛！&lt;/li&gt;&lt;li&gt;method則是object的一個屬性，也是資料表中的對應欄位&lt;/li&gt;&lt;li&gt;choices就是要被選的選項，可以是陣列或者是雜湊(Hash)&lt;/li&gt;&lt;li&gt;options與html_options則是一些選項&lt;/li&gt;&lt;/ul&gt;在這邊來舉個例子吧&lt;br /&gt;&lt;blockquote&gt;&amp;lt;%= select(&amp;quot;project&amp;quot;, &amp;quot;teacher_id&amp;quot;, @teachers.collect{|t| [t.name, t.id]}, { :include_blank =&amp;gt; false }) %&amp;gt;&lt;br /&gt;&amp;lt;%= select(&amp;quot;project&amp;quot;, &amp;quot;student_id&amp;quot;, {&amp;quot;CFC&amp;quot; =&amp;gt; '1', &amp;quot;EF&amp;quot; =&amp;gt; '2'}) %&amp;gt;&lt;br /&gt;第一個例子中，@teachers在Controller是這樣的&lt;br /&gt;@teachers = Teacher.find(:all, :select =&amp;gt; 'id, name')&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;font size="5"&gt;select_tag:&lt;/font&gt;&lt;br /&gt;&amp;nbsp; select_tag(name, option_tags = nil, options = {})&lt;br /&gt;&amp;nbsp; 在ActionView::Helpers::FormTagHelper中定義&lt;br /&gt;&lt;br /&gt;如果你很喜歡手動打option的話.. 那用select_tag準沒錯啦！&lt;br /&gt;在select_tag中，name將會是params所接收值所用的鍵&lt;br /&gt;直接看範例&lt;br /&gt;&lt;blockquote&gt;&amp;lt;%= select_tag 'user', &amp;quot;&amp;lt;option&amp;gt;CFC&amp;lt;/option&amp;gt;&amp;quot; %&amp;gt;&lt;br /&gt;這時在Controller中將會用params[:user]來接收傳過來的值&lt;br /&gt;但是select_tag也可以搭配options_for_select或者options_from_collection_for_select一起使用.. 來看一個範例吧&lt;br /&gt;&amp;lt;%= select_tag('sid[]', options_from_collection_for_select(@students, 'id', 'name'), :multiple =&amp;gt; true)%&amp;gt;&lt;br /&gt;因為加上了:multiple，所以可以接受多值選擇，這時在Controller接收到的sid將會是一個陣列，這也是我所卡住的地方.. (( 真丟臉&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;font size="5"&gt;collection_select:&lt;/font&gt;&lt;br /&gt;&amp;nbsp; collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})&lt;br /&gt;&amp;nbsp; 在ActionView::Helpers::FormOptionsHelper中定義&lt;br /&gt;&lt;br /&gt;如果資料來源是從資料庫來的話，可以使用這個來做下拉式選單。&lt;br /&gt;這個Object不用我說，就是你的model&lt;br /&gt;method呢？當然就是欄位啦&lt;br /&gt;其實嚴格說起來，這只是select+options_from_collection_for_select的組合啦！&lt;br /&gt;範例：&lt;br /&gt;&lt;blockquote&gt;&amp;lt;%= collection_select(:payment, :id, @payments, :id, :name, options ={:prompt =&amp;gt; &amp;quot;-Select a continent&amp;quot;}, :class =&amp;gt;&amp;quot;payment&amp;quot;) %&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;再次謝謝原作者&lt;font color="#ff0000"&gt;carpet_the_walls&lt;/font&gt;:)&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/885409460094744129/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/885409460094744129" rel="replies" title="2 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/885409460094744129" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/885409460094744129" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/06/rails.html" rel="alternate" title="Rails中實做下拉式選單" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-5419273613031563986</id><published>2007-06-16T00:11:00.000+08:00</published><updated>2007-06-16T15:29:28.415+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="library"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="sms"/><title type="text">Ruby library -- SMS</title><content type="html">這個Library搭配&lt;a href="http://www.twsms.com"&gt;http://www.twsms.com&lt;/a&gt;才可以使用喔！&lt;br /&gt;有任何問題可以直接回這篇文章，或者寫信問我，我信箱是Gmail的，帳號跟我的這個部落格帳號一樣&lt;br /&gt;&lt;br /&gt;我先說用法好了：&lt;br /&gt;&lt;blockquote&gt;require 'twsms'&lt;br /&gt;sms = TWSMS.new(username, password) # 帳號密碼&lt;br /&gt;sms.sendSMS(mobile, message) # mobile: 目標手機號碼&amp;nbsp; message: 要傳的訊息&lt;br /&gt;&lt;/blockquote&gt;原始碼：&lt;br /&gt;&lt;blockquote&gt;=begin&lt;br /&gt;&amp;nbsp; == Information ==&lt;br /&gt;&amp;nbsp; === Copyright: Apache 2.0&lt;br /&gt;&amp;nbsp; === Author: CFC &amp;lt; zusocfc@gmail.com &amp;gt;&lt;br /&gt;&amp;nbsp; === Prog. Name: TWSMS lib&lt;br /&gt;&amp;nbsp; === Version: 0.1&lt;br /&gt;&amp;nbsp; == Introduction ==&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TWSMS(Taiwan SMS)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TWSMS is a SMS sender, it must use with http://www.twsms.com.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; There has no any library for the SMS system in Taiwan. So, I just coded this and release this version.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; This version just support for sending SMS.&lt;br /&gt;&amp;nbsp; == Featured ==&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; == Using TWSMS ==&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; It just support for standalone class now.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; require it before you use.&lt;br /&gt;&amp;nbsp; === Using TWSMS by standalone class&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; require 'twsms'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sms = TWSMS.new('username', 'password')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sms.sendSMS('09xxxxxxxx', 'Hi, there! TWSMS library is so easy to use!')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sms.sendSMS('09xxxxxxxx', 'Send SMS with options',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :popup =&amp;gt; 1,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :type =&amp;gt; &amp;quot;now&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :mo =&amp;gt; &amp;quot;Y&amp;quot;)&lt;br /&gt;=end&lt;br /&gt;&lt;br /&gt;%w|uri cgi net/http|.each{|r| require r}&lt;br /&gt;&lt;br /&gt;class TWSMS&lt;br /&gt;&amp;nbsp; def initialize(username, password)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @uname, @upwd = username, password&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @options = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :type =&amp;gt; &amp;quot;now&amp;quot;, # Sending type: now, vld&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :popup =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :mo =&amp;gt; &amp;quot;Y&amp;quot;.upcase,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :vldtime =&amp;gt; &amp;quot;86400&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :modate =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :dlvtime =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :wapurl =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :encoding =&amp;gt; &amp;quot;big5&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @errors = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1.to_s.to_sym =&amp;gt; &amp;quot;Send failed&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -2.to_s.to_sym =&amp;gt; &amp;quot;Username or password is invalid&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -3.to_s.to_sym =&amp;gt; &amp;quot;Popup tag error&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -4.to_s.to_sym =&amp;gt; &amp;quot;Mo tag error&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -5.to_s.to_sym =&amp;gt; &amp;quot;Encoding tag error&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -6.to_s.to_sym =&amp;gt; &amp;quot;Mobile tag error&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -7.to_s.to_sym =&amp;gt; &amp;quot;Message tag error&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -8.to_s.to_sym =&amp;gt; &amp;quot;vldtime tag error&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -9.to_s.to_sym =&amp;gt; &amp;quot;dlvtime tag error&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -10.to_s.to_sym =&amp;gt; &amp;quot;You have no point&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -11.to_s.to_sym =&amp;gt; &amp;quot;Your account has been blocked&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -12.to_s.to_sym =&amp;gt; &amp;quot;Type tag error&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -13.to_s.to_sym =&amp;gt; &amp;quot;You can't send SMS message by dlvtime tag if you use wap push&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -14.to_s.to_sym =&amp;gt; &amp;quot;Source IP has no permission&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -99.to_s.to_sym =&amp;gt; &amp;quot;System error!! Please contact the administrator, thanks!!&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @args = []&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @url ||= &amp;quot;http://api.twsms.com/send_sms.php?&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @url += &amp;quot;username=&amp;quot; + @uname&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @url += &amp;quot;&amp;amp;password=&amp;quot; + @upwd&lt;br /&gt;&amp;nbsp; end&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; def sendSMS(mobile, message, opt={})&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @options[:mobile], @options[:message] = mobile, message&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @options.merge!(opt).each{|k, v| @args &amp;lt;&amp;lt; k.to_s + &amp;quot;=&amp;quot; + CGI::escape(v.to_s)}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @url += &amp;quot;&amp;amp;&amp;quot; + @args.join(&amp;quot;&amp;amp;&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.chk_val&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chk_errors(Net::HTTP.get(URI.parse(@url)))&lt;br /&gt;&amp;nbsp; end&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; def chk_val&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @options[:dlvtime] = &amp;quot;&amp;quot; unless @options[:type] == &amp;quot;dlv&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @options[:wapurl] = &amp;quot;&amp;quot; if @options[:type] != (&amp;quot;push&amp;quot; &amp;amp;&amp;amp; &amp;quot;upush&amp;quot;)&lt;br /&gt;&amp;nbsp; end&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; def chk_errors(resp)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; resp = resp.split(&amp;quot;=&amp;quot;)[1]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if @errors.has_key?(resp.to_s.to_sym)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts &amp;quot;==========&amp;quot;, &amp;quot;Error!! Message: &amp;quot;, @errors[resp.to_s.to_sym]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts &amp;quot;==========&amp;quot;, &amp;quot;Message has been send! Your message id is: &amp;quot; + resp.to_s&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end&lt;br /&gt;&amp;nbsp; end&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; protected :chk_val&lt;br /&gt;end&lt;br /&gt;&lt;/blockquote&gt;晚點丟到Google Code Hosting上去...&lt;br /&gt;&lt;br /&gt;Updated:&lt;br /&gt;TWSMS on Google Code Hosting: &lt;a href="http://code.google.com/p/twsms/"&gt;http://code.google.com/p/twsms/&lt;/a&gt;&lt;br /&gt;SMSender on RubyForge: &lt;a href="http://rubyforge.org/projects/smsender/"&gt;http://rubyforge.org/projects/smsender/&lt;/a&gt;&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/5419273613031563986/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/5419273613031563986" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/5419273613031563986" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/5419273613031563986" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/06/ruby-library-sms.html" rel="alternate" title="Ruby library -- SMS" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-3338721677177178640</id><published>2007-06-12T11:42:00.000+08:00</published><updated>2007-06-19T23:29:32.742+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="activerecord"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="randomize"/><title type="text">find_by_randomize -- 讓ActiveRecord可以亂數取資料</title><content type="html">請在model內加入：&lt;br /&gt;&lt;blockquote&gt;def self.find_by_randomize&lt;br /&gt;&amp;nbsp; ids = self.find(:all, :select =&amp;gt; [id])&lt;br /&gt;&amp;nbsp; self.find(ids[rand(ids.size)][&amp;quot;id&amp;quot;].to_i)&lt;br /&gt;end&lt;br /&gt;&lt;/blockquote&gt;這樣一來，就可以取亂數選取資料了！&lt;br /&gt;&lt;br /&gt;請參考這篇：&lt;a href="http://lightyror.thegiive.net/2006/10/active-record-find.html"&gt;為你的 Active Record 做出多采多姿的 find&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;當然囉.. thegiive那個就是我修改的範本:P&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/3338721677177178640/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/3338721677177178640" rel="replies" title="1 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/3338721677177178640" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/3338721677177178640" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/06/findbyrandomize-activerecord.html" rel="alternate" title="find_by_randomize -- 讓ActiveRecord可以亂數取資料" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-212766778622206165</id><published>2007-05-15T13:35:00.001+08:00</published><updated>2007-05-15T13:47:44.844+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="html tag"/><category scheme="http://www.blogger.com/atom/ns#" term="plaintext"/><title type="text">具有破壞版面功用的HTML標籤：plaintext</title><content type="html">剛剛寫程式寫到一半忽然想到這個破壞力極大的標籤&lt;br /&gt;雖然這個標籤不會造成多大的危害，但是在某些網站上，還是可以造成一定程度的破壞&lt;br /&gt;所以請各位Web Developers注意，過濾掉這個標籤：&amp;lt;plaintext&amp;gt;&lt;br /&gt;另外，HTML的註解標籤也請過濾，也就是：&amp;lt;!--&lt;br /&gt;這兩個都可以破壞版面！&lt;br /&gt;結果請看這邊：&lt;br /&gt;&lt;a target="_blank" href="http://willh.org/cfc/cfc_priv/plaintext.htm"&gt;http://willh.org/cfc/cfc_priv/plaintext.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;解決方式：&lt;br /&gt;如果是使用黑名單來擋HTML標籤，請把plaintext給加入&lt;br /&gt;如果沒有使用檔標籤的套件，請盡快使用&lt;br /&gt;如果沒有辦法使用檔標籤的套件，請透過Regular Expression幹掉它！&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/212766778622206165/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/212766778622206165" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/212766778622206165" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/212766778622206165" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/05/htmlplaintext.html" rel="alternate" title="具有破壞版面功用的HTML標籤：plaintext" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-4930763161044628389</id><published>2007-05-13T02:24:00.000+08:00</published><updated>2007-05-13T02:27:00.500+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="activerecord"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type="text">php+ruby(with ActiveRecord)又一新範例 -- RSS聯撥器</title><content type="html">上個例子，我們用PHP + Ruby 搭配ActiveRecord的方式來寫資料新增的程式&lt;br /&gt;今天我們就來延伸應用一下，要做什麼呢？ RSS聯撥器！&lt;br /&gt;有鑒於GoogleReader的RSS聯撥器產生出來的東西太醜(只能修改一兩個小地方.. 我總覺得那好胖=&amp;nbsp; =)，乾脆自己寫個來用&lt;br /&gt;Demo網址改天再PO上來，我們先來寫程式比較重要:P&lt;br /&gt;主機請記得先裝好Ruby、PHP、Apache跟MySQL；OS要啥都沒差，我比較建議LAMP的配置XD&lt;br /&gt;我們來建立一個叫做feeds的目錄包含一個子目錄，叫做lib：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; mkdir -p feeds/lib&lt;br /&gt;&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;先跳到feeds/lib新增幾個會被require的檔案：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; cd feeds/lib&lt;br /&gt;&amp;nbsp; touch connect.rb model.rb require.rb&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;以下是各個檔案的用處：&lt;br /&gt;&lt;blockquote&gt;- connect.rb&lt;br /&gt;&amp;nbsp; 資料庫連線初始化&lt;br /&gt;- model.rb&lt;br /&gt;&amp;nbsp; 資料表模型宣告&lt;br /&gt;- rqeuire.rb&lt;br /&gt;&amp;nbsp; 會用到的額外library引入&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;原始碼：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; - connect.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #!/usr/bin/env ruby;require 'lib/require';ActiveRecord::Base.establish_connection({:adapter =&amp;gt; &amp;quot;mysql&amp;quot;,:host =&amp;gt; &amp;quot;localhost&amp;quot;,:username =&amp;gt; &amp;quot;username&amp;quot;,:password =&amp;gt; &amp;quot;password&amp;quot;,:database =&amp;gt; &amp;quot;others&amp;quot;})&lt;br /&gt;&amp;nbsp; - model.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #!/usr/bin/env ruby;require 'lib/connect';class Feed &amp;lt; ActiveRecord::Base;end&lt;br /&gt;&amp;nbsp; - require.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #!/usr/bin/env ruby;%w|rubygems active_record hpricot open-uri|.each{|lib| require lib}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;一切搞定後，我們可以開始來建立資料庫了！&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; mysql&amp;gt; create database others;&lt;br /&gt;&amp;nbsp; mysql&amp;gt; use others;&lt;br /&gt;&amp;nbsp; mysql&amp;gt; create table feeds(id int, uri varchar(255));&lt;br /&gt;&amp;nbsp; mysql&amp;gt; describe feeds;&lt;br /&gt;&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;看看資料表結構是否正確！&lt;br /&gt;接著回到上一層目錄，新增底下的幾個檔案：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; touch index.php list.rb new.htm new_record.rb save.php&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;- index.php&lt;br /&gt;&amp;nbsp; 網站首頁，會列出目前的RSS feed&lt;br /&gt;- save.php&lt;br /&gt;&amp;nbsp; 儲存RSS feed網址&lt;br /&gt;- list.rb&lt;br /&gt;&amp;nbsp; 處理RSS feed&lt;br /&gt;- new_record.rb&lt;br /&gt;&amp;nbsp; 將RSS feed網址存入資料庫(也可以直接用php寫.. 我是沒有意見)&lt;br /&gt;- new.htm&lt;br /&gt;&amp;nbsp; 新增RSS feed網址的表單&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;原始碼我就直接貼了&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; - index.php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;html&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;a href=&amp;quot;new.htm&amp;quot;&amp;gt;Create&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;?php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec(&amp;quot;ruby list.rb&amp;quot;, $args);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for($i=0;$i&amp;lt;count($args);$i+=3)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &amp;quot;&amp;lt;li&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot; . $args[$i+1] . &amp;quot;\&amp;quot; title=\&amp;quot;作者：&amp;quot; . $args[$i+2] . &amp;quot;\&amp;quot;&amp;gt;&amp;quot; . $args[$i] . &amp;quot;&amp;lt;/a&amp;gt; -- &amp;quot; . $args[$i+2] . &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ?&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; - save.php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;?php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec(&amp;quot;ruby new_record.rb &amp;quot; . $_POST[&amp;quot;feed_uri&amp;quot;], $arg);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($arg) echo &amp;quot;&amp;lt;script&amp;gt;location.href=\&amp;quot;index.php\&amp;quot;;&amp;lt;/script&amp;gt;&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ?&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; - list.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #!/usr/bin/env ruby&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; =begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Filename: list.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; =end&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; require 'lib/model'&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Feed.find(:all).each{|feed|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; doc = Hpricot(open(feed.uri))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rss = doc.search(&amp;quot;entry&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max = rss.size &amp;gt; 3 ? 3 : rss.size&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max.times {|i|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break if rss.nil?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts rss[i].search(&amp;quot;title&amp;quot;).text.gsub(/\n/, &amp;quot; &amp;quot;) # Return the title of the article to the PHP file.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts rss[i].search(&amp;quot;link[@rel='alternate']&amp;quot;)[0][&amp;quot;href&amp;quot;].gsub(/\n/, &amp;quot; &amp;quot;) # Return the link of the article to the PHP file.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts rss[i].search(&amp;quot;author/name&amp;quot;).text.gsub(/\n/, &amp;quot; &amp;quot;) # Return the author of the article to the PHP file.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; - new_record.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #!/usr/bin/env ruby&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; =begin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Filename: new_record.rb&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; =end&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; require 'lib/model';puts Feed.new({:uri =&amp;gt; ARGV[0]}).save&lt;br /&gt;&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; - new.htm&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;html&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form action=&amp;quot;save.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;Please input the feed url:&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;feed_uri&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;p&amp;gt;&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Save!&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;OK，這樣就可以啦XD&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/4930763161044628389/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/4930763161044628389" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/4930763161044628389" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/4930763161044628389" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/05/phprubywith-activerecord-rss.html" rel="alternate" title="php+ruby(with ActiveRecord)又一新範例 -- RSS聯撥器" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-7318760113586206871</id><published>2007-05-09T18:32:00.000+08:00</published><updated>2007-06-12T11:47:20.259+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="activerecord"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type="text">PHP + Ruby with ActiveRecord 範例</title><content type="html">如果老闆要求使用php，可是您卻是Ruby狂熱者，這.. 怎辦呢？&lt;br /&gt;沒關係！ 一樣用Ruby寫，php只要做一點點的處理就好！&lt;br /&gt;How to? php中有這個函式：exec&lt;br /&gt;( 本範例實作於Windows XP Professional搭配InstantRails；在其他作業系統上沒有測試過，不過各位還是可以嘗試看看 )&lt;br /&gt;我們來試試看吧！&lt;br /&gt;先寫個test.rb：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; #!/usr/bin/env ruby&lt;br /&gt;&amp;nbsp; # &lt;br /&gt;&amp;nbsp; # Filename: test.rb&lt;br /&gt;&amp;nbsp; # &lt;br /&gt;&amp;nbsp; puts &amp;quot;Hello&amp;quot;&lt;br /&gt;&amp;nbsp; puts &amp;quot;world&amp;quot;&lt;br /&gt;&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;再寫個test.php：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; &amp;lt;?php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec(&amp;quot;test.rb&amp;quot;, $args);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach($arg as $args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo $arg . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;&amp;nbsp; ?&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;將兩個檔案放在同一個目錄下後，打開瀏覽器瀏覽test.php；看！是不是顯示結果出來了？&lt;br /&gt;OK，我們直接來用ActiveRecord幫我們新增資料吧！&lt;br /&gt;我們需要一張普通頁面、一張php網頁跟一個ruby檔案：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; #!/usr/bin/env ruby&lt;br /&gt;&amp;nbsp; #&lt;br /&gt;&amp;nbsp; # Filename: ar.rb&lt;br /&gt;&amp;nbsp; #&lt;br /&gt;&amp;nbsp; require 'rubygems'&lt;br /&gt;&amp;nbsp; gem 'activerecord'&lt;br /&gt;&amp;nbsp; ActiveRecord::Base.establish_connection(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :adapter =&amp;gt; 'mysql',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :host =&amp;gt; 'localhost',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :username =&amp;gt; 'root',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :password =&amp;gt; '',&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :database =&amp;gt; 'cal'&lt;br /&gt;&amp;nbsp; )&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; class Event &amp;lt; ActiveRecord::Base;end&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; name, descr = ARGV[0], ARGV[1]&lt;br /&gt;&amp;nbsp; puts Event.new({:name =&amp;gt; name, :descr =&amp;gt; descr, :date =&amp;gt; Date.today, :time =&amp;gt; Time.now}).save&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;好了，接下來是普通頁面，這是送出表單：&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; &amp;lt;!-- Filename: ar_form.html --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;html&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;PHP with Ruby and ActiveRecord&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form action=&amp;quot;ar_save.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Username: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;usrname&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Description: &amp;lt;textarea name=&amp;quot;descr&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Save it!&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;這是php網頁：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; &amp;lt;?php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Filename: ar_save.php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec(&amp;quot;2.rb &amp;quot; . $_POST[&amp;quot;usrname&amp;quot;] . &amp;quot; &amp;quot; . $_POST[&amp;quot;descr&amp;quot;], $arg);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if($arg[0]) echo &amp;quot;Success!&amp;quot;;&lt;br /&gt;&amp;nbsp; ?&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;OK，讓我們來試試看吧！&lt;br /&gt;Look!! It works!!&lt;br /&gt;現在，我們來寫個ar_read.rb跟ar_read.php來讀取資料吧：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; # Filename: ar_read.rb&lt;br /&gt;&amp;nbsp; require 'rubygems'&lt;br /&gt;&amp;nbsp; gem 'activerecord'&lt;br /&gt;&amp;nbsp; ActiveRecord::Base.establish_connection(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :adapter&amp;nbsp; =&amp;gt; &amp;quot;mysql&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :host&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;gt; &amp;quot;localhost&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :username =&amp;gt; &amp;quot;root&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :password =&amp;gt; &amp;quot;&amp;quot;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; :database =&amp;gt; &amp;quot;cal&amp;quot;&lt;br /&gt;&amp;nbsp; )&lt;br /&gt;&amp;nbsp; class Event &amp;lt; ActiveRecord::Base;end&lt;br /&gt;&amp;nbsp; events = Event.find(:all, :conditions =&amp;gt; &amp;quot;name = '#{ARGV[0]}'&amp;quot;)&lt;br /&gt;&amp;nbsp; events.each{ |event|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts event.name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts event.descr&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts event.date.to_s(:db)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; puts event.time.strftime(&amp;quot;%H:%M:%S&amp;quot;)&lt;br /&gt;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;?php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Filename: ar_read.php&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec(&amp;quot;ar_read.rb &amp;quot; . $_GET[&amp;quot;name&amp;quot;], $args);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info = array();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for($i=0, $j=0;$i&amp;lt;count($args);$i+=4, $j++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info[$j][&amp;quot;name&amp;quot;] = $args[$i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info[$j][&amp;quot;descr&amp;quot;] = $args[$i+1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info[$j][&amp;quot;date&amp;quot;] = $args[$i+2];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info[$j][&amp;quot;time&amp;quot;] = $args[$i+3];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for($j=0;$j&amp;lt;count($info);$j++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &amp;quot;Name =&amp;gt; &amp;quot; . $info[$j][&amp;quot;name&amp;quot;] . &amp;quot;&amp;lt;br /&amp;gt;Description =&amp;gt; &amp;quot; . $info[$j][&amp;quot;descr&amp;quot;] . &amp;quot;&amp;lt;br /&amp;gt;Date =&amp;gt; &amp;quot; . $info[$j][&amp;quot;date&amp;quot;] . &amp;quot;&amp;lt;br /&amp;gt;Time =&amp;gt; &amp;quot; . $info[$j][&amp;quot;time&amp;quot;] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;&amp;nbsp; ?&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&amp;nbsp; &lt;br /&gt;看看結果，hmmm.. 看起來真棒！&lt;br /&gt;嗯？如何？Ruby + ActiveRecord的威力很強大吧？&lt;br /&gt;為什麼不要直接用PHP寫就好？ 因為光寫SQL你就想跳樓，何必呢？&lt;br /&gt;記住，在Ruby的檔案中，不可以用：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; puts 1, 2, 3&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;這種方法，會造成php收不到回傳，因此必須用這種寫法：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; puts 1&lt;br /&gt;&amp;nbsp; puts 2&lt;br /&gt;&amp;nbsp; puts 3&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;或者就是：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp; puts 1; puts 2; puts 3&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;端看個人喜好囉！&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/7318760113586206871/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/7318760113586206871" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/7318760113586206871" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/7318760113586206871" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/05/php-ruby-with-activerecord.html" rel="alternate" title="PHP + Ruby with ActiveRecord 範例" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-107440539577217471</id><published>2007-04-30T14:21:00.000+08:00</published><updated>2007-06-12T11:52:47.904+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="array"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type="text">Array.longest ( Array.which_long?修改版 )</title><content type="html">感謝在Ruby-talk上的：&lt;br /&gt;&lt;blockquote&gt;Chris Carter&lt;br /&gt;David A. Black&lt;br /&gt;Harry&lt;br /&gt;Robert Dober&lt;br /&gt;James Edward&lt;br /&gt;&lt;/blockquote&gt;:)&lt;br /&gt;原本的程式碼太長，而且使用內建的功能組合起來就好&lt;br /&gt;再者，原本的程式會把陣列的元素強制轉型為String&lt;br /&gt;&lt;br /&gt;新的程式碼為：&lt;br /&gt;&lt;blockquote&gt;class Array&lt;br /&gt;&amp;nbsp; def longest&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Harry &amp;lt;&lt;a target="_blank" href="http://www.kakueki.com/ruby/list.html" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.kakueki.com/ruby&lt;wbr&gt;&lt;/wbr&gt;/list.html&lt;/a&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.select{|r| r.to_s.size == self.max{|x, y| x.to_s.size &amp;lt;=&amp;gt; y.to_s.size}.to_s.size}&lt;br /&gt;&amp;nbsp; end&lt;br /&gt;end&lt;br /&gt;&lt;/blockquote&gt;這個程式是由Harry所寫出的，底下轉貼原文：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;div style="direction: ltr;"&gt;&lt;span class="q"&gt;On 4/29/07, Billy Hsu &amp;lt;&lt;a href="mailto:ruby.maillist@gmail.com" onclick="return top.js.OpenExtLink(window,event,this)"&gt;ruby.maillist@gmail.com&lt;/a&gt;&amp;gt;  wrote:&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="direction: ltr;"&gt;&lt;span class="q"&gt;&amp;gt; Thanks for your reply, I learned  more on this thread :P&lt;br /&gt;&amp;gt; But I have a question:&lt;br /&gt;&amp;gt; If I have an array  contain:&lt;br /&gt;&amp;gt; &amp;nbsp; ary = [1, 12, 234, &amp;quot;456&amp;quot;]&lt;br /&gt;&amp;gt; there has two elements  which size is 3, but the longest method just returned&lt;br /&gt;&amp;gt; one of  them.&lt;br /&gt;&amp;gt; I can't solve it :(&lt;br /&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="direction: ltr;"&gt;Is this what you are looking for?&lt;br /&gt;Do you want all  longest elements?&lt;br /&gt;&lt;br /&gt;big = [1, 12, 234,45,978, &amp;quot;456&amp;quot;].max {|x,y| x.to_s.size  &amp;lt;=&amp;gt; y.to_s.size}&lt;br /&gt;p [1, 12, 234,45,978, &amp;quot;456&amp;quot;].select {|r| r.to_s.size  == big.to_s.size}&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div style="direction: ltr;"&gt;由於Harry不喜歡被張貼信箱，因此我將他的網站給貼上來：&lt;br /&gt;&lt;blockquote&gt;&lt;span class="sg"&gt;&lt;a target="_blank" href="http://www.kakueki.com/ruby/list.html" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://www.kakueki.com/ruby&lt;wbr&gt;&lt;/wbr&gt;/list.html&lt;/a&gt;&lt;br /&gt;A Look into Japanese Ruby List in English&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;再一次謝謝Harry的幫助:)&lt;br /&gt;也謝謝其他人，讓我學到許多東西:D&lt;br /&gt;Thanks again and again!!&lt;br /&gt;&lt;br /&gt;CFC --&lt;span class="sg"&gt;&lt;/span&gt;&lt;span class="sg"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/107440539577217471/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/107440539577217471" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/107440539577217471" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/107440539577217471" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/04/arraylongest-arraywhichlong.html" rel="alternate" title="Array.longest ( Array.which_long?修改版 )" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-975999560649444891</id><published>2007-04-28T21:43:00.000+08:00</published><updated>2007-06-12T11:54:02.420+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="array"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type="text">Array.which_long? -- 剛出爐的函式</title><content type="html">&lt;blockqoute&gt;&lt;blockquote&gt;class Array&lt;br /&gt;  def which_long?&lt;br /&gt;    # Version 1.0&lt;br /&gt;    # Coded by CFC &lt;&gt;&lt;br /&gt;    # PLEASE DO NOT REMOVE THE COMMENT OF THIS FUNCTION, THANKS A LOT.&lt;br /&gt;    # Usage:&lt;br /&gt;    #   ['a', 'ab', 'abc' 1234].which_long?&lt;br /&gt;    #   =&gt; 1234&lt;br /&gt;    self.size.times{|i| self[i]=self[i].to_s}&lt;br /&gt;    max, long = 0, String.new&lt;br /&gt;    self.each{|item| item.size &gt; max ? (max = item.size; long = item) : next}&lt;br /&gt;    long&lt;br /&gt;  end&lt;br /&gt;end&lt;/blockquote&gt;&lt;br /&gt;&lt;/blockqoute&gt;&lt;br /&gt;以上是原始碼，使用方式如下：&lt;br /&gt;&lt;br /&gt;puts ['a', 'ab', 'abc', 1234].which_long?&lt;br /&gt;=&amp;gt; 1234&lt;br /&gt;&lt;br /&gt;授權還沒定，不過大家還是可以拿去使用:P&lt;br /&gt;請不要拿掉註解.. 謝謝&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/975999560649444891/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/975999560649444891" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/975999560649444891" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/975999560649444891" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/04/arraywhichlong.html" rel="alternate" title="Array.which_long? -- 剛出爐的函式" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-3278484586157920139</id><published>2007-04-24T17:15:00.000+08:00</published><updated>2007-06-12T11:53:22.794+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="error"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="rubygems"/><title type="text">rubygems 0.9.2的問題</title><content type="html">&lt;h4&gt;本文同步發佈至：&lt;a href="http://blog.pixnet.net/zusocfc/post/4160285"&gt;http://blog.pixnet.net/zusocfc/post/4160285&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;升級Rubygems到0.9.2時，不論是安裝gem包還是升級gem包&lt;br /&gt;都會產生一個Error：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; ERROR:&amp;nbsp;&amp;nbsp;While executing gem ... (NoMethodError)&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;undefined method `refresh' for #&amp;lt;Hash:0xb799a478&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;這個時候該怎麼辦呢？&lt;br /&gt;根據這篇文章所寫：&lt;a href="http://www.cnzxh.net/blog/Index.php?do=readArticle&amp;amp;articleId=145"&gt;http://www.cnzxh.net/blog/Index.php?do=readArticle&amp;amp;articleId=145&lt;/a&gt;&lt;br /&gt;我們可以做這個動作：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;rm -f /usr/local/lib/ruby/gems/1.8/source_cache&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;經過測試後.. 真的就正常了..&lt;br /&gt;所以如果你有出同樣問題 請照做吧:P&lt;br /&gt;( 我想這問題只會發生在*nix系統上 )&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/3278484586157920139/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/3278484586157920139" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/3278484586157920139" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/3278484586157920139" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/04/rubygems-092.html" rel="alternate" title="rubygems 0.9.2的問題" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-880961474649988167</id><published>2007-04-20T23:36:00.000+08:00</published><updated>2007-06-12T11:52:04.340+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="account"/><category scheme="http://www.blogger.com/atom/ns#" term="generator"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type="text">大量帳號建置器 版本1跟版本2</title><content type="html">先說好，跟往常一樣.. 到我Pixnet的網誌看會比較不頭痛:P&lt;br /&gt;版本1可以不用寫群組名稱，但是程式碼好醜ˊˋ&lt;br /&gt;版本2必須要有群組名稱，適用於學校(?)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://willh.org/cfc/cfc_priv/rubys/account/account.tgz"&gt;版本1下載&lt;/a&gt;&lt;br /&gt;&lt;a href="http://willh.org/cfc/cfc_priv/rubys/account/yml_account.tgz"&gt;版本2下載&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;版本1：&lt;br /&gt;&lt;br /&gt;#!/usr/bin/env ruby&lt;br /&gt;File.open(ARGV[0]) do |file|&lt;br /&gt;&amp;nbsp; while a = file.gets&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = a.chomp.split(/ /)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;quot;username =&amp;gt; #{a[0]} &amp;quot;, &amp;quot;password =&amp;gt; #{a[1]} &amp;quot;, &amp;quot;group =&amp;gt; #{a[2]}&amp;quot;, &amp;quot;\n&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; a[2].nil? ? `useradd -m #{a[0]}` : `useradd -m -G #{a[2]} #{a[0]}`&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; `echo #{a[0]}:#{a[1]} | chpasswd`&lt;br /&gt;&amp;nbsp; end&lt;br /&gt;end&lt;br /&gt;exec &amp;quot;pwconv&amp;quot;&lt;br /&gt;&lt;br /&gt;使用者清單寫法：&lt;br /&gt;&lt;br /&gt;&amp;nbsp; 帳號 密碼 群組&lt;br /&gt;&lt;br /&gt;版本2：&lt;br /&gt;&lt;br /&gt;#!/usr/bin/env ruby&lt;br /&gt;require 'yaml'&lt;br /&gt;YAML.load_file(ARGV[0]).each{ |grp|&lt;br /&gt;&amp;nbsp; grp.each{ |usr|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; usr.each{ |i|&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; info = i.chomp.split(/ /)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `useradd -m -G #{grp[0]} #{info[0]}`&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; `echo #{info[0]}:#{info[1]} | chpasswd`&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;`pwconv`&lt;br /&gt;&lt;br /&gt;使用者清單寫法：&lt;br /&gt;&lt;blockquote&gt;grp1:&lt;br /&gt;&amp;nbsp; - usr1 pwd1&lt;br /&gt;&amp;nbsp; - usr2 pwd2&lt;br /&gt;grp2:&lt;br /&gt;&amp;nbsp; - usr3 pwd3&lt;br /&gt;&amp;nbsp; - usr4 pwd4&lt;br /&gt;grp3:&lt;br /&gt;&amp;nbsp; - usr5 pwd5&lt;br /&gt;&amp;nbsp; - usr6 pwd6&lt;/blockquote&gt;使用方式都是：&lt;br /&gt;./account list&lt;br /&gt;&lt;br /&gt;程式授權.. 隨便啦&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/880961474649988167/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/880961474649988167" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/880961474649988167" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/880961474649988167" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/04/12.html" rel="alternate" title="大量帳號建置器 版本1跟版本2" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-4588882527832473454</id><published>2007-03-26T23:46:00.000+08:00</published><updated>2007-06-12T11:50:51.913+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="haml"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type="text">HAML</title><content type="html">最近開始接觸HAML&lt;br /&gt;在Rails中，預設使用ERb來當作模板描述語言，可是這樣寫個人認為非常醜也非常累...&lt;br /&gt;而之前看到HAML時感覺到那東西似乎沒有太大的可用性，難道要Designer也學Ruby嗎？&lt;br /&gt;不過後來我想通了..&lt;br /&gt;&lt;br /&gt;架構這部分可以給Coder作，Designer乖乖設計CSS就夠了..&lt;br /&gt;來看看底下這個Sample吧：&lt;br /&gt;&lt;br /&gt;這是rhtml&lt;br /&gt;&lt;xmp&gt;&lt;/xmp&gt;原始碼請看這地方：&lt;a href="http://blog.pixnet.net/zusocfc/post/3520168"&gt;http://blog.pixnet.net/zusocfc/post/3520168&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這是HAML&lt;br /&gt;&lt;br /&gt; #content&lt;br /&gt;   .left.column&lt;br /&gt;     %h2 Welcome to our site!&lt;br /&gt;     %p= print_information&lt;br /&gt;   .right.column= render :partial =&gt; "sidebar"&lt;br /&gt;&lt;br /&gt;看！少了多少行？&lt;br /&gt;可以讓開發速度變快耶= v =...&lt;br /&gt;最主要的是，看起來也比較美觀了！&lt;br /&gt;&lt;br /&gt;參考：&lt;br /&gt;http://haml.hamptoncatlin.com/tutorial/&lt;br /&gt;http://haml.hamptoncatlin.com/docs/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/4588882527832473454/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/4588882527832473454" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/4588882527832473454" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/4588882527832473454" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/03/haml.html" rel="alternate" title="HAML" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-2055632006176055218</id><published>2007-03-11T14:24:00.000+08:00</published><updated>2007-03-11T14:32:19.171+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type="text">Rails 安全性漏洞一則 -- attr_protected 與 attr_accessible</title><content type="html">我沒辦法在這邊正常的發布有表單HTML tag的文章，請連結至：&lt;br /&gt;&lt;a href="http://blog.pixnet.net/zusocfc/post/3220943"&gt;http://blog.pixnet.net/zusocfc/post/3220943&lt;/a&gt;&lt;br /&gt;觀看完整文章！&lt;br /&gt;&lt;br /&gt;Rails中有個安全性漏洞，請參考&lt;br /&gt;&lt;br /&gt;* http://manuals.rubyonrails.com/read/chapter/47&lt;br /&gt;* http://www.javaeye.com/topic/58686&lt;br /&gt;&lt;br /&gt;假設我們有個users table，表格欄位如下：&lt;br /&gt;&lt;br /&gt;* username # 很明顯就是帳號&lt;br /&gt;* password # 這就是密碼&lt;br /&gt;* role     # 權限名稱&lt;br /&gt;&lt;br /&gt;而我們提供給使用者註冊的頁面只會有username跟password欄位&lt;br /&gt;然後你的後端如果是這樣：&lt;br /&gt;&lt;br /&gt;User.create(params[:user])&lt;br /&gt;&lt;br /&gt;哦.. 這就真的好玩了..&lt;br /&gt;使用者在註冊時直接提權..&lt;br /&gt;那這要怎樣處理呢？&lt;br /&gt;&lt;br /&gt;我們可以在&lt;br /&gt;app/model/user.rb&lt;br /&gt;內新增這行：&lt;br /&gt;&lt;br /&gt;  attr_protected :role&lt;br /&gt;&lt;br /&gt;這樣一來，該欄位就會確定被忽略掉而不會被新增..&lt;br /&gt;不過你得做一下這道手續：&lt;br /&gt;&lt;br /&gt;user = User.new(params[:user])&lt;br /&gt;user.role = sanitize_properly(params[:user][:role])&lt;br /&gt;&lt;br /&gt;===== 分 - 隔 - 線 =====&lt;br /&gt;&lt;br /&gt;另外，我們可以使用&lt;br /&gt;&lt;br /&gt;  attr_accessible :username, :password&lt;br /&gt;&lt;br /&gt;這有點類似白名單的方式，可以過濾掉沒出現的欄位...&lt;br /&gt;&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/2055632006176055218/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/2055632006176055218" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/2055632006176055218" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/2055632006176055218" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/03/rails-attrprotected-attraccessible.html" rel="alternate" title="Rails 安全性漏洞一則 -- attr_protected 與 attr_accessible" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-133614068754461645</id><published>2007-03-04T02:12:00.000+08:00</published><updated>2007-03-04T02:36:42.801+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="in place editing"/><category scheme="http://www.blogger.com/atom/ns#" term="rails"/><title type="text">Rails -- InPlaceEdit</title><content type="html">用過Flickr嗎？&lt;br /&gt;如果你有Flickr相簿，應該對於修改照片標題、說明的方式記憶猶新吧？&lt;br /&gt;那種就叫做 In Place Editing&lt;br /&gt;在Rails中，要實做這種技術並不難，因為本身就內建這個功能&lt;br /&gt;不過到了Rails 2.0將會把這個從內建移除變成Plugins形勢存在&lt;br /&gt;可以參考這篇：&lt;a href="http://lightyror.thegiive.net/2007/02/in-plcae-editing-by-rails.html"&gt;In-plcae-editing by Rails&lt;/a&gt;&lt;br /&gt;不過我在這裡重新說明一次使用方式吧&lt;br /&gt;如果有&lt;%= javascript_include_tag :defaults %&gt;的話，那只剩下兩個步驟：&lt;br /&gt;Controller:&lt;br /&gt;&lt;br /&gt; class ObjectController &lt; ApplicationController&lt;br /&gt;  in_place_edit_for :object, :method&lt;br /&gt; end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;View:&lt;br /&gt;&lt;br /&gt; &lt;%= in_place_editor_field :object, :method %&gt;&lt;br /&gt;&lt;br /&gt;這樣就可以建立起最基本的InPlaceEditing欄位&lt;br /&gt;可是最基本的都是英文，因此Rails也提供了修改參數，可以參考&lt;a href="http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptMacrosHelper.html#M000569"&gt;這篇&lt;/a&gt;&lt;br /&gt; in_place_editor_field欄位有四個參數：&lt;br /&gt; &lt;b&gt;in_place_editor_field&lt;/b&gt;(object, method, tag_options = {}, in_place_editor_options = {})&lt;br /&gt;而修改的部分則是放在第四個參數；假設我要修改:saving_text：&lt;br /&gt; &lt;%= in_place_editor_field(:object, :method, {}, {:saving_text =&gt; "儲存中..."} %&gt;&lt;br /&gt;改好後記得重新整理頁面！&lt;br /&gt;&lt;br /&gt;另外，如果要建立多個欄位的話，必須用這種方法：&lt;br /&gt; class ObjectController &lt; ApplicationController&lt;br /&gt;  in_place_edit_for :object, :method1&lt;br /&gt;  in_place_edit_for :object, :method2&lt;br /&gt;  in_place_edit_for :object, :method3&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;這樣寫超麻煩的！因此可以這樣：&lt;br /&gt;&lt;br /&gt; class ObjectController &lt; ApplicationController&lt;br /&gt;  %w"method1 method2 method3".each do |m|&lt;br /&gt;    in_place_edit_for :object, m.to_sym&lt;br /&gt;  end&lt;br /&gt; end&lt;br /&gt;&lt;br /&gt;這樣未來在新增刪除上都會很方便！&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;_uacct = "UA-1447561-1";urchinTracker();&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/133614068754461645/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/133614068754461645" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/133614068754461645" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/133614068754461645" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/03/rails-inplaceedit.html" rel="alternate" title="Rails -- InPlaceEdit" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-1083894125333436315</id><published>2007-03-04T01:00:00.000+08:00</published><updated>2007-03-04T01:03:29.083+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="gtk"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type="text">Ruby/GTK 中文教學</title><content type="html">&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;這是&lt;a _fcksavedurl="http://www.ruby-lang.org/zh_TW/" href="http://www.ruby-lang.org/zh_TW/"&gt;http://www.ruby-lang.org/zh_TW/&lt;/a&gt; 站長所寫的一篇教學&lt;br /&gt;網址是：&lt;a _fcksavedurl="http://info.sayya.org/~sjh/sjh_rubygtk.pdf" href="http://info.sayya.org/%7Esjh/sjh_rubygtk.pdf"&gt;http://info.sayya.org/~sjh/sjh_rubygtk.pdf&lt;/a&gt;&lt;br /&gt;寫得很詳細、簡單明瞭！&lt;br /&gt;如果有需要可以看看&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-1447561-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;</content><link href="http://zusocfc.blogspot.com/feeds/1083894125333436315/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/1083894125333436315" rel="replies" title="1 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/1083894125333436315" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/1083894125333436315" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/03/rubygtk.html" rel="alternate" title="Ruby/GTK 中文教學" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-7167121842167045465</id><published>2007-03-01T23:24:00.000+08:00</published><updated>2007-03-01T23:42:37.502+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hobix"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="Website"/><title type="text">Balloon -- Ruby百寶箱</title><content type="html">&lt;a href="http://balloon.hobix.com/"&gt;http://balloon.hobix.com/&lt;/a&gt;&lt;br /&gt;&lt;h1&gt;Here, Try a Balloon&lt;/h1&gt;&lt;strong&gt;Balloon&lt;/strong&gt; 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!&lt;br /&gt;&lt;br /&gt;簡單的說，Balloon提供給Ruby Coders一個可以建立demo的平台，如果有玩過&lt;a href="http://www.dob.com.tw"&gt;DOB首頁製作百寶箱&lt;/a&gt;作者群的人應該可以很快上手，因為跟發布文章的介面有點類似&lt;br /&gt;它定義了幾個Actions：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Run some Ruby code&lt;/li&gt;&lt;li&gt;Fetch a gem&lt;/li&gt;&lt;li&gt;Fetch a Ruby library(non-Gem)&lt;/li&gt;&lt;li&gt;Download code from Subversion&lt;/li&gt;&lt;li&gt;Use a Gem Server&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;可以看看底下範例：&lt;br /&gt;&lt;a href="http://balloon.hobix.com/serve.rb"&gt;http://balloon.hobix.com/serve.rb&lt;/a&gt;&lt;br /&gt;&lt;a href="http://balloon.hobix.com/Win32_MessageBox"&gt;http://balloon.hobix.com/Win32_MessageBox&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;寫好的Code還可以嵌入到部落格中喔</content><link href="http://zusocfc.blogspot.com/feeds/7167121842167045465/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/7167121842167045465" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/7167121842167045465" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/7167121842167045465" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/03/balloon-ruby.html" rel="alternate" title="Balloon -- Ruby百寶箱" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-8935979707165884648</id><published>2007-03-01T00:10:00.000+08:00</published><updated>2007-06-12T11:54:27.576+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="html_parser"/><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type="text">快速處理HTML/XML文件</title><content type="html">XML文件我是用ReXML啦.. 不過我這邊不是要介紹ReXML，是要來介紹hpricot這個Library的&lt;br /&gt;安裝方式：&lt;br /&gt;&lt;code&gt;  gem install hpricot&lt;br /&gt;or&lt;br /&gt;&lt;/code&gt;&lt;code&gt;  gem install hpricot --source http://code.whytheluckystiff.net&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;第一個會連線到gem server去抓來裝，不會有最新的更新；第二個會連到指定的gem server，那邊更新速度較快，我還看到jruby版本的gem..&lt;br /&gt;&lt;br /&gt;OK，廢話不多說，趕緊來看看&lt;br /&gt;官方網站是：&lt;a href="http://code.whytheluckystiff.net/hpricot/"&gt;http://code.whytheluckystiff.net/hpricot/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;如果會jQuery的人，這個是用jQuery當底層的喔！&lt;br /&gt;我來個例子吧&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'hpricot'&lt;br /&gt;require 'open-uri'&lt;br /&gt;doc = Hpricot(open("http://article.zuso.org.tw/show.php?id=1453"))&lt;br /&gt;tb = doc.search("//table")&lt;br /&gt;puts "Tables: #{tb.size}"&lt;br /&gt;puts tb[0]&lt;br /&gt;&lt;/pre&gt;</content><link href="http://zusocfc.blogspot.com/feeds/8935979707165884648/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/8935979707165884648" rel="replies" title="1 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/8935979707165884648" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/8935979707165884648" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/03/htmlxml.html" rel="alternate" title="快速處理HTML/XML文件" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-3593060753700155989</id><published>2007-02-27T23:25:00.000+08:00</published><updated>2007-02-27T23:27:20.547+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="documentation"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type="text">Wikibooks上的中文版Programming Ruby</title><content type="html">&lt;span&gt;網址是：&lt;a href="http://zh.wikibooks.org/w/index.php?title=Programming:Ruby&amp;variant=zh"&gt;http://zh.wikibooks.org/w/index.php?title=Programming:Ruby&amp;amp;variant=zh&lt;/a&gt;&lt;br /&gt;現在是我跟石頭閒語的Rock一起翻譯撰寫，如果有人有興趣的話歡迎加入翻譯的工作&lt;br /&gt;請將原文的文章引用後張貼，然後修改翻譯即可&lt;br /&gt;感謝您的付出！謝謝！&lt;br /&gt;&lt;/span&gt;</content><link href="http://zusocfc.blogspot.com/feeds/3593060753700155989/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/3593060753700155989" rel="replies" title="2 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/3593060753700155989" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/3593060753700155989" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/02/wikibooksprogramming-ruby.html" rel="alternate" title="Wikibooks上的中文版Programming Ruby" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-3286837314411278304</id><published>2007-02-27T00:03:00.000+08:00</published><updated>2007-02-27T00:05:32.896+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="programming"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type="text">File讀取方式：readlines好還是while迴圈好？</title><content type="html">在Ruby中，File可以用readlines跟跑while迴圈來讀&lt;br /&gt;在這個例子中，程式p1用的是while迴圈，p2用的是readlines&lt;br /&gt;執行後，秒數分別是&lt;br /&gt;P1:&lt;br /&gt;121.468秒&lt;br /&gt;P2:&lt;br /&gt;122.172秒&lt;br /&gt;範例文字檔大小是：&lt;br /&gt;4.07 MB (4,272,336 位元組)&lt;br /&gt;&lt;br /&gt;範例程式碼是：&lt;br /&gt;&lt;br /&gt;puts "P1 start"&lt;br /&gt;p1_start = Time.now&lt;br /&gt;open("C:/words.txt"){ |f|&lt;br /&gt;while a = f.gets&lt;br /&gt;  print a&lt;br /&gt;end&lt;br /&gt;}&lt;br /&gt;p1_end = Time.now&lt;br /&gt;puts "P1 end"&lt;br /&gt;puts "P2 start"&lt;br /&gt;p2_start = Time.now&lt;br /&gt;File.open("C:/words.txt") do |f|&lt;br /&gt;puts f.readlines&lt;br /&gt;end&lt;br /&gt;p2_end = Time.now&lt;br /&gt;puts "P2 end"&lt;br /&gt;puts&lt;br /&gt;puts "P1: ", p1_end - p1_start&lt;br /&gt;puts "P2: ", p2_end - p2_start&lt;br /&gt;&lt;br /&gt;由此可見，while快上不到一秒，但是如果在讀取大檔案的時候，用while反而會比較快&lt;br /&gt;相對的，如果不考慮效率，我還是建議使用readlines&lt;br /&gt;&lt;br /&gt;不過這只是個人看法，希望其他前輩不吝指教，謝謝！&lt;img class="wordpress_more" _fckwordpress="more" src="http://blog.pixnet.net/js/fckeditor/editor/plugins/wordpress/spacer.gif" _fckfake="" height="10" width="100%" /&gt;</content><link href="http://zusocfc.blogspot.com/feeds/3286837314411278304/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/3286837314411278304" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/3286837314411278304" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/3286837314411278304" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/02/filereadlineswhile.html" rel="alternate" title="File讀取方式：readlines好還是while迴圈好？" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-16145282.post-9038624316564656536</id><published>2007-02-25T22:36:00.000+08:00</published><updated>2007-02-25T22:37:19.334+08:00</updated><title type="text">小水滴測試用文章</title><content type="html">有看到右邊多了什麼嗎？&lt;br /&gt;沒錯！就是部落格寵物！&lt;br /&gt;還蠻可愛的說A_A</content><link href="http://zusocfc.blogspot.com/feeds/9038624316564656536/comments/default" rel="replies" title="張貼留言" type="application/atom+xml"/><link href="http://www.blogger.com/comment/fullpage/post/16145282/9038624316564656536" rel="replies" title="0 個意見" type="text/html"/><link href="http://www.blogger.com/feeds/16145282/posts/default/9038624316564656536" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/16145282/posts/default/9038624316564656536" rel="self" type="application/atom+xml"/><link href="http://zusocfc.blogspot.com/2007/02/blog-post_25.html" rel="alternate" title="小水滴測試用文章" type="text/html"/><author><name>CFC</name><uri>http://www.blogger.com/profile/14467370100858961268</uri><email>noreply@blogger.com</email><gd:image height="24" rel="http://schemas.google.com/g/2005#thumbnail" src="http://farm1.static.flickr.com/142/323694971_fb4d340146_b_d.jpg" width="32"/></author><thr:total>0</thr:total></entry></feed>