公司目前正在積累Web2.0的相關技術,正好就拿Cobra來練練手。以後的Cobra將放棄基於wxPython的GUI方式,而是改用基於DHTML+Ajax的技術。在GUI上做出動態視覺效果實在是一件很繁瑣的工作,但是利用Javascript + DOM就能很容易地做到。目前僅僅將顯示反編譯結果的GUI空間進行了Web化,其中在視覺效果方面,生產力的提高還是很容易就能感受到的。
目前後端是基於Django實現的,實際上,在Cobra這個項目中,沒有與database打交道,所以Django的使用還是相對簡單的,這個web後端更多地是作為web前端與python server的一個中轉站。
是初始的介面,選擇需要反組譯碼的原始碼檔案,點擊“提交”按鈕:
“提交”之後,通過Ajax技術串連後端的web server,完成對源檔案的反組譯碼,然後反饋結果,並顯示反組譯碼的結果,如所示
在上一篇文章中,我們在GUI控制項中看到了基於path選擇某一行代碼的能力,同樣,Web化後的Cobra也支援這樣的能力,在代碼地區下方的編輯框中輸入path,點擊“goto”按鈕,就會高亮顯示path對應的那一行代碼,如所示:
Cobra的web化對我來說,已經體現出了生產力上的解放,因為Cobra的目的是可視化Python虛擬機器,既然是可視化,那主要的工作在於GUI部分。老實說,對於GUI編程,我是下過一番功夫的,學生時代發起一個基於WTL的WUI開源項目,其中包括了多個當時“時髦”的UI風格的控制項,雖然最後無疾而終,但是在Windows GUI方面,還是有相當的經驗的。即便如此,我最深的感受就是案頭的GUI編程太繁瑣了,當然,如果使用GUI庫,會節省一部分精力,但是工作量依然會非常巨大,尤其是當你需要相當炫的UI效果時。
舉個例子,對於選中程式碼的高亮,在GUI控制項中,我僅僅簡單地將那一行選中,以區別正常行,但是在Web化後的Cobra中,通過動態地改變element的class,我可以立即做出非常美觀的高亮效果,這種效果要在GUI中實現,簡直就是噩夢。
在UI方面,Web已經成熟到可以有所作為的時代了。儘管cross browser依然是一個比較艱難的話題,不過目前誕生的各個javascript架構在這方面已經能節省很多精力了。另一方面,wxPython是一個相對狹窄的技術,而web就不同了,這樣似乎對於吸引更多的人蔘與到Cobra中來也大有裨益 :)