权限管理,是管理系统中的常见组件。通常需要定义资源,把资源调配给用户,通过判断用户是否有权限增删改查来实现。

ACL:Access Control List,访问控制列表,是比较流行的设计方式。通过吧用户和权限挂钩来实现。

RBAC:Role Based Access Control,角色访问控制系统,是另一个实现思路。提炼出角色对象,把用户和角色绑定,角色来对应权限,角色和权限没有直接关联,对复杂的系统来说,更加容易管理。

RBAC

wiki

资料

扩展RBAC用户角色权限设计方案

基于AOP实现权限管理:访问控制模型RBAC和ACL

基于RBAC模型的权限管理系统的设计和实现

node 实现

源自:这篇

https://github.com/seeden/rbac
Hierarchical Role Based Access Control for NodeJS

https://github.com/djvirgen/virgen-acl
Simple and elegant, create your own checks. No middleware?

https://github.com/OptimalBits/node_acl
Use as middleware, create your own roles and access. Great choice.

https://github.com/tschaub/authorized
Similar to connect roles… but a bit more robust? you can create roles and action, and associate many roles with that action

https://github.com/scottkf/ability-js
Like canCan for rails. This is a traditional controller / function type permission system. May be too abstract.

https://github.com/dresende/node-roles
More traditional setRole() hasRole() based checking. Last activity 2 years ago.

https://github.com/carlos8f/node-relations
Natural language style roles. Looks very promising and is in active development

https://github.com/ForbesLindesay/connect-roles
Simple and closer to action / natural language based. Requires writing your own checks for each.

https://github.com/ajlopez/SimplePermissions
Maybe too simple? Makes sense for assigning roles but then its hard to check against roles!

https://npmjs.org/package/entitlement
Not ideal but here for reference sake.

Mongoose Field Access Control

https://github.com/codedoctor/mongoose-plugins-accessible-by Set access per field of mongoose Schema. Not supported or maintained, and noted as not a perfect fit in all cases… but worth considering as a simple way to control access to fields.

某天,嘴炮打的太嗨,说可以用APP识别连续拍的几个图片,然后拼接起来,就像iPhone自带的那个全景拍照模式,Panorama mode。很多人也在问

OpenCV

发现OpenCV里已经集成了一个stitch,附上找到的例程代码

SIFT

网上搜到,说叫Rob Hess的大神搞了个基于OpenCV的SIFT算法。这个SIFT(中文介绍)据说是碉堡扎天的很,通过比对特征点,来拼接图片。github上面的有很多应用。

另一篇中文SIFT使用的介绍他的例程

例子

这有个例子AutoStitch,据说可以免费用,有MAC版,而且我手机拍的照片直接就拼起来了,敬仰啊。可惜这个找不到源码。

例子

例子

然后又发现一个叫Hugin的,好像很了得,就是太大了,不知道怎么搞进APP里去。

K-Means, RANSAC

这俩是什么鬼完全不懂了~好吧,谷歌一下之后发现K-Means是聚类算法,RANSAC是什么随机一致性什么什么算法。 :(

总之

一个PDF快速了解关键点~

为什么在avfoundation就没有接口啊,擦!直接开出来大家不都可以直接用了嘛!差评!

曾经看到过一篇鸡汤文,说如果有什么事情你很想做,但是又怕坚持不下来,那么就去告诉你的朋友们,让他们来监督你鞭策你甚至嘲笑你:比如100天不撸什么的。

我呢,一直以来都想DIY一个浏览器,现代的,支持HTML5、CSS3、ES6什么的,反正得是高级的,可是我目前的状态是c++不懂,真心不懂。

不过我可以先收集起来,说不定哪天我看完了《c++ primer plus》就可以搞了。

几篇文章

html5rocks:浏览器的工作原理:新式网络浏览器幕后揭秘

浏览器的工作原理 - 现代浏览器背后的风景 上面的另一翻译版

翻译-现代浏览器的架构与发展

浏览器相关的项目

V8 对的,就是这个

WebKit 对的,就是这个,好屌

mozilla 里面好多东西,都不知是啥。

An HTML5 parsing library in pure C99 谷歌家的HTML5解析,无需其他依赖,中文介绍

BLUI: HTML powered UI and HUD for Unreal Engine 4 名字好屌,但是不明白是啥

CEF2go is an HTML 5 based GUI toolkit for the Go language.

libRocket - The HTML/CSS User Interface Library

Pure JavaScript Port of WebKit 其实我不知道这是什么贵

CSS parsing library for C# based on Mozilla Firefox code [MPL] c#的,什么贵

有这样一个需求,在桌上有张纸,可能是票据,合同什么的,用手机咔嚓咔嚓拍下来,然后自动把纸张缩放到合适的大小。可是拍的时候有可能是歪的,不一定就对的很正,桌子也可能是有花纹啊,边上有小干扰物啥的。

这要是做APP的话,可怎么搞,总之是要检测纸张边缘,取出四边形,然后拉伸成规则长方形。

好像选opencv是必然的,还有更好的选择吗?

图像预处理

据说通常都要对图像进行降噪避免误测,常见的做法是先进行高斯模糊,然而这并没有什么卵用,会把图像弄模糊,边界都不清楚就没法玩了。所以有人说,可以用Mean Shift,Mean Shift的优点就在于如果是像背景桌面的浅色纹理,图像分割的过程中相当于将这些小的浮动过滤掉,并且保留相对明显的纸张边缘,结果如下:

原图

原图

处理后

处理后

顺便说一句,现在手机分辨率好高,直接处理这么大的图片会比较消耗资源,把图缩小之后处理速度会提升,而且也变相消除了部分干扰。

边缘检测

边缘检测这一步,最好是能有人工干预,把大范围标出来,类似这样:

类似

但实际上这样的用户体验肯定是负分了,所以假设用户的桌面不会这么极端,而是使用相对整洁的桌面并且纸张放置相对规整,类似这样的:
类似

这样就不需要用GrabCut做分割,而是直接灰度处理后用canny算子检测边缘。

// bw is the grayscaled source image
cv::Canny(bw, bw, 100, 100, 3);

得到边缘图:

边缘图

直线检测

直线检测就是利用概率霍夫变换累加求出图像中的直线,看介绍介绍2。这里我们可以对后面的参数做些微调,在我们的参数里,假设了纸张的宽度和高度都接近边缘,并且各自至少大于画面宽高的一半,那么过短的线就可以直接抛弃了。

// w_proc 就是缩小后的画面宽度,20是把间距20以内的线段延长拼接为一条直线
HoughLinesP(bw, lines, 1, CV_PI / 180, w_proc / 2, w_proc / 2, 20);

顺利的得到了这个:

线图

判断有效多边形

上例中的lines,就是我们得到的所有线的集合,每条线包含点的偏移和向量。
如何判断其中哪些是有效的多边形,或者说我们要的多边形,对我来说蛮纠结的。有的例子里直接HoughLinesP跑完就有了,我测试的图基本都不行。

这里的方法是把所有横向的线中取最上和最下两条,纵向线中取最左和最右两条。这里是基于纸张正放的假设,如果侧放就不行了,例如这样的

很难这样测出来的

求四顶点坐标

总之不管三七二十一,我们有了四边形的四条边。两两相交有6个点,除去画面外的两个,剩下的四个点就是我们要的四个顶点了。

使用这个公式,带入两条直线上的两个点坐标。

公式

透视转换

转换

getPerspectiveTransform计算转化矩阵,再用warpPerspective调用转化矩阵进行拉伸。

代码

制作了一个简单的例程。

github

参考资料:

用OpenCV实现“扫描全能王”APP

利用OpenCV检测图像中的长方形画布或纸张并提取图像内容好像原帖在知乎上

Automatic perspective correction for quadrilateral objects
注:我是觉得这篇里硬要凑4条线拼一个四边形有点难,还是检测出一些,然后判断抛弃一些比较好。

自动透视校正为四边形对象 上一篇加了写中文注释。

深入剖析mean shift 图像分割 原理及代码

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

1,为什么用EC2搭建node.js环境。

首先,本地虚拟机装centOs是很好的选择,但是需要在家里和公司同时搭好相同的环境比较麻烦,而且也不方便小团队一起折腾。

亚马逊的免费虚拟机只要不跑太复杂的运算大概不会有额外的费用,而且亚马逊么有被墙,国内的托管目前cnode的邀请号求不到啊,还是自己动手丰衣足食吧。

2,如何申请免费一年的EC2

网上有很多教程,请自行GOOGLE。

3,EC2虚拟机简单的管理和设置

新建KEY,保存。

For MAC & Linux

很简单,只要一句话

ssh -i user.pem ec2-user@ec2-XXX-XXX-XXX-XXX.compute-1.amazonaws.com

以上user.pem可以是你的KEY的路径。

For PC

putty 链接ec2-XXX-XXX-XXX-XXX.compute-1.amazonaws.com

注意需要在connection->SSH->Auth里选上你的KEY,之前需要转pem到ppk。

怎么看DNS名:在管理界面里,先点击你要查看的虚拟机,点右键,再弹出的菜单上点“connect”就可以看到如下图:

其中ec2-XXX-XXX-XXX-XXX.compute-1.amazonaws.com是你的DNS名

一般不太需要调整什么,可能要改的就是端口8080要开启。

4,搭建node前的准备

默认的liunx中不会吧所有工具都装好,一些基本的工具,需要我们自己装。

以下:

a. make

b.gcc++

c.curl

d.git

一句话安装:

sudo yum install gcc-c++ openssl-devel make curl git


5,安装node

wget http://nodejs.org/dist/node-v0.4.12.tar.gz
tar -xvf node-v0.4.12.tar.gz
cd node-v0.4.12
./configure
make

由于是在云里跑的,所以make可能会花上30多分钟, 我出去吃了个中饭,回办公室发现好了的。所以,不用在屏幕前傻等,出去走走,预防一下颈椎病。

make install

其他调整,由于EC2中path的问题,node装完了不一定能直接跑。所以有时候需要做些映射。

sudo ln -s /usr/local/bin/node /usr/bin/node
sudo ln -s /usr/local/lib/node /usr/lib/node
sudo ln -s /usr/local/bin/npm /usr/bin/npm
sudo ln -s /usr/local/bin/node-waf /usr/bin/node-waf

6,测试第一个静态文件服务

先在/home/ec2-user/上建个nodeweb目录,里面放静态页面,然后可以测试了~~

var libpath = require(‘path’),
http = require(“http”),
fs = require(‘fs’),
url = require(“url”),
mime = require(‘mime’);
var path = “/home/ec2-user/nodeweb”;
var port = 8080;
http.createServer(function (request, response) {
var uri = url.parse(request.url).pathname;
var filename = libpath.join(path, uri);
libpath.exists(filename, function (exists) {
if (!exists) {
response.writeHead(404, {
“Content-Type”: “text/plain”
});
response.write(“404 Not Found\n”);
response.end();
return;
}
if (fs.statSync(filename).isDirectory()) {
filename += ‘/index.html’;
}
fs.readFile(filename, “binary”, function (err, file) {
if (err) {
response.writeHead(500, {
“Content-Type”: “text/plain”
});
response.write(err + “\n”);
response.end();
return;
}
var type = mime.lookup(filename);
response.writeHead(200, {
“Content-Type”: type
});
response.write(file, “binary”);
response.end();
});
});
}).listen(port);


7,推荐阅读:

8,其他~

求推荐操作简单的配合node用数据库。

我的微博:http://weibo.com/vitrum

来源:http://www.shui-mo.com/daohang/

国外部分

[slideshow]

女孩的眼睛里还透露着惊慌,发生了什么?她还不知道,她的父母已经遇难了。本来幸福的一家人,欢乐的去旅行,就在回家的路上,悲剧就这么发生了。

我只想说,这不是天灾,这一定是人祸。

作为一个几乎和这个伊伊同岁的小女孩的爸爸,我绝对不能答应这事就调查调查就算了,绝对不能接受任何粉饰太平,因为今天发生在她身上的惨剧,也有可能发生在我女儿身上,发生在所有人身上。