YouYee's Blog http://youyee.org/viewpoint/ A Simple Blog from YouYee OpenSource zh-cn Tue, 09 Mar 2010 15:42:01 -0700 Tue, 09 Mar 2010 15:42:01 -0700 YouYee YouYee YouYee<![CDATA[HTML5和Flash,不是你死就是我活?]]>http://youyee.org/viewpoint/article_view.php?topic_id=119 最近HTML5和Flash被炒得沸沸扬扬,Adobe和Apple之间的对骂也十分有意思,作为一个开发者的你特别是从业与Flash开发的你有考虑过吗?

就我本身而言,我虽然很爱Flash,毕竟这是我一直都很喜欢玩的一个平台,在MM时代,Flash给人带来一次又一次的惊喜,我甚至无法忘记每次Flash更新给开发者带来喜悦的场景,每次在Adobe Labs 上看到新的版本推出的时候,总是第一时间去了解究竟多了哪些功能,从这些新功能中能有那些能给自己的开发带来帮助,我几乎废寝忘食的去学习去研究这些东西。

然而不得不承认,这一年,Adobe给我带来了一次又一次的失望,安全漏洞方面的问题就不说了,在Mac下,执行效率一直很差(10.1据说好了很多);所谓的多平台最终依旧没能够在iPhone上得到支持,甚至对于摄像头的连接你都要针对平台去写特殊的逻辑;最糟糕的是Flash IDE,臃肿,效率底下,拥有2G内存的机器跑CS4依旧十分吃力。

回头再看看浏览器的发展,Safari,Chrome,Firefox都开始支持HTML5,新一代浏览器开始支持OpenGL或者其他的硬件加速,CSS3正在向开发者走来...你可能会不屑一顾的说:IE6一日不死就别和我谈取代Flash,作为一个Flash爱好者,你可以效忠于你的平台,甚至包容他所有的缺点,Flash很强大,强大到几乎所有问题都能解决,只是比较棘手而已。可是不要忘记,Flash是寄生于浏览器,如果没有HTML, 甚至连嵌入网页的机会都没有,我们总是在说Flash Player普及的速度很快,但是我们考虑到了网吧用户吗?他们的机器上是装有还原卡,这意味着他们关机后所有的更新都被重置,Flash终究是一个插件。

记得以前Luar写过一篇文章《Flash的未来未有来》,他的预言似乎没有任何偏差,Flash在RIA应用上被Ajax抢去了风头,糟糕的可用性和差劲的文本呈现能力导致Flash在这个领域节节败退。我是一个Flash职业开发,同时也是一个FrontEnd 职业开发,不会偏袒任何一方,只是我意识到现在Flash的危机来了,不仅仅是HTML5,不仅仅是浏览器的革命。

让我们看看原来很多不得不用Flash实现的功能:

1、文件的上传

2、摄像头拍照

3、数据图表显示

4、富含动感的小动画

5、3D以及粒子特效

6、Flash小游戏

7、照片的幻灯片效果

8、视频播放

而如今这些功能那些已经被取代呢?

数据图表显示(国外已经有人通过SVG和Canvas实现了,IE6甚至也支持)

小动画 (现在都喜欢直接用Tween来实现动画效果,加上CSS3,这个也很快没有人愿意用Flash来实现了)

3D以及粒子特效 确切的说网上已经有很多人用Canvas实现了这些特效而且效果很不错。

照片幻灯片效果 (LightBox告诉我们,Flash不是必要的!)

视频播放(这个还用说吗?YouTube的行动已经证明了一切)

越来越多的东西已经可以不使用Flash来实现了,尽管你会说:Flash能比他们做得更好,但是别忘记了,Flash Player只是一个Plug-in or ActiveX 她的可用性实在很低,在RIA应用上Flash已经失败了一次,然而现在更是腹背受敌。

我们也要仔细的反省下Flash的硬伤:

1.相对于 HTML + CSS + JavaScript, SWF始终在灵活性上欠缺, 服务器要想直接生成动态的SWF内容虽然能够实现,但是需要消耗巨大的硬件资源!

2.FLA始终相对于SVN这一类的代码管理软件而言不够友好,所以Adobe推出了一个叫做Version Cue的东西.

3.无论如何SWF都无法独立在浏览器被禁用的情况下发挥任何作用,甚至不能提示用户.

4.还是文本的渲染能力,是的有了新的TextEngine, 但是效率还是差强人意.

时代在变迁,Flash需要及时地去解决自身的问题,保持自己的创新才能不被取代,在我看来对于开发者而言Flash需要解决以下的问题:

1、依旧是效率还是不够快,你是一款插件,并且程序是经过编译后运行的,你的速度应该比JavaScript快一个数量级以上才是!

2、好好修理自己身上的Bug,不如在Firefox下Wmode导致输入法无法使用,不要去推脱自己的责任,无论这个Bug是谁引起,请推动修改!

3、更加的开放,我们需要Flash Player能够提供更加强大的功能,而不是像现在这样畏首畏脚的Flash Player。

4、保持强劲的创新能力,这样才能让开发者对你爱不释手,才不会放弃你。

5、请把你的IDE的执行效率提高些!Coder们才不会去抱怨去咒骂你们。

作为我个人而言,我当然是希望Flash能够越来越好了,但是光这样又怎能够满足我们开发者的野心呢? 我想Flash Player如果没有就更好了,要是HTML5里面能够支持<swf></swf> 又或者 <video></video>压根就直接支持嵌入Flash,SWF成为HTML5的一个内容标准岂不是更好?!

而身为读者或者开发者的你呢?欢迎留下你的观点。

]]>
Sat, 06 Mar 2010 08:53:37 -0700
<![CDATA[紀念劉和珍君]]>http://youyee.org/viewpoint/article_view.php?topic_id=118

中華民國十五年三月二十五日,就是國立北京女子師範大學為十八日在段祺瑞執政府前遇害的劉和珍楊德群兩君開追悼會的那一天,我獨在禮堂外徘徊,遇見程君,前來問我道,“先生可曾為劉和珍寫了一點什麼沒有?”我說“沒有”。她就正告我,“先生還是寫一點罷;劉和珍生前就很愛看先生的文章。”

這是我知道的,凡我所編輯的期刊,大概是因為往往有始無終之故罷,銷行一向就甚為寥落,然而在這樣的生活艱難中,毅然預定了《莽原》全年的就有她。我也早覺得有寫一點東西的必要了,這雖然於死者毫不相干,但在生者,卻大抵只能如此而已。倘使我能夠相信真有所謂“在天之靈”,那自然可以得到更大的安慰,——但是,現在,卻只能如此而已。

可是我實在無話可說。我只覺得所住的並非人間。四十多個青年的血,洋溢在我的周圍,使我艱於呼吸視聽,那裡還能有什麼言語?長歌當哭,是必須在痛定之後的。而此後幾個所謂學者文人的陰險的論調,尤使我覺得悲哀。我已經出離憤怒了。我將深味這非人間的濃黑的悲涼;以我的最大哀痛顯示於非人間,使它們快意於我的苦痛,就將這作為後死者的菲薄的祭品,奉獻於逝者的靈前。

真的猛士,敢於直面慘淡的人生,敢於正視淋漓的鮮血。這是怎樣的哀痛者和幸福者?然而造化又常常為庸人設計,以時間的流駛,來洗滌舊跡,僅使留下淡紅的血色和微漠的悲哀。在這淡紅的血色和微漠的悲哀中,又給人暫得偷生,維持著這似人非人的世界。我不知道這樣的世界何時是一個盡頭!

我們還在這樣的世上活著;我也早覺得有寫一點東西的必要了。離三月十八日也已有兩星期,忘卻的救主快要降臨了罷,我正有寫一點東西的必要了。

在四十餘被害的青年之中,劉和珍君是我的學生。學生雲者,我向來這樣想,這樣說,現在卻覺得有些躊躇了,我應該對她奉獻我的悲哀與尊敬。她不是“苟活到現在的我”的學生,是為了中國而死的中國的青年。

她的姓名第一次為我所見,是在去年夏初楊蔭榆女士做女子師範大學校長,開除校中六個學生自治會職員的時候。其中的一個就是她;但是我不認識。直到後來,也許已經是劉百昭率領男女武將,強拖出校之後了,才有人指著一個學生告訴我,說:這就是劉和珍。其時我才能將姓名和實體聯合起來,心中卻暗自詫異。我平素想,能夠不為勢利所屈,反抗一廣有羽翼的校長的學生,無論如何,總該是有些桀驁鋒利的,但她卻常常微笑著,態度很溫和。待到偏安於宗帽衚衕,賃屋授課之後,她才始來聽我的講義,於是見面的回數就較多了,也還是始終微笑著,態度很溫和。待到學校恢複舊觀,往日的教職員以為責任已盡,準備陸續引退的時候,我才見她慮及母校前途,黯然至於泣下。此後似乎就不相見。總之,在我的記憶上,那一次就是永別了。

我在十八日早晨,才知道上午有群眾向執政府請願的事;下午便得到噩耗,說衛隊居然開槍,死傷至數百人,而劉和珍君即在遇害者之列。但我對於這些傳說,竟至於頗為懷疑。我向來是不憚以最壞的惡意,來推測中國人的,然而我還不料,也不信竟會下劣凶殘到這地步。況且始終微笑著的和藹的劉和珍君,更何至於無端在府門前喋血呢?

然而即日證明是事實了,作證的便是她自己的屍骸。還有一具,是楊德群君的。而且又證明著這不但是殺害,簡直是虐殺,因為身體上還有棍棒的傷痕。

但段政府就有令,說她們是“暴徒”! 但接著就有流言,說她們是受人利用的。

慘象,已使我目不忍視了;流言,尤使我耳不忍聞。我還有什麼話可說呢?我懂得衰亡民族之所以默無聲息的緣由了。沉默呵,沉默呵!不在沉默中爆發,就在沉默中滅亡。

但是,我還有要說的話。

我沒有親見;聽說她,劉和珍君,那時是欣然前往的。自然,請願而已,稍有人心者,誰也不會料到有這樣的羅網。但竟在執政府前中彈了,從背部入,斜穿心肺,已是致命的創傷,只是沒有便死。同去的張靜淑君想扶起她,中了四彈,其一是手槍,立僕;同去的楊德群君又想去扶起她,也被擊,彈從左肩入,穿胸偏右出,也立僕。但她還能坐起來,一個兵在她頭部及胸部猛擊兩棍,於是死掉了。

始終微笑的和藹的劉和珍君確是死掉了,這是真的,有她自己的屍骸為證;沉勇而友愛的楊德群君也死掉了,有她自己的屍骸為證;只有一樣沉勇而友愛的張靜淑君還在醫院里呻吟。當三個女子從容地轉輾於文明人所發明的槍彈的攢射中的時候,這是怎樣的一個驚心動魄的偉大呵!中國軍人的屠戮婦嬰的偉績,八國聯軍的懲創學生的武功,不幸全被這幾縷血痕抹殺了。

但是中外的殺人者卻居然昂起頭來,不知道個個臉上有著血污……。

時間永是流駛,街市依舊太平,有限的幾個生命,在中國是不算什麼的,至多,不過供無惡意的閑人以飯後的談資,或者給有惡意的閑人作“流言”的種子。至於此外的深的意義,我總覺得很寥寥,因為這實在不過是徒手的請願。人類的血戰前行的歷史,正如煤的形成,當時用大量的木材,結果卻只是一小塊,但請願是不在其中的,更何況是徒手。

然而既然有了血痕了,當然不覺要擴大。至少,也當浸漬了親族;師友,愛人的心,縱使時光流駛,洗成緋紅,也會在微漠的悲哀中永存微笑的和藹的舊影。陶潛說過,“親戚或餘悲,他人亦已歌,死去何所道,托體同山阿。”倘能如此,這也就夠了。

我已經說過:我向來是不憚以最壞的惡意來推測中國人的。但這回卻很有幾點出於我的意外。一是當局者竟會這樣地凶殘,一是流言家竟至如此之下劣,一是中國的女性臨難竟能如是之從容。

我目睹中國女子的辦事,是始於去年的,雖然是少數,但看那幹練堅決,百折不回的氣概,曾經屢次為之感嘆。至於這一回在彈雨中互相救助,雖殞身不恤的事實,則更足為中國女子的勇毅,雖遭陰謀秘計,壓抑至數千年,而終於沒有消亡的明證了。倘要尋求這一次死傷者對於將來的意義,意義就在此罷。

苟活者在淡紅的血色中,會依稀看見微茫的希望;真的猛士,將更奮然而前行。

嗚呼,我說不出話,但以此記念劉和珍君!

]]>
Sat, 16 Jan 2010 22:12:13 -0700
<![CDATA[玩转Adobe Flex蚂蚁]]>http://youyee.org/viewpoint/article_view.php?topic_id=117你是否遇到如下问题?

1. 是一个团队在开发Flash程序, 但是代码最终编译却很让人头痛?

2. 你需要一个方法来检验别人提交到SVN的代码是否能够通过编译?

3. 你有一台编译机,可是每次远程登陆的时候都要打开Flash Builder或者慢得如蜗牛得Flash CS4 来编译Flash?

这个时候, 你需要Flex Ant, 使用Java开发项目的人应该听过这个工具, 如果你没有听过但是又遇到了上面说的问题, 那么请接着阅读接下来的内容.

俗气一下介绍Adobe Flex Ant:

The Adobe® Flex® Ant tasks provide a convenient way to build your Flex projects using an industry-standard build management tool.

Adobe Flex Ant 可以提供方便的方式来让你的Flex项目使用一个工业标准构建的管理工具来构建.

通过这个工具, 你可以让你的项目在编译的时候更加方便, 甚至可以轻松实现自动化编译.

首先我们先建立一个

文件夹 MyProject

分别建立 libs, src 两个文件夹

libs 下放置 flexTasks.jar 这个文件,如果你安装了Adobe Flex, 可以在目录:

{$flex_install_folder}/sdk/3.2.0/ant/lib/

下找到

然后回到目录 MyProject 建立一个build.properties 文件

内容参考如下:

# 把这个目录改成你的Flex安装目录下的sdk目录

FLEX_HOME=/Applications/Adobe Flex Builder 3/sdks/3.2.0

# 这个是你的MyProject源码文件夹的目录

# {$basedir} 是默认指向MyProject目录

SRC_DIR =${basedir}/src

# 这个指向libs文件夹目录

LIBS_DIR =${basedir}/libs

# 这个编译完成后的输出目录

DEPLOY_DIR = ${basedir}/DEPLOY

保存后关闭

接下来在MyProject目录下新建一个 build.xml文件, 内容如下:

<project name="Flex Ant Tasks Build Script" default="compile flex project">

<property file="build.properties" />

<taskdef resource="flexTasks.tasks" classpath="${basedir}/libs/flexTasks.jar"/>

<target name="init">

<delete dir="${DEPLOY_DIR}" />

<mkdir dir="${DEPLOY_DIR}" />

</target>

<target name="compile flex project" depends="init">

<mxmlc file="${SRC_DIR}/MyProject.as" output="${DEPLOY_DIR}/MyProject.swf">

<load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/>

<source-path path-element="${FLEX_HOME}/frameworks"/>

<compiler.debug>true</compiler.debug>

</mxmlc>

</target>

</project>

保存后关闭

然后把你需要编译的主类放置到 MyProject/src这个目录下, 并且命名为 MyProject.as 这样准备工作就完成了.

如何执行编译操作呢?

如果你是使用Linux或者Mac那么恭喜你, ant工具已经默认安装好了, 假设你是把MyProject保存在Desktop目录下, 那么输入:

cd ~/Desktop/MyProject/

ant

这样就大公告成了.

如果你是Windows用户, 那么需要去下载ant并且安装后使用命令行执行上面的语句.

有了这个, 你可以让你团队通过SVNTools 这样一类的工具将自己的代码同步到编译机, 然后运行此Ant任务,就能轻松的完成编译, 而且你还可以根据编译的输出结果来分析编译的信息.

]]>
Wed, 30 Dec 2009 09:08:36 -0700
<![CDATA[ActionScript 3.0 性能优化小知识]]>http://youyee.org/viewpoint/article_view.php?topic_id=116最近做的很多的事情都是和Flash开发有关,尤其是在性能优化上总结到不少经验,在这里分享给大家。

和其他平台开发一样,Flash程序的运行效率非常重要,为什么总有人觉得Flash程序很卡?甚至有人觉得Flash程序的运行效率还不如IE执行JavaScript 快,原因就在于写Flash程序的人,算法、代码写得太烂,最后连Flash Player的名声都被这些人写坏掉了。

高性能的程序源自高性能的算法、代码、和结构,下面就围绕着这个主题开始展开介绍。

1、改进算法

无论对于那一种程序,好的算法总是非常重要的,而且能够极大地提高程序性能,所以任何性能的优化第一步就是从算法或者说程序逻辑的优化开始,检查自己的程序是否有多余的运算,是否在没有必要的时候做了无用功,往往从这些方面就能找到那些导致性能低下的地方。

2、优化细节代码

针对细节总是好的,有一些小技巧比如:

用 var obj:Object = {}; 要比 var obj:Object = new Object();要好;

var arr:Array = []; 要比 var arr:Array = new Array(); 要好;

for (var i:int=0, len=arr.length; i<len; i++) 要比 for (var i:int=0; i<arr.length; i++) 要好;

如果不是为了保存颜色值请不要适用uint这个类型,他的速度比起 int要慢多了;

Array的遍历要比Object或者Dictionary的枚举要快得多。

if (myObj != null) 要比 if (myObj) 的速度要慢(更正, 之前把结果看反了,对不起大家~), for (var i:* in myObj) 比 for (var i:String in myObj) 要快;

Dictionary当 weak key设置为 true 的时候要比 false 慢;

var myText:String = "a" + "b" + "c";

var myText2:String = [ "a", "b", "c" ].join("");

在JavaScript里面在IE下后者要更快,但是在AS里面,前者更快!

在循环体内声明变量和在循环体外声明变量其实速度上不会有太大的区别。

3、权衡程序的结构

程序的架构也非常重要,良好的结构会带来性能和程序健壮性的提升,但是有的时候又是相互矛盾的,例如代码写得过于健壮,反而会影响性能,这个地方需要开发者自己去权衡。

4、小心Flash的重绘

如果你使用的是Flash Player 的Debugger版本,那么请在检查性能瓶颈的时候不要忘记打开显示重绘区域的功能,这将帮你迅速定位到舞台上有那些地方被重绘了,找出没有显示任何东西却不断重绘的地方,这些地方肯定是有问题的。Flash Player很笨,不会说你把一个DisplayObject的visible设置成false就放弃重绘那个显示对象。所以请保证你的MovieClip在visible=false的时候为停止状态。有一点很有意思,假设两个现实物体存在 hitTest = true 这样的关系,那么重绘的区域的面积很有可能 > 两者的面积总和!

5、以空间换时间

听起来挺虚,实则很简单,说白了就是以内存换CPU,例如将不变动的值进行保存,免去下次需要此数据的时候进行再次计算,虽然原理很简单,但是有的时候却很容易疏忽掉,而这个往往就造成你的算法效率低下的问题。

6、记得销毁你的对象

对于非常驻的对象使用完之后记得消除其引用,防止出现内存溢出的问题,往往要做到这一点需要有一个良好的编程习惯。

7、清除冗余的代码

有些代码可能你的程序一辈子也不会执行到,请把这些没有用的代码或者对象清理掉,否则内存会被偷偷的蚕食掉。

8、小心使用useBitmapCache = true

一般情况下除非你确定这个显示对象不可能发生变化那么用用也无妨,不过我更推荐自己手动的用BitmapData将该对象Draw一遍,然后让这个对象彻底消失。否则每次的变动都是巨大的性能消耗。

大致先总结到这里,欢迎大家一起来讨论关于Flash性能优化的细节。

]]>
Thu, 26 Nov 2009 10:35:24 -0700
<![CDATA[YouYee Writing 2nd 已经完成]]>http://youyee.org/viewpoint/article_view.php?topic_id=115 算算从构想到现在真正发布, 竟然用了8个月, 其实真正编码的时间也就在1个月左右, 中间不是太忙, 就是没有灵感, 使得每次拿起之前的代码又发现很多的不足, 改了又改.所以很多的代码甚至在没有完成之前就被重写了好几次. (点击进入 Blog in Writing)

YouYee Writing 2nd 虽说算不上自己的经验之作,但是也可以算是自己对来到目前这家公司后半年的一次总结吧, 从Flash到Ajax再到Flash,我似乎走了一圈又回到了开始的地方. 那么一起来分享下这些开发的经历吧.

Writing 2nd使用了我自己写的JS库,并且和Flash相互结合, 从每一个图标, 每一行代码都是自己亲手操刀, 自己担任了前端开发, PHP开发, 设计, 页面重构, 脚本以及样式压缩工具的开发 工作, 当然后期还要多感谢下Qbaty帮我指出很多地方的问题进行优化. 基本上整个流程都尝试了一遍, 这是在自己毕业后第一次如此完整地走完了一遍网站开发的流程.

关于 YouYee Writing 2nd 的特性介绍:

1. 数据静态化(首页, 像册, 视频, 留言板), 这样提高了访问速度, 而且更利于SEO.

2. 首页支持滚动加载, 观看网页者只需要滚动网页,内容就会逐条加载进来, 这样就可以减少用户点击翻页而感到麻烦的问题了.

3. 和ViewPoint紧密结合, 从ViewPoint上传的高清视频现在能够在Writing下以完整的尺寸播放了(只要你的浏览器窗口够大)

4. 其实也不算特性了, 只能很遗憾地说, Writing不再支持IE6或更加早版本的浏览器了, Writing遵循W3C标准, 但是为了获得较好的视觉效果, 我暂时还是放弃了IE6的支持, Qbaty正在尝试将IE6的支持加上.

基本上Writing 2nd 80%的开发都是在Mac上完成的,也是我在Mac开发度最高的一款作品. 由此, 未来我将全面转入Mac开发的平台, 开发将涉及目前的前端开发以及以后的 iPhone 应用开发.

一些声明:

1. 短期之内还不打算开源, 因为我还要完成YouYee ViewPoint和Writing之间的整合工作.

2. 如果想体验效果最好的Writing, 不妨使用下 Safari浏览器, 其实在各个浏览器中, 综合感觉最好的浏览器我始终觉得还是Safari.

3. 接下来又要准备进入一个工作繁忙期, 我想我会把一部分优化工作交给Qbaty, 然后空余的时间用AIR写CSS Sprite工具和脚本Merge工具.

后记:

我不得不每天花点时间去跑跑步来减去自己的体重, 而且想在周末的时候玩玩我家那台快要生锈的PlayStation3, 所以实在很难抽出太多的时间去开发并且维护目前的项目了. 但是我依旧会在自己有灵感的时候来更新一些内容.

]]>
Thu, 22 Oct 2009 10:51:49 -0700