Zend_Db 的例外處理

照 Manual 所列出來的功能, 似乎沒有提供 的功能,所以就得自己做了。

正常的作法是自己寫 SQL query 處理,但我想到的方法就是先 ->insert(),如果失敗再 ->update()。拆開來的這兩個動作會使得 多花不少 CPU resource,但我暫時不想自己寫 SQL Query (主要是因為嫌 escape 麻煩),先放個 XXX 等以後再 tune。

問題在 ->insert() 後如果遇到 Duplicate 會丟出 Exception,用 try-catch 的方法我不是很喜歡,但稍微翻過 Zend_Db 的 code,似乎沒辦法改成 return status,所以就只好用 try-catch 處理。這應該是跟底層的 有關,Zend_Db 只是在中間的介面。

如果還有遇到其他問題就繼續寫...

Zend_Db 的參數 (與 Zend_Config、Zend_Json)

::factory() 可以吃兩種語法,第一種是用兩個參數指定所有的資訊,像這樣:

$params = array('host' => 'localhost', 'username' => 'my_username', 'password' => 'my_password', 'dbname' => 'my_database');

$db = Zend_Db::factory('pdo_mysql', $params);

第二種是吃一個參數, (或者繼承他的 class):

$conf = Zend_Config_Ini('filename.ini');
$db = Zend_Db::factory($conf);

如果想把資料庫設定放在檔案裡,再用 Zend_Config 讀進來傳給 Zend_Db,目前官方有 兩種方法,不過這兩種方法我都不喜歡,用 找 "Zend_Config_Yaml",沒有什麼人在研究這個 (在是有看到一份,不過沒看到其他人用的心得)。

於是退而求其次,用 讀進來後用第一種方式傳進去。

PIXNET Album Expander

除了幫寫以外,也幫自己公司 () 寫 Album Expander,這樣我自己看圖片才方便 XD

這隻程式請配合 服用:

另外在 trace DOM 的時候有一些感想,照片的部份全部都是 ul + li,再用 CSS 做出來的,當初設計這個 Template 的人不賴啊 XD

Update:修正了兩個問題,第一個是 今天一直噴 502 而讀不到 ,所以只好用 code.jquery.com。第二個是修正相本 .thumgBox 與 .thumbImg span 裡設定 width/height 時會產生的 bug。

部落格觀察

都是小圖,看不清楚的可以點回 的頁面看到大圖。

我不曉得依照這個規則是怎麼算出比還要高分:(原出處:部落格觀察貼紙各式說明)

下面這張是依照「Page 總分」排序,彎彎在第九名,第七名是 Gene,第八名是 Wildcat,第十三名是 askareiko,剛好是部落格觀察的「GAW」,這個「排行榜」的公信力大家自己心中應該有數。

Zend Framework 的 Zend_Db

這個週末都在研究 的用法,然後套用到新的系統上。

的三個架構裡,Controller 透過 .htaccess 配合,效果還算可以。View 目前是用 ,不過會看情況改用 或是 ,基本上都沒什麼問題。

最大的問題在於 Model: 的功能看起來很多 (在說明文件的份量裡,算是相當厚的一個模組),但實際上有不少缺陷沒辦法光靠 Zend_Db 目前內附的模組解決,需要自己寫 Adapter 處理。在沒時間研究 Zend_Db 的 Adapter 怎麼寫的情況下,只能先把他當作非常小的 使用。

Zend_Db 主要的兩個問題是:Master-Slave 時讀寫必須分開,以及多台時 Failover 及 Load sharing 的處理。雖然這兩個問題都可以用 解決,但我不是很喜歡 MySQL Proxy 的解法,所以...

Anyway,目前該解決的都解決掉了,如果有遇到其他的模組不好用,我再寫文章抱怨好了... XD

換到 WordPress 2.5

剛剛把系統換成 2.5 了。就視覺上來說,改變最大的是後台的介面。新後台的介面用起來沒什麼問題,比以前的確乾淨不少,但是最常被使用的文章編輯的部份反而變得相當的糟糕。

寫新文章時,編輯版面就是固定給寬度是 1024px 的使用者用,超過的部份 (像我會把瀏覽器開到 1280x1024) 仍然是向左邊靠,於是右半部會有一塊留白,如果我開成 1920x1200 就更明顯了。另外,本來可以拖拉的區塊,現在變得無法拖拉...

另外一個插曲是,我使用的 在 WordPress 2.5 上會有問題,所以就順便更新了,如果有遇到後台介面進不去的人,把錯誤訊息拿去 找看看,應該都有人問過了。

Mtron SSD 硬碟

昨天 Mtron SSD 硬碟 3.5" 32GB*2 終於到了,上線後測試發現與之前的 SSD 硬碟完全不同,以 MySQL 的啟動時效率來看,足以殲滅 15KRPM SCSI*4 (RAID10)。(剛啟動時因為 key buffer 還沒有 cache,會需要一段時間速度才會慢慢上來,在 15KRPM 的 RAID10 SCSI 上需要幾分鐘,但 Mtron SSD 幾乎不需要 slow start)

其他的就不多說了,目前是 jnlin 在測試,請參考他寫的「Mtron SSD 在 MySQL (MyISAM) 上跑了兩個小時」這篇,之後應該會有一些數據可以看。目前已經是卡在 CPU bound 了,接下來要期待 Jeff Roberson 對於 FreeBSD 上 pthread_rwlock 的改善。

Ref:「MySQL 在創見 SSD 上跑的情況

Opera 與 Webkit 相繼達成 Acid3 100% Pass 目標

OperaWebkit 兩個 browser (engine) 已經先完成 Acid3 100% Pass:

Wikipedia 上的資料,這次 Opera 比 Webkit 快應該是為了報 Acid2 時的仇... (Acid2 由 Opera 的 CTO 所發表,但當時第一個達成 non-public build 100% pass 的卻是 Safari XDDD)

Update:結果因為一個 bug 造成翻盤,參考 comment 裡 zmx 提供的 url。

缺乏 Model 支援的 Zend Framework

Zend Framework 前陣子釋出 1.5.0 正式版了,與 1.5.0-RC 系列沒有太大差別,所以沒支援的還是得自己想辦法。

Controller 的部份,Zend_Controller 沒什麼問題,最基本的配置方式都已經摸熟了,也覺得算是還蠻好用的。

View 的部份,Zend_View 畢竟是 PHP 語法,看起來就不太討喜,加上我們是使用 Google cTemplate,其實以目前狀況算是還不錯,要另外再學一套的話要先考慮好處夠不夠足以換掉。far 最近在研究這方面,而我則是想使用 Smarty。但不管是哪種方案,View 的部份看起來沒什麼問題。

真正的問題在 Model,你可以在 Zend Framework 的文件裡面看到 "models" 的目錄配置 (像是在 Using a Conventional Modular Directory Structure 裡),但實際上 trace code 發現沒有對 model 支援。如果你自己寫了一個 Model 放到 models 裡,也沒有很方便的方法讓 Controller 裡的 code 使用,目前我想到的 dirty work 是 require_once(dirname(__FILE__) . '/../models/UserModel.php')

有誰用 ZF 開發有遇到同樣問題的嗎?