魏长东

weichangdong

lua七宗罪

因为擅长写php,而且lua刚学,所以有些估计是我水平不够才会这么认为的。

第一宗 不能很好的计算table长度。比如这样的

local all_sids = {

        ['1'] = 'Facebook',

        ['2'] = 'API',

        ['3'] = 'Google',

        ['16'] = 'MV',

['27'] = 'Mopub',

}

第二宗 函数默认值不能放在参数上,需要写到函数里面。

这是错的

function wcd(n=2)

end

需要这样

function wcd(n)

n = n or 2

end

第三宗 table数字变量,必须加方括号单引号,不然没法访问。

这样是错的

local all_sids = {

        1 = 'Facebook',

        2 = 'API',

        3 = 'Google',

        16 = 'MV',

27 = 'Mopub',

}

正确的见第一宗例子

第四宗 luasql循环的数据直接insert到table,结果不是预期的

local select_sql = "select "..fields.." from wcd where ".. where .. group

print(select_sql)

cur = conn:execute(select_sql)  

row = cur:fetch({},"a")

local re = {}

local total_data = {}

local  fuck ={}

while row do

-- 这是正确的

fuck = {s_id=row['s_id'],show =row['show'],income=row['income'],click=row['click']}

-- 这是错误的

table.insert(re,row)

end

第五宗 不方便判断是否一个值存在于一个数组

第六宗 【或许不算什么罪过,但是使用php习惯了,觉得这样停变态的】定义变量,不要全局变量和局部变量混着来,否则你不根本不知道问题出在哪里

要是觉得不变态,可以帮我理解下下面的代码么,根本不懂什么upvalue啊

local data = 100;

 

local function fun1()

   print(data);

   data = data+50;

 

end

 

data = 200;

 

local data = 300; -- 重新定义一个局部变量

 

local function fun2()

   print(data);

   data = data+50;

end

 

data = 400;

--调用

fun1(); -- 200

fun2(); -- 400

fun1(); -- 250

第七宗 table pairs输出,不按照预定顺序,是不是感觉很恶心啊。

local all_mid_8 = {

['147'] = '147加速',

['148'] = '148页',

['149'] = '149成页',

['118'] = '118屏保',

['153'] = '153功能卡片',

['154'] = '154一键',

}

for mid,mid_name in pairs(all_mid_8) do

print(mid..'==='..mid_name)

end

phantomjs casperjs 太牛逼了(没有之一)

//var server = require('webserver').create();
var casper = require('casper').create({
    verbose: true,
    logLevel: 'debug'
});
 
var system = require('system');
//casper.echo(system.args[4]);
//phantom.exit();
var  pass = system.args[4];

var verify = '';
casper.echo("==========");
 
 
casper.start('http://weichangdong.com/index.php/admin');

casper.then(function(){
	this.fill('form',{
		'name': 'admin',
		'password': pass
	},false);
});

// casper.thenClick('#name');
//casper.thenClick('#password');
casper.thenClick('form button');

casper.run(function(){
	var self = this;
	casper.echo("============="+self.getCurrentUrl()+'=======');

	if(self.exists('#typecho-message')){
		this.echo('get content ... ','ERROR');
		self.captureSelector('verify.png', '#typecho-message');
	}else{
		self.capture('renren.png');
	}
	self.exit();
});

casperjs login189.js pass

直接部分截图成功!!!!!!

有时间好好研究下

超线程 多核 多处理器区别

1 超线程技术

每个单位时间内,CPU只能处理一个线程(Thread)。除非有两个核心处理单元,否则要想在单位时间内处理超过一个的线程是不可能的。

超线程HT(Hyper-Threading)技术是在单个核心处理单元中集成两个逻辑处理单元,也就是一个实体内核(共享的运算单元),两个逻辑内核(有各自独立的处理器状态),在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,P4处理器需要多加入一个Logical CPU Pointer(逻辑处理单元)。因此新一代的P4 的面积比以往的P4增大了5%。而其余部分如ALU(整数运算单元)、FPU(浮点运算单元)、L2 Cache(二级缓存)则保持不变,这些部分是被分享的。

虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的CPU那样,每各CPU都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂时停止,并让出资源,直到这些资源闲置后才能继续。因此超线程的性能并不等于两颗CPU的性能。

2 多处理器

多处理器(Multiprocessor)系统由不同芯片上的多个处理器组成。多处理器系统因IT服务器的应用在上世纪九十年代得以普及。在当时,它们是可以插入机架服务器的处理器主板。现在,多处理器系统可以构建在同一块电路板上,处理器之间通过一个高速通信接口连接。

»»阅读全文

域名解析

CNAME	*	默认	wcd.xxx.com
A		www	默认	123.456.789.222
A		@	默认	123.456.789.222

lua lua

1、ngx.get_phase

Syntaxstr=ngx.get_phase()

Context init_by_lua*, init_worker_by_lua*, ssl_certificate_by_lua*, set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua*, log_by_lua*, ngx.timer.*, balancer_by_lua*

指令功能:返回当前运行的阶段名字。

init上下文为init_by_luainit_by_lua_file

init_worker上下文为init_worker_by_luainit_worker_by_lua_file

ssl_cert上下文为ssl_certificate_by_lua_block  ssl_certificate_by_lua_file

set上下文为 set_by_lua set_by_lua_file

rewrite上下文为rewrite_by_lua  rewrite_by_lua_file

balancer上下文为balancer_by_lua_block balancer_by_lua_file

access上下文为access_by_lua  access_by_lua_file

content上下文为content_by_lua content_by_lua_file

header_filter上下文为body_filter_by_lua body_filter_by_lua_file

body_filter上下文为log_by_lualog_by_lua_file

log上下文为log_by_lua log_by_lua_file

timer上下文为使用ngx.timer的回调函数;

 

2、lua_package_path

syntaxlua_package_path app/lib/?.lua;app/etc/?.lua;

default:编译时的lua_path

contexthttp

examplelua_package_path "$prefix/app/lib/?.lua;$prefix/app/etc/?.lua;$prefix/app/src/?.lua;;";

指令功能:指明lua库的位置,一般是.lua,在nginx配置里可以直接调用,而不用指定目录。


3、lua_package_cpath

syntaxlua_package_path app/lib/?.so;app/etc/?.so;

default:编译时的lua_cpath

contexthttp

examplelua_package_cpath "$prefix/app/lib/?.so;$prefix/../luajit/lib/lua/5.1/?.so;;";

指令功能:指明lua C库的位置,一般是.so,在nginx配置里可以直接调用,而不用指定目录。


4、lua_max_running_timers

Syntaxlua_max_running_timers <count>

Defaultlua_max_running_timers 256

Contexthttp

Examplelua_max_running_timers 512;

指令功能:设置running timers(回调函数还在运行的timer)的最大值。


5、lua_max_pending_timers

Syntaxlua_max_pending_timers <count>

Defaultlua_max_pending_timers 1024

Contexthttp

Examplelua_max_running_timers 512;

指令功能:设置pending timers(还未过期的timer)的最大值。


6、lua_check_client_abort

syntaxlua_check_client_abort on|off;

default:  off

contexthttp/server/location/location-if

examplelua_check_client_abort on

指令功能:控制是否检查premature client connection abortion,如果打开该选项,当client过早关闭连接时,会清除所有的lualight threads”。


7、lua_socket_log_errors

Syntaxlua_socket_log_errors on|off

Defaultlua_socket_log_errors on

Contexthttp/server/location

Examplelua_socket_log_errors off;

指令功能:在发生TCPUDP cosocket错误时,该指令可以切换错误的日志记录方式,如果已经有合适的处理方式,该指令相当于off,否则就会记录到error log(比较消耗性能)。


8、lua_http10_buffering

Syntaxlua_http10_buffering on|off

Defaultlua_http10_buffering on

Contexthttp/server/location/location-if

Examplelua_http10_buffering off;

指令功能:当请求是HTTP1.0或更老版本时,该指令用于enable/disable 自动的响应缓冲,当响应body特别大时,建议调成off,以免内存消耗过多。


9、lua_shared_dict

syntaxlua_shared_dict <name> <size>

defaultno

contexthttp

examplelua_shared_dict dogs 10m;

指令功能:定义共享内存及大小。

很好用的软件(chrome插件)

chrome 浏览器上可以玩转好多好玩意。

markdown相关,可以装换成pdf

 Markdown  Editer

 Markdown Preview Plus

模拟请求的 帅的很 

 RestEasy HttpRequester PostMan

域名出手

现以下域名均可出手,有意联系qq 545825965。

www.0huaqian.com 零花钱

www.mobimagic.cn 摩比神器

www.360batteryplus.com 360电池

www.baidudianqi.com 百度电器

www.70shuo.com 麒麟说

www.70say.com 麒麟说

yii1扑捉php错误

因为php环境可能配置的不是很完善,php的500错误,只是表现在nginx的access日志,一直以为是redis处理不过来(每秒请求1300)。

最后发现是代码迁移过程中,php版本变化了,有带吗报错,但是没有显现出来。通过下面这个方法,直到了是有php报错,然后很快就修复了,问题解决了。

public function actionError()
{
    if($error=Yii::app()->errorHandler->error)
        $this->render('error', $error);
}