RSS
 

mac sudo权限错误修复

03

一不小心改错了/etc/sudoers文件的权限,结果无法用sudo再次改回来了。

报错:

sudo: /etc/sudoers is mode 0640, should be 0440
Segmentation fault

解决办法:
使用“磁盘工具”-》“修复权限”。

 
No Comments

Posted in 技术

 

要想大成,光靠勤奋和努力是远远不够的

01

小时候以为,聪明人加勤奋,天下无敌。于是夏练三伏,冬练三九,二十多年过去了,修成“IT劳模”。一日梦醒,才明白,人生的牌桌只和了两把屁胡。愧对江东父老,甚憾!要想大成,光靠勤奋和努力是远远不够的。

金山雷军说的,是句大实在话。我想说人生方向不能错,得有见识,见识就那样还能折腾什么样?

 
 

Ubuntu登陆时显示系统信息

29

Ubuntu登陆时显示系统信息

按照landscape-common即可。

sudo apt-get install landscape-common

移除该信息:
ubuntu_server_disable_landscape_information_at_login

 
1 Comment

Posted in 技术

 

缠中说禅摘录碎片之主人与仆人

02

最近富士康总是连跳,昨天亲眼见了小区里一跳楼惨状。

民不聊生!

给人们希望!给人们希望!给人们希望!给人们希望!给人们希望!给人们希望!给人们希望!

一个大写站立的人最基本的良知:

一、祖国是祖国,政府是政府;政府是奴仆,祖国是母亲,那些迷糊于政府是祖国甚至大肆口淫者,都是把母亲当成奴仆的禽兽,人人可诛之!

二、中华文明,包括《论语》,最大的精神之一,就是朝可改、代可换,任何奴仆想迷糊主人、在主人面前不把主人当人,最后的下场都是被打得稀巴烂,这才是真正的中国文化!

三、任何的政府,都只能是奴仆,政府官员更是奴仆,任何大写、站立的人,都是主人,都必须有主人的心态,对恶奴就是要教训,任何国家,只要大写站立的人越多,恶奴出现的机会越少,那些甘心给恶奴舔沟子的,衣冠禽兽都够不上,必须非人道毁灭之!

四、任何奴仆的花费,都来自主人,任何政府的运行与资金,都来自纳税人。不尊重纳税人的,没资格政府。棍棒之下出好仆,政府就是该被纳税人批评,干得好是政府及其官员的天职,无须赞美。干不好就下来,让干得好的上,这是天经地义的!

五、最无耻的就是所谓的父母官,父母是父母,官员不过是奴仆,父母官的意思是父母奴仆,这不是禽兽是什么?对官员,只能奴仆视之,觉得不爽的,就别当,没人求你!

好了,更多的就不写了,只要越来越多人能做到这几条,中国人民才真正站起来!

最后,必须补充的是,祖国不是用来爱的,祖国对于本ID来说,更是这样的土地,本ID心甘情愿地把肉烂于其中,把骨化在其中,即使把所有的鲜血只去浇灌其中一朵花朵,让她能在一个并不光明的清晨,开得更加娇艳,本ID也心甘情愿!

 
 

[mod_python]Publisher Handler之Hello World(3)

27

下面这段脚本保存为hello.py,位于Web 根目录下/dir/path目录,我们可以通过下面URL通过来访问
http://my_site.tld/dir/path/hello.py 或

http://my_site.tld/dir/path/hello

def index():
   s = """\
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
"""
   return s

文档根目录是Apache是查找请求文件的地方,可以查看http.conf找出文档根目录。

在配置中把位于/dir/path目录下的请求交由Publisher Handler来处理。

————————-
原文:http://webpython.codepoint.net/mod_python_publisher_hello_world
翻译:blog.panzhibiao.com

 
 

[mod_python]Publisher Handler配置(2)

23

Apache Configuration

如果通过Linux发行包安装mod_python,下面这行配置通常已经在httpd.con之类的配置文件里了

LoadModule python_module modules/mod_python.so

没有请添加之。有两个配置选项可以配置:SetHandlerAddHandler指令。

SetHandler指令
本入门介绍将采用此方式。如果你希望避开郁闷的配置问题,你可以跟着此配置来做。采用下面这个配置,所有的文件都通过Publisher Handler来处理。

<Directory /path/to/publisher/directory>
   SetHandler mod_python
   PythonHandler mod_python.publisher
   PythonDebug On
</Directory>

上述这几行配置必须包含在Apache的类似httpd.conf的配置文件或.htaccess文件中。<Directory>指令不可以在.htaccess文件中使用。只不过包含三行就搞定。

第一行, SetHandler mod_python, 告诉Apache所有文件都交给mod_python来处理,不管扩展名如何。

第二行,PythonHandler mod_python.publisher,是mod_python指令,指定使用Publisher Handler。

第三行,PythonDebug On,设置mod_python打印debug信息到标准输出,方便调试。在生产环境中应置为Off。

在后面的内容中我们将使用此配置。其开启遍历算法,比下面介绍的方便些。换句话说,它允许执行index page,哪怕在类似http://mysite.tld这样的URL中没有声明,同时.py扩展名也不是必须的。

如果需要处理一些静态文件,可以这么着来配置:

<Files ~ "\.(gif|html|jpg|png)$">
   SetHandler default-handler
</Files>

AddHandler指令
第二种是通过AddHandler指令代替SetHandler

AddHandler mod_python .py

通过此指令,其他类型的文件都交给默认的Hnadler来处理,而无需设置它们。这里需要在URLs中显式声明’.py’扩展名。

———————
原文:http://webpython.codepoint.net/mod_python_publisher_apache_configuration
翻译者:blog.panzhibiao.com

 
 

[mod_python]mod_python简介(1)

23

Mod_python是Apache专有模块。Mod_python 3.x系列需要Apache 2.x和Python 2.2.1以上版本。对于Apache 1.3只有使用mod_python 2.x系列了。本入门介绍使用mod_python 3.1以上版本。

速度远胜CGI

对于每次CGI请求,Python解释器都必须运行一次。而mod_python方式,Apache会启动一个主解释器,对于每个apache虚拟主机都有一个子解释器,这个子解释器处理其所有请求,直至服务器关闭。

Mod_python handlers

Apache处理完成一个请求是分阶段来进行,Handler是用于某个请求的特定过程中。Handlers由Apache及其扩展模块提供,比如mod_python。

mod_python中有多个handers可供选择。大部分的通用性不是很好,但Publisher和PSP却有着极好的通用性,这里我们将主要介绍一下。

PSP handler处理在文本中嵌入python代码的脚本,就像php和asp那样。如果你习惯使用这样方式,并不打算学习其他的模式,PSP是很好选择。

Publisher Handler允许通过URL方式,访问模块中的函数和变量。它避免出现意大利面条式的代码风格,其代码组织更像应用程序。

如果你的*nix发行版没有提供mod_python安装包,或者使用的是Windows平台,你可以到 modpython.org下载安装之。

——————-
原文:http://webpython.codepoint.net/mod_python_tutorial
翻译者:http://blog.panzhibiao.com

 
 

Hotmail, Shit!

21

邮箱里充斥着hotmail的广告,Shit!

 
 

php 命名参数(named arguments)

20

php函数调用并没有支持命名参数(具名参数),而命名参数有时候会特别好用,尤其函数拥有一大堆参数列表的时候。

通过下面方法可以间接实现php命名参数调用。

/**
 * 发起一个HTTP请求
 * 
 * @param string $url
 * @param array $options 
 * 
 * @example 
 * 
 * @return string
 */
function shttp_request($url, $options = array())
{
	//默认配置
	$default_options = array(
			'post_data' => array(), //可以关联数组,也可以直接是经过URL编码后字符串
			'headers' => array(), //http请求头信息, 格式为KEY=>VALUE形式
			'timeout' => 3, //sec, 超时,0为不限制
			'follow_loc' => 0, //是否跟踪Location跳转
			'output_header' => 0, //是否输出HTTP头信息
			'userpwd' => array(), //用户名和密码,需要验证时使用。格式:array('username', 'password')
			'maxredirs' => 5, // 最大跳转次数
			'halt' => 1, //遇到错误是否exit
		);
	$options = array_merge($default_options, $options);
 
    $ch = curl_init();
 
    //url
    curl_setopt($ch, CURLOPT_URL, $url);
 
    //instead of outputting it out directly
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    //automatically set the Referer
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    //TRUE to follow any "Location: " header that the server sends
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $options['follow_loc'] ? true : false);    
    //maximum amount of HTTP redirections to follow
    curl_setopt($ch, CURLOPT_MAXREDIRS, $options['maxredirs']);
    //The number of seconds to wait whilst trying to connect. Use 0 to wait indefinitely
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $options['timeout']);
 
    if( !empty($options['headers']) ) {
    	$header_user_agent = 0;//is set user agent
    	foreach ($options['headers'] as $hkey=>$hval) {
    		if(strtolower(trim($hkey)) == 'user-agent') { $header_user_agent = 1; }
    		$nheaders[] = trim($hkey).": ".trim($hval);
    	}
    	curl_setopt($ch, CURLOPT_HTTPHEADER, $nheaders);
    }
 
    //Set Default User-Agent
    if( empty($header_user_agent) ) {
    	//IE7 on Windows Xp
    	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
    }
 
    //TRUE to include the header in the output
    curl_setopt($ch, CURLOPT_HEADER, $options['output_header'] ? true : false);
 
    //HTTPS
    if( stripos($url, "https://") !== FALSE ) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    }
 
    //Set Username & Password
    if( !empty($options['userpwd']) ) {
    	curl_setopt($ch, CURLOPT_USERPWD, "[{$options['username']}]:[{$options['password']}]");
    }
 
    //post data
    if( !empty($options['post_data']) ) {
    	curl_setopt($ch, CURLOPT_POST, true);
    	if( is_array($options['post_data']) )
    	{
        	$encoded = "";
            foreach ( $options['post_data'] as $k=>$v)
            {   
                $encoded .= "&".rawurlencode($k)."=".rawurlencode($v);
            }
            $encoded = substr($encoded, 1);//去掉首个'&'
            curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded);
    	}else{
    	    curl_setopt($ch, CURLOPT_POSTFIELDS, $options['post_data']);
    	}
    }
 
    $res = curl_exec($ch);
 
    if( $res === FALSE ) {
    	//echo "[function shttp_request]REQUEST URL: {$url},FAILURE! Error: ".curl_error($ch)."\n";
    	if($options['halt']) {
    		curl_close($ch);
    		exit();
    	}else{
    		return FALSE;
    	}
    }
    curl_close($ch);
 
    return $res; 
}

上面通过cURL模块实现一次HTTP请求函数,cURL通常具有很多参数,如果通过常见的参数列表往往需要特别长的参数才可以实现。但很麻烦,参数太多,次序记不住,容易出错。

通过传入一个php关联数组即可实现。默认配置写到函数内部,然后调用array_merge()来达到默认参数的效果,是不是很酷?

示例:发起一个调用

shttp_request("http://blog.panzhibiao.com", array('post_data'=>'a=1&b=2', 'timeout'=>10));
 
No Comments

Posted in 技术

 

windows & ubuntu 安装 Lua

14

Windows安装Lua

http://code.google.com/p/luaforwindows/

Ubuntu 10.4安装Lua
到官方网站 http://www.lua.org/ftp/ 下在最新版Lua。

# 下在Lua最新版,并解压
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
 
tar zxvf lua-5.1.4.tar.gz
 
cd lua-5.1.4
 
# 安装libreadline5
sudo apt-get install libreadline5 libreadline5-dev
 
# 安装编译工具
sudo apt-get install build-essential
 
# 编译安装Lua
sudo make linux
sudo make install

资源
参考手册:http://www.lua.org/ftp/refman-5.0.pdf

手册下载
《Programming in Lua》

 
No Comments

Posted in 技术

 
第 1 页,共 3 页123