二月 6, 2010
» Virtualenv 簡單入門

功用

使用 Virtualenv 可以讓你預先建立一個虛擬環境,在虛擬環境中開發 Python 程式,可以保持 Python path 乾淨,並減少因為機器上需要同時支援不同版本函式庫,造成各函式庫彼此之間相依性的困擾。

而且使用虛擬環境後,到時要將環境轉移到別台機器上,也減少很多設定上的問題。

安裝

$ easy_install virtualenv

設定環境

$ virtualenv --no-site-packages [dev_place]

即建立一個名為 [dev_place] 的資料夾(中括號裡的名稱自行填寫取代)。

切換到虛擬環境

進入 [dev_place] 目錄,輸入命令:

$ source bin/activate

若看到路徑提示前多了個([dev_place])符號,即表示已經進入了虛擬環境。

這時我們可以使用預設提供的 easy_install 工具安裝要使用的函式庫、或是安裝各種 Python 程式。

安裝的函式庫會被放到 [dev_place]/lib/Python[版本]/site-packages/ 目錄中,跟一般的 Python 函式庫配置方式相似。

離開虛擬環境

要離開虛擬環境,只需輸入命令:

$ deactivate

即可回到預設的命令行狀態。

其他操作

如果你的電腦上有裝多個 Python 版本,在下 virtualenv 命令時加上「--python=python[版本] 」當作參數,也可以建立出不同版本的 Python 虛擬環境,讓你可以更容易地在多個 Python 版本間做測試。

其他使用方法可以輸入「virtualenv --help」參考印出的說明。

一月 4, 2010
» Invent Your Own Computer Games with Python

電子書

八月 16, 2009
» Introduction of Android Scripting Environment



On Coscup 2009

八月 15, 2009
» Google Python Style Guide

http://google-styleguide.googlecode.com/svn/trunk/pyguide.html

八月 13, 2009
» Compiling Python for Android Scripting Environment

Android Scripting Environment (ASE) is the scripting language (BeanShell, Python, Lua, Ruby) environment for Android Operating System.

This article is about how to compile python for ASE.

The following instructions are according to the discussion from ASE group.

Compile python for host
To compile python for ASE, you need a Linux machine, then here goes:

Download proper python source distribution (according to the python version in ase/python/src) from http://www.python.org/

Extract the source and run the following command:

$ cd Python-2.6.2
$ ./configure
$ make

Then you have a clean python compiled for your PC (called host system).

Compile python for target
Now we can go to compile python for your Android device (called target system).

Copy the python executable file and the pgen file into ase/python/src folder

$ cd ~
$ cp Python-2.6.2/python ase/python/src/hostpython
$ cp Python-2.6.2/Parser/pgen ase/python/src/Parser/hostpgen

Then we should prepare the compile tools.

First checkout the android source from http://source.android.com/ (name as mydroid), we'll use the cross compile gcc in it's "prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin" folder. Another tool is located in "ase/tools/agcc".

Edit .bashrc , add a line to include those compile tools:
export PATH=${PATH}:~/mydroid/prebuilt/linux
-x86/toolchain/arm-eabi-4.2.1/bin:~/ase/tools/agcc

Then start compile python for ASE.

$ cd ase/python
$ ./build.py

Done!

八月 6, 2009
» Compiling Android Scripting Environment

Android Scripting Environment (ASE) is the scripting language (BeanShell, Python, Lua, Ruby) environment for Android Operating System.

The following instructions are according to the discussion from ASE group.

Prerequisites

To compile ASE, you need a Linux machine, then here goes:

1. Get Android source (read http://source.android.com/download to fetch the source) and
name the folder as 'mydroid'(or else you prefer). In the following instructions I assume all the folders are in user's home folder(~) .

2. Get Android SDK (download from http://developer.android.com/) and
extract it as "android_sdk"(or else you prefer).

3. Get Android Scripting Environment source (hg clone from http://code.google.com/p/android-scripting/source/) as "ase"(or else you prefer).

4. Enter ase/tools folder and execute "fix_android_sdk.py"
to patch the "android_sdk".

$ cd ase/tools
$ python fix_android_sdk.py ~/mydroid ~/android_sdk
Copying source from .....mydroid to .....android_sdk/platforms/android-[verison]/sources
Adding android.os.Exec to android.jar
Compiling android.os.Exec to....
Done!

In addition to modifying the SDK by adding android.os.Exec, the script
will also copy the source files into the SDK so that they can be
browsed in Eclipse.

Import Project into Eclipse

After executing the script, follow the instructions for developing in
Eclipse in the Android developer guide to setup a workable Android
development environment.

Change the project build path and specify the BeanShell path to (project
path)/beanshell/bsh-[version].jar

Compile it, done!


PS: Python and Lua are precompiled and already put in res/raw folder. You
don't need to setup the cross compile environment unless you want to
also compile Lua and Python yourself.

五月 22, 2009
» Google 救甘興 -- Google 應用服務引擎(App Engine)中文文件




Google 對他的應用服務引擎(App Engine)推廣不遺餘力,
除了在四月多發佈 Java 版的應用服務引擎之外,
前幾天竟然把官方網站上的文件全部翻譯成了中文!

學網頁開發再也不用自己架設伺服器(Server)、安裝網頁伺服器(Web Server)、伺服器語言、和資料庫(Database),有了 Google 應用服務引擎通通一次搞定。

對 Google 應用服務引擎有興趣的人可以連至Google 應用服務引擎官方網站 (中文)查看。

三月 23, 2009
» Django Pinax



Pinax 是一套可重用的 Django app,看起來真是方便。

一月 18, 2009
» Jythonroid works on Dev Phone!



Just got my Dev Phone 1 and tried to run Jythonroid on it.

The procedure is

1. download sourcecode

$ svn co -r 51 http://jythonroid.googlecode.com/svn/branches/Jythonroid

2. import project into eclipse

3. connect Dev Phone and computer with USB

4. setup eclipse debug setting to run jythonroid in real Dev Phone

Now I got jythonroid installed in Dev Phone. Here's how to play with jythonroid:

1. Install Terminal Emulator to use the shell

2. just follow the screenshot to say 'Hello Android!' :)



in java we import Toast widget with

import android.widget.Toast;
In jython(roid), just type in interpreter:
>>> from android.widget import Toast
Python rocks!

十二月 5, 2008
» 保持簡單

進行優化必須付出增加空間或計算時間之開銷的代價。 Python 開發人員發現,有些地方長期來看,進行簡單的實做會比「乍看之下更吸引人的額外優化」更好。簡言之,讓事物保持簡單,通常會有所收穫
--美麗程式:Python 的辭典

十一月 20, 2008
» 什麼是 REST?

Google 開發者講什麼是 Atom Publishing Protocol (AtomPub)


Google 開發者講什麼是 REST


Google 開發者講如何使用 Google Data Python Client Library

十一月 17, 2008
» Jythonroid: Jython runs successfully on Android Emulator

What is jythonroid

Jythonroid is a project for porting jython on Android platform. Created by ClassFoo.

Jythonroid is for console-only at this time. It means oneday Android has console/terminal app in device, you could use jython on real android phone. (or please point me if there's an exist console/terminal app for Android)

Jythondroid was worked on m5-build but outdated when 1.0 SDK comes out. Now Jythonroid (branch) works on 1.0 SDK & Android Emulator again. Since there's no GUI yet, you could checked out the code, run the emulator(install in emulator), and use adb shell on PC to try jythonroid.

Project Url

http://jythonroid.googlecode.com

Howto

1. check out the source

use svn to check out the project source

$ svn co http://jythonroid.googlecode.com/svn/branches/Jythonroid jythonroid


2. import project

In Eclipse, select "File > Import > Existing Projects into Workspace" in tool bar to import jythonroid project into your workspace.

3. setup emulator and run

setup debug settings and press "Debug/Run" button to install jythonroid into Emulator.

4. Run with adb shell

WARN: Since jythonroid is in its early phase, at this time it could only be evaluated on dalvik vm/emulator.

open adb shell, enter data/app folder, and run jythonroid

$ adb shell
# cd data/app
# dalvikvm -classpath org.classfoo.apk org.python.util.jython

Here's the screenshot:

十月 10, 2008
» 機油 (GAEO) 0.2 alpha 版發佈



開發過 Google App Engine 網頁應用程式的 Python 開發者,可能都有種被縛手縛腳的感覺。因為現成 Python 的網頁框架在 Google App Engine 上,有些地方因為 Google App Engine 的限制而無法作用,因此用起來不是很順手。

GAEO (Google App Engine Oil) 是個專門作用在 Google App Engine 上的框架,免去 Google App Engine 一切得自己手動建造的麻煩。

安裝

使用

easy_install gaeo

命令就可以安裝好。

安裝完提供 gaeo 跟 gaeogen 兩個命令。

建立新專案

使用
gaeo <專案名稱>

來建立一個新專案,新專案中除了基本 Google App Engine 的設定檔案外,還複製了一個 gaeo 檔案夾,提供 gaeo 相關的函式庫。

建立後進入專案,啟動 Google App Engine 開發工具的 server 就可以看到運行的網站。

還可以改使用
gaeo --eclipse <專案名稱>

來順便建立 pydev+eclipse 開發環境用的專案資訊。


程式碼組織方式

GAEO 組織程式碼的方式一樣是網頁框架常見的 Controller/Model/Templates 組織方式。剛建立的資料夾主要內容如下:

main.py
application/controllers/welcome.py
application/template/welcome/index.html


main.py 中可以透過 initRoutes() 函式來修改 url 對應的類別(class)。
template 中的 welcome 資料夾則是直接對應到 controllers 中的 welcome.py。

新增函式


要新增一個 url 處理函式,可以用
gaeogen controller blog view post

命令,會在 application/controllers 中建立 blog.py 檔案,裡面有一個 'blog' class,class 中包含 'view'和 'post' 兩個 method。另外 application/template 中也會建立一個 blog 資料夾,裡面包含 view.html 和 post.html 兩個 Django template 檔案。

技術

技術上 gaeo 樣板使用 django template,而整個 routing 是採用「一頁樣板(template) 對應一個方法 (method) 」的組織方式,可以用類似 route 的方式添加新方法。0.2 版除了提供 scaffold (鷹架)之外,也提供 plugin 系統,整個很有 Ruby on Rail 的感覺。

照著官方文件說明做一遍,一個多小時內就可以上手開發 Google App Engine 上的網頁應用程式啦。

九月 28, 2008
» 建立自己的程式碼群圖



看了 Creating your own code swarm 這篇文章,照著弄了一套程式碼群圖(Code Swarm) ,真的很簡單有趣。

程式碼群圖是指從 svn, git, hg 上取得更新 log,由 CodeSwarm 程式分析,產生出以時間為單位的一張張截圖。

上圖是周蟒的程式碼群圖。

八月 12, 2008
» 我是 Python,10件所有人都想問我的事

Guido 在 Jaiku 上提到一篇「Learning Python」文章

裡面提到,Python 社群的最大問題就是注意力實在太分散了。相比用 PHP 或 Ruby 語言的人,問他們「對在哪方面使用該語言開發感興趣?」這問題,你幾乎都會聽到「Web 開發」。而在 Python 社群裡隨意抽五個人,問他們對在哪方面使用 Python 語言開發感興趣,則很可能會得到不同的五個答案。

所以在該文最後也提出了兩個問題:

1. 舉出 10 件所有人會想用 Python 語言寫而不用其他語言寫的事

2. 舉出 10 個所有人都會想問的關於 Python 語言的問題。


經過一些討論後,在此舉出「 10 件關於 Python 語言所有人都想問的問題」:

1. 為什麼 Python 既是動態語言又是強型別的語言?
2. 用哪個 IDE 寫 Python 比較好?
3. 有什麼關於 Python 語言的好書?
4. 學 python 語言能找到工作嗎?
5. 為什麼用縮排而不是用括弧或「End」來分段?
6. 用哪種 GUI 好?
7. 為什麼 Python 比 xxx 語言慢?
8. 如何開始學習 Python 語言?有什麼好建議嗎?
9. 有什麼小巧的 Python source 或專案項目可以參考練手?
10. 怎麼在 Windows 上直接跑 Python 程式 (不先安裝 Python)?

8/12/2008 更新: Guido 採用了這10個問題,並在 python wiki 上開了專頁

八月 8, 2008
» 三分鐘教你/妳自製閃光卡



你/妳是否是去死去死團的一員?在這個充滿閃光與柴可夫斯基1812序曲的節日,有種暫時失明的感覺?

為了對抗這個節日,我們就來自製閃光卡吧!


這個閃光卡製作的方法,就是寫個單詞記憶程式,並把這個單詞記憶程式命名為 閃光卡 (FlashCard) (*註) XD

寫一個簡單的記憶程式不用花太多時間:我們只需要一個詞庫,與一個用作檢視與複習詞條的介面。

#!/usr/bin/python
# -*- coding: utf-8 -*-

deck = [("a","apple"),
("b", "boy"),
("c", "cat"),
("d","dog")] #詞庫,包含4筆詞條

import random

help = "commands: Fail/Lucky/Quit" #支援的命令

while True:
card = random.choice(deck) # 從詞庫裡挑一個詞條,如 ('d', 'dog')
which = random.choice(card) # 從詞條裡挑一個詞,如 ('d', 'dog') 中挑 'd' 或 'dog'

print which #顯示詞
print card[0], card[1] #印出完整答案

action = raw_input("> ").lower() #輸入命令
if action == "q": #按其他鍵繼續,按q就跳出迴圈
break
if "f" in action or "l" in action: #忘記時的處理策略
print "...recorded."
deck.append(card) #多加本詞條入詞庫中,以提升被選中的頻率
if "h" in action:
print help #印出說明
進一步修改參考:
  • 若要用作英文學習的話,不只前項(英文)、後項(中文解釋),也許還要一欄音標。
  • 詞庫應該要可以抽換
  • 詞庫應該要可以合併使用(應該支援多詞庫)
  • 要用更有效的學習模式,如sm2
  • 應該可以用圖片代替文字,以做到支援「音標」等效果。
參考資料


*註: 英文中, flashcard 就是單詞記憶卡的意思。

» 三分鐘教你/妳自製閃光卡 -- 補充包

繼上一篇裡我們製作好閃光卡後,這裡再附送一個補充包: 平假名/片假名詞彙庫,讓閃光卡真正能運用於日常生活中 XD


Hiragana = [("あ","a"), ("い", "i"), ("う", "u"), ("え","e"), ("お", "o"),
("か", "ka"), ("き", "ki"), ("く", "ku"), ("け", "ke"), ("こ", "ko"),
("さ", "sa"), ("し", "shi"), ("す", "shu"), ("せ", "se"), ("そ", "so"),
("た", "ta"), ("ち", "chi"), ("つ", "tsu"), ("て", "te"), ("と", "to"),
("な", "na"), ("に", "ni"), ("ぬ", "nu"), ("ね", "ne"), ("の", "no"),
("は", "ha"), ("ひ", "hi"), ("ふ", "hu"), ("へ", "he"), ("ほ", "ho"),
("ま", "ma"), ("み", "mi"), ("む", "mu"), ("め", "me"), ("も", "mo"),
("や", "ya"), ("ゆ", "yu"), ("よ", "yo"),
("ら", "ra"), ("り", "ri"), ("る", "ru"), ("れ", "re"), ("ろ", "ro"),
("わ", "wa"), ("ゐ", "wi"), ("ゑ", "we"), ("を", "wo"),
("が", "ga"), ("ぎ", "gi"), ("ぐ", "gu"), ("げ", "ge"), ("ご", "go"),
("ざ", "za"), ("じ", "ji"), ("ず", "zu"), ("ぜ", "ze"), ("ぞ", "zo"),
("だ", "da"), ("ぢ", "(ji)"), ("づ", "(zu)"), ("で", "de"), ("ど", "do"),
("ば", "ba"), ("び", "bi"), ("ぶ", "bu"), ("べ", "be"), ("ぼ", "bo"),
("ぱ", "pa"), ("ぴ", "pi"), ("ぷ", "pu"), ("ぺ", "pe"), ("ぽ", "po")
] #平假名詞庫

Katakana = [("ア", "a"), ("イ", "i"), ("ウ", "u"), ("エ","e"), ("オ", "o"),
("カ", "ka"), ("キ", "ki"), ("ク", "ku"), ("ケ", "ke"), ("コ", "ko"),
("サ", "sa"), ("シ", "shi"), ("ス", "shu"), ("セ", "se"), ("ソ", "so"),
("タ", "ta"), ("チ", "chi"), ("ツ", "tsu"), ("テ", "te"), ("ト", "to"),
("ナ", "na"), ("ニ", "ni"), ("ヌ", "nu"), ("ネ", "ne"), ("ノ", "no"),
("ハ", "ha"), ("ヒ", "hi"), ("フ", "hu"), ("ヘ ", "he"), ("ホ", "ho"),
("マ", "ma"), ("ミ", "mi"), ("ム", "mu"), ("メ", "me"), ("モ", "mo"),
("ヤ", "ya"), ("ユ", "yu"), ("ヨ", "yo"),
("ラ", "ra"), ("リ", "ri"), ("ル", "ru"), ("レ", "re"), ("ロ", "ro"),
("ワ", "wa"), ("ヰ", "wi"), ("ヱ", "we"), ("ヲ", "wo"),
("ン", "n"),
("ガ", "ga"), ("ギ", "gi"), ("グ", "gu"), ("ゲ", "ge"), ("ゴ", "go"),
("ザ", "za"), ("ジ", "ji"), ("ズ", "zu"), ("ゼ", "ze"), ("ゾ", "zo"),
("ダ", "da"), ("ヂ", "(ji)"), ("ヅ", "(zu)"), ("デ", "de"), ("ド", "do"),
("バ", "ba"), ("ビ", "bi"), ("ブ", "bu"), ("ベ", "be"), ("ボ", "bo"),
("パ", "pa"), ("ピ", "pi"), ("プ", "pu"), ("ペ", "pe"), ("ポ", "po")
] #片假名詞庫

deck = Hiragana


使用時,依照需求將 deck 改成等於 "Hiragana"、"Katakana",或"Hiragana+Katakana"即可。

» 鐵蟒帶電池 IronPython Batteries Included

最新的 IronPython 2.0 Beta4 版除了提供安裝包之外,也包含了所有的 Python 標準模組庫。看來用 Windows 平台的朋友,已經沒有什麼理由不玩玩它了。

七月 30, 2008
» 試玩 Sphinx 之 3

試玩完前兩部之後,還是不了解 Sphinx 的話,
直接來看個 Screencast (視頻演示)吧

七月 22, 2008
» 給我五分鐘,教你用中文腳本寫一個 RPG (使用 TextRPG)

TextRPG 是我最近找到的一個好玩 python 模組,由德國人開發。
作用就是用來寫一個純文字的冒險遊戲。
目前的版本已包含了 RPG 中常見的對話、戰鬥等元素,整個遊戲可以完全由一個 python 腳本來構成。

因為實在太簡單了,所以來個五分鐘上手文好了:)

1. 安裝軟體

安裝好 Python 與 easy_install 模組後,接著安裝周蟒與 TextRPG


$ easy_install zhpy
$ easy_install textrpg


如此安裝好後就可以開始寫 RPG 了。

2. 準備環境

新建一個檔案夾,首先,用文字編輯器新增一個 rpg.ini 檔案,裡面內容如下:


[charactor]
角色=Char
樣板=template
名字=name
姓名=name
說=say
詢問=ask
動作=act
行動=act
比較技能=compete_skill
取得經驗值=get_exp
生命力=bTP
生命值==TP
攻擊力=attack
武器=weapon
防具=armor
傷害=wounds
活著=active
[story]
故事=story
儲存=save
給予經驗值=give_exp
戰鬥=battle
對話=diag
將這個檔案儲存起來。接著開啟適當的 python 程式編輯器新建一個任意檔名的檔案 (範例裡將檔案取名為 HelloRPG.twpy)

在檔案開頭加入三行敘述:

#!/usr/bin/env python
# encoding: utf-8

from rpg_lib.textrpg import *

好了,我們環境已經準備好了。

3. 撰寫故事

因為用 TextRPG 寫故事太容易了,這就編一個大雄大戰小叮噹的故事:

#!/usr/bin/env python
# encoding: utf-8

from rpg_lib.textrpg import *

大雄 = 角色()
大雄.名字="大雄"

小叮噹 = 角色()
小叮噹.名字="小叮噹"

故事("""大雄哭著跑進房間""")

大雄.說("""嗚嗚~~小叮噹,技安跟阿福欺負我""")
小叮噹.說("""口胡,大雄我受夠你了,來戰吧!""")

大雄.攻擊力 = 3
小叮噹.攻擊力 = 90

大雄.動作("""大驚失色,狼狽逃竄""")
大雄.說("""小叮噹,你發什麼瘋!""")

勝利 = 小叮噹.戰鬥(大雄)
如果 勝利:
____故事("""小叮噹打敗了大雄,從此過上清靜的日子""")
否則:
____大雄.動作("從如廢墟般的房間中爬起")
____大雄.說("""呼呼,我還是贏了""")
____故事("""大雄打敗了小叮噹,從此作者掰不下去封筆了。""")


註: 上面程式範例中的 "____" 代表4個空格。用空格來表示程式邏輯區塊是 python 的語法。

好了,我們寫好了故事,接著就是將這個檔案儲存起來。
檔案儲存好之後,我們打開 command line 程式,開始執行這個遊戲:

$ zhpy HelloRPG.twpy
大雄哭著跑進房間
大雄: 嗚嗚~~小叮噹,技安跟阿福欺負我
小叮噹: 口胡,大雄我受夠你了,來戰吧!
大雄 大驚失色,狼狽逃竄
大雄: 小叮噹,你發什麼瘋!

---battle-stats for 小叮噹---
....
---/battle-stats---

大雄 comes closer.
小叮噹: Do you want to attack 大雄? (Yes, no) Yes
You attack 大雄.
小叮噹: How do you want to fight? (Usual, defensive, target head) Usual

You won this round.
大雄 took 80 points of damage and a critical wound.

小叮噹打敗了大雄,從此過上清靜的日子

A Feedjack powered Planet
A Django site.