相册正式版完成即将上线测试

2009年06月26日

属于内部测试版本吧,功能方面已经实现了.现在的工作主要是美化…欢迎UI设计高手联系我,大家一起完善这个程序.

暂时没有使用Module加载模块,这个版本仅用来测试稳定性,功能是否存在问题.

下一个版本在增强视觉体验的基础上会加快加载速度.

本程序依赖Mysql数据库和PHP服务器端脚本,并仅支持FlashPlayer 10.0以上版本

测试地址:影忆坊相册管理系统v1.0.1

SWFLoader类的研究

2009年06月21日

1 , SWFLoader类是Image类的父类(我一直没注意这一点)

Image类继承自SWFLoader类,增加了接受焦点,可作为ItemRenderder等功能,同时说明也继承了加载进度百分比等方便的属性…

2, 如果访问SWFLoader类加载的内容的真实内存对象(居然不是content属性)

通过实验,

SWFLoader.source = bitmap;

trace(SWFLoader.content === bitmap)  //返回: FALSE 说明content属性并不是直接引用加载的实际对象的

那么如何访问这个真实对象呢?

答案居然是:source属性!

还是上一个实验:

SWFLoader.source === bitmap; //返回: true

—-分割线—–

另外,今天尝试使用ImageSnapshot.captureBitmapData静态方法,并对BitmapData类和BytesArray类稍加研究,看到了未来处理位图的一些功能,可能会在以后的版本中加入一些用户处理图片的功能.

我的相册和多图上传程序基本成型,内存控制方面也基本上在可控制的范围内,关键点在于相册程序一定要使用缩略图预览,否则同时加载几十个甚至几百个位图会占用超乎想象的内存(几何倍上升,我4G内存的电脑都会在自动浏览20多张,每张在1MB以内的图片时发生浏览器崩溃的情况,内存占用在500M以上).

利用增强的PHP脚本,已经实现自定义缩略图和大图上传分开目录的功能,对于后台添加图片实在是方便至极.

目前还没有看到国内有非常复杂的Flex应用,昨天发现一个音乐盒程序,觉得并不复杂,可能他们应用了FMS,速度挺好的.

还有点问题就是skin的设计,目前只尝试过修改css改变外观.

关于Flex SDK3.2和Flash Player 10的上传文件机制研究总结

2009年06月20日
多图上传

多图上传

这些天在做我的网络相册,播放方面很容易,本来打算用Flash结合纯代码组件做,但是自己的Flash这边功力不是很够,用代码绘图和Flash设计也不是很熟悉,费了不少周折,最后还是用Flex框架搞定.

很简单,用List做的缩略图Bar,用SWFLoader加载大图.

SWFLoader相当方便,甚至连加载进度的百分比都用属性准备好了.

既然是相册,必然需要上传图片.

Flash Player 10(下文称做:FP)的FileReferenceList (下文称做:FRList)和FileReference(下文称做:FR)FileReferenceListFileReferenceList类增加了load()和save()方法,同时用只读的data属

性(DataArray类型)保存本地和待上传的文件实际内容.

如果要显示本地文件,或者预览待上传的文件,可以用Loader类的loadByteArray()方法读取FR的data内容.

值得注意的几个要点:

1,FR一次只能上传或下载一个文件,

FRList可以用Browse()方法让用户选择多个文件,并保存在fileList属性(Array类型)中,fileList的数据都是FR.也就是说,可以一次选择多个文件,然后遍历这个fileList,一个一个顺序上传或下载,然后就应该清空FR的内容,因为它只能做一次.

2,关于Browse()方法,

只能通过用户操作类的事件才能打开windows对话框,而使用代码方式调用这个方法会报错.

3,Browse()方法可以多次调用,但是必须是在FR上传或下载动作之前.

多次调用的结果是只保存最后一次Browse()选择的文件,而不是累加.

4,必须用FP 10.0以上的编译版本.

FR的load(),save()方法和data属性从FP10开始支持,之前的版本无法使用这些方法和属性.

5,必须借用第三方语言实现服务器保存的服务.

本人使用且仅能使用PHP脚本,可以实现单个文件的上传,更改文件名为Flex端指定名称,建立并将文件保存到指定目录(多层),将实际保存文件的目录和文件名保存到指定数据库,并返回任意信息通知Flex端工厂化处理.

6,及时移除前台的complete事件的监听.

如果使用MVC框架,注意单例类保存FR的引用时的Event事件触发问题.本人使用Cairngorm框架,如果不及时移除监听,会造成前台预览本地文件的load()方法的complete事件在upload()方法的complete事件时再次触发前台的处理函数.

7,如果要接收服务器脚本返回的数据,应该监听upload_complete_data事件,并读取event的data属性.

FR的upload_complete_data事件只能返回PHP的echo打印的数据,而不是return.

在PHP脚本中,return只能用来终止脚本,类似于AS3中的return无参功能.

8,如果要用FR的upload传递本地数据到服务器脚本,只能通过URLRequest的data属性,而这个data属性只接受String类型和URLVariable类型(动态类)的数据,同时,URLVariable类的自定义属性只能接受”名称:值”类型的数据,比如:

var URLVars : URLVariable = new URLVariable();

var URLReq:URLRequest = new URLRequest();

URLVars.myName = “Fonny”;

URLRequest.data = URLVars;

9,URLRequest需要设置的属性:

首先,应该设置URLRequest.method属性,该属性接受URLRequestMethod类定义的常量POST和GET.关于POST和GET的区别请查阅HTML相关资料.

然后,将URLRequest的url属性指定为uploader脚本相对于Application的相对位置的String,如:

如果PHP脚本在Application的本目录,可以直接指定为:”uploader.php”;

如果在子目录PHPscript中,则为:”PHPscript/uploader.php”或”./PHPscript/uploader.php”;

uploader请求,类似于HTTPService,具体区别或者说他们根本就是一个东西,我还没有证实,但是根据Adobe官方文档,并没有说他们是同一种服务,而是分开讲解的,所以我暂且认为他们有所不同.

10,(09-06-21)今天证实,FR的load()和upLoad()方法都会触发complete事件,而且互相独立,即使是upload之前调用过load把本地文件加载到内存中,之后调用upload()的时候还是会重新触发一次complete事件.所以还是那句话,及时移除FR各个阶段的监听,特别是多图上传的时候.

关于网站建设的进度和近期的情况报告

2009年06月14日

也不知道是给谁报告,但是这边年来慢慢养成了习惯,一段时间必须总结一下,把想到的,学到的,经验,都记录下来.因为回头看前面写的东西,觉得似乎能找回点什么.

文本类型的程序逻辑目前实在是轻车熟路了,写了部分或完整的程序不下10个,客户端可能遇到的问题基本上都想到了,基本上也做了很大的调整.目前除了文本保存到数据库会有较多的标签数据外,其他问题基本都解决了.
用Cairngorm框架也很熟悉了,可以不客气的说,这个框架上,我多少算个专家了.自己继承出delegate,Command,和vo的子类,加上eclipse的Cairngorm插件配合,写代码相当方便快速.类的结构,代码的写法也慢慢科学起来,步骤较清晰,扩展性也挺强的.
目前的主要问题,也是我学重新学Flash甚至是编程的首要目的还是关于相册方面的.
load图片,显示出来问题不大.但是想做出自己需要的效果就有点麻烦了.
就像一些高手说的,Flex做目前国内带宽的网络应用不合适,有点大,速度方面不行.
我用Flex 3.3 SDK框架,没发现和3.2有什么很大的区别.仅仅是因为我追新的喜好而已.
每次写到相册这一块就感觉用List或者用component自定义加载图片的东西就会觉得太大了,容器本身不需要那么多功能,一个sprite就能解决的事情,没必要交给那么大的ui.
这几天我尝试直接用Flash框架,直接用代码写自定义类,主要是用来组织图片.
我发现用纯代码写很难做好美观的界面,虽然可以达到想要的功能,但是出来的视觉方面的东西太单薄.
去年这个时候我就发现了一个罗马尼亚的网站专门做flash相册,之前我的网站的相册就是改自他们当时最新的一个AS3的相册程序,用XML加载图片地址数据,没有涉及图片上传,数据库方面的东西.目前这个网站已经不开源免费了,每个程序,包括当时我下载他们的全部程序都是要用美刀才能下载了.这一点我还算有远见,当时一看这玩意就是好东西,直接照单全收了.不过现在他们的一些新程序确实好看了很多,不过主要是界面方面的修改,试用了一下,感觉功能方面没什么不同.
通过研究他们的程序,我感觉还是必须要多用Flash软件设计UI界面,然后用AS类来控制会比较合适.
目前我掌握的仅仅是用类绑定到Fla文件的库组件,并用一个kit转换成继承自UIMovieclip的Flex框架的组件.当然,不转换也是可以的,就是不能在Flex中用而已.
需要掌握的是,用Flash布局,直接做出独立功能的组件,比如独立加载图片的容器类,组织排序缩略图的组件,导航组件,不同Group的一系列图片不需要多个相册实例,直接改数据源即可的功能.其实说白了,问题在于一直没用Flash IDE,不太熟悉用这个软件而已.而且一直没有好好的从Sprite开始写一个容器类,有些小问题老是影响我的心情.看来近期的目标就是搞定这些了.
虽然我的网站主要还是想做成摄影工作室类型的,那么图片展示必不可少,但是,我想还是把已经成熟的Blog模块先用上吧,反正从结构上来说,并不影响将来加上其他模块.只是好像我没时间测试,先不管了,下次AS搞乱了我的心情我就修正Blog这一块,让它上线,让朋友们帮我测试.嘿嘿…

心疼一下翁美玲

2009年06月14日

射雕是我当时最爱的电视剧,今天在腾讯无意看到一个帖子,列出了86版射雕的全部主要演员如今的照片和射雕剧照的对比.
可能是年纪渐大,发现现在对这些岁月不饶人的东西多了很多感慨.
当年不输翁美玲的美女射雕中的杨康的老婆,如今也变成了一个肥婆,完全认不出是同一个人了.
而我的翁美玲…
记得得知她走了的消息那天我还是个高中生,在省实验,当时就懵了几秒钟.
每次看到她的消息,照片都会回忆一下当年看射雕的感觉.那种对爱情的向往,对聪慧的欣赏当时就深深的影响了我一辈子的爱情观.不客气的说一声,翁美玲饰演的蓉儿就是我喜欢的类型.
这么多年来,无数现实,无数社会的蹉跎,改变了我一些观念,但是我发现自己仍然没有一个完整的人生观,遇到问题到做出决定的时间很快,不过这个过程在慢慢加长,这也许就是成熟的标记吧.
今天我又发现,对翁美玲,也许应该说是她当时扮演的蓉儿,还是怀着同样的感情.看一眼,就会会心的笑起来.

绿茵传奇

2009年06月6日

这几天疯了似的玩起实况2009,只因为[绿茵传奇]…
基本上这就是一球成名的游戏版,玩家可以创建一个球员(一般来说都是带入自己的形象啦,比如身高,体重,脸型什么的),然后用这个球员从17岁开始参加选拔赛,然后进入某个俱乐部开始绿荫生涯.
2009的实况玩起来实在不爽,运动的速度小于等于现实的速度,也就是非常接近真实比赛的节奏,但是…要知道,足球这玩意本身就是有点”闷”的运动,一场比赛下来进步了几个球,却需要二十几个人满场飞…
游戏本身就是用来娱乐的,需要更多的刺激,如果实况变成了”模拟足球”我估计免费下载来玩都免了,还不如自己亲自上场和一帮朋友踢一场来得痛快.
但是绿茵传奇这个模式确实有吸引人的地方.
以前我很喜欢玩足球经理这个文字类游戏,看着自己的球队的各项数字不断提升,电脑通过几个文本告诉我,”哇,恭喜你获得欧冠冠军!”就能把玩家哄得睡觉都会笑.
现在不同了,自己”玩”自己,上场闯一闯!此间的成就感简直无法形容.试想当”自己”能和世界顶尖球星做队友,给或者让他们跟自己攻城拔寨,这是多么让人愉快的事情.
另外,加上可拉米的评分系统相当苛刻,成长之路也可谓艰辛,刚开始的一两个赛季那简直就是一种折磨,人家不知名的同学带球跑都比自己裸奔还快,越追越远…射门那就更别提了,一脚一架飞机…
但是慢慢的,随着能力的提高,加入强队,快乐的生活就开始了.
以下一万字省略,这种的愉悦的感觉非亲自尝试不可描述.
如今我已经加入了曼联,上个赛季(也就是生涯开始的第二个年头,那年我18岁)跟着(应该说是带领,用我的超级无敌S/L法)获得了欧冠冠军(SL了多达6次,最后还是用点球决胜的-_-#),甲级杯冠军(这个杯子SL少了很多,才3次就搞定了-_$),联赛第六的”好成绩”,赛季结束后曼联就找上门来了…哈哈,终于可以和C罗为伍,鲁尼为友了,不过想通过队内比赛进入一线队还有很长的路要走,看了一下一线队替补的能力值,比我的各项评价多5~10不等…
好了,今天先说到这里,编程的事情我没丢,那是工作时间的事情,嘿嘿,顺便说一句,改好了一个用Cairngorm框架写的像册程序,虽然用起来不是很爽,但是作者的编程能力还是不错的,很多值得借鉴的东西…

转载[李开复博士给中国计算机系学生的建议]

2009年05月23日

积薄发,有的放矢――李开复博士给中国计算机系学生的建议

很多在校的大学同学问我们:“我今年还没有到毕业班,但我很想知道,如果将来我想申请Google中国工程研究院,现在应该如何让自己做好准备?”下面是Google中国总裁李开复博士和其他一些Google资深的华人工程师给广大同学的建议。

(1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及一些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。不妨试试Donald Knuth的Art of Computer Programming里的题目,如果你能够解决其中的大部分题目,就说明你在算法方面的功力不错了。

(2)多实战。通过编程的实战积累经验、内化知识。建议大家争取在大学四年中积累编写十万行代码的经验。

(3)求实干。不要轻视任何的实际工作,比如一些看似简单的编码或测试。要不懈追求对细节一丝不苟的实干作风与职业精神。

(4)不放弃数学。数学是思维的体操,数学无处不在。尤其当你对一些“数学密集型”的领域有兴趣,例如视频、图像处理等等,你需要使它成为你的利器。

(5)培养团队精神,学会与人合作。

(6)激励创新意识,不为书本和权威所约束。

(7)有策略地“打工”。在不影响学业的前提下,寻找真正有意义的暑期工作或兼职。去找一个重视代码的公司,在一个好的“老板”指导下完成真正会被用户使用的程序。不要急于去一个要你做“头”而独挡一面的地方,因为向别人学习,是你的目的。打工和找工作一样,“不要只看待遇和职衔,要挑一个你能够学习的环境,一个愿意培养员工的企业,一个重视你的专业的公司,最后,要挑一个好老板。”

关于AVM虚拟机的问题(暂时搁置)

2009年05月23日

最近开始关注英语,说实话,我真的很羡慕E文是母语的人,编程基本上就是用某种方式写文章.
废话少说,昨晚看到很多资料都是做成swf格式的视频,于是想试着用Flex做个桌面的swf播放器.本来考虑得很简单,用一个swfloader就能搞定,实际上却不是那么简单.
如果是AVM2虚拟机的文件还容易点,直接把swfloader.content as MovieClip就能控制播放.但是如果目标文件是AVM1(AS1-2打包的)的文件就有点麻烦了.因为FP不能跨脚本互访,也就是AVM1和AVM2虚拟机不能互访,(当然还是有办法解决,但是很麻烦,可以用JS作为第三方中介),如果不用JS,而且AS1-2的swf不是自己写的,基本上只能作为DisplayObject操作了,(看到还有个办法,就是用BytesArray加载目标为二进制格式,然后查找其中某个标签,改之,也就是欺骗FP的感情,但是用这个办法好像并不是那么完美,例子链接)
播放有些类型的(经验证为AS2打包的)swf文件不能识别.
搜了很久,似乎没有其他办法解决这个问题….
我实在是无语了.对AS3的能力也开始质疑了,我发现想用编程实现任何一个想法仅仅靠一两门网络编程语言是完全不够的,看来必须开始接触C家族或者Java了.
Adobe自家的东西无法控制自家的东西,而看起来C却可以.
这个问题先提出来,欢迎大家帮助我找到更好的办法,做个基于AS3的swf文件播放器.

涉及跨域访问swf文件的crossdomain.xml设置(备忘)

2009年05月1日

这是个简单的demo:

文件名:crossdomain.xml

位置:域的根目录下

格式:xml

内容如下:(code标签之内的)

<code>

<?xml version=”1.0″?>
<!– http://www.foo.com/crossdomain.xml –>
<cross-domain-policy>
    <allow-access-from domain=”www.friendOfFoo.com”/>
    <allow-access-from domain=”*.foo.com”/>
    <allow-access-from domain=”105.216.0.40″/>
</cross-domain-policy>
</code>

Flex的遗憾-关于Html文本支持问题(暂时无法解决)

2009年04月30日

Flex很好,很强大,I like it !
But,毕竟是内部渲染器,目前对Html文本支持不够,不能完全兼容标准的Html标签,虽然可以通过变通的方法达到几乎相同的显示效果,但是会增加N倍的数据库占用.
比如,显示同样一个Html文本:

狠狠的研究了一下Mysql数据库方面的资料.

心得如下:

设计数据库结构

Flex需要这样保存:
<code>
<TEXTFORMAT LEADING=”2″><P ALIGN=”LEFT”><FONT FACE=”Verdana” SIZE=”14″ COLOR=”#0B333C” LETTERSPACING=”0″ KERNING=”1″>狠狠的研究了一下Mysql数据库方面的资料.</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING=”2″><P ALIGN=”LEFT”><FONT FACE=”Verdana” SIZE=”14″ COLOR=”#0B333C” LETTERSPACING=”0″ KERNING=”1″></FONT></P></TEXTFORMAT><TEXTFORMAT LEADING=”2″><P ALIGN=”LEFT”><FONT FACE=”Verdana” SIZE=”14″ COLOR=”#0B333C” LETTERSPACING=”0″ KERNING=”1″>心得如下:</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING=”2″><P ALIGN=”LEFT”><FONT FACE=”Verdana” SIZE=”22″ COLOR=”#0B333C” LETTERSPACING=”0″ KERNING=”1″><B>设计数据库结构</B></FONT></P></TEXTFORMAT>
</code>

而html是这样:

<code>

狠狠的研究了一下Mysql数据库方面的资料.

心得如下:
<h3>设计数据库结构</h3>

</code>

这样的多余字节占用实在太可怕了,一个回车,增加几十个属性标签,上百个字符…

总结:Flex目前并不适合作为新闻类型的应用,除非有内镶Html标签识别组件.