MacroViz

多媒體設計、數位學習、英語學習、日語學習

Archive for 十二月, 2008

增加 Flex 的運作效率

當 Flex 專案變龐大,Building workspace (編譯專案) 的速度會變得極慢。不過野部也發現一些方法,可以大幅提升 Building workspace 的速度。
每次 Building workspace 之後,我們可以看到 0 errors, 0 warnings, 0 infos。提升速度的竅門,在於讓這三個數字都保持 0。 errors 並不可怕,因為修正之後,errors 並不會再次出現,拖慢 Building workspace 的速度。
真正可怕的是 warnings。warnings 的產生,野部歸納為下列幾種原因:

  1. 函式的宣告,並未宣告 public 或 private,就直接以 function 開頭。
  2. 函式的宣告,並未宣告類型,如 void、String、Number 等,就直接在 (…) 後接上 {…}。
  3. 變數的宣告,並未宣告 public 或 private,就直接以 var 開頭。
  4. 變數的宣告,並未宣告類型,如String、Number等,就直接以 ; 結束。
  5. CSS 宣告的 Tag ,並未在 Application 的 MXML 中出現。
  6. 外部 CSS 套用到 Custom component 上。

第 1 ~ 4 項,留心改善便可。第5、6項,其實是吃掉 Building workspace 的元兇。在Adobe / Macromedia 網頁設計工具中,例如 Flex、Dreamweaver、或是 Flash,針對 CSS 的運用時機,可分為 Design mode/time (設計時期之外觀) 和 Run time (執行時期之外觀)。
當我們在 Flex 使用 <mx:Style 標籤時,不論是外部或者內部 CSS,就是使用了 Design mode CSS。而每次存檔,Design mode CSS 都必須重新套用到整個專案,並輸出成 swf 檔,速度一定會很慢。
有時候,我們不得不將外部 CSS 套用到 Custom component (自訂元件,類似 Java Beans 的觀念,BCB or VB 也具有相同或類似的運作觀念)上。雖然外部 CSS 對 Custom component 的 Control (設計控件) 仍具有影響力,但是會出現一大串 warnings。
所以,野部提出幾個變通的方法。

  1. 盡量減少 Custom component,改用 Application 搭配 SWFLoader,並根據不同的 Application 設計不同的外部 CSS。 每次 Custom component 的存檔,會影響所有引用這個 Custom component 的 MXML 重新編譯,這也是拖慢 Building workspace 的速度的另一個主因。
  2. 用 Actionscript 產生 Control,不過這樣做,就走回 JAVA 在人機介面設計上,被人家詬病的老路了。不過野部知道,有些從 JAVA 領域來到 Flex 領域的設計師,極端偏好此道。優點是執行效率真的極端的高,缺點是這個專案無法讓太多不同背景的人共同 teamwork。如:視覺設計師、或專案經理。專案的邏輯只有程式設計師自己看得懂而已。萬一這位程式設計師離開專案,這專案就掛定了。
  3. 將 Desing mode CSS Complie 成 Run time CSS。Run time CSS 的哲學是,程式開始執行才導入外部 CSS 去改變外觀。不但可以避開 Design mode CSS 重新套用的低效能,也不會產生任何 warnings。詳細做法,可參考 Flex Help 內的幾個主題:
  1. Using external style sheets
  2. Loading style sheets at run time

個人認為,上列三種方式,可靈活變通運用,不必極端。用得好,就是有效,用得不好,那就不如不用。

另外,針對除錯效率方面。雖然 Flex Builder 在 Eclipse 開發環境下,已經整合了自動提示 errors 的功能。可是過度依賴這個功能,是不好的觀念。而且,每次都讓開發環境去提示,可是得浪費掉很多效能和時間的。野部的 Flex 專案開發環境,最高消耗掉 700 多 mb 的記憶體。
正確的開發觀念是,一次就把程式寫對了,別讓開發環境來提醒。然而,弔詭的是,開發環境沒 errors,不見得寫下的程式就是對的。下面兩種情形,就是這樣的:

  1. 某些 Default control 被 implement 時所呼叫的 Manager 有 bug,而我們並不知道這樣的 bug 存在。目前已知的情形是 ComboBox 所呼叫的 IPopUpManager 有這個情形。解決方法是要自行先 import 這個 Manager。聽說 DragManager也有。由於許多 Control 被 implement 都會使用到 IPopUpManger 和 DragManager,例如 ComboBox 或者 List,當發現下拉清單拉不下來時,就是了。所以,還是養成好習慣,調用 Manager 時,用和 JAVA 一樣嚴謹的態度完全 import,甚至開發環境沒有提醒到的,還是要強制 import。
  2. 濫用的 parentApplication。在 Custom component 內的 parentApplication 語法會去參照引用這個 Application/Custom component 的最上層的 Application,不論中間引用的 n 層的 Application/Custom component。所以,可能是基於運算效能上的考量,開發環境並不會去偵測和除錯 parentApplication 語法,成了隱形的炸彈。parentApplication 絕對不是唯一的解決方案,還有很多寫法可以取代。parentApplication 用法可參考 Flex Help:
  1. About the Application object
  2. Passing data

還有一個小技巧,對設計師在 layout 上影響不大的一些 Control 就可以善加使用迴圈 + this[字串] 讓 Actionscript 自動產生或者批次處理大量的 Control,或者使用 repeater 達到同樣的目的。不但可以大幅減少 MXML 和 as 的檔案長度、增加程式的可讀性,並且不用重複撰寫多次類似的函式。

這些經驗的歸納,來自於野部不斷犯的錯,以及工作夥伴們,用血淚堆砌的開發經驗,希望對大家在開發 Flex 專案上,有所幫助。

posted by 野部 聖広 in Actionscript 3.0,Adobe Flash,Adobe Flex and have Comments (2)

終於親眼見證胡桃鉗了

圖片來源: The Nutcracker Ballet – A Christmas Tradition

為什麼男生就不能喜歡芭蕾舞劇呢?今天終於非常感動的見識到了整套完整版的胡桃鉗了。

現場樂隊演奏的音樂,果然氣勢磅礡。舞台上演的故事,和 wiki 介紹的差不多。只是送胡桃鉗士兵的是獨眼龍的uncle。

http://www.youtube.com/watch?v=rxtp-Mb5OI8

女主角小女孩克蕾拉,大概後面就是坐著吃糖果,拍手。

http://www.youtube.com/watch?v=Oj2UyPTLLtU&feature=related

wiki 的介紹

http://zh.wikipedia.org/w/index.php?title=%E8%83%A1%E6%A1%83%E5%A4%B9%E5%AD%90&variant=zh-tw

看完整個芭蕾舞劇才知道,之前我的音樂集並非完全曲目,大概就是收集的開場白和各國之舞:西班牙、阿拉伯、中國、俄羅斯(Trepak)、Mirliton (好像翻成銀笛之舞)等。

這些樂曲之所以不陌生,除了手上有的CD之外,其實是因為從小任天堂許多電玩就採用這些當背景音樂。野部認為用最多的應該是パロディウス吧(當年中文翻譯成科拿米神話)…囧

值得一堤的是這次的燈控做的很好,舞台道具和背景雖然很大,但是全部都是活動式的。甚至小女孩的床,不用人推,還會自己動。不知道裡面是有什麼機關、藏了人、還是用遙控的?

魔術師現場還秀了幾手魔術,最後聖誕樹也長高了。

老鼠王被刀子捅死後,還被其他老鼠們抬了出去。看到這裡,大家都笑了。

另外,俄羅斯女郎有露出肚皮,可能有鍛鍊吧,居然可以清晰的看到八塊肌肉,太驚人了。俄羅斯的王子要一直把她檯上檯下,也是挺了不起的。每檯上去一次,現場觀眾就拍手一次。

中國之舞的部分,男主角是洋人,後面就綁了個小辮子象徵一下。他上半身穿著過年的大紅衣,下半身穿緊身褲。兩個女主角就是穿著旗袍跳芭蕾,還真的是挺新鮮的。

聽說每年演出內容都不太一樣,期待明年再看一次。

http://www.youtube.com/watch?v=qR2wJxheDpM

P.S. 居然在Youtube 找到一模一樣的,後面的就是今天看到的第二幕的背景。

posted by 野部 聖広 in 節慶,美國的生活 and have No Comments

布魯明頓的冬天

路冰樹葉禿

褲薄身體寒

又臨冬時節

把食進言歡

posted by 野部 聖広 in 美國的生活 and have No Comments

硬碟空間是被哪隻怪獸給吃掉的?

可能會有些人有此疑問,明明把軟體裝在 D 槽,為什麼 C 槽的空間還是會大量減少呢?
(把 Windows 裝在D槽的魔人和 Linux 的愛用者應該不用看此文)

有下列幾種原因:

(一) 這套軟體裝了一些字型到 Window 系統資料夾,通常在 C 槽。
(二) 這套軟體把原始安裝檔案留在 C 槽。
(三) 這套軟體需要下載 Microsoft .Net Framework 等公用元件,不得不裝在 C 槽。
(四) 這套軟體操作時,所下載的一些檔案資源,或者使用者產生的檔案,自動跑到 C 槽。如 PowerPoint 的樣板,Word 的藝廊,Windows Media Player 的面板檔案。
(五) 筆電休眠時的記憶體 Dump 檔,系統預設的 Swap 虛擬記憶體檔,軟體預設的虛擬記憶體檔,都是放在 D 槽。

如果是 Windows 的愛用者,解決的方法永遠只有一個,就是想辦法讓你的 C 槽夠大吧,最好能夠無限大 XD。
宇宙霹靂天下無敵刀槍不入的終極方法就是把 Windows 移除,改裝 Ubuntu Linux 8.10 吧。 

下表打 ◎ 表示具有該情形的軟體

軟體名稱 (一)字型 (二)原始檔 (三)公用元件 (四)產生檔案 (五)暫存檔
Microsoft Office    
Microsoft Visual Studio      
Microsoft Encarta      
Borland C++ 2006        
Adobe Photoshop, Illustrator, Acrobat  
Adobe/Macromedia Dreamweaver, Flash, Fireworks        
Adobe/Macromedia Flex Builder 3        
Windows Swap, Memory Dump File        
Windows Media Player        
Microsoft Internet Explorer Cache Files        
Firefox Cache Files        

本表由野部歸納整理

為何整理這張表呢?原因是剛剛裝完 Adobe CS4 測試版,才發現,C 槽硬碟空間消失一大塊。看來 Adobe 早就已經比 Microsoft Office 還像吃資源怪物了。

介紹一套軟體 OverDisk。在OverDisk 下,硬碟就像是塊大餅乾,用 OverDisk 來看看到底哪隻怪獸吃最多吧。http://users.forthnet.gr/pat/efotinis/programs/overdisk.html

 

posted by 野部 聖広 in 硬體相關 and have No Comments