Skip to main content

97 posts tagged with "python"

View All Tags

· One min read

晚上剛看到在 TurboGears 的說明文件寫作文件中加上了張圖

這張圖上的口號是:

Onward, Documentation Writers! DID YOU CONTRIBUTE SOMETHING TODAY?

可以翻譯成:

前進吧,(寫手) 同志們 你今天為 (TurboGears 的文件) 革命事業貢獻了些什麼嗎?

TurboGears 用這麼有趣的圖 (萬里大長征) 來徵求貢獻文件,真是很 KUSO 呀...

PS: 這週末 (2/10) 有近期的第二次 TurboGears Doc Sprint 喔.

· 2 min read

OSDC.tw 07 的議程終於公佈了,有幸在一早 (9:00 am–10:20 am) 為大家暖場 :P

瀏覽一下大家的講題,發現我提供的講題似乎太白爛了些 XD

先把投稿的演講簡介放上吧

subject:

Test Driven Python 懶人包

abstract:

介紹透過 Test Driven programming 的方式. 使用簡單易懂的 Python 動態語言和模組來實際撰寫 Console 和網頁程式.

"Test Driven 是什麼?"

"編寫 Test Case 很麻煩吧."

"寫程式已經夠麻煩了,我不要另外寫 Test Case 啦"

在這個 session 中你可以學到懶人用的測試概念: 測試既不麻煩也不用特地學, 寫 Test Case 和寫一般函式沒兩樣. 程式註釋裡的範例片段也可以拿來當 Test Case

內容主要涵蓋

  • Test Driven 簡介
  • 簡單測試:使用 Nose 測試工具
  • 用寫文件的方式寫測試:使用 DocTest
  • console 程式測試
  • 使用 Python optparse 標準函式庫來產生 "-- help" 和處理 console 參數
  • 網頁程式測試:使用 Nose 測試 TurboGears 程式.

· One min read

終於將 咬一口 Python (Byte Of Python) 翻完一遍啦!

本書是當前最新的 Python 正體中文書。共有 17 章. 在有簡體中文版可以參照的情況下, 照著每一兩週翻譯一章的進度翻下來, 還是花了 3 個多月才翻完。有種發宏願繞境達成的感覺 XD

內文主體都翻譯好了,接下來剩修改錯字,排版,加入連結等等後續工作囉.

· 5 min read

好久前使用 Ultra Dev (Dreamweaver 4 網頁編輯器時代的東西) 寫 ASP 網頁時,那時其中一個超方便的功能就是在與伺服器繫結後,選擇一個 "產生詳細頁面" 的 Widget 元件,稍稍做點設定 Dreamweaver 就幫我產生一個包含資料庫表單內容的頁面。用同樣類似的方法就能完成製作新增,刪除網頁等事情。製作一套動態網頁也不用花太久時間.

上禮拜回頭去試試 Ruby On Rails 時覺得 ROR 有得分的一大優點是鷹架產生器 (scaffold).

scaffold 有什麼功能呢?scaffold 可以根據 RoR 的 ORM (Active Record) 來產生對應的 Controller/Template 程式碼,達到能基本的資料建立 / 修改 / 檢視 / 刪除 (Create/Read/Update/Delete, CRUD) 的目的。而且即使在產生出來 scaffold 後再變更資料庫欄位,產生出來的程式仍然可以正確判斷內容。使用感覺頗類似 Django 的 admin 介面或 TurboGears 的 Catwalk / DataController, 但是就可修改性而言我覺得這種作法稍勝一籌.

只是要拿 ROR 的 scaffold 繼續修改也很容易碰上問題. 因為它為了要能自動對應資料庫的改變來反應到 scaffold 介面上,所以產生出來的 code 除了基本大框架可見之外,裡面的內容都被包在不可見的單一函式裡. 要做任何修改時還是得自己大量改寫 scaffold 產生的內容 (不過還是比全自己寫來的快)

要搭一個漂亮的鷹架要多久呢? 我使用 TurboGears 來重現 scaffold 的各種列表增刪修改介面,為了取得最高的重用性,再用 widgets 改寫一遍,運用 TurboGears 現成的 Widget 已經能幫忙處理新增 / 修改表單的生成。弄好這個 CRUD 介面已花了 3 小時,而且還不像 Rails 一樣會自動去抓變動的欄位.

(3 小時?有人開始撇嘴了....)

寫這個介面當然是有目的的. 接下來在開發環境中,我試著將這個 CRUD 介面做成了 TurboGears 的樣板。並透過 tg-admin 加入一個 crud 命令。使用

tg-admin crud [model class name][controller name]

這樣的語法來產生一個包含了 controller 和 template 的資料夾

例如 model 中已經定義了一個 BookMark class, 只要在專案資料夾中輸入

$tg-admin crud BookMark admin

就會在專案資料夾中新增一個 admin 資料夾,在 controller 中使用

from admin import admin 就可以將處理 BookMark 資料的介面導入到網站中.

以後每次要做的只是簡單地修改表單欄位 (Form field) 定義和 list/show 樣板想要顯示的欄位就可以有完整的 CRUD 介面了。整個過程只要幾分鐘 (預設還會自動套用專案預設的 CSS, 啥都不改就蠻漂亮滴 XD).

目前 tg-admin crud 的做法和 ROR 的 Scaffold 最大的不同在於整份產生的介面不管是 controller 或 template 的程式都是明確的,沒有需要修改時就得重寫的黑盒子.

接下來應該是進一步降低要修改的地方,透過 widget 來將重複設定 (無論是 controller/template) 都減到最低程度。達到足夠成熟度再公開.

目前的 crud 樣板在這,已經可以運用了 CRUD Template

· 2 min read

WhatWhat Status is a web application for tracking the status of projects across an organization. It's opensource and able to download from here.

I found this project from the TurboGears book. WhatWhatStatus' default setting is for protegres and MySQL, but not for SQLite. I'd like to share my steps to use SQLite database with WhatWhat Status.

1. check out the source from svn

svn co http://cleverdevil.org/svn/optio/whatwhat/trunk

2. install textile with easy_install command

$ easy_install textile

3. config the dev.cfg file to use sqlite database

enter the whatwhat status folder, edit dev.cfg:

[global]

# WHATWHAT SPECIFIC

whatwhat.uploaddir = '%(current_dir_uri)s/whatwhat/static/files'

# DATABASE

sqlobject.dburi="sqlite://%(current_dir_uri)s/devdata.sqlite"

4. create database by tg-admin sql sql command

$ tg-admin sql sql (or tg-admin sql create)

5. add default user with catwalk

5.1 first you need to start the TurboGears toolbox

$ tg-admin toolbox

5.2. choose the catwalk in browser

5.3 select "Person" in catwalk left side menu

5.4 click "Add Person" button on top of the page

5.5 enter the following informations:

displayname: any name
email: any email
userid: admin
password:21232f297a57a5a743894a0e4a801fc3

Note that the password field is crypted, the verbose password we typed means "admin".

6. Start whatwhat status

run

$ whatwhat-start.py

enter the username/password as "admin", "admin", then click login.

all done!