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)在功能上是毫無分別的。

本年最後三個工作天

這三天裏,我休閒得很,也悶得很。Project 順利度過了 UAT,再加上身邊的同事全部選擇去享受他們儲起來的假期,我在辦公室裏所以也沒事可做。

沒有東西可以做實在無聊透頂,而為了補足在工作間的空虛感,我居然動手寫程式 — 為了興趣吧。第一日我在收拾這裏不符合 XHTML 1.1 的地方,也花了我整天時間。第二和第三日呢,我把我的注意力集中放在香港天文台 — 它的氣象服務。原來天文台有提供 XML 天氣資訊服務,但費用實在貴得令人咋舌 (年費港幣 $3,310)。我想由於無人問津,服務也在零五年一月終止。

不過其實也不用透過 XML 才可以從程式取得天氣資訊吧?文字版的天文台網頁格式很整潔,所以也很容易從程式取出有用的資訊,諸如氣溫呀,濕度呀,紫外線指數呀,分區氣溫等等。這幾天我便以 Java 寫這樣的一個類別,以 Regular Expression(常規表達式)取出不同資料。

對了,我在家還把整個 Java class 的程式碼移到 PHP,那便可以在這個伺服器發放相應的 Web Service,給其他網站使用。不過天文台的資訊有版權,所以如果要公開的話我也要取得相關許可才能這樣做。

但不知道發放提取程式的源碼如何呢?情況有點像 BT 或其他 P2P 軟件 — 提取工具本身並不犯法,但提取有版權保護的資訊才會涉及侵權。我想我也可以公開源碼吧,就把那個 Java class 貼出來好了。

還有,祝大家在新的一年,有一個新的開始。新年快樂… 噢,不要「快落」,新年愉快才對。

程式碼在這裏下載。

XSL Identity Transformation

XSLT 的作用大家應該知道了,便是把 XML 的格式從一種轉成另一種。比如說,把 RSS 或 ATOM 轉為可在瀏覽器上直接觀看的 XHTML (Feedburner 的功能之一),又或者把 XML 格式簡化,程式更容易套取資料。但是,你可有想過以 XSLT 把格式原封不動的弄出來?

或許你會問,這樣是多此一舉,既然一樣啦,為甚麼還要 Transform?

除錯。可能大家沒有這樣的經驗:看不到源 XML。源 XML 是從呼叫 SAX 各個 handler 的函數虛擬出來,根本便沒有 XML 產生過,除錯的時候很來找到問題的所在。用 Identity Transform 就好了,甚麼 XML 經 Transformer 一過便列了出來。

有些時候想把特定的元件改變,但其他則維持原狀,也可以透過從 Identity Transformation 樣版匯入其他樣版達到目的。此外,就是弄出不同排位次序但資料不變的 XML 檔案。

把 identity transformation template 貼出來看看:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

延伸閱讀:XML.com: Using XSLT to Assist Regression Testing

XSL Family

因為工作需要,硬著頭皮「速成」了 XSL (XML Stylesheet Language Family)。XSL 是一套將 XML 資料變成另一種 XML 資料,及顯示 XML 資料的工具(本身也是 XML),有三名成員:

  1. XSLT(XSL Transformations,XSL 轉換)
    XSLT 給我的感覺很像 Regular Expression + Template,簡單的流程是在源 XML 找出要用的資料,再放到新 template 裏的變數裏去。例如 XML 格式裏有某個節點的資料要找出來,放進 HTML table 顯示給用家 (用家看不慣密麻麻的 XML 嘛)。XSLT 有點 programming 的意味 (有 foreach,也有 if else),但是本身也是一套格式表達的語言呢。
  2. XPath (XML Path Language,XML 路徑語言)
    這套不是 XML,卻是一套存取 XML 文件裏各元件資料 (包括元件值及屬性) 的語言。把 XPath 當成是在 XML 上使用的 SQL 較容易掌握。
  3. XSL – FO (XSL Formatting Object,XSL 格式化物件
    一套專門描述格式試定的 XML… 說穿了其實那是 XHTML 跟 CSS 合在一起,再刪減某些和格式無關的部份。

Sites Near me @ Google Maps

終於踏出了利用 Google Maps + Blogcasting 的第一部!本想在之前的文章更新再寫,不過有很多要說,結果又開了新文章。
網址在此:http://mk-notes.com/sitesnearme.php

這段 script 會透過 geourl.org 尋找在你網誌方圓 70 公里範圍內的所有網站標在衛星圖片上,而網址預設是我的 (http://mk.netgenes.org),但可加進 url 這個 variable 變成你的(你要在 geourl.org 登記你的網站才成)。就如 http://mk-notes.com/sitesnearme.php?url=http%3A%2F%2Ffoobar.com (以 foobar.com 為中心)。由於 Google Maps API 不允許其他網址在 url 上出現,先要把冒號翻成 %3A,slash 翻成 %2F 才可以騙過 Google,讓網頁找到你的家。

(以下為技術文章)
麻煩死了,初想簡簡單單用一段 fetch XML script 把 geourl.org 的rdf 扯到我的 server 裏去,不過發現裏面太多我不想要的東西,用 javascript 讀起來會很麻煩,便試試用 PHP 把那段 rdf transform 一次 (對,我不懂 XSLT,又懶學)。試著用 xml_parser(),不知為甚麼內容統統不見。dom_xml 更奇怪,居然連續抱怨一空白行上不存在的 variable!後來想起伺服器支援 PHP 5,便索性用 simpleXML,簡單方便的寫完!只是在處理命名空間上有點麻煩,不過相對 xml_parser 及 dom_xml 那只是個小問題。

至於 javascript 嘛,不太難。Google Maps API 也頗實用,只是官網上的文件有錯處,害我撞進死胡同 (其實是設定為衛星圖片的常數多了一個 ‘G’ 開頭)。

Update:
剛弄了套較美觀的介面,除此之外還有給放到網頁上的版本。