這篇其實是在講 C10K 問題,不過我懶得寫長長一篇解釋了...
Apache 2.2 的 MPM Event 在測試後發現相當不錯,大力推薦 :D 不像 prefork 模式,一個連線就要一個 process。
再來因為 .htaccess
的彈性,配合 mod_fastcgi 掛 PHP,其實在量大的時候可以取代掉 lighttpd。(量小的時候 lighttpd 還是很棒)
幹壞事是進步最大的原動力
Catalyst 是一套 Perl 上的 MVC Framework,由於 CPAN 的資源相當的多,所以 Catalyst 本身只自己實做 Controller 的部份,Model 與 View 的部份可以挑自己喜歡的模組外掛。
剛剛在 Fayland and Perl Programming 這邊看到 Catalyst Framework 開始進行 2007 年的 Catalyst Advent Calendar 了,為期二十五天,前面三天的主題是 ExtJS、YUI、以及 Template。
更早前的 Catalyst Advent Calendar 可以參考 2005、2006 兩份,2005 那份舊了點,但 2006 那份就非常棒 :-)
Becoming PHP 6 Compatible 這篇裡面提到的五個技巧,現在遵循這些習慣,等到 PHP6 正式推出的時候程式碼才不會改太多:
register_globals
:register_globals
將 $_GET
、$_POST
、$_COOKIE
這三個的變數內容直接對應到全域變數。這在目前的 PHP4 與 PHP5 預設都是關閉的,但還是有文件書籍會「建議」你打開。在 PHP6 中,這個功能將直接消失。不過,還是可以透過 extract() 達到一樣的效果。magic_quotes
:這個功能在目前的 PHP4 與 PHP5 預設是開啟的,但在 PHP6 將會消失 (而非改為關閉),所以,在開發軟體時最好以 magic_quotes
關閉的情況下開發。$HTTP_POST_VARS
或 $HTTP_GET_VAR
,改用 $_POST
及 $_GET
。這點可以用編輯器的字串代換很快的換完。就算真的是很多的程式碼,也可以一次換一些。preg_*
,而不要再用 ereg_*
。現在就用 preg_*
是因為執行速度比 ereg_*
快,另外在 PHP6 將會廢掉 ereg_*
。不過應該會有人寫出 PECL extensions 放回來。$a = & new object(); // Do not do
$a = new object(); // Do this as of PHP 6
上面所提到的改變,會強迫使用者不能再用壞習慣寫程式,對於 PHP 的發展會是相當好的事情。
jQuery 1.2.1 釋出,修正了 這些 bug,官方 Blog 上的公告在這:jQuery 1.2.1: Quick Fixes for 1.2。
另外一個 1.2.1 很重要的「修正」就是把 1.2 裡拿掉的 .eq(n)
放回來了,寫成 .slice(n, n+1)
太脫褲子放屁 (你可以在看到 Source for "Wretch Album Expander" 裡看到我在選擇第四個 table 時用 slice(3,4)
的寫法),結果就是在一陣抱怨聲後把 .eq()
補回來了... XD
另外一個消息是 jQuery UI:jQuery UI: Interactions and Widgets。
這代表 jQuery 也開始做 UI 的部份了,在 ericsk 的「jQuery UI 問世」這篇有提到一些,另外在網站上也有一些 sample html 可以玩。
在 #bsdchat 上看到 mjhsieh 貼了這個 link:BSD Licensed PCC Compiler Imported,OpenBSD 的人把 Portable C Compiler (BSD license) 放到 CVS repository 了。
當 GCC 決定要走向 GPLv3 後,就可以預測到下面這幾件事情一定會有一件發生:
前者在 GCC 決定轉為 GPLv3 的時候就有人說要做,但是一直沒看到進一步的消息。後者則是 Anders Magnusson (NetBSD maintainer) 決定拿 Portable C Compiler 改,結果 Otto Moerbeek 把這份 code 塞進 OpenBSD 的 CVS repository 裡。
看 CVS log 的檔案列表似乎支援不少平台,但據說目前 PCC 只能夠在 i386 平台上跑,而且還有 bug。不過當有人先做了第一步,造成新聞後 (這是重點),接下來的事情就好辦很多了...
另外幾個有趣的事情拿來對照 OpenBSD 的動作還蠻有趣的:OpenBSD 大魔頭 Theo de Raadt 對於 Linux community 處理 GPLv2/BSD license 雙重授權時的砲轟,以及 GCC 預定在 9/18 釋出 4.2.2 的計畫。
當 innerHTML 還是太慢的時候的解法:When innerHTML isn’t Fast Enough...。
在作者的文章裡面,你可以看到在非常極端的例子裡,用改寫過的 replaceHtml() 在 Firefox 2.0.0.6 裡 destroy 與 replace 的速度各快了 473 倍以及 50 倍。而在 Safari 3.0.3 beta 上則是 create 100 倍,replace 50 倍。
在 jQuery 的 Google Groups 上面可以看到兩個作者 (jQuery 的作者以及上面那篇文章的作者) 討論把這個功能放入 jQuery 的一些問題:Faster then innerHTML。
事前說明:在發表這篇文章時我是 Pixnet 的技術顧問,Xuite 的網誌服務屬於 Pixnet 的競爭對手。
我一直覺得 Xuite Blog 的 Comment 看了很累,因為是由新到舊出現,所以閱讀時的順序必須是從下到上,但每個留言又是從上到下,於是眼睛要不要的跳來跳去...
於是,我用 Greasemonkey 寫了一個 script,將 Xuite Blog 的 comment 反過來排,由舊排到新:Xuite Blog Comment Sort。
寫這個 script 的時候才發現 Xuite Blog 有用 jQuery,所以直接套進來用就可以了 :p
雖然在 官方的 Blog 上還沒公佈,不過因為剛好在用 jQuery 寫 code,所以發現官方網站上已經更新了:Release:jQuery 1.2。
Update:官方網站更新了,jQuery 1.2: jQuery.extend("Awesome")。
檔案愈來愈大了,這個版本有 26k (1.1.4 只有 21k),gzip 壓縮過後是 14k。
Python 3.0a1 (Python 3000 規格的實做) 出版了。
在 What’s New in Python 3.0 可以看到與 2.6 的差別 (還有一堆地方放 XXX
等後來補上...),另外 3.0 的文件在 Python Documentation,最重要的是文件的搜尋啊啊啊... (在 docs.python.org 用的是 Google 的 site:
搜尋,不是說不好,只是 Google 的介面對於寫程式找資料來說實在不舒服...)
不過,還是沒看到類似於 CPAN 架構的搜尋站台,像是 search.cpan.org 可以在搜尋完後先看到模組的文件,直接看怎麼使用,再決定要不要安裝。
這陣子抓 bug 的時候發現連自己都要想半天,還是整理起來好了... 假設 $v 是未經過濾的變數,要放到不同地方要做不同的處理:
mysql_escape_string($v)
或是 mysql_real_escape_string($v)
,或是改用 prepare + execute 的模式。htmlentities($v, ENT_QUOTES)
過濾後用 double-quote 包起來,原因是 $v 可以是 "><script> ... (一堆邪惡 js 程式碼) ... </script>"
,這是一種 XSS 攻擊。urlencode($v)
。system()
呼叫):用 escapeshellarg($v)
。