博客公告(点击显示/隐藏)| 今日心情:神学
2010-07-30 21:09:43
小S吧今天你来了吗?更新速度:每周2-3篇以上!在俺博客看到有用的东西,学习了之后,记得回访带点人气哦 ^_^ 嘿嘿!
欢迎跟俺交换友情链接啊。。留言,直接QQ等联系我都行啊
转载本博客文章请注明:来源小S吧——sunbright博客,链接地址:http://www.xiaos8.com
2010
5-31
前言
标题纠结了很久,刚开始叫“我用反射函数describeType在干吗?”,看到第一位仁兄的回帖,继续纠结,继续推敲,最后就出现了现在的标题。。
如果不知道describeType是什么东西,那么先去看这篇基础教程吧:
http://www.xiaos8.com/article.asp?id=251
如果不知道describeType是什么东西,那么先去看这篇基础教程吧:
http://www.xiaos8.com/article.asp?id=251
![]() |
2、对象的结构检查,当你去调试别人写的类时,特别是结构较为复杂的话,那么用反射函数来帮忙,将所有结构打印出来,他的继承关系,他实现的接口等,将一目了然!
![]() |
3、对象的属性检查,还是一样你去调试别人的类,那么用反射函数来帮忙,一眼就可以看到如此多的属性,而且是否是只读属性,还是只写属性,或者是可读可写属性,就连属性返回对象的类型也一目了然!
![]() |
4、对象的方法检查,同理调试别人的类,依然用反射函数来帮忙,转瞬间就能知道他所有的方法调用,而且还能知道这个方法是出自哪个类实现的,也能知道该方法会返回什么类型!
![]() |
2010
5-30
今天的上海Flash聚会,谈熠讲的很精彩,特别是flash.utils.Proxy类,自从我知道了这个类,很多项目中都用它,它使我的程序变得相当灵活,而且在跟C++定义接口时,Flash用Proxy类封装接口,相当完美!不过我却要补充的是一个关于Proxy类的bug,用Proxy类开发差不多有1年了,遇到过一个比较头疼的问题,下面这个链接就是我以前发的关于这个bug的描述。
http://www.xiaos8.com/article.asp?id=503
这个bug,暂时是没有直接的解决办法,不过我相信能碰到的人应该很少
我们公司的技术构成是C++和Flash共同存在,很多时候在加载时需要用到不同域加载,因此才能碰到这个问题。
我现在采用的解决办法是自己写一个Proxy类,不过这办法我觉得比较SB,一般我们调用方法的时候都是Object.method(),而使用我们自己写的,自然没那么方便了,只能Proxy.call(methodName,args); Proxy.set(name,value); Proxy.get(name); 但好处是Proxy那种灵活性依然存在,不过是写程序的时候很麻烦,而且面对可读性可能比使用Proxy类更差。因此还需大家谨慎衡量一下利弊哦~
http://www.xiaos8.com/article.asp?id=503
这个bug,暂时是没有直接的解决办法,不过我相信能碰到的人应该很少
我们公司的技术构成是C++和Flash共同存在,很多时候在加载时需要用到不同域加载,因此才能碰到这个问题。
我现在采用的解决办法是自己写一个Proxy类,不过这办法我觉得比较SB,一般我们调用方法的时候都是Object.method(),而使用我们自己写的,自然没那么方便了,只能Proxy.call(methodName,args); Proxy.set(name,value); Proxy.get(name); 但好处是Proxy那种灵活性依然存在,不过是写程序的时候很麻烦,而且面对可读性可能比使用Proxy类更差。因此还需大家谨慎衡量一下利弊哦~
2010
5-25
首先来看一个演示,如果你装了麦克风,那么请对着你的麦克风大声的啊一下,下面的flash演示就会动起来
随着你声音的大小不一,他每次跳动的高度和速度也不一样下面是源代码,不过是接口展示而已,所以是一个很简单的例子,也是很容易看懂的
随着你声音的大小不一,他每次跳动的高度和速度也不一样下面是源代码,不过是接口展示而已,所以是一个很简单的例子,也是很容易看懂的
package {
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.ActivityEvent;
import flash.events.Event;
import flash.media.Microphone; public class SoundGame extends Sprite
{
private var main:Sprite;
private var mic:Microphone;
private var minHigh:int = 0;
private var intervalValue:int = 0;
public function SoundGame()
{
init();
}
//初始化
private function init():void{
initMic();
createSky();
createLand();
createMain();
}
//初始化麦克风
private function initMic():void{
mic = Microphone.getMicrophone();
mic.setSilenceLevel(30,0);
mic.setLoopBack();
mic.addEventListener(ActivityEvent.ACTIVITY,micActivityHandle);
}
//创建操作
private function createMain():void{
var mainContainer:Sprite = new Sprite;
main = new Sprite;
main.graphics.beginFill(0xffffff);
main.graphics.drawCircle(-2,-4,4);
mainContainer.x = 100;
mainContainer.y = 250;
mainContainer.addChild(main);
addChild(mainContainer);
main.addEventListener(Event.ENTER_FRAME,frameHandle);
}
//创建天
private function createSky():void{
var shape:Shape = new Shape;
shape.graphics.beginFill(0x6699cc,1);
shape.graphics.drawRect(0,0,400,250);
addChild(shape);
}
//创建陆地
private function createLand():void{
var shape:Shape = new Shape;
shape.graphics.beginFill(0x002222,1);
shape.graphics.drawRect(0,250,400,150);
addChild(shape);
}
//麦克风活跃处理
private function micActivityHandle(e:ActivityEvent):void{
if(e.activating && intervalValue == 0){
intervalValue = mic.activityLevel / 5;
}
}
//持续处理
private function frameHandle(e:Event):void{
if(intervalValue == 0) return;
main.y -= intervalValue;
intervalValue --;
if(intervalValue == 0) intervalValue -= 1;
//落地
var min:int = - minHigh;
if(min < main.y){
main.y = min;
intervalValue = 0;
}
}
}
}
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.ActivityEvent;
import flash.events.Event;
import flash.media.Microphone; public class SoundGame extends Sprite
{
private var main:Sprite;
private var mic:Microphone;
private var minHigh:int = 0;
private var intervalValue:int = 0;
public function SoundGame()
{
init();
}
//初始化
private function init():void{
initMic();
createSky();
createLand();
createMain();
}
//初始化麦克风
private function initMic():void{
mic = Microphone.getMicrophone();
mic.setSilenceLevel(30,0);
mic.setLoopBack();
mic.addEventListener(ActivityEvent.ACTIVITY,micActivityHandle);
}
//创建操作
private function createMain():void{
var mainContainer:Sprite = new Sprite;
main = new Sprite;
main.graphics.beginFill(0xffffff);
main.graphics.drawCircle(-2,-4,4);
mainContainer.x = 100;
mainContainer.y = 250;
mainContainer.addChild(main);
addChild(mainContainer);
main.addEventListener(Event.ENTER_FRAME,frameHandle);
}
//创建天
private function createSky():void{
var shape:Shape = new Shape;
shape.graphics.beginFill(0x6699cc,1);
shape.graphics.drawRect(0,0,400,250);
addChild(shape);
}
//创建陆地
private function createLand():void{
var shape:Shape = new Shape;
shape.graphics.beginFill(0x002222,1);
shape.graphics.drawRect(0,250,400,150);
addChild(shape);
}
//麦克风活跃处理
private function micActivityHandle(e:ActivityEvent):void{
if(e.activating && intervalValue == 0){
intervalValue = mic.activityLevel / 5;
}
}
//持续处理
private function frameHandle(e:Event):void{
if(intervalValue == 0) return;
main.y -= intervalValue;
intervalValue --;
if(intervalValue == 0) intervalValue -= 1;
//落地
var min:int = - minHigh;
if(min < main.y){
main.y = min;
intervalValue = 0;
}
}
}
}
2010
5-24
1、先给予,后索取 (Be the first to give )。
研究表明,我们容易被给我们帮过忙的人说服:有些服务员给我们结账的时候带来口香糖,我们一般给他们的小费多些。工作中我们更倾向于给帮助过我们的人更多支持… 2、不要给对方太多选择 (don’t offer too many choices):
不论是给用户选择,还是给员工的奖励机制,太多的选择经常会给人带来挫折感… 3、不要以自我为中心辩护(argue against self-interest)。
在说服别人的过程中,信任是最关键的。有时候在大力鼓吹之前承认自己方面的一些小不足可以提高信任感… 4、失去比得到更有说服力 (losses are more persuasive than gains)。
告诉对方如果不接受你的意见或者不买的你的产品会失去什么,要比只是说明他们会得到什么要更能说服人… 5、让对方觉得自己已经取得了一定进步 (make people feel as if they’ve already made progress toward a goal)。
例如以下两种推销洗车会员卡服务的方法,方法2的顾客保持率是方法1的两倍。
1) 洗八次赠一次
2) 洗十次车赠一次,第一次算免费赠送
研究表明,我们容易被给我们帮过忙的人说服:有些服务员给我们结账的时候带来口香糖,我们一般给他们的小费多些。工作中我们更倾向于给帮助过我们的人更多支持… 2、不要给对方太多选择 (don’t offer too many choices):
不论是给用户选择,还是给员工的奖励机制,太多的选择经常会给人带来挫折感… 3、不要以自我为中心辩护(argue against self-interest)。
在说服别人的过程中,信任是最关键的。有时候在大力鼓吹之前承认自己方面的一些小不足可以提高信任感… 4、失去比得到更有说服力 (losses are more persuasive than gains)。
告诉对方如果不接受你的意见或者不买的你的产品会失去什么,要比只是说明他们会得到什么要更能说服人… 5、让对方觉得自己已经取得了一定进步 (make people feel as if they’ve already made progress toward a goal)。
例如以下两种推销洗车会员卡服务的方法,方法2的顾客保持率是方法1的两倍。
1) 洗八次赠一次
2) 洗十次车赠一次,第一次算免费赠送
2010
5-24
1) The only “best practice” you should be using all the time is “Use Your Brain”.
唯一的“Best Practice”并不是使用各种各样被前人总结过的各种设计方法、模式,框架,那些著名的方法、模式、框架只代码赞同他们的人多,并不代表他们适合你,你应该更多的去使用你的大脑,独立地思考那些方法、模式、框架出现的原因和其背后的想法和思想,那才是“best practice”。事实上来说,那些所谓的“Best Practice”只不过是限制那些糟糕的程序员们的破坏力。2)Programmers who don’t code in their spare time for fun will never become as good as those that do.
如果你对编程没有感到一种快乐,没有在你空闲的时候去以一种的娱乐方式去生活,无论是编程,还是运动,还是去旅游,那么你只不过是在应付你的工作,无时无刻不扎在程序堆中,这样下来,就算是你是一个非常聪明,非常有才华的人,你也不会成为一个优秀的编程员,要么只会平平凡凡,要么只会整天扎在技术中成为书呆子。当然,这个观点是有争议,热情和能力的差距也是很大的。不过我们可以从中汲取其正面的观点。3)Most comments in code are in fact a pernicious form of code duplication.
注释应该是注释Why,而不是How和What,参看《惹恼程序员的十件事》,代码告诉你How,而注释应该告诉你Why。但大多数的程序并不知道什么是好的注释,那些注释其实和code是重复的,毫无意义。4)XML is highly overrated.
XML可能被高估了。XML对于Web上的应用是不错的,但是我们把其用到了各种地方,好像没有XML,我们都不会编程了。5)Not all programmers are created equal.
这是那些junior经理或是流程爱犯的错,他们总是认为,DeveloperA == DeveloperB,只要他们的title一样,他们以为他们的能力、工作速度、解决问题的方法,掌握的技能等等都是一样的。呵呵。更扯的是,在某些时候,就算是最差的程序员,他们也会认为其比别人强十倍,这就是现代的SB管理。6)”Googling it” is okay!
Google只会给你知识,并不会教给你技能。那里只有“鱼”,没有“渔”,过度的使用Google,只会让你越来越离不开他,你越来越去要去立马告诉你答案,而你越来越不会自己去思考,自己去探索,去专研。如果KFC快餐是垃圾食品对我们的身体没有好处,那么使用Google也一种快餐文化对我们的智力发展大大的没有好处。7)If you only know one language, no matter how well you know it, you’re not a great programmer.
如果你只懂一种语言,准确的说,如果你只懂一类语类,如:Java和C#,PHP和Perl,那么,你将会被局限起来,只有了解了各种各样的语言,了解了不同语言的不同方法 ,你才会有比较,只有了比较,你才会明白各种语言的长处和短处,才会让你有更为成熟的观点,而且不整天和别的程序在网上斗嘴争论是Windows好还是Unix好,是C好还是C++好,有这点工夫能干好多事了。世界因为不同而精彩,只知道事物的一面是有害的。8)Your job is to put yourself out of work.
你的工作不是保守,那种教会徒弟,饿死师父的想法,不但是相当短浅的,而且还是相当脑残的。因为,在计算机世界里,你掌握的老技术越多,你就越没用,因为技术更新的太快。你对工作越保守,这个工作就越来越离不开你,你就越不越不能抽身去学新的东西,你也就越来越OUT了。记住:If you can’t be replaced then you can’t be promoted!9)Design patterns are hurting good design more than they’re helping it.
很多程序员把设计模式奉为天神,他们过度的追求设计模式以至都都忘了需求是什么,结果整个系统设计被设计模式搞得乱七八糟,我们叫这种编程为“设计模式驱动编程”,正如第一点所说,如果你不懂得用自己的大脑思考的话,知其然,不知所以然的话,那么你不但得不到其好处,反而受其所累。10)Unit Testing won’t help you write good code.
准确地说,我们可以认为这是Test-Driven开发,其实,这种开发就是先写unit test case,这样的开发方式的主要目的是,为了防止你不会因为一个改动而引入Bug,但这并不会让你能写出更好的代码。这只会让你写出不会出错的代码。同第一点,这样的方法,只不过是防止糟糕的程序员,而并不是让程序员或代码质量更有长进。反而,通过Unit Test会为程序员的为自己代码做辩解的一种托辞。
唯一的“Best Practice”并不是使用各种各样被前人总结过的各种设计方法、模式,框架,那些著名的方法、模式、框架只代码赞同他们的人多,并不代表他们适合你,你应该更多的去使用你的大脑,独立地思考那些方法、模式、框架出现的原因和其背后的想法和思想,那才是“best practice”。事实上来说,那些所谓的“Best Practice”只不过是限制那些糟糕的程序员们的破坏力。2)Programmers who don’t code in their spare time for fun will never become as good as those that do.
如果你对编程没有感到一种快乐,没有在你空闲的时候去以一种的娱乐方式去生活,无论是编程,还是运动,还是去旅游,那么你只不过是在应付你的工作,无时无刻不扎在程序堆中,这样下来,就算是你是一个非常聪明,非常有才华的人,你也不会成为一个优秀的编程员,要么只会平平凡凡,要么只会整天扎在技术中成为书呆子。当然,这个观点是有争议,热情和能力的差距也是很大的。不过我们可以从中汲取其正面的观点。3)Most comments in code are in fact a pernicious form of code duplication.
注释应该是注释Why,而不是How和What,参看《惹恼程序员的十件事》,代码告诉你How,而注释应该告诉你Why。但大多数的程序并不知道什么是好的注释,那些注释其实和code是重复的,毫无意义。4)XML is highly overrated.
XML可能被高估了。XML对于Web上的应用是不错的,但是我们把其用到了各种地方,好像没有XML,我们都不会编程了。5)Not all programmers are created equal.
这是那些junior经理或是流程爱犯的错,他们总是认为,DeveloperA == DeveloperB,只要他们的title一样,他们以为他们的能力、工作速度、解决问题的方法,掌握的技能等等都是一样的。呵呵。更扯的是,在某些时候,就算是最差的程序员,他们也会认为其比别人强十倍,这就是现代的SB管理。6)”Googling it” is okay!
Google只会给你知识,并不会教给你技能。那里只有“鱼”,没有“渔”,过度的使用Google,只会让你越来越离不开他,你越来越去要去立马告诉你答案,而你越来越不会自己去思考,自己去探索,去专研。如果KFC快餐是垃圾食品对我们的身体没有好处,那么使用Google也一种快餐文化对我们的智力发展大大的没有好处。7)If you only know one language, no matter how well you know it, you’re not a great programmer.
如果你只懂一种语言,准确的说,如果你只懂一类语类,如:Java和C#,PHP和Perl,那么,你将会被局限起来,只有了解了各种各样的语言,了解了不同语言的不同方法 ,你才会有比较,只有了比较,你才会明白各种语言的长处和短处,才会让你有更为成熟的观点,而且不整天和别的程序在网上斗嘴争论是Windows好还是Unix好,是C好还是C++好,有这点工夫能干好多事了。世界因为不同而精彩,只知道事物的一面是有害的。8)Your job is to put yourself out of work.
你的工作不是保守,那种教会徒弟,饿死师父的想法,不但是相当短浅的,而且还是相当脑残的。因为,在计算机世界里,你掌握的老技术越多,你就越没用,因为技术更新的太快。你对工作越保守,这个工作就越来越离不开你,你就越不越不能抽身去学新的东西,你也就越来越OUT了。记住:If you can’t be replaced then you can’t be promoted!9)Design patterns are hurting good design more than they’re helping it.
很多程序员把设计模式奉为天神,他们过度的追求设计模式以至都都忘了需求是什么,结果整个系统设计被设计模式搞得乱七八糟,我们叫这种编程为“设计模式驱动编程”,正如第一点所说,如果你不懂得用自己的大脑思考的话,知其然,不知所以然的话,那么你不但得不到其好处,反而受其所累。10)Unit Testing won’t help you write good code.
准确地说,我们可以认为这是Test-Driven开发,其实,这种开发就是先写unit test case,这样的开发方式的主要目的是,为了防止你不会因为一个改动而引入Bug,但这并不会让你能写出更好的代码。这只会让你写出不会出错的代码。同第一点,这样的方法,只不过是防止糟糕的程序员,而并不是让程序员或代码质量更有长进。反而,通过Unit Test会为程序员的为自己代码做辩解的一种托辞。








- 查看svn更新内容以及最新状态(实时更新)
- 查看框架API文档(09.6.15更新)
- 查看框架代码(09.4.20更新)
框架暂停开发,且没有完全竣工,目前只能使用air包和library包!