代码 > 在nodejs中使用vm

2015-04-21

最近在做基于Nodejs的mud客户端。考虑到安全性问题,需要用到VM。

一开始没考虑透彻怎么使用vm来隔离代码。

参考了下sandbox的代码。终于i想通了。

说到底,先要构建一个content上下文。

然后把所有的接口,做一个闭包,加入content中。

 

比如,原先是api.method,那么现在应该这样:

content.method=function(){api.method.apply(api,arguments)}

要么你把整个函数都替换掉,要么拉倒。

不能把对象本身暴露给vm,只暴露封装过的。

这样应该没问题吧?js里没法把function闭包中的内容再反向去出来吧?

 

sandbox那样还需要另开一个chlidprocess,再通过stdin/stdout来沟通,似乎对我的应用太重了点。

作为一个本地程序,添加太多的processer似乎太不礼貌了

代码 > cheerio.js的一个坑。

2015-02-07

今天在用nodejs给客户从老网站上爬资料时,碰到一个巨坑。

所有的问题都被转意了,导致 我公司自己的程序截取前N个字符的部分和渣一样(其实这也能算我部分代码的BUG)。

爬遍谷歌,找到了解决方案:

在使用是禁用decodeEntities。

比如:

var $ = cheerio.load(body,{decodeEntities: false});

参考:

https://github.com/cheeriojs/cheerio/issues/496

代码 > 半夜不能写代码

2014-11-23

越写越兴奋,强迫自己睡着都不行。

晚上睡觉想着nodejs的express,其实是connect,想着自己写的第三方代码,再想着promises

越来越觉得这些东西的奇妙,自己的代码需要进行不小的调整,才能更‘美观’,更优雅

赶紧开电脑,上github给自己开issus。

这下半夜怎么过啊……

代码 > Js的bind真心是个好东西

2014-10-27

重写了nodejs代码,发现之前的代码太恶心,用了bind后整个世界清净了。

bind的用法很简单。

func.bind(this对象+参数1+参数2);

返回一个新函数

比如

var newfunc=func.bind('a','b','c')

newfunc(d).

就会以'a'为this对象。'b','c','d'为参数访问func函数。

让js的函数的变量作用域变得极为可控。

类似与这样的代码

var func.prototype.bind=function (thisobj,arg1,arg2...)

{

  return function(){

    func.call(thisobj,arg1,arg2);

 }

}

代码 > 这不是GPL的时代,这是MIT的时代。

2014-08-06

一直以来,GPL一直作为开源的代表,被人们广为了解。

在单机时代,GPL的确很的保证了开源软件的生命力和发展。

可随着网络时代的到来,免费时代的到来,GPL的生命力越来越低了。

免费,或者强制的公开代码已经不是那么的重要了。

开源更多的是为了让别人加入自己的阵营,成为事实上的标准。

看看现在各种火热的开源产品。

Android,jquery,nodejs。

基本都是mit协议,或者apache协议这种对商业友好的协议。

就连我现在自己丢代码开源,也从lgpl变成了mit了。

时代不同,开源的意义不同了。

是现在的时代太势利,还是以前的时代太狭义?

这永远只是一个只有时间有资格解答的问题。

代码 > 漂亮的前端编辑器brackets

2014-08-05

最近需要在Win下安装快速编辑代码的工具。

不喜欢nodepad++,有不想老是和sublime text的提示框纠缠,想起了v2ex上看多的一条回复。放google一搜,下了个brackets回来,感觉真的不错。

外观清爽。样式之类编辑方便,适用html,跨平台,开源,js的语法提示,足够了。

代码 > Express 与 socket IO 共用session.

2014-06-13
  • EXPRESS:4.4.2
  • SOCKET.IO:1.0

研究了一天Express和socket IO。

爬了半天代码,找了半天挂件,最后还是用最原始的console.log+猜测搞定了。

socket.request中有res变量。那么直接用socket.request,socket.request.res作为connect中间件的req和res,就能取得自己想要的东西了。

以cookie-session为例:

//直接导入Session处理函数

var session = require('cookie-session')({secret: 'test',//secureProxy: true});

app.use(session);

io.on('connection', function(socket){

var req=socket.request;
var res=req.res;
session(req,res,function(){});

});

 

就可以取得和使用session了。不再需要其他额外的组建。

代码 > 开始尝试用eclipse

2014-03-05

开始考虑把php的编辑器从netbeans转移到eclipse。

无它。名气更大,插件更多。

写代码的style也开始转变了。

总感觉自己有把php折腾成java的倾向。

代码 > 不错的js浏览器历史插件histroy.js

2014-01-16

项目接触到有需要一页式页面,通过ajax载入子页面,又希望能控制地址栏。

搜了一圈,决定用histroy.js

https://github.com/browserstate/history.js/

使用很简单。 先绑定处理函数,来处理 histroy的status变动后动态载入页面。

 History.Adapter.bind(window,'statechange',function(){ 
        var State = History.getState(); 
		loadPage(State.url);
    });

然后在需要的地方pushStatus,由处理函数完成绑定功能。

History.pushState(null, null,$(this).attr('href'));

简单,好用,关键是最新更新在7个月前。最新更新在3年前的代码实在不敢用。

代码 > 转用netbeans php开发了

2013-12-27

作为一个光荣的kate党,今天还是专用netbeans做php开发了。

不得不说,kate由于没有一个项目的概念,的确没法和netbeans竞争。至少在代码补全或者是集成版本控制之上。

kate还会用,但基本就是编辑view或则会js吧。

netbeans最大的问题就是内存占用。

在debian上,2g内存明显感到卡,4g才能流畅使用。

win的话,呵呵。