Apache 2.2 的 MPM Event

這篇其實是在講 問題,不過我懶得寫長長一篇解釋了...

2.2 的 在測試後發現相當不錯,大力推薦 :D 不像 prefork 模式,一個連線就要一個 process。

再來因為 .htaccess 的彈性,配合 ,其實在量大的時候可以取代掉 。(量小的時候 lighttpd 還是很棒)

Catalyst Framework

是一套 上的 MVC Framework,由於 的資源相當的多,所以 本身只自己實做 Controller 的部份,Model 與 View 的部份可以挑自己喜歡的模組外掛。

剛剛在 這邊看到 開始進行 2007 年的 了,為期二十五天,前面三天的主題是 、以及 Template。

更早前的 可以參考 兩份,2005 那份舊了點,但 2006 那份就非常棒 :-)

現在寫 PHP6-compatible 的一些技巧

Becoming PHP 6 Compatible 這篇裡面提到的五個技巧,現在遵循這些習慣,等到 PHP6 正式推出的時候程式碼才不會改太多:

  • 不要再依賴 register_globalsregister_globals$_GET$_POST$_COOKIE 這三個的變數內容直接對應到全域變數。這在目前的 PHP4 與 PHP5 預設都是關閉的,但還是有文件書籍會「建議」你打開。在 PHP6 中,這個功能將直接消失。不過,還是可以透過 達到一樣的效果。
  • 不要使用 magic_quotes:這個功能在目前的 PHP4 與 PHP5 預設是開啟的,但在 PHP6 將會消失 (而非改為關閉),所以,在開發軟體時最好以 magic_quotes 關閉的情況下開發。
  • 不要使用 $HTTP_POST_VARS$HTTP_GET_VAR,改用 $_POST$_GET。這點可以用編輯器的字串代換很快的換完。就算真的是很多的程式碼,也可以一次換一些。
  • 使用 preg_*,而不要再用 ereg_*。現在就用 preg_* 是因為執行速度比 ereg_* 快,另外在 PHP6 將會廢掉 ereg_*。不過應該會有人寫出 PECL extensions 放回來。
  • 直接拿原作者的 code 比較清楚:

    $a = & new object(); // Do not do
    $a = new object(); // Do this as of PHP 6

上面所提到的改變,會強迫使用者不能再用壞習慣寫程式,對於 的發展會是相當好的事情。

jQuery 1.2.1 以及 jQuery UI

1.2.1 釋出,修正了 ,官方 Blog 上的公告在這:

另外一個 1.2.1 很重要的「修正」就是把 1.2 裡拿掉的 .eq(n) 放回來了,寫成 .slice(n, n+1) 太脫褲子放屁 (你可以在看到 裡看到我在選擇第四個 table 時用 slice(3,4) 的寫法),結果就是在一陣抱怨聲後把 .eq() 補回來了... XD

另外一個消息是

這代表 也開始做 UI 的部份了,在 的「jQuery UI 問世」這篇有提到一些,另外在網站上也有一些 sample html 可以玩。

BSD license 的 C Compiler

上看到 貼了這個 link:BSD Licensed PCC Compiler Imported 的人把 () 放到 CVS repository 了。

決定要走向 後,就可以預測到下面這幾件事情一定會有一件發生:

  • 4.2.1 (以 發佈的最後一個版本) 發展的 C Compiler,維持
  • 重寫,或是改寫一個 C Compiler,以比 更自由的 license 釋出。

前者在 決定轉為 的時候就有人說要做,但是一直沒看到進一步的消息。後者則是 ( maintainer) 決定拿 改,結果 把這份 code 塞進 的 CVS repository 裡。

看 CVS log 的檔案列表似乎支援不少平台,但據說目前 只能夠在 i386 平台上跑,而且還有 bug。不過當有人先做了第一步,造成新聞後 (這是重點),接下來的事情就好辦很多了...

另外幾個有趣的事情拿來對照 的動作還蠻有趣的: 大魔頭 對於 Linux community 處理 GPLv2/BSD license 雙重授權時的砲轟,以及 預定在 9/18 釋出 4.2.2 的計畫。

在 non-IE 瀏覽器修改 innerHTML 的速度

還是太慢的時候的解法:When innerHTML isn’t Fast Enough...

在作者的文章裡面,你可以看到在非常極端的例子裡,用改寫過的 replaceHtml() 在 2.0.0.6 裡 destroy 與 replace 的速度各快了 473 倍以及 50 倍。而在 3.0.3 beta 上則是 create 100 倍,replace 50 倍。

上面可以看到兩個作者 ( 的作者以及上面那篇文章的作者) 討論把這個功能放入 的一些問題:Faster then innerHTML

將 Xuite 的 comment 由舊排到新

事前說明:在發表這篇文章時我是 的技術顧問, 的網誌服務屬於 的競爭對手。

我一直覺得 的 Comment 看了很累,因為是由新到舊出現,所以閱讀時的順序必須是從下到上,但每個留言又是從上到下,於是眼睛要不要的跳來跳去...

於是,我用 寫了一個 script,將 的 comment 反過來排,由舊排到新:

寫這個 script 的時候才發現 有用 ,所以直接套進來用就可以了 :p

Python 3.0 測試版

(Python 3000 規格的實做) 出版了。

可以看到與 2.6 的差別 (還有一堆地方放 XXX 等後來補上...),另外 3.0 的文件在 ,最重要的是文件的搜尋啊啊啊... (在 用的是 Google 的 site: 搜尋,不是說不好,只是 的介面對於寫程式找資料來說實在不舒服...)

不過,還是沒看到類似於 架構的搜尋站台,像是 可以在搜尋完後先看到模組的文件,直接看怎麼使用,再決定要不要安裝。

變數在 xx 的處理方式

這陣子抓 bug 的時候發現連自己都要想半天,還是整理起來好了... 假設 $v 是未經過濾的變數,要放到不同地方要做不同的處理:

  • MySQL Statement:這已經是標準了,mysql_escape_string($v) 或是 mysql_real_escape_string($v),或是改用 prepare + execute 的模式。
  • 放在 HTML Form 的 input 元素裡面:要用 htmlentities($v, ENT_QUOTES) 過濾後用 double-quote 包起來,原因是 $v 可以是 "><script> ... (一堆邪惡 js 程式碼) ... </script>",這是一種 XSS 攻擊。
  • 放在網址的 GET 參數裡:用 urlencode($v)
  • 呼叫外部程式帶入參數時 (像是 system() 呼叫):用 escapeshellarg($v)