Archive for the ‘電腦科學’ Category
RAID 1 寫入速度噩夢 v.s. In-Memory SQLite3 Repository
[警告:本文之解決方案為一蠢方法,好孩子不要學,請視為錯誤示範]
最近在做的一個案子是這樣的:
- 需要透過網際網路下載一個檔案,並把它 parse 成 CSV
- 由於檔案的內容會依輸入值而不同,但又會常常有讀取的動作,所以需要在硬碟裡放一個 cache
於是照著系上老師們長期的教誨與訓勉,我透過這種方式實作:
- 讀成 CSV 以後,把它匯入到一個 SQLite3 的 Database Image 裡面,存在硬碟
- 往後如果要讀取,就讀這個硬碟中的檔案
看起來是很美好,測試起來也很爽快。
但丟到 production env 之後…那個 performance 非常誇張,僅僅是 development env 的 20% 的效能(i.e. 當 development 存一份 SQLite3 Repository File 到硬碟只需要 10 秒的時候,Production 竟然需要 50 秒!?)
今晚為了這件事熬夜,從 sqlite3 library 版本一路測到檔案系統,原以為是 LVM 本來就比較慢,還砍了一個 LVM Physical Volume 直接格式化來用,速度上依然沒有改善。
就在我搜了老半天,我才發現我一直忽略一件事:Production Env 的硬碟是 RAID 1 …
從台大榜單得 (偽) Unicode 技術學問
[筆記] SSL 憑證購買記
[筆記] 在 Ruby on Rails 裡做簡單的 IP 過濾
目的:你應該不希望還在 Development 的時候被人家看光光。
做法如下,加在 app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
# 指定要在 development 才過濾 IP
before_filter :filter_development_ip if ENV["RAILS_ENV"] =~ /development/
# ... 中間可能有其他程式碼
private
# 以下的 method 要加在 private 後面
def filter_development_ip
if request.remote_ip =~ /^127\.0\.0\.1$/
true # allow access
else
head(403) # send 403 Forbidden header
end
end
end
IP 的部份是以 Regular Expression 配對來檢驗的,通過 Regular Expression 的配對,表示合法 IP。以上範例是限定只有 127.0.0.1 這個 IP 可以連線。
這項設定適用於 mod_rails 與 mongrel_rails。
當然你可以設防火牆。
參考:
[攻略] Ruby on Rails 與 SSL (https)
問題:該如何在 Ruby on Rails 導入 SSL (https) 的支援呢
以下分成 Mac OS X 與 Ubuntu Linux 的說明。
另外因為 mod_rails (Passenger) 在設定 SSL 方面格外簡單,因此假設你已經安裝了 mod_rails。安裝方式請參考官方網站。
Mac OS X 請額外安裝這支小程式,讓 mod_rails 的設定更為方便。
注意事項:全世界都可以連到你的 Rails Application,即使它是 development !! 建議在程式裡使用 IP 過濾。
—
拜託!問題在編碼!──論大學甄選入學的數位化
因為某些因素,我有好一陣子在研究大學甄選入學的制度和電子化 (或說數位化) 內容;這不僅是中正大學的甄選入學委員會,還包括了各大學 (凡 69 校) 公佈榜單的方式。做了兩回合之後只覺得:台灣的數位化還需要加油。
民國 97 年大學甄選入學各高中建議事項 (Excel 活頁簿檔案)及官方回應已經發佈在大學甄選入學委員會的網站上了。其中幾項其實頗耐人尋味,例如這項:
「可否請中心加強宣導,各大學電子榜單可否儘量採用HTML網頁格式就好,最好不要使用PDF檔!那個洋鬼子發明的東西對中文接受度差,若是使用新細明體或是標楷體以外的字體,搜尋就會出問題!PDF格式的榜單連第4點中提到的交叉查詢網站的作者也都嫌棄咧!」──花蓮女中
而這則建議的官方回應則是:
「轉知高中意見予自行開發軟體之大學,請其參考配合辦理。」
當然這看在我們這些稍微有接觸過一點電腦科學(其實我不知道怎麼形容)的人,是啼笑皆非的;我在想大學甄選入學委員會看到這則問題可能也很無奈。
—
[筆記] IPv4 的 unsigned int 表記法
- telnet://2356194315
- telnet://140.112.172.11
- telnet://ptt.cc
其實這也不是什麼新梗啦,就只是把 IPv4 換成 Unsigned Integer 的表示法而已。
只是我用 Yahoo! Pipes 做了兩個轉換器(互轉,IPv4 → Unsigned Int 以及 反過來),所以演算法就請在各別的 pipe 編輯原始檔就可以看到囉。(文末有 C Code)
雖然不是什麼新梗,但還是記一下它的原理好了。
—
如你所知道的,IPv4 是由四組 0 – 255 的數字組成的,表記如 140.112.172.11 這種格式。但這種表記法是為了讓人類易於記憶,真正在電腦裡面是表示成二進位:
| IPv4 | 140 | 112 | 172 | 11 |
|---|---|---|---|---|
| ↓ | ↓ | ↓ | ↓ | |
| 二進位 | 10001100 | 01110000 | 10101100 | 00001011 |
| 接成一條 | 10001100011100001010110000001011 | |||
| 轉成十進 | 2356194315 | |||
原理就這樣,所以 IPv4 可以寫成 unsigned int 表記法。至於 Pipes 裡面用到了幾個偷懶的方法,是從 2 進位 ←→ 10 進位中運用的「位權」概念而來的。
—
沒 code 沒真相,附如下:
[亂寫] Windows Live ID Authentication + Ruby on Rails
最近手邊有兩個 Rails 程式在寫,寫好玩的。其中一個用了 Yahoo! BBAuth ,另一個想用 Windows Live ID Auth。
前者是因為看到 KeyTalks.com 竟然有 Yahoo! ID 登入的功能,所以才開始研究官方的 API ,想說其實不失為取代 OpenID 的另一種選擇。上個星期寫出來了,不過我是直接拿別人寫好的 Yahoo! BBAuth Wrapper,經修改之後放入 Rails Application,同時 XDite 長輩也替我修正了我自己寫的 sample,做了一份含 Sample Code 的教學(感謝 XDite 前輩的指導)。
不過另一個 Rails Application 因為主要的使用者群是大學生(meaning: 幾乎人人都有 MSN 帳號),又因為 Yahoo! BBAuth 有一個很奇怪的點:每次登入都要問同意或不同意該網站存取;OpenID 只會問第一次,Yahoo! BBAuth 每次問,使用者大概會覺得很煩吧。所以才想試試看 Windows Live ID Auth。
可惜微軟官方提供的 Windows Live ID Auth Sample Code for Ruby 很醜,是用 CGI 硬刻出來的。雖然也提供了其他語言的 Sample Code (Perl, PHP, C#, ASP.net etc.),但最容易拿起來 Run 的大概還是 PHP 版本的吧 =..=
好在官方的 SDK Document 寫得很詳細,又現在也有之前改 Yahoo! BBAuth for Ruby on Rails 的經驗,對這種第三方 Web Authentication 也有了一點概念,所以乾脆自己試試看。
[心得文] 關於科學實驗
COSCUP 2007 (後篇)
老實說,打這篇文章時,我雖然不是很睏,但肚子是很餓,又,這天的議程我大抵上是聽不太懂的 XD ,所以這篇寫得很隨便 :p
第一個 Session 是各開放原始碼社群對各自現況的簡介,包括 TOSSUG (台北開放原始碼軟體使用者群)、最初是在台南發跡(得意) 的 StudyArea (酷! 學園)、Wikimedia Taiwan (中華民國維基媒體協會)、Mozilla Taiwan 、COSCUP (開源人年會)、OSDC.tw (Open Source Developers’ Conference in Taiwan)。

