Category Archive教學文章
Ruby & 教學文章 31 Oct 2008 05:33 pm
[Rails] Rails 2.2 的 i18n 實做
Rails 最近終於推出了 2.2 RC 版,這次推出的兩大特點一個是 Thread Safe、一個是內建 i18n( 有閒錢的話可以買 EnvyCast 推出的 Rails 2.2 What's new Video & PDF 一探究竟)。
剛剛幫手上的某 project 一次升上了 Rails 2.2 順便練習如何操作內建的 i18n。
這一篇是步驟(是的,我已經踩過雷了(註)):
1. 安裝 Rails 2.2
- Install
gem install rails -s http://gems.rubyonrails.org -v 2.2.0
- 修改 config/environment.rb
-
+ RAILS_GEM_VERSION = '2.2.0' unless defined? RAILS_GEM_VERSION
-
- RAILS_GEM_VERSION = '2.1.0' unless defined? RAILS_GEM_VERSION
2. 安裝 plugin
- localized_dates
ruby script/plugin install git://github.com/clemens/localized_dates.git
- 一些簡單的翻譯例子,可從 rails i18n demo app 下載,扔到 config/locales
3. 修改 config 檔
config/environment.rb
在最末加入以下幾行
-
I18n.default_locale = 'en-US'
-
-
LOCALES_DIRECTORY = "#{RAILS_ROOT}/config/locales/"
-
LOCALES_AVAILABLE = Dir["#{LOCALES_DIRECTORY}/*.{rb,yml}"].collect do |locale_file|
-
File.basename(File.basename(locale_file, ".rb"), ".yml")
-
end.uniq.sort
新增 initializers/locale.rb 內置
-
I18n.load_path += Dir[ File.join(RAILS_ROOT, 'lib', 'locale', '*.{rb,yml}') ]
4. 在 app/controller/application.rb 設置一個 before_filter 設定 locale
-
before_filter :set_locle
-
-
def set_locale
-
# update session if passed
-
session[:locale] = params[:locale] if params[:locale]
-
-
# set locale based on session or default
-
I18n.locale = session[:locale] || I18n.default_locale
-
-
end
5. 修改 layout 以及放置 demo, 在 app/vies/layout/application.html.erb 找個地方放置
-
<% form_tag '' do %>
-
<%= select_tag("locale", options_for_select(LOCALES_AVAILABLE, I18n.locale
-
), { :index => nil, :onchange => 'this.form.submit()'}) %>
-
<% end %>
-
<h1><%= I18n.t 'txt.main_title' %><span id="claim"><%= I18n.t 'txt.sub_title
-
' %></span></h1>
這樣就完成了。
註:我是參考 rails i18n app demo 完成的。但是它的 set_locale 那一段有一些問題。load_translations 是 undefined method。
-
before_filter :set_locale
-
-
def set_locale
-
# update session if passed
-
session[:locale] = params[:locale] if params[:locale]
-
-
# set locale based on session or default
-
I18n.locale = session[:locale] || I18n.default_locale
-
-
# load locale from settings
-
@locale_files = []
-
['yml', 'rb'].each do |type|
-
locale_file = "#{LOCALES_DIRECTORY}#{I18n.locale}.#{type}"
-
if File.exists?(locale_file)
-
@locale_files <<locale_file
-
I18n.load_translations locale_file
-
end
-
end
-
end
原因出在 demo app 的 rails 是 freeze 當時 trunk 版的,而正式 Rails 2.2 RC 卻把"load_translations"這一段閹掉了。卻沒有人注意到這個問題。envycasts 跟 官方公告 都推薦看這個 demo app,但 demo app 是有地雷的,但卻一直沒人發現。
跟 ihower 討論這件事,ihower 開玩笑的說:「騙子!! 大家都沒有做i18n!!」
----
寫完這一篇 blog 才發現這一篇 wiki ,裡面教的是正確的方法。
教學文章 28 Oct 2008 12:21 pm
在 Linux 上架設 Screenshot Service
前兩個禮拜公開的「民怨網」這個 Service,眼尖的人應該有發現,民怨網是使用 PPT.cc 提供的有圖有真相 API 服務對網站做了截圖快照的功能。
「有圖有真相」網是在跟 PPT 站長在喇賽時,提到我之前在做「華文不及格大獎」時,一直想加上幫部落格拍照的功能,但是 survey Linux Solution 時一直兜不出來,問他有沒有興趣一起解決這個問題,之後誕生的。他是使用了一套 Windows Software 截 IE 的圖,然後自己寫程式暴力呼叫幹出了「有圖有真相」網。
有強者寫出截圖 Service ,而且還有神秘的 API 可以神,當然是快樂的用 XD。
不過用歸用,我自己還是有股好勝心想挑戰這個謎題。因為不管怎麼樣,Pure Linux Solution 還是比較蘇湖啊 XD
基本的想法:手上只有一台向 Linode.com 租的 VPS 跑 Linux Server,我想嘗試在上面跑 Firefox 截圖達到我的目的。
(之前失敗是因為嘗試用 html2ps , ps2jpg 然後卡在莫名其妙的地方)
這是最後做出來的成果:
---
簡單記述一下我是怎麼做出來的:
我在 Linode 上面跑的 Linux 版本是 Ubuntu 8.04 Server。要在上面跑 Firefox 截圖,最大的問題是必須讓 Firefox 必須跑在 X 上。但前面已經說了這是沒有圖形裝置的 VPS,於是解法就剩下讓 Firefox 跑在 VNC 或 xvfb 兩種方式。
用 VNC 顯然是比較直覺的,因為可以用 VNC viewer 進去裝東西,怎麼想都比較快(但是我踩到了一堆 X11 相依的雷,最後放棄)。所以我用的是讓 Firefox 跑在 xvfb (虛擬的 X-window 環境)的方式。
安裝步驟 :
1. (Clean) Ubuntu 8.04 Server
2. sudo apt-get install ubuntu-desktop
3. sudo apt-get install xvfb
4. sudo apt-get install netpbm
5. sudo apt-get install firefox-3.0
拍照方式:
-
killall firefox Xvfb
-
Xvfb :2 -screen 0 1024x768x24 -fbdir /tmp -nolisten inet6 &
-
sleep 10
-
DISPLAY=:2.0 firefox -width 1024 -height 768 http://www.google.com &
-
sleep 10
-
xwd -display :2.0 -root -out shot.xwd
-
xwdtopnm shot.xwd> shot.pnm
-
pnmscale -xysize 200 150 shot.pnm> shotsmall.pnm
-
pnmtojpeg shotsmall.pnm> shot_thumb.jpg
-
pnmtojpeg shot.pnm> shot.jpg
這樣就能達到想要的網站截圖功能。(on Linux VPS !!!!!!)
不過到目前為止還沒有達到 100% 我要的功能,拍照當然是要拍全身的啊!
我又在 Firefox 上又裝了這個 Plugin:Pearl Crescent Page Saver,用 command 魂達到了這個目的 XD ( 我花 15 USD 買了 pro,因為 pro 版本在 command 列可以下支援更多參數)
到這一步的時候又會踩到幾個雷:
* 把 Firefox 關掉再打開時,會跳出 Restore Session 的詢問選項,但是在 command 列上沒有滑鼠可以進去按確定,所以會卡住。要在 ~/.mozilla/firefox/xxxxx.default/prefs.js 裡加入這兩行叫他遇到同樣情形時閉嘴。
-
user_pref("browser.sessionstore.enabled", false);
-
user_pref("browser.sessionstore.resume_from_crash", false);
* 用 command line 安裝 plugin xpi 時( firefox -install-global-extension xxxx.xpi),又會跳出確定信任的詢問框需要按確定,我照了這一篇的指示要 Firefox 閉嘴,但還是未遂。
最後的解法蠻 XD 的,因為耗費了太多時間在解決這個問題,搞到我生氣了,暴力將 windows 的 FF extension 目錄扔上去 linux 上,結果成功 XD。
大致上都搞定了,剩下最後的問題。就是要讓這個 Firefox 支援 Flash。但是 sudo apt-get install flashplugin-nonfree 拿到的是 Flash 區跑不出來的結果。於是我參照這一篇解掉了 flashplugin-nonfree 爛掉的問題。
剩下的拉哩拉雜就是自己寫 daemon 設計 queue、API,不過這就不是本篇的重點了。
Anyway,在安裝上有任何問題歡迎留下你的 commant
----
延伸閱讀:
How to Capture & Save Screenshots of Webpages - Digital Inspiration
Pearl Crescent Page Saver Documentation (Basic & Pro Editions)
Whirix Technical Blog: Screenshots of Web Pages
Xvfb, Firefox, and screenshots - dslreports.com
How to install Adobe Flash Player 10 in Ubuntu 8.04 (32 bit and 64 bit Hardy heron) -- Ubuntu Geek
教學文章 13 Sep 2008 05:41 pm
HOWTO Build EC2 image
Amazon EC2 是 Amazon 近年來推出的一個服務,主要是賣 computing power,拿來幹極盡邪惡的壞事相當適合。而如果對於網站有擴充需求或僅短期內有大量機器需求的網路公司也相當有幫助(當然架構要設計的比較適合扔上 ec2,或對如何自動 deploy 上 ec2 的工具以及流程比較熟稔)。
玩法通常是 build 自己的特定需求的幾個 image,如 web application / db server / memcache server blahblah 。static data 或 db 就設定塞到 s3 和 ebs 去。如果短期有 event 需要因應大量訪客,狂開 ec2 通常就可以應付,而且可以省下蠻多機器和人力維護的費用(因為如果也只有這麼一次,買機器相當不划算)。
然而 Amazon EC2 並不是 dedicated server,也不保證資料完整性,它的玩法是出租 computing power 讓客戶跑自己的環境解決問題。因此如果要利用 EC2 弄 website,通常是 build 自己的 web production image、server image,打開打開打開 deploy,deploy,deploy 連接連接連接。
* 首先,如果你對玩 EC2 有興趣,個人強烈建議一定要裝的工具是由 Amazon 官方推出的 Elasticfox ( FF extension ),相當有用。
* 註冊 amazon web serivces,會拿到幾組東西。
* Access Key ID
* Secret Access Key
* pk-XXXXX.pem
* cert-XXXXXX.pem
- 管理你的 Amazon Instance
* 打開 Elasticfox,在 Credencials 填入 "account name"(自定), "Access Key ID","Secret Access Key"。稍待片刻 (or refresh)之後,就能見到可用的 (public)Amazon Machine Image。
這裡的 AMI 都是包好的 clean image,可以開起來對 image 上下其手之後,再包成自己專用的 image(塞去 S3),以便下次開啟或大量複製。
任選一個按右鍵 launch 之後就可以把機器打開了。打開以後會像這樣子...
值得注意的是,連過去管理是吃 key 不是吃密碼的,所以記得要去 "Key Pairs" 產生 Key。然後預設 Firefall 是通通開起來,所以要記得去 "Security Groups" 加規則讓 port 22 可以過。
ssh -i key_file root@aws-public_dns 就可以連過去可以管理了。
- 打包專屬的 AMI
裝完需要後的 package,就可以把這個已經通通弄好的環境包成 AMI。
* 首先需要將三樣東西 scp 去 /mnt 下
* "Key Pairs" 產生的 Key
* pk-XXXXX.pem
* cert-XXXXXX.pem
- 產生 image 檔
ec2-bundle-vol -d /mnt/ -c cert-XXXXXX.pem -k pk-XXXXX.pem -u ACCOUNT_NUMBER(Your AWS Profile 裡面的那串數字) -r i386 -p TEST_AMI(你想取的名字)
blahblahblah 就會在 /mnt 生出一堆檔 ...
ec2-upload-bundle -b TEST_AMI -m TEST_AMI.manifest.xml -a Access_Key_ID -s Secret_Access_Key
開始扔上 S3。扔完之後會回吐 mainfest 的網址:
https://s3.amazonaws.com:443/TEST_AMI/TEST_AMI.manifest.xml
回 AMI 列表 Register ,把路徑 TEST_AMI/TEST_AMI.manifest.xml submit 上去,過了幾秒就會出現你剛剛包的 image (private)。
之後就可以大量的把需要的環境叫起來。所以如果你只是測試玩玩的話,要記得關機器,因為每小時都要算錢,是直接從信用卡裡扣錢的 :Q (月結)
大概就是這樣子,操作步驟看起來蠻簡單的,不過沒有人帶的話,要花上很多功夫去看文章和猜設定 ..。所以最後要強烈感謝強者壞人長輩不嫌棄在下很笨,親自出手指點 <(_ _)>。
我自己 run 過一遍之後,把過程記在這裡。
XD 姿勢佳 & 教學文章 10 Sep 2007 07:42 pm
手機遺失的處理方式
大家都知道,前幾天我遺失了一隻手機。我目前已經去辦停話以及報案了。
我在報案前也上網做了一下功課,於是很順利的取得了報案三聯單,也花不到半個小時就做好了相關筆錄。這在 X 案率相當高的台灣實屬於相當難得的事。因此,不管手機到時候找不找得回來,我覺得都要分享一下這次的經驗。
---
情形是這樣的:我的手機是先遺失,到家後用市話打回去都沒人接,而後用 PHS 傳了簡訊(請拾獲者還我)到遺失手機後,被惡意關機。
據過往自己與朋友與警察打交道的情形,以及上網 Google 到的資訊,一般人正常直覺能想到的方法:「跑到派出所去報遺失」,在 PTT 的相關討論串裡,其實是獲受理率最低的方式。
員警頂多會告訴你,在簿子上留下通訊方式 + IMEI 碼,如果有人撿到會通知。事實上,能循此管道拿回手機的人真的很幸運。為什麼呢?寫簿子並不表示完成報案程序(只有拿到報案三聯單才算),而向手機業者追 IMEI 碼有其成本,不是刑事案件幾乎不會幫你追,只能希望撿到的是日行一善的善良阿宅,而且他願意幫你送回警察局...。加上製作筆錄需要很多時間(你也知道現在警察伯伯和警察叔叔打字很慢),因此才會時傳出比較小的 CASE ,警察伯伯會委婉不受理(俗稱X案)的情形發生。
這邊順便告訴大家,筆者在大學時對付隔壁鄰居放任狗妨礙安寧的經驗,如果你希望警察親自過來處理案子(當然是大事才用,不要小事也用這招),絕對不要親自跑去派出所,如果警察伯伯怕麻煩,會看情形好說歹說勸你打消報案念頭,告訴你頂多只能找環保局 OOXX,勸你忍耐一點(這時候會覺得沒天理,一肚子火)。但是,如果你忍無可忍,對方實在太超過。最好的方式就是打 110,因為 110 會要求所在地的值班員警一定要上門處理,回報處理進度(想吃都吃不了)。不管警察多不爽,他都必須到現場處理並回報。我的鄰居那一陣子已經被左右鄰居抗議到不行了,還是依然故我,沒人能奈他何。那一天警察親自上門後,狗主人嚇到,狗從此就消失了 ....
我採取的方式是網路報案,提出的告訴的是「侵佔遺失物」。
採取這種作法的原因有二:
1. 網路報案視同 110 報案,警察一定要回報情形。
2. 別人侵佔你掉的東西是刑事罪,一定要偵辦。但是如果你只是掉東西,你根本不能怪誰,人家家撿到願意自發性還你就很萬幸了....。
(筆者也是真的火了,傳簡訊請他還我,條件可談,還關我機 ...)
網路報案完一兩個小時,我就接到台北市警察局分案的通知,同時告知我遺失手機地點的當地派出所員警將會聯繫我處理。再過了一兩個小時,我就接到前往派出所的通知。
到了派出所正式做筆錄,我才發現當初選擇網路報案是非常明智的決定。因為,警察叔叔的打字速度實在是太慢了,慢到我都覺得很辛苦,想幫他打字 ...orz(不知道這是不是 X 案率很高的原因?)。
可是,因為筆者當初是選擇使用網路報案的方式,表單裡面有一個細述經過的選項(要填約 500~1000字)。我將過程寫得很詳細,同時把相關資訊都附上了。(遺失經過,被侵佔經過,手機型號、IMEI序號、時間地點...)。於是,警察伯伯根本是看著我的作文寫那一份筆錄的,中間只有問我有沒有打錯而已...XD。花不到半小時筆錄就作完了(還是在他打字很慢的情況下),我也順利取得報案三聯單,接著就等警察偵辦、通知而已。
要是當時我選擇用口頭報案的,「一問一答」再來個「整理並打字」下來,筆錄都不知道要做多久。
所以呢,分享這次的報案經驗給大家。如果真的遺失東西或有什麼案件想報警偵辦又不想被 X 案的話。請多利用網路報案,並在網路報案當時,便用文字將案發經過的細節儘可能詳載在表格內,會省下你跟警察伯伯雙方很多時間的。
冀望寫下這篇經驗的分享,能幫到本站讀者和路過 google 到本文的讀者一點小忙。
最後,希望我的手機能順利的回來,唉~
教學文章 09 Jul 2007 10:29 pm
免雙證件,搬走你的好友到新窩去!
今天來介紹一個好工具,叫做「無名好友搬家小工具」
這是一支可以將你的好友搬到新家的程式,即使你因為沒有換密碼而被擋在無名小站外也可以搬。
請各位感謝 Qing 與 毒菇木 兩位大神的實做 <(_ _)>。
另外如果你的相簿因為太大,無法使用 Gslin 的備份相簿功能,可以考慮使用他們的產品GirlDigger(你不是 Girl 也可以用),把自己的相片打包回家
此工具 original idea 來自這篇的
5. 我的朋友都在這裡 (無解,也最重要)
為什麼我的朋友都在這裡,是最常見的問題。但我始終狐疑,你自己搬家就好,關別人什麼事?
後來我在研究了很久以後,才明瞭我的朋友都在這裡的意思。一般使用者,他不會訂 RSS,無名的 RSS 也很爛。無名好友更一整個很廢設計來不知道幹嘛。所以它們的意思是如果他要看朋友最新動態的話,沒有那個下拉選單可以狂開朋友網誌、相簿很不方便,它的朋友也沒辦法一拉就看它的網誌。
簡單貼兩張圖當教學,不會用再點開。(毒菇木有寫一篇怎樣貼到 Pixnet 的教學)
Continue Reading »
教學文章 08 Jul 2007 12:42 am
無名搬家至 Blogger 程式(注意事項)
注意:此方法已失效。請參考 無名小站部落格搬家懶人包(最新)
感謝大家對搬家到 Blogger 程式的抬愛。目前不過目前據幾位 User 回報,有些人的 Blogger 備份檔,這支程式會無法分析並匯入,因為筆者缺乏樣本、修改程式功力也不夠。
以下不是幫丁丁的對手故意打的廣告,如果你真的搬不過去,我會強烈建議您將備份檔搬至 Pixnet 或 Roodo。這兩站應該都有辦法完整匯入你的備份檔。
當然,筆者比較建議的是 Pixnet ,因為 Pixnet 站方目前有辦法處理搬家而造成破圖的部分,可以節省你改連結的時間。(用 MT 搬的要另外到客服區去申請,用 Pixnet 搬家程式的會自動補圖,不過Pixnet搬家程式的前提是你要登的進無名帳號)
---
搬網誌到 Pixnet
登入帳號後,直接到此網址 http://blog.pixnet.net/adm/index.php?op=bMove
選 MT 格式匯入
教學文章 05 Jul 2007 08:22 pm
[網誌] 無名搬家至 Blogger 教學
注意:此方法已失效。請參考 無名小站部落格搬家懶人包(最新)
-------------------------------------------------------------------------------------------------
請注意,Blogger 每天文章數量發表限制約是 50 篇,所以你一次只能搬 50 篇而已,可以分多天慢慢搬!
請注意,如果你第一次匯50篇成功,可是隔天或之後的文章一直之後一直匯失敗,可能是 Blogger 開啟圖片驗證把你的搬家機器人擋掉,一旦出現這種情形,請使用 https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger 解鎖,再繼續匯入。
因為筆者把搬家程式放在 bluehost 裡,怕蜂擁而來的鄉民搞爆我機器。所以如果你想分流的話,可以抓這一支程式回去架。架設條件需主機支援 php 以及 xml parse 的 function。如果願意分流的鄉民請在架設完畢後再推文內公布網址,謝謝!
----
首先
1. 請先到 Gslin 大神的 網誌備份服務 先將你的網誌備份下來(選 MT 格式)。
2. 請先到 google 註冊一個帳號,再創一個空的部落格。
3. 再到筆者架設的 搬家站台 匯入你的備份檔。
4. 這不是廣告。如果匯不進去,建議搬家至 Pixnet 或 Roodo
以下是圖文教學,要看再點開
教學文章 05 Jul 2007 10:06 am
免雙證件,備份你的網誌及相簿!
本服務由 Gslin 大神提供。請大家膜拜他 <( _ _ )>
因為現在各個 BSP 服務都需要驗證確定個人身份才能幫你搬家,否則將會有侵權問題。而目前提供的驗證法,幾乎都需要使用者登入去修改網誌標題或相簿標題,對於此次的情況非常不適用。(不提供雙證件,直接形同密碼失效,根本無法登入)
當初設計來打包資料的這個服務就派上用場啦!(靠邀,這次事件才發現我忘記把因為 DH 停權時當初不見的教學擺回去...,只好重寫)
相簿備份服務 (或使用 WretchXD 打包)
網誌備份服務 (請選 MT 格式)
註:MT 格式可以匯入絕大多數 BSP (Pixnet、Roodo ....)提供的網誌裡(包含文章內容與回應)。
註:密碼鎖住的文章、迴響、相簿搬不了。
--- 以下是圖片教學,不會搬的再點開,會持續更新 ---
教學文章 01 Jun 2007 01:08 am
funp 推文按鈕貼紙 for wordpress
現在快凌晨一點,我腦袋其實已經沒有 CPU 資源可以消耗來寫文章了。只是剛剛睡前想也幫部落格裝個 funp 推薦貼紙。仔細搜尋一下,發現它們的工具網址還真難找,竟然在最右下角 orz。
我一直覺得 funp 是個很強大的工具網站,但是卻具備許多小缺點待修(因為沒有 CPU 資源了,所以文略三千字)。例如動線亂,功能強大功能卻不好找或不好操作等 ... 好 ..stop ....不是這次的重點。
重點是剛剛在弄部落格推文貼紙的時候,才發現一件事。它們沒有針對各個 blog 平台去設計貼紙語法,而且還讓人摸索半天才知道怎麼加。這讓我覺得是件頗神奇的事。要知道,blog 效應才是能造成野火燎原的關鍵元素啊。
原始設計是這樣:打了只會收指定網站,不打就是該頁網址。
害我在那邊研究 ericsk 的 blog 半天,看他是怎樣做的。到底要怎樣才能在首頁讓貼紙曝光,而且針對個別網址去產生推薦按鈕?用了僅剩的 大腦 CPU 資源想了半天,才想到他應該是只有針對 single.php 去做了不寫指定網址的按鈕。在首頁好像沒解...
不對,那黑米是怎樣做的?再用力了搾乾資源才突然想起來 ...要在 wordpress 佈景裡的 index.php 做出可以針對每篇文章生出指定按鈕的語法應該是要這樣寫啊....
看來推推王還是要針對 user friendly 加加油 ....
我真的要去睡了,嚴重睡眠不足。
----
剛寫完 funp.com 就掛了,明天再把 script 重新掛上好了 -_-
教學文章 31 May 2007 08:15 am
Google Reader 提出離線閱讀服務!
這是筆者今天早上打開 Google Reader,突然間看到的新選項。用搜尋引擎找了一下,發現都沒有什麼人提到這項消息,看起來應該是才剛推出的服務吧。
對我們這些等車的時候也閒不住想東看看西看看的 computer geek 真是大利多。筆者還記得一個朋友,每次要搭客運前最常幹的事情,就是把筆電打開,把想看沒時間的 Feed 或者是 Blog 一個一個窗開到塞爆為止,將電腦按下休眠狀態帶上車。
以後他應該只要開 Google Reader 一個窗就夠了 XD。
雖然這項服務只提供 2000 個 item 離線儲存,算是有點少…。
不能讓筆者發揮盡情惡搞的空間,不然拿來訂 BBS 的文章也是很不錯的,嘿嘿嘿。
這項服務要安裝 Google 另外一項產品 Google Gears 才能運作,雖然安裝步驟其實蠻簡單的,但是筆者已經養成每次開新東西就一路拍到底的壞習慣,照片這麼多不拿來剪一剪當教學有點可惜。
慣例因為照片太多,會造成文章太長,所以要看的再點開吧 :pp






