2014年1月28日 星期二

Google APP Engine開發簡介

Google APP Engine簡介
Google App Engine(GAE) 讓使用者可以在Google的基礎架構之上執行網路應用程式。在這個基礎建設之上,可以很容易的建立與維護,以及當流量與儲存需求增加時可以容易擴增規模。在Google APP Engine 的環境中,使用者不需要維護伺服器,只需要將網路應用程式上傳,然後其他的使用者就可以使用該應用程式所提供的服務。對於該應用程式,你可以使用自己的網址 (例如http://www.example.com/) ,或是使用 appspot.com領域之下的免費網址。該網路應用程式可以公開讓所有的人使用,或是限制只有組織內的成員才可以存取。Google App Engine 支援以數種常用之程式語言所開發的app,例如Java, Python, PHP,或GO等。
在GAE上佈署APP並不需要費用,也沒有經常性的費用,而是依據APP所使用的頻寬與記憶體,以GB為單位計費。APP的發佈者可以設定資源的最大使用量,使得APP所消費的費用控制在預算之內。App Engine上的APP沒有初始費用,所有的應用程式可以免費使用1GB的儲存空間,足夠的CPU時間,以及可以支援一個月5百萬次的網頁瀏覽數的足夠頻寬。使用者一旦開通計費機制,則免費的額度也會增加,而且只需支付超過免費額度的部分。
Google有一套完整的幾費機制,有興趣者可以參考Google APP Engine網站的說明。

Google APP Engine使用說明

1. 進入GAE首頁
首先進入Google APP Engine首頁,https://appengine.google.com/‎。若是你尚未有Google APP Engine的帳戶,則第一次使用需先申請帳號

圖1 Google APP Engine首頁
2. 申請APP帳號的程序
參考圖2的範例,勾選 I accept these terms,然後點選Submit就可以完成註冊。

圖2 申請帳號時的條款
3. APP資訊看板
Google提供10個免費的APP應用程式,建立APP專案會列在資訊看板中,在資訊看板中會顯示每一個APP專案的名稱,標題,儲存架構,以及狀態等。

4. 建立新的APP
點選Create Application可以進入建立新APP的畫面。在新建APP時需要輸入下列資料:
APP識別子(Application Identifier)
APP識別子基本是需要是一個唯一的名稱,其中不可以使用Google帳戶名稱,或是某些Google的商標等。

APP標題(Application Title)
當使用者存取這個APP時會顯示的名稱。

認證選項(Authentication Options):
對於使用佈署在Google APP Engine平台上的APP,Google提供三種認證使用者的方法:
1. 所有具有Google帳戶的使用者都可以存取(內定)
2. 限定某一Google App領域的使用者才可以存取
3. 開放給所有具有OpenIG的使用者存取

Google APP Engine提供AppCfg工具,讓使用者可以上傳與規劃APP的程式碼與內容,管理資料索引與下載記錄檔。AppCfg具有下列版本的SDK:
Python Runtime - appcfg.py.
Java Runtime - appcfg.
至於 PHP的 runtime則尚處於實驗階段

就架設網站來說,PHP大概是最多人使用的,所以就由PHP下手。
PHP SDK的下載點
https://developers.google.com/appengine/docs/php/gettingstarted/installing
這個 SDK 包含可以讓你在自己的電腦上,測試所開發之PHP程式的網站伺服器,以及完成開發後要上傳所開發的應用程式到APP Engine時所需要的軟體,下列為需要安裝的軟體套件:
Python 2.7,下載點: http://www.python.org/download/
App Engine PHP SDK,下載點: http://googleappengine.googlecode.com/files/GoogleAppEngine-1.8.9.msi

因為開發伺服器是一個Python伺服器,所以使用App Engine PHP SDK需要安裝Python 2.7。此 PHP SDK PHP 5.4 runtime包含所需的擴增資料的二進位檔, 因此若只是基於開發之目的,則不需要另外PHP套件,只需要Python就夠了。
將此SDK下載之後,依據軟體安裝說明,安裝此SDK。
大多數的PHP使用的資料庫為MySQL,App Engine SDK並沒有包含這個資料庫,則需要自行下載使用。MySQL有數個不同的版本,下載Community Server"版本就足以使用。http://dev.mysql.com/downloads/mysql/
在安裝SDK之前要先安裝Python,完成後即可以繼續'安裝SDK。此PHP SDK包含在將所開發的APP Engine應用程式上架到GAE之前,在本地端進行開發與測試時所需要的發展環境。

第一個範例

所有程式開發的第一個範例都是Hello, World,因此也不免俗的以這個範例開場。首先創建一個用來放置所有與此專案相關的目錄,並將之稱為helloworld,在這個目錄內先建立一個新的程式,並且命名為helloworld.php,在這個檔案內輸入下列內容:

<?php
  echo 'Hello, World!';

每一個AGE的應用程式都需要一個稱為app.yaml的規劃檔,在這個規劃檔中,除了其他事項外,也說明了處理腳本(handler scripts)應該用於哪些個URL。這個app.yaml檔案一樣位於helloworld目錄內,並輸入下列內容:

application: helloworld
version: 1
runtime: php
api_version: 1

handlers:
- url: /.*
  script: helloworld.php

在這個範例的規劃檔中,說明了下列資訊:
這個應用程式的識別子(identifier)為helloworld,在AGE的每一個新的應用程式都有一個唯一的識別子,在下一個步驟中,當註冊此APP時需要指定識別子。不過在開發階段倒是無所謂,就先使用這個helloworld即可
第二行的version: 1,說明目前的版本。當在上傳到AGE時,你有變動版本名稱,則AGE會保留舊有的版本,以便有需要時可以使用AGE的管理介面回復到先前的版本
runtime: php表示這個應用程式使用PHP執行環境
api_version: 1表示目前的API版本為1
handlers表示符合下列正規表示法(handlers:)的url請求,都是由helloworld.php腳本程式處理

實際執行:
測試環境
OS : Windows 8.1
Python 2.7.6
Google AppEngine SDK release : 1.8.9
日期:1/26/2014
Python內定安裝在 C:\Python27\
Google AppEngine SDK內定安裝在C:\Program Files (x86)\Google\google_appengine
Windows 8.1是x86 64位元版本,不過windows版的SDK是32位元版,所以在下載時要留意版本

A. 開啟 Google App EngineLauncher


B. 新增一個專案 File->Create New Application

參數:
Application name : APP的名稱,可以自由設定,但是最好與GAE上的app識別子一致,在此為htlintc03
 Parent Diectory :此專案的目錄,本例子為桌面
Runtime :執行環境選擇PHP
Port :在本地端測試時的通訊埠號,可以自由指定,直接使用系統給定的值 8081
Admin Port:在本地端測試時的管理通訊埠號,可以自由指定,直接使用系統給定的值8001

C. 建立一個新的應用程式專案,並且在桌面上新增一個資料夾,內部有三個檔案,分別為php檔,yaml設定檔,以及icon檔


此main.php檔為一個簡單的程式會在螢幕上印出hello world字樣,程式內容如下:

<?php
    echo 'Hello world!';

而app.yaml為設定檔,內容如下:

application: htlintc03
version: 1
runtime: php
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: .*
  script: main.php

測試APP:
點選該APP (反白)
點選run

觀看結果
若是Stop選項正常顯示,而Run選項無效,且Browse選項顯示正常,則點選 Browse

在內定的瀏覽器(此範例為Google Chrome)會帶出結果,http://localhost:8081/,其中8081為剛剛系統內定的通訊埠號

至此大功告成,一個可以發布到GAE的APP開發完成。

接下來在GAE中新增一個APP。

點選Create Application


Application Identifier:APP識別子,必須是網路上唯一的,本例子為htlintc03
Application Title:應用程式的表頭標題
Authentication Options (Advanced): 認證的選項,可以是
Open to all Google Accounts users (default):Google帳戶使用者(內定)
Restricted to the following Google Apps domain:某一限定領域的用戶
(Experimental) Open to all users with an OpenID Provider:有OpenID的用戶

完成後回到管理畫面,可以看到新增一個htlintc03 APP,狀態(Status)為None Deployed(尚未佈署)

上傳在Google App EngineLauncher建立的新專案htlintc03到GAE
點選Deploy
輸入Google 帳號與密碼

經過一番的程序

回到GAE的管理畫面,Status變成Running,佈署成功

在瀏覽器中輸入此APP的網址 http://htlintc03.appspot.com,可以看到結果,大功告成

問題排除
在開發過程中,於Google App EngineLauncher中Run APP時一直出現UnicodeDecodeError的錯誤,導致無法進行測試。這個問題主要是出自unicode、utf-8和ASCII之間的轉碼問題,但是不知道如何下手修改。在網路上找到一篇文章提到這個問題的解決方法,將Python目錄的Lib目錄內的mimetypes.py檔案中做修正
將所有的 except UnicodeEncodeError:
換成 except UnicodeError:
在Python 2.7.6中,有兩個地方需要修改,在經過修改後果然成功。

2014年1月27日 星期一

聚奎居

分段徒步環島第一天由豐原步行到彰化,途中經過烏日區便行巷時,發現一棟年代久遠的占地寬廣的巴洛克建築,後來一查才知道佔地有四百多坪,而且正確的地址是台中市烏日區學田路405巷36號。
全景圖
雖然由豐原走到這裡,腳已經開始不聽使喚,還是被這棟建築物吸引。這棟建築物正面看來還好,但是外面貼有危險的警示,告知遊客不要入內。
 由正面可以看出當年的宏偉景象。
但是因為年久失修,屋旁的榕樹竟然穿入室內,破壞土造的結構,壓垮幾乎整個房間。


 
由後面可以清楚看到榕樹入侵屋內的情形。

由便行巷看到的實際上是此建築物的背面。
由另一側的後面可以看出,連天花板幾乎都快要坍塌,看來門口的警示不是唬人的。
離開時發現旁邊有一群當地居民在閒聊,趨前詢問房子的狀況。原來興建這棟建築物的主人翁幾乎是與霧峰林家同期,也是當地的仕紳,擁有的土地曾經高達數百甲。後來政府來台後實施375減租,因此這家主人的很多土地也被徵收,導致主人鬱鬱而終,也導致這棟建築物的現況。依據當地居民告知,市政府曾經來勘查是否可以修復,不過好像因為因為傾圮的太嚴重,因此似乎沒有要修復,而且好像已經轉手賣給他人了。依據我實際的觀察,似乎可以了解市政府的決定,因為室內坍塌的太嚴重了。

2014年1月22日 星期三

虎頭柑


最近在爬山時發現一棵長得很茂盛,專門用於拜拜的大橘子,但是一直不知道這種橘子的名稱,只知道好像是用於過年期間置於神明桌上的橘子,而且好像不能吃。Google了一下,原來這種橘子叫做虎頭柑。它可以持續放上1個月不會變壞,因此擺在供桌上敬神祭祖討個吉利好運。由於虎頭柑皮厚且果肉較酸,因此較少直接食用,早期客家人會取出虎頭柑果肉,並將之和茶葉混合作成酸柑茶。


這些照片是過年前一個星期拍的,大概這兩天就會被採收了。

參考資料
黃進恭,客家過年習俗 虎頭柑保平安,中央社,102年2月12日,http://history.n.yam.com/cna/life/20130212/20130212215582.html

2014年1月20日 星期一

建構時光機器

Jack Snell/Flickr
擔任瑞士洛桑聯邦理工學院(Ecole Polytechnique Federale de Lausanne (EPFL))數位人文實驗室(Digital Humanities Lab)主任的 Frederic Kaplan博士,帶領實驗室團隊應用於人文相關的研究。他在TED演講中分享最近從事一個稱為威尼斯時光機(Venice Time Machine)研究的內容, 這個計畫試圖典藏紀錄過去1000年來,與威尼斯歷史相關的約80公里長的文獻。這個計畫的目標是要建立一個可以將上述典藏內容,地圖化並且可以搜尋的資訊系統,例如可以在Google Map上栩栩如生地呈現過去1000年的威尼斯歷史。

 
這個由由EPFL與威尼斯大學共同合作的計畫,是要探討可否建立已經逝去的Google Map,可否重建過去的社群網絡,換言之是否可以建立時光機。要將過去1000年來的文獻資料數位化,需要大量的文件與熟知這些文件的傑出領域專家。此計畫預計以10年的時間將約有80公里長度的文獻典籍,全數進行數位化並且編列索引,以及萃取當中的意義。他們規劃每天數位化450冊典籍,也預估可以由這些典籍中萃取100億個事件,這些事件可以告訴我們在1321年時誰住在Palazzo,或是在1434年時在Rialto的一條海魚需要多少錢等。他們也預計依據所擁有的航海途徑資訊,建構一個地中海的模擬器。然後嘗試在Google Map或是類似的地圖系統上,呈現某一個區域以時間軸為依據的動態資訊。
主講者以稱為資訊蘑菇的圖形來表示創世紀以來數位資料的數量,由表示圖形看出來確實是有蘑菇的樣子,但是若是將文史典籍數位化,以及透過模擬方式數位化,則這個蘑菇狀換變成類似三角形,換言之可以豐富歷史所呈現的內容。這是一件浩大的工程,重要的部分不是數位化,而是如何將這些數位化的資料變成資訊,可以進行索引、搜尋、與編輯等。特別是在文獻的年代解讀更是大工程。這個是一個跨領域且需要眾多專長人員投入的計畫,主講者也點出這個計畫的最大挑戰,是如何處理整個計畫執行過程中,每一個步驟執行的品質、量化、與表達時,所存在的不確定性與不一致性。因為 Frederic Kaplan博士是人工智慧領域專家,所以在演講中也提出一些應用人工智慧技術來處理上述問題的可能途徑。
資訊時代,俯首可得的數位裝置都是可以用來建構未來時光機器的裝置,每一個時刻瞬間變成歷史,站在同一個地點,時刻都在改變,前一瞬間的未來變成這一瞬間的現在,然後下一瞬間變成過去。用影片是最能呈現時光機器的方式,但是就浩瀚的時間長河中,一般人比較關心的是事件。例如一個人站在一個定點30分鐘文風不動,則雖然這30分鐘可以化成無數個瞬間,但是就紀錄來說,它就是一個事件一個人在這個地方站立了30分鐘。若是這其中有一隻蚊子飛進來,停留了5分鐘,然後又飛出去。那就多了幾個關於這個蚊子的事件。因此需要一個可以捕捉事件然後取得影像或是相關資料的裝置,Microsoft的SenseCam其實就是嘗試要做這個事情。
人生紀錄多年來一直都是一個研究議題多,自己投入這個議題的研究也有幾年,這期間也有一些實際的小成果出現,不過今年(2014)開春在CES展上大放異彩的穿戴式裝置,將會為這個領域的研究注入非常多的幫助。
主講者最後提到,這是一個對於人文的典範轉移(paradigm shit),而且需要培育"數位人文"新世代,以迎接這個典範轉移。

2014年1月16日 星期四

2013年歲末登山界不平靜

SNappa2006/Flickr
2013年歲末登山界不平靜:
1. 2013年12月4日退休教師歐仁欽(57歲)與顏桂香(56歲)夫婦,攀登雪山聖稜線失蹤
2. 2013年12月22日男子黃啟涵(32歲),輕裝攻頂大劍山後,跟同行的隊友表示想在山頂多待留2分鐘,結果遇上濃霧就此迷路失聯。
3. 2013年12月31日31日登山客陳佑竹、張芸茜攀登雪山攻頂時,因濃霧而迷路。所幸三天之後,2014年1月3日自行走到三六九山莊脫險。

值得警惕之事:
1. 高山氣候瞬息萬變,濃霧是最大殺手,最好不要脫隊,攜帶可以告知自己方位的東西,哨子,火
2. 陳佑竹帶的衛星定位機(GPS)、無線電都沒電,因此依靠電力的裝備有風險
3. 高海拔的雪山,夜間氣溫降到零下6度,夜間可以凍死人,需要保暖裝備
4. 依手表的定位高度約海拔2700公尺,溫度大約零度,傳統登山裝備還是比較可靠
5. 有攜帶冰斧、穿冰爪鞋,也攜帶指北針,裝備越齊全越好
6. 只有2條曼陀珠可喫,嚴格糧食分配,每隔一段時間只喫1顆曼陀珠;第2天開始必須餓到難以忍受,才能喫1顆,保留最後一滴水一食物
7. 陳佑竹摸出2個打火機,引燃衛生紙,再燒枯枝,生起2個小火堆取暖。生火裝置不可少,最好也帶火種

參考資料
張瑞楨,雪山迷路凍3天 靠打火機 曼陀珠活命,自由電子報,2014-1-4,http://www.libertytimes.com.tw/2014/new/jan/4/today-so4.htm