2008-08-31

Google App Engine 與 Python 初玩雜唸 (二) ~ 破

開始上工前~

第一件做的是就是下載Google App Engine SDK (當然需要先裝python 2.5 )
就可以在我們的電腦上模擬Google App Engine的服務

安裝和使用方法可以看官網或是網路上都有很多這方面的文章,我就不贅述了

免費的開發工具有許多選擇,例如:

當然還有許多非專門寫python的一些軟體,例如notepad++等。

不過像notepad++我自己用起來是會有些空白對齊的問題,在notepad裡面看起來是對齊好的,不過python執行的時候會判定為沒有對齊的語法錯誤,只要用IDEL打開就會看到是不對齊的(可能是對tab跟space混搭判斷的差異)。

Komodo Edit是Komodo IDE公司出的的免費版本,也是不錯的選擇,不過功能比較少。

我自己是選擇使用Eclipse + PyDev,沒用過Eclipse 的人,可能在安裝上會覺得比較麻煩點。

Eclipse的安裝設定可以參考這篇文章用 Eclipse + PyDev 開發 Google App Engine 的程式或Google提供的說明(英文)Configuring Eclipse on Windows to Use With Google App Engine

開始寫程式前~
(這標題跟上一個有什麼不一樣= =)

之前Google有在台北舉辦一個程式開發日的活動,裡面有兩個關於Google App Engine的演講,演講內容都有配字幕傳到youtube上。

Google 2008 台北程式開發日@ Youtube

如果你還沒寫過GAE的程式,可以先看一下入門的那個演講,進階最好是有寫一點過再看會比較進入狀況。這兩個演講都不錯,有時間的話建議看一下。

英文聽力不錯的話,可以去Google I/O的網站,Google I/O是 google在舊金山辦的一個演講+聚會,就像「2008台北程式開發日」那樣 ,不過規模整個大很多,那時的演講錄影和投影片都有放到網站上,其中也有一些是關於Google App Engine的。

Google在介紹GAE這個服務的時候,一直強調節約使用資源,這是現在蠻多網佔程式設計師比較少考慮的,現在一般的趨勢都是在比誰可以用最短的時間最少的程式碼開發網站。雖然我也是一個懶惰型的程式設計師,但是因為從小就在一些系統資源貧乏的環境下寫程式,所以在偷懶之餘會有多少顧一下效率的習慣。

GAE中有效利用資源的一些概念,之後有機會的話詳細介紹

  • 減少寫入Datastore的次數
  • 從Datastore讀取資料時,只取出要用的部份
  • 只在需要的時候才載入那部份的程式
    例如一個module只有在一個function才用到的時候,就在那個function裡面才import
  • 能用Memcache (GAE提供將資料存於記憶體的API)存的資料就用Memcache 存
  • 將不常變動的輸出資料(例如html、xml、json)存在memcache
  • 對於時常從Datastore取出的資料存於memcache
  • 減少對伺服器request的次數,例如將許多的javascript檔合併
  • 有效控制瀏覽器的cache (透過header)
  • ......

看到這裡,我想已經有些人注意到了...這篇文章的標題「」..

跟裡面講的根本就沒關係嘛!!!!(翻桌)

實在是太生氣了!! 不寫了啦

(可以不要在演了嗎......)

2008-08-21

Google App Engine 與 Python 初玩雜唸 (一) ~ 序 ( + PHP免費伺服器 000webhost介紹)

為甚麼會去接觸Google App Engine ?

最近在玩一個小Project ,功能是讓別人可以在網頁上點歌,然後我電腦的Foobar2000就會自動去撥。配上網路電台的話,就是一個懶人開電台的方法。原本網頁程式是用PHP寫的,放在學校或朋友的機器上,結果機器掛掉,只好找別的地方放。我一度找到了一個非常棒的PHP免費伺服器「http://www.000webhost.com」。

先離題一下,說到 000webhost 也有一些可以講的XD

000webhost提供免費的PHP以及MySQL伺服器,php也沒什麼限制(例如可以讀寫檔案之類的),最棒的是..它不會在你的網站上面加廣告!

不過我使用上遇到的第一個問題就是「它會自動加統計流量的程式在你網頁後面(危機1),雖然是看不到的一般使用上沒什麼問題,但我的網站用了大量的Ajax,傳回去的資料(json)後面被加上這段的話,javascript就沒辦法辨識了(雖然可以用javascript把它截掉,可是這樣真的很鳥),後來在網路上找了一下才找到關閉的方法,從官方的介面好像找不到這個網頁的連結......(密技)

關閉000webhost流量統計程式碼的方法
http://members.000webhost.com/analytics.php <-到這個網站
再輸入帳號密碼選disable code送出就好了

這樣似乎是解決了,網站也用了幾次,可是這中間偶爾會有使用者說有問題,終於有一次讓我自己遇到AJAX傳輸的時候出問題,結果趕快用firebug打開一看....

ㄍ..咳.咳..........,資料後面被加了一行字....powered by 000webhost 之類的  (危機2)..(靠..難怪那段時間點播都比較少..),不過這個出現的機率不高,個人感應起來大概100次的request會一個有加吧。

就在這個時候!!! 突然想到之前Google App Engine剛出來封測的時候,我好像有登記如果有名額就通知的功能,可是翻遍mail都找不到,想去再登記一次的時候...

Google App Engine (GAE)完全開放自由註冊了!!!!

寫到這裡突然發現..........

驚!!!!!!  ( 不是 4:44:44 )

是我整個離題了..........
趕快再標題後面加( + PHP免費伺服器 000webhost 介紹) 好了.........

一進去GAE之後一個帳號可以新增三個Project ,不過我後來用一用,突然變成可以10個,後來去翻說明也說是一個帳號10個,可能是為了防有人灌帳號佔project的名稱,要真的有用才會出現到10個 (還是說剛好我在用的期間改成10個?)

要使用之前最重要的就是知道它使用限制,寫在這裡 http://code.google.com/appengine/articles/quotas.html

事實上我對一個網站CPU會跑幾個Cycles沒什麼概念,這些限制裡面我比較在意的像是 「Size per File : 1MB」等容量、流量問題,這樣很明顯的有許多應用可能都沒辦法做,例如想在上面做影音之類的就不太可能。

除此之外在程式上也有許多限制,例如

  • 目前只支援Python
  • 沒有讀寫檔案功能
  • 所有的資料都要存在Datastore(一個跟一般不太一樣的資料庫) 跟memcache(記憶體暫存,可以跨不同的request,可以當作php的session想像...雖然不一樣 )
  • 每次從Datastore取資料最多1000筆
  • 每次連線都有幾秒的時間限制,無法持續連線
  • 對外接收的連線只限通過port 80
  • 要主動對外連線只能使用它提供的URL Fetch API

老實說...如果對網頁程式開發不熟悉的人,要入手Google App Engine真的不太容易。

如果熟 Python的話還可以一試,對沒有網頁程式開發經驗的人建議先從其他種程式入手。

有經驗的人都會覺得綁手綁腳了,雖然說如果習慣Google App Engine的開發方式,做起網站來也是蠻快的。

不過問題就在於目前關於GAE開發的資訊太少,我自己本身在寫的時候也十分依賴寫PHP時的經驗。

另外就是Python這個語言也是門檻,我自己也是個python的新手,但是這麼多種程式語言之前其實都有些重疊,個人在寫python的時候就有看到javascript形影的感覺,翻一翻說明文件還是OK的。

不過我覺得python的官方文件不太好,我是拿PHP來跟它比較啦,相較起來PHP的document做的真的不錯,例如每個內建或extension的function跟class說明都很精美詳細,一個function或是一個物件的method就給它一頁介紹和範例。

還有一個特色就是,PHP說明文件裡每個主題下面都可以讓使用者留言,許多function有用的應用和範例都是在下面留言找到的,相較之下python的說明就很少,例如某物件的某method說明可能會短到只有一行這樣....,不過這當然跟它背後支持的使用者社群大小有關。

今天先講(離題)到這裡

待續.....

(揪~竟 還會有下一篇嗎?? 部落格的上一篇文章是三個月前發的耶XD )