2012年6月22日 星期五

Pylons profiling工具 -- repoze.profile

repoze.profile可以針對WSGI進行完整的profiling,本文特別針對Pylons的使用做簡單說明

1. 安裝
只要使用
$ easy_install repoze.profile
下完指令即可安裝完成
 
2. 設定
直接在pylons的middleware.py修改如下

from repoze.profile.profiler import AccumulatingProfileMiddleware

# ...

def make_app(.....):
    load_environment(global_conf, app_conf)
    app = PylonsApp()

    app = AccumulatingProfileMiddleware(
        app,
        log_filename='/tmp/profiling.log',
        cachegrind_filename='/tmp/cachegrind.out',
        discard_first_request=True,
        flush_at_shutdown=True,
        path='/__profile__'
    )

    app = RoutesMiddleware(app, config['routes.map'])
    app = SessionMiddleware(app, config)
    app = CacheMiddleware(app, config)

    #.....
 

log_filename代表profiling log檔案存放位置
cachegrind_filename代表要給KCachegrind工具觀看的profiling log檔案存放位置
discard_first_request代表要不要忽略第一次檢視的結果,因為通常第一次的數據都會比較不正常而影響了整體的結果
flush_at_shutdown代表middleware instance不存在時是否要將profiling結果刪掉
path顧名思義就是利用browser檢視profile結果的URI
 
設定完成後重起httpd server
 
3. 確認結果
確認 http://localhost/__profile__ 能否存取
理論上可以看到畫面如下
 
 
4. 使用KCachegrind檢視
 
5. 參考資料

http://pypi.python.org/pypi/repoze.profile
http://docs.repoze.org/profile/#viewing-the-profile-statistics
http://nickmurdoch.livejournal.com/392632.html

2012年6月7日 星期四

Perforce Console 版本教學

以下教學同時適用於mac版與linux版

1. 下載perforce console版

請至 http://www.perforce.com/downloads/complete_list 下載The Perforce Command-Line Client (P4),檔案會是一個執行檔。下載後請放置於/usr/bin/並修改檔案權限。

sudo chmod 755 /usr/bin/p4

2. 設定環境變數

修改~/.bashrc,加入下列資訊
export P4HOST={SERVER HOSTNAME}
export P4PORT={PORT}
export P4CLIENT={WORKSPACE NAME}
export P4USER={USERNAME}
unset P4CHARSET


P4CHARSET參數視client與server之間的編碼版本決定,細節可見 http://www.perforce.com/perforce/doc.current/manuals/cmdref/env.P4CHARSET.html

其他環境變數可參見 http://www.perforce.com/perforce/doc.current/manuals/p4guide/02_config.html 說明

接著重新載入.bashrc後直接執行p4看看是否與server連結正常。如果出現Perforce client error等字樣,代表環境變數設定還有問題。若成功就會出現相關的help指令說明。


3. 登入perforce

接著輸入p4 login,就會詢問登入密碼,登入後就會顯示成功登入的訊息。如果實在嫌每次都要登入登出麻煩,可以直接在.bashrc中間指定P4PASSWD參數(但因為放置於.bashrc等於是明碼儲存,並不建議)


p4 login 


4.  建立workspace


若此台電腦尚未開啟過workspace,只要執行p4 client即可,便會跳出一個vim文字編輯畫面,讓您修改此workspace相關訊息,儲存後就會在server上建立一個新的workspace。比較重要的參數就是Client、Root與View這幾個參數,Client就是屆時在清單會看到的workspace名稱,Root則是程式碼儲存的根目錄,View則是會決定你要同步出來的路徑深度。

p4 client

接著可用 p4 workspaces -u 確認目前此user的workspace狀態,並檢查剛剛的workspace是否有建立 

p4 workspaces -u {USERNAME}



若要看更詳細的workspace訊息,可用 p4 client -o 指令把前面vim編輯的訊息倒出來

p4 client -o {WORKSPACE NAME}

若要刪除workspace,執行 p4 client -d 即可

p4 client -d {WORKSPACE NAME}


5. 倒出程式碼

p4 sync {PATH ON SERVER}/...
目錄會幫忙開好


強制sync到最新版
p4 sync -f {PATH ON SERVER}/...


p4 sync -n 沒有真的同步,只是把結果先倒出來

p4 sync -n ./... 列出目前路徑下還有哪些檔案沒有up-to-date


如果出現Request too large代表此路徑下檔案太多,需要縮小範圍來sync


6. 確認檔案狀況

p4 have {FILENAME} 確認該檔案在client端目前版本可用p4 have *

p4 files {FILENAME} 確認該檔案在server端的最新版本可用p4 files *  

p4 fstat {FILENAME} 確認該檔案更詳細的訊息。其中還可以看到誰也開了這檔案。可用p4 fstat *


p4 changes {FILENAME} 列出檔案各個版本與歷史紀錄


p4 changes -m {MAX} {FILENAME} 只列出該檔案最近的幾個版本與紀錄

p4 changes -i ./... 列出目前目錄下所有子目錄所有檔案的 各個版本與歷史紀錄


p4 filelog {FILENAME} 列出更詳細的版本與歷史紀錄

7. 修改檔案 

p4 add {FILENAME} 新增檔案


p4 diff {FILENAME} 假設你正在修改revision #4,就會比較你現在改的跟原本revision #4的差別


p4 diff {FILENAME}#{REVISION} 比較你現在改的跟特定revision


p4 diff {FILENAME}#HEAD 比較你現在改的跟特定revision跟server上最新的revision

p4 diff2 {FILENAME}#{REVISION1} {FILENAME}#{REVISION2} 比較server上兩個revision

p4 diff -se 列出你自己沒有先edit就強制編輯的檔案

p4 diff -se | p4 -x -edit 將上述的檔案通通edit開

p4 diff -sd 察看哪些檔案不是用p4 delete而是自己手動在本地刪除的 

p4 edit {FILENAME} 將程式碼check-out出來


p4 submit {FILENAME} 將程式碼check-in進去

p4 submit -d {DESC} 將程式碼check-in進去並補上說明

p4 revert {FILENAME} 直接將檔案倒回編輯時check-out的原樣 

p4 revert 直接將所有開啟的檔案全部倒回

p4 delete {FILENAME} 刪除特定檔案


p4 sync {FILENAME}#{REVISION} 將本地檔案倒回某個版本 


p4 sync ./... 更新該目錄與子目錄下所有的檔案至server的的最新revision


p4 opened 列出目前已經check-out的檔案

p4 move {FILENAME} {NEW FILENAME or NEW FILEPATH} 搬移或rename某個檔案 (更名亦可用p4 rename {OLD FILENAME} {NEW FILENAME})


p4 restore {FILENAME}#{REVISION} 將某個檔案倒回到特定版本


p4 resolved 解決某個檔案的衝突


8. 進階用法


p4 tag -l {LABEL} {FILENAME} 將某個檔案加入特定label



p4 label {LABEL} 建立或編輯label


p4 labels -u {USERNAME} 列出該user所有的label

p4 labels ./... 列出此路徑下存在的label


p4 sync @{LABEL}
同步該label中的所有文件


p4 files @
{LABEL}
查看該label所包含的文件列表


p4 branch {BRANCHNAME} 建立branch


p4 branches -u {USERNAME} 顯示該使用者擁有的branch


p4 integrate -b
{BRANCHNAME}
合併該brach中的文件

p4 dirs -H .
顯示當前目錄



9. 求助

p4 help 列出重要指令說明


p4 help commands 列出所有指令的說明


p4 help {COMMAND} 針對特定指令的更詳細說明


p4 help revisions 列出針對檔案版本的指令說明,例如#rev或@change的意義