2009年7月30日

基礎數學觀念-1: 數學歸納法的證明及應用 (The proof of The Principle of Mathematical Induction)

相信高中的時候大家都學過數學歸納法The Principle of Mathematical Induction),但我一直不知道數學歸納法這個定理本身也是需要證明的!(事實上在數學中除了公設以外,所有的定理都需要證明)

這個證明使用的是反證法(proof by contradiction),以及引理(Lemma)這個以前沒注意過的概念,推導的過程需要相當的邏輯能力,蠻精采的,因此趁機整理一下。

由於數學歸納法適用的問題是自然數命題,因此需要對自然數的基本性質有一定的了解,這部份的補充說明請參考中原大學數學系董世平教授所寫的數學歸納法一文中關於「皮阿諾公設」的說明。

在了解了自然數的基本性質以後,接下來看一下數學歸納法的證明過程(字蠻小的,可能需要另開視窗):
The Proof Of Mathematical Induction
(此證明在研究所考試中曾經考過:91交大資科, 93中原資工)

反證法真的很有趣,比起一般的數學推導(化繁為簡、化簡為繁),欲使用反證法需要有很強的邏輯觀念,最普遍的應用是證明存在性無限多等無法明確描述的觀念有關的問題,例如:證明正整數中有無限多個質數。因為這個命題是「無限多」,因此無法直接將所有質數表列出來證明(根本表列不完),要驗證此命題是否正確,就必須先假設質數是有限個(故意假設錯誤),再推導出矛盾的結果,進而反證此命題為真。

(存在性問題也是類似的概念,因為沒辦法直接證明「不存在」,因此必須先假設存在,再導出矛盾的結果,進而反證確實不存在)

數學歸納法的應用除了證明一次方連加、二次方連加、三次方連加等公式以外,在 Wikipedia 上面還可以看到應用在 computer science, graph theory 中的變形(稱作 Structural induction (中文)),這部份我還沒學到,所以先略過不談 XD

數學歸納法在使用上要特別小心,若邏輯觀念不夠清楚,使用時可能會產生以下的錯誤,進而推導出奇怪的謬論--利用數學歸納法證明飯永遠吃不飽(原文請參考國立中央大學教學網):
飯永遠吃不飽

先想想看這個顯然是胡扯的證明到底錯在哪裡?好好思考之後再看一下解答,對於建立邏輯觀念有很大的幫助。(更多的數學歸納法使用錯誤範例請參考:大葉大學通訊與計算機工程學系的許介彥教授的數學歸納法使用上易犯的錯誤一文)

另一個更深入的應用是「如何找出劣幣」(原文請參考台大數學系蔡聰明教授的如何找出劣幣-簡介訊息與熵的概念一文),這跟最近唸資料結構/演算法時碰到的 Decision tree 也有關連,由於我沒辦法解釋的比蔡教授更清楚,所以這邊也略過不談 :p

數學歸納法的部份就先整理到這邊,下一篇預計整理的是「整數和偶數的個數相同」的相關問題。

2009年7月22日

Living 3.0 智慧化居住空間展示中心參觀心得

前陣子去參觀 Living 3.0 智慧化居住空間展示中心(以下簡稱「展示中心」),這是由內政部建築研究所主辦,財團法人台灣建築中心承辦的一個展示中心,在捷運萬隆站附近(交通資訊),是一棟蠻大的獨立建築物,蠻好找的。展示中心採取導覽介紹制,因此要去參觀前必須到官網上去做線上預約,也可以預約英文導覽。

當天負責導覽的解說員很專業,參觀完了以後的確有感受到政府要利用「現有機電、電子、材料、資訊、通訊、自動化及控制產業與技術優勢,掌握智慧化居住生活科技發展趨勢與機會」的企圖心。

什麼是 Living 3.0


這是內政部建築研究所自己定義的 term(國際上沒有這樣的講法),其所要表達的是「智慧化/科技化生活」的涵義。以下是 Living 1.0 ~ 3.0 的比較:
  • Living 1.0(史前時代到工業革命前)
    在這個階段,人類透過固定或半固定的居所(shelter)來提高生命安全的保障,以避免惡劣的天候或野生動物危害到生命安全。
  • Living 2.0(工業革命後到資訊革命前)
    在 Living 1.0 時代發展出來的 shelter 保護下,人類終於進步到發明各式各樣的機器來協助處理各種繁重的工作(e.g. 長途運輸、搬運重物),而後進一步將機器的 size 縮小,小到可以被用來提昇生活品質的程度(e.g. 熱水器、冷氣機、瓦斯爐)。
  • Living 3.0(資訊革命後到現在)
    到了 1980 年代電腦技術不斷飛快進步之後,資訊科技已經大幅改變人們的生活,透過各種嵌入式系統的發展,生活中的用品漸漸的愈來愈具有「智慧」,配合越來越成熟的網路、通訊科技,讓人類的日常生活開始邁入一個新的時代。
根據解說員的解釋,遠雄二代宅介於 Living 2.0 與 Living 3.0 中間(遠雄的官網上沒有另闢專區介紹這個概念…),因為成本的考量,只有導入一部分的新科技,但由於從設計開始就納入了新的思維,因此從綠建材、系統整合等個面向來看都比傳統的 Living 2.0 住宅進步很多。

而展示中心由於是政府的示範專案,因此可以全面、大量的採用目前的成熟科技來打造(也就是說展示中心內的各種設備都是市場上買的到的,當然有些會非常貴),由於整合了 60 幾家廠商的設備,因此成本會比遠雄二代宅高很多。

那麼展示中心內究竟整合了哪些新穎的設備呢?從官網上的展示中心設備索引就可以先大概瀏覽一下,其中分為廠商別、展場別和種類別,對於沒有參觀過的人而言,建議從設備的種類別進去瀏覽,比較容易找到自己有興趣的主題,另外官網有提供 VR 導覽

我有興趣的系統
  • 太陽光集光導引系統
    「透過高性能集光能將太陽光濃縮一萬倍,再將大口徑的光纖入口端對準集光透鏡的焦點。」這個裝置神奇的地方在於,投射出來的光線不是像聚光燈一樣,而是像自然光一樣的散射,總覺得人類離艾西莫夫大師的「鋼穴」小說裡面那個終年不見天日的世界又邁進了一小步(誤)。
  • 數位互動茶几
    「數位互動茶几」是一結合「多點觸控 (multi-touch)」及「影像標籤辨識 (tag-recognition and identification)」技術的產品雛型。當使用者將『個人化茶杯』置於茶几上,茶几面會浮現預先設定的對應虛擬資訊,包括照片、影片,或音樂等形式,並能跟隨茶杯而移動。這是台灣廠商的產品,使用的技術跟 Microsoft Surface 不太一樣,主要是靠紅外線熱感應,但是背後的理念差不多,利用茶几這個客廳的中心擺設來進行各種數位化的互動。
  • 智慧家庭控制系統
    「在住家內可以任意走動去遙控各角落的家電、照明、電器、窗簾...等設備,穿透樓厝隔間。出門在外可以經由手機、PDA、電腦在遠端看到哪控制到哪。可以把軟體安裝在手機上當作搖控器的個人化數位住宅。不用費心為了控制家電、電燈而拉一堆線,不需擔心為了智慧化把裝潢弄得醜醜的」這真的太方便啦,房子越大越有需要裝 XD
  • RFID智慧衣櫥
    目前是把 RFID sensor 貼在衣架上,買新衣服回家以後,要手動建檔把衣架跟衣服在系統中對應起來,以後要找衣服時先進系統透過關鍵字/tag搜尋,點選要穿的衣服以後衣架上的小燈就會亮起來,很節省時間!限制是衣服一定要按照在系統中設定的對應放到相對的衣架上。未來展望是在衣服的內層也貼上 RFID 標籤,這樣衣服就可以隨意掛到不同的衣架上了。
  • 智慧化流理台
    「根據人體工學,每一個人身高不同,工作台面高度也跟隨改變.智慧型升降台面完全解決這個問題,工作台面高度 80-94cm隨意可調」幾個月前看到美國有家軟體公司給員工用的辦公桌就是這種可以隨意升降的,感覺非常的優。
其他心得


智慧化概念當然很好,不但能增進生活品質,還可以節能(省錢!)、降低對環境的衝擊,但建商未來還要花很多心力去推廣,政府則是要透過立法來推動相關產業的進步(e.g. 綠建築)。

另外一個跟智慧化居住空間有些關係的資訊來源是 IBM 的 Smarter Planet Blog,這個 blog 關注的是未來都市發展問題,相較於 Living 3.0 展示中心主要 focus 在未來室內環境的發展,Smarter Planet 對於未來的生活可以提供更宏觀的角度,裡面的文章都不錯看。

最後要說,Living 3.0 展示中心給人的整體感覺很不賴!建議大家有空可以去走走,看看 60 幾家廠商的技術整合在一起是什麼感覺,思考一下未來的居家生活會是什麼樣子。(就資訊科技方面可以思考技術如何整合、不同系統如何協同運作、資訊安全等等議題)

後記


關於綠建築這個觀念,最近一期的台北捷運報導(No.257, 2009/7/1)有提到綠建築的概念,因為沒有在網站上找到報導的網頁,所以節錄如下:

綠建築(Green Building)在歐美稱為「生態建築」(Ecological Building)或「永續建築」(Sustainable Building),在日本稱為「環境共生建築」,為地球永續發展環保運動浪潮下建築部分產物,起源於寒帶先進國家。「綠建築」可定義為:在建築生命週期(規劃設計、建材生產、運輸、營建施工、日常使用、維修管理、拆除等各階段過程)中,以最節約能源、最有效利用資源的方式,建造最低環境負荷但能提供最安全、健康、效率及舒適的居住空間,達到人及建築與環境共生共榮、永續發展。也就是消耗最少地球資源建造,使用最少能源,產生最少廢棄物的環保建築物。


行政院於民國85年成立永續發展委員會,將綠建築列為國家施政要項,並將建築節約能源設計規範納入建築技術規則,頒佈「綠建築推動方案」。於88年9月1日正式公告受理「綠建築標章」申請,標章核發需進行綠建築七大指標評估,包括:基地綠化量指標、基地保水指標、日常節能指標、二氧化碳減量指標、廢棄物減量指標、水資源指標及污水垃圾改善指標。[…中略] 從91年起,凡是公共工程造價五千萬元以上,都必須符合綠建築評估七項指標中的兩項以上,取得綠建築候選證書後才可以取得建照(捷運工程屬於特種建築物,免申請建照)。
綠建築就是生態(Ecology)、節能(Energy Saving)、減廢(Waste Reduction)、及健康(Health)的建築,按我國現行綠建築評估等級可分為合格級、銅級、銀級、黃金級及鑽石級等五級。

2009年7月16日

輕鬆使用MS Chart Control - 匯出圖片

雖然在圖片上直接按右鍵就可以另存圖片 (沒設定權限的話
不過客戶還是想要有個按鈕能讓圖片下載
所以坎尼只好再想辦法滿足客戶的需求

UI設定

首先,在畫面上準備好下載按鈕和圖表
順便設定一下樣式和內容,這部分之前講過很多次就不多談了

撰寫按鈕事件

先宣告 System.IO.MemoryStream 物件,用來承接 Chart 的 binary 資料
再利用 Chart.SaveImage 方法將資料流放到 MemoryStream 中
把 Stream 轉為 byte[] 陣列後,再丟到匯出的方法中處理

Chart.SaveImage 儲存方式有兩種:FilePath Stream
但用 FilePath 的方式是儲存在 Server 端,要另外再多做個動作才能讓使用者下載
所以坎尼就選用 Stream 來處理

接著是匯出 byte[] 裡的二進位資料
這邊坎尼是參考董大偉老師的 如何在ASP.NET中下載檔案
另外函式做了點小修改,也可以用來匯出其他二進位的資料流


執行程式,點下載圖片後會直接將圖片匯出

噹噹噹噹噹,圖片就這樣下載到使用者的電腦上啦


此次的範例檔下載

小結

上面有講到明明右鍵就可以下載,但為什麼還要弄個按鈕出來,是要累死工程師嗎?
最近坎尼有看到一篇 Web Design 的文章講的很好
(原文是英文,坎尼大致上翻譯一下意思)
「盡量把操作弄成最愚笨的方式,使用者會比較容易使用」
「但仍要保留給進階使用者進階技巧的使用權利,他們會希望用一組快速鍵達到滑鼠點三次的要求」

所以設計者們,記得有機會就多留點隱藏技巧,令使用者有驚喜的感覺
不過不要留了後門給駭客進出啊 XDDDD

2009年7月10日

輕鬆使用MS Chart Control - 簡單設定圖表外觀

本來坎尼要寫比較進階版的圖表應用
上一篇實在太長了,所以先來篇短文休閒一下

I. 情境

校長打開電腦系統查閱一年級各班平均成績
由於2班有他喜歡的小蘿莉學生-心亞
於是校長進一步點開2班的詳細資料


校長發現心亞的國文不是很好,於是廣播要她放學後留下來...(故事請自己補完)

II. 實作

首先要設定圖表物件及基本樣式,下圖為已設定好之圖表區

要讓圖表呈現3D屬性,需要到 ChartArea 裡設定 Area3DStyle


要讓長條圖變得更好看,則是要打開 Series 的 CustomProperties 做設定
範例裡把 DrawingStyle 設成 Cylinder

要注意的是,CustomProperties 會依圖表類型不同而改變
長條圖、圓餅圖、折線圖的 CustomProperties 屬性大多不相同

下圖為完成後的 Html Code

接著要撰寫 Chart_Click 事件 (其他繫結事件之前談過很多次了,這邊省略)
這邊作了點小處理,讓圓餅圖在點下之後,會呈現分離狀態

圓餅圖的 PostBackValue 為 X 軸值,也就是班級名稱
(不曉得 PostBackValue 的人請先看
這篇)
利用迴圈把已繫結的資料點 (Points) 抓出來和 PostBackValue比對
找出使用者按下的資料點後,將其 CustomProperties 的 Exploded 屬性設為 true

設定 CustomProperties 語法為 Chart.Series[a].Points[b]["屬性名稱"] = "屬性值";
Exploded 為圓餅圖(Pie)甜甜圈圖(Doughnut)專用
目的為讓圖表呈現 pizza 型的切片狀態

接著就是利用 PostBackValue 找出班上的學生
其實用 Gridview 將清單列出也行,本篇是在講 Chart 所以就用長條圖來代替

執行後,大功告成,校長可以手指動一動就輕鬆的看到全校資料了

Chart Control 的屬性很多,有意要學好的人一定要多加練習,熟悉各項設定
MSDN Chart Control 論譠 是個很好的資源取得地,可多加利用

本次的範例檔下載

2009年7月8日

輕鬆使用MS Chart Control - 讓使用者與圖表互動

一般圖表多半只是以靜態的方式呈現
MS Chart Control 既然為 Server Control,當然支援後端事件啦
下面的範例會帶讀者們一步一步的完成 Chart 屬性設定及撰寫事件

情境:

在圖表一有本班學生成績平均,但老師想看單一學生的各科成績
此時只要將滑鼠移到該學生的長條圖上,當游標呈手狀

點下後即會出現該學生各科成績

要完成上面的功能需要很多程式碼嗎? 一點也不
但由於要設定的屬性眾多,所以這邊坎尼抓了不少張圖作說明

下圖是所有屬性設定完成後的狀態
很神奇地,這邊只需要單單一個 Chart Control 即可

1.建立 ChartAreas 及 Series

這次範例所需設定屬性,會到用到 Chart 三員大將 - ChartAreas、Legends、Series


首先點開 ChartAreas 新增一個圖表區,此時會發現原本的 Chart 被往上推擠
但由於尚未設定完,所以下方會是一片空白,這片空白就是新的 ChartArea


接著點開 Series 集合,加入新的 Series 並重新命名
分別用來顯示「平均」「數學」「英語」「國文」等分數

剛剛有提到一開始是看到所有學生的平均分數
所以這邊把 Average ChartArea 設定為 ChartArea1 (第一圖表區)

另外三科成績則設定為 ChartArea2 (第二圖表區)
按下確定後,應該可以看到兩個圖表區都出現資料了

2.設定 Legend

接著打開 Legends 集合,加入新的 Legend 來顯示第二圖表區的圖例
這邊需要將 DockedToChartArea 屬性設定為 ChartArea2

由於一開始圖表區2應為不存在,但Legend2仍然會出現 (請將它們視為不同個體)
所以這邊還要將 Enabled 屬性設為 False

此時此刻雖然畫面上出現了圖例,但圖例的名稱卻不是坎尼所想要的
於是坎尼打開了 Series 集合,設定呈現的 Legend 以及 LegendText
(是的,你沒看錯,要在 Series 裡設定 Legend 的相關顯示設定)

把 Math、English、Chinese 的 Legend 目標設定為 Legend2
並將 LegendText 分別設定成「數學」、「英文」、「國文」

Average 為 Legend1顯示,LegendText 為平均分數

上圖出現了個 Important 的字樣,但這屬性稍後再提

3.加入 Label 及 PostBackValue

接著加入圖表上要顯示的 Label 屬性
先到 Series 的 Label,會發現旁邊有個 button,點開後可以填入 Label 上要呈現的文字
當然也有預先設定好的 keyword,點 Insert New Keyword 即可插入

圖中 keyword 為 #VALY ,代表 Y 軸的值,範例中即為各科及平均分數
當然這邊要一個一個 Series 去設定,坎尼就不放圖囉

再回到更之前的圖,這裡 PostBackValue 放了 #VALX

#VALX 指的是 X 軸值的 keyword,也就是每個學生的人名
PostBackValue 是什麼呢? 大家應該都猜到了,就是送回後端時所傳送的數值

當然,要配合 Chart 的 Click 事件才有效果

到此經過了漫長的時間,總算是設定好 Chart 的各項屬性了
看一下 Html Code 可以發現,其實沒有想像中的落落長

4.撰寫圖表資料後端程式碼

在 Page_Load 放入取得第一圖表區資料的方法
X軸為學生名字,Y軸為平均成績

資料來源,這邊用假造的資料取代資料庫

接著是最重要的 Click 事件
利用 e.PostBackValue 到資料來源抓取學生資料 (e.PostBackValue為學生名字)
將學生成績利用 Series.Points.AddXY 的方式放到圖表區2
(詳細內容可點圖放大,註解皆有說明)


完成上列步驟後,即可讓你的圖表和使用者互動囉

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D