Mac adb_usb.ini

获取手机的Vendor ID

$ system_profiler SPUSBDataType
Android:

  Product ID: 0x3f10
  Vendor ID: 0x1d91
  Version: 2.31
  Serial Number: MotorolaXT788
  Speed: Up to 480 Mb/sec
  Manufacturer: Android
  Location ID: 0x1d112000 / 8
  Current Available (mA): 500
  Current Required (mA): 500

创建adb_usb.ini

$ vim ~/.android/adu_usb.ini

添加0x1d91

重新连接usb接口,完成。

Raspberry Pi Install OpenResty

OpenResty是一个全功能的web服务器,以Nginx为核心,集成了Lua模块。

$ ssh pi@raspberrypi.local
$ sudo apt-get update
$ sudo apt-get install libreadline-dev libpcre3-dev libssl-dev perl libncurses5-dev
$ wget http://openresty.org/download/ngx_openresty-1.4.1.1.tar.gz
$ tar xzvf ngx_openresty-1.4.1.1.tar.gz
$ cd ngx_openresty-1.4.1.1
$ ./configure --with-luajit
$ make
$ make install

Hello World

$ mkdir work
$ cd work
$ mkdir logs/ conf/
worker_processes  1;
error_log logs/error.log;
events {
        worker_connections 1024;
}
http {
    server {
        listen 8080;
        location / {
            default_type text/html;
            content_by_lua '
                ngx.say("

hello, world

") '; } } }
$ PATH=/usr/local/openresty/nginx/sbin:$PATH
$ export PATH
$ nginx -p `pwd`/ -c conf/nginx.conf

CocosBuilder

table(table table-bordered). |_.宏|_.说明| |CCB_MEMBERVARIABLEASSIGNER_GLUE|绑定成员变量 CCBMemberVariableAssigner::onAssignCCBMemberVariable| |CCB_SELECTORRESOLVER_CCMENUITEM_GLUE|绑定菜单事件 CCBSelectorResolver::onResolveCCBMenuItemSelector| |CCB_SELECTORRESOLVER_CCCONTROL_GLUE|绑定按钮事件 CCBSelectorResolver::onResolveCCBControlSelector|

JavaScript Controlled的坑

原来Cocos2dBuilder是区分脚本[lua/js]与C++的,如果选中了 Document > JavaScript Controlled 则表明这个ccb是与脚本绑定的,并且要是Owner var类型的绑定。

所以创建ccb之后要考虑好这个ccb是与脚本还是C++进行绑定的。

C++11

Lambda表达式:匿名函数的实现。

[]     // 变量参考,用于闭包
()     // 函数参数列表
{}     // 函数体
()     // 函数调用,如果函数有参数,那应该是在些传入

[]() { std::cout << "Hello Lambda!!" << std::endl; }();

// 一个简单的闭包例子
int num = 10;
auto func = [&num]() { num+= 100; std::cout << "num:" << num << std::endl; };
std::cout << "num:" << num << std::endl; // 输出10
func();                                  // 输出110
std::cout << "num:" << num << std::endl; // 输出110,由于num是以引用的方式传入的,所以会修改

OpenCV Mat

Mat是OpenCV中基本的图像容器,2.0之前的版本是IplImage对象。它比IplImage有一个好处就是不需要再手动内存,而是让程序自动管理。

Mat类带有两部分数据:矩阵的头信息与一个像素数据指针。

Mat的内存管理,每个Mat对象有自己的头信息,当拷贝的时候只是拷贝头信息与指针地址。不是数据本身。

Mat A, C; // 创建A与C两个Mat对象,只包含头信息部分。
A = imread("image.jpg", CV_LOAD_IMAGE_COLOR); // 读取图片并把图像的数据指针赋值给A

Mat B(C); // 使用拷贝构造函数

C = A;  // 使C等于A,头信息

上面三种方式创建Mat对象只有头信息部分是不同的,指针都指向了相同的图像数据,如果修改其中任意一个Mat对象的图像,那大家都会受到影响。

通过范围的大小来创建一个Mat对象

Mat D(A, rect(x, y, width, height));        // 通过范围来创建
Mat E = A(Range:all(), Range(row, column)); // 通过行列来创建

通过构造函数创建

Mat M(row, column, type, ScalarObj);

Mat M(2, 2, CV_8UC3, Scalar(0, 0, 255));

通过数组来创建

int sz[3] = {2, 2, 2};
Mat L(3, sz, CV_8UC(1), Scalar::all(0)); // 8位1通道

通过IplImage创建

IplImage *img = cvLoadImage("image.jpg", 1);
Mat mtx(img);

通过create方法

Mat M;
M.create(row, column, type);