YORKXIN×YORKXIN

鴨七的人生,不是夜市人生

Archive for the ‘Programming Life’ Category

RAID 1 寫入速度噩夢 v.s. In-Memory SQLite3 Repository

with 2 comments

[警告:本文之解決方案為一蠢方法,好孩子不要學,請視為錯誤示範]

最近在做的一個案子是這樣的:

  1. 需要透過網際網路下載一個檔案,並把它 parse 成 CSV
  2. 由於檔案的內容會依輸入值而不同,但又會常常有讀取的動作,所以需要在硬碟裡放一個 cache

於是照著系上老師們長期的教誨與訓勉,我透過這種方式實作:

  1. 讀成 CSV 以後,把它匯入到一個 SQLite3 的 Database Image 裡面,存在硬碟
  2. 往後如果要讀取,就讀這個硬碟中的檔案

看起來是很美好,測試起來也很爽快。

但丟到 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

繼續閱讀文章 »

作者為Chitsaou Yorkxin

2010 年 二月 27 日 星期六 at 06:51:55

張貼於Ruby and Rails, 電腦科學

Tagged with ,

關於 RailFare 的二三事

沒有留言

我所寫的網站「台灣鐵道服務票價查詢」(RailFare),自初代發表迄今已屆一年半載。(怎麼又是一年半 = =

現在睡不著,看了一下它的 Google Analytics 報表發現一件有趣的事。

雖然流量很少,但它呈現嚴重的傾斜。

過去兩個月內的網頁檢視,光屬於高雄捷運的 page views 就佔了 79%;

訪客也有 83% 是從搜尋引擎連進來的;

在搜尋引擎的關鍵字中,有 87% 的關鍵字含有「高雄」這兩個字。

結論,這個網站根本就是傳說中的高達八成的高雄捷運

這其實代表一件事:

高雄捷運公司的網站 SEO 做得非常差

民眾要查詢票價竟然會跑到非官方的網站!?

你可以去各大搜尋引擎敲這類的關鍵字,第一頁最上面幾個一定是我家的網站=  =

繼續閱讀文章 »

作者為Chitsaou Yorkxin

2010 年 二月 9 日 星期二 at 05:58:22

R3versi – 大一寫的黑白棋遊戲

沒有留言

由於聽說同學去上本系蔣某老師的進階程式設計,最近要寫黑白棋的遊戲(其實是想修卻萬年衝堂修不到的怨念),所以我把我大一寫的黑白棋遊戲給放上來了…。這不是作業,只是寫爽的…。

程式碼都在 GitHub 的 Repository,不會用 git 的話可以按 Download 下載 zip 或 tgz 包裝。

R3versi screenshot

兩年了,再回頭看自己大一寫的程式碼,除了有很濃厚的 MapleBBS-itoc 的影子之外,就是又雜又難看啊而且還很少註解的 code 了。檔案的結構也是亂七八糟的,濫用 external function reference -_-,連 Makefile 都是抄 MapleBBS-itoc 的 XDD

「視窗」是用 curses 函式庫寫出來的,在 Unix-like 的 OS 都有內建了。而 Windows 只要用 Dev-C++ 和 PDCurses (有 Dev-C++ 的 Package) 也可以編譯並執行喔(而且是 Static Linking,執行檔不用函式庫就能玩了;為什麼是 Static Linking…最近才在上系統程式,還沒學到怎麼改那個 Linking Scheme,囧rz)

至於編譯的方法和所需要的函式庫都描述在 GitHub Repo 的 Readme 了,自個兒去看吧。

License… 我不知道要用哪個 = = 事隔多年也不知道有沒有抄到別人的 code 了,不敢亂寫授權。GNU/GPL、BSD 還是別的?五樓你說呢?

p.s. 其實我從來沒玩贏過一次電腦的黑白棋,不管是×電族裡面的,還是 Windows XP 的…。

p.s. 2 不要怪我沒說,這支程式裡有很多 bug,而且 Makefile 當年是亂抄亂寫的,一點規範都沒有,請不要拿來當範例程式!(可以拿來當「寫得很爛的程式」的 case study 啦)

作者為Chitsaou Yorkxin

2009 年 十一月 17 日 星期二 at 04:10:40

Google App Engine Oil 與 Bulkloader 大量上傳資料庫內容

沒有留言

剛剛試出來的,我原本還不相信我試得出來。

總之現在的作業是:

Google App Engine Oil 開發 Google App Engine 的網頁應用程式。請透過 bulkloader 把某個 Kind 的 Entities 匯入到 Datastore 裏面。

這個時候當然是先看官方的說明了, Uploading Data – Google App Engine

繼續閱讀文章 »

作者為Chitsaou Yorkxin

2009 年 五月 5 日 星期二 at 22:09:01

Ruby 1.8.7 與 Mac OS X 的地雷

with 9 comments

Ruby 1.8.7 發行之後這麼久才升級,純粹是我沒注意到這件事。

1.8.7 有一些新功能是我覺得很有用的,其中包括 String 現在已經是 $KCODE-aware 的了 (僅管 $KCODE 在 1.9 已經是一個 deprecated 的全域變數,被一個叫作 Encoding 的 Class 給取代了)。考慮以下執行結果:

$ irb
irb(main):001:0> "的我他".chars.to_a
=> ["\347", "\232", "\204", "\346", "\210", "\221", "\344", "\273", "\226"]
irb(main):002:0> $KCODE='u'
=> "u"
irb(main):003:0> "的我他".chars.to_a
=> ["的", "我", "他"]
irb(main):004:0>

所以我前兩天就升級了,但沒想到卻踩到超級地雷。

繼續閱讀文章 »

作者為Chitsaou Yorkxin

2009 年 三月 26 日 星期四 at 11:24:11

[入門級] 如何用 Mac OS X 的 Xcode 寫 C 語言程式

with 8 comments

這篇是給新手看的。

如果你在 Windows 習慣使用 Visual C++ 或 Dev-C++ 的話,到了 Mac OS X 可能會突然不知道要怎麼寫程式,尤其當你已經用 Visual C++ 的 Debugger 用得很上手的話。

最近我們系上的課充滿了 C programming,我也稍微摸懂了 Xcode 的若干功能,至少我可以拿它來寫 C 語言的程式了,就像在 Windows 使用 Visual C++ 那樣。

如果這篇只是要教你怎麼按 Compile 的話,那我就是來騙文章數的了。因此這篇的內容還包括怎麼使用 Xcode 的 Debugger ,ㄎㄎ。

繼續閱讀文章 »

作者為Chitsaou Yorkxin

2009 年 三月 15 日 星期日 at 20:47:16

[作品] 中華民國身份證字號驗證程式 – 使用 jQuery.Validate

with 8 comments

最近在研究 jQuery.Validate,這是可以讓你做出「表單還沒送出前就先驗證資料是否正確」效果的 Plug-in,如果網站的 JavaScript 已經採用 jQuery 當作 Library 的話,那麼直接導入 jQuery.Validate 是比較容易的。類似的 Library 如 LiveValidation

示範網頁在這裡;因為 WordPress 不讓我放 Embedded Javascript,所以就到另一個網頁看吧。

做法很簡單:先導入 jQuery.Validate,然後針對要輸入身份證字號的地方,撰寫兩個自定的 Validate 條件,一個是檢驗它是否符合 /^[A-Z]{1}[1-2]{1}[0-9]{8}$/ 的 Regular Expression,另一個是透過算數方式檢查它是否符合邏輯。

繼續閱讀文章 »

作者為Chitsaou Yorkxin

2009 年 二月 3 日 星期二 at 22:58:51

[筆記] 在 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。

當然你可以設防火牆。

參考:

作者為Chitsaou Yorkxin

2009 年 一月 17 日 星期六 at 14:57:49

[攻略] Ruby on Rails 與 SSL (https)

with 3 comments

問題:該如何在 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 過濾

繼續閱讀:步驟說明

作者為Chitsaou Yorkxin

2009 年 一月 17 日 星期六 at 03:23:51

大量轉換 iTunes 歌曲名稱的繁簡體中文的 AppleScript

with 6 comments

是否曾經煩惱看不習慣 iTunes 裡顯示的曲目名稱是你看不懂的中文字體呢?例如你購買了一張大陸歌手的專輯,但 iTunes 抓到的曲目名稱是你所不習慣的簡體中文。Windows 有 ConvertZ 可以做到這件事,但 Mac OS X 可不能執行 ConvertZ 啊。

雖然我們知道在 Mac OS X 的「服務」功能表裡面,有「中文字轉換程式」,可以把中文在簡體和繁體之間轉換,但僅適用於可以反白選擇的文字範圍,就算你在 iTunes 裡選擇曲目,再執行 iTunes 功能表 → 服務 → 中文字轉換程式 → 轉換所選的簡體中文文字,但你會發現,IT DOES NOT WORK AT ALL!

一首一首改?你有更好的工具。

繼續閱讀文章 »

作者為Chitsaou Yorkxin

2008 年 十二月 30 日 星期二 at 21:57:36