URL Routing in GAEO


0 Comments

GAEO 預設有幾種繞徑方式,官方文件如是說:

  1. / 代表呼叫 {'controller':'welcome', 'action':'index'}
  2. /foo/bar 代表呼叫 {'controller':'foo', 'action': 'bar'}
  3. /foo 代表呼叫 {'controller':'foo', 'action':'index'}

如果你也是用 gaeogen.py 產生出基本架構的話,那就還有:

  1. /foo/bar/blah 代表呼叫 {'controller':'foo', 'action': 'bar', 'id': 'blah'}

官方文件中的範例跟使用 gaeogen.py 產生出的架構相同,但沒有說要怎麼取得 Controller 、 Action 和 ID ,在下對於 Python 不熟,所以又是試了一段時間才成功。

Controller 應該不用再次介紹,用 gaeogen.py 產生出來便是。Action 是指 Controller 中的 function 名稱,舉例來說, index 就是一個 Action 。

class MyController(BaseController):
  def index(self): # 我就是 Action 啦!
    pass

接下來的問題是要怎麼取得 ID ,我 trace 原始碼 trace 了很久(因為我是新手嘛!),才知道原來用 self.params.get('id') 便能取得。此外也可以用 self.params['id'] ,但這個方法在沒有 ID 時會發生錯誤。以下給一份完整的範例,此範例的用途是將Yahoo!奇摩字典的 Auto-completion 轉換為 Firefox 可用的 OpenSearch Suggestions 格式。

import cgi
from gaeo.controller import BaseController
from google.appengine.api import urlfetch

class YdictController(BaseController):
  def index(self):
    pass

  def lookup(self):
    p = cgi.escape(self.params['id']) if 'id' in self.params else ''
    try:
      result = urlfetch.fetch('http://ws.dict.tpe.yahoo.com/suggest_data.php?of=js&p=' + p, method="GET")
      if result.status_code == 200 and result.content.startswith('fxsearch([') and result.content.endswith('])'):
        suggestions = result.content[9:-1]
        self.render(text=suggestions)
    except:
      pass

成果:http://bcse.appspot.com/ydict/lookup/sugges

等我試出來後,突然想到了什麼,便去查 RoR 的文件…… 果不其然,這取用方法跟 RoR 好像啊~ 看來在 GAEO 缺乏文件的現在,或許也能先參考 RoR 的文件…… XD


My First Step toward Google App Engine / Python


0 Comments

雖然放假了,我還是滿常來 Lab 的,這兩天的主要內容是研究 Google App Engine ,進度從安裝、「Hello World!」、以 Google Account 作身分認證,一直到使用 Datastore API ,然後上 PTT 發現有人把功能很完整的 Ikariam 物資交易平台做好了,讓我又失去了我的題目1 XD

雖然如此,但作一下最近的筆記。

安裝 Python 、 Google App Engine 及 GAEO

  1. 下載 Google App Engine SDKPython 2.5
  2. 以上兩個都是照著指示按「下一步」就能裝好。
  3. 下載 GAEO,然後解壓縮到任何你喜歡的地方。
  4. 在我的電腦上按右鍵→內容→進階→環境變數。然後在 PATH 的最後加上 ;C:\Python25;D:\Documents\htdocs\gaeo\bin ←此為範例,請根據你將 Python 、 GAEO 安裝在哪裡而修改。至於 Google App Engine SDK 則會自動幫你加上,不用我們動手。

建立一個新的專案

  1. 在你喜歡的資料夾中,以命令提示字元執行 gaeo.py project_name ,GAEO 就會幫你建立好 project_name 資料夾以及基本的程式與資料夾結構。
  2. 然後在 project_name 資料夾中,以命令提示字元執行 dev_appserver.py --port=8080 . 2,這樣就能將程式執行起來,你可以在 http://127.0.0.1:8080/ 看到結果,看見 “It works!!” 就表示成功了。這個畫面的程式位於 project_name/application/controller/welcome.py ,而 template 位於 project_name/application/templates/welcome 資料夾中。

建立新的 Controller

  1. project_name 資料夾中,以命令提示字元執行 gaeogen.py controller Say 這樣會在 project_name/application/controller 中建立一個 say.py ,其中就是新的 Controller ,名為 SayController ;此外也會建立一個 project_name/application/templates/say 資料夾,內容是空的,留待未來使用。

上傳到 Google App Engine

  1. 這邊我實在得說 Google 包裝得很好,只要在 project_name 資料夾中,以命令提示字元執行 appcfg.py update .3 ,程式便會傳上去,並且會自動編版號。

其他

  1. 以 Google Account 作身分認證同樣很簡單,基本上照著 Google 的教學文件作就沒錯了,只不過在本機端測試時它不需要真的登入,只會出現一個看起來怪怪的登入畫面,這並不是你作錯了。
  2. 有時候程式發生問題時,會噴 Error 404 而不給錯誤訊息,我目前還不知道 Python 有什麼簡單的 debug 方式…
  3. 目前 GAEO 的 gaeogen.py 只能用來生成 Controller ,所以我不知道 Model 應該放在哪裡…
  4. 在編輯工具方面我試了 Eclipse 及 UliPad , Eclipse 看得出來是一個功能非常強大的 IDE ,但我不知道怎麼將它和 GAEO 整合在一起4;而 UliPad 有些功能不符合我的習慣,它的 Auto-completion 則是基於「本檔案中曾使用過的函式」,對我來說沒什麼幫助,最後還是用回 EmEditor。

  1. 我本來是想做一個類似拍賣的網站來練習,不過主要目的其實還是想玩 GAE 

  2. 我將這段儲存為 run.bat ,這樣執行比較方便。 

  3. 我將這段儲存為 update.bat ,這樣執行比較方便。 

  4. gaeo.py --eclipse project_name 就可以囉! 


Jaiku Plugin for Habari


0 Comments

簡介

此 Plugin 讓你在 blog 上顯示你的 Jaiku 最新動態。

安裝

  1. 解壓縮檔案。
  2. 將 jaiku 資料夾放到 /user/plugins 資料夾中,然後到 Habari 管理介面中啟用它。
  3. 將下面這行貼到你的 Theme 中。

    <?php if ( Plugins::is_loaded('Jaiku') ) $theme->jaiku(); ?>
    

設定 / 自訂

啟用後,請按下 Configure 來設定此 Plugin ,有這些項目需要輸入:

  • Jaiku username – 你在 Jaiku 的使用者名稱/帳號。
  • Presences to show – 設定要顯示幾個 presences 。
  • Cache expiry in seconds – 設定暫存檔保存多久,單位是秒。

如果你要修改 HTML 呈現的結果,可以將 jaiku.php 複製到你的 Theme 資料夾中並修改這個檔案。

下載

如果你的 Habari 版本為 r1946 以上,請使用 0.2 版,否則請使用 0.1.1 版。

Jaiku 0.1.1 Habari r1943 以下適用
Jaiku 0.3 Habari r1946 以上適用

更新紀錄

  • 0.3 (2008-06-10) – 可設定要顯示幾個 presences 。
  • 0.2.1 (2008-06-09) – 檢驗使用者輸入的資料是否正確。
  • 0.2 (2008-06-04) – 更新為新的 FormUI 的寫法。
  • 0.1.1 (2008-06-04) – 移除一些不必要的程式碼。
  • 0.1 (2008-05-29) – 初次釋出。

Introduction

This plugin show your latest presences on your blog.

Installation

  1. Extract the file.
  2. Put the folder ‘jaiku’ to /user/plugins and activate it.
  3. Copy and paste the following line to your theme.

    <?php if ( Plugins::is_loaded('Jaiku') ) $theme->jaiku(); ?>
    

Configuration & Customization

After activated it, click Configure button to setup the plugin.

  • Jaiku username – Place your Jaiku username here.
  • Presences to show – Number of presences to show.
  • Cache expiry in seconds – Number of second after the call that the cache will expire.

You can copy ‘jaiku.php’ to your theme directory and modify the HTML output.

Download

Only use version 0.2 if you are using Habari r1946 or higher.

Jaiku 0.1.1 for Habari r1943 or lower
Jaiku 0.3 for Habari r1946 or higher

Changelog

  • 0.3 (2008-06-10) – Now you can show multiple presences.
  • 0.2.1 (2008-06-09) – Validate user inputs.
  • 0.2 (2008-06-04) – Updated to work with the new FormUI.
  • 0.1.1 (2008-06-04) – Remove some unnecessary functions.
  • 0.1 (2008-05-29) – Initial release.

Image Expander


4 Comments

Image Expander 的靈感來自於  gslin 的 Wretch Album Expander

最近實在愈來愈懶,所以寫了這個 script 來讓我少點幾次滑鼠 :p 它的功能是將縮圖替換為原圖,判斷方法為:

  1. 超連結的目標位址為 .jpg、 .jpeg、.png 或 .gif 結尾。
  2. 超連結的內容只有一張圖片,沒有其他物件或文字。
  3. 經由 onload() 確認圖片存在。

用 HTML 來表示的話,就是像以下架構的縮圖,才會被替換為原圖。

<a href="原圖網址"><img src="縮圖網址" /></a>

這個 script 相當容易導致網頁版面被破壞,建議在有需要時才啟動它,平常關掉比較好~


“Binadamu”


0 Comments

Download

Binadamu 0.9 (Revision 164)

使用說明

  1. 主選單的圖示可以在 CSS 中修改,沒有圖示的話,就會像 Live Demo 中的第三項那樣。
  2. 支援 Aside ,效果如 Live Demo 的第一篇。使用方法是給文章加上 “Edge” 這個 tag ,如果不要 “Edge” ,想改成 “Aside” 或其他 tag 的話,可以在 CSS 中修改。
  3. 支援 Plugin 列表

“De Morgan”


0 Comments
Lvx ex Cælis

Download

De Morgan 1.0 (Revision 146)

SVN Repository: DeMorgan


Preface

De Morgan 是本 blog 自二月起使用的新 theme ,並不是我厭倦了前一個 theme ,而是因為當時發生了一個讓我很沮喪的事件

De Morgan 這個標題來自數學家 Augustus De Morgan ,但是老實說它跟棣莫根定理一點關係也沒有,設計靈感主要是來自 De Morgen 這份比利時報紙,我一開始把這份報紙的名稱記成 De Morgan ,所以將錯就錯,便把 theme 也命名為 De Morgan 了 XD

Introduction

De Morgan 的最大特色是首頁與內頁的頁首不同,而且單篇文章頁面的 <h1> 是該篇文章的標題,而不是網站名稱,這樣語意比較適切,也對 SEO 比較好。

嗯… 除此之外好像沒有其他重點 orz


Chyrp


2 Comments

Chyrp 是一個輕量的內容管理系統。身為一個內容管理系統, Chyrp 核心中並未包含「迴響」、「文章分類」這些屬於 Blog 該有的基本功能,但只要安裝上「迴響」及「標籤」的外掛(在 Chyrp 中稱之為「Modules 外掛模組」), Chyrp 又能搖身一變,成為一個標準的 Blog 系統。在「Extensions 附加元件」加持下, Chyrp 能夠用來建構各式各樣的內容導向網站。

在 WordPress 愈來愈肥胖的現在, Chyrp 將是追求精簡的使用者們的新選擇 :)

初次接觸 Chyrp 的使用者,應該會搞不懂什麼是 Feathers ,「羽毛?」。「Feathers 內容範本」是 Chyrp 中相當重要的一個要素, Feathers 代表的是「內容的類型」,例如文字、影片、檔案下載等,又或者是讀後心得、聊天紀錄、活動時程,都可以當作不同的內容類型,就像是提供了一個範本,使用者只需照著欄位輸入, Chyrp 便能依照所指定的類型,產生出合適的格式。

Chyrp 的 Modules, Feathers 和 Themes 分別都使用自己的語系檔,雖然在 WordPress 中也能見到這種情況,但 Chyrp 幾乎是讓它成為「基本功能」,甚至連預設樣板都有自己的語系檔。這種作法雖然也有它的好處,但如果像 WordPress 那樣提供一些預設字串,我想當未來樣板多到氾濫時將會有所幫助。


目前 Chyrp 的基本需求是 PHP 4 ,但根據討論區的投票,未來將會提高到 PHP 5 ,我本來還為了這個版本問題而稍微偏好 Habari 的… XD 不過就穩定性而言,目前轉移到 Chyrp 也還不是時候, Chyrp 只要在安裝時重新整理幾下,馬上就會蹦出一大堆錯誤訊息… 囧rz 相較之下, Habari 則穩定許多。

 1 2 3 … 52 Next →