Aedis.Ju

2007年6月11日星期一

Today is Adobe's day!

Today is Adobe AIR's day!
Today is Adobe Flex3/Moxie Beta 1's day!
Today is Adobe Flash Player 9 Update 3 Beta 1 's day!

Today is Real Adobe's day!

原來好戲真是在后頭啊!

DOWNLOAD FLEX BUILDER BETA 1
DOWNLOAD FLEX SDK BETA 1

Download Adobe AIR
Download the Adobe® AIR™ SDK

2007年6月8日星期五

Now, Let's talk about Flex3/Moxie! - Part Ⅴ

這次是關于Apollo的東西,以后你可以直接在FLEX3建Apollo了。

疑問是為什么Ted的圖片上有些東西沒有顯示出來呢。聽說有重頭戲哦。拭目以待吧。

2007年6月7日星期四

Now, Let's talk about Flex3/Moxie! - Part Ⅳ

今天Ted一開始就自己提了問題,明顯就是一副大有文章的氣勢。

"FrogStar",release of Flash Player 9!Frog-Prince! Not version 10.0!

把flex framework整合到FrogStar中, 大量的減少了FLEX SWF的大小。以前的東西總是BIG,BIGGER,BIGGERER, 現在的話聽說能一直BIG,已經是有很大的進步啦。

到時候我們能見到什么樣的Frog-Prince呢?當進入一個站點用到FLEX3/Moxie的時候,Flex3 framework會整合到你的Frog-Prince中,當你再去訪問其他擁有Flex3/Moxie的時候,其他站點會直接使用framework,因為Flash Player 有framework之后,swf可以不再需要把framework編譯到里面進去,也只是使用這一原理減少了SWF的大小。

framework支持版本選擇哦,因為如果單一的版本,說明大家都一定要使用相同的framework, 被束縛的東西是有局限性和短暫的生命力的。

RSL指的是Runtime Shared Libraries,Ted介紹了一大堆它的好處...可以選擇framework version,但其并不代表了所有人都能擁有修改cache of RSL的能力,為了安全,它需要Adobe的授權。

明天將會介紹Apollo的東西,會有Apollo的新控件和一些新功能。

Ted今天的確是風光無限啦,畢竟是ADOBE的傳教士,果然不是一般得能說,不過鄧小平說過"實踐是檢驗真理的唯一標準!"。

Practice is the sole criterion for testing truth! So! Let me try!

2007年6月6日星期三

Flex Tip of the Day & FlexTips

記得我整理過的AS Tips Of the Day 嗎?

現在出現了Flex Tip of the Day & FlexTips
Flex Tip of the Day是個PersonalBlog,暫時只有一篇叫作inline styles not permitted on UITextField。而FlexTips創建者希望大家平常能把平常在Flex開發中的小點子整合在一起,作者已經貢獻出了一些。

個人的想法是這些東西好是好,但實施起來不知道有沒有頑強的生命力。我的做法是把flexcoders等組織的信件一起扔到Gmail中然后進行搜索,多快啊。

Now, Let's talk about Flex3/Moxie! - Part Ⅲ

I was not shocked today!

Advanced DataGrid:
不是什么新鮮玩意,而且有偷去別人構思之嫌,這不是TreeGrid么?!所以最好還是取個Advanced TreeGrid的名字比較好服眾!
TreeGridLinkOne TreeGridLinkTwo
這早已經是Flex的構思及產物了,有什么區別么?在Adobe下的更快的編譯速度+編寫規約+Adobe人員制作?
新的玩意總要會帶著副產品的出現,下面就是由Adobe's Advanced DataGrid帶來的孩子們:
mx.collections.HierarchicalData;
mx.collections.Grouping;
mx.collections.GroupingCollection;
mx.collections.GroupingField;
mx.collections.HierarchicalCollectionView;
mx.collections.HierarchicalCollectionViewCursor;
mx.collections.ListCollectionView;
mx.collections.SummaryField;
mx.collections.SummaryObject;
mx.collections.SummaryRow;

Deep Linking:
一些某些人需要,某些人不需要的東西。這東西其實在Flex2已經可以完成部分的功能了。繼續帶來了Adobe的孩子們:
mx.events.BrowserChangeEvent;
mx.managers.IBrowserManager;
mx.managers.BrowserManager;
mx.utils.URLUtil;
Application.historyManagementEnabled

Resource Bundles and Runtime Localization:
暫時還是滿少接觸到的東西,properties是你會在工程目錄下找到的東西,你可以進行相關的配置,exactly like a Java-based properties file,比如你可以輕易的在RUNTIME用Resource Bundles對多語言的支持,最終引入到ResourceManager,Help里面倒是有蠻多的例子,也許是Flex3把load&Recompiled的速度提高了吧。

Flex Component Kit for Flash CS3:
恩,又繼續吸引了FLASH的愛好者們開發FLEX。

I wish I will be shocked tomorrow!

2007年6月5日星期二

Now, Let's talk about Flex3/Moxie! - Part Ⅱ

今天Ted的Flex Details繼續給我們展示Flex3/Moxie,其中有3個个人认为比较重要的部分


Compilation:
优化了MXML/COMPC/ASC Compilers,想升级一个版本,我想这东西应该是个必需品吧,但是到什么样的程度,我们拭目以待。


Flex Profiling:
一個So Smart的內存監視器,讀取一個Application來展示各部分的細節所占用的內存量,然后根据实际情况可以对代码进行优化。不過個人思考的是這東西是怎么工作的,在Ted的例子中,我們發現它是讀取一個swf文件,然后再出現Flex Profiling View,難道它能從二進制的swf中來反編譯出Application個細節部分的組成?希望我错了。這是我自己非常期待想知道的問題。


Multiple SDK Support:
這是我自己非常期待的東西,就像JAVA1.4到JAVA5.0切換那么簡單,而且對我受益匪淺。不得不說的是我現在的項目還是2.0,別的小組已經是2.0.1 Hotfix2,在用哪個編譯器的時候,這是一個非常之煩人的問題,我現在只能一個裝到Eclipse,一個單獨裝個Flex SDK,不知道大家在Flex3/Moxie之前有什么好的解決方法呢?


我越来越觉得Flex3/Moxie開始Adobe傾向化,就象Dreamweaver一样...Design/Dev...


有消息说明天Ted将会公布一些新的控件和AS支持SQL的情况。新的控件中包括了‘强大的’DataGrid,真令人期待啊。恩,不得不说的是现在的Flex2 DataGrid完全满足不了用户对它的需求,满足了需求,在性能发面确是Bull Shit!希望明天的DataGrid能给我一个全新的感觉。

RXNA

RXNA是中文的RIA聚合器,它有Keshin發起,RIS全球华人(http://www.j2eemx.com)的站长Bing主力推廣。

今天起我將正式加入RXNA,希望對RIA開發者包括自己有所幫助。

Now, Let's talk about Flex3/Moxie! - Part Ⅰ


自從Ted上周說要發布一些Flex3/Moxie的細節,我就在一直關注,今天終于讓我看到了傳說中的Flex3/Moxie哦!一直以來,個人總覺得一個好的FLEX高手并不一定能制造出一個好的作品,很大一部分原因是在給用戶豐富體驗的同時不能給客戶帶來視覺沖擊,所以一直曾考慮應該專門招一名美工設計師來完成最后的美化工作。Flex3/Moxie畢竟是出自設計世家Adobe的東西,Ted's Monday讓我們繼續看到了Better Design:


Skin Importer:
可以從圖片文件夾,SWC,SWF導入到Flex3/Moxie Project。今天你導了么?


Design View Zoom/Pan:
這東西能讓你放大版面,做更好的布局工作。今天你對齊了么?

Design Mode support for ItemRenderers:
顧名思義,Design Mode支持了List,HorizontalList,TileList,Tree,DataGrid等的itemRenderers,并支持靜態數據在上面的顯示。今天你愛騰了么?


Advanced Constraints:
mx:ConstraintRow & mx:ConstraintColumn將會是新的玩意,會讓東西布局可以再細分化。今天你還是瘋(分)的么?


CS3 Suite integration:
Flash CS3 Skinning
Illustrator CS3 Skinning
PhotoShop CS3 Skinning
Fireworks CS3 Skinning
FireWorks CS3 - Flex components & Save as MXML/CSS
Flash CS3 - Flex Component Kit (Container support coming)
Skin Importer - See Above
又是廣告?今天你看了么?


CSS Outline:
CSS大綱,一個Application下面有怎么樣的CSS,一個BUTTON下面有怎么樣的CSS,完全可以看到。今天你還要偷窺么?

CSS Design View:
除了CSS Outline,還是有這個CSS的Design View,要注意的是,這可是個狠角色哦,這樣的話就不用每次要跑Flex 2 Style Explorer調這些破玩意啦。今天你調戲過Flex了么?



在Better Design的同時我可不太希望看到它的臃腫化,而且我還在繼續期待FLEX3(Moxie)在MemoryLeak的改進!

2007年5月24日星期四

ActionScript3 Tip Of the Day Update!(Version 20070518)


以前就介绍过ActionScript3 Tip Of the Day,只要过了英语四级就不会有难度,这次的更新不仅是内容上的扩张和补充,最重要的是,作者已经为我们清楚得分好了章节,所以有些内容也是有重复的。









Announce: senocular has the real copyWrite!

通过DataField来正确处理DataGrid的ColumnIndex的变化

由于客户需求的不确定,我们常常会修改DataGrid里面的内容,时而多一列时而少一列,因此它引发了DataGrid的ColumnIndex的变化。
当我们在AcitonScript代码中对columnIndex进行判断时,常常会忘记改变columnIndex从而引发bug。

sample.mxml

<mx:DataGrid id="PersonInfoDG" dataProvider="{PersonInfo_ARRAY}">
<mx:columns>
<mx:Array>
<mx:DataGridColumn headerText="First Name" dataField="firstName"/>
<mx:DataGridColumn headerText="Last Name" dataField="lastName"/>
</mx:Array>
</mx:columns>
</mx:DataGrid>


sample.as

[Bindable]
private var PersonInfo_ARRAY:Array =
[{firstName:"aaa", lastName:"bbb"},
{firstName:"ccc", lastName:"ddd"}];

private function initListener():void {
PersonInfoDG.addEventListener(ListEvent.ITEM_DOUBLE_CLICK, doDoubleClick);
}

private function doDoubleClick(event:ListEvent):void {
if (event.rowIndex > 0) {
if(event.columnIndex == 1) {
Alert.show("It's Last Name Column!")
}
}
}


增加了Address字段

sample.mxml

<mx:DataGrid creationComplete="initListener()" id="PersonInfoDG" dataProvider="{PersonInfo_ARRAY}"
doubleClickEnabled="true">
<mx:columns>
<mx:Array>
<mx:DataGridColumn headerText="First Name" dataField="firstName"/>
<mx:DataGridColumn headerText="Address" dataField="address"/>
<mx:DataGridColumn headerText="Last Name" dataField="lastName"/>
</mx:Array>
</mx:columns>
</mx:DataGrid>


sample.as

[Bindable]
private var PersonInfo_ARRAY:Array =
[{firstName:"aaa", lastName:"bbb", address:"AB Road"},
{firstName:"ccc", lastName:"ddd", address:"CD Road"}];
private function initListener():void {
PersonInfoDG.addEventListener(ListEvent.ITEM_DOUBLE_CLICK, doDoubleClick);
}

private function doDoubleClick(event:ListEvent):void {
if (event.rowIndex > 0) {
if(event.columnIndex == 1) {
Alert.show("It's Last Name Column!")//It's Wrong! It has change to 2
}
}
}

那我们怎么样才能今可能得减少这种错误呢?我们发现,在columnIndex在跟着不断变化的同时,我们所要表示的内容一般是不变的。是的,我们可以通过字段dataField来进行判断,而且不会有影响。


private function doDoubleClick(event:ListEvent):void {
if (event.rowIndex > 0) {
for(var i:Number; i < PersonInfoDG.columns.length; i++) {
if(PersonInfoDG.columns[i].dataField == "lastName" && i == event.rowIndex) {
Alert.show("It's Last Name Column!")//It's Right! :)
Break;
}
}
}
}

2007年4月28日星期六

What about .air mean?

Apollo's file's name just like apollo.air.
But What about .air mean?
I mean that:


2007年4月27日星期五

mx_internal_uid的在数据传递时的重复解决方法

关于这个【mx_internal_uid】的问题,一直抽空想写出来,乘着今天日本那边休息,还是把它给记录下来吧,希望对其他的FLEX爱好者在碰到此类问题的时候有所帮助。


我们首先了解一下【mx_internal_uid】的概念:

uid : String---The unique identifier for this object


UID它一共有32位,其中通过 ActionScript's Math.random()来产生24位,后面的8位是current date-time来决定的 ,所以只要不要有中彩票的运气(24位的Math.random(),足球彩票才14场猜0.1.3...),再加上时间不停止,所以它无论如何也是在这世界上是唯一的 。

当我们对2个DataGrid进行传递信息直接的通信时候,我们会常常这么做:



<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>

<![CDATA[

import mx.utils.UIDUtil;

import mx.collections.ArrayCollection;

[Bindable]

public var dataArr:Array = [{label:"Red", data:"#FF0000"},

{label:"Green", data:"#00FF00"},

{label:"Blue", data:"#0000FF"}

];

[Bindable]

public var problemArr:Array = new Array();

private function addFromTopDG():void {

problemArr.push(fromDG.selectedItem);
//problemArr.push(ObjectUtil.copy(fromDG.selectedItem));

toDG.dataProvider = problemArr;



}

]]>

</mx:Script>

<mx:DataGrid id="fromDG" width="600" height="200" dataProvider="{dataArr}">

<mx:columns>

<mx:Array>

<mx:DataGridColumn width="300" dataField="mx_internal_uid"/>

<mx:DataGridColumn dataField="label"/>

<mx:DataGridColumn dataField="data"/>

</mx:Array>

</mx:columns>

</mx:DataGrid>

<mx:Button label="Add from Top_DG" click="addFromTopDG()"/>

<mx:DataGrid id="toDG" width="600" height="200" dataProvider="{problemArr}">

<mx:columns>

<mx:Array>

<mx:DataGridColumn width="300" dataField="mx_internal_uid"/>

<mx:DataGridColumn dataField="label"/>

<mx:DataGridColumn dataField="data"/>

</mx:Array>

</mx:columns>

</mx:DataGrid>

</mx:Application>



这时候我们会发现很奇怪的事情发生了,当我们对fromDG数据连续传输到toDG的时候,toDG的数据如果是相同的情况(如很多个Red),我们发现对数据我们用鼠标无法聚焦,仔细一看,原来是【mx_internal_uid】一样呀,从中,我们可以了解以下信息:

1.因为引用关系一直存在,所以传过来的东西是一直一样的。如果把toDG放在一个TitleWindow里传一次再关一次,即削除引用关系,它是没有问题的。

2.就算是ObjectUtil.copy(obj),只要在引用关系还存在的情况下,它copy出来的uid竟然是一样的。那么这样的话Adobe要不要考虑一下重写这个方法呢?毕竟我要的只是里面的值一样而不要把UID一起传过来啊。


解决方法:


合理利用UIDUtil这个类为我们创造合理的UID。




private function addFromTopDG():void {

var obj:Object = ObjectUtil.copy(fromDG.selectedItem);

obj.mx_internal_uid = UIDUtil.createUID();


//这里千万不要直接fromDG.selectedItem.mx_internal_uid = UIDUtil.createUID();

//因为上面说过这样引用关系还存在。

(toDG.dataProvider as ArrayCollection).addItem(obj);

obj = null;//这个就靠自己的CODE 风格啦,不要也没关系



恩,这样问题就解决啦。

2007年4月25日星期三

Flex SDK is Opening Source!

剛吃完飯,就去Flex Team逛了一會,發現了個猛報道。Adobe正在準備對Flex SDK開源!OMG!何等得舉動啊?Flex SDK將以Mozilla Public License (MPL)的形式,能讓FlexCoders下載,繼承開發或者上傳代碼。它會讓更多的人參與到Flex的開發來,而且會有更多的FlexComponent和FlexApplication,我們會更加的看到很多象Doug 這樣的“瘋子”。

我們將要看到的開源:
-Component Source(其實已經大部分的開源)
-MXMLC
-FDB
-AS3 Compiler


還是沒有開源:
-Flash Player
-Flex Builder
-LiveCycle Data Services
-Charting Component

Adobe Labs的Flex:Open Source

Flex:Open Source DiscussionGroup.

Flex Open Source FAQ

2007年4月17日星期二

正面面对Microsoft SilverLight(WPF/E)!

首先一下来自Matrix的新

微软正式发布Flash杀手 命名为SilverLight

matrix 发表于 2007-04-17 08:42:35 作者:Matrix 来源:SilverLight


摘要:

微软日前在美国拉斯维加斯召开的全美广播协会会议上,宣布了其为WindowsWeb以及设备上创建富媒体、丰富交互性的战略。并正式将WPF/E命名为Microsoft SilverLight

   SilverLightWindows PresentATIon Foundation的一个子产品,其利用了跨浏览器Web技术进行设计,以实现多操作系统,甚至是移动设备上的无缝运行。和Flash一样,WPF/E 是作为一个浏览器的插件,可以显示矢量图形、动画和视频。

Silverlight
集成了多种现有Web技术和设备,它可以在WindowsMac平台上运行,支持IEFirefox,甚至AppleSafari Web浏览器。而无需对现有的网站设计进行移植,甚至包括利用Adobe
Flash
设计的内容。

  至于SilverLightFlash的区别,微软的一位高层人士曾这样描述:一个WPF/E程序“并不是传递给Flash播放器的一个编译好的二进制文件。”相反,所有的代码都是基于标准的,且图像都使用了XAML

  同时,与Flash的内容不方便搜索引擎收录不同,SilverLight是以DOM型式公开它的元素树,内容能很好被搜索引擎收录。

  附:SilverLight产品介绍

  1Silverlight通过小巧的浏览器插件将视频、交互性内容以及其他应用融合在一起。该解决方案集成了强大的图像及图层技术,支持任何尺寸图像的无缝整合,并提供适合广播的图层技术,可以在图像上添加按钮、标题或是其他交互性内容。

  2 Silverlight允许利用WMV标准从高清设备向移动设备提供高质量视频和音频。此外,该工具通过Expression
Media Encoder
以及Tarari公司的内建平台,支持15X的快速视频编码及硬件加速。

  3Silverlight支持多种平台,使用户能够方便的进行代码重用,并通过不同平台无缝的连接到Web

  4Silverlight集成了多种现有Web技术和设备,这意味着它可以在任何服务器和发布平台上使用,而无需对现有的网站设计进行移植,甚至包括利用Adobe Flash设计的内容。

5Silverlight采用了已在.NET 3.0Vista中使用的XAML语言,这使得Web内容和桌面内容的开发语言一致,从而降低了开发费用。Silverlight还兼容大量其他标准和 现有技术,包括ASP.NETAJAX以及.NET 3.0,这使得开发者可以根据现有标准,或是采用微软已成熟技术来开发基于Web的内容。

6、 此外,Silverlight为设计者和开发者提供大量的开发工具和开发环境支持。对设计者来说,Expression DesignExpression Blend软件可以创建可重用界面,Expression Web使得在符合W3C标准的网站开发中可以使用XHTMLXMLXSLTCSS以及ASP.NET等工具。对开发者来说,基于Visual StudioWeb开发支持包括ASP.NET AJAX在内的技术,并支持JavaScriptC#VBRuby以及Python等多种开发语言。

  7 Silverlight浏览器插件的安装程序简单,体积约为2Mb。当用户遇到使用Silverlight开发的网页时,可以迅速的安装这一插件。 Silverlight内建的视频及动画广告解决方案灵活性很高,当传输广播类型的视频或是动画广告时,不会影响视频的质量。而这一问题是现有技术普遍遇到的问题。

  8、通过获艾美奖的Windows Media技术,传输流量可降低46%,并且和现有的Windows Media流量配置方案兼容。如果采用下一代Windows Server系统中的IIS媒体包,流量还将进一步下降。

  9Silverlight支持内容接入保护技术。无论在Windows还是Mac平台上,Silverlight都支持多种商业模型,包括订阅、租用、付费浏览或是预览等。

这不难发现SilverLight(WPF/E)利用Microsoft原本拥有的优势。
个人认为最帅的优势是在于SilverLight是以DOM型式公开它的元素树,内容能很好被搜索引擎收录,这方面我期待着Apollo对它的强有力的回应!
这几点优势就能挑战Flash/Flex/Apollo吗?
P.S: .air?air Jordan?air = atmosphere?no,no,no!air = ria = RIA = Rich Internet Applications!

2007年3月29日星期四

新手如何学习Flex

常常看到有人问,初学者该怎么学习Flex,我该从哪里入手?我每次都很想耐心的回答这个问题,但还是因为想说的内容太多,反而觉得那时候说肯定会漏掉一些重要的东西和步骤,所以没说。趁现在休息的时间,给自己一点思考,希望写出的东西也能更全面一点。


Macromedia Flex 2.0 Explorer

此玩意称之为Flex Component Library, 虽然说这版本还是Flex2.0Beta3的版本, 但是如果Flex3.0还没到来, 我认为这东西还是Flex的初学者们必看的, 它让我们能知道Flex给我们提供了什么样的模板(为什么称为模板, 我想这是因为其实这些控件我们都可以亲手把它给创造出来, Adobe只是提供了平常常用的稳定的控件, 我们不用每次都写而已, 但说实话, 就算是大公司写的东西, BUG实在很多, 也许就单独一个而言,它是满好的,但N多东西结合在一起的时候,我会常常叫OMG)。
Flex Component Library缺少了Chart这一类, 但是这东西我想你要用到它的时候你再去看也不迟, 我建议Flex Component Library中的Effects, States, Transitions, Printing可以滤过, 因为对于新人来说, 看完其它的东西已经足够了。 在看完Flex Component Library的内容之后, 我希望大家都能把源码放到自己机器上跑一跑, 自己写一写。 问到为什么的时候, 你只要记住内容就可以了, 不用再追问下去。


Adobe Flex 2 Component Explorer

名字很象吧, 但内容就不一样了, 在学完以Macromedia为名义的Flex 2 Component Explorer之后, 我们再学学新东家的Flex 2 Component Explorer。 做法跟上面一样, 所做的我想就是保持好心态。


Demo

我希望各位的第一个Demo是一个Application+TitleWindow, 功能很简单, 在Application上有个DataGrid, 把里面选中的值传给TitleWindow里的DataGrid, DataGrid有添加, 修改, 删除的操作。


Flex Style Explorer v2.0.1

想自己的画面好看一点, 那就来看看Adobe给我们提供了的工具。 如果还觉得不满意呢, 我们的Flexer--Jason Hawryluk自己写了个Flex 2 Primitive Explorer, 去看看? 如果你要更好看, 那你就去学CSS或者scale9。




Create Applications
  • Create Application
    我想完成到这一步肯定已经有了部分的基础,继续提高自己的话那你可以到Adobe Flex App Sample 下载sample进行学习,还有一个重要的sample那就是Flex Style Explorer v2.0。1的源代码和Flex 2 Primitive Explorer的源代码,只要右键,你就能看view source。
  • Project in Structure
    一个好的工程没有一个好的架构那是做得非常吃力的。对于已经成熟的团队,我非常推荐大家使用Cairngorm和Riawave.


Create Components


  • Base
    也有很多人问,上面东西我都会了,想写一个控件该从何处入手,最简单和最实用的方法是Help(F1)-->Adobe Flex 2 Help-->Creating and Extending Flex 2 Components,其中有2个重要的章节那就是Creating MXML Components 和 Creating ActionScript Components,顾名思义那就是如何用mxml和ActionScript来创建控件,里面的东西一定要全部看完
  • Ready
    做完Base以后,我们将以实例子进行学习,打开X:\Program Files\Adobe\Flex Builder 2\Flex SDK 2\frameworks\source\mx\controls,里面有个Button.as,对,没错,这就是Button.as的源代码,而且还是从UIComponent继承过来的最简单的控件之一,我们要做的是要读懂它的一文一字,就算是一个Boolean,里面也隐藏了很多学问。
  • Go
    Ready之后,Go还成问题么?

Help
要Help吗?为什么每次遇到困难问题的时候总是去问身边的人。我不得不说的是当一个看Help(F1)的人和一个问别人的人在一个月内学习Flex,一个查看Help文档的人领先的不只是一条街那么大的距离。Any Question? Please Push F1!

Community Organizations
RIAChina --- 中国RIA开发者论坛,是全国数一的关于Flex的讨论社区,里面隐藏着众多的高手,而且很多已经参加了工作并在实际项目中。
RIADev --- 联系两岸三地的关于Flex/Apollo的华人论坛社区,它所表现的优势在于只要一提出问题,它将以邮件的方式以最快的速度发到每位成员手中,最重要的它是Jeremy带头的。
FlexCoders --- 全球最大的Flex用户讨论组织,只要是关于Flex的问题,你都可以在这里提出,而且常常回答者都是Adobe公司参加或者跟Flex相关的工作人员,当然前提条件是你要具备对英语的阅读能力和表达能力。
FlexComponents--- FlexCoders 的同胞兄弟,这里讨论的都是关于控件的问题,前提条件还是英文:-)

Books
Adobe Flex 2: Training from the Source
Adobe Flex 2.0.1 Help
Adobe Flex 2.0.1 Language Reference
Advanced ActionScript 3 with Design Patterns
ActionScript 3 Cookbook
Make things move
Programming Flash Communication Server
Apollo for Adobe Flex Developers Pocket Guide
AS3 Tip Of the Day !

End
当然Flex的路还是很长,并祝各位好运!

2007年3月21日星期三

FDS Renamed to LiveCycle Data Services

公司最近成了Adobe的追随者,新开了个Adobe LiveCycle 的 Team. Adobe LiveCycle 和现有的 Adobe Reader®, PDF, XML密不可分, 并且用Java进行开发.
一大早看了下Flex Team的消息, 没想到的是, Flex Data Services 的下一代产品改名为 LiveCycle Data Serivces, 并已经推出了LiveCycle Data Services 2.5 Beta 版本, 它进一步改善了Data Service Messaging 的性能, 综合了RIA, PDF, J2EE, 最重要的是它将为Apollo的本地数据缓存和脱机通信最好了准备,所以说难怪叫做LiveCycle Data Services.

其实为什么样不直接叫Apollo Data Services呢?这名字多帅.

2007年3月19日星期一

Apollo Alpha Release! RIA脱离流浪!


Apollo快要发布的前几天,我一直在守候着AdobeLabs的更新,突然因为日本发来的信件使得项目太忙,已致于到后来Apollo可以下载也是别人告诉我的.



给我的第一个惊奇是,Apollo终于出现在了AdobeLabs上,并且抢走了.air的后缀名!没想到Adobe的人不但编程好,取个名字也是满牛的!

让我们看看Apollo Alpha 1 它做什么:


  • Apollo application installation and preferences (shortcuts, uninstall, start menu)

  • File I/O API

  • All functionality within Flash Player 9

  • Window API

  • HTML within Flash content

  • HTML-based applications (i.e. no SWF)

  • Script bridging between ActionScript and JavaScript

  • Cross platform icons

  • Partial multi-window support

  • Network detection change API

  • Application update API’s

  • Full-screen support
再看看它接下去准备做什么:

  • Drag and drop and cut and paste support.

  • Additional HTML and Ajax support.

  • Window transparency for HTML-based applications.

  • Flash within HTML.

  • PDF support.

  • Native dialog support for opening and saving files.

  • Network detection API enhancements.

  • Multi-window enhancements.

  • Additional enhancements to existing APIs.

它实现了跨平台(cross-operating system),它能把现有存的在利用广泛的开发技术(Flash, Flex, HTML, JavaScript, Ajax)整合在一起应用,特别是flex swf与外界的交互将更加便利,应用范围更加广泛,它能创造出新一代的RIA,一个脱离流浪(流览器)的RIA,一个丰富的在桌面上的RIA.


不得不说的是,因为公司目前产品还在采用flex2.0的阶段,如果升上2.0.1,现有工程将不能正常的运行,所以在公司里面玩Apollo有点困难.同时幸运的是,自己刚买了台HP的本本,而且装的还是vista,所以我将非常无奈的,但幸运的,在新的环境中体验升华的RIA丰富的感受,享受Apollo的冲击!


eBay demo
Download Apollo runtime
Download Apollo SDK
Download Flex 2.0.1.

2007年3月12日星期一

Clipboard

今天写了一个右键菜单,其中的一个功能就是做一个简单的copy工作,那我怎么才能把它的内容应用到系统自带的Clipboard中呢?这让我足足困惑了10分钟,实在忍不住,一边问别人,一边自己开始试着能打出相应的方法,终于发现了System.setClipboard(String)这东西.我刚找到,问的人也找到了该方法,在对我用10+1分钟,而他仅用了1分钟惭愧的同时,不由得感叹一句"这东西怎么能这么简单!~~".

实例:

private function initApp():void {
var labelMenu:ContextMenu = new ContextMenu();
labelMenu.hideBuiltInItems();
var copyItem:ContextMenuItem = new ContextMenuItem("copy");
copyItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler);
labelMenu.customItems.push(copyItem);
this.contextMenu = labelMenu;
}

private function menuItemSelectHandler(e:ContextMenuEvent):void {
System.setClipboard(toolTip.toString());
}

2007年2月26日星期一

带有喇叭的VideoDisplay的VolumeControl



关于FLV播放器VideoDisplay的自作,其实很多它外国友人已经把它做得屈近于完美,出于空闲加上一下自己个人的想法,自己就做了一个关于声音并自带喇叭的控制,我称它为VolumeControl.
喇叭的波形是由右边的值来控制的,你可以通过按喇叭来控制是否要静音,而且提供了3个颜色的接口(不填也有默认色),可以对喇叭,波,背景进行颜色的变化,当然,因为静音的符号一般都是红的,所以我没有对它提供颜色的变化接口,如果你要改变,当然改一下代码就可以了拉.
下面一段是喇叭控制的部分代码和VolumeControl的源代码.

PS:希望用到的朋友们能注明一下出处.


喇叭控制的部分代码:
private function setControlStatus():void{
FlexFLVVideoPlayer.volume = volumeControl.volume;
trace('mute'+FlexFLVVideoPlayer.volume);
}
< id="volumeControl" change="setControlStatus()" volume="0.3" loudspeakercolor="#000000" loudspeakerwavecolor="#ff0000" backgroundcolor="#00f000">


VolumeControl的源代码:
// ActionScript file--Edited By Aedis.Ju
package FlexFLV
{
import mx.core.UIComponent;
import mx.events.FlexEvent;
import flash.events.Event;
import mx.controls.Button;
import mx.controls.HSlider;
import mx.containers.HBox;
import mx.styles.CSSStyleDeclaration;
import mx.styles.StyleManager;
import flash.events.MouseEvent;
import mx.events.SliderEvent;
import flash.display.Graphics;

[Event(name="change", type="mx.events.SliderEvent")]

[Style(name="loudSpeakerColor", type="uint", format="Color", inherit="yes")]
[Style(name="loudSpeakerWaveColor", type="uint", format="Color", inherit="yes")]
[Style(name="backGroundColor", type="uint", format="Color", inherit="yes")]

public class VolumeControl extends UIComponent
{
[Embed(source="../Img/thumbDownSkin.gif")]
private var thumbDownSkin:Class;
[Embed(source="../Img/thumbOverSkin.gif")]
private var thumbOverSkin:Class;
[Embed(source="../Img/thumbUpSkin.gif")]
private var thumbUpSkin:Class;

private var _loudSpeaker:Button;
private var _loudControl:HSlider;
private var _backGround:HBox;
public function VolumeControl(){
super();
addEventListener(FlexEvent.CREATION_COMPLETE, drawBackGround);
}

//set defalut Style
private static var stylesInited:Boolean = initStyles();
private static var defalutStyle:CSSStyleDeclaration = new CSSStyleDeclaration();
private static function initStyles():Boolean {
defalutStyle = new CSSStyleDeclaration();
defalutStyle.setStyle("backgroundColor",0x000000);
defalutStyle.setStyle("loudSpeakerWaveColor",0x00ff00);
defalutStyle.setStyle("loudSpeakerColor",0xffffff);
StyleManager.setStyleDeclaration("VolumeControl", defalutStyle, true);
return true;
}
private function drawBackGround(e:FlexEvent):void {
//drawBackGround!
var backgroundColorUint:uint = getStyle('backGroundColor');
_backGround.setStyle('backgroundColor',backgroundColorUint);
}

private var _volume:Number;
public function get volume():Number {
if(_loudSpeaker.selected) return 0;
return _loudControl.value;
}
public function set volume(value:Number):void {
if(value < _volume =" 0;"> 1) {
_volume = 1;
} else {
_volume = value;
}
}

//if mute is true,thate means it is mute.
private var _mute:Boolean;
public function get mute():Boolean {
if(_loudSpeaker) return _loudSpeaker.selected;
return _mute;
}

override protected function createChildren():void{
super.createChildren()
if(!_backGround) {
_backGround = new HBox();
addChild(_backGround);
_backGround.setStyle('horizontalGap', 0);
}
if(!_loudSpeaker && _backGround) {
_loudSpeaker = new Button();
_loudSpeaker.toggle = true;
_loudSpeaker.useHandCursor = true;

_backGround.addChild(_loudSpeaker);

_loudSpeaker.addEventListener(MouseEvent.CLICK, drawloudSpeaker);

_loudSpeaker.setStyle("overSkin", null);
_loudSpeaker.setStyle("upSkin", null);
_loudSpeaker.setStyle("downSkin", null);

_loudSpeaker.setStyle("selectedUpSkin", null);
_loudSpeaker.setStyle("selectedOverSkin", null);
_loudSpeaker.setStyle("selectedDownSkin", null);
_loudSpeaker.setStyle("selectedDisabledSkin", null);
}
if(!_loudControl && _backGround) {

_loudControl = new HSlider();
_loudControl.snapInterval = 0.1;
_loudControl.maximum = 1;
_loudControl.value = _volume;

_backGround.addChild(_loudControl);

_loudControl.liveDragging = true;
_loudControl.addEventListener(SliderEvent.CHANGE, drawloudSpeaker);
_loudControl.addEventListener(FlexEvent.CREATION_COMPLETE, drawloudSpeaker);

_loudControl.setStyle("thumbDownSkin",thumbDownSkin);
_loudControl.setStyle("thumbOverSkin",thumbOverSkin);
_loudControl.setStyle("thumbUpSkin",thumbUpSkin);
}
}

private function drawloudSpeaker(e:Event):void {
//do change event!
var eventObj:SliderEvent = new SliderEvent("change");
dispatchEvent(eventObj);

//draw!
var loudSpeakerColorUint:uint = getStyle('loudSpeakerColor');
var graphics:Graphics = _loudSpeaker.graphics;
graphics.clear();
graphics.beginFill(loudSpeakerColorUint, 1);
graphics.moveTo(6,2);
graphics.lineTo(4,6);
graphics.lineTo(2,6);
graphics.lineTo(2,14);
graphics.lineTo(4,14);
graphics.lineTo(6,18);
graphics.moveTo(6,2);
graphics.curveTo(10,10,6,18);
graphics.endFill();

if(!_loudSpeaker.selected) {
_volume = _loudControl.value;
if(_loudControl.value <= 0) return; var loudSpeakerWaveUint:uint = getStyle('loudSpeakerWaveColor'); graphics.lineStyle(1.2, loudSpeakerWaveUint, 1); if(_loudControl.value > 0) {
graphics.moveTo(10, 2);
graphics.curveTo(14, 10, 10, 18);
}
if(_loudControl.value >= 1/2*_loudControl.maximum) {
graphics.moveTo(14, 4);
graphics.curveTo(18, 10, 14, 16);
}
if(_loudControl.value == _loudControl.maximum) {
graphics.moveTo(18, 6);
graphics.curveTo(20, 10, 18, 14);
}
} else {
_volume = 0;
graphics.lineStyle(2,0xff0000,1);
graphics.drawCircle(14.5, 10, 4.5);
graphics.moveTo((14.5 + 4.5*Math.sin(45)), (10 - 4.5*Math.sin(45)));
graphics.lineTo((14.5 - 4.5*Math.sin(45)), (10 + 4.5*Math.sin(45)));
}

}

override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
if(_loudSpeaker) {
_loudSpeaker.width = 20;
_loudSpeaker.height = 20;
_loudSpeaker.x = 0;
_loudSpeaker.y = 0;
}
if(_loudControl) {
_loudControl.width = 80;
_loudControl.height = 10;
_loudControl.x = _loudSpeaker.width;
_loudControl.y = 3;
}
if(_backGround) {
_backGround.width = _loudSpeaker.width+_loudControl.width;
_backGround.height = Math.max(_loudSpeaker.height, _loudControl.height);
_backGround.x = 0;
_backGround.y = 0;
}
super.updateDisplayList(unscaledWidth, unscaledHeight);
}

}
}

2007年2月13日星期二

Flex Style Explorer update to Version 2.0.1




今天是情人节,首先祝大家情人节快乐!

今天又跑到
Flex Style Explorer偷懒着去找好看的CSS式样对我的FlexFLVPlayer进行装饰,没想到发现Flex Style Explorer新年新气象,它已经跟随着Flex升级到了Version2.0.1,想想我们公司还在继续用着Flex2.0,对自己说,过年回来一定要对Flex2.0.1进行近一步的分析为大家升级到2.0.1的方便使用而努力!
这次主要改变不仅对
Flex Style Explorer的布局进行了更改,而且全新使用了Flex2.0.1的控件,使支持达到了新的高度,而且界面也美观了,只不过SANDBOX小了点,要通过最左边的ViewStack的缩放大小来改变它的大小,总的满意度还是可以的,而且非常喜欢.
意外的惊喜的是,这次它提供了
源代码显示,简直是对新手莫大的福音,你可以通过里面可以学到很多新的东西,比如,每一棵树它是怎么显示出自己的ICON的,为什么List旁边能显示一个打勾的小图标,它是怎么把你做好的CSS自动粘贴到的你的ClipBoard里面的 ...有经验的人马上也能看出Flex2.0.1跟Flex2.0对CSS的支持又有哪些重大的改变.

我想这是Adobe在情人节送我最好的礼物.
Adobe, Thank you!


Application

ViewSource

2007年2月7日星期三

HitTestPoint处理透明png和透明swf

上次已经介绍过一次Doug McCune ,如果你正在处理图片等问题方面的话,也许他真得是一个很不错的专家级人物.

这次他又一次给我们解决了一个我们认为的BUG:
我们一般用DisplayObject.hitTestPoint(x, y, obj):Boolean来判断x,y的位置是否存在在这个display object上,如果在上面的话,返回来是true.当object是透明的话,我们认为,这个方法返回的应该是false,就是说不在display object上面.
这次提到的是png图片和swf中透明的问题.大家经过验证得出来的结论就是:只要是png图片,flex认为它整个是一个实体,包括透明和不透明的,所以它一直返回的是true,但swf就不一样了,只要swf透明的地方,它返回的是false,不透明的地方返回的是true.

结论得出来了,问题是我们都一直认为透明不是'东西' ,既然不是'东西'返回的就应该是false.那怎么样让透明png图片的透明部分返回的是false呢?就象swf一样?
第一种:重新判断x,y下面的透明度,如果是0,返回的是false;
第二种:采用Doug的方法:写了一个realHitTest(obj,point).首先判断是不是BitmapData,如果是的话直接采用BitmapData自带的hitTest(firstPoint, firstAlphaThreshold, secondObject, secondBitmapDataPoint, secondAlphaThreshold):Boolean,当然,png和swf它们都不是BitmapData. 当png图片和swf不透明的时候,hitTestPoint(x, y, obj)返回来是true,这时候,就要进行处理了,让png透明的地方返回来是false,他把将要检测的display obje 转成一个BitmapData,然后用BitmapData的HitTest来进行检测.

代码片段:

if(object is BitmapData)
{
return (object as BitmapData).hitTest(new Point(0,0), 0, object.globalToLocal(point));
} else {
/* First we chack if the hitTestPoint method returns false. If it does, that * means that we definitely do not have a hit, so we return false. But if this * returns true, we still don't know 100% that we have a hit because it might * be a transparent part of the image. */
if(!object.hitTestPoint(point.x, point.y, true)) {
return false;
} else {
/* So now we make a new BitmapData object and draw the pixels of our object * in there. Then we use the hitTest method of that BitmapData object to * really find out of we have a hit or not. */
var bmapData:BitmapData = new BitmapData(object.width, object.height, true, 0x00000000);
bmapData.draw(object, new Matrix());
var returnVal:Boolean = bmapData.hitTest(new Point(0,0), 0, object.globalToLocal(point));
bmapData.dispose(); return returnVal;
}
}


Demo
View the source

Link:Using hitTestPoint or hitTest on Transparent PNG images by Doug McCune

knowledge:
DisplayObject --> EventDispatcher --> Object
hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean
Evaluates the display object to see if it overlaps or intersects with the point specified by the x and y parameters.

BitmapData --> Object

hitTest(firstPoint:Point, firstAlphaThreshold:uint, secondObject:Object, secondBitmapDataPoint:Point = null, secondAlphaThreshold:uint = 1):Boolean
Performs pixel-level hit detection between one bitmap image and a point, rectangle, or other bitmap image.

凹凸效果Button的实现

今天客户需要一个凹凸效果Button,没想到我还在想着怎么用皮肤来实现凹下去,旁边的同事就已经告诉我只要toggle="true",效果就能实现,按一下凹,按一下凸.然后我继续往下看源码才发现原来凹不凹凸不凸是由Button的selected是否等于true实现的.真不惊感叹一句:原来是这样!
下面写了2种相同的效果:
<mx:Button id="toggleBtnByToggle" label="toggleControl" toggle="true"/>
<mx:Button id="toggleBtnBySelected" label="selectedControl" click="changeSkin()"/>
<mx:Script>
<![CDATA[
private function changeSkin():void {
toggleBtnBySelected.selected = toggleBtnBySelected.selected ? false : true;
}
]]>
</mx:Script>

2007年2月6日星期二

FileReference中的过滤器

private var smallBrowser:FileReference = new FileReference();
private function openBrowser():void{
var fileTypes:FileFilter = new FileFilter("FLV文件 (*.flv)","*.flv");
var allTypes:Array = new Array(fileTypes);
smallBrowser.browse(allTypes);
smallBrowser.addEventListener(Event.SELECT, handleOpenBrowser);
}
private function handleOpenBrowser(event:Event):void{
trace("Selected!"+smallBrowser.name);
}

2007年2月5日星期一

Sprites和Shapes的区别之一

为什么Button的mouseChildren是false呢?


mouseChildren顾名思义,就是这个存在在object的
孩子是否应该响应到mouse events事件
我们知道Button的组成包括了UITextField,另外包括了很多的skins和icons.

skins包括了upSkinName,overSkinName,downSkinName,disabledSkinName,selectedUpSkinName,selectedOverSkinName,selectedDownSkinName,selectedDisabledSkinName;
icons则包括了iconName,upIconName,overIconName,downIconName,disabledIconName,selectedUpIconName,selectedOverIconName,selectedDownIconName,selectedDisabledIconName.
skins和icons这些用户其实都是可以重新自定义的.

最主要的目的是为了保证mouse events是从Button它自己本身的触发,而不是它的skins,icons,UITextField.

我们在定义skins和icons的时候,会用到Sprites和Shapes,如果mouseChildren是true的话,用到Sprites的会无法响应click事件,Shapes还会是正常的.为什么呢?这是因为用到Sprites,做click事件的时候,它将直接响应到skins或者icons,而不是Button它本身,而Shapes是不会响应mouse events的.为了不让有这种情况发生,mouseChildren = false.

knowledge:

mouseChildren : BooleanDetermines whether or not the children of the object are mouse enabled.

Shape ---> DisplayObject --->EventDispatcher ---> Object
The Shape class is used to create lightweight shapes by using the ActionScript drawing application program interface (API). The Shape class includes a graphics property, which lets you access methods from the Graphics class. The Sprite class also includes a graphicsproperty, and it includes other features not available to the Shape class. For example, a Sprite object is a display object container, whereas a Shape object is not (and cannot contain child display objects). For this reason, Shape objects consume less memory than Sprite objects that contain the same graphics.

Sprite --->DisplayObjectContainer--->InteractiveObject ---> DisplayObject ---> EventDispatcher ---> Object
The Sprite class is a basic display list building block: a display list node that can display graphics and can also contain children. A Sprite object is similar to a movie clip, but does not have a timeline. Sprite is an appropriate base class for objects that do not require timelines. For example, Sprite would be a logical base class for user interface (UI) components that typically do not use the timeline.The Sprite class is new in ActionScript 3.0. It provides an alternative to the functionality of the MovieClip class, which retains all the functionality of previous ActionScript releases to provide backward compatibility.

2007年2月4日星期日

歡迎加入RIADEV

现在是北京时间2月5号的凌晨1:20分,我还在看这MANUTD的比赛,一不小心Vidic和Scholes就连续短短几分钟进了2球,比分已经锁定在3:0,继续拉开这与切尔西的差距,心里面真是无比的开心啊。
闲着无比开心的心情,去逛了一下国人FLEX第一人Jeremy的BLOG,一看,有发现了一件喜事,我们的RIADEV终于再一次宣传出来了,为什么是宣传呐?因为其实这东西在去年就已经成立了,废话不多说了,我们就看看Jeremy给我们说的话吧。



中文 Flex, Apollo 討論群組 - 歡迎加入
RIADEV(http://groups.google.com/group/riadev)
是去年中成立的一個華文討論群組,當時本想仿效 flexcoders 在 yahoo groups 上建立,但可惜那個平台不支援中文,所以改到 google 設立。
這個群組成立的目地是希望提供一個使用中文討論 Flex, Apollo 的環境,這樣可讓不諳英文無法接觸 flexcoders 的華人開發者也有一個發問與尋求支援的管道。
使用 RIADEV 這個名稱主要是考量它的討論內容不限於 flex 本身,隨者 flex 的持續發展,將來 flex framework 也會用於 Apollo 與 Flashlite(mobile device), 並且它與 Ajax 的合作也會日益密切,所以取名為 flex-xxx 會略顯不足,才選定 RIA dev。
在可能的範圍內,我以及身邊的好友們會儘力參與討論並回覆問題,但就如同所有成功的討論區一般,一個群組的成敗主要還是取決於大家的參與度和熱情,希望有一天 RIADEV 也能成為像 flexcoders 一樣的優質群組。
RIADEV 使用方法基本上跟 flexcoders 一樣,可以透過
-web介面:直接在網頁上看討論與回覆
-email訂閱:加入此群組後就會每日收到討論信件(我個人比較喜歡這種方法,不用每天check website,只要有新信就會自動寄上門)
-rss feed:可以用 google reader 之類的 rss reader 訂閱(感謝 b6s 長輩提醒)
如果有使用上的問題歡迎留言發問。
ps. 目前群組中的舊文章皆已刪除,從今天起開始全新的討論。

by
Jeremy



想想也有我小小的功劳,至于什么是不会说的,^_^!
只不过有点不爽的是,他怎么能在星期六我在外面玩的时候更新自己的BLOG...

2007年2月1日星期四

The Flex documentation team招人

Requirements:


  1. Job Level Individual contributor

  2. Expertise Engineering-General

  3. Education Bachelors (or equivalent work experience)

  4. JobType Full Time

  5. Locale United States/San Francisco

  6. Experience 5-7 years

  7. Preferred Language English

为什么中国还没有这个机会呢?

Adobe Apollo FAQ Translate

为了spread Apollo, Adobe对Apollo FAQ进行了多国语言的翻译,已经有好多种语言了,欣喜的是其中包括我们的中文.

translated the Apollo FAQ into Chinese(中文)
translated the Apollo FAQ into PigLatin(拉丁文)
translated the Apollo FAQ into Greek(希腊文)
translated the Apollo FAQ into German(德语)
translated the Apollo FAQ into Swedish(瑞典语)
translated the Apollo FAQ into Japanese(日语)
translated the Apollo FAQ into Italian(意大利语)

2007年1月31日星期三

透明PNG使用标签@Embed

最近flexcoders在讨论关于透明PNG格式使用标签@Embed的问题:
当我们拿到一个透明的PNG并且直接使用时,一般情况下,它总是能正常的显示出来然而,有人上传了一个有问题的PNG,当直接使用时,也可以正常的显示,但如果你准备用@Embed进行嵌入时,PNG的透明背景效果消失了,反而取代的是很乱七八糟的颜色.对控件开发很有研究的Doug McCune虽然他说不能找出真正的结果,但是他写出了自己的一个控件那就是只要背景图片透明,不管是否有问题,是否使用@Embed标签,它都能正常的显示出来.


Doug McCune:今年24-25岁,生活在旧金山,现在就读于斯坦福大学(牛X),从FLEX1.5出来就对其进行研究,至今写出了支持GIF格式动画的控件,当然,50$.但是他更多的是贡献了自己的一部分作品放在了Adobe Flex Exchange,如Horizontal Accordion Component, Even Better Scrollable Menus, Vertical MenuBar, Draggable Slider Component等等...


PS:今天Matt Chotin发话拉:Please file a bug too if you haven’t already.
看来这讨论还得继续...

View the source.

2007年1月30日星期二

知道、不怕, 不知道、怕

早上刷牙刷出了个顺口溜...

请读得快一点:

我知道你不怕,
我不怕你知道,
你知道我不怕,
你不怕我知道;
我不知道你怕,
我怕你不知道,
你不知道我怕,
你怕我不知道!

读一遍,然后想一下你和我的关系?


Morning I am brushing teeth, then thought funny words...

Please Read fast:

I Know You unafraid,
I unafraid You Know,
You Know I unafraid,
You unafraid I Know.
I don't Know You scare,
I scare You don't Know,
You don't Know I scare,
You scare I don't Know!

read over, then think about the relation of You & Me!

AS3 Tip Of the Day

I thought that I haven’t any times to write any words about AS3.
In
kirupaForum, I found that senocular had wrirted a great article!
Here are his words:
The release of Flex Builder 2 is around the corner and though the next version of Flash is still a ways away, ActionScript 3 will be a big part of Flex 2 and the impending release of Flash Player 9 (which arrives with Flex). ActionScript 3 is the next step forward and to help with the transition (for those of you deciding to make it), I thought, since I've been working with AS3 a bit lately, I'd make a new Tip of the Day thread for ActionScript 3.0 to help people prepare. -- senocular

Announce: senocular has the real copyWrite


我想我根本没有什么时间去写一些关于AS3的东西,
但在
kirupaForum,有一位名叫senocular的小伙子写好了下面这篇精彩的文章,
下面是他的的话:
The release of Flex Builder 2 is around the corner and though the next version of Flash is still a ways away, ActionScript 3 will be a big part of Flex 2 and the impending release of Flash Player 9 (which arrives with Flex). ActionScript 3 is the next step forward and to help with the transition (for those of you deciding to make it), I thought, since I've been working with AS3 a bit lately, I'd make a new Tip of the Day thread for ActionScript 3.0 to help people prepare. -- senocular

声明: senocular拥有最终的著作版权.


--- ---Aedis.Ju

一不小心有了时间就整理出来了这份稿子,ActionScript3小贴士100真得很好,有兴趣看看的就试试吧...

下载AS3 Tip Of the Day - Aedis From Senocular.DOC版本
下载AS3 Tip Of the Day - Aedis From Senocular.PDF版本
下载办法:1. 请点击下载地址下载文件2. 用鼠标右键点击下载地址,选择下载工具下载 如果有下不到的,就请麻烦一下去www.mofile.com提取一下,提取码分别为7717702603510744和2692680849011767PS:英文的,不过应该都能看得懂

2007年1月29日星期一

Andrew Trice的新玩意Named Colors In Flex


Andrew Trice,cynergysystems的牛人
他又奉献了一篇杰作,并把源代码也拿出来了,好无私啊!
无比的开心啊!

合理的写了一个新类ColorUtil,把颜色转化为数字进行排序...





2007年1月25日星期四

Aedis



Oops!
للأسف !
뉘우치 !
残念!
可惜!


本来想注册的是Aedis,竟然发现有个英国人很高调,已经把这位置也占去了,而且还是Forum...真想不懂,难道英语中真得有这么一个单词?不太可能吧...无论在GOOGLE还是百度,搜索的结果大半是我的.我创造了单词,确被别人抢走了幸福...

Alvin,Edison,这都是一前用过的名字,但发现其实在太土,应该说是太多人用,便自己截取了其中的部分,形成了Aedis,我就叫成了Aedis.Ju.中文叫法?也许艾迪斯还可以吧...