PageRank



轉移公告

計劃把 http://blog.hoamon.info/ 文章全部轉移至 http://www.hoamon.info/blog/ 這裡,而本 Blogger 站台的文章近 500 篇,我預計在 2014-12-31 前移轉完畢,完成後 http://blog.hoamon.info/ 將只作代轉服務,一律把舊連結如 http://blog.hoamon.info/index.html 轉成 http://www.hoamon.info/blog/index.html ,敬請舊雨新知互相走告。

新文章只發佈在 http://www.hoamon.info/blog/

何岳峰 敬上
顯示具有 google app engine 標籤的文章。 顯示所有文章
顯示具有 google app engine 標籤的文章。 顯示所有文章

2012年9月18日 星期二

2011年6月11日 星期六

Install Python2.5 on Ubuntu 11.04 x86_64 for Google App Engine

之前所提的「Install Python2.5 on Ubuntu 10.04 i386 for Google App Engine」,主要是在 i386 Ubuntu 的安裝方式。我這一次換了電腦,也裝了 Ubuntu 11.04 amd64 的版本,所以安裝方式有些許不同:

1. 系統內建的 sqlite 函式庫無法連結。
2. 某些 .so 檔不再放在 /usr/lib ,而是在 /usr/lib32, /usr/lib64, /usr/lib/x86_64-linux-gnu 等地。

另外在安裝 python2.5 時,也想順便套上 readline 及 ipython 。以下是安裝過程:

先裝上 Ubuntu 內建的函式庫:

$ apt-get install liblcms1-dev zlib1g-dev libfreetype6-dev libjpeg62-dev libsqlite3-dev libssl-dev tk-dev libreadline-dev

安裝 sqlite3:

$ cd sqlite-autoconf-3070603/
$ ./configure --prefix=/usr/local/sqlite3 --enable-readline --enable-threadsafe --enable-dynamic-extensions
$ make && sudo make install

安裝 Python2.5.6:

$ cd Python2.5.6/
$ ./configure --prefix=/usr/local/python25 --with-zlib -with-zlib-library=/usr/lib/x86_64-linux-gnu --with-zlib-include=/usr/include --with-tk --with-tk-library=/usr/lib32 --with-tk-include=/usr/include --with-tcl --with-tcl-library=/usr/lib32 --with-tcl-include=/usr/include --libdir=/usr/local/sqlite3/lib --includedir=/usr/local/sqlite3/include --with-freetype2 --with-jpeg --with-readline
$ make && sudo make install

安裝 ipython

$ cd ipython/
$ sudo /usr/local/python25/bin/python2.5 setup.py install

安裝 GAE 相依模組 ipaddr:

$ cd ipaddr-2.1.1/
$ sudo /usr/local/python25/bin/python2.5 setup.py install

安裝 GAE 相依模組 python-ssl:

$ cd python-ssl-1.15/
$ cp -rf ../Python2.5.6/Include/* /usr/local/python25/include/ # 需要 Python 源碼
$ sudo /usr/local/python25/bin/python2.5 setup.py install

安裝 PIL:

修改 Imaging-1.1.7/setup.py 中的參數如下:

TCL_ROOT = '/usr/lib32'
JPEG_ROOT = '/usr/lib32'
ZLIB_ROOT = '/usr/lib/x86_64-linux-gnu/'
TIFF_ROOT = '/usr/lib32'
FREETYPE_ROOT = '/usr/lib32'
LCMS_ROOT = '/usr/lib32'

檢查模組是否可使用

$ /usr/local/bin/python2.5 setup.py build_ext -i

測試模組

$ /usr/local/bin/python2.5 selftest.py

看到如下訊息,就代表模組皆有支援

 --- PIL CORE support ok
 --- TKINTER support ok
 --- JPEG support not installed
 --- ZLIB (PNG/ZIP) support not installed
 --- FREETYPE2 support ok
 --- LITTLECMS support ok

再執行

$ sudo /usr/local/python25/bin/python2.5 setup.py install

最後,再把 dev_appserver.py, appcfg.py 中的 #!/usr/bin/env python 改成 #!/usr/bin/env python2.5 即可(也不是必須的,只要你知道執行 GAE server 時是用 python2.5 就夠了)。

完成後就可以在 Ubuntu 11.04+ x86_64 中開發 GAE 程式了。

2010年7月4日 星期日

「郵遞區號」: 3+2 = 5 碼郵遞區號查詢離線網頁程式(已放上 Google Code)

當我開始開發資訊系統時,就一直認為地址處理是一般資訊系統中最基本且常見的功能。不過,目前使用過的資訊系統,了不起就是把 3 碼郵遞區號作完而已,很少看到網頁系統有作到無碼 5 碼的地址處理功能(當然啦,郵局自家的確有提供 5 碼查詢功能,但是不好用)。所以我想郵局苦心推動大家使用 5 碼,除了能讓寄信速度加快外,未來在許多 GIS 應用愈來愈普及下,我相信大家都會利用 5 碼郵遞區號來作加值應用的。

所以為了搔自己的癢,我寫了 http://zipcode.ho600.com/ 網站,除了可作網上查詢 5 碼功能外,也把 HTML5 的 Offline 作進去,讓查詢功能可在無網路的本機端處理。另外也提供其他人嵌入「地址查詢表單」的方法。詳細說明請見「嵌入方法」,本專案我也放到 Google Code 開發,授權條款是 NEW BSD License ,希望能聽到您們的聲音。

這個程式是跑在 GAE 上的,不過可以很容易地移稙到其他框架中,因為這個功能,我主要是用 javascript 開發的。 GAE 不過提供檔案放置的功能。

注意,第一次瀏覽會比較慢,因為要把約 2MB 的郵遞區號資訊下載下來。不過,如果你用的是支援 html5 offline 功能的瀏覽器,像 Firefox3.6+, chrome4+, safari4+ 的話,之後就不用再下載了。

範例:

2010年5月28日 星期五

Install Python2.5 on Ubuntu 10.04 i386 for Google App Engine

Ubuntu 10.04 已經預設不包 Python2.5 了,對寫 GAE 的人來說,這有點麻煩,到目前為止 GAE 並未正式地支援 2.6 ,所以最好認命地在 Ubuntu 10.04 中創建一個 Python2.5 的環境。

裝 2.5 的目的是為了開發 GAE 程式,所以我們需要額外下載這些程式碼:
  1. Python2.5
  2. PIL
  3. python-ipaddr
  4. python-ssl
# 利用 apt-get 安裝相關函式庫,除 libssl-dev 外,其他的套件是給 PIL 用的
$ sudo apt-get install liblcms1-dev zlib1g-dev libfreetype6-dev libjpeg62-dev libsqlite3-dev libssl-dev

# 安裝 Python2.5.5 至 /usr/local
$ tar -jxf Python-2.5.5.tar.bz2
$ cd Python-2.5.5
$ ./configure -with-zlib-library=/usr/lib --with-zlib-include=/usr/include --with-tk --with-tcl-library=/usr/lib --with-tcl-include=/usr/include --with-tk-library=/usr/lib --with-tk-include=/usr/include
$ make
$ sudo make install

# 安裝 GAE 相依模組 ipaddr
$ tar -zxf ipaddr-2.1.1.tar.gz
$ cd ipaddr-2.1.1/
$ sudo /usr/local/bin/python2.5 setup.py install

# 安裝 GAE 相依模組 python-ssl
$ tar -zxf python-ssl-1.15.tgz
$ cd python-ssl-1.15/
$ sudo /usr/local/bin/python2.5 setup.py install

#安裝 PIL
$ tar -zxf Imaging-1.1.7.tar.gz
$ cd Imaging-1.1.7
# 修改 setup.py 中的使用函式庫位置
# LCMS_ROOT = '/usr/lib'
# TCL_ROOT = '/usr/lib'
# JPEG_ROOT = "/usr/lib"
# ZLIB_ROOT = "/lib"
# TIFF_ROOT = '/usr/lib'
# FREETYPE_ROOT = "/lib"

#檢查模組是否可使用
$ /usr/local/bin/python2.5 setup.py build_ext -i
#測試模組
$ /usr/local/bin/python2.5 selftest.py
 PIL 1.1.7 TEST SUMMARY
 --------------------------------------------------------------------
 Python modules loaded from ./PIL
 Binary modules loaded from ./PIL
 --------------------------------------------------------------------
 --- PIL CORE support ok
 --- TKINTER support ok
 *** JPEG support not installed
 *** ZLIB (PNG/ZIP) support not installed
 --- FREETYPE2 support ok
 --- LITTLECMS support ok
 --------------------------------------------------------------------

雖然有過 build_ext ,但到了 selftest.py 時,我總是會得到 JPEG 及 ZLIB 兩種函式庫不支援的情形,但因為我的網頁程式不太用到影像處理的功能,所以我直接強制安裝 pil 。

$ sudo /usr/local/bin/python2.5 setup.py install

最後,再把 dev_appserver.py, appcfg.py 中的 #!/usr/bin/env python 改成 #!/usr/bin/env python2.5 即可(也不是必須的,只要你知道執行 GAE server 時是用 python2.5 就夠了)。

完成後就可以在 Ubuntu 10.04+ 中開發 GAE 程式了。

2009年5月31日 星期日

將三個網址全托管給同一個 GAE(google app engine) 程式

在我還將網頁程式全部放在 Ubuntu 中以 Apache 服務時,針對不同類型的資料,我會給定不同的網址像是: www.hoamon.info, down.hoamon.info, ssvn.hoamon.info, book.hoamon.info …等。但是現在我的策略是把所有個人化的網站全部交給 GAE 處理。

既然如此,難道我要一個網址就開一個 GAE spot 嗎? 如果我的各項個人化網站的資料是超過 500mb 的話,在不想花錢的情況下,的確是一個網站開一個 GAE spot ,但我的個人化網站的資料量都不大,這麼作太浪費了。

這次我想整合的網址是 down.hoamon.info, ssvn.hoamon.info ,它們兩個網址原本就只是在作靜態檔案的分享,一個是鬆散無結構化集成的檔案,另一個則是有作 subversion 管理的檔案。

因為在我其他已存在的文章、網頁以及我正使用的名片上,早就標明那些檔案的下載網址,像是: http://ssvn.hoamon.info/OpenTrunk/hoamon.pgp.aschttp://down.hoamon.info/resume070403.tex …等。所以我不能變更這些已存在的 url ,而是讓 GAE 能分辦那些 url 要求是要跑到原本 www.hoamon.info spot 的,那些 url 則是直接以靜態方式存取的。

我打算讓 http://down.hoamon.info/(.*) 的 url 會被 redirect 成 http://down.hoamon.info/_d/(.*); 而 http://ssvn.hoamon.info/(.*) 的 url 則被 redirect 成 http://ssvn.hoamon.info/_s/(.*) 。

這樣我就能在 app.yaml 設定如下:

...
...
...
- url: /_s
static_dir: ssvn_dir

- url: /_d
static_dir: down_dir
...
...
...
- url: /.*
script: index_views.py

那麼如何讓 down.hoamon.info 開頭的網址能 redirect 成 down.hoamon.info/_d 的呢? 我們就必須在 index_views.py 動手腳了。在 GAE 中,要讓 python 程式得取目前的 http request 是以什麼 url 作要求的,就是從這個變數 request.headers['HOST'] 下手,不過這個變數目前好像只存在於 webapp.RequestHandler 中,所以我處理的方式如下:

class Index(webapp.RequestHandler):
def get(self, args):
# 在這裡判斷使用者要看的是那一個網站,然後再作 redirect 的動作。
HTTP_HOST = self.request.headers['HOST']
if 'down.hoamon.info' == HTTP_HOST:
self.redirect('/_d/%s' % args)
elif 'ssvn.hoamon.info' == HTTP_HOST:
self.redirect('/_s/%s' % args)
# end

...

_DEBUG = True
application = webapp.WSGIApplication([
('/(.*)', Index),
], debug=_DEBUG)

def main():
run_wsgi_app(application)

因為我只會在 webapp.RequestHandler.request.headers['HOST'] 中抓到使用者要求網址,所以就會把 dispatch 邏輯寫在 view(MTV)/controller(MVC) 中,這樣的程式能完成工作但不算漂亮。

GAE spot 的程式完成後,記得還要把 down.hoamon.info, ssvn.hoamon.info CNAME 到 ghs.google.com *,這樣就成功合併了。

PS1 額外提醒! 這個動作是要到你的 domain name 服務商的設定介面處理。不過,你也得在 GAE 的 [admin 介面]
> [Versions]
> [Add Domain]
> [填入 hoamon.info(請不要照填 hoamon.info ,這是我的托管給 google apps 的網址,你的一定不是這個。且作這一步驟,你得先有 Google Apps 帳戶才行)]
> [填入密碼]
> [Add new url(像是 down.hoamon.info, ssvn.hoamon.info 等)]
才行。

2009年5月25日 星期一

把我的個人網站搬到 Google App Engine

自從上次運作 http://www.hoamon.info/ 的 Ubuntu 主機硬碟掛了後,就一直怗記著要把 Djange base 的個人網站改到 GAE 去。畢竟我還是比較相信 Google 的工程師在主機維護上的能力。

這個週未,終於花了點時間作移植。有點累。

與 Django 相比,到也不是比較難,而是 GAE 用了很多與原本 LAMP 不一樣的管理/程式概念。像是資料表方面,雖然 GAE 有提供 Data Viewer ,但這與傳統方式觀看資料表又不一樣,轉資料是我花最多時間的地方。

另外這一次比較重大的改變,則是我把原始資料格式從 html 改成 rST 了。如此一來,與我其他文件可以作更快速地轉換了,而這個 python-docutils 的函式庫與 GAE 相容問題也讓我花了不少時間。有機會,再向各位介紹了。我累了,要睡了。

2008年6月15日 星期日

「實在」是太高興了:我拿到 Google App Engine 帳戶了

今天上 lanma 的「Python on Google App Engine」課程,才知道現在可以透過 SMS 手機認證的方式拿到帳戶。

方式很簡單,先上 http://appengine.google.com/ 去申請,它會要求你輸入手機(886+XXXXXXXXX)的號碼,只要你的手機沒用可攜的話(就是原本中華,但門號不變卻改成遠傳)那就可以收到一則驗證簡訊。再把簡訊內的驗證碼輸入即可。
Related Posts Plugin for WordPress, Blogger...