Trackping Separator 2.x 開發記事

TSP久沒更新,其實都是我懶,不是苦無點子。從連入連結和 technorati 就能看見不少人嫌舊版TSP安裝麻煩,改theme /主題改得亂七八糟。老早發現其實 WordPress 有兩個 filter API可以幫忙省免大部份麻煩的步驟,在另一插件 MCEComments 出現之前就有了構思,不過自從 Pingback/Trackback 成為垃圾郵件業者的新武器,就差不多沒有人在用。這年頭連進來的訪客都寥寥可數,沒有留言建議不在話下。況且,不少主題現在都內置(例如 K2)這種功能,這個插件就更沒必要存在了。

幾天前看見舊版面有點亂,就打算把整個主題推倒重來,再到官方主題站挑個新的。選了這套 Big Blue,清爽圖片少,就覺得很適合。字體有點小,不過調一下CSS就可以,問題不大。反倒是留言,雖然有內置分離功能,不過從主頁看留言數卻跟內文顯示的不同,不順眼。

所以有了動機。程式碼其實都不太難,改寫幾句就 OK。但是,卻被 PHP 這種本來是樣版語言的設計踹了一腳。我不小心的放了兩個 \n 在插件的 PHP 後面,自然它們也出現在準備輸出成網頁的那截記憶體裡。XML 的設計又很龜毛,哪管是空白字元,只要有東西在 <?xml version=”1.0″ ?> 之前就得去死,所以改好插件的頭兩天 feed 都變成了奇怪的亂碼 (我不知道為甚麼,明明只是空白字元而已)。還好有大雄經 twitter 提醒,不然讓這不到 200 個的忠實讀者受罪,那叫我如何受得起?

軟件這種東西永遠有 room for improvement。或許放一頁設定內頁,或許可以把外連列表 (listtrackping)都改成自動加上…

後記:插件是故意寫成 non-backward compatible,因為兩個版本(1.1.1 和 2.0)在功能上是毫無分別的。

PHP 7 決定全面使用 Java 語法

據一份內部流出的會議紀錄顯示,開發群決定多次借用 Java 語法的 PHP 腳本語言將在版本 7 完全放棄繼承自 C 以及 Perl 的語法,完全擁抱 Java。而 J2EE 的 Servlet/JSP 架構將會完全引入 PHP 裏。

也因為如此,PHP 再不會以 $ 來識別變數,而物件存取運算子亦會以 . 代替。傳言指出在 PHP 6 引入的 namespace 名稱亦會改變成 package,而不同 package 的 PHP 腳本也必須放到不同目錄以資識別。

可是,由於改寫整個 PHP 核心是一件繁複的工程,他們預料 PHP 7 將會延期推出。但是這樣應該也是值得,因為重寫整個核心和使用新的語法將會有助解決困擾 PHP 開發者的安全問題。

此外,據該流出文件指出,某部份核心可能將會以 Java 語言編寫,不過他們得先解決 Java 執行效能的問題。

Update: 所以說,愚人節快樂!

開 Spam Karma 2 以後,把自己留言的通知電郵擋住

因為 SK2 有自己的電郵通知函式,所以跟小弟自行撰寫的小程序有點衝突,開了 SK 2 後往往也會接收到自己留言通知的電郵,對我來說實在非常擾人。明明自己留言了嘛,用不著自己通知自己做過的事,不是嗎?

其實修改的辦法非常簡單。只要在 SK2 的 plugin 稍微修改一下,便可以一勞永逸,不用再接收那堆多餘電郵(話說為甚麼 WP 要這樣設計呢?不解)。請使用 WP 內置插件編輯器打開 SK2 插件,找一下 function wp_notify_postauthor。在大括弧裏面找這句:

if ('' == $user->user_email) return false;

在上面加上:

if ($user->ID == $comment->user_id) return false;
if ($user->user_email == $comment->comment_author_email) return false;

儲存就可以了。

As you may have guessed from the title, this is the instruction on how to filter out your own comment notifications if you are using Spam Karma 2. Since Spam Karma 2 has its own version of e-mail notify, it may cause my plugin SCNF not functioning. To get rid of those annoying messages, we have to modify the SK2 plugin itself.

Edit the SK2 plugin using the WordPress internal editor (you could call it by clicking the “Edit” link of SK2 on the plugin page). Then, find the line:

if ('' == $user->user_email) return false;

Add these before the line:

if ($user->ID == $comment->user_id) return false;
if ($user->user_email == $comment->comment_author_email) return false;

I suggest copy the text from the textfield to your favourite editor, for example gEdit or Notepad++, search and modify, and copy the whole back to the textfield overwriting the old content, since your local editor has a nicer interface and a search function. Beware there should be 2 same lines, you should add the lines to both places. When you are done, save it and say goodbye to them!

PHP 需要樣版引擎嗎?

其實這是爭論已久的問題。因為 PHP 設計上本身已有樣版(template)的特性,即以 HTML 為主體,程式碼穿插其中。相比當時流行的 CGI script 語言如 Perl 或 C/C++ 或其他 shell script,每當要在頁面顯示動態資料/HTML tag 的時候除了要 print 以外還要為字串作逃逸處理(escaping),PHP 比他們都來得方便,因為 PHP 既可以把程式碼和 HTML 碼放到同一個檔案裏,又不用 escape 程式碼以外的靜態內容,再加上 PHP 本身有一大堆實用的函數,所以有很多人從此投入 PHP 的懷抱。

除了 PHP 以外,還有兩款跟 PHP 角色非常相似,主流的動態網頁系統,包括同是 96 年推出的產品、微軟的 ASP 以及1998年太陽電腦發佈的 JSP。這兩款動態網頁早期的版本跟 PHP 差不多,也是程式碼跟網頁靜態內容放到同一個檔案裏去。不過,與 PHP 不同的是,這兩款動態網語言的程式碼還可以放到其他地方去。ASP 的是 COM(Component Object Model),JSP 的是 Servlet。

也因為可以有這種程式碼「規劃」,在微軟的 IIS 平台和太陽的 J2EE 平台上首先出現一堆又一堆的 MVC 框架。拿 J2EE 來說,POJO,Servlet 和 JSP 本身便是一套完整的 MVC Framework。程式編寫員可以細緻區分那些是「版面美化用」的邏輯,那些是「商業應用」的邏輯。

大家看 MVC 是好的,所以大家也想在 PHP 搞 MVC。但是 PHP 由開始便被設計為樣版語言,它註定就是要跟 HTML 一同存在,所以儘管有眾多現成的 MVC framework,寫出來的程式看來仍像一個個沒關聯的動態網頁。你看 J2EE 雖然有了 JSP 這套初始樣版語言,但是仍有為數不少的樣版引擎出現(Faces,Struts,JSP 2.0 也勉強算是另一套全新的樣版引擎),而且沒有人會質疑「J2EE 要不要樣版引擎」,那是因為程式碼不侷限只寫在 JSP 裏。

所以,與其討論「PHP 要不要樣版引擎」,不如問一下自己「PHP 是不是應該變得像 Ruby/Python/Perl」 。不過,現在的 PHP 開發團隊會告訴您 PHP 跟 HTML 混在一起是 PHP 的特色,”This is a feature of PHP”。

WordPress Feed 修改教學

林子揚要求,說一下怎樣可以為分類的 feed 顯示不同的標題吧。

由於 WordPress 的 feed 不是整合到主題/模版(template)裏,所以不可以直接從管理介面要為 feed 加上新功能,而要逐個逐個相關檔案找編輯器來修改。幸好要修改的檔案格式和模版檔案相似,而且也可以共用同一堆 template tag。

不說廢話了,直接來吧。請先開啟 WordPress 程式的主目錄裏的 wp-rss2.php。

在裏頭找 “<title>” 這個 RSS tag,然後將 tag 內容的中間改為:

<?php wp_title(' '); ?><?php if (wp_title(' ', false)) { echo ' | '; } ?><?php bloginfo('name'); ?>

那麼 RSS2 feed 的標題便會變成「分類名稱 | 網誌名稱」。同樣,只要更改 <description> tag 的內容,即可變更 feed 的 description。不過我們只是更改了 RSS2 feed 的內容,如果使用者訂閱的是 ATOM 或 RSS 0.92 版本的 feed ,他們仍是會看見變更前的標題和描述。

Minor update on Trackping Separator

As you may have noticed, WordPress Blog has just posted out the guidelines on migrating WP plugins to 2.1. So I’ve did it in the morning, change a few SQL lines, plus adding a %date variable to the listtrackping() function (in order to completely eliminate the need of an evil trackback/pingback loop), and here comes Trackping Separator 1.1.1.

中文:WordPress Blog 終於寫了 WordPress 插件過渡至 2.1 的注意事項。除了改了幾句 SQL 以外,也為 listtrackping() 加了新的 %date 變數,希望大家會徹底放棄使用 trackback/pingback 迴圈吧。詳情請至 TSP Wiki.

期待名單

PC Game:

  1. Half-Life 2 Episode 2 (01/2007)
    其實最重要還是附帶的 Team Fortress 2 吧… 我一直一直在等…在試影片看見遺忘已久的 2fort5 版圖啊(有沒有人玩過 QW?).. 現在成了 2farm =_=
  2. Battlefield 2142 (10/2006)
    漂亮死人的畫面!一向喜歡這個「多人線上作戰」系列,一直覺得操控及遊戲性不錯,新一版不能不捧場吧?
  3. Supreme Commander(TBA 2007)
    RTS 咯。畫面細緻,而且武器種類多樣化(核彈頭真的把整個畫面轟掉,絕不如 C&C 系列那種小兒科),所以也是期待名單呢。
  4. 星塵回憶錄 3.0 Mod 以及 SEED mod for Homeworld 2
    3.0 裏有 GP-03操控,自護加送 AMX-002!SEED 看見 Freedom 四砲齊射就很吸引了(可惜光線顏色不能改)。內地朋友真的厲害哩…

Technology/Programming:

  1. Java 6 (12/2006)
    有可以讀入其他 scripting language 例如PHP,JavaScript,以及Python 等等的模組,還可以在程式碼直接叫編譯器!想必是反擊 .NET 平台吧!
  2. PHP 6 (TBA)
    Namespace!Type Hinting!這兩個就夠了…

Anime:

  1. 涼宮春日的憂鬱 – 第二季 (TBA)
    連會不會有也不知道喔… 不過很大機會吧。
  2. SEED 3 (TBA),SEED Stargazer(09/2006)
    SEED 3 嘛… 為看而看而已(我也不知道那究竟是劇場版還是甚麼的)… Stargazer 挺好看的,原來沒福田會有這種可能性!

話說回來,怎麼這篇那麼多感歎號呢?果然是秋天到了…