修復首頁

因為沒有想到 WordPress 會自行幫我的文章加油添醋,所以原本放在首頁的一些 html 原始碼都在斷行處添加了 <p> 或是 <br> ,導致首頁顯示到一半就出現問題。當初為了告知大家不要用 IE6 就添加了這段程式碼,結果在上次更新 Uniform Renamer 的文章時 WordPress 就自行改壞了首頁,實在是悲劇。看來得想辦法關閉那些 WP 自認為貼心的竄改文章功能,並且把 editor 從 TinyMCE 換到 WYISWYM 編輯器了。

不過過了兩三個月還沒有人說,果然這裡還是很冷……

初級資料庫設計

這裡的內容來自我的老師 David White 的課以及他的書 Data Modelling The Foundation of Information Systems。目前沒有附 ERD 圖,所以可能有些地方不是很容易懂。

命名

當命名物件跟屬性時需符合以下規則:

  • 使用單數詞作名字,不用複數詞。這樣子能更容易自動產生正確的描述句(程式可以自動判斷把單數詞改為複數詞)。
  • 只使用一種命名規則(CamelCase 或者 Underscore_Naming),不要混用。
  • 名字要能描述功能,比如說一個紀錄元件安裝時間的欄位該命名為 WhenComponentInstalled 而不只是 WhenInstalled ,不然在範圍外會跟其他要安裝的欄位造成混淆。試著讓文法正確。
  • 當使用某些通用的詞(如 description),應該在詞前面添加形容詞(如 ProductDescription)

當命名屬性時需符合以下規則:

  • 人名欄位的命名使用 GivenName(名)與 FamilyName(姓),這兩個命名沒有文化隔閡,也沒有宗教或禮俗上的含意。使用一般常見的 FirstName 或 LastName 則會導致不同文化上的理解錯誤。
    (註:也可考慮提供使用者另外一個欄位,專門存放使用者自己想要看到的姓名)
  • 多添加形容詞以避免混淆。但是在那些 Foreign Key 的欄位,還是該前置該 Key 原來的名字,以便識別。
  • 不要使用像是 "Count" 這樣的 SQL 保留字來命名,因為資料庫不能接受這些名字。
  • 非必要不要用 "Date" 來命名。資料庫系統有 date/time 類型的欄位,而原本設計是 Date 的欄位常會後來要改成 date/time 。使用 WhenXxxYyy 來命名 date/time 欄位,比如說 WhenEnrolled、WhenContractStarts、WhenContractEnds。

常見的命名問題

  • 使用複數詞作名字
  • 沒有依照大眾普遍接受的方式縮寫
  • 英文大小寫方式不一致
  • 英文動詞時態不一致,如 WhenXxxBegan 相對於 WhenXxxEnds。
  • 名字不夠清楚,如 WhenInstalled 沒有標示安裝什麼東西。
  • 使用太過廣義的詞,如 Description 。
  • 名字欄位使用 LastName、ChristianName 等有文化差異性的命名法。
  • Foreign Key 的命名沒有前置原表的名字。比如說 Customer 應該改為 AnybodyCustomer ,才能一看就知道這欄位由 Anybody 這個 table 而來。

表格 table 設計

表格應該代表一個物件不會改變的本質,而不是會改變的狀態。舉例來說,一個學校管理資料庫常常會有學生 Student 與職員 Employee 兩個表格,但是這樣子的設計沒有考量到職員也能來修課當學生的狀況,學生與職員都是一種可變動的身份,所以不應該拿來當作表格名稱。在這個情況使用「人 Person」當作表格的設計會更有彈性,因為「人」是本質,不會隨著時間改變。而會改變的狀態,通常使用一個欄位來表示。

繼承與類別

「人」這個概念也有狹義的時候,比如說交易時對象不一定會是人,有時候也是會有公司機關之類的,所以在民法上有「自然人」以及「法人」這兩種概念。在這個時候,使用「Anybody 主體」這個母類別表格,然後下面繼承「Person自然人」「Organization法人」兩種子類別表格,能夠做出更加有彈性的架構。當使用繼承這種機制的時候,要注意幾個事項:

  1. 子類別必須是永久性的,就如自然人永遠不會變成法人。
  2. 子類別必須是母類別之內的,如 Person 跟 Organization 都是 Anybody。
  3. 各個子類別的欄位不能完全相同,不然就失去分開類別的意義了。
  4. 各個子類別必須有本質上的不同,如自然人是活著的,而法人是概念上的,雖然兩者都能成為簽署合約。

相同的繼承概念也能夠使用在「交通工具→汽車、飛機」上。

時間概念

萬事都會隨著時間而改變,而資料庫最好是設計成會紀錄這些改變,以便將來能查訊。通常一個事件有開頭也有結尾,以 WhenBegan 還有 WhenEnded 來命名。WhenEnded不會是主鍵,因為主鍵不能為 null。

對自身的關聯 Recursive Association

一個表格可以對本身作關聯,比如說管理人這種關係。如果每個人只能有一個管理人,那麼可以直接對表格本身的 PK 作關聯,這被稱為樹狀自身關聯(Tree Recursion)。如果一個人能有複數的管理人,那就必須新增一個 Supervision (管理)表格,有兩個 FK :PersonBeingSupervised 以及 PersonSupervisor ,這被稱為網路自身關聯(Network Recursion)。

狀態

如先前所探討的,事物除了能用不變的本質來區分外,也能用他們的行為或是發生在他們的事情等等依著時間發生的「狀態」來區分。就如同犯罪的人可被歸類為罪犯,簽了員工合約的人成為員工,繳了學費的成為學生。這些被視為狀態的改變,而要對這些狀態作區分就必須紀錄狀態改變的事件。

舉學生報名作為例子,也許我們必須紀錄以下的事件:遞交日、審核日、核可日、取消日等等。如果這些都放在 StudentEnroll 的表格上,那麼以後要增加新的狀態就必須更改整個 ERD 。為了改善這種問題,我們可以把事件集中放在另一個表格中,並且新增一個事件類別的表格。這樣子能讓狀態轉移事件有更大的彈性。

Mozilla 徵求嶄新的使用者留言概念

Mozilla Drumbeat | Beyond Comment Threads

Mozilla 基金會最近舉辦網路上公開徵選活動,徵求創新的未來網路新聞概念。這幾個禮拜進入第二個議題:嶄新的使用者留言概念,讓未來的網路新聞的使用者留言能夠更加進化。只要有任何奇特的想法、原型、影片等等都能上傳。而且議題也不限定於科技面,對於社群互動面也是很重要的考慮因素(比如說過濾沒有價值的留言,或者讓少數人的聲音能夠不被多數人掩蓋掉)。甚至只要有新的方法能夠讓使用者與新聞內容互動都可以提出來。

有沒有人有興趣一起想想有什麼好點子,截止日期是5月22日,我可以幫忙翻譯。

Ruby 的 Method, lambda, Proc 跟 block

中文翻譯 所屬類別 意義 宣告例子 呼叫法 return的效果 參數數量檢查
Method 方法 Method 有名字的 Method def square(n)
n ** 2
end
method(:square) call 裡面的 return 不會造成上層的方法 return
(diminutive returns)
有,數量不同會出現 error
lambda Method 無名字的 Method
square = lambda { |n| n ** 2 }
call 裡面的 return 不會造成上層的方法 return
(diminutive returns)
有,數量不同會出現 error
Proc 程序片段 Proc 有名字的 Proc
在很多地方時重複呼叫用
square = Proc.new do |n|
  n ** 2
end
call
裡面的 return 會造成上層的方法 return
(因為return成為上層類別的一部分)
block Proc 無名字的 Proc
只在一個地方時用
{|n|
 n ** 2
}
yield
用 Proc 的 call 呼叫法
裡面的 return 會造成上層的方法 return
(因為return成為上層類別的一部分)

Toolbox Blue: A WordPress Child Theme with HTML5

Toolbox Blue 是一個 WordPress 的佈景主題,是個延伸自 Toolbox 的子佈景主題,有著 HTML5 的元素以及 Fluid Blue 的外觀。

Fluid Blue 採用簡單色塊式的佈景風格,沒有使用圖片作裝飾,給予閱讀者極簡的清爽感覺。不過我一直想要使用最新的 HTML5 標籤如 <article> 或是 <nav>,所以決定拿 Toolbox 佈景主題來作改造。因為個人經驗有限,所以寫出來的 CSS 其實亂七八糟的。有些 Fluid Blue 的效果作不出來,有些地方也作了個人喜歡的修改,所以不會 100% 跟 Fluid Blue 一樣,敬請包涵。因為兩個參考的主題都是採用 GPL 授權,所以本佈景主題當然也是如此。想安裝的人請先安裝 Toolbox 主題後再到 Bitbucket 的專頁下載,因為目前的品質很爛所以還不打算放在 WordPress.org 上。目前的 bug 有 menu 位置會往右偏,如果有人知道怎樣修正就敬請指教。

Toolbox Blue is a child theme of the Toolbox theme, which offers HTML5 ready templates. It tries to mimic the Fluid Blue theme, but with some personal design changes. The code is located at Bitbucket
and installing it requires installing the Toolbox theme. The quality of the code is crap so I don’t want to put it on the official repository yet, but any improvement is welcome. Current known bug includes menu item not in the correct position.

線上日式文字冒險遊戲平台

在歐美國家,雖然宅人口不比日本,但是宅人達力卻也跟日本不分軒輊,Ren’Py 這個開發已久的 AVG 引擎就是歐美人士開發的。它的製作人最近在網路上寫了篇有關於可下載 vs 網路遊玩的遊戲的文章,讀了以後才發現,最近因為 AJAX 技術的進步,所以歐美出現了好多新的日式文字冒險遊戲網路平台。在這些平台上,無論是創作者要撰寫故事,或者玩家要體驗遊戲,都是透過網頁遊覽器來完成。

BASS AVG 遊戲製作平台 vNovel Interactive NovelStream Datesim.org
創作者費用 免費(需用遊戲貨幣BM才能發表) 目前為展示用 免費遊戲免費
付費遊戲收取作品的 30% 收入
站方免費幫創作者移植既有的遊戲。
玩家費用 免費 免費 免費遊戲免費
付費遊戲按創作者規定收取費用
免費遊戲每個 0.5 美元,
積極參與該站的活動可免費遊玩。
編輯 採文字檔腳本方式編輯 目前為展示用 採用直覺式所見即所得的視覺方式編輯 無編輯環境,由站方移植遊戲
語音 支援 支援
存檔 自動讀取上次進度 支援 支援

將網頁作為遊戲的平台有許多好處,比如說:

  1. 有收費機制的平台可以有效阻礙盜版。
  2. 多人編輯與合作可透過網路完成,減少難度。
  3. 因為只需要上網就能玩,再一步縮短與一般大眾的距離,增加淺在客群。

不過 Ren’Py 的製作人認為,網路遊戲平台的缺點也不少:

  1. 無法下載所以無法備份,要是平台垮了,那麼這些創作就從此消失。
  2. 除非平台很佛心有開放原始碼,不然在未來,也不能經由模擬器等方式讓遊戲能繼續可玩。

不過這些問題也是有些解決之道,比如說開放讓創作者下載備份檔,以及額外開發備份檔的單機播放程式。不過就算是解決了這些問題,最主要的還是在於玩家們的意願。有個創作者 Ayu 舉辦了一個網路投票,結果是絕大多數的人還是比較喜歡能下載的單機板遊戲。也許是因為有個可以保存的實體才讓我們有值得花錢的感覺吧。

在我看來,NovelStream 是裡面最成熟的一個平台,不但外觀好看又專業,而且腳本編輯器也比一般的 AVG 引擎還要友善好多,更別說是許多其他的功能(遊戲腳本版本控制、語音與讀檔功能、友善的討論社群環境)。而 vNovel Interactive 雖然目前只是展示用,但是其遊戲體驗也因流暢的圖片轉換還有語音給我很大的好感。

BASS則是讓我有些遺憾,因為這個平台算是最早出現的(三年前就有了),而且還是台灣人開發的,可惜介面沒有繼續發展,而使用客群也沒有複雜化。

這些平台都不是日本人開發的,也許網路這一塊還是日本海外發展的比較蓬勃。我比較推薦的兩個遊戲,一款是 Narcissu ,是幾年前有名的免費同人電子小說。第二個則是 Ripples,一款英文同人團體製作並配音的電子小說。兩者的完成度都很高,效果也不輸給 Flash。也許這些平台真的是未來同人遊戲的一種可能性。