在進行任何程式的設計工作之前,我們必定已經知道程式的輸出入結果,亦即我們已經確知當使用者輸入什麼資料後,程式應該輸出什麼結果。更進一步說,我們已經知道使用者將如何使用這個程式,諸如使用者在操作過程中會做什麼事,而程式對操作內容應該如何回應等等。這段理所當然到近乎廢話的敘述,卻是所有軟體設計人員惡夢的開始,也是所有軟體工程實踐作法的起點。在 eXtreme Programming 中,我們稱這些內容為「故事 (story)」;在 RUP 中稱之為「使用案例 (use case)」;在 Microsoft Solution Framework 中稱之為「情節 (scenarios)」。我個人偏好使用「故事」一詞,因為它不像術語。既然故事是設計人員惡夢的開始、設計工作的起點,那麼就先說一個故事。
欲建立一個運動會報名表單,一位選手可報名參加一個以上的項目 (如100公尺、200公尺等) ,資料庫表格應如何設定?
我們通常不會在一個選手表格中建立多個比賽項目的關聯欄位,像 game1, game2, game3 這種欄位設置就不太適當。第一、如果多數選手只參與一個項目,則剩下的 game2, game3, etc. 欄位就閒置了,佔用磁碟空間。第二、限定了可參加比賽項目數的上限,如果我只定義到 game3 ,則一位選手最多只能參加 3 個比賽項目。第三、只能用複雜且僵化的查詢語句,例如 SELECT * FROM "Players"
INNER JOIN "Games" ON "Games".id = "Players".game1 OR "Games".id = "Players".game2 OR "Games".id = "Players".game3;
,欄位愈多則 OR
條件 串的愈長。當然,如果程式需求限定每位選手至少參加一個項目,最多參加 2 個,那麼用這種方法倒也無妨。
php_syntax
HTML 表單傳送給 PHP 的資料, PHP 會自動儲存在全域陣列中,例如以 POST method 送出的表單資料便儲存在 $_POST
全域陣列,以 GET method 送出的表單資料儲存在 $_GET
全域陣列。如果我們為表單元件命名 (指派了 name
屬性) ,則可以表單元件名稱為陣列鍵值。例如表單有一個名稱為 "userAddress" 的文字輸入欄位 <input name="userAddress" type="text"/>
,且此表單以 POST method 送出,則 PHP 中可以 $_POST['userAddress']
取得使用者在此欄位中輸入的資料。上述是 PHP 處理表單資料的基本概念。
前幾天看到《等待新漢碼》的內容,個人心中感慨萬千。
聯合報日前報導權威學術期刊《Science》刊載我國中興大學生化所教授張邦彥投稿到《Cell》期刊的論文涉嫌造假。聯合報,民國九十五年12月21日A7版訊 讀者質疑論文中的數據圖片是經變造過的。張教授事後也承認圖片製作時有所疏失,學生直接編輯原始圖檔導致圖片有編修痕跡。
事件發展如何,尚有待觀察,但這事件只是冰山一角罷了。雖然這個事件是自然科學的研究論文,但國內的社會科學研究中,其實也少不了這類故事。
前幾天晚上我發了一篇文章在部落格上,當時我用 Firefox 觀看很正常。隔天我在公司用 IE6 觀看那篇文章時, IE6 意外出現「MSHTML.DLL 執行錯誤,瀏覽器即將關閉」的錯誤訊息。後來我試了許多電腦,無一倖免, IE6 都會當掉。
在《NV社: 萬物的尺度》一文中介紹了《萬物的尺度》這本書。從書中可以看出,仍然有些科學家未能區分客觀尺度與主觀感覺的差別。主觀性概念不可能界定出客觀尺度。所謂...共同貨幣歐元,就是公制的直接繼承人。近來似乎價格終於成為萬物的尺度了
。,認為價格具有客觀性更是經濟學中因為方法論錯誤而產生的錯誤見解。
所謂 "有餘與不足" ,是以 "所欲" 分,不以 "量" 分。欲不滿者,金盈堂室猶不足;欲寡者,食僅簞瓢或有餘。是以,我們絕不能以客觀上、物理上的尺度量值去區分 "有餘" 與 "不足"
「天之道損有餘而補不足」在經濟思想上的誤解
將不具客觀性的價格視為客觀尺度,反而形成了橫徵暴斂的人為惡行。部份科學家忽視了天地萬物每個個體的差異性,也忘了人只能透過感覺器官接收外部資訊,而感覺器官是不靈敏且不準確的先天限制。該書作者的總結反而更接近真實:...無關個人的度量也是人類幻想、人類熱情,以及在特殊地區挑選特殊人物等的產物。所以追根究底,古希臘哲學家羅塔哥拉斯的那句名言果真沒錯:『人是萬物的尺度。』
。
php_syntax
PHP 的比較算符中 (Comparison Operators) 提供了兩種相等算符,一為 Equal 算符(==
),另一為 Identical 算符 (===
)。這兩種算符是因應 PHP 的型態彈性 (或稱動態型) 而設置,其差異在於 Equal 算符會自動轉換兩側變數的型態,而 Identical 算符不會轉換型態,因此 Identical 算符要求值以及型態皆相等才為 True
。
我前幾天發現 blog 邊欄訂閱的 RSS 欄位的內容沒有顯示出來,追蹤了一會兒,發現是 blog 系統在輸出 RSS 內容時,沒有處理換行字元,令 JavaScript 碰到非預期的敘述斷行導致執行失敗。追蹤過程中,我順手寫了一個 PHP 程式測試這個狀況。後來我把這程式擴充一下,改寫成一個簡單的 RSS 閱讀器。
這個 PHP 程式,使用 SimpleXML functions 處理 RSS 文件,並且實踐了一個非常簡單的 MVC 架構。
看到《C 的 marco》中例舉的 C Macro ,讓我有憶起舊日時光的感觸。當初覺得 Macro (in Assembly and C) 很有趣,但和最近興起的動態語言比起來, Macro 似乎只剩下讓 programmer 少打些字的功能。再者, Macro 的內容沒什麼規範,換個 C compiler 可能就不能用了。雖然我也是 gcc 使用者的,但這類特殊功能我想還是能免則免。
在符合 ANSI C99 規範的 C compiler 之中,用 inline function 可保有 Macro 的優點,而沒有 Macro 的缺點。An Inline Function is As Fast As a Macro
。Also see: Explain Inline Function in C (GCC compiler)。所以現在大多用 inline function 而不用 macro 了。
公司一直想在網路購物上創造利潤,擴大營業額。然而公司內部一直沒有賦予網路購物業務清晰的角色定位,再者公司高層一心只想看到「營業額」,始終沒有正視「電子商務」的功能與重要性。
從 PHP4 到 PHP5 , PHP 不只改善了個體 (object) 的成員保護程度,也引入了 PHP 稱為「magic methods」的特殊行為。 Magic methods 提昇了 PHP 的動態性,活用 magic methods 可以大幅減少程式碼中類似的重覆行為,並為 programmer 帶來更開放與直觀的程式撰寫彈性。
今天,我妹妹拿著一道今年高普考的考古題問我為什麼答案是 70 ,然而那題目還真是考倒我了。題目內容如下:
假設檳榔的需求函數是 Q=50-5P , Q 與 P 分別代表檳榔的數量與價格。目前檳榔的價格是 2 。假設政府擬限制檳榔的生產,一旦檳榔的供給減少,價格將上漲至 4 ,則檳榔消費者願意付多少代價,阻止政府實施管制?
今天在逛部落格時,無意中看到一個熟悉的字眼,那就是「興奇科技」。「興奇科技」是「Yahoo!奇摩購物中心」的平台業者。「Yahoo!奇摩購物通」則是另外一間,別弄混了。這字眼之所以引我注意,則是工作業務有相關。