上上週的某個深夜,電動也玩夠了(一直輸),Erlang 也看煩了,上網查看 Python, RenderMan, Maya, Computer Graphics, Game, Animation, Lighting, Stereoscopy, … 等關鍵字的各種組合過程中,發現到一篇 2009 年的文章:What do you do with Python?。
非常有趣,把片段的內容翻譯過來:
- 盡可能地,在任何地方做 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 機制。
待續…