顯示具有 Google App Engine 標籤的文章。 顯示所有文章
顯示具有 Google App Engine 標籤的文章。 顯示所有文章

2011-09-21

Google App Engine 即將調整收費模式! THE END OF GAE?

Google said "Don't be evil".
I say...... "Don't be stupid!!!"

Google App Engine(GAE) 是一個google 在2008推出的一個web app雲端平台服務,打得口號就是提供google內部開發各個服務的架構,讓其他的Web app 開發者可以在這個架構下開發自己的程式。

一開始是以免費但限制資源(流量, CPU, 空間大小 讀取次數)的方式供大家測試,不過在這樣的限制之下也能做些小型的程式。 隔年2009 開始提供超過限制資源的付費方法(Google App Engine準備開始提供收費服務)。變成針對美一種資源計算超過多少,就收多少。在這個收費模式下,才有了較大規模的商業網站在GAE上發展。後來GAE除了python外 又支援了java,使用的人漸漸變多。

一切看來如此美好,就在這個時候,google寄給了每個開發者一封信「Google App Engine Leaving Preview」,內容簡單的說就是
2011/09/01
感謝各位這三年來對Google App Engine的支持,GAE即將畢業成為一個正式的產品!!
為了慶祝,我們決定在9月中調高收費!!! 期待吧~科科 


結果當然是一片傻眼,論壇上充滿酸文跟幹譙...,原因大概如下
  • 收費的方式改變最大的就是從計算CPU Time變成 instance hour,造成許多程式的收費爆增至5~10~30倍以上。新的收費方式會讓較小規模的程式活不下去。
  • 以一個正在使用GAE的網站經營者來看" (GAE成本+其他成本) >網站收益  "這樣網站才活的下去,結果"GAE成本"爆增個幾十倍,一些原本run的好好的服務,突然一改收費模式只能GG了。
  • GAE是一個PaaS(Platform as a service),代表著GAE下開發的程式會高度依賴GAE無法直接移到其他的伺服器供應商。而公佈調整收費的時間緩衝太少,只有幾個禮拜,就算想跳槽也不可能阿(翻桌 
  • 之前Google I/O(google的技術大會) 大力推廣Andriod App的開發者使用GAE作為server平台,因為GAE有免費資源限額可用,如果做出一個APP都沒人用,沒賺到錢,因為沒號什麼資源,所以損失的也只有開發成本,這樣確實是吸引許多人。不過許多App一開始都是些小型的程式。 現在叫那些跳到GAE的APP開發者情何以堪。
  • 所以不是賠錢讓他run下去, 就是關掉他
不過還好的是google有意識到反彈的聲浪,提出一些改變(A few adjustments to App Engine’s upcoming pricing changes)
  • 新收費標準的開始時間從9月移到11月1號,並延長減價優惠(50% off)。定在這個日期是因為預定那個時候會將GAE的python更新到2.7版,這樣python才可以有效的利用多執行緒(python2.7以前無法利用多核CPU的優勢,等於python的instance效率會比較差)。
  • 增加instance hour的免費額度(24→28hr),讓一些原本免費的小流量網站不會爆掉。
  • 延續GAE一貫的特色,最後呼籲大家把程式寫得有效率一點..(Google :  明明就是你的程式寫的太爛 還怪我收費太高)
Google最近很多動作(例如關掉字典等服務)。看得出來google正在轉變。隨著規模的成長,從過去充滿自由主義的風格,鼓勵內部積極開發創新的服務,到現在漸漸開始對各項服務的收支在意了起來,開始對一些虧本的服務開鍘。

有的人認為google正在違反當除他們自己提出的「Don't be evil」這個口號,不過畢竟google也是個營利公司,我(身為google的忠實粉絲)認為這是google正在成長的一個轉變。過去google瘋狂的開發了一堆不知道會不會賺錢的服務,現在反而成為公司的累贅,不砍也不是,砍了又破壞名聲。 我相信現在google會在一個新服務開始的時候做更完善的經營規劃,才不會突然大幅變更收費或收掉,造成使用者的困擾。

這次的事件雖然google很快的做出了反應,不過還是對GAE的名聲造成很大的傷害,而且讓人意外的是google對user的想法竟然這麼不瞭解。對於這一連串的風波,我只想對google說:「Don't be stupid」

最後我只祈禱GAE不要弄到倒掉...手上幾個網站都在上面...

2010-09-23

[筆記]Python中使用pickle時出現KeyError

遇到這個問題是在使用google app engine (GAE)中使用pickle的時候遇到的。

我利用pickle的dumps將一個物件序列化成字串存入GAE的datastore中,需要用時再取出字串用pickle.loads()還原成原本的物件。如下會出現"KeyError: \x00"的錯誤

from google.appengine.ext import db
class TestDB(db.Model):
    serialize_obj=db.TextProperty()

obj={'a':1,'b':'c'} #要存入datastore的物件
t=TestDB(key_name='test') #建立entity

import pickle
t.serialize_obj=pickle.dumps(obj) #將obj序列化成字串 並存到剛建立的entity中
t.put() #寫入datastore

#下面將讀出剛的字串並還原成物件
t2=TestDB.get_by_key_name('test') #讀出剛剛存的entity
obj2=pickle.loads(t2.serialize_obj) #理論上會字串還原為物件 並放到obj2變數中, 但是這裡會出現KeyError錯誤
print obj2 #上面沒錯的話 會print出{'a':1,'b':'c'}

其實這個問題很簡單,問題在於GAE的datastore在處理Text的資料型態,會將其存為unicode。而將unicode丟給pickle.loads就會導致這個問題。 修改上很簡單,最好的作法就是將db.TextProperty()改成db.BlobProperty(),不然也可以將unicode再轉回一般字串pickle.loads(str(t2.serialize_obj)),但是這樣只是多做無謂的轉換...

2010-01-03

FaceBook處理邀請工具 - Accept Helper

因為國軍online中,久久才能上一次網,所以每次放假都累積一大堆的邀請。FaceBook的處理邀請介面蠻討厭的,都要跳到別頁,所以才做了這個Accept Helper,對我自己是蠻實用的,分享給各位。

簡介

接受邀請小幫手,提供更方便的介面一次處理多個邀請,不會每點一個連結都要離開本頁。

官方網站 http://nerv.appspot.com/fbp#accept_helper

安裝&使用

安裝

接受邀請小幫手 目前版本ver. 0.9.2

IE, FireFox, Opera: 右鍵點選上面這個連結,並選取"加入我的最愛(書籤)",IE會有安全性警告,請無視他

Google Chrome : 直接將上面這個連結拖曳到書籤列(若無書籤列可按Ctrl+B開啟)
這個連結在FaceBook中會被過濾掉內容,請到官方網站安裝。
最初的0.6版接受跟忽略按鈕弄相反了XD,如果現在開起來還是顯示0.6版,請重新安裝。

使用說明

要使用的時候,於Facebook的邀請頁面,直接到書籤(我的最愛)點一下接受邀請小幫手就可以了。

執行成功之後會看到以下畫面

說明:

  • 首先每個邀請的按鈕會被[接受!] [忽略]所取代,您可以直接按這兩個連結來處理邀請。
  • 開啟於選單則可以設定接受邀請之後頁面要顯示的位置,預設的本頁面中會顯示在畫面中那個白色的區塊(看不懂的話,實際使用就會馬上瞭解了),選擇開在本頁面中時可以上下拉動下面的灰槓調整大小
  • 過濾使用者選單可以讓你依照邀請人只顯示來自那個人的邀請。
  • 接受第一個如字面,就是接受畫面中第一個邀請,同樣 適用於過濾使用者之後。

2009-03-15

[Note] Weekly Summary 2009/03/15

Javascript

Gallerybox
http://www.sam-sys.com/gallerybox.html

一個新的jQuery秀圖plugin 像是相簿一樣的呈現方式

GX - Javascript Animations Framework
http://gx.riccardodegni.net/
配合jQuery的動畫framework,像YUI裡面的動畫功能 那樣

Google App Engine

Reducing Page Load Time on Google App Engine Pages With Multiple JavaScripts
這篇文章主要是在介紹在google app engine中,動態的將網頁中所用到的所有javascript壓縮並合併存在memcache,這樣可以有效的減少request數,降低網站載入的時間。
我自己也有用類似的方法,不過我是在將程式update上去GAE的server之前,先去執行一個python的script把所有的javascript和CSS各合併成單一檔案,再呼叫YUI compressor 來壓縮,直接變成static file上傳。我想這樣還是比從memcache讀取來的有效率,而且當你javascript有變動update上去之後,如果沒有清掉memcache裡的資料,那網頁還是會載入舊的javascript。另外就是用YUI compressor還可以支援CSS瘦身。

JaikuEngine
http://code.google.com/p/jaikuengine/
http://jaikido.blogspot.com/2009/03/jaikuengine-is-now-open-source.html
Google之前宣佈停止Jaiku 的開發,然後把Jaiku移植到google app engine上面,並開放原始碼(就是說現在任何人都可以把他抓下來放到GAE上跑自己的Jaiku),不知道會不會有人接手維護。

John Skidgel 所製作精美又實用的Cheat Sheet, PDF檔一共有兩頁
SoftWare
Animal Shelter Manager
http://sheltermanager.sourceforge.net/home.php
真的是什麼軟體都有XD
這是個管理動物的軟體 可以適用於 動物園 動物收容中心 獸醫等地方 支援Windows, linux, BSD系列, MacOS X..多個作業系統
作者本業是個軟體工程師 因為在RSPCA (英國防止動物虐待協會, 中文網站 )當志工而寫了這套軟體

Proxifier
http://www.proxifier.com
讓不支援設定代理伺服器的程式,透過proxy連線。跟Freecap之流的軟體比起來的好處是不用透過該軟體執行,例如有個程式A執行後會去執行另一個子程式B,用Freecap就只能讓A透過
proxy,Proxifier的好處就是可以讓AB都用代理。


Sample Socks5 Proxy Server Demo
http://www.freevbcode.com/ShowCode.Asp?ID=5057
Socks 5 Server in VB
Pysocks
http://sourceforge.net/projects/pysocks/
Socks server in python







2009-02-25

Google App Engine準備開始提供收費服務

在Google App Engine 的Blog 發表了"New! Grow your app beyond the free quotas! ", 預計在90天之內開放超出Quota資源的付費資源。

超出Quota的收費是採用多少資源收多少費用的方式,你可以依照預算設定一個支付額度的上限,主要可設定項目只有Outgoing Bandwidth, Incoming Bandwidth, CPU Time, Stored Data, Recipients Emailed這五項。 不過當你啟用付費功能的時候,其他的Quota都會提高許多,詳細的內容可以看更新過後的Quota說明。但是像單檔10MB、資料庫每筆1MB的限制還是不會變。

在宣佈收費方式的同時 Google也決定對免費的Quota做了一些改變

  • CPU Time從46.30 hours/day減少到6.5hours/day
  • 頻寬從 10GB減少到1GB
  • 為了補償,從現在起 儲存容量從500MB增加到1GB


說實在的改很大,改不用錢。這個動作還是為了區隔出付費的使用者,不過我想對大部分的普通使用者影響應該不大,為了維持GAE的營運我認為是可以接受的 。

調低免費Quota也表示從GAE開放到現在,GAE的使用情形沒有google預期的熱絡。大部分的人都是用來建一些中小型網站。

不過之前並沒有付費的機制,只有固定Quota,我想也不會有商業使用者貿然將大型的project建構在GAE上。我認為GAE宣佈開放付費可以看作Google在對商業使用者招手說:「 GAE已經是一個成熟可以賣的產品了,請安心的購買吧!」 (尤其最近Google決定關掉一些服務,總是讓人會有種不信任感,會不會哪天建在GAE上的網站,突然被宣佈要關閉,而且最可怕的是,用它api寫出來的程式幾乎沒辦法直接轉移到其他地方..)

除此之外,GAE目只能使用python作為撰寫的語言(雖然有發表將支援其他語言的計劃,不過目前還是沒看到新的動靜) 也是沒那麼多人用的原因。儘管python的後勢看漲,看看TIOBE的排名 或是用Google Trend比較搜尋的結果,目前的python佔有率仍然比PHP少上許多,況且PHP幾乎都是用在Web上,而Python用在web上還算少數。GEA若推出PHP作為runtime language,想必可以立即吸引許多現有的的技術人力使用GAE。另外最被看好會支援的java來說,個人認為它雖然具有淺力,但是經濟效益還是沒有PHP來的高。主要還是因為使用java的人雖然很多,但是用在server side的比率還是比較少,而這個結構短期內不太可能會有變動。

GAE現在除了限制之外,還有一些沒支援但是對一些網站非常重要的功能,例如在背景執行、訂時執行的程式,不過在最近GAE在blog正式宣佈將會支援這些功能(A roadmap update!)

目前把GAE拿來作非玩票性質使用的網站還不多,不過隨著付費服務的開始,相信在今年GAE將會做出許多改變。

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 )