Seize the Day
连接Kindle Fire到ADB(实体机调试)
前提条件
为开发环境下载安装下列包:
使用 Android SDK Manager 下载安装下列SDK包:
- Android 2.3.3 (API10) => SDK Platform
- Tools => Android SDK Tools
- Tools => Android SDK Platform-tools
- Extras => Google USB Driver package
OSX设置
修改 adb_usb.ini
- 打开文件: ~/.android/adb_usb.ini
- 添加一行: 0x1949
- 添加一行: 0x0006
- 保存文件
注意:确保每行一条配置。如果文件不存在,新建文件并确认具备已配置完毕的Android SDK。
…基于AS3.0的相似图像搜索算法实现
Google的图像搜索,可以根据用户上传或者网络上的图片找到与此最相似的图片(百度也有类似功能)。
阮一峰的博客曾经提到过 “感知哈希算法(Perceptual hash algorithm)”,主要介绍了 Dr. Neal Krawetz基于感知哈希算法的”平均哈希算法(Average Hash algorithm)”。相比其他算法,这种算法简单快速,很容易实现。
对于图像来说,高频信息体现图像的细节,低频信息体现图像的边缘和轮廓。一幅大而清晰的图像不仅包含低频,而且会包含很多高频分量。而小图片因为缺乏细节部分,往往只有低频信息。因此用只包含低频分量的图像来做图像相似度匹配是非常合适的。
感知哈希算法的基本原理是根据图像特征生成一个特定(但非唯一)的指纹,根据指纹来比较图像的相似度。其特点是,即使图像放大缩小,调整高宽,或者有少许色彩变化(对比度,亮度等等),仍然可以匹配到相似的图像。
平均哈希算法(Average Hash algorithm)
实现步骤如下:
-
缩小尺寸:移除高频部分,将图像缩小至8×8像素,不考虑高宽比; {% img https://pjkm4w.bay.livefilestore.com/y1pEQIINXhwtkYhvSu94Q9L0iRya9-bx-0UDrNZDL8yb3_2ODB88DXQAhb3f4Oe8J9Kj8eElRgB1nZy95uSdf8Uye0dNGwDPpWW/reduce_size.jpg 64 64 %}
-
减少颜色:转为灰度图,将64像素的RGB 64×3个颜色值简化为 64个色值; {% img https://pjkm4w.bay.livefilestore.com/y1pEQIINXhwtkZyypWiFbXh51KEaUsH1RT_1Qli_UpOupdO-_1PbPXCbINY0UQRbfgfHPmXyoTqz0kcq963cYITTxHLInBtZQGl/reduce_color.jpg 64 64 %}
-
计算平均值:计算64个颜色的均值;
-
比较灰度值:将每个像素的颜色值与平均值比较,小于均值记0,否则记1;
-
计算哈希值:将上述的比较结果拼起来构成一个64位的整数。
ActionScript 3.0 闭包及作用域
闭包作为动态语言的基石,在OO实现和框架构建上有着-十分重要的作用。但是闭包的定义比较抽象,不利于理解,闭包在各语言中的实现不尽相同,闭包的函数作用域也有区别。
参考整理了这篇文章(非原创),主要内容来自
- IBM Thoughtworks 文档:闭包的概念、形式与应用;
- Adobe官方文档:Flash ActionScript 3.0 编程- 函数作用域。
什么是闭包
闭包的概念出现于60年代,最早实现闭包的程序语言是Scheme。关于闭包的定义,说法比较多。
-
Scheme语言设计者这样定义闭包:”we introduce the notion of a closure which is a data structure containing a lambda expression, and an environment to be used when that lambda expression is applied to arguments.”
-
英文Wikipedia 则是解释为:”a closure (also lexical closure or function closure) is a function together with a referencing environment for the non-local variables of that function. “。
-
中文维基百科:”在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。” 综合这些定义,可以认为闭包一种特殊的数据结构,不仅仅是函数,还包括与其相关的引用环境。闭包只是在形式和表现上像函数,但实际上不是函数。函数是一些可执行的代码,这些代码在函数被定义后就确定了,不会在执行时发生变化,所以一个函数只有一个实例。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。所谓引用环境是指在程序执行中的某个点所有处于活跃状态的约束所组成的集合。其中的约束是指一个变量的名字和其所代表的对象之间的联系。那么为什么要把引用环境与函数组合起来呢?这主要是因为在支持嵌套作用域的语言中,有时不能简单直接地确定函数的引用环境。这样的语言一般具有这样的特性:
-
函数是一阶值(First-class value),即函数可以作为另一个函数的返回值或参数,还可以作为一个变量的值。
-
函数可以嵌套定义,即在一个函数内部可以定义另一个函数。
闭包作用域
函数的范围不但决定了可以在程序中的什么位置调用函数,而且还决定了函数可以访问哪些定义。适用于变量标识符的作用域规则同样也适用于函数标识符。在全局作用域中声明的函数在整个代码中都可用。例如,ActionScript 3.0 包含可在代码中的任意位置使用的全局函数,如 isNaN() 和 parseInt()。嵌套函数(即在另一个函数中声明的函数)可以在声明它的函数中的任意位置上使用。
作用域链(The scope chain)
无论何时开始执行函数,都会创建许多对象和属性。首先,会创建一个称为激活对象 的特殊对象,该对象用于存储在函数体内声明的参数以及任何局部变量或函数。由于激活对象属于内部机制,因此您无法直接访问它。接着,会创建一个范围链,其中包含由 Flash Player 或 Adobe AIR 检查标识符声明的对象的有序列表。所执行的每个函数都有一个存储在内部属性中的作用域链。对于嵌套函数,范围链始于其自己的激活对象,后跟其父函数的激活对象。作用域链以这种方式延伸,直到到达全局对象。全局对象是在 ActionScript 程序开始时创建的,其中包含所有的全局变量和函数。
…ActionScript3的继承机制
因为从Flex 3时开始使用ActionScript,所以错过了ActionScript 3.0之前的时代。虽然知晓ActionScript是遵循ECMAScript 标准的动态语言。但是自AS3.0 之后变化很大,看AS2.0 和 AS3.0的代码,如同javaScript 和 java 的差别。后来了解到AS3.0有两种继承机制:原型继承(prototype)和固定属性继承(traits),从中能明显看出这门语言的所历经的改变和革新:为什么会支持动态类型,为什么用原型继承,为什么又会有固定属性继承?为什么静态属性,静态方法无法被继承……这些由于历史原因而遗留的种种疑问也就迎刃而解。
本文主要内容源自Adobe官方教程:ActionScript 中面向对象的编程-高级主题 ,图文并茂,外加代码诠释,介绍得详细易懂,因此我也不想加多余的内容。
本节开始先简单介绍 ActionScript 和 OOP 的历史,然后讨论 ActionScript 3.0 对象模型,以及该模型如何启用新的 ActionScript 虚拟机 (AVM2) 显著提供运行速度(与包含旧 ActionScript 虚拟机 (AVM1) 的以前版本的 Flash Player 相比)。
ActionScript OOP 支持的历史
由于 ActionScript 3.0 是在以前版本的 ActionScript 基础上构建的,了解 ActionScript 对象模型的发展过程可能有所帮助。ActionScript 最初作为早期版本的 Flash 创作工具的简单编写脚本机制。后来,程序员开始使用 ActionScript 建立更加复杂的应用程序。为了迎合这些程序员的需要,每个后续版本都添加了一些语言功能以帮助创建复杂的应用程序。
ActionScript 1.0
ActionScript 1.0 指在 Flash Player 6 和更早版本中使用的语言版本。即使在这个早期开发阶段,ActionScript 对象模型也是建立在基础数据类型对象的概念的基础上。ActionScript 对象是由一组属性 构成的复合数据类型。讨论对象模型时,术语属性 包括附加到对象的所有内容,如变量、函数或方法。
尽管第一代 ActionScript 不支持使用 class 关键字定义类,但是可以使用称为原型对象的特殊对象来定义类。Java 和 C++ 等基于类的语言中使用 class 关键字创建要实例化为具体对象的抽象类定义,而 ActionScript 1.0 等基于原型的语言则将现有对象用作其它对象的模型(或原型)。基于类的语言中的对象可能指向作为其模板的类,而基于原型的语言中的对象则指向作为其模板的另一个对象(即其原型)。
要在 ActionScript 1.0 中创建类,可以为该类定义一个构造函数。在 ActionScript 中,函数不只是抽象定义,还是实际对象。您创建的构造函数用作该类实例的原型对象。以下代码创建一个名为 Shape 的类,还定义一个名为 visible 的属性,该属性默认情况下设置为 true:
…Flash Player 11.4 ByteArray压缩算法初探
Flash Builder 插件
Eclipse IDE的插件十分丰富,适当地使用可以使开发效率大大提高。而Flash Builder是基于Eclipse 开发的,因此或多或少可以使用一些Eclipse的插件。介绍几个开发中常用的几个插件。
Easy Explore
这个小插件可以调用Window资源管理器,浏览”包资源管理器”里的包和文件。省去开发者在资源管理器里一级一级地找文件。使用时,只要右键单击包或者文件,在弹出的菜单中选择”Easy Explore…”。
Y.Boy 把这个插件中文化并更换了图标,比原版更赏心悦目了 🙂 。
下载链接:
- 原版:http://sourceforge.net/projects/easystruts/files/Easy%20Explorer%20for%20Eclipse/easy-explore-1.0.4/
- 中文版(Y.Boy):http://riaoo.com/wp-content/uploads/2012/06/easyexplore_1.0.4.zip
TODO/FIXME 任务插件
Eclipse本来支持TODO/FIXME注释标记的,但是Flash Builder却不支持.as的TODO/FIXME标记。注释//TODO or //FIXME ,即可在任务视图(Task View)中显示任务。
打开任务视图:Flash Builder Menu: Window -> Show View -> Other->Basic–>Tasks(任务)。
下载链接:
…