Subversion UTF-8 commit log

用 commit-email.pl 或是 的人,在 commit 時裡輸入 UTF-8 commit log (這邊指非純英文,在我自己的環境裡是中文),寄出的信會產生亂碼。

在網路上搜尋或是自己追蹤後,會發現是 svnlook 輸出的問題。網路上很多方法都是改 commit-email.pl,修正 svnlook 的輸出結果,但這個方法我不太喜歡。我覺得 svnlook 應該有設定可以調整,可以讓他輸出正確的 commit log,第一次跑 svnlook 就發現在我的 console 可以正確顯示,測過幾次後發現是因為 svnlook 依照 locale(1) 設定而產生亂碼。

知道問題後就很簡單了,由於 svnlook 會看 locale(1) 的設定,所以在 post-commit 裡先用 export LANG="en_US.UTF-8" (sh/bash) 或是 setenv LANG en_US.UTF-8 (csh/tcsh) 將 locale 設為 UTF-8,再使用 commit-email.pl 送信就沒問題了。

在 Ubuntu 上雙螢幕輸出

Notebook 是 R60,螢幕大小是 1024x768,家裡的 SyncMaster 245B 是 1920x1200,其中 DVI 介面接 Desktop,而 VGA 介面以前用 Windows 時拿來接 R60 雙螢幕。

上想要雙螢幕輸出,但一直卡在解析度上:都是 1024x768 或都是 1920x1200 (Notebook 上會用模擬的),後來找到這篇「」,看起來有點舊,不過還是可以用。

裡面提到的 HSync 與 VRefresh 我都沒設定,另外補上了 Option "Mode1" "1024x768",這樣就正常了,目前這樣使用還蠻正常的。

在 Ubuntu 上用 3G 上網

這邊講的是,在 下透過手機的 USB 線上網,主要是參考 這篇文章找到資料的。

把手機 (Nokia 6210) 接上 USB 傳輸線後,Ubuntu 上可以看到 /dev/ttyACM0 (dmesg 的訊息),這時候先跑 wvdialconf 讓他自動偵測,將設定檔寫入 /etc/wvdial.conf 後,再修改 /etc/wvdial.conf 裡的 Phone/Username/Password。電話號碼我是用 *99#,Username/Password 都是用 internet (隨便設)。

但我沒看到 APN 在哪裡設定,會故意把 Username/Password 都設定成與 APN 一樣也是因為想猜看看,但說不定下個月的帳單還是很精彩 XD

Zend_Form 的一些紀錄

如果是自己搞網站 (程式美術都自己來),用 設定完後,透過 render() 將 HTML code 呈現的確不錯,畢竟強迫你要用 CSS 去處理頁面呈現。不過,如果是請別人先做好美術版面,產生 HTML 後才要轉成 Zend_Form 生出來的話,就會用到很多 manual 裡不會教的「壞方法」XD

目前用到的方法是在 view 裡面 (我用 ) 直接顯示 Element,像是這樣:

<?= $this->post_form->post_title ?>

但只用上面的方法會產生一堆 dt + dd 之類的東西,這是因為 Element 預設的 Decorator 太多,所以需要重設只用 ViewHelper:

$element->setDecorators(array('ViewHelper'));

其他的在原來的 tutorial 都有寫。

另外有點很重要,因為 Zend_Form 在 1.5 版才納入,所以文件並不一定能夠涵蓋所有的方法,看 source code 瞭解用法的能力很重要...

很多地雷的 Zend_Form...

本來要寫「一些 地雷」,結果整理起來還不少,還是改成「很多地雷」比較合理。

第一個地雷是 select 元素:

$el = $this->createElement('select', 'siteshow');
$el->setLabel('是否顯示下一頁');
$el->addMultiOption('1', '顯示');
$el->addMultiOption('0', '不顯示');
$this->addElement($el);

對這個元素設定值時,要記得用 intval() 轉成數字,像這樣:

$f->siteshow->setValue(intval($dbval['siteshow']));

第二個地雷是 setRequired() 的處理,假設你這樣寫:

$el = $this->createElement('text', 'article_title');
$el->setLabel('文章標題');
$el->setRequired(TRUE);
$this->addElement($el);

因為 setRequired 是使用 判斷,所以標題取 "0" 時就會過不去。目前的解法是用 指定最小與最大長度:

$el->addValidator('stringLength', FALSE, array(1, 255));
$el->addValidator('stringLength', FALSE, array(1)); # 沒有最大長度限制

第三個... 忘記了,想到再寫 Q_Q

Mtron SSD 固態硬碟

補「」這篇的說明。

價位上, SSD Pro 7000 系列 32GB 的單顆進價大約在 $40K (含稅),兩顆就 $80K 了,相較 15K RPM 73GB SCSI 硬碟四顆只要 $40K 的價錢偏高不少。

效率上,MyISAM 的 real data 測試發現不論是 Mtron SSD 32GB*2 跑 RAID0,還是 15K RPM 73GB SCSI*4 跑 RAID10,都是 CPU 先到瓶頸,I/O 都沒有問題。至於 的結果在 的 Blog 上可以看到不少 real data 的資訊。

不過,如果你的資料庫遇到 I/O 瓶頸的話 (用 RAID 1+0 都還解決不了) 可以考慮用多顆 Mtron SSD RAID 把效率換出來,不過比較治本的方法應該是改寫程式,想辦法 partition。另外看看是不是因為大量的 Table scan 造成效率低落...

對了,Mtron SSD 硬碟台灣有代理商了,

Ubuntu 8.04

本來是在 R60 上裝 7.10,結果裝完後發現 8.04 已經到 RC stage 了,乾脆重裝成 8.04,等到正式 release 的時候升級到最新版。

裝完後什麼都不需要調整,就可以很順暢的使用 TouchPad、無線網路,而且 Function Key 也都正常運作。另外該有的軟體也都有了,像是 (居然是 3.0b5) 與

輸入法先換成 ,字型的部份把 FireflyTTF 以及 裝上後就差不多了。小紅點的 Scroll 功能的部份則是加了兩三行到 /etc/X11/xorg.conf 內。

SubversionSVKGit 都裝好後,即使想在沒有網路的地方開發軟體仍然很方便。

應該會跑一陣子看看有什麼不足的,桌機先維持 Windows XP... XD

Update:相關的設定可以參考 寫的「

MySQL Proxy 的用途

作者的 Blog 上看到一些關於 transaction 時有趣的用法:

話說回來,最近 又有一陣子沒什麼動作了,看起來心力都花在 上面了...

InnoDB Barracuda

InnoDB Barracuda (InnoDB Plugin 提供的新格式) 有測試結果了,在「」這篇裡面以一個 30GB 的 mysqldump 檔案測試 (看他文章的內容,應該是 real data),在裡面提到幾個重點:

  • 目前的 有個與 UTF-8 有關的 bug 會影響測試結果 (「」),所以測試時以 latin1 測試。
  • 為了測試 fast index,他用兩種不同的方式測試。第一種是把所有 DB scheme 與 index 都建立好,再將資料匯入;第二種是只先建立 primary key,等到匯入資料後再下 index。測試的結果發現,後者的總時間遠遠超越前者。
  • 如果使用壓縮格式,匯入的速度會慢 30% ~ 50%,但是檔案大小只有原來的 1/3,讀取的速度不在這次測試的範圍裡,不過 comment 有人期待對於偏 I/O 的 query 效能會有提昇。

變天了...

好幾天沒寫 Blog 了,主要是星期五六日去員工旅遊 (參考「」這邊),然後星期日晚上與星期一狂看 與新番,於是就好幾天沒寫 Blog 了...

說變天的原因是因為很多單位在 這段時間發表了一堆東西,就管理與政策面來看,這是 買下 後第一次的 MySQL Conference,很多人都在看 Sun 對於 MySQL 這套 Open Source Software 到底會有什麼大計畫。

另外一方面 (技術上), 推出的 所列出的優點讓人相當驚豔,解決了不少問題,不過可惜在目前最新版 5.1.24-rc 上無法運作。

再來是 用硬體的方式大幅增加 transaction 的速度,站上 Non-cluster 100GB data 的王座,實際上機器也很便宜,才 USD$35K。(如果你真的需要用到這麼快的 transaction 速度,百萬台幣應該不是什麼問題)

結果玩回來後發現一堆計畫都要再重新思考...