python

Aug
31

你是怎麼使用 Python 的?

上上週的某個深夜,電動也玩夠了(一直輸),Erlang 也看煩了,上網查看 Python, RenderMan, Maya, Computer Graphics, Game, Animation, Lighting, Stereoscopy, ... 等關鍵字的各種組合過程中,發現到一篇 2009 年的文章:What do you do with Python?

Volition Inc.

非常有趣,把片段的內容翻譯過來:

  • 盡可能地,在任何地方做 log,存進 SQL 資料庫裏頭,好事後做分析。舉個例子,像是 3DS Max 開啟到完整載入一個 scene file 的時間;執行自己寫的程式的各個功能的時間。從中找出可能的問題,像是執行時間太久,然後可能自動發個信給開發人員得知。
  • 使用 wxPython 把各個工具給整合起來。這點和我有篇文章提到 Pipeline as a Glue 的想法一致。
  • 把 Python 整合進開發工具裏頭。這點有點像是在 3DS Max 裏頭加進 MaxScript。
  • 3DS Max 啟動時,自動執行一些事務:把一些目錄裏頭的 MaxScripts 整包建置出一個 .mcr 來;掃描整個 texture 目錄,加進 scene file 裏頭…等。
  • Perforce 裏頭的 assets rendering 所花費的時間、資源等資料,存進 SQL 資料庫。
  • 自內部使用的 bug tracking system 裏頭抓出 tasks/tickets,然後使用 Vista Sidebar gadget 的型式秀出來給工作同仁,讓他們第一時間以最醒目的方式得知還有多少工作要做。
  • 使用 wavelet transform 來執行 image comparison。這我猜有點像是 Perceptual Image Difference Utility (pdiff)。(注:這是個好東西)
  • Data minging!

回到家了,來事後補充一下一些想法。

Log Everywhere

的確是應該好好在四處各地做 log 的。因為 RD/TD 的產品,絕大部分都是內銷的(除非你的程式寫得太好了,或是你們公司原來的動畫部門倒掉了,但軟體公司卻反而成立且活了下來…(這有真實的例子)),而且幾乎,帶著非常大量的 bug 就直接開始運行的。bug 會很多嗎? 不就幾個會讓程式當掉或行為不正常的問題而已? Nope! 根據我自己寫的程式的經驗,bug 永遠比你想像的多,只是 user 有沒有第一時間告知你而已。

做 log,讓你有機會在『使用者沒有直接告知你程式問題的前提下』,還是有機會讓你挖出一些不正常的 bug 來。像是與 database server 的 query 時間不正常的過長;或是檔案權限不符卻還是一樣執行成功了的怪現象…等。

更重要的是,log 要有人看,有人懂得怎麼看,有人肯花時間去以各種方式從中挖出一些資訊來。

在我的工作經驗中,有兩個印象很深的經驗。

一個約莫 100~200 人使用的系統,會把使用者所有的操作,按一個 button 或是 menu item 都 log 下來,log 檔非常的大,還使用了 log rotation。但問題是,沒有人去分析,只有在有人抱怨系統太慢或是 out of service 時才看!!! 我不禁自己在想,為什麼平時沒有好好看待這個 log files?

另一個例子是,有次,我們終於結束了一個 animation project,距離下個 project 還有點空閒時間,於是我更改了 render farm 裏頭的 queuing system,讓所有的 job dispatcher, rendering node, machine resources 都會下 log 進一台資料庫,希望在下一個 project 執行完後,從中找到一些現象。

非常糗的是,那台資料庫的機器常常空間爆了,我在苦無任何方法讓它空間改善下,加上自暴自棄的情況下,最後關閉了這個 log 機制。

待續…

Mar
26

Introducing Python 的影片

以非常.....宅.....的方式介紹 Python,整個畫面很 low, 很南方公園的 video。雖然這樣,不過裏頭出現很多 Python Community 的大頭!

Mar
13

Interesting Python Shells

I've found several very interesting and active python shells. Each has it's own strength and the most often mentioned feature is syntax highlight, auto-complete and function attributes info.

Here they are:

IPython

ipython

bpython

bpython

DreamPie

dreampie

Interactive server-side Python shell

shell.appspot.com

Jan
27

TIFF file handling in PIL

# TIFF is a flexible, if somewhat aged, image file format originally
# defined by Aldus. Although TIFF supports a wide variety of pixel
# layouts and compression methods, the name doesn't really stand for
# "thousands of incompatible file formats," it just feels that way.

thousands of incompatible file formats, 這個的確有挖苦到 TIFF 這個格式 XD

Feb
8

Maya Scripting: MEL V.S. Python

day fourty: the endless fight by petite corneille @ flickr

Maya scripting 現在有了 MEL 與 Python 可供選擇,對於大部分的 Maya 使用者來說,這是件微不足道的事,但對於天天使用與撰寫 Maya scripting 的人來說(ex, TD?!)(或保守一點的說,很有機會被要求寫點程式的人),這重要極了。

個人淺見,Python 與之後由 Luma Pictures 的 Chad Dombrova 所推出的 pymel (0.7.8),是 Autodesk 買下 Maya 後,在 8.5 所做的 features 裏頭,最最重要的一點了。好吧,我是以 RD/TD/SD 人員的角度來看事的,請先暫時原諒我這有點狹隘的說詞,然後接著繼續看文章。

Maya 8.5 發表以前,在 Maya 上頭工作的技術人員,除了和大家一樣要去了解與使用 Maya 以外(說真的,Maya 的學習曲線有點長,進入門檻有點兒高,以致於很多資訊系所的電腦圖學實驗室,都不容易利用這個工具來做點什麼,實在很可惜),可能還需要去了解一下 Maya ascii file format, Maya nodes, Hierarchy in a Maya scene file, Mel, Maya C++ API, 技術名詞, …好不容易似懂非懂一些東西後,就是寫些程式來試試看。

舉些個例子。如果你想寫個可以自動幫你架好骨架的 joints 與一些 IK/FK 的設定的東西,你可以利用 Mel 來做到;如果你希望有一個特別的材質球,它會在你的模型有互相穿刺時,用紅色這種非常鮮豔且帶警告意味的顏色來提醒人,你可以用 C++ API 寫個 plugin 來提供一個特製化的 material node;如果你想用透過一個放在 Maya shelf 上頭的按鈕,讓 lighter 可以很快的下算圖指令的話,那你可以使用 Mel 外加 RMS/MtoR 提供的指令來做到;如果你想利用 locator 來實作 instance(一些 Maya instance 無法做到的情況下),同時要讓這個 locator 秀出原 reference model 的各種動態的話,你得用 Maya API 外加對於 Maya node 的了解(當然,你也可以使用 billboard(sprite) 做到);…

事情就是這麼複雜,以致於要訓練出一位可以依靠的 3D/CG TD,實在很花時間。如果很不幸地又沒辦法好好留住他,或是他個人不夠積極與拼命學習的話,可能浪費了兩三年,然後拍拍屁股走人,什麼都沒有留下來!!

這邊我們也許應該換個觀點,先來想想:「為什麼 Maya 把事情搞得這麼麻煩?」

Feb
5

把 MSN 放進 Maya 裏頭?!

Maya ChatWin by Chris Chia

Chris Chia 在他的 blog 發表了一篇 Maya ChatWin v0.6.1 (100% Built on Python),完成了一件非常有趣的事:在 Autodesk Maya 裏頭實作了一個 MSN 外加一個遠端的 script editor 出來。

這個 Maya ChatWin 運作起來就像 MSN,只是聯絡人清單是來自於同網段(內網)的電腦,目的…大概是讓你工作到一半有個小問題,想找人問一下時使用的吧,我想基本立意應該是這樣。它另外比較有趣的功能是,可以直接遠端傳送 mel 或 python script,所以可以做到遠端執行一些 fixing scripts 之類的。這功能目前是單向的,不過也夠應付 supporting TD 使用。

我個人覺得,MSN(或更正確一點的說法是 instant messenger)這功能要很實用,得看大家的使用情況,畢竟當你已經有一個更好用的 IM 時(ex, MSN, Pidgin, Adium, ...),你並不會覺得有需要再有一個 IM。不過當這個 IM 與 remote mel/python scripting 結合時,就顯得有價值一些了。

digimax_im_list對於 IM,太極是試著使用自行架設一個 XMPP server(by ejabberd),client 預設是使用 Pidgin,使用率其實不高,原因之一是我們還不是很了解怎麼好好善用這個 IM,有時亂用反而容易影響到其它人,另一方面是,有些情況還不如直接走過去當面問或聊來得好。RD/TD 對於 IM 的使用率高一些,尤其在於一些 scripting writing 或 tool 使用方法之類的,這些問題的答案常常是一兩行 commands,就很適合。

Maya 預設的 commandPort 目前只支援 mel script,所以這個 Maya ChatWin 可以支援 python script 是個非常吸引人的工作,就我所知,有不少 studio 的 TD 都非常渴望 Maya 有這個功能,相信不久的未來 Autodesk 會加入才是。

PS. Koichi Tamura 有寫了一個 Python CommandPort 的玩意兒,而且是 open source 的,有興趣的人可以去玩玩。

PS II. ejabberd 與 pidgin 的網址,最後頭都是 im 也,實在很有趣 ^^

Syndicate content