linux常用库的lua移植:libmcrypt的lua插件
openresty的lua方案效率不错,缺点是库不全,php现成的接口应用改成lua并不容易,比如libmcrypt,这个php常用的加密库(其实nginx的lua模块加密还有个不错的原生方案,openssl,在openrestylualibresty目录下,特定的加密方式需要自行修改),第三方C库在lua里使用都可以依照本文的方法来处理。 下载libmcrypt的源代码,解压,找到正常libmcrypt库的入口C文件(源代码目录下,找int main()),这个目录libmcrypt-2.5.3src里面,找到这几个文件:cipher_test.c和aes_test.c,移植就从修改这两个文件的开始:
int main()
{
MCRYPT td;//设定IV向量(需要的话)
unsigned char IV[8]={0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef};
unsigned char key[8]={0x12,0x34,0x56,0x78,0x90,0x ...
fflua更新
简介:fflua 发布了有段时间了,很多网友都用了,并且提供了一些很好的反馈。其中一个就是c++接口注册到lua中时,对引用的支持。这样使用起来更加方便。
原有方式:fflua 中注册c++的类用如下方式:
1234567891011121314class {public: base_t():v(789){} void dump() { printf("in %s a:%dn", __FUNCTION__, v); } int v;}; fflua_register_t<base_t, ctor()>(ls, "base_t") //! 注册构造函数 .def(&base_t::dump, "dump") //! 注册基类的函数 .def(&base_t::v, "v"); //! 注册基类的属性
当c++类注册成功,后lua代码中可以操作类对 ...
tolua原理
tolua++如何将c++对象导入到lua里?lua如何能够访问c++对象成员?创建一个 userdata ,存放 C/C++ 对象指针,然后给 userdata 添加元表,用index 和newindex 元方法映射 C/C++ 中的对象方法。
c++层新建一个元表作为类型(通过tolua_usertype)放在注册表中(_R[mt] = name),并且设置这些类型的继承关系(通过_R.tolua_super).
创建一个类表(newtable),并且设置_R中的原型表为元表(通过tolua_usertype),这个类表是放在全局表中的.
在注册类型的时候metatable里新建了.get和.set表。
成员变量:在.set和.get表里存储以变量名为键一读取设置c函数为值的键值对。
变量的读取赋值会在在metatable的index和newindex里,以变量名为键,从.get和.set表里取得读取设置函数并调用。
成员函数:只需要以函数名为键,函数为值存储在metatable里。
因为c++类型已经在注册表里,所以可以直接访问。
...
在redis中使用Lua脚本
脚本介绍Redis在2.6版本中推出了脚本功能,使用Lua语言(一种“卫星语言”,能够方便地嵌入到其他语言中使用)编写脚本传到Redis中执行。在Lua脚本中可以调用大部分的Redis命令,使用脚本的好处如下:
减少网络开销: 多个redis请求可以在一个脚本中一次发送一个请求,减少网络往返时延。
原子操作: Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。编写脚本的过程中无需担心会出现竞态条件,也就无需使用事务。事务可以完成的所有功能都可以用脚本实现。
复用: 客户端发送的脚本会永久存储在Redis中,其他语言开发的项目可以复用之。
代码示例1.访问频率限制123456789101112131415161718local times = redis.call('incr',KEYS[1])if times == 1 then redis.call('expire',KEYS[1],ARGV[1])end if times > tonumber(ARGV[2]) then return 0end return 1 #保存该 ...
150.Evaluate Reverse Polish Notation
Evaluate the value of an arithmetic expression in Reverse Polish Notation.Valid operators are +, -, *, /. Each operand may be an integer or another expression.
思路分析
逆波兰表示法,又称为后缀表示法,是一种不需要括号的一种四则运算表示法。比如:9 3 1 - 3 * + 10 2 / + ,就是一种后缀表示法。计算方法就使用栈,遇到数字就入栈,遇到符号就弹出栈顶的两个数字并将这两个数字的计算结果压入栈中。
实现细节
字符串转整型函数stoi()
整型函数转字符串to_string()
代码实现
12345678910111213141516171819202122232425class {public: int evalRPN(vector<string>& tokens) { stack<int> stk; int number; ...
特征重要性评估(Feature Importance Evaluation)
特征对目标变量预测的相对重要性,可以通过决策树中使用特征作为决策节点的相对顺序来评估。决策树顶部使用的特征,将对更多样本的最终预测决策做出贡献。因此,可以通过每个特征对最终预测做出贡献的样本比例,来评估该特征的重要性。
通过对多个随机树中的预期贡献率取平均,可以减少这种估计的方差。
sklearn.ensemble模块包含两个基于随机决策树的平均算法:Random Forest 和 Extra-Tress.这两种算法都是在构造过程中引入随机性来创建一组不同的分类器。
实例实例一: 特征重要性二维可视化from time import timeimport matplotlib.pyplot as pltfrom sklearn.dataset import fetch_olivetti_facesfrom sklearn.ensemble import ExtraTreesClassifiern_jobs=1 # 加载数据data = fetch_oliveetti_faces()X = data.images.reshape((len(data.images),-1))y = dat ...
Lua参考手册下半部分
当前大部分来源是5.1的标准
lua_Readertypedef const char * (*lua_Reader) (lua_State *L, void *data, size_t *size);
lua_load 用到的读取器函数, 每次它需要一块新的 chunk 的时候, lua_load 就调用读取器, 每次都会传入一个参数 data 。 读取器需要返回含有新的 chunk 的一块内存的指针, 并把 size 设为这块内存的大小。 内存块必须在下一次函数被调用之前一直存在。 读取器可以通过返回一个 NULL 来指示 chunk 结束。 读取器可能返回多个块,每个块可以有任意的大于零的尺寸。
lua_registervoid lua_register (lua_State *L, const char *name, lua_CFunction f);
把 C 函数 f 设到全局变量 name 中。 它通过一个宏定义:
#define lua_register(L,n,f)
(lua_pushcfunction(L, f), lua_setglobal(L, ...
全站静态资源抓取的ngx_lua方案
一些方案,没有一一测试:SiteSucker、httrack、idm、nomder、webzip、Teleport Pro、wget
webzip有乱码问题,?和后面一个英文字符被合成了一个中文乱码,原因不明,最终采用的是wget的方案:
wget -e robots=off -w 1 -x -np -p -m -k -t 1 -X/upload/ http://domain
简洁地把整站抓了下来。
接着的问题是,静态资源的名字是:xxxx.asp?a=zzzz&b=qqqq 这种形式的,在nginx里直接访问的话会去寻找xxxx.asp,原因是?是个url关键字(URL reserved characters),需要采取一些措施来规避,方案是HttpLluaModule,在nginx的rewrite阶段执行:
rewrite_by_lua ‘
if string.find(ngx.var.uri,”.asp”)~=nil then
if ngx.var.args~=nil then
ngx.req.set_uri(ng ...
Object Detection Evaluation
提供者:刘晓下载地址:http://www.cvlibs.net/datasets/kitti/eval_object.php
Object Detection Evaluation 2012,是一个车辆检测或者定位有关的数据集。物体检测和物体方向估计基准包括7481个训练图像和7518个测试图像,共包含80.256个标记物体。所有图像都是彩色的,并保存为PNG。为了评估,我们计算物体检测和定位相似召回(orientation-similarity-recall)的精确回忆曲线,用于联合目标检测和方向估计。在后一种情况下,不仅要正确定位对象二维边界框,而且还要评估鸟瞰图中的方向估计值。为了对方法进行排序,我们计算平均精度和平均方向的相似度。我们要求所有方法对所有测试对使用相同的参数集。我们的开发工具包提供了有关数据格式的详细信息以及用于读取和写入标签文件的MATLAB / C ++实用程序函数。
使用PASCAL标准和目标检测和方向估计性能评估目标检测性能,使用我们的CVPR 2012出版物中讨论的度量。对于汽车,我们要求重叠70%,而对于行人和骑自行车的人,我们需要50%的重叠来 ...
Programming in Lua(Thrid Edition)笔记
14 The Environment这章有点难理解,有些段落反复看了好多遍才感觉好像是看懂了。
Lua将所有全局变量存储在一个叫做global environment的table中
1for n in pairs(_G) do print(n) end
对于动态变量名,可动态创建chunk并编译:
1234x = 1varname = "x"value = loadstring("return " .. varname)print(value())
这样的消耗较多,可用global environment:12val = _G[varname]print(val)
_G["a"] = _G["var1"]写法繁琐,应简写为a = var1
_G["io.read"]无法获得iotable的read域,可用以下getfield()实现:
12345678function (f) local v = _G -- start with the table of globals for w in s ...