Archive for November, 2009

好用的Flash Builder 快速鍵( hotkey )

Friday, November 13th, 2009

這也是從Adobe TV的MAX2009 session 聽來的,完整版請到adobe.tv看。

  • Ctrl+3 : 顯示快速command列表, 可以type-and-search執行所有的eclipse command
  • Ctrl + I : 自動縮排的妙用: 由別的文字檔貼過來的文字,全選後按下此快速鍵會自動排列。文字游標(I-Beam)移到任何地方按下此快速鍵,自動移到應該要去的地方,省得你按一堆tab和space
  • Ctrl+Shift+T:是open type, 這個大家都知道,但是奧妙在type-search的地方,可以打camel case string 作為搜尋;甚至可以用wildcard search. 舉例來說,想打開AdvancedDataGrid, 不用打Adv…去找,可打ADG就好( AdvancedDataGrid )。用wildcard search: 打 *skin 會列出所有 XXXskin相關的classes
  • Code assist : Alt+. (預設) 可以重複按,會自動filter分類,本來是顯示所有的屬性,每一次會顯示各類別: property, style, event

用Google Analytics 分析Flex應用程式

Tuesday, November 10th, 2009

Google 真的太威了…

安裝說明:
http://code.google.com/apis/analytics/docs/tracking/flashTrackingSetupFlex.html#getTheLibrary
取得library:
http://code.google.com/p/gaforflash/

注意:
GA tracking 的結果,不是及時的!
測試不是能夠直接看到結果的,必須等待幾個小時再到Google Analytics網站看報告。

你也在寫Flex嗎? 那你可能要特別注意…

Tuesday, November 10th, 2009

本篇文章來自MAX2009的session:
How Not to code FLEX

演講者主要說明何謂壞程式碼(bad code),但也說壞程式碼不一定不好,只要你確定能盡快回來改正他。那何謂壞程式碼?

  • Container 元件的誤用:Container元件諸如Box, Canvas, Tile等等,他們的原本目的都是: 排列裡面的子元件。因此只要你不是拿來排版或甚至沒有給予它任何的子元件,就違背原本用意了。
    例子:

    <mx:TextInput/>
    <mx:VBox backgroundImage="blah.png" borderStyle="solid"/> <!-- 你看, 沒有小孩的容器元件-->
  • ListBase 元件的誤用: List, TileList, DataGrid 都是用來針對列表物件的選取、排序、renderer回收而生,因此,當你想要製作的元件並不需要這些功能,就不該採用List來處理。
  • local model binding: 避免直接將值給UI元件,盡量用local model binding來處理。(按:此方法還可避免元件初始化延遲所帶來的問題)
    ex:

    <mx:script>

      //這樣是不好的
      function test():void
      {
         myLabel.text = "hello";
      }

    </mx:script>
    <mx:Label id="myLabel"/>
    <mx:Script>
    //用local model binding.
    [Bindable]
    private var helloText:String = "hello";
    </mx:Script>
    <mx:Label id="myLabel" text="{helloText}"/>
  • 別把local view event 交由非常上層的元件處理。(按:這裡必須搭配cairngorm microframework 來解釋 )
    元件與元件之間的訊息傳遞,如果能在local就解決,便盡量不要拋到上層的command-frontcontroller 去處理然後又繞回來”原本的元件”。以後維護會很辛苦。
  • 不適當的容器元件使用方法:
    如果你發現你的容器元件裡面只有一個子元件(child),那可能有問題。
  • Two dots and you are out.
    兩個參照你就出局囉!

    如果你的程式碼需要進入非常多的子元件,那就有問題了。如下:

    var hey:String = myBox.thisBox.thatBox.rightLabel.text;

    這是一個本質上的問題,應該要封裝這些子元件,若其他元件需要存取裡面的值,應該要透過Event(帶資料出來) 來幫你。

  • 自以為的聰明寫法並不好。
    這種情況會發生在複雜的binding寫法,像是:

    <mx:Button id="btn" enabled="{ isCheck &amp;&amp; ( firstBtn.enabled &amp; !secondBtn.enabled) &amp;&amp; (thirdBtn.enabled|| feelGood) }"/>

    應該要用function 去處理這些binding 邏輯:

    <mx:Script>
    private function getEnabled( a:Boolea , b:Boolea , c:Boolean , d:Boolean , e:Boolean ):Boolean
    {
    //邏輯應該在這裡描述啦:
    return a && (b&&!c) &&(d||e);
    }
    </mx:Script>
    <mx:Button id="btn" enabled="{ getEnabled(isCheck,firstBtn.enabled,secondBtn.enabled,thirdBtn.enabled,feeGood) }"/>

大稻埕煙火

Sunday, November 8th, 2009

感謝小巧帶我去看煙火。坐在野餐墊上戰了七八場富饒之城後,我們順利地等到煙火。

特別喜愛像金色大煙火。沒有多餘的顏色,只有金與黑,如同一管巨大的毛筆沾著金粉墨水,緩緩地在天空黑布上抹下,不知怎麼如此均勻,彷彿盛開的花瓣,對稱的大圓。後來漸漸地垂下,像是金色的雨水沾著窗戶慢慢流下,而我們在窗沿邊拼命讚嘆,就像小孩兒第一次看見彩虹。
煙火是種表演藝術,一波又一波的花樣,前後呼應,剛剛流瀉而下的金雨,下一刻恍若退至幕前,另一道五彩煙花炸裂,一幅金葉藍花倏忽盛開。花開花落,數秒驟逝。

除了煙火本身之外,第一次體會到直接的輿論力量,後排的人們齊心吶喊請前排的民眾坐下,風行草偃,大家都能一望無際。感謝大家的公德心和同理心。