2014年2月16日 星期日

2014台南百花祭

趁著送孩子到台南的機會,順道參觀了在台南公園舉行的台南百花祭,第一次進入這個公園,欣賞盛開的花朵,讓人心曠神怡。

松鼠也來湊熱鬧




藍色小精靈

阿拉丁神燈



2014年2月2日 星期日

2014春節新社賞花

櫻花
櫻花

櫻花

櫻花

櫻花


桃花

桃花

桃花

李花

李花

李花

梨花

梨花

枇杷

葱花

葱花

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中,有兩個地方需要修改,在經過修改後果然成功。