TWPUG問答 - 按了重新整理後又新增一筆相同資料?

當使用者按下瀏覽器的「重新整理」按鈕後,又再次新增一筆相同的資料,要如何避免這種情形? Taiwan PHP User Group所見問題

使用者按「重新整理」時,瀏覽器會再次送出表單資料 (現在的瀏覽器應該都會警告使用者將再次送出)。說白了,這等於問使用者是不是要再新增一筆同樣的資料。

解決方式不難,處理表單的 PHP 程式輸出一個要求瀏覽器重導向到檢視頁面的動作即可,「重導向」動作就是引導瀏覽器轉向其他頁面。當頁面重導向後,瀏覽器就不會於重整時再次送出表單。

例如使用者於 input.php 填入表單,表單送交 save.php 處理, save.php 處理之後引導瀏覽器至 list.php 。根據 HTTP 協定,引導瀏覽器轉向新網頁的導向動作為 header('Location: 新網頁之URL');。See also: header()

在 GoogleCode 建立軟體專案的第一步

Google Code 是一項開放源碼專案管理服務平台 - Google Code Home,它採用 Subversion 作為版本控制系統(See also: Programming with Subversion Quickstart)。想申請建立專案非常容易,只要到 Prject Hosting 中填好申請表格即可建立專案。唯一限制是軟體授權證一定要採用 Google Code 提供的開放源碼授權證 (如 GPL, Apache License, New BSD License)。必須先登入 Gmail 帳號之後,才會出現 Create a new project 的申請表連結。提醒事項:

PHP 實踐 mix-in 概念 part 2 - MixableClass

第一部份《PHP 實踐 mix-in 概念之可行性》一文中解釋了 PHP 的個體如何加入新的方法。但那僅針對個體而非類別,那些混成內容無法繼承再用。而 Ruby 的混成(mix-in)概念是針對類別,其混成結果是一個類別,這些混成內容可經繼承機制再用。所以我接下來就要為 PHP 實踐一個可以混成的類別 - MixableClass

我的設計目標有二。第一、個體可以動態增刪方法,且不影嚮其他個體。第二、以抽象化方法混成新的類別。

自由時報對經濟學人去蔣化報導的阿Q評論

權威性期刊《Economist (經濟學人)》日前刊登「Cultural revolution - The fight over a dictator's legacy」一文評論台灣的中正紀念堂處理爭議。自由時報不負我所期待,寫了篇很阿Q 的回應評論「經濟學人去蔣化報導 統派媒體硬拗為文革」。自由時報的政治版一向很阿Q ,這一篇回應也是如此。我懷疑自由時報的記者根本不了解什麼是「文化大革命」。他所知道的文化大革命,或許只是國民黨過去灌輸的偏差印象。因此,自由時報記者看不出經濟學人以「Cultural revolution」為主標題之用意。

php-SpreadsheetReader

Update: 2007/07/02

A PHP library for read spreadsheet files

PHP library for read data of spreadsheet files. It supports OpenDocument Spreadsheet (.ods), Microsoft Excel 97/2000 (.xls), CSV (.csv), and Text with tab-separated or patterns (.txt).

Use this command to anonymously check out the latest project source code:

 svn checkout http://php-spreadsheetreader.googlecode.com/svn/ php-spreadsheetreader

Current download link: SpreadsheetReader_rev-25.zip

This proejct is hosted in php-spreadsheetreader - Google Code. It is issued on under the GNU Lesser General Public License. For further information click here.

類別繼承、介面宣告與模組混成(mix-in)

在思考 Ruby 模組與混成(mix-in)概念的過程中,勾起了我當初學習 Java 的記憶。C++ 藉由多重繼承達成程式碼再用之目的,也因此衍生了類別鑽石繼承問題。而 Java 出現時,強調它使用單一繼承並結合介面宣告而避免鑽石繼承問題。然而我對介面的使用經驗卻是負面的。

介面只宣告行為的外觀而不牽涉細節,細節在類之中個別實現。舉例而言,如果有兩個不具共同父祖類別的類,假設為 A, B 類,但具有一個共同的行為、一段相同的程式。 C++ 的作法是將此共同行為 - 亦即這一段相同的程式 - 設計為一個類,假設為 C 類,再令 A, B 類多重繼承 C 類;只要 C 類之中沒有任何屬性與 A, B 類之父祖相同,就不會導致鑽石繼承,同時達成程式碼再用之目的。Java 的作法則有兩個方式,其一是介面,其二是深度繼承。

法學中的事實與罪行

Tags: 法學

對未曾接觸法學內容的人而言,通常不理解也不需要區分事實與罪行之差別。因為多數時候只需要知道結果為有罪或無罪就夠了。然而一但開始進行探討,隨著討論內容之深入,其間差異就會漸漸明顯而重要。譬喻而言:距我一公里以外的兩件物體,就算長度差了10公分,我也覺得一樣長;但若那兩物體就在我面前,我就覺得差很多。

為什麼發生了看似同樣的事,有的是罪行、非法行為,有的卻合法呢?此為法學基本課題。

以動態網頁方式排序網頁的表格內容

Tags: javascript ajax

前一陣子根據老闆要求,寫了一個重點商品銷售統計報表的程式,每天統計各門市到昨天為止的重點商品銷售統計,將結果輸出到網頁讓每個門市都可以瀏覽查看。這程式運作了一段時間後,老闆覺得還不錯,就要我改成暢銷商品銷售統計,納入上千項商品為暢銷商品。因為上千項商品的報表很長,老闆就要我加上排序功能。

要排序當然OK啊。只是我很懶,不想為了視覺效果去修改統計程式,更不想為了更新排序結果而要伺服端再回傳一次頁面。於是我打算以動態網頁的方式,直接用 JavaScript 對網頁上的統計表格排序。

甲方、end-user 與需求落差

Tags: 軟體工程

Alex Yin 在《請使用者也參與軟體專案, CMMI-ACQ》中回應:「正確而言並不適合將使用者與甲方畫下等號。現有的軟體工程在IEEE-STD-12207的Acquisition Process就是敘述甲方(軍備局)的activity。」純粹從 PM 的角度來看,確實在發出採購案前,甲方內部應先進行一套評估流程。但甲方內部流程並非我關注之事。我是一個 programmer ,所以我關心的是已進行採購且軟體專案開始實施的狀況,而且基於 Agile methods 強調使用者參與的精神,我更注重使用者在軟體開發的活動中扮演了什麼角色?

後設認知(Metacognition)非人類獨有能力

科學界過去認為,只有人類和其他靈長類才會了解自己的能力與不足之處,亦即具有所謂「後設認知」的複雜思考能力。……
老鼠似乎有能力判斷自己是否擁有做出正確回答所需的資訊。
老鼠有自知之明? - 聯合報中華民國九十六年3月11日A12版訊

《老子》有云「知人者智,自知者明」。「自知」是一種複雜的思考能力,此類能力在心理學界屬於「後設認知(Metacognition)」之研究課題。人們過去認為只有人類才具有自知能力。但近來研究證明許多靈長類動物同樣具有後設認知能力。最近一篇研究指出,老鼠似乎也具有自知能力。後設認知可能並非靈長類動物所獨有之天賦。

Google資訊搜尋服務,著作權爭議纏身

Tags: 著作權

Google 的搜尋服務幫助人們在廣大的網路資訊找到需要的資料,然而隨著搜尋內容之深度與廣度增加,這些服務內容也惹上愈來愈多的著作權爭議。

新聞來源: CNET

正名政策 part 2, 那些中國人怎麼看台灣正名

有些人老是在說正名是為了加強台灣意識、強化台灣主體性。但名字這東西不是自己喊爽就夠了,也要別人肯用。走到台灣以外的世界,看外面那些人怎麼看正名吧。

那些中國人的態度最奇妙,從一開始斥責,到後來光明正大搭起便車,乘台灣正名之勢,順理成章地吃起豆腐來了。

馬英九因特別費被起訴隔天,在新聞中看到中華人民共和國的人民網報導馬英九宣佈參與「台灣領導人」選舉。我這時才驚覺,原來中共早就在幫我們「正名」了,於是我們成了「台灣」同胞,連中華民國的總統都要正名叫「台灣領導人」。原來執政當局的「正名」政策是和中共在裡應外和,一搭一唱。

再看這位香港人士怎麼說:《台灣正名 自我矮化》:

內地中央當局最初猛烈批評台灣當局進行法理台獨,近來內地中央找到一個台灣的弱點,已經減少批評正名運動,原因是台灣當局的自我矮化。

基本上,中國所有省級行政區都有一家省級郵政公司。內地郵政部門負責網頁的官員靈機一觸,為台灣正名提供了一個符合國情的理由,就是把已正名機構,收編為省級機構。結果,在《中國郵政》網站主頁的「郵政鍵接」,把剛正名的台灣郵政,和中國各省級郵政公司和港澳兩地區郵政部門一樣,列入省級郵政網站裡。

最後是一位臺灣的學者在海外旅行時之見聞: 《用「正名」來換虛名》,作者文中談到了「認同」問題,也點出了當前「台灣主體性」運動的狹窄視野。

以 replace 修正整批記錄的錯字

今天修正了公司客戶資料庫中的電話資料。主要是將中間的連接線 (-) 拿掉,這是人工輸入的,但實際上根本用不著。不是很難的動作,用 replace() 就搞得定。

比較麻煩的是電話有二組,但有不少資料記錄漏掉第一組電話。起因於門市人員在建檔時,常常把第一組電話當市話號碼欄位、第二組電話當手機號碼欄位。當碰到客戶只填手機而不填家中電話時,就會空下第一組電話欄位。因為資料庫系統以第一組電話欄位為主要電話,所以這會帶來些麻煩。例如,在列印單據時,如果單據只顯示一個電話時,資料庫系統只會取紀錄中的第一組電話欄位。如此一來就有不少單據上沒有顯示客戶電話。所以這次也順便把那些沒有第一組電話欄位的紀錄一起補上 (以第二組電話補上) ,這就要用 CASE 敘述了。

UPDATE customer
SET
	tel1 = REPLACE(CASE WHEN tel1 IS NULL THEN tel2 ELSE tel1 END, '-', '')
	tel2 = REPLACE(tel2, '-', ''),

PHP 實踐 mix-in 概念之可行性

最近在學習 Ruby 的過程中,接觸到'Mix-in' (混成) 這個新名詞。雖然是個新名詞,但其概念嚴格說來並非 Ruby 所獨有。

Mix-in (混成) 之基本概念在令行為抽象化,使其與特定類別或實例無關。我們再將這些抽象行為組成新的類別或個體。早期的模組化編程概念,其實就已經建立了這種概念, Ruby 則是聰明而有效結合模組與類別,增加許多設計彈性。

PHP 臭蟲月開跑,快去查看自己的 PHP 程式是否有漏洞

Tags: php 資訊安全

由 PHP 資安團隊 Hardened-PHP Project 支持的 month of PHP Bugs 開始了,不到一週已經公布了十筆以上的 PHP 安全漏洞。 PHP 的使用者快去查看自己的 PHP 程式是有否漏洞。

我大略看了一下,去掉那些罕用功能之漏洞,到目前為止有不少一般性的安全漏洞集中在 PHP4 。想想目前多數虛擬主機供應商仍只提供 PHP4 服務,真要為其中運作的 PHP 網站系統之安全性捏一把冷汗。

有兩個結構性的 crash bug: PHP Executor Deep Recursion Stack OverflowPHP Variable Destructor Deep Recursion Stack Overflow。前者是遞迴深度、後者是巢狀陣列深度,這兩個安全漏洞與函數調用層數過深導致堆疊溢位有關。這是 PHP 解譯器的結構性問題 (其實每種程式語言都會有這類問題與相應限制) ,照 month of PHP Bugs 中透露的消息來看,短時間內 PHP 開發團隊還不會做出相關修正。