平常开发中,如果我们要对http(s)的内容进行抓取的时候,我们通常会使用HttpWatch或者Fiddler这几款非常xx的的抓包工具。但这两款工具对于AMF协议是无能为力的。
目前来说,能用的、比较靠谱的AMF工具一款是ServiceCapture 这个在去年4月份的时候介绍过。还有一款就是本文要介绍的Charles。
Charles主页:http://www.charlesproxy.com/ 目前,Charles的{zx1}版本为3.3.1。提供了多个版本:Windows 32Bit,Windows 64 Bit,Linux,Mac。同时还提供了FireFox的插件。
Charles是一款共享软件,收费对于中国的开发者来说,偏高一点。收费表如下:
License Pricing
1-4 User Licenses US$50 / license
5+ User Licenses US$40 / license (20% discount)
10+ User Licenses US$30 / license (40% discount)
Site License US$400
Multi-Site License US$700
这些方面不用介绍地太仔细,免得被认为是做广告,呵呵。
下面就来体会一下它的功能吧:
界面很简单,传统布局。
有两种显示方式:(Structure 结构、Sequence 顺序),上图是Structure 结构的显示方式。下图是Sequence 顺序的显示方式:
Charles当然支持对http(s)的支持,因此在Struture显示方式时,作者就把data数据和static静态文件分开显示:
选择了AMFPHP的gateway.php文件,在右边就可以显示了数据交换信息:
不过因为一些安全显示,在工具的使用过程中会出现一个安全警告框:
同时,因为软件没注册只能使用30分钟,同时还会出现提示框:)
这样就已经基本把数据的交换结构弄清楚了。 当然,这也对我们开发过程中的安全问题提了个醒。RIA的安全问题不容忽视。特别对于一些非常敏感的数据一定要注意数据加密!
先做个题目吧:
var testNum:Number=662.382;
var testObj:Object=Object(testNum);
trace(testNum,testNum as int,int(testNum),testObj,testObj as int,int(testObj),testObj as Number);
这个的结果刚开始我以为会是
662.382 662 662 662.382 662 662 662.382
不过结果却是
662.382 null 662 662.382 null 662 662.382
在刚刚coding的时候使用PureMVC发送notification之前没有将value转为int就直接发送了,然后接收后将object使用as运算符转换为int发现结果为0。当时相当郁闷了。因此不使用强类型检查时应当特别注意数据类型,另外,使用as运算符也应当注意,避免以上情况,尽量使用显式类型转换。
其实这个问题非常非常基础,对于这种细节性的问题以后还得多注意注意。
Update:http://www.anujgakhar.com/2009/08/26/flex-casting-with-as-vs-casting-with-braces/ 这位老兄也同样遇到了这个问题,不过他比我解释地更为清楚,因此引用一下:)
代码分离是一个很好的编程习惯,可以让显示和逻辑分开,使得程序的结构更为明了。其中微软的Code Behind技术也是其中的一个代表,广泛地用于.Net Framework的程序设计中,包括asp.net,winform,silverlight等等。
而基于Visual Stuido的Flex开发插件Amethyst也实现了类似于.Net Framework的Code Behind技术:http://www.sapphiresteel.com/ActionScript-Code-Behind-in
前几个月,我翻译了一下Amethyst发布{sg}测试版的消息,Adobe Flex Development in Visual Studio。现在Amethyst已经更新到了Beta4版本。
相信其中的Code Behind特性会让很多.Net开发者喜欢上Flex开发。
翻译自:http://www.uza.lt/codex/as3-scale9-bitmap/
简介:
AS3 Scale9 Bitmap是个辅助的类,使用它可以通过bitmap数据填充创建九宫格sprite,而这些在Flash 9中是无法实现的。这个辅助类根据用户定义的缩放矩阵创建了9个虚拟的九宫格sprite。特别适用于创建用户界面(比如按钮,可伸缩的UI元素等等)。
内容:
Scale9SimpleStateButton – 用于创建可伸缩的1、3 或者3种状态使用bitmap数据(皮肤)的按钮的类。
Scale9SimpleBitmapSprite – 用于创建静态的可伸缩的UI元素的使用bitmap数据(皮肤)的sprite的类。
示例代码(Flex Builder 3 项目)
要求:
ActionScript3
演示:
Scale9SimpleStateButton(左上角),Scale9SimpleBitmapSprite(右下角)以及初始的皮肤文件(底部)
示例语法:
Actionscript:
var scale9_example:Rectangle = new Rectangle(6,6,105,20);
/* Initialize the button with all 3 states (normal, hover, down) using 3 different bitmaps */
var button_example:Scale9SimpleStateButton = new Scale9SimpleStateButton(
[...]
因为TextField不支持对alpha的变换。因此需要对其进行一些操作。
有两种方法。
{dy}是使用BitmapData去绘制,然后对Bitmap进行操作,这个方法代码量稍微偏多,这里不做赘述。
第二种是使用ColorMatrixFilter过滤器。
//Code:
package com.drore.map.view
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.filters.ColorMatrixFilter;
/**
* 动态生成鼠标提示
* @author Dada http://www.asflex.cn
* @version 5.0
* @copy Drore http://www.drore.com
*/
public class MouseTip extends Sprite
{
private var txtTips:TextField = new TextField();
public function MouseTip()
{
addEventListener(Event.ENTER_FRAME, init);
}
private function init(event:Event):void
{
removeEventListener(Event.ENTER_FRAME, init);
txtTips.selectable = false;
txtTips.tabEnabled = false;
txtTips.mouseEnabled = false;
txtTips.cacheAsBitmap = true;
txtTips.multiline = false;
//设置滤镜
txtTips.filters=[new ColorMatrixFilter];
addChild(txtTips);
}
//设置提示文字
public function setText(txt:String):void
{
txtTips.text = txt;
txtTips.width = txtTips.textWidth + 10;
drawBg();
}
//绘制背景
private function [...]
原文:《Making dispatchEvent More Efficient》
在很多项目中有许多的事件被广播出去,但没有接收者侦听他们。这不应该成为问题,但它原来的Flash Player处理这些事件的效率低下。幸运的是很容易修补这个情况。
以下的代码将比标准的dispatchEvent在没有事件侦听时高出5倍的效率
Code:
override public function dispatchEvent(evt:Event):Boolean {
if (hasEventListener(evt.type) || evt.bubbles) {
return super.dispatchEvent(evt);
}
return true;
}
请注意,实际的时间差距非常小(在我的测试中,做了100,000个迭代,使用了以上方法花费了80ms,使用标准方法花费450ms),因此这种方法比较适用于大量没有事件侦听的实例。
举个例子,我在GTween 中使用了这种方法,您可以同时使用成千个缓动活动,每个缓动活动在每帧都会广播出CHANGE事件,通常的,我们会创建没有侦听事件的缓动活动。
我相信这个方法在所有情况下都是可行的,虽然我还没有广泛测试与不太常见的活动情景。事件冒泡也会进行,但是不能获得任何的性能提升。
这样的方法同时也会使得有事件侦听的性能减弱,但是非常微小(<10%,在我的100K 迭代测试中分别为505ms和545ms)
PS:虽然这种方法只有在少数情况下才会使用到,而且性能提升不是很大。起到了抛砖引玉的作用,呵呵。
在AS3CN看到zhengenru2008 发的25行AS能做出什么?
打开http://www.25lines.com/?page_id=139 一看,的确很强悍,仅仅25行的代码实现了很多精妙绝伦的效果。
http://www.25lines.com/finalists/0812/043.swf 这个小游戏挺有意思,哈哈,回到了DOS时代~
PS:原来这个25行的活动是xx的Keith Peters大师发起的。