服务器上共享了一部连载漫画,刚开始发现迅雷的盗链下载很厉害,就用 .htaccess 屏蔽了迅雷下载。而后来下载的人越来越多,其它多线程下载软件的威力也不容小视,Apache 平均每秒钟就要新开 3 个线程,遇到集群下载,还真有点吃不消。
平时,服务器上50来个进程在运行,耗内存480M左右;
下载集中的时候,服务器上300多个进程在运行(绝大多数是httpd),内存最高消耗1.5G,到达当前VPS允许使用的最大内存。
看来不对多线程下载进行限制是不行了,好在这个问题在 Apache 下解决起来并不是难事。不想重新编译 httpd,就用 DSO 模式安装非官方mod_limitipconn:
wget http://dominia.org/djao/limit/mod_limitipconn-0.23.tar.bz2
tar xjvf mod_limitipconn-0.23.tar.bz2
cd mod_limitipconn-0.23
make
make install
这里安装的版本是适合 Apache 2.2.X 的,理论上也可以用在 Apache 2.0.X 上,如果更老的 Apache 1.3,自己去看吧….mod_limitipconn.c。
安装好后需要编辑 httpd.conf :
vim /usr/local/apache/conf/httpd.conf
找到 ExtendedStatus On 这行,如果前面有 # 号注解,就删除 #。
再搜索 mod_limitipconn.so 找到这行:
LoadModule limitipconn_module modules/mod_limitipconn.so
上面这行应该是在安装的过程中自动添加到 httpd.conf 里面的,保留,把如下内容添加到它的下面:
<IfModule mod_limitipconn.c>
<Location /Velvet_Kiss>
MaxConnPerIP 2
</Location>
</IfModule>
保存 httpd.conf 退出,重启Apache,就可以去测试效果了。
<Location /Velvet_Kiss>的意思是,Apache 只会限制 Velvet_Kiss 目录下同 IP 的链接数。比如,如果还有一个目录叫 /download,那么用户只能开 2 个线程下载 /Velvet_Kiss 目录下的文件,却可以开多线程下载 /download 目录下的文件。Linux 下 Apache 的目录结构通常是这样的,/home/user1/public_html/xxxx,设置限制多线程下载目录的时候,我们只需要 /xxxx 就可以了,不需要绝对路径。<Location />是对全站进行限制。
MaxConnPerIP 2 的意思自然是同 IP 下最多只能开启两个线程下载,其余的线程将遭遇“Service Temporarily Unavailable”。
Apache限制多线程下载的一些扩展命令:
NoIPLimit img/*
#表示对 img 文件夹不进行限制
OnlyIPLimit audio/mpeg video
#仅对声音/视屏等多媒体文件进行限制下载
来源:http://www.onepx.com/apache-limit-downloads.html
平时,服务器上50来个进程在运行,耗内存480M左右;
下载集中的时候,服务器上300多个进程在运行(绝大多数是httpd),内存最高消耗1.5G,到达当前VPS允许使用的最大内存。
看来不对多线程下载进行限制是不行了,好在这个问题在 Apache 下解决起来并不是难事。不想重新编译 httpd,就用 DSO 模式安装非官方mod_limitipconn:
wget http://dominia.org/djao/limit/mod_limitipconn-0.23.tar.bz2
tar xjvf mod_limitipconn-0.23.tar.bz2
cd mod_limitipconn-0.23
make
make install
这里安装的版本是适合 Apache 2.2.X 的,理论上也可以用在 Apache 2.0.X 上,如果更老的 Apache 1.3,自己去看吧….mod_limitipconn.c。
安装好后需要编辑 httpd.conf :
vim /usr/local/apache/conf/httpd.conf
找到 ExtendedStatus On 这行,如果前面有 # 号注解,就删除 #。
再搜索 mod_limitipconn.so 找到这行:
LoadModule limitipconn_module modules/mod_limitipconn.so
上面这行应该是在安装的过程中自动添加到 httpd.conf 里面的,保留,把如下内容添加到它的下面:
<IfModule mod_limitipconn.c>
<Location /Velvet_Kiss>
MaxConnPerIP 2
</Location>
</IfModule>
保存 httpd.conf 退出,重启Apache,就可以去测试效果了。
<Location /Velvet_Kiss>的意思是,Apache 只会限制 Velvet_Kiss 目录下同 IP 的链接数。比如,如果还有一个目录叫 /download,那么用户只能开 2 个线程下载 /Velvet_Kiss 目录下的文件,却可以开多线程下载 /download 目录下的文件。Linux 下 Apache 的目录结构通常是这样的,/home/user1/public_html/xxxx,设置限制多线程下载目录的时候,我们只需要 /xxxx 就可以了,不需要绝对路径。<Location />是对全站进行限制。
MaxConnPerIP 2 的意思自然是同 IP 下最多只能开启两个线程下载,其余的线程将遭遇“Service Temporarily Unavailable”。
Apache限制多线程下载的一些扩展命令:
NoIPLimit img/*
#表示对 img 文件夹不进行限制
OnlyIPLimit audio/mpeg video
#仅对声音/视屏等多媒体文件进行限制下载
来源:http://www.onepx.com/apache-limit-downloads.html
话说某日有见54chen真人秀,在六体膜拜之后,鉴于之前也有看过REST的一些东东,于是便有了本文,正文如下:
REST(Representational State Transfer表述性状态转移)是一种体系架构,它为客户端和服务器之间的数据交互提供了指导。它将客户/服务器通信这种计算模型抽象到了Web层面。
REST最早是在Roy Thomas Fielding博士的博士论文中提出的,REST是一种针对网络应用的设计和开发方式,是一种风格,可以降低开发的复杂性,提高系统的可伸缩性。
REST强调如下的体系架构概念。
1、网络上的所有事物都被抽象为资源(resource);
2、每个资源对应一个唯一的资源标识(resource identifier),
3、通过通用的连接器接口(generic connector interface)对资源进行操作;
4、对资源的各种操作不会改变资源标识;
5、所有的操作都是无状态的(stateless)。
REST对于信息的核心抽象是资源,一个资源是一组实体的概念上的映射,而REST使用一个资源标识符来标识组件之间交互所涉及到的特定资源。REST连接器提供了访问和操作资源的值集合的一个通用接口。在这里所有的操作中,它们都是无状态的,这样就不必在多个请求之间保存状态,不必考虑上下文的约束,从而允许服务器组件迅速释放资源,并进一步简化其实现,从而提高系统的可伸缩性。
现在我们就一个简单的示例演示下REST。
在我们的示例中以Javascript为客户端,与HTTP服务器体系架构配合工作,使用URL作为资源标识,并将HTTP作为连接器接口。
客户端的代码:
如上所示,我们在客户端创建XMLHttpRequest对象,并且通过这个对象实现通过HTTP对服务器的操作GET、PUT、POST和DELETE以检索和修改资源。HTTP则把对每一个资源的操作都限制在了4个之内:GET、POST、PUT和DELETE。HTTP的这四个方法分别对应我们常见的CRUD操作,具体对应关系如下 :
C(Create) <==> POST
R(Read/Retrieve) <==> GET
U(Update) <==> PUT
D(Delete/Destroy) <==> DELETE
虽然HTTP提供了这4个方法,但是在某些情况下,PUT和DELETE方法是不可用的,于是我们在这里使用GET方法和POST方法进行替代。另外,在JS操作时,需要注意同源策略(Same Origin Policy,SOP),考虑跨域的问题。
服务端代码:
来源:http://www.phppan.com/2010/10/ajax-rest/
REST(Representational State Transfer表述性状态转移)是一种体系架构,它为客户端和服务器之间的数据交互提供了指导。它将客户/服务器通信这种计算模型抽象到了Web层面。
REST最早是在Roy Thomas Fielding博士的博士论文中提出的,REST是一种针对网络应用的设计和开发方式,是一种风格,可以降低开发的复杂性,提高系统的可伸缩性。
REST强调如下的体系架构概念。
1、网络上的所有事物都被抽象为资源(resource);
2、每个资源对应一个唯一的资源标识(resource identifier),
3、通过通用的连接器接口(generic connector interface)对资源进行操作;
4、对资源的各种操作不会改变资源标识;
5、所有的操作都是无状态的(stateless)。
REST对于信息的核心抽象是资源,一个资源是一组实体的概念上的映射,而REST使用一个资源标识符来标识组件之间交互所涉及到的特定资源。REST连接器提供了访问和操作资源的值集合的一个通用接口。在这里所有的操作中,它们都是无状态的,这样就不必在多个请求之间保存状态,不必考虑上下文的约束,从而允许服务器组件迅速释放资源,并进一步简化其实现,从而提高系统的可伸缩性。
现在我们就一个简单的示例演示下REST。
在我们的示例中以Javascript为客户端,与HTTP服务器体系架构配合工作,使用URL作为资源标识,并将HTTP作为连接器接口。
客户端的代码:
function rest() {
var XMLHttpFactories = [
function () {return new XMLHttpRequest()},
function () {return new ActiveXObject("Msxml2.XMLHTTP")},
function () {return new ActiveXObject("Msxml3.XMLHTTP")},
function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];
var xmlhttp = false;
for (var i = 0; i < XMLHttpFactories.length; i++) {
try {
xmlhttp = XMLHttpFactories[i]();
} catch (e) {
continue;
}
break;
}
// 建立XMLHttpRequest对象
this.xmlhttp = xmlhttp;
}
rest.prototype._get = function(url, data) {
var xmlhttp = this.xmlhttp;
xmlhttp.open ('GET', url + "&" + data, false);
xmlhttp.send (null);
return xmlhttp.responseText;
};
rest.prototype._post = function(url, data) {
var xmlhttp = this.xmlhttp;
xmlhttp.open ('POST', url, false);
xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.setRequestHeader ("Content-Length", data.length);
xmlhttp.send (data);
return xmlhttp.responseText;
};
rest.prototype.get = function(url, data) {
url = url += "?op=GET";
return this._get(url, data);
}
rest.prototype.post = function(url, data) {
url = url += "?op=POST";
return this._post(url, data);
}
rest.prototype.put = function(url, data) {
url = url += "?op=PUT";
return this._post(url, data);
};
rest.prototype.del = function(url, data) {
url = url += "?op=DELETE";
return this._get(url, data);
};
function t() {
var restobj = new rest();
document.write (restobj.get("http://localhost/test/service.php", "content=GET Content"));
document.write (restobj.post("http://localhost/test/service.php", "content=POST Content"));
document.write (restobj.put("http://localhost/test/service.php", "content=PUT Content"));
document.write (restobj.del("http://localhost/test/service.php", "content=DELETE Content"));
}
t();
var XMLHttpFactories = [
function () {return new XMLHttpRequest()},
function () {return new ActiveXObject("Msxml2.XMLHTTP")},
function () {return new ActiveXObject("Msxml3.XMLHTTP")},
function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];
var xmlhttp = false;
for (var i = 0; i < XMLHttpFactories.length; i++) {
try {
xmlhttp = XMLHttpFactories[i]();
} catch (e) {
continue;
}
break;
}
// 建立XMLHttpRequest对象
this.xmlhttp = xmlhttp;
}
rest.prototype._get = function(url, data) {
var xmlhttp = this.xmlhttp;
xmlhttp.open ('GET', url + "&" + data, false);
xmlhttp.send (null);
return xmlhttp.responseText;
};
rest.prototype._post = function(url, data) {
var xmlhttp = this.xmlhttp;
xmlhttp.open ('POST', url, false);
xmlhttp.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.setRequestHeader ("Content-Length", data.length);
xmlhttp.send (data);
return xmlhttp.responseText;
};
rest.prototype.get = function(url, data) {
url = url += "?op=GET";
return this._get(url, data);
}
rest.prototype.post = function(url, data) {
url = url += "?op=POST";
return this._post(url, data);
}
rest.prototype.put = function(url, data) {
url = url += "?op=PUT";
return this._post(url, data);
};
rest.prototype.del = function(url, data) {
url = url += "?op=DELETE";
return this._get(url, data);
};
function t() {
var restobj = new rest();
document.write (restobj.get("http://localhost/test/service.php", "content=GET Content"));
document.write (restobj.post("http://localhost/test/service.php", "content=POST Content"));
document.write (restobj.put("http://localhost/test/service.php", "content=PUT Content"));
document.write (restobj.del("http://localhost/test/service.php", "content=DELETE Content"));
}
t();
如上所示,我们在客户端创建XMLHttpRequest对象,并且通过这个对象实现通过HTTP对服务器的操作GET、PUT、POST和DELETE以检索和修改资源。HTTP则把对每一个资源的操作都限制在了4个之内:GET、POST、PUT和DELETE。HTTP的这四个方法分别对应我们常见的CRUD操作,具体对应关系如下 :
C(Create) <==> POST
R(Read/Retrieve) <==> GET
U(Update) <==> PUT
D(Delete/Destroy) <==> DELETE
虽然HTTP提供了这4个方法,但是在某些情况下,PUT和DELETE方法是不可用的,于是我们在这里使用GET方法和POST方法进行替代。另外,在JS操作时,需要注意同源策略(Same Origin Policy,SOP),考虑跨域的问题。
服务端代码:
<?php
/**
* REST后台程序简单示例
*/
class Resource {
public function get($request) {
echo 'content=', $request['content'], "; get resource Successful<br />";
}
public function post($request) {
echo 'content=', $request['content'], "; post resource Successful<br />";
}
public function put($request) {
echo 'content=', $request['content'], "; update resource Successful<br />";
}
public function delete($request) {
echo 'content=', $request['content'], "; delete resource Successful<br />";
}
}
$request = $_REQUEST;
$op = $request['op'];
$op = strtolower($op);
$ops = array(
'get' => 1,
'post' => 1,
'put' => 1,
'delete' => 1,
);
if (!isset($ops[$op])) {
die('input error!');
}
$resource = new Resource();
$resource->$op($request);
?>
/**
* REST后台程序简单示例
*/
class Resource {
public function get($request) {
echo 'content=', $request['content'], "; get resource Successful<br />";
}
public function post($request) {
echo 'content=', $request['content'], "; post resource Successful<br />";
}
public function put($request) {
echo 'content=', $request['content'], "; update resource Successful<br />";
}
public function delete($request) {
echo 'content=', $request['content'], "; delete resource Successful<br />";
}
}
$request = $_REQUEST;
$op = $request['op'];
$op = strtolower($op);
$ops = array(
'get' => 1,
'post' => 1,
'put' => 1,
'delete' => 1,
);
if (!isset($ops[$op])) {
die('input error!');
}
$resource = new Resource();
$resource->$op($request);
?>
来源:http://www.phppan.com/2010/10/ajax-rest/
背景:原因很简单,需要交换两块网卡的原因是mysql是Lamp打包软件的一个配置好的多网卡,应对两个网卡已经配置好了,而我是虚拟机,只能装一块网卡,于是否,出现如下问题:
我就需要换网卡了,或者修改eth0到eth1,呵呵。当然也可以修改mysql配置。阅读全文
linux-Jack-Xiang:/usr/local/mysql/bin # ./mysqld_safe --user=mysql
eth1: error fetching interface information: Device not found
./mysqld_safe: line 24: [: !=: unary operator expected
eth1: error fetching interface information: Device not found
./mysqld_safe: line 24: [: !=: unary operator expected
我就需要换网卡了,或者修改eth0到eth1,呵呵。当然也可以修改mysql配置。阅读全文
Total Commander必知快捷键
复制文件——F5
同目录复制——Shift + F5
剪切——F6
重命名文件——Shift + F6
批量重命名——F1或Ctrl + M
排序
按名称——Ctrl + F3
按扩展名——Ctrl + F4
按日期——Ctrl + F6
按大小——Ctrl + F5
取消排序——Ctrl + F7
窗口显示方式设置
显示文件名和扩展名——Ctrl + F1
显示详细信息——Ctrl + F2
显示目录树——Ctrl + F8
预览窗口——Ctrl + Q
刷新窗口中的内容——Ctrl + R
显示文件或文件夹大小——空格
--------------------------------------------------------------------------------
F1——批量重命名
F2——选定文件名
F3——用TC内置的关联程序快速查看文件内容
F4——编辑文件内容——
F5——从一侧窗口复制选定文件到另一侧窗口中的当前文件夹
F6——从一侧窗口剪切选定文件到另一侧窗口中的当前文件夹;重命名时删除完整的路径只保留文件名即可
F7——新建文件夹,名称默认为当前选定文件/文件夹的名称
F8——删除文件
F9——张学思版,复制文件名
F10——张学思版,比较文件内容
F11——张学思版,选定当前目录下同类型所有文件
F12——张学思版,复制选定文件的完整路径
--------------------------------------------------------------------------------
Ctrl+F1——列表模式显示文件,仅显示文件名
Ctrl+F2——显示文件详细信息(默认正常模式)
Ctrl+F3——按照文件名排序
Ctrl+F4——按照文件扩展名排序
Ctrl+F5——按照文件日期排序
Ctrl+F6——按照文件大小排序
Ctrl+F7——不排序
Ctrl+F8——显示文件树。切换到该模式后需要通过Ctrl+F1 或Ctrl+F2换到正常模式
Ctrl+F9——打印文件
Ctrl+F10——显示所有文件
Ctrl+F11——显示可执行文件
Ctrl+F12——自定义显示文件类型
--------------------------------------------------------------------------------
Shlift + F1——设置自定义列显示模式
Shlift + F2——张学思版,选定所有文件
Shlift + F3——张学思版,以lister显示文件
Shlift + F4——新建文本文档
Shlift + F5——同一目录内复制文件
Shlift + F6——重命名文件
Shlift + F7——比较左右两个窗口中的文件
Shlift + F8——张学思版,彻底删除文件
Shlift + F9——暂无
Shlift + F10——显示关联试图,类似于鼠标右键的效果
复制文件——F5
同目录复制——Shift + F5
剪切——F6
重命名文件——Shift + F6
批量重命名——F1或Ctrl + M
排序
按名称——Ctrl + F3
按扩展名——Ctrl + F4
按日期——Ctrl + F6
按大小——Ctrl + F5
取消排序——Ctrl + F7
窗口显示方式设置
显示文件名和扩展名——Ctrl + F1
显示详细信息——Ctrl + F2
显示目录树——Ctrl + F8
预览窗口——Ctrl + Q
刷新窗口中的内容——Ctrl + R
显示文件或文件夹大小——空格
--------------------------------------------------------------------------------
F1——批量重命名
F2——选定文件名
F3——用TC内置的关联程序快速查看文件内容
F4——编辑文件内容——
F5——从一侧窗口复制选定文件到另一侧窗口中的当前文件夹
F6——从一侧窗口剪切选定文件到另一侧窗口中的当前文件夹;重命名时删除完整的路径只保留文件名即可
F7——新建文件夹,名称默认为当前选定文件/文件夹的名称
F8——删除文件
F9——张学思版,复制文件名
F10——张学思版,比较文件内容
F11——张学思版,选定当前目录下同类型所有文件
F12——张学思版,复制选定文件的完整路径
--------------------------------------------------------------------------------
Ctrl+F1——列表模式显示文件,仅显示文件名
Ctrl+F2——显示文件详细信息(默认正常模式)
Ctrl+F3——按照文件名排序
Ctrl+F4——按照文件扩展名排序
Ctrl+F5——按照文件日期排序
Ctrl+F6——按照文件大小排序
Ctrl+F7——不排序
Ctrl+F8——显示文件树。切换到该模式后需要通过Ctrl+F1 或Ctrl+F2换到正常模式
Ctrl+F9——打印文件
Ctrl+F10——显示所有文件
Ctrl+F11——显示可执行文件
Ctrl+F12——自定义显示文件类型
--------------------------------------------------------------------------------
Shlift + F1——设置自定义列显示模式
Shlift + F2——张学思版,选定所有文件
Shlift + F3——张学思版,以lister显示文件
Shlift + F4——新建文本文档
Shlift + F5——同一目录内复制文件
Shlift + F6——重命名文件
Shlift + F7——比较左右两个窗口中的文件
Shlift + F8——张学思版,彻底删除文件
Shlift + F9——暂无
Shlift + F10——显示关联试图,类似于鼠标右键的效果
SSI固然不能替代CGI或者其他动态页面技术,但它是在页面中插入众多小型的动态片段的优秀方法,而无须大量额外的操作。
粘贴部分,如下:
包含一个CGI程序的输出结果
这也是SSI很常见的一个用途:包含一个CGI程序的输出,比如人人喜欢的"点击计数器"。
<!--#include virtual="/cgi-bin/counter.pl" -->
包含一个标准页脚
当你管理一个拥有许多页面的站点,你会发现对所有页面同时做改动是很痛苦的,尤其是在试图对所有页面维持某种标准视觉效果的时候。
使用包含一个页眉/页脚的方法,可以减轻修改的负担。你只要制作一个页脚文件,并用include命令包含到每个页面即可。include元素能按file属性或virtual属性判断应该包含的文件。file属性是一个相对于当前目录的文件路径,即不能是一个绝对路径(以"/"开头)或包含"../"的路径。virtual属性可能更有用,它是一个相对于被提供的文档的URL ,可以以"/"开头,但必须与被提供的文档位于同一服务器上。
<!--#include virtual="/footer.html" -->
来源:http://www.phpchina.com/resource/manual/apache/howto/ssi.html
粘贴部分,如下:
包含一个CGI程序的输出结果
这也是SSI很常见的一个用途:包含一个CGI程序的输出,比如人人喜欢的"点击计数器"。
<!--#include virtual="/cgi-bin/counter.pl" -->
包含一个标准页脚
当你管理一个拥有许多页面的站点,你会发现对所有页面同时做改动是很痛苦的,尤其是在试图对所有页面维持某种标准视觉效果的时候。
使用包含一个页眉/页脚的方法,可以减轻修改的负担。你只要制作一个页脚文件,并用include命令包含到每个页面即可。include元素能按file属性或virtual属性判断应该包含的文件。file属性是一个相对于当前目录的文件路径,即不能是一个绝对路径(以"/"开头)或包含"../"的路径。virtual属性可能更有用,它是一个相对于被提供的文档的URL ,可以以"/"开头,但必须与被提供的文档位于同一服务器上。
<!--#include virtual="/footer.html" -->
来源:http://www.phpchina.com/resource/manual/apache/howto/ssi.html
“当前中国距离经济衰退前的日本仅半步之遥。”被称为“中国经济学界‘阴谋论’第一人”的郎咸平,周五在新书《新帝国主义在中国2》发表会上指出,中国经济有三大危机,第一是资产泡沫化,第二是经济停滞化,第三是通货膨胀化。而美国将利用汇率大战、贸易大战、成本大战,恶化我们的三大危机。
希腊危机成为近日世界最热的话题,郎咸平认为,危机是一场精心策划的阴谋。这个阴谋从当年希腊进入欧盟就开始,借助高盛的力量,希腊通过伪造材料抹去了十亿欧元政府债务,本质上等于高盛借了希腊10亿欧元,使赤字GDP占比达5.2%的希腊满足赤字不高于3%的进入欧盟条件。高盛心里非常清楚知道这笔钱可能收不回来,就找到德国人购买刚好十亿欧元保险,只要希腊还不了钱,德国人还。通过保险把德国拉进来,一切布置妥当就等着金融海啸爆发。
“中国地产如火山”
郎咸平认为,最近股指不断下跌,根源在于严厉的宏观调控楼市政策,他提出“火山理论”,岩浆来自两个重大因素,第一投资金融环境恶化,第二严重产能过剩结果使大量资金由实体经济流入虚拟经济,再加上去年开始政府的一系列投资,助长岩浆形成。郎咸平认为,“欧洲金融危机已经开始了,这时候中国采取严格的紧缩调控很危险。中国股市的暴跌已经反映出了未来的危险。”
“美国是最聪明阴谋家”
“美国能成为世界领袖不是没有原因的,因为美国是世界上最聪明的阴谋家。”
郎咸平说,“日本在1985年以前没有危机,美国1985年逼迫日本签下协议,1985年到1987年日本受到很大的影响,1987年掉一下一个重磅炸弹,要求日本降低利率2.5%,前两年受到重大重挫的企业,因此向大量银行借钱炒楼、炒股,从而造成非常严重的资产泡沫化。到了1989年底日均指数接近39000点,日本得意忘形的时候说决定把美国买下来,他们做梦也没有想到,到1991年头美国掉下金融核弹头,使日本现在也没有翻身。金融核弹头包括三个零配件。第一个融资融券、第二股指期货,第三个允许华尔街进入日本操纵。”
“如今,中国显然已经具备了两个零配件,距离西方陷阱就差最后一项。”郎咸平说。
郎咸平说,“中国通过四万亿方案造成严重产能过剩,我认为这是西方新帝国主义透过金融大战配合产能过剩狙击中国,高速公路建完之后有没有效益,因为高速公路效益取决于载体,真正本质在于国家老百姓富裕才可能跑高速公路,在这一点上,罗斯福、日本都犯了错。”
他还主张,“政府不应该拿资源做基础建设,而应该创造利润,让老百姓共同富裕,这才是我所提出的解决方案。”
来源:http://bbs.eduol.cn/post_69_482538_0.html
希腊危机成为近日世界最热的话题,郎咸平认为,危机是一场精心策划的阴谋。这个阴谋从当年希腊进入欧盟就开始,借助高盛的力量,希腊通过伪造材料抹去了十亿欧元政府债务,本质上等于高盛借了希腊10亿欧元,使赤字GDP占比达5.2%的希腊满足赤字不高于3%的进入欧盟条件。高盛心里非常清楚知道这笔钱可能收不回来,就找到德国人购买刚好十亿欧元保险,只要希腊还不了钱,德国人还。通过保险把德国拉进来,一切布置妥当就等着金融海啸爆发。
“中国地产如火山”
郎咸平认为,最近股指不断下跌,根源在于严厉的宏观调控楼市政策,他提出“火山理论”,岩浆来自两个重大因素,第一投资金融环境恶化,第二严重产能过剩结果使大量资金由实体经济流入虚拟经济,再加上去年开始政府的一系列投资,助长岩浆形成。郎咸平认为,“欧洲金融危机已经开始了,这时候中国采取严格的紧缩调控很危险。中国股市的暴跌已经反映出了未来的危险。”
“美国是最聪明阴谋家”
“美国能成为世界领袖不是没有原因的,因为美国是世界上最聪明的阴谋家。”
郎咸平说,“日本在1985年以前没有危机,美国1985年逼迫日本签下协议,1985年到1987年日本受到很大的影响,1987年掉一下一个重磅炸弹,要求日本降低利率2.5%,前两年受到重大重挫的企业,因此向大量银行借钱炒楼、炒股,从而造成非常严重的资产泡沫化。到了1989年底日均指数接近39000点,日本得意忘形的时候说决定把美国买下来,他们做梦也没有想到,到1991年头美国掉下金融核弹头,使日本现在也没有翻身。金融核弹头包括三个零配件。第一个融资融券、第二股指期货,第三个允许华尔街进入日本操纵。”
“如今,中国显然已经具备了两个零配件,距离西方陷阱就差最后一项。”郎咸平说。
郎咸平说,“中国通过四万亿方案造成严重产能过剩,我认为这是西方新帝国主义透过金融大战配合产能过剩狙击中国,高速公路建完之后有没有效益,因为高速公路效益取决于载体,真正本质在于国家老百姓富裕才可能跑高速公路,在这一点上,罗斯福、日本都犯了错。”
他还主张,“政府不应该拿资源做基础建设,而应该创造利润,让老百姓共同富裕,这才是我所提出的解决方案。”
来源:http://bbs.eduol.cn/post_69_482538_0.html
【创业邦讯】周鸿祎认为,在中国做天使投资人比美国难做。美国这么多年天使投资人标准还是10万美金,这是中国10年前的标准,而现在在中国投一个初创项目没有100万美金很难起步,特别是互联网公司。究其原因,一是小公司雇人很难,大公司给点股票就把小公司的团队收购了。第二,中国互联网用户都被人控制了,"连我这样都被打的头破血流,更不要谈这些创业者了。"
周鸿祎是在12月1日由《创业邦》杂志主办的2010年创业邦年会上发表上述观点的,此次会议的主题是"2010:创新+成长",暨"创业邦100 "年度颁奖盛典。值得一提的是,周鸿祎是2009年创业邦评选的年度创业人物。
在周鸿祎眼里,小公司靠抄袭没有出路的,一定会淹没在众多的克隆者中间,如果敢抄袭大公司的商业模式,一没有钱,二没有人,三没有商业资源,如果不能标新立异、与众不同,你抄袭大公司没有意义。所以作为新的创业公司,一定要把创新变成你的文化,要忍受住抄袭的诱惑,做微创新。
何谓微创新?周鸿祎的定义是:一,大道至简。今天已经是消费者驱动的世界里,不是比拼有多少种功能,有多少奇妙的技术,只是看能为用户创造什么价值,能不能用。怎么让产品变得更加简单也是一种创新。二,聚焦。有很多成功的东西不是很均衡的,都是一点打动用户内心,但是其他的很粗糙,大家觉得这个东西很好,那赶快加大投入,再乘胜追击。三,不要做平台。做平台的人,往往是很有经验的人,有些创业者没有经验反而容易聚焦,有些有经验的人最容易犯这样的错误,经常从产业宏观的角度看问题,比如谈3G的未来趋势。而实际上用户不关心产业整合,用户只问拿来产品能有什么用。
周鸿祎还强调,创业者迈出的第一步很重要,而第一步就从用户出发:解决用户的一个问题,要么让用户觉得很爽,要么觉得很开心,要么很便宜,总之是解决了一个巨大的问题。一个用户体验的提升可以翘动大市场,所有成功的公司都是从细微的点开始切入的。这个点也可以理解是微创新。
所以,公司小、结构扁平的情况下,每个人都要把自己当成客服经理、产品经理去倾听用户的声音,形成自外而内、自下而上的方式。周鸿祎说,"我就是360最大的产品经理。"
昨日,奇虎360对外发布了新的杀毒软件产品,仍坚持免费。这是奇虎360和腾讯QQ发生纠纷后首次推出的新产品。据介绍,这款新产品创造了杀毒软件四引擎模式。奇虎360董事长周鸿祎表示,不会因3Q大战放弃隐私保护的产品开发。奇虎近期还更改了标志,周鸿祎说,"原来的标志太过有棱角,新改后的标志会更加温和。而且以后不会只考虑用户利益,也会考虑别的公司的感受。"
来源:http://news.cyzone.cn/news/2010/12/02/176725.html
周鸿祎是在12月1日由《创业邦》杂志主办的2010年创业邦年会上发表上述观点的,此次会议的主题是"2010:创新+成长",暨"创业邦100 "年度颁奖盛典。值得一提的是,周鸿祎是2009年创业邦评选的年度创业人物。
在周鸿祎眼里,小公司靠抄袭没有出路的,一定会淹没在众多的克隆者中间,如果敢抄袭大公司的商业模式,一没有钱,二没有人,三没有商业资源,如果不能标新立异、与众不同,你抄袭大公司没有意义。所以作为新的创业公司,一定要把创新变成你的文化,要忍受住抄袭的诱惑,做微创新。
何谓微创新?周鸿祎的定义是:一,大道至简。今天已经是消费者驱动的世界里,不是比拼有多少种功能,有多少奇妙的技术,只是看能为用户创造什么价值,能不能用。怎么让产品变得更加简单也是一种创新。二,聚焦。有很多成功的东西不是很均衡的,都是一点打动用户内心,但是其他的很粗糙,大家觉得这个东西很好,那赶快加大投入,再乘胜追击。三,不要做平台。做平台的人,往往是很有经验的人,有些创业者没有经验反而容易聚焦,有些有经验的人最容易犯这样的错误,经常从产业宏观的角度看问题,比如谈3G的未来趋势。而实际上用户不关心产业整合,用户只问拿来产品能有什么用。
周鸿祎还强调,创业者迈出的第一步很重要,而第一步就从用户出发:解决用户的一个问题,要么让用户觉得很爽,要么觉得很开心,要么很便宜,总之是解决了一个巨大的问题。一个用户体验的提升可以翘动大市场,所有成功的公司都是从细微的点开始切入的。这个点也可以理解是微创新。
所以,公司小、结构扁平的情况下,每个人都要把自己当成客服经理、产品经理去倾听用户的声音,形成自外而内、自下而上的方式。周鸿祎说,"我就是360最大的产品经理。"
昨日,奇虎360对外发布了新的杀毒软件产品,仍坚持免费。这是奇虎360和腾讯QQ发生纠纷后首次推出的新产品。据介绍,这款新产品创造了杀毒软件四引擎模式。奇虎360董事长周鸿祎表示,不会因3Q大战放弃隐私保护的产品开发。奇虎近期还更改了标志,周鸿祎说,"原来的标志太过有棱角,新改后的标志会更加温和。而且以后不会只考虑用户利益,也会考虑别的公司的感受。"
来源:http://news.cyzone.cn/news/2010/12/02/176725.html
三大准则
准则1:跟人决定前途
民初名妓小凤仙,要是找个民工,扫黄就被扫走了;
她找蔡锷,就流芳千古;
要是跟孙中山,那就是国母。
所以不在于你干什么,而在于你跟谁干。
准则2:时间决定性质
赵四小姐16岁去大帅府,去1年,是奸情;去3年,是偷情;
一去30年,那就是千古爱情。
很多事情不是不做,而是要看做多久。
准则3:大小决定成败
刘平组织几十人抢矿霸矿,那是黑社会;
老毛组织几百万大军抢下全中国,就是伟大领袖。
所以不在乎你干没干,而在于干多大
准则1:跟人决定前途
民初名妓小凤仙,要是找个民工,扫黄就被扫走了;
她找蔡锷,就流芳千古;
要是跟孙中山,那就是国母。
所以不在于你干什么,而在于你跟谁干。
准则2:时间决定性质
赵四小姐16岁去大帅府,去1年,是奸情;去3年,是偷情;
一去30年,那就是千古爱情。
很多事情不是不做,而是要看做多久。
准则3:大小决定成败
刘平组织几十人抢矿霸矿,那是黑社会;
老毛组织几百万大军抢下全中国,就是伟大领袖。
所以不在乎你干没干,而在于干多大
1, 插入排序算法
1.1 直接插入排序
/*
* Insert sort algorithm.
* O(n^2)
*
* 说明:该算法把要排序的元素分成,已排好的有序区和代排序区。
* 然后在代排序区中拿一个元素插入到有序区中,使得有序区
* 不断扩大,而代排序区不断减少。
*
*/
int insert_sort(int a[], int num)
{
int i, j, key;
for (i = 1; i < num; i++) {
// 取一个代排序元素作为当前元素
key = a[i];
// 把i之前大于a[i]的元素向后移动一个位置,注意边界;
for (j = i; j > 0 && a[j-1] > key; j--) {
a[j] = a[j - 1];
}
// 在合适的位置安放当前元素,此时j就是合适的位置,因为j以前的元素都比当前元素小
a[j] = key;
}
return OK;
}
1.2 希尔排序
/*
* Shell sort.
*/
int shell_sort(int a[], int len)
{
int gap, i, j, temp;
for (gap = len/2; gap > 0; gap /= 2) { //gap 是增量
for (i = gap; i < len; i++) { //对增量值为gap的元素进行插入排序
temp = a[i];
for (j = i; j >= gap; j-=gap) {
if (temp < a[j - gap])
a[j] = a[j - gap];
else
break;
}
a[j] = temp;
}
}
return OK;
}
分析: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
该方法实质上是一种分组插入方法。
2, 交换排序
2.1 冒泡排序
/*
* 冒泡排序
* 每一趟把最大的元素沉到最后去.
*/
int bubble_sort(int a[], int len)
{
int i, j, tmp;
// 0...len是无序区
for (i = 0; i < len; i++) { //最多做len-1趟排序
for (j = len - 1; j > i; j--) { //对当前无序区a[i..len-1]自下向上扫描
if (a[j] < a[j-1]) { //把最小的元素交换到i位置,并把i加1
tmp = a[j];
a[j] = a[j-1];
a[j-1] = tmp;
}
}
}
return OK;
}
分析:由于该算法每趟都要经过n步的比较,而一共要进行n次这样的比较;所以时间复杂度为: O(n^2)
2.2 快速排序
快速排序是一种分治的递归算法.将数组S排序的基本算法由以下四步组成:
1) 如果S中元素个数是0或1,返回
2) 取S中任一元素v,称为枢纽元素
3) 将S分为两个不相交的集合,一个S1={x>v} 一个全S2={x<v}
4) 返回 quicksort(S1),继续v,继而quicksort(S2)
对于第3步枢纽元素的选择,选择好的枢纽元素将会大大提高程序的效率,所以如何选择好的枢纽元素,成为一个设计上的决策.
.如何选择枢纽元素?
常用的想法是直接选择第一个元素作为枢纽元素,但是有时候第一个元素并不是最好的,会造成算法整体效率下降,这里<参考1>给出一种选择枢纽元素的策略:
三数中值分割法选择枢纽元素: 即使用数组最左端和最右端以及中心元素三个元素的中间值作为枢纽元素.
待续...
参考书籍:
1,<<数据结构与算法分析>> Mark Allen Weiss
2,<<数据结构>> 严蔚明 <<数据结构 c语言描述>> 高一凡
http://student.zjzk.cn/course_ware/data_structure/web/PAIXU/paixu8.2.2.1.htm
1.1 直接插入排序
/*
* Insert sort algorithm.
* O(n^2)
*
* 说明:该算法把要排序的元素分成,已排好的有序区和代排序区。
* 然后在代排序区中拿一个元素插入到有序区中,使得有序区
* 不断扩大,而代排序区不断减少。
*
*/
int insert_sort(int a[], int num)
{
int i, j, key;
for (i = 1; i < num; i++) {
// 取一个代排序元素作为当前元素
key = a[i];
// 把i之前大于a[i]的元素向后移动一个位置,注意边界;
for (j = i; j > 0 && a[j-1] > key; j--) {
a[j] = a[j - 1];
}
// 在合适的位置安放当前元素,此时j就是合适的位置,因为j以前的元素都比当前元素小
a[j] = key;
}
return OK;
}
1.2 希尔排序
/*
* Shell sort.
*/
int shell_sort(int a[], int len)
{
int gap, i, j, temp;
for (gap = len/2; gap > 0; gap /= 2) { //gap 是增量
for (i = gap; i < len; i++) { //对增量值为gap的元素进行插入排序
temp = a[i];
for (j = i; j >= gap; j-=gap) {
if (temp < a[j - gap])
a[j] = a[j - gap];
else
break;
}
a[j] = temp;
}
}
return OK;
}
分析: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
该方法实质上是一种分组插入方法。
2, 交换排序
2.1 冒泡排序
/*
* 冒泡排序
* 每一趟把最大的元素沉到最后去.
*/
int bubble_sort(int a[], int len)
{
int i, j, tmp;
// 0...len是无序区
for (i = 0; i < len; i++) { //最多做len-1趟排序
for (j = len - 1; j > i; j--) { //对当前无序区a[i..len-1]自下向上扫描
if (a[j] < a[j-1]) { //把最小的元素交换到i位置,并把i加1
tmp = a[j];
a[j] = a[j-1];
a[j-1] = tmp;
}
}
}
return OK;
}
分析:由于该算法每趟都要经过n步的比较,而一共要进行n次这样的比较;所以时间复杂度为: O(n^2)
2.2 快速排序
快速排序是一种分治的递归算法.将数组S排序的基本算法由以下四步组成:
1) 如果S中元素个数是0或1,返回
2) 取S中任一元素v,称为枢纽元素
3) 将S分为两个不相交的集合,一个S1={x>v} 一个全S2={x<v}
4) 返回 quicksort(S1),继续v,继而quicksort(S2)
对于第3步枢纽元素的选择,选择好的枢纽元素将会大大提高程序的效率,所以如何选择好的枢纽元素,成为一个设计上的决策.
.如何选择枢纽元素?
常用的想法是直接选择第一个元素作为枢纽元素,但是有时候第一个元素并不是最好的,会造成算法整体效率下降,这里<参考1>给出一种选择枢纽元素的策略:
三数中值分割法选择枢纽元素: 即使用数组最左端和最右端以及中心元素三个元素的中间值作为枢纽元素.
待续...
参考书籍:
1,<<数据结构与算法分析>> Mark Allen Weiss
2,<<数据结构>> 严蔚明 <<数据结构 c语言描述>> 高一凡
http://student.zjzk.cn/course_ware/data_structure/web/PAIXU/paixu8.2.2.1.htm
幸福的哲学
--摘自《参考消息》
* 忘记过去
忘记过去是变得幸福的一宝。如果你总是不肯忘掉过去,你就无法变得幸福快乐。你犯过错误吗?你有过很糟糕的经历吗?不管曾经发生过什么,都过去了。你无法改变过去,所以你最好忽略它们,把所有的精力都用在处理当下。
* 对自己的生活负责
幸福的秘诀是得到自由,而只有的秘诀是勇气。
只有自由才能获得幸福。自由的根本一点就是有选择的权利。不管情况多坏,你还是有权利选择怎样面对。但自由需要勇气,自由选择的前提是需要有足够的要求为选择负责。当情况变得糟糕不要埋怨别人,承担责任并且记住你有选择的权利。
* 成为你自己
一个人成为他自己了,那就达到了幸福的顶点。
只有当你成为你自己的时候你才能幸福。不要为了迎合他人的需要而为他人活着。大家可能期望能能做些什么工作或者是按某种既定的方式生活,但是不要被他们所左右,你要成为你自己。
* 为自己的人生目标生活
真正的幸福来自于全身心的投入到对我们目标的追求中。
只要你找到了生活的目标然后充满悬信念去追求,你就能够活得很满足。看看你最在乎什么,然后充满勇气地去追求。
* 磨练自己的意志力
意志力是幸福的源泉,幸福来源于自我约束。
磨练自己的意志力是幸福的基础。当你对待自己和朋友时能够自律,你就获得了宁静。
磨练意志力的方法是做出承诺并履行承诺。例如:你承诺不再抽烟,的你真的戒烟时,就是在磨练自己的意志力。或者你向别人允诺要准时,当你真的开始变得准时,那就是在磨练自己的意志力。
* 记得你获得的祝福
幸福永远不会光顾那些不珍惜自己所有的人。
如果我们能保持感恩,我们就能获得快乐幸福。很不幸的是,发现我们没有的东西比我们拥有的东西容易得多。有时候我们需要体会失败才能懂得珍惜我们的拥有。所有,不要把获得什么当作是理所应当的事情。看看你拥有的东西,你会有很多感到幸福的理由。
* 有积极的思想
不是因为身处何种情境,而是因为精神世界让人或高兴或悲伤。
幸福的人懂得怎么控制自己的思想。他们不会让消极情绪控制自己。当一个情况看起来可能对某个人不利时,幸福的人会从积极的方面考虑。他们坚信再糟糕的情况里也有积极可取的地方。你的精神世界可以成为成就你也可以毁灭你,所以要好好保护它。
* 有创意的工作
幸福来自成就感,来自富有创造力的工作。
当你开始有创造力的工作时,就会找到快乐。工作中有一种”涨潮“状态,即一种全神贯注的最佳心灵状态,也就是意识高度集中。当你处于”涨潮“状态时,你就会全身心投入到你的工作中。这种涨潮体念可以帮助你提高效率,同时获得快乐。
* 从你所拥有的开始
笨人寻找远处的幸福,聪明的人在脚下播种幸福。
幸福的人不会为了幸福去追求那些他们没有的东西。他们无需特定的工作或是特定的薪水。他们学着从自己拥有中获得幸福。他们学会了满足的艺术。满足于自己所拥有的,你就能变的快乐。
* 在意身边的小事
幸福不是被巨大的灾难或者是致命的错误扼杀的,而是被不断重复出现的小错一点点分解掉的。
这一点非常正确。通常不是那些大事毁掉了你的幸福,反而是一些小事。也许你不喜欢某个人或者你曾有过小小的失信,但是这些不起眼的事情真的可以毁掉你的幸福,所以要注意他们。
* 放弃野心
野心终止了,幸福就开始了。
在生活中不断地想要得到更多不是错误,但是被这些想法缠住可就不好了。要尽全力摆脱这些想法的纠缠。
* 让别人开心
幸福就像香水,不是泼在别人身上,而是洒在自己身上。
人自己幸福的第一秘方是让别人幸福。越是助人为乐就越快乐。幸福不是来自于自私而是来自于无私。
* 建立情感网络
生活中最幸福之所在是我们一直以来搭建的感情网络。
我们可以通过情感的网络来活的幸福。原因很简单:只有通过这样的网络文明才能体验爱与被爱。吧这些感情当作生活中重要的一部分,是寻找真正幸福的必经之路。
* 寻找各种各样的做事的激情
一个人的激情与理想越多,越有可能幸福。
激情带你找到幸福。所有你不仅需要进一步增加自己的激情,更要寻找自己在其他方面更多的激情,这样呢又为幸福创造了可能。寻找激情的方法是好奇心。如果你好奇,你就能发现世界上令人兴奋的事情是无穷无尽的。
来源:http://blog.chinaunix.net/u/28197/showart_1999878.html
--摘自《参考消息》
* 忘记过去
忘记过去是变得幸福的一宝。如果你总是不肯忘掉过去,你就无法变得幸福快乐。你犯过错误吗?你有过很糟糕的经历吗?不管曾经发生过什么,都过去了。你无法改变过去,所以你最好忽略它们,把所有的精力都用在处理当下。
* 对自己的生活负责
幸福的秘诀是得到自由,而只有的秘诀是勇气。
只有自由才能获得幸福。自由的根本一点就是有选择的权利。不管情况多坏,你还是有权利选择怎样面对。但自由需要勇气,自由选择的前提是需要有足够的要求为选择负责。当情况变得糟糕不要埋怨别人,承担责任并且记住你有选择的权利。
* 成为你自己
一个人成为他自己了,那就达到了幸福的顶点。
只有当你成为你自己的时候你才能幸福。不要为了迎合他人的需要而为他人活着。大家可能期望能能做些什么工作或者是按某种既定的方式生活,但是不要被他们所左右,你要成为你自己。
* 为自己的人生目标生活
真正的幸福来自于全身心的投入到对我们目标的追求中。
只要你找到了生活的目标然后充满悬信念去追求,你就能够活得很满足。看看你最在乎什么,然后充满勇气地去追求。
* 磨练自己的意志力
意志力是幸福的源泉,幸福来源于自我约束。
磨练自己的意志力是幸福的基础。当你对待自己和朋友时能够自律,你就获得了宁静。
磨练意志力的方法是做出承诺并履行承诺。例如:你承诺不再抽烟,的你真的戒烟时,就是在磨练自己的意志力。或者你向别人允诺要准时,当你真的开始变得准时,那就是在磨练自己的意志力。
* 记得你获得的祝福
幸福永远不会光顾那些不珍惜自己所有的人。
如果我们能保持感恩,我们就能获得快乐幸福。很不幸的是,发现我们没有的东西比我们拥有的东西容易得多。有时候我们需要体会失败才能懂得珍惜我们的拥有。所有,不要把获得什么当作是理所应当的事情。看看你拥有的东西,你会有很多感到幸福的理由。
* 有积极的思想
不是因为身处何种情境,而是因为精神世界让人或高兴或悲伤。
幸福的人懂得怎么控制自己的思想。他们不会让消极情绪控制自己。当一个情况看起来可能对某个人不利时,幸福的人会从积极的方面考虑。他们坚信再糟糕的情况里也有积极可取的地方。你的精神世界可以成为成就你也可以毁灭你,所以要好好保护它。
* 有创意的工作
幸福来自成就感,来自富有创造力的工作。
当你开始有创造力的工作时,就会找到快乐。工作中有一种”涨潮“状态,即一种全神贯注的最佳心灵状态,也就是意识高度集中。当你处于”涨潮“状态时,你就会全身心投入到你的工作中。这种涨潮体念可以帮助你提高效率,同时获得快乐。
* 从你所拥有的开始
笨人寻找远处的幸福,聪明的人在脚下播种幸福。
幸福的人不会为了幸福去追求那些他们没有的东西。他们无需特定的工作或是特定的薪水。他们学着从自己拥有中获得幸福。他们学会了满足的艺术。满足于自己所拥有的,你就能变的快乐。
* 在意身边的小事
幸福不是被巨大的灾难或者是致命的错误扼杀的,而是被不断重复出现的小错一点点分解掉的。
这一点非常正确。通常不是那些大事毁掉了你的幸福,反而是一些小事。也许你不喜欢某个人或者你曾有过小小的失信,但是这些不起眼的事情真的可以毁掉你的幸福,所以要注意他们。
* 放弃野心
野心终止了,幸福就开始了。
在生活中不断地想要得到更多不是错误,但是被这些想法缠住可就不好了。要尽全力摆脱这些想法的纠缠。
* 让别人开心
幸福就像香水,不是泼在别人身上,而是洒在自己身上。
人自己幸福的第一秘方是让别人幸福。越是助人为乐就越快乐。幸福不是来自于自私而是来自于无私。
* 建立情感网络
生活中最幸福之所在是我们一直以来搭建的感情网络。
我们可以通过情感的网络来活的幸福。原因很简单:只有通过这样的网络文明才能体验爱与被爱。吧这些感情当作生活中重要的一部分,是寻找真正幸福的必经之路。
* 寻找各种各样的做事的激情
一个人的激情与理想越多,越有可能幸福。
激情带你找到幸福。所有你不仅需要进一步增加自己的激情,更要寻找自己在其他方面更多的激情,这样呢又为幸福创造了可能。寻找激情的方法是好奇心。如果你好奇,你就能发现世界上令人兴奋的事情是无穷无尽的。
来源:http://blog.chinaunix.net/u/28197/showart_1999878.html
昨天配置好两块网卡可以同时上网.但安装完active directory 后,电脑在启动到正在准备网络连接很慢很慢.终于启动后,我查看了一下日志事件.就是在访问DNS的时候时间比较长.
真是奇怪,我只有两快网卡,但日志上还有一快,真是莫名其妙.后来才知道,原来我安装了emule后产生了虚拟网卡.
想办法删掉.是在我的电脑右击属性--在设备管理器---查看-- 显示隐藏的设备-把那个虚拟的网卡卸载.
启动快多了.爽!
你可以通过这个链接引用该篇文章:http://janeluo520.bokee.com/viewdiary.11963901.html
真是奇怪,我只有两快网卡,但日志上还有一快,真是莫名其妙.后来才知道,原来我安装了emule后产生了虚拟网卡.
想办法删掉.是在我的电脑右击属性--在设备管理器---查看-- 显示隐藏的设备-把那个虚拟的网卡卸载.
启动快多了.爽!
你可以通过这个链接引用该篇文章:http://janeluo520.bokee.com/viewdiary.11963901.html
一、引言 Daemon程序是一直运行的服务端程序,又称为守护进程。
本文介绍了在Linux下编写Daemon程序的步骤,并给出了例子程序。
二、Daemon程序简介 Daemon是长时间运行的进程,通常在系统启动后就运行,在系统关闭时才结束。一般说Daemon程序在后台运行,是因为它没有控制终端,无法和前台的用户交互。Daemon程序一般都作为服务程序使用,等待客户端程序与它通信。我们也把运行的Daemon程序称作守护进程。
三、Daemon程序编写规则
编写Daemon程序有一些基本的规则,以避免不必要的麻烦。
1、首先是程序运行后调用fork,并让父进程退出。子进程获得一个新的进程ID,但继承了父进程的进程组ID。
2、调用setsid创建一个新的session,使自己成为新session和新进程组的leader,并使进程没有控制终端(tty)。
3、改变当前工作目录至根目录,以免影响可加载文件系统。或者也可以改变到某些特定的目录。
4、设置文件创建mask为0,避免创建文件时权限的影响。
5、关闭不需要的打开文件描述符。因为Daemon程序在后台执行,不需要于终端交互,通常就关闭STDIN、STDOUT和STDERR。其它根据实际情况处理。
另一个问题是Daemon程序不能和终端交互,也就无法使用printf方法输出信息了。我们可以使用syslog机制来实现信息的输出,方便程序的调试。在使用syslog前需要首先启动syslogd程序,关于syslogd程序的使用请参考它的man page,或相关文档,我们就不在这里讨论了。
四、一个Daemon程序的例子 编译运行环境为Redhat Linux 8.0。
我们新建一个daemontest.c程序,文件内容如下:
使用如下命令编译该程序: gcc -Wall -o daemontest daemontest.c编译完成后生成名为daemontest的程序,执行./daemontest来测试程序的运行。
使用ps axj命令可以显示系统中已运行的daemon程序的信息,包括进程ID、session ID、控制终端等内容。
部分显示内容:
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1098 1101 1101 1074 pts/1 1101 S 0 0:00 -bash 1 1581 777 777 ? -1 S 500 0:13 gedit 1 1650 1650 1650 ? -1 S 500 0:00 ./daemontest 794 1654 1654 794 pts/0 1654 R 500 0:00
ps axj 从中可以看到daemontest程序运行的进程号为1650。
我们再来看看/var/log/messages文件中的信息: Apr 7 22:00:32 localhost
daemontest[1650]: program started.
显示了我们在程序中希望输出的信息。
我们再使用kill 1650命令来杀死这个进程,/var/log/messages文件中就会有如下的信息:
Apr 7 22:11:10 localhost daemontest[1650]: program terminated.
使用ps axj命令检查,发现系统中daemontest进程已经没有了。
五、参考资料
Advanced Programming in the Unix Environment W.Richard Stevens
来源:http://www.q.cc/2007/04/27/10980.html
本文介绍了在Linux下编写Daemon程序的步骤,并给出了例子程序。
二、Daemon程序简介 Daemon是长时间运行的进程,通常在系统启动后就运行,在系统关闭时才结束。一般说Daemon程序在后台运行,是因为它没有控制终端,无法和前台的用户交互。Daemon程序一般都作为服务程序使用,等待客户端程序与它通信。我们也把运行的Daemon程序称作守护进程。
三、Daemon程序编写规则
编写Daemon程序有一些基本的规则,以避免不必要的麻烦。
1、首先是程序运行后调用fork,并让父进程退出。子进程获得一个新的进程ID,但继承了父进程的进程组ID。
2、调用setsid创建一个新的session,使自己成为新session和新进程组的leader,并使进程没有控制终端(tty)。
3、改变当前工作目录至根目录,以免影响可加载文件系统。或者也可以改变到某些特定的目录。
4、设置文件创建mask为0,避免创建文件时权限的影响。
5、关闭不需要的打开文件描述符。因为Daemon程序在后台执行,不需要于终端交互,通常就关闭STDIN、STDOUT和STDERR。其它根据实际情况处理。
另一个问题是Daemon程序不能和终端交互,也就无法使用printf方法输出信息了。我们可以使用syslog机制来实现信息的输出,方便程序的调试。在使用syslog前需要首先启动syslogd程序,关于syslogd程序的使用请参考它的man page,或相关文档,我们就不在这里讨论了。
四、一个Daemon程序的例子 编译运行环境为Redhat Linux 8.0。
我们新建一个daemontest.c程序,文件内容如下:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <syslog.h>
#include <signal.h>
int daemon_init(void)
{
pid_t pid;
if((pid = fork()) < 0) return(-1);
else if(pid != 0) exit(0); /* parent exit */
/* child continues */
setsid(); /* become session leader */
chdir("/"); /* change working directory */
umask(0); /* clear file mode creation mask */
close(0); /* close stdin */
close(1); /* close stdout */
close(2); /* close stderr */
return(0);
}
void sig_term(int signo)
{
if(signo == SIGTERM)
/* catched signal sent by kill(1) command */
{
syslog(LOG_INFO, "program terminated.");
closelog(); exit(0);
}
}
int main(void)
{
if(daemon_init() == -1)
{
printf("can't fork self\n"); exit(0);
}
openlog("daemontest", LOG_PID, LOG_USER);
syslog(LOG_INFO, "program started.");
signal(SIGTERM, sig_term); /* arrange to catch the signal */
while(1) { sleep(1); /* put your main program here */ }
return(0);
}
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <syslog.h>
#include <signal.h>
int daemon_init(void)
{
pid_t pid;
if((pid = fork()) < 0) return(-1);
else if(pid != 0) exit(0); /* parent exit */
/* child continues */
setsid(); /* become session leader */
chdir("/"); /* change working directory */
umask(0); /* clear file mode creation mask */
close(0); /* close stdin */
close(1); /* close stdout */
close(2); /* close stderr */
return(0);
}
void sig_term(int signo)
{
if(signo == SIGTERM)
/* catched signal sent by kill(1) command */
{
syslog(LOG_INFO, "program terminated.");
closelog(); exit(0);
}
}
int main(void)
{
if(daemon_init() == -1)
{
printf("can't fork self\n"); exit(0);
}
openlog("daemontest", LOG_PID, LOG_USER);
syslog(LOG_INFO, "program started.");
signal(SIGTERM, sig_term); /* arrange to catch the signal */
while(1) { sleep(1); /* put your main program here */ }
return(0);
}
使用如下命令编译该程序: gcc -Wall -o daemontest daemontest.c编译完成后生成名为daemontest的程序,执行./daemontest来测试程序的运行。
使用ps axj命令可以显示系统中已运行的daemon程序的信息,包括进程ID、session ID、控制终端等内容。
部分显示内容:
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1098 1101 1101 1074 pts/1 1101 S 0 0:00 -bash 1 1581 777 777 ? -1 S 500 0:13 gedit 1 1650 1650 1650 ? -1 S 500 0:00 ./daemontest 794 1654 1654 794 pts/0 1654 R 500 0:00
ps axj 从中可以看到daemontest程序运行的进程号为1650。
我们再来看看/var/log/messages文件中的信息: Apr 7 22:00:32 localhost
daemontest[1650]: program started.
显示了我们在程序中希望输出的信息。
我们再使用kill 1650命令来杀死这个进程,/var/log/messages文件中就会有如下的信息:
Apr 7 22:11:10 localhost daemontest[1650]: program terminated.
使用ps axj命令检查,发现系统中daemontest进程已经没有了。
五、参考资料
Advanced Programming in the Unix Environment W.Richard Stevens
来源:http://www.q.cc/2007/04/27/10980.html
要成功,就马上准备有所付出吧!这就是每天你应该养成的习惯。
1、不说“不可能”; -----------------------------我相信我的想法是可能实现的而且一定能实现!
2、凡事第一反应: 找方法,不找借口;
3、遇到挫折对自己说声:太好了,机会来了!
4、不说消极的话,不落入消极的情绪,一旦发生立即正面处理;
5、凡事先订立目标; ---------------------------我的目标是什么。对未来的一个规划!
6、行动前,预先做计划; -------------------------时间计划是很重要的!
7、工作时间,每一分、每一秒做有利于生产的事情;
8、随时用零碎的时间做零碎的事情;
9、守时;
10、写点日记,不要太依靠记忆;
11、随时记录想到的灵感;
12、把重要的观念、方法写下来,随时提示自己;
13、走路比平时快30%,肢体语言健康有力,不懒散、萎靡;
14、每天出门照镜子,给自己一个自信的微笑;
15、每天自我反省一次;
16、每天坚持一次运动;
17、听心跳一分钟,在做重要的事情,疲劳时,紧张时,烦躁时。。。。
18、开会做前排;
19、微笑;
20、用心倾听,不打断对方的话; --------------------倾听比讲更重要!
21、说话有力,感觉自己的声音能产生感染力的磁场;
22、说话之前,先考虑一下对方的感觉;
23、每天有意识赞美别人三次以上;
24、即使表示感谢,如果别人帮助了你的话;
25、控制住不要让自己作出为自己辩护的第一反应;
26、不用训斥、指责的口吻与别人说话;
27、每天做一件”分外事“;
28、不关任何方面,每天必须至少做一次”进步一点点“,并且有意识的提高;
29、每天提前15分上班,推迟30分下班;
30、每天下班前5分钟做一下今天的整理工作;
31、定期存钱;
32、节俭;
33、时常运用”头脑风暴“,利用脑力激荡提升自己创新能力; ---- 创新能力!
34、恪守诚信;
35、学会原谅。
来源:http://blog.chinaunix.net/u2/84280/showart_2281392.html
1、不说“不可能”; -----------------------------我相信我的想法是可能实现的而且一定能实现!
2、凡事第一反应: 找方法,不找借口;
3、遇到挫折对自己说声:太好了,机会来了!
4、不说消极的话,不落入消极的情绪,一旦发生立即正面处理;
5、凡事先订立目标; ---------------------------我的目标是什么。对未来的一个规划!
6、行动前,预先做计划; -------------------------时间计划是很重要的!
7、工作时间,每一分、每一秒做有利于生产的事情;
8、随时用零碎的时间做零碎的事情;
9、守时;
10、写点日记,不要太依靠记忆;
11、随时记录想到的灵感;
12、把重要的观念、方法写下来,随时提示自己;
13、走路比平时快30%,肢体语言健康有力,不懒散、萎靡;
14、每天出门照镜子,给自己一个自信的微笑;
15、每天自我反省一次;
16、每天坚持一次运动;
17、听心跳一分钟,在做重要的事情,疲劳时,紧张时,烦躁时。。。。
18、开会做前排;
19、微笑;
20、用心倾听,不打断对方的话; --------------------倾听比讲更重要!
21、说话有力,感觉自己的声音能产生感染力的磁场;
22、说话之前,先考虑一下对方的感觉;
23、每天有意识赞美别人三次以上;
24、即使表示感谢,如果别人帮助了你的话;
25、控制住不要让自己作出为自己辩护的第一反应;
26、不用训斥、指责的口吻与别人说话;
27、每天做一件”分外事“;
28、不关任何方面,每天必须至少做一次”进步一点点“,并且有意识的提高;
29、每天提前15分上班,推迟30分下班;
30、每天下班前5分钟做一下今天的整理工作;
31、定期存钱;
32、节俭;
33、时常运用”头脑风暴“,利用脑力激荡提升自己创新能力; ---- 创新能力!
34、恪守诚信;
35、学会原谅。
来源:http://blog.chinaunix.net/u2/84280/showart_2281392.html
代码:
来源:http://blog.chinaunix.net/u2/84280/showart_2311724.html
#!/bin/bash
#author Sky
PATH="/var/PROGRAM/MANAGEMENT/modules/xbash:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:"
LANG=zh_CN
export PATH LANG
RESINHOME="/data/resin-pro-3.1.8"
PLUGIN_HOME=$RESINHOME/pconline_plugin
JAVAHOME="/usr/java/jdk1.6.0_06"
PLUGIN_MC="java_memcached-release_2.0.1.jar"
PLUGIN_LOG4J="log4j-1.2.15.jar"
PLUGIN_NAME="mcheathychk.jar"
#############enviroment initialize###################
[[ ! -e $JAVAHOME/jre/lib/ext/$PLUGIN_MC ]] && cp $RESINHOME/pconline_plugin/$PLUGIN_MC $JAVAHOME/jre/lib/ext/
[[ ! -e $JAVAHOME/jre/lib/ext/$PLUGIN_LOG4J ]] && cp $RESINHOME/pconline_plugin/$PLUGIN_LOG4J $JAVAHOME/jre/lib/ext/
####################################################
############
# 主机信息 #
############
INTF=$(netstat -rn | tail -1 | awk '{print $NF}')
IP=$(ifconfig $INTF | awk '/inet addr/{ split($2,tmp,":") ; print tmp[2] }')
HOST_NAME=$(hostname --short)
##########
#邮件环境#
##########
#CHARTSET="zh_CN."
MAIL_CLIENT=""
MAIL_SENDER=""
MAIL_SERVER=""
case $IP in
192.168.230.*|192.168.1[0-1].*|192.168.238.*|202.9.1.*)
MAIL_SERVER="202.2"
;;
*)
MAIL_SERVER="192.168.8."
;;
esac
##########
for resin in `cat /etc/mods.conf | grep resind | grep -v "#" | awk -F":" '{print $2}' | xargs`
do
######get relate configuration#####################
JAVAHOME=`cat $resin | grep "JAVA_HOME=" | awk -F"=" '{print $2}'`
RESINHOME=`cat $resin | grep "RESIN_HOME=" | awk -F"=" '{print $2}'`
CONF_NAME=`cat $resin | grep "SEARCH_STR=" | awk -F"=" '{print $2}' | sed 's/\"//g'`
APP_HOME=`cat $RESINHOME/conf/$CONF_NAME | grep "<web-app id=\"/\" root-directory=\"" | awk -F"=" '{print $3}' | sed "s#\"##g" | sed "s#/>##g"`
CONF_MC=$APP_HOME/WEB-INF/classes/memcached.properties
###################################################
if [[ -e $CONF_MC ]] ; then
servers=`cat $CONF_MC | grep "servers" | awk -F"=" '{print $2}'`
for server in `echo $servers | awk -F"," '{for( i=0;i<$NF;i++) {print $((i+1))}}' | xargs`
do
#echo $server
echo $server | awk -F":" '{print $1,$2}' | \
while read dip port
do
if /sbin/iptables -nL | grep -q "$dip"
then
######解封###############
/sbin/iptables -D OUTPUT -p tcp -s $IP -d $dip --dport $port -j REJECT --reject-with tcp-reset 2> /dev/null
fi
done
##############Test Memcache################
stats=`$JAVAHOME/bin/java -jar $RESINHOME/pconline_plugin/$PLUGIN_NAME $server 2> /dev/dull`
#echo "stats="$stats
if [[ $stats == "MCOK" ]] ; then
agentname=`echo $resin | awk -F"_" '{print $2}'`
echo "mcchk_$agentname=0"
else
agentname=`echo $resin | awk -F"_" '{print $2}'`
echo $server | awk -F":" '{print $1,$2}' | \
while read dip port
do
/sbin/iptables -A OUTPUT -p tcp -s $IP -d $dip --dport $port -j REJECT --reject-with tcp-reset
done
echo "mcchk_$agentname=1"
echo $agentname"_"$server" is bad" | env MAILRC=/dev/null charset="$CHARTSET" from="$MAIL_SENDER" smtp="$MAIL_SERVER" \
nail -n -s "$HOST_NAME($IP)MC had bad information" $MAIL_CLIENT
fi
done
else
agentname=`echo $resin | awk -F"_" '{print $2}'`
echo "mcchk_$agentname=0"
break
fi
done
#author Sky
PATH="/var/PROGRAM/MANAGEMENT/modules/xbash:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:"
LANG=zh_CN
export PATH LANG
RESINHOME="/data/resin-pro-3.1.8"
PLUGIN_HOME=$RESINHOME/pconline_plugin
JAVAHOME="/usr/java/jdk1.6.0_06"
PLUGIN_MC="java_memcached-release_2.0.1.jar"
PLUGIN_LOG4J="log4j-1.2.15.jar"
PLUGIN_NAME="mcheathychk.jar"
#############enviroment initialize###################
[[ ! -e $JAVAHOME/jre/lib/ext/$PLUGIN_MC ]] && cp $RESINHOME/pconline_plugin/$PLUGIN_MC $JAVAHOME/jre/lib/ext/
[[ ! -e $JAVAHOME/jre/lib/ext/$PLUGIN_LOG4J ]] && cp $RESINHOME/pconline_plugin/$PLUGIN_LOG4J $JAVAHOME/jre/lib/ext/
####################################################
############
# 主机信息 #
############
INTF=$(netstat -rn | tail -1 | awk '{print $NF}')
IP=$(ifconfig $INTF | awk '/inet addr/{ split($2,tmp,":") ; print tmp[2] }')
HOST_NAME=$(hostname --short)
##########
#邮件环境#
##########
#CHARTSET="zh_CN."
MAIL_CLIENT=""
MAIL_SENDER=""
MAIL_SERVER=""
case $IP in
192.168.230.*|192.168.1[0-1].*|192.168.238.*|202.9.1.*)
MAIL_SERVER="202.2"
;;
*)
MAIL_SERVER="192.168.8."
;;
esac
##########
for resin in `cat /etc/mods.conf | grep resind | grep -v "#" | awk -F":" '{print $2}' | xargs`
do
######get relate configuration#####################
JAVAHOME=`cat $resin | grep "JAVA_HOME=" | awk -F"=" '{print $2}'`
RESINHOME=`cat $resin | grep "RESIN_HOME=" | awk -F"=" '{print $2}'`
CONF_NAME=`cat $resin | grep "SEARCH_STR=" | awk -F"=" '{print $2}' | sed 's/\"//g'`
APP_HOME=`cat $RESINHOME/conf/$CONF_NAME | grep "<web-app id=\"/\" root-directory=\"" | awk -F"=" '{print $3}' | sed "s#\"##g" | sed "s#/>##g"`
CONF_MC=$APP_HOME/WEB-INF/classes/memcached.properties
###################################################
if [[ -e $CONF_MC ]] ; then
servers=`cat $CONF_MC | grep "servers" | awk -F"=" '{print $2}'`
for server in `echo $servers | awk -F"," '{for( i=0;i<$NF;i++) {print $((i+1))}}' | xargs`
do
#echo $server
echo $server | awk -F":" '{print $1,$2}' | \
while read dip port
do
if /sbin/iptables -nL | grep -q "$dip"
then
######解封###############
/sbin/iptables -D OUTPUT -p tcp -s $IP -d $dip --dport $port -j REJECT --reject-with tcp-reset 2> /dev/null
fi
done
##############Test Memcache################
stats=`$JAVAHOME/bin/java -jar $RESINHOME/pconline_plugin/$PLUGIN_NAME $server 2> /dev/dull`
#echo "stats="$stats
if [[ $stats == "MCOK" ]] ; then
agentname=`echo $resin | awk -F"_" '{print $2}'`
echo "mcchk_$agentname=0"
else
agentname=`echo $resin | awk -F"_" '{print $2}'`
echo $server | awk -F":" '{print $1,$2}' | \
while read dip port
do
/sbin/iptables -A OUTPUT -p tcp -s $IP -d $dip --dport $port -j REJECT --reject-with tcp-reset
done
echo "mcchk_$agentname=1"
echo $agentname"_"$server" is bad" | env MAILRC=/dev/null charset="$CHARTSET" from="$MAIL_SENDER" smtp="$MAIL_SERVER" \
nail -n -s "$HOST_NAME($IP)MC had bad information" $MAIL_CLIENT
fi
done
else
agentname=`echo $resin | awk -F"_" '{print $2}'`
echo "mcchk_$agentname=0"
break
fi
done
来源:http://blog.chinaunix.net/u2/84280/showart_2311724.html