Home » 2008 » May (Page 2)

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 瞭解用法的能力很重要...

PIXNET 徵正職 PHP 工程師

幫我們公司徵人 :p

要徵熟悉 ,以及 的正職 coder 兩名,工作地點在台北市民生東路二段這邊,有興趣的人請將履歷寄到 104@pixnet.tw,標題請寫上「應徵 PIXNET 程式設計師」。

這份工作主要的內容是寫 PHP,如果熟悉 (目前我們用這個開發) 或其他 Framework 更好。

有問題除了可以在 comment 問以外,也可以直接寫信到 gslin at pixnet.tw 問我。

很多地雷的 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

PHP 的 array_merge

在「」這篇的 comments 看到 裡兩個 array 相加的處理,實際寫了一些小程式玩過後發現一些以前不知道的東西 :p

associated array 用 $a + $b 時,如果有重複的 key 會優先取前者 ($a),要優先取 $b 就用 $b + $a

Archives