------以下引用php手册内容--------------
要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。
下面的例子说明了如何删除刚才设置的 cookie: 例子 2. setcookie() 删除
例子
// 将过期时间设为一小时前
删除一个cookie的方法就是把这个cookie的有效期设置为当前时间以前,这
也是几乎所有php程序员都会这么做。
后来一个初接触php的朋友告诉我,他在程序中本想把一个cookie的值设置为
空,结果导致这个cookie直接被删除。我当时的第一反应是不相信,于是测试
了一下
setcookie("testcookie", '');
print_r($_COOKIE);
结果果然是整个$_COOKIE数组都是空的,而非仅仅$_COOKIE['testcookie']为
空.于是用winsock抓包,观察返回的http头,发现http头竟然是
Set-Cookie: testcookie=deleted; expires=Mon, 18-Jun-2007 02:42:33 GMT
这说明setcookie("testcookie", '');的的确确是将testcookie这个cookie直
接删除.而关于这种情况在php手册中完全没有说明.
最后阅读php源码,终于发现真相(这就是开源的好处了,有什么不清楚的内幕
直接查源码)
以下代码可以在php5.20的linux源码包中ext/standard/head.c第99行附近找到.
if (value && value_len == 0) {
/*
* MSIE doesn't delete a cookie when you set it to a null value
* so in order to force cookies to be deleted, even on MSIE, we
* pick an expiry date 1 year and 1 second in the past
*/
time_t t = time(NULL) - 31536001;
dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, t, 0 TSRMLS_CC);
sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);
efree(dt);
} else {
sprintf(cookie, "Set-Cookie: %s=%s", name, value ? encoded_value : "");
if (expires > 0) {
strcat(cookie, "; expires=");
dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, expires, 0 TSRMLS_CC);
strcat(cookie, dt);
efree(dt);
}
}
源码中清清楚楚的显示,if (value && value_len == 0) ,当value_len为0
时
最后我们可以得出结论,在php中使用
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。
下面的例子说明了如何删除刚才设置的 cookie: 例子 2. setcookie() 删除
例子
// 将过期时间设为一小时前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
----------------引用结束--------------------------setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
删除一个cookie的方法就是把这个cookie的有效期设置为当前时间以前,这
也是几乎所有php程序员都会这么做。
后来一个初接触php的朋友告诉我,他在程序中本想把一个cookie的值设置为
空,结果导致这个cookie直接被删除。我当时的第一反应是不相信,于是测试
了一下
setcookie("testcookie", '');
print_r($_COOKIE);
结果果然是整个$_COOKIE数组都是空的,而非仅仅$_COOKIE['testcookie']为
空.于是用winsock抓包,观察返回的http头,发现http头竟然是
Set-Cookie: testcookie=deleted; expires=Mon, 18-Jun-2007 02:42:33 GMT
这说明setcookie("testcookie", '');的的确确是将testcookie这个cookie直
接删除.而关于这种情况在php手册中完全没有说明.
最后阅读php源码,终于发现真相(这就是开源的好处了,有什么不清楚的内幕
直接查源码)
以下代码可以在php5.20的linux源码包中ext/standard/head.c第99行附近找到.
if (value && value_len == 0) {
/*
* MSIE doesn't delete a cookie when you set it to a null value
* so in order to force cookies to be deleted, even on MSIE, we
* pick an expiry date 1 year and 1 second in the past
*/
time_t t = time(NULL) - 31536001;
dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, t, 0 TSRMLS_CC);
sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);
efree(dt);
} else {
sprintf(cookie, "Set-Cookie: %s=%s", name, value ? encoded_value : "");
if (expires > 0) {
strcat(cookie, "; expires=");
dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, expires, 0 TSRMLS_CC);
strcat(cookie, dt);
efree(dt);
}
}
源码中清清楚楚的显示,if (value && value_len == 0) ,当value_len为0
时
sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);
会发送删除cookie的http头给浏览器.最后我们可以得出结论,在php中使用
setcookie($cookiename, '');或者 setcookie($cookiename, NULL);
都会删除cookie,当然这些手册中并没有。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>CSS + jQuery 个性化的下拉框效果 by www.865171.cn</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
<style type="text/css">
body { font-family:Arial, Helvetica, Sans-Serif; font-size:0.75em; color:#000;}
.desc { color:#6b6b6b;}
.desc a {color:#0092dd;}
.dropdown dd, .dropdown dt, .dropdown ul { margin:0px; padding:0px; }
.dropdown dd { position:relative; }
.dropdown a, .dropdown a:visited { color:#816c5b; text-decoration:none; outline:none;}
.dropdown a:hover { color:#5d4617;}
.dropdown dt a:hover { color:#5d4617; border: 1px solid #d0c9af;}
.dropdown dt a {background:#e4dfcb url(arrow.png) no-repeat scroll right center; display:block; padding-right:20px;
border:1px solid #d4ca9a; width:150px;}
.dropdown dt a span {cursor:pointer; display:block; padding:5px;}
.dropdown dd ul { background:#e4dfcb none repeat scroll 0 0; border:1px solid #d4ca9a; color:#C5C0B0; display:none;
left:0px; padding:5px 0px; position:absolute; top:2px; width:auto; min-width:170px; list-style:none;}
.dropdown span.value { display:none;}
.dropdown dd ul li a { padding:5px; display:block;}
.dropdown dd ul li a:hover { background-color:#d0c9af;}
.dropdown img.flag { border:none; vertical-align:middle; margin-left:10px; }
.flagvisibility { display:none;}
</style>
<script type="text/javascript">
$(document).ready(function() {
$(".dropdown img.flag").addClass("flagvisibility");
$(".dropdown dt a").click(function() {
$(".dropdown dd ul").toggle();
});
$(".dropdown dd ul li a").click(function() {
var text = $(this).html();
$(".dropdown dt a span").html(text);
$(".dropdown dd ul").hide();
$("#result").html("Selected value is: " + getSelectedValue("sample"));
});
function getSelectedValue(id) {
return $("#" + id).find("dt a span.value").html();
}
$(document).bind('click', function(e) {
var $clicked = $(e.target);
if (! $clicked.parents().hasClass("dropdown"))
$(".dropdown dd ul").hide();
});
$("#flagSwitcher").click(function() {
$(".dropdown img.flag").toggleClass("flagvisibility");
});
});
</script>
</head>
<body>
<h1>CSS + jQuery 个性化的下拉框效果</h1>
<h3><a href="http://www.865171.cn/css-code/">更多CSS代码实例</a></h3>
<dl id="sample" class="dropdown">
<dt><a href="#"><span>Please select the country</span></a></dt>
<dd>
<ul>
<li><a href="#">Brazil<img class="flag" src="br.png" /><span class="value">BR</span></a></li>
<li><a href="#">France<img class="flag" src="fr.png" /><span class="value">FR</span></a></li>
<li><a href="#">Germany<img class="flag" src="de.png" /><span class="value">DE</span></a></li>
<li><a href="#">India<img class="flag" src="in.png" /><span class="value">IN</span></a></li>
<li><a href="#">Japan<img class="flag" src="jp.png" /><span class="value">JP</span></a></li>
<li><a href="#">Serbia<img class="flag" src="cs.png" /><span class="value">CS</span></a></li>
<li><a href="#">United Kingdom<img class="flag" src="gb.png" /><span class="value">UK</span></a></li>
<li><a href="#">United States<img class="flag" src="us.png" /><span class="value">US</span></a></li>
</ul>
</dd>
</dl>
<span id="result"></span>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>CSS + jQuery 个性化的下拉框效果 by www.865171.cn</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript"></script>
<style type="text/css">
body { font-family:Arial, Helvetica, Sans-Serif; font-size:0.75em; color:#000;}
.desc { color:#6b6b6b;}
.desc a {color:#0092dd;}
.dropdown dd, .dropdown dt, .dropdown ul { margin:0px; padding:0px; }
.dropdown dd { position:relative; }
.dropdown a, .dropdown a:visited { color:#816c5b; text-decoration:none; outline:none;}
.dropdown a:hover { color:#5d4617;}
.dropdown dt a:hover { color:#5d4617; border: 1px solid #d0c9af;}
.dropdown dt a {background:#e4dfcb url(arrow.png) no-repeat scroll right center; display:block; padding-right:20px;
border:1px solid #d4ca9a; width:150px;}
.dropdown dt a span {cursor:pointer; display:block; padding:5px;}
.dropdown dd ul { background:#e4dfcb none repeat scroll 0 0; border:1px solid #d4ca9a; color:#C5C0B0; display:none;
left:0px; padding:5px 0px; position:absolute; top:2px; width:auto; min-width:170px; list-style:none;}
.dropdown span.value { display:none;}
.dropdown dd ul li a { padding:5px; display:block;}
.dropdown dd ul li a:hover { background-color:#d0c9af;}
.dropdown img.flag { border:none; vertical-align:middle; margin-left:10px; }
.flagvisibility { display:none;}
</style>
<script type="text/javascript">
$(document).ready(function() {
$(".dropdown img.flag").addClass("flagvisibility");
$(".dropdown dt a").click(function() {
$(".dropdown dd ul").toggle();
});
$(".dropdown dd ul li a").click(function() {
var text = $(this).html();
$(".dropdown dt a span").html(text);
$(".dropdown dd ul").hide();
$("#result").html("Selected value is: " + getSelectedValue("sample"));
});
function getSelectedValue(id) {
return $("#" + id).find("dt a span.value").html();
}
$(document).bind('click', function(e) {
var $clicked = $(e.target);
if (! $clicked.parents().hasClass("dropdown"))
$(".dropdown dd ul").hide();
});
$("#flagSwitcher").click(function() {
$(".dropdown img.flag").toggleClass("flagvisibility");
});
});
</script>
</head>
<body>
<h1>CSS + jQuery 个性化的下拉框效果</h1>
<h3><a href="http://www.865171.cn/css-code/">更多CSS代码实例</a></h3>
<dl id="sample" class="dropdown">
<dt><a href="#"><span>Please select the country</span></a></dt>
<dd>
<ul>
<li><a href="#">Brazil<img class="flag" src="br.png" /><span class="value">BR</span></a></li>
<li><a href="#">France<img class="flag" src="fr.png" /><span class="value">FR</span></a></li>
<li><a href="#">Germany<img class="flag" src="de.png" /><span class="value">DE</span></a></li>
<li><a href="#">India<img class="flag" src="in.png" /><span class="value">IN</span></a></li>
<li><a href="#">Japan<img class="flag" src="jp.png" /><span class="value">JP</span></a></li>
<li><a href="#">Serbia<img class="flag" src="cs.png" /><span class="value">CS</span></a></li>
<li><a href="#">United Kingdom<img class="flag" src="gb.png" /><span class="value">UK</span></a></li>
<li><a href="#">United States<img class="flag" src="us.png" /><span class="value">US</span></a></li>
</ul>
</dd>
</dl>
<span id="result"></span>
</body>
</html>
前面是原文件,第二参数是软链接的符号链接文件:
ln [OPTION]... [-T] TARGET LINK_NAME (1st form) #man ln
ln -s /etc/issue /tmp/issue.soft :创建/etc/issue文件的软链接/tmp/issue.soft
ln /etc/issue /tmp/issue.hard:创建/etc/issue文件的硬链接/tmp/issue.hard
ln -sf /home/xiangdong/spec/centos7 SPECS #不用建SPECS,是源链接、新的目录, SPECS -> /home/xiangdong/spec/centos7
备注:软链接是左边是存在待被指向的实体文件,右边是软链接的软链接文件(仅仅是一个链接文件)。
-f, --force remove existing destination files
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sf /usr/local/openssl/include/openssl/ /usr/include/openssl
对于一个文件来说,有唯一的索引接点与之对应,而对于一个索引接点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问该文件。
1.连接有软连接和硬连接(hard link)之分的,软连接(symbolic link)又叫符号连接。符号连接相当于Windows下的快捷方式。 软链接实际上只是一段文字,里面包含着它所指向的文件的名字,系统看到软链接后自动跳到对应的文件位置处进行处理。
Shell代码
1. ln -s source dist # 建立软连接
ln -s source dist # 建立软连接
2. 硬连接可以看作是同一个文件的不同命名。 硬联接为文件开设一个新的目录项,硬链接与文件原有的名字是平权的,在Linux看来它们是等价的。由于这个原因,硬链接不能连接两个不同文件系统上的文件。 不可以对文件夹建立硬连接的,通常用的还是软连接比较多。
Shell代码
1. ln source dist # 建立硬连接
ln [OPTION]... [-T] TARGET LINK_NAME (1st form) #man ln
ln -s /etc/issue /tmp/issue.soft :创建/etc/issue文件的软链接/tmp/issue.soft
ln /etc/issue /tmp/issue.hard:创建/etc/issue文件的硬链接/tmp/issue.hard
ln -sf /home/xiangdong/spec/centos7 SPECS #不用建SPECS,是源链接、新的目录, SPECS -> /home/xiangdong/spec/centos7
备注:软链接是左边是存在待被指向的实体文件,右边是软链接的软链接文件(仅仅是一个链接文件)。
-f, --force remove existing destination files
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sf /usr/local/openssl/include/openssl/ /usr/include/openssl
对于一个文件来说,有唯一的索引接点与之对应,而对于一个索引接点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问该文件。
1.连接有软连接和硬连接(hard link)之分的,软连接(symbolic link)又叫符号连接。符号连接相当于Windows下的快捷方式。 软链接实际上只是一段文字,里面包含着它所指向的文件的名字,系统看到软链接后自动跳到对应的文件位置处进行处理。
Shell代码
1. ln -s source dist # 建立软连接
ln -s /home/jackxiang/mhxy20*hn.act/htdocs mhxy20*hn.act //实际目录 ,软目录 的顺序
ln -s source dist # 建立软连接
2. 硬连接可以看作是同一个文件的不同命名。 硬联接为文件开设一个新的目录项,硬链接与文件原有的名字是平权的,在Linux看来它们是等价的。由于这个原因,硬链接不能连接两个不同文件系统上的文件。 不可以对文件夹建立硬连接的,通常用的还是软连接比较多。
Shell代码
1. ln source dist # 建立硬连接
------Finger
一般来说,tcp正常关闭需要四个包。比如a和b关闭连接,a先 给b发一个fin,b会进行确认ack,然后b也会发出fin,当a接受到这个fin,并发出最后一个ack后,就会处于time_wait状态。这个时 间长短跟操作系统有关,一般会在1-4分钟,也就是两倍的数据包(2msl)最大生存时间。TCP主动关闭方采用TIME_WAIT主要是为了实现终止 TCP全双工连接的可靠性及允许老的重复分节在网络中消逝,等过了2msl(大约1~4分钟)后TIME_WAIT就会消失。
TIME_WAIT状态的目的是为了防止最后a发出的ack丢失,让b处于LAST_ACK超时重发FIN

所以说,主动发起关闭连接的一方会进入time_wait状态,这个时候,进程所占用的端口号不能被释放。除非在你的程序中用setsockopt设置端口可重用(SOCK_REUSE)的选项,但这不是所有操作系统都支持的
解决TIME_WAIT的办法主要有以下几种:
1、修改LINGER值,缩短关闭时间
LINGER lingerStruct;
lingerStruct.l_onoff = 1;
lingerStruct.l_linger = 0;
setsockopt(m_socket,SOL_SOCKET,SO_LINGER,(char *)&lingerStruct,sizeof(lingerStruct));
不过这种办法不是很安全的,不过现在网络都很好啦,不会有问题的。
2、修改注册表
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:00000005
这个值好像是300秒到30秒之间,改成30秒后你会发现TIME_WAIT很快就会消失了。
3、禁用LINGER
//如果你使用的是Socket API,可以这样
BOOL bDontLinger=FALSE;
setsockopt(m_socket,SOL_SOCKET,SO_DONTLINGER,(LPCTSTR)&bDontLinger,sizeof(BOOL));
closesocket(s);
//如果你使用的是CAsyncSocket,需要响应的修改,例如禁用LINGER可以这样
BOOL bDontLinger=FALSE;
m_socket->SetSockOpt(SO_DONTLINGER,(const char *)&bDontLinger,sizeof(bDontLinger),SOL_SOCKET);
m_socket->Close();
4、客户端可以不BIND(),这样,即使断开连接后再次连接,SOCKET将使用不同的端口(1025-5000),
等几分钟后,原有的端口就会自动关闭。
关闭BITCOMET后系统出现的几个TCP状态

一般来说,tcp正常关闭需要四个包。比如a和b关闭连接,a先 给b发一个fin,b会进行确认ack,然后b也会发出fin,当a接受到这个fin,并发出最后一个ack后,就会处于time_wait状态。这个时 间长短跟操作系统有关,一般会在1-4分钟,也就是两倍的数据包(2msl)最大生存时间。TCP主动关闭方采用TIME_WAIT主要是为了实现终止 TCP全双工连接的可靠性及允许老的重复分节在网络中消逝,等过了2msl(大约1~4分钟)后TIME_WAIT就会消失。
TIME_WAIT状态的目的是为了防止最后a发出的ack丢失,让b处于LAST_ACK超时重发FIN
所以说,主动发起关闭连接的一方会进入time_wait状态,这个时候,进程所占用的端口号不能被释放。除非在你的程序中用setsockopt设置端口可重用(SOCK_REUSE)的选项,但这不是所有操作系统都支持的
解决TIME_WAIT的办法主要有以下几种:
1、修改LINGER值,缩短关闭时间
LINGER lingerStruct;
lingerStruct.l_onoff = 1;
lingerStruct.l_linger = 0;
setsockopt(m_socket,SOL_SOCKET,SO_LINGER,(char *)&lingerStruct,sizeof(lingerStruct));
不过这种办法不是很安全的,不过现在网络都很好啦,不会有问题的。
2、修改注册表
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:00000005
这个值好像是300秒到30秒之间,改成30秒后你会发现TIME_WAIT很快就会消失了。
3、禁用LINGER
//如果你使用的是Socket API,可以这样
BOOL bDontLinger=FALSE;
setsockopt(m_socket,SOL_SOCKET,SO_DONTLINGER,(LPCTSTR)&bDontLinger,sizeof(BOOL));
closesocket(s);
//如果你使用的是CAsyncSocket,需要响应的修改,例如禁用LINGER可以这样
BOOL bDontLinger=FALSE;
m_socket->SetSockOpt(SO_DONTLINGER,(const char *)&bDontLinger,sizeof(bDontLinger),SOL_SOCKET);
m_socket->Close();
4、客户端可以不BIND(),这样,即使断开连接后再次连接,SOCKET将使用不同的端口(1025-5000),
等几分钟后,原有的端口就会自动关闭。
关闭BITCOMET后系统出现的几个TCP状态
在日常的软件开发当中,我们一般都是采用了分层的方式来架构系统,但是为什么我们需要分层进行架构呢?在此之前,我觉得需要搞明白两个概念,什么是软件的伸缩性,什么是性能。
首先,什么是软件的伸缩性(Scalability)?我们都知道设计良好的系统可以应对不断增加的系统访问量,但是我们如何能在系统用户增多的时候,来提高系统的吞吐量呢?这就是伸缩性之魅力所在。
伸缩性可以有两个方面,垂直伸缩性和水平伸缩性,垂直伸缩性是通过在同一个业务单元中增加资源来提高系统的吞吐量,比如增加服务器cpu的数量,增加服务器的内存等。水平伸缩性是通过增加多个业务单元资源,使得所有的业务单元逻辑上就像是一个单元一样。比如EJB分布式组件模型,集群配置等都属于此种方式。
下面我说一下,我对性能的理解,我们在日常的开发当中,当说到性能的时候,一般都会首先想到系统有多“快”,我想说的就是性能还涉及到另一个方面,那就是系统有“多少”,也就是说系统的吞吐量。我们在考虑性能的时候,一般都会考虑到这两方面。
理解了伸缩性和性能这两个概念以后,我们来看看系统为什么需要分层架构。
首先采用分层架构的好处,我想大家肯定都会普遍接受的是,系统分层有利于系统的维护,系统的扩展。这其实就是系统的可维护性和可扩展性。
其次,我围绕伸缩性以及性能来说一下,为什么需要分层架构。比如在目前的J2EE系统开发当中,我们普遍采用了分层构架的方式,一般分为表现层,业务层和持久层,当然了我们还可以对各层进行进一步的划分,但是层次划分也不能太细,具体项目要具体对待,原因下面讨论。我们想想,采用分层以后会带来什么不好的地方?想这个问题,我们可以先反过来想一下,不采用分层有什么好处,这当然是每个业务处理速度会更快,因为层与层之间通信会引来额外的开销,所以采用分层后,给我们软件系统带来的就是每个业务处理开销会变大。
好了,既然采用分层会带来额外的开销,那么我们为什么还要进行分层呢?这就涉及到了伸缩性和性能的问题。
如果不采用分层的话,系统的扩展和伸缩也主要靠垂直伸缩,但是垂直伸缩是有限度的,随着系统规模的扩大,垂直伸缩带来的代价也将变得非常昂贵。当采用了分层以后,虽然带来了层与层之间的通信开销(这得益于计算机硬件的飞快发展,如果计算机硬件的发展水平不足以抵消分层以后带来的额外的开销,那么分层架构也会有一个巨大的问号,所以从某种程度上来说,分层架构也利用了一点垂直伸缩性),但是它有利于层的水平伸缩性,并且各个层都可以进行独立的伸缩而不会影响到其它的层,比如EJB分布式组件模型以及目前采用的分成架构的方式就有利于水平伸缩性,
对于性能方面,我上面也说了,性能存在两个方面,一是“快”,二是“多少”,采用分层架构,当然会影响到性能快的方面,因为层次之间通信会带来额外的开销,但是采用了分层架构后,我们的软件系统可以更容易变大(“多少”的问题),也就是说当系统要应对更大的访问量的时候,我们可以通过增加多个业务单元资源(此时的多个业务单元逻辑上看起来就像一个逻辑单元,这对外界是透明的)来增加系统吞吐量。所以对于那些实时性比较高的系统,层的划分不应该太细,太细必然带来实时性的减低,而对于实时性不高,而需要高度的伸缩性的系统,我们可以通过引入不同的层来达到系统水平伸缩的目的。
以上是有关伸缩性和性能,以及它们与分层架构之间的联系,下面我再说一下另外一个问题,这就是Amdahl law(阿姆达尔定律),这个定理主要说明了系统中串行部分对系统速度提升的影响,假设程序中串行部分占a%的比例,那么程序最多提升1/a%的速度。我从这个定律也看出了,软件垂直伸缩的局限性,因为无论增加多少个cpu,如果程序中有串行化的部分,那么程序的速度的提升是有一个极限的,是不能靠增加硬件来无限度的增强系统性能的。所以对于我们软件工程师来说,我们更加需要关注系统的水平伸缩性。
首先,什么是软件的伸缩性(Scalability)?我们都知道设计良好的系统可以应对不断增加的系统访问量,但是我们如何能在系统用户增多的时候,来提高系统的吞吐量呢?这就是伸缩性之魅力所在。
伸缩性可以有两个方面,垂直伸缩性和水平伸缩性,垂直伸缩性是通过在同一个业务单元中增加资源来提高系统的吞吐量,比如增加服务器cpu的数量,增加服务器的内存等。水平伸缩性是通过增加多个业务单元资源,使得所有的业务单元逻辑上就像是一个单元一样。比如EJB分布式组件模型,集群配置等都属于此种方式。
下面我说一下,我对性能的理解,我们在日常的开发当中,当说到性能的时候,一般都会首先想到系统有多“快”,我想说的就是性能还涉及到另一个方面,那就是系统有“多少”,也就是说系统的吞吐量。我们在考虑性能的时候,一般都会考虑到这两方面。
理解了伸缩性和性能这两个概念以后,我们来看看系统为什么需要分层架构。
首先采用分层架构的好处,我想大家肯定都会普遍接受的是,系统分层有利于系统的维护,系统的扩展。这其实就是系统的可维护性和可扩展性。
其次,我围绕伸缩性以及性能来说一下,为什么需要分层架构。比如在目前的J2EE系统开发当中,我们普遍采用了分层构架的方式,一般分为表现层,业务层和持久层,当然了我们还可以对各层进行进一步的划分,但是层次划分也不能太细,具体项目要具体对待,原因下面讨论。我们想想,采用分层以后会带来什么不好的地方?想这个问题,我们可以先反过来想一下,不采用分层有什么好处,这当然是每个业务处理速度会更快,因为层与层之间通信会引来额外的开销,所以采用分层后,给我们软件系统带来的就是每个业务处理开销会变大。
好了,既然采用分层会带来额外的开销,那么我们为什么还要进行分层呢?这就涉及到了伸缩性和性能的问题。
如果不采用分层的话,系统的扩展和伸缩也主要靠垂直伸缩,但是垂直伸缩是有限度的,随着系统规模的扩大,垂直伸缩带来的代价也将变得非常昂贵。当采用了分层以后,虽然带来了层与层之间的通信开销(这得益于计算机硬件的飞快发展,如果计算机硬件的发展水平不足以抵消分层以后带来的额外的开销,那么分层架构也会有一个巨大的问号,所以从某种程度上来说,分层架构也利用了一点垂直伸缩性),但是它有利于层的水平伸缩性,并且各个层都可以进行独立的伸缩而不会影响到其它的层,比如EJB分布式组件模型以及目前采用的分成架构的方式就有利于水平伸缩性,
对于性能方面,我上面也说了,性能存在两个方面,一是“快”,二是“多少”,采用分层架构,当然会影响到性能快的方面,因为层次之间通信会带来额外的开销,但是采用了分层架构后,我们的软件系统可以更容易变大(“多少”的问题),也就是说当系统要应对更大的访问量的时候,我们可以通过增加多个业务单元资源(此时的多个业务单元逻辑上看起来就像一个逻辑单元,这对外界是透明的)来增加系统吞吐量。所以对于那些实时性比较高的系统,层的划分不应该太细,太细必然带来实时性的减低,而对于实时性不高,而需要高度的伸缩性的系统,我们可以通过引入不同的层来达到系统水平伸缩的目的。
以上是有关伸缩性和性能,以及它们与分层架构之间的联系,下面我再说一下另外一个问题,这就是Amdahl law(阿姆达尔定律),这个定理主要说明了系统中串行部分对系统速度提升的影响,假设程序中串行部分占a%的比例,那么程序最多提升1/a%的速度。我从这个定律也看出了,软件垂直伸缩的局限性,因为无论增加多少个cpu,如果程序中有串行化的部分,那么程序的速度的提升是有一个极限的,是不能靠增加硬件来无限度的增强系统性能的。所以对于我们软件工程师来说,我们更加需要关注系统的水平伸缩性。
C51RF-WSN-CC2430教学系统:
http://www.rfidworld.com.cn/blog/u/83192/archives/2009/4390.html
做好的半成品ds18B20:
http://www.dongfangic.com/product/8000%5Cfae60cd3bcceaa76.html
http://hi.baidu.com/liweidiy/blog/item/0760e901348fdf071c9583e7.html
http://www.rfidworld.com.cn/blog/u/83192/archives/2009/4390.html
做好的半成品ds18B20:
http://www.dongfangic.com/product/8000%5Cfae60cd3bcceaa76.html
http://hi.baidu.com/liweidiy/blog/item/0760e901348fdf071c9583e7.html
有贴子说httpd和mysql在FREEBSD下的性能远不如在LINUX下?
但是很多论坛都有前辈说啊…… 说什么线程啊,什么 的…… MYSQL什么的………
--------------------------------------------------------------------------------
好象没有听说啊,只知道FreeBSD的文件系统性能要差一点
为什么要用它,这怎么说,它存在就有它存在的理由,一般它较为保守,不具有象LINUX那么多的新特性
--------------------------------------------------------------------------------
完全不懂…… 这个MySQL with LinuxThreads 在FREEBSD下性能好的和在LINUX下一样的说??
关键是稳定性!我还是这个观点,再不同的帖子里给你说同样的话,BSD的性能也许不是最好的,但是他的稳定性绝对是最好的!!!
而且BSD的性能到底如何也不是一个人说了算,不同的系统可以根据不同的需要来进行不同的优化.
This is an issue that comes up all the time at work. It is an issue for roughly four reasons:
Yahoo is a FreeBSD shop
Someone has heard that MySQL runs better on Linux
Someone knows that we run some of our servers on Linux rather than FreeBSD, and Yahoo is a FreeBSD shop (see #1), so they start to infer #2.
Most of the MySQL development is done on Linux and Windows. The only "FreeBSD guy" at MySQL AB seems to have left sometime in the last year or so.
This is an attempt to answer that question for folks at work and elsewhere.
The Short Version
阅读全文
但是很多论坛都有前辈说啊…… 说什么线程啊,什么 的…… MYSQL什么的………
--------------------------------------------------------------------------------
好象没有听说啊,只知道FreeBSD的文件系统性能要差一点
为什么要用它,这怎么说,它存在就有它存在的理由,一般它较为保守,不具有象LINUX那么多的新特性
--------------------------------------------------------------------------------
完全不懂…… 这个MySQL with LinuxThreads 在FREEBSD下性能好的和在LINUX下一样的说??
关键是稳定性!我还是这个观点,再不同的帖子里给你说同样的话,BSD的性能也许不是最好的,但是他的稳定性绝对是最好的!!!
而且BSD的性能到底如何也不是一个人说了算,不同的系统可以根据不同的需要来进行不同的优化.
This is an issue that comes up all the time at work. It is an issue for roughly four reasons:
Yahoo is a FreeBSD shop
Someone has heard that MySQL runs better on Linux
Someone knows that we run some of our servers on Linux rather than FreeBSD, and Yahoo is a FreeBSD shop (see #1), so they start to infer #2.
Most of the MySQL development is done on Linux and Windows. The only "FreeBSD guy" at MySQL AB seems to have left sometime in the last year or so.
This is an attempt to answer that question for folks at work and elsewhere.
The Short Version

http://www.cnblogs.com/meil/archive/2007/09/14/875874.html
正则表达式再次让我震撼,寥寥数行代码就可以完成普通代码不易实现的功能,至少是实现起来比较复杂的功能。
一、清楚内容中的Javsscript 代码
1 Function ClearJSCode(originCode)
2
3 Dim reg
4
5 set reg = New RegExp
6
7 reg.Pattern = "<SCRIPT[^<]*</SCRIPT>"
8 reg.IgnoreCase = True
9 reg.Global = True
10
11 clearJSCode = reg.Replace(originCode, "")
12
13 End Function
14
二、清除内容中的HTML代码
1 Function ClearHTMLCode(originCode)
2
3 Dim reg
4 set reg = new RegExp
5
6 reg.Pattern = "<[^>]*>"
7 reg.IgnoreCase = True
8 reg.Global = True
9
10 ClearHTMLCode = reg.Replace(originCode, "")
11
12 End Function
13
现在好多网站的内容都是使用采集程序生成的,使用上边的代码就可以轻松的将内容中的HTML和JS代码清除掉。
正则表达式再次让我震撼,寥寥数行代码就可以完成普通代码不易实现的功能,至少是实现起来比较复杂的功能。
一、清楚内容中的Javsscript 代码
1 Function ClearJSCode(originCode)
2
3 Dim reg
4
5 set reg = New RegExp
6
7 reg.Pattern = "<SCRIPT[^<]*</SCRIPT>"
8 reg.IgnoreCase = True
9 reg.Global = True
10
11 clearJSCode = reg.Replace(originCode, "")
12
13 End Function
14
二、清除内容中的HTML代码
1 Function ClearHTMLCode(originCode)
2
3 Dim reg
4 set reg = new RegExp
5
6 reg.Pattern = "<[^>]*>"
7 reg.IgnoreCase = True
8 reg.Global = True
9
10 ClearHTMLCode = reg.Replace(originCode, "")
11
12 End Function
13
现在好多网站的内容都是使用采集程序生成的,使用上边的代码就可以轻松的将内容中的HTML和JS代码清除掉。
html为checkBox和radio添加label
为checkbox或者radio加上label,让对label中文字的点击也同时对checkbox/radio生效:
<input type="checkbox" name="tstCheckBox" id="cbox"><label for="cbox">for checkbox</lable>
<br />
<input type="radio" name="tstradio" id="radio"><label for="radio">for radio</label>
参考:http://blog.longwin.com.tw/2005/04/html_label_radio_bottom/
真正的用PHP的smarty来做是这样的:
---------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------
Label标识有两个属性,一个是FOR,一个是ACCESSKEY。
FOR的意思是,这个Lable是为哪个控件服务的;
ACCESSKEY则定义了访问这个控件的热键。
比如,有一个名字叫Name的文本框,<INPUT TYPE="TEXT" ID="Name" SIZE=30>,
那么,<label>就可以定义成:<LABEL FOR="Name" ACCESSKEY="N">姓 名(<U>N</U>):</LABEL>。
可以看见,这个<Label>是为那个ID为“Name”控件服务的,而ACESSKEY则定义了,这访问这个控件的热键为“Alt+N”。
1<LABEL FOR="txtName" ACCESSKEY="N">姓 名(<U>N</U>):</LABEL>
2<INPUT TYPE="TEXT" ID="txtName" SIZE=30>Meil<br>
3
4<LABEL FOR="txtUrl" ACCESSKEY="U">个人主页(<U>U</U>):</LABEL>
5<INPUT TYPE="TEXT" ID="txtUrl" SIZE=30>http://www.livebaby.cn<br>
6
7<LABEL FOR="txtPhonebox" ACCESSKEY="P">联系电话(<U>P</U>):</LABEL>
8<INPUT TYPE="TEXT" ID="txtPhonebox" SIZE=30> <br>
9
10<LABEL FOR="areabox" ACCESSKEY="S" >留 言(<U>S</U>):</LABEL>
11<TEXTAREA ID="areabox" COLS="30" ROWS="3"></TEXTAREA>
单选钮、复选框都要点击控件才能选中控件,而如果使用<label>标识就可以实现点击文字选取。
点击文字可以选取的多项选择框:
1<input type="CHECKBOX" id="chk1" value="often" name="chkoften">
2<label for="chk1" >经常来这里</label>
3<input type="CHECKBOX" id="chk2" value="seldom" name="chkseldom">
4<label for="chk2" >偶尔来看看</label>
带热键的多项选择框:
1<input type="CHECKBOX" id="chk3" value="often" name="chkoften">
2<label for="chk3" ACCESSKEY="H">经常来这里(<U>H</U>)</label>
3<input type="CHECKBOX" id="chk4" value="seldom" name="chkseldom">
4<label for="chk4" ACCESSKEY="L">偶尔来看看(<U>L</U>)</label>
===========================
例如,在 XHTML 中:
显式的联系:
<label for="SSN">Social Security Number:</label>
<input type="text" name="SocSecNum" id="SSn" />
隐式的联系:
<label>Date of Birth: <input type="text" name="DofB" /></label>
为checkbox或者radio加上label,让对label中文字的点击也同时对checkbox/radio生效:
<input type="checkbox" name="tstCheckBox" id="cbox"><label for="cbox">for checkbox</lable>
<br />
<input type="radio" name="tstradio" id="radio"><label for="radio">for radio</label>
参考:http://blog.longwin.com.tw/2005/04/html_label_radio_bottom/
真正的用PHP的smarty来做是这样的:
---------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------
Label标识有两个属性,一个是FOR,一个是ACCESSKEY。
FOR的意思是,这个Lable是为哪个控件服务的;
ACCESSKEY则定义了访问这个控件的热键。
比如,有一个名字叫Name的文本框,<INPUT TYPE="TEXT" ID="Name" SIZE=30>,
那么,<label>就可以定义成:<LABEL FOR="Name" ACCESSKEY="N">姓 名(<U>N</U>):</LABEL>。
可以看见,这个<Label>是为那个ID为“Name”控件服务的,而ACESSKEY则定义了,这访问这个控件的热键为“Alt+N”。
1<LABEL FOR="txtName" ACCESSKEY="N">姓 名(<U>N</U>):</LABEL>
2<INPUT TYPE="TEXT" ID="txtName" SIZE=30>Meil<br>
3
4<LABEL FOR="txtUrl" ACCESSKEY="U">个人主页(<U>U</U>):</LABEL>
5<INPUT TYPE="TEXT" ID="txtUrl" SIZE=30>http://www.livebaby.cn<br>
6
7<LABEL FOR="txtPhonebox" ACCESSKEY="P">联系电话(<U>P</U>):</LABEL>
8<INPUT TYPE="TEXT" ID="txtPhonebox" SIZE=30> <br>
9
10<LABEL FOR="areabox" ACCESSKEY="S" >留 言(<U>S</U>):</LABEL>
11<TEXTAREA ID="areabox" COLS="30" ROWS="3"></TEXTAREA>
单选钮、复选框都要点击控件才能选中控件,而如果使用<label>标识就可以实现点击文字选取。
点击文字可以选取的多项选择框:
1<input type="CHECKBOX" id="chk1" value="often" name="chkoften">
2<label for="chk1" >经常来这里</label>
3<input type="CHECKBOX" id="chk2" value="seldom" name="chkseldom">
4<label for="chk2" >偶尔来看看</label>
带热键的多项选择框:
1<input type="CHECKBOX" id="chk3" value="often" name="chkoften">
2<label for="chk3" ACCESSKEY="H">经常来这里(<U>H</U>)</label>
3<input type="CHECKBOX" id="chk4" value="seldom" name="chkseldom">
4<label for="chk4" ACCESSKEY="L">偶尔来看看(<U>L</U>)</label>
===========================
例如,在 XHTML 中:
显式的联系:
<label for="SSN">Social Security Number:</label>
<input type="text" name="SocSecNum" id="SSn" />
隐式的联系:
<label>Date of Birth: <input type="text" name="DofB" /></label>
FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操作系统下使用FTP,都会遇到大量的FTP内部命令。熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。
FTP的命令行格式为:ftp -v -d -i -n -g [主机名],其中
-v:显示远程服务器的所有响应信息;
-n:限制ftp的自动登录,即不使用;
.n: etrc文件;
-d:使用调试方式;
-g:取消全局文件名。
FTP内部命令格式(中括号表示可选项):
1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip.
2.$ macro-ame[args]:执行宏定义macro-name.
3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。
4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。
5.ascii:使用ascii类型传输方式。
6.bell:每个命令执行完毕后计算机响铃一次。
7.bin:使用二进制文件传输方式。
8.bye:退出ftp会话过程。
9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。
10.cd remote-dir:进入远程主机目录。
11.cdup:进入远程主机目录的父目录。
12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。
13.close:中断与远程服务器的ftp会话(与open对应)。
14.cr:使用asscii方式传输文件时,将回车换行转换为回行。
15.delete remote-file:删除远程主机文件。
16.debug[debug-value]:设置调试方式,显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。
17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件local-file。
18.disconnection:同close。
19.form format:将文件传输方式设置为format,缺省为file方式。
20.get remote-file[local-file]:将远程主机的文件remote-file传至本地硬盘的local-file。
21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。
22.hash:每传输1024字节,显示一个hash符号(#)。
23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。
24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。
25.image:设置二进制传输方式(同binary)。
26.lcd[dir]:将本地工作目录切换至dir。
27.ls[remote-dir][local-file]:显示远程目录remote-dir,并存入本地文件local-file。
28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。
29.mdelete[remote-file]:删除远程主机文件。
30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如:mdir *.o.*.zipoutfile
31.mget remote-files:传输多个远程文件。
32.mkdir dir-name:在远程主机中建一目录。
33.mls remote-file local-file:同nlist,但可指定多个文件名。
34.mode[modename]:将文件传输方式设置为modename,缺省为stream方式。
35.modtime file-name:显示远程主机文件的最后修改时间。
36.mput local-file:将多个文件传输至远程主机。
37.newer file-name:如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。
38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。
39.nmap[inpattern outpattern]:设置文件名映射机制,使得文件传输时,文件中的某些字符相互转换,
如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况。
40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans 1R,则文件名LLL将变为RRR。
41.open host[port]:建立指定ftp服务器连接,可指定连接端口。
42.passive:进入被动传输方式。
43.prompt:设置多个文件传输时的交互提示。
44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令,该命令允许连接两个ftp服务器,以在两个服务器间传输文件。
第一条ftp命令必须为open,以首先建立两个服务器间的连接。
45.put local-file[remote-file]:将本地文件local-file传送至远程主机。
46.pwd:显示远程主机的当前工作目录。
47.quit:同bye,退出ftp会话。
48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.
49.recv remote-file[local-file]:同get。
50.reget remote-file[local-file]:类似于get,但若local-file存在,则从上次传输中断处续传。
51.rhelp[cmd-name]:请求获得远程主机的帮助。
52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态,否则显示文件状态。
53.rename[from][to]:更改远程主机文件名。
54.reset:清除回答队列。
55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。
56.rmdir dir-name:删除远程主机目录。
57.runique:设置文件名唯一性存储,若文件存在,则在原文件后加后缀..1,.2等。
58.send local-file[remote-file]:同put。
59.sendport:设置PORT命令的使用。
60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。
61.size file-name:显示远程主机文件大小,如:site idle 7200。
62.status:显示当前ftp状态。
63.struct[struct-name]:将文件传输结构设置为struct-name,缺省时使用stream结构。
64.sunique:将远程主机文件名存储设置为唯一(与runique对应)。
65.system:显示远程主机的操作系统类型。
66.tenex:将文件传输类型设置为TENEX机的所需的类型。
67.tick:设置传输时的字节计数器。
68.trace:设置包跟踪。
69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。
70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3。
71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。
72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp服务器的所有响应都将显示给用户,缺省为on.
73.?[cmd]:同help。
FTP的命令行格式为:ftp -v -d -i -n -g [主机名],其中
-v:显示远程服务器的所有响应信息;
-n:限制ftp的自动登录,即不使用;
.n: etrc文件;
-d:使用调试方式;
-g:取消全局文件名。
FTP内部命令格式(中括号表示可选项):
1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip.
2.$ macro-ame[args]:执行宏定义macro-name.
3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。
4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。
5.ascii:使用ascii类型传输方式。
6.bell:每个命令执行完毕后计算机响铃一次。
7.bin:使用二进制文件传输方式。
8.bye:退出ftp会话过程。
9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。
10.cd remote-dir:进入远程主机目录。
11.cdup:进入远程主机目录的父目录。
12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。
13.close:中断与远程服务器的ftp会话(与open对应)。
14.cr:使用asscii方式传输文件时,将回车换行转换为回行。
15.delete remote-file:删除远程主机文件。
16.debug[debug-value]:设置调试方式,显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。
17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件local-file。
18.disconnection:同close。
19.form format:将文件传输方式设置为format,缺省为file方式。
20.get remote-file[local-file]:将远程主机的文件remote-file传至本地硬盘的local-file。
21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。
22.hash:每传输1024字节,显示一个hash符号(#)。
23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。
24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。
25.image:设置二进制传输方式(同binary)。
26.lcd[dir]:将本地工作目录切换至dir。
27.ls[remote-dir][local-file]:显示远程目录remote-dir,并存入本地文件local-file。
28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。
29.mdelete[remote-file]:删除远程主机文件。
30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如:mdir *.o.*.zipoutfile
31.mget remote-files:传输多个远程文件。
32.mkdir dir-name:在远程主机中建一目录。
33.mls remote-file local-file:同nlist,但可指定多个文件名。
34.mode[modename]:将文件传输方式设置为modename,缺省为stream方式。
35.modtime file-name:显示远程主机文件的最后修改时间。
36.mput local-file:将多个文件传输至远程主机。
37.newer file-name:如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。
38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。
39.nmap[inpattern outpattern]:设置文件名映射机制,使得文件传输时,文件中的某些字符相互转换,
如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况。
40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans 1R,则文件名LLL将变为RRR。
41.open host[port]:建立指定ftp服务器连接,可指定连接端口。
42.passive:进入被动传输方式。
43.prompt:设置多个文件传输时的交互提示。
44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令,该命令允许连接两个ftp服务器,以在两个服务器间传输文件。
第一条ftp命令必须为open,以首先建立两个服务器间的连接。
45.put local-file[remote-file]:将本地文件local-file传送至远程主机。
46.pwd:显示远程主机的当前工作目录。
47.quit:同bye,退出ftp会话。
48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.
49.recv remote-file[local-file]:同get。
50.reget remote-file[local-file]:类似于get,但若local-file存在,则从上次传输中断处续传。
51.rhelp[cmd-name]:请求获得远程主机的帮助。
52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态,否则显示文件状态。
53.rename[from][to]:更改远程主机文件名。
54.reset:清除回答队列。
55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。
56.rmdir dir-name:删除远程主机目录。
57.runique:设置文件名唯一性存储,若文件存在,则在原文件后加后缀..1,.2等。
58.send local-file[remote-file]:同put。
59.sendport:设置PORT命令的使用。
60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。
61.size file-name:显示远程主机文件大小,如:site idle 7200。
62.status:显示当前ftp状态。
63.struct[struct-name]:将文件传输结构设置为struct-name,缺省时使用stream结构。
64.sunique:将远程主机文件名存储设置为唯一(与runique对应)。
65.system:显示远程主机的操作系统类型。
66.tenex:将文件传输类型设置为TENEX机的所需的类型。
67.tick:设置传输时的字节计数器。
68.trace:设置包跟踪。
69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。
70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3。
71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。
72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp服务器的所有响应都将显示给用户,缺省为on.
73.?[cmd]:同help。
他,怀揣着梦想只身一人闯荡北京;他,放弃了中国电力科学院的“金饭碗”;他,毅然从世界排名500强的某外资企业辞职。他就是吕晋宇,2001年毕业于太原理工大学,从最初刚出校门的两手空空,到如今成立并控股4家公司的年轻CEO。创业8个年头,个中曲折艰难惟有他自己感触最深:“大学生创业,资金、人脉都不重要,关键是你要有想法,要勤奋。”说起创业才能,吕晋宇早在上大学时就有体现。大二暑假,他在校内开设了电脑培训班,当起了老师。之后,又瞅准了电脑市场,帮学生组装电脑,做起了校园生意。大四时,吕晋宇开始在一家企业打工,打工的过程也是学习和实践的过程,他学会了单片机编程与应用,这些对于他的毕业论文 《单片机在电力系统中的应用》和今后的工作来说,都是一笔宝贵的财富。他建议:“大学生应摆正自己的位置,把自己当作一名普通人来看待,不要有优越感。选择和自己专业相关的、技术含量高的工作作为你的起点,把所学理论应用到实践中,积累经验。”
刘文浩今年7月刚刚从中北大学毕业,时隔4个月的他再次重返校园已经是山西启轩文化传媒有限公司的副总经理了,公司主要服务高校品牌推广、媒体覆盖、赛事策划等项目。刚毕业就创办公司,其实和他大学阶段所作的一系列“准备工作”是分不开的。高考时,刘文浩因几分之差与东北财经大学失之交臂,最终选择了中北大学的电气工程及自动化专业。虽然专业是工科,但他依然对市场营销有着浓厚的兴趣。大三时,刘文浩因3天净赚15万的事迹而成为学校的 “风云人物”,这次经历也让他积累了丰富的经验,赚到自己创业的第一桶金。之后,他利用这笔资金在上海注册成立了一家网络公司,制作网页。熟悉公司运作流程,拥有自己的营销团队,这些前期积累为他创办山西启轩文化传媒有限公司奠定了基础。
□“大学生想要创业,就应该抓住大四这段黄金时间,因为它是承上启下的重要时期,既是大学生活的终结,也是社会生活的开始。用这段时间,完成从一名学生到一个社会人的转变。”
奚小艳是中北大学环保技术领域一年级研究生,也是山西中北大学科技园有限公司康洁环保设备分公司的负责人。“以前我觉得成立一家公司不是什么难事,现在我才发现,想创办属于自己的公司,需要熟悉整个公司的运作流程,学会经营。”这段时间,奚小艳只要一有时间,就从网上搜集和她研发方向一致的公司,了解其他公司的产品设备情况,掌握行业动态,逐步完善自己的公司理念。
“想创业,就得做一名生意人,学会如何做生意。”吕晋宇在大学毕业后进入世界排名500强的施耐德中国有限公司太原分公司,从销售做起,不断更新自己的创业理念。“他们的整体运营系统非常科学,我学到了企业管理方面的经验。”两年后,他递交了辞职信,开始寻找适合自己的项目。他告诉记者:“大学生想要创业,就应该抓住大四这段黄金时间,因为它是承上启下的重要时期,既是大学生活的终结,也是社会生活的开始。用这段时间,完成从一个学生到一个社会人的转变。”
□“人的思想能想多远,人就能走多远。大学生创业,一定要务实,要勤奋,不能光停留在理论研究上。可以从小投资开始,积累经验,一口想吃个胖子,结果一定是失败。没有资金,没有人脉都不要紧,关键是你要有好的思路和想法,有勇气去迈出第一步,才会成功。”
和一些大学生因为找不到工作,被迫自主创业不同,2002年毕业于太原理工大学的孔鹏伟是主动扔掉 “铁饭碗”走上创业之路的。因不甘于一成不变的工作,孔鹏伟主动放弃了公务员的“铁饭碗”,决心要干自己的事业,踏上自主创业之路。他拿着借来的几万元钱三上北京寻找项目,经过多方考察,孔鹏伟决定加盟欧克壹佰西式快餐店。2005年8月,欧克壹佰侯马快餐店正式开业。孔鹏伟说:“当时,太原、临汾等地级以上城市都有了肯德基、麦当劳等大品牌,为了避开和大品牌竞争的风险,我把目标锁定了经济条件较好的县级市场。因为我不懂西餐行业的管理,最初我选择做加盟商,等积累了一定的管理经验后,再创立自己的品牌。”
2007年,孔鹏伟创立了自己的品牌“克罗克”,并开了多家连锁店。现在,孔鹏伟的伟涛餐饮服务有限公司拥有6个中式和西式快餐厅以及一个大型网吧,孔鹏伟的目标是在5年内让伟涛餐饮服务有限公司成为山西省知名企业,让“伟涛”这个品牌在全省所有的县市亮相。
同样缺少创业资金的吕晋宇在公司起步时,选择用自己的智慧作为投资成本。“只要你有想法,而且你的想法是对的,资金和人脉都不是问题。”2007年4月,吕晋宇找到了一个好的创业项目,苦于没有资金和人脉,他主动联系了两名同学。听完他的项目后,俩人当即决定和他一起干。于是三人一个出资金,一个有人脉,而吕晋宇则以自己聪明的头脑作为资本入股,共同创办了太原市博云建业电气科技有限公司,代理西门子输配电集团的配网设备,成为山西和内蒙古的总经销商,完成了自己第一桶金的积累。2008年年底,他将公司的股份全部收回来,成为公司的董事长。2009年10月,他在北京成立了北京元工电气有限公司,准备面向全国发展。“我还打算在太原开一家设计公司,在晋中做一些实体产业,目前已经在运作阶段了。我的梦想,就是将来能有一家上市公司,这才是我人生价值的体现。”
对于大学生关注的创业资金问题,吕晋宇说:“人的思想能想多远,人就能走多远。大学生创业,一定要务实,要勤奋,不能光停留在理论研究上。可以从小投资开始,积累经验,一口想吃个胖子,结果一定是失败。没有资金,没有人脉都不要紧,关键是你要有好的思路和想法,有勇气去迈出第一步,才会成功。”
刘文浩今年7月刚刚从中北大学毕业,时隔4个月的他再次重返校园已经是山西启轩文化传媒有限公司的副总经理了,公司主要服务高校品牌推广、媒体覆盖、赛事策划等项目。刚毕业就创办公司,其实和他大学阶段所作的一系列“准备工作”是分不开的。高考时,刘文浩因几分之差与东北财经大学失之交臂,最终选择了中北大学的电气工程及自动化专业。虽然专业是工科,但他依然对市场营销有着浓厚的兴趣。大三时,刘文浩因3天净赚15万的事迹而成为学校的 “风云人物”,这次经历也让他积累了丰富的经验,赚到自己创业的第一桶金。之后,他利用这笔资金在上海注册成立了一家网络公司,制作网页。熟悉公司运作流程,拥有自己的营销团队,这些前期积累为他创办山西启轩文化传媒有限公司奠定了基础。
□“大学生想要创业,就应该抓住大四这段黄金时间,因为它是承上启下的重要时期,既是大学生活的终结,也是社会生活的开始。用这段时间,完成从一名学生到一个社会人的转变。”
奚小艳是中北大学环保技术领域一年级研究生,也是山西中北大学科技园有限公司康洁环保设备分公司的负责人。“以前我觉得成立一家公司不是什么难事,现在我才发现,想创办属于自己的公司,需要熟悉整个公司的运作流程,学会经营。”这段时间,奚小艳只要一有时间,就从网上搜集和她研发方向一致的公司,了解其他公司的产品设备情况,掌握行业动态,逐步完善自己的公司理念。
“想创业,就得做一名生意人,学会如何做生意。”吕晋宇在大学毕业后进入世界排名500强的施耐德中国有限公司太原分公司,从销售做起,不断更新自己的创业理念。“他们的整体运营系统非常科学,我学到了企业管理方面的经验。”两年后,他递交了辞职信,开始寻找适合自己的项目。他告诉记者:“大学生想要创业,就应该抓住大四这段黄金时间,因为它是承上启下的重要时期,既是大学生活的终结,也是社会生活的开始。用这段时间,完成从一个学生到一个社会人的转变。”
□“人的思想能想多远,人就能走多远。大学生创业,一定要务实,要勤奋,不能光停留在理论研究上。可以从小投资开始,积累经验,一口想吃个胖子,结果一定是失败。没有资金,没有人脉都不要紧,关键是你要有好的思路和想法,有勇气去迈出第一步,才会成功。”
和一些大学生因为找不到工作,被迫自主创业不同,2002年毕业于太原理工大学的孔鹏伟是主动扔掉 “铁饭碗”走上创业之路的。因不甘于一成不变的工作,孔鹏伟主动放弃了公务员的“铁饭碗”,决心要干自己的事业,踏上自主创业之路。他拿着借来的几万元钱三上北京寻找项目,经过多方考察,孔鹏伟决定加盟欧克壹佰西式快餐店。2005年8月,欧克壹佰侯马快餐店正式开业。孔鹏伟说:“当时,太原、临汾等地级以上城市都有了肯德基、麦当劳等大品牌,为了避开和大品牌竞争的风险,我把目标锁定了经济条件较好的县级市场。因为我不懂西餐行业的管理,最初我选择做加盟商,等积累了一定的管理经验后,再创立自己的品牌。”
2007年,孔鹏伟创立了自己的品牌“克罗克”,并开了多家连锁店。现在,孔鹏伟的伟涛餐饮服务有限公司拥有6个中式和西式快餐厅以及一个大型网吧,孔鹏伟的目标是在5年内让伟涛餐饮服务有限公司成为山西省知名企业,让“伟涛”这个品牌在全省所有的县市亮相。
同样缺少创业资金的吕晋宇在公司起步时,选择用自己的智慧作为投资成本。“只要你有想法,而且你的想法是对的,资金和人脉都不是问题。”2007年4月,吕晋宇找到了一个好的创业项目,苦于没有资金和人脉,他主动联系了两名同学。听完他的项目后,俩人当即决定和他一起干。于是三人一个出资金,一个有人脉,而吕晋宇则以自己聪明的头脑作为资本入股,共同创办了太原市博云建业电气科技有限公司,代理西门子输配电集团的配网设备,成为山西和内蒙古的总经销商,完成了自己第一桶金的积累。2008年年底,他将公司的股份全部收回来,成为公司的董事长。2009年10月,他在北京成立了北京元工电气有限公司,准备面向全国发展。“我还打算在太原开一家设计公司,在晋中做一些实体产业,目前已经在运作阶段了。我的梦想,就是将来能有一家上市公司,这才是我人生价值的体现。”
对于大学生关注的创业资金问题,吕晋宇说:“人的思想能想多远,人就能走多远。大学生创业,一定要务实,要勤奋,不能光停留在理论研究上。可以从小投资开始,积累经验,一口想吃个胖子,结果一定是失败。没有资金,没有人脉都不要紧,关键是你要有好的思路和想法,有勇气去迈出第一步,才会成功。”
51NET以太网开发板
1.系统介绍
51NET是一个具有10Mbps以太网接口和RS232串行接口的51系列单片机的嵌入式开发学习板,它采用WINBOND公司生产的W78E58B微控制器为核心处理器,包括TCP/IP协议栈和相应的应用程序。实现了ARP、ICMP、TCP、UDP协议,可应用于HTTP Web服务器、Mail客户机、网络协议转换(如Ethernet-RS232接口转换、Ethernet-SPI接口转换等)、基于Internet的远程控制、基于Internet的远程数据采集等嵌入式网络应用
新款设计2008隆重上市,产品更新,价格不变(做了一些设计更新,修正了一些硬件上的BUG)
与市场同类产品相比,开发板上的资源极为丰富,板子本身可以完成以太网通讯的同时,还可以利用以太网板上的资源来实时监控通讯情况,也是我们设计该板时为广大工程师方便开发考虑到的问题,您可以通过数码管显示数字,蜂鸣器鸣音,继电器吸合来更直观地给开发者讯息。
板上带19PIN的外扩展端口,供用户进行扩展开发、试验。
接口齐全,从左至右为:电源口,RJ45 10M以太网接口,RS232串口。
网络通讯核心芯片选用RealTek的RTL8019AS芯片。
2.系统说明
● CPU采用W78E58BP-40,工作频率可达到40MHz,完全满足运行多种网络协议的要求;也可根据需要将CPU替换为其它8052兼容微控制器
● HM62256 32Kx8 CMOS静态RAM
● X5045 上电复位、可编程看门狗定时器、4Kb SPI EEPROM
● 多组LED用来指示系统运行情况
● 系统扩展标准RJ45以太网接口,3针串行RS232接口,1组可供用户自由扩展的系统资源接口
● 输入电压范围为7-30VDC
● 支持在系统编程,方便二次开发
● 支持各种通用的8052兼容编译器,如Keil C等
● TCP/IP协议栈、独立RTOS和应用软件支持
3.主要应用领域
● 智能仪器、仪表
● 远程控制
● 嵌入式以太网接入
● 嵌入式网络开发、实验
4.用户光盘上提供的源代码及资料
● ARP、ICMP、TCP、UDP协议,ARP中实现了缓存,发包电路实现了缓存,上位机可以ping这块板子,下位机也可以ping上位机(通过上位机小程序,连串口),可以用tcp进行数据传送
● 详细使用说明文档
● 电路PDF格式的原理图
● 所有芯片data sheet
5.套件组成
● 51NET开发板1块
● 稳压电源1只
● 串口电缆1根
● 资料光盘1份(内含系统详细说明文档、RTOS、TCP/IP协议软件、元器件手册、应用文档等)
这是51NET以太网开发板工作时的瞬间照片(上图是老款开发板的样子,现在出售的都为新款了),上面两个LCD为电源指示,网络连接指示,右下方的红色LED为程序运行指示,具体表现为不停地闪烁则程序正常运行。该图中,我们可以看到,我们通过RS232接口来对开发板进行网络参数的设置,如IP地址,子网掩码,服务器端口号等等。
这是三块51NET以太网开发板同时工作时的瞬间照片,三块开发板通过HUB集线器,连在一起,预先通过RS232串口设置好各板的网络参数,然后插上电源适配器,RJ45网线,打开电源开关即可。
1.系统介绍
51NET是一个具有10Mbps以太网接口和RS232串行接口的51系列单片机的嵌入式开发学习板,它采用WINBOND公司生产的W78E58B微控制器为核心处理器,包括TCP/IP协议栈和相应的应用程序。实现了ARP、ICMP、TCP、UDP协议,可应用于HTTP Web服务器、Mail客户机、网络协议转换(如Ethernet-RS232接口转换、Ethernet-SPI接口转换等)、基于Internet的远程控制、基于Internet的远程数据采集等嵌入式网络应用
新款设计2008隆重上市,产品更新,价格不变(做了一些设计更新,修正了一些硬件上的BUG)
与市场同类产品相比,开发板上的资源极为丰富,板子本身可以完成以太网通讯的同时,还可以利用以太网板上的资源来实时监控通讯情况,也是我们设计该板时为广大工程师方便开发考虑到的问题,您可以通过数码管显示数字,蜂鸣器鸣音,继电器吸合来更直观地给开发者讯息。
板上带19PIN的外扩展端口,供用户进行扩展开发、试验。
接口齐全,从左至右为:电源口,RJ45 10M以太网接口,RS232串口。
网络通讯核心芯片选用RealTek的RTL8019AS芯片。
2.系统说明
● CPU采用W78E58BP-40,工作频率可达到40MHz,完全满足运行多种网络协议的要求;也可根据需要将CPU替换为其它8052兼容微控制器
● HM62256 32Kx8 CMOS静态RAM
● X5045 上电复位、可编程看门狗定时器、4Kb SPI EEPROM
● 多组LED用来指示系统运行情况
● 系统扩展标准RJ45以太网接口,3针串行RS232接口,1组可供用户自由扩展的系统资源接口
● 输入电压范围为7-30VDC
● 支持在系统编程,方便二次开发
● 支持各种通用的8052兼容编译器,如Keil C等
● TCP/IP协议栈、独立RTOS和应用软件支持
3.主要应用领域
● 智能仪器、仪表
● 远程控制
● 嵌入式以太网接入
● 嵌入式网络开发、实验
4.用户光盘上提供的源代码及资料
● ARP、ICMP、TCP、UDP协议,ARP中实现了缓存,发包电路实现了缓存,上位机可以ping这块板子,下位机也可以ping上位机(通过上位机小程序,连串口),可以用tcp进行数据传送
● 详细使用说明文档
● 电路PDF格式的原理图
● 所有芯片data sheet
5.套件组成
● 51NET开发板1块
● 稳压电源1只
● 串口电缆1根
● 资料光盘1份(内含系统详细说明文档、RTOS、TCP/IP协议软件、元器件手册、应用文档等)
这是51NET以太网开发板工作时的瞬间照片(上图是老款开发板的样子,现在出售的都为新款了),上面两个LCD为电源指示,网络连接指示,右下方的红色LED为程序运行指示,具体表现为不停地闪烁则程序正常运行。该图中,我们可以看到,我们通过RS232接口来对开发板进行网络参数的设置,如IP地址,子网掩码,服务器端口号等等。
这是三块51NET以太网开发板同时工作时的瞬间照片,三块开发板通过HUB集线器,连在一起,预先通过RS232串口设置好各板的网络参数,然后插上电源适配器,RJ45网线,打开电源开关即可。
1.与其他人群相比,白领们患上急性咽喉炎的原因可能较为复杂,主要有哪些诱因?
病原微生物(包括细菌、病毒、螺旋体、立克次体等)是急性咽炎的主要致病因素,可直接来源于空气、饮食,也可间接来源于血液循环和淋巴循环。 而白领阶层由于长期处于工作竞争压力状态下,生活不规律,再加上心身长期疲劳、精神紧张,使得身体抵抗力下降;导致白领阶层人士极易遭受细菌和病毒的感染侵袭;另外,白领人群长期处于空调的环境下(夏天空调降温、冬天空调加温),而且工作环境闭塞、干燥,极易造成咽部粘膜血管收缩,吞噬细胞数目减少,局部抵抗力下降;干燥还可影响咽部粘液分泌和纤毛蠕动,降低对空气的清洁加湿作用,直接对咽部粘膜造成刺激和损害,室内空气流通差,也容易引起抵抗力下降和致病微生物入侵发病;再者,此环境下的白领人士还容易并发感冒、鼻炎,因工作紧张饮食不规律,喜食辛辣刺激之物,则易于发生牙龈炎、口腔炎,这些上呼吸道的炎性病症也可出现炎性分泌物倒流入咽喉部,咽喉部长期受刺激也会并发咽喉炎症,据不完全统计,白领人士(尤其是年轻教师、商场营业员、职场经理等)患咽喉炎高达30%左右,因此,本病是白领人士的高发疾病之一。
阅读全文
病原微生物(包括细菌、病毒、螺旋体、立克次体等)是急性咽炎的主要致病因素,可直接来源于空气、饮食,也可间接来源于血液循环和淋巴循环。 而白领阶层由于长期处于工作竞争压力状态下,生活不规律,再加上心身长期疲劳、精神紧张,使得身体抵抗力下降;导致白领阶层人士极易遭受细菌和病毒的感染侵袭;另外,白领人群长期处于空调的环境下(夏天空调降温、冬天空调加温),而且工作环境闭塞、干燥,极易造成咽部粘膜血管收缩,吞噬细胞数目减少,局部抵抗力下降;干燥还可影响咽部粘液分泌和纤毛蠕动,降低对空气的清洁加湿作用,直接对咽部粘膜造成刺激和损害,室内空气流通差,也容易引起抵抗力下降和致病微生物入侵发病;再者,此环境下的白领人士还容易并发感冒、鼻炎,因工作紧张饮食不规律,喜食辛辣刺激之物,则易于发生牙龈炎、口腔炎,这些上呼吸道的炎性病症也可出现炎性分泌物倒流入咽喉部,咽喉部长期受刺激也会并发咽喉炎症,据不完全统计,白领人士(尤其是年轻教师、商场营业员、职场经理等)患咽喉炎高达30%左右,因此,本病是白领人士的高发疾病之一。

http://sjolzy.cn/post-265.html
jQuery CS4 , CS3 Dreamweaver Extension
I've been getting more and more into jQuery. You can expect most of the effects on this website to be moved to jQuery soon. While learning and exploring this new Javascript Framework, I thought there must be a jQuery Dreamweaver Extension and it turns out there was. However, it took a long time to find, and many of mirrors were dead. So I figured it was my civic duty to provide a real dependable source for downloading this Dreamweaver jQuery Extension.
A note: there seems to have been some confusion, this does work on CS3 and CS4 of Adobe Dreamweaver.
Download jQuery Dreamweaver Extension Now!
Feeling generous? Give us a link somewhere on your site linking the words "Minneapolis Web Design".
DOwnLoad:
http://himmdesign.com/assets/files/jQuery_API.mxp.zip
官方:http://xtnd.us/dreamweaver/jquery
Dreamweaver CS3的Ext 2.0.2智能提示.它提供了非常准确的Ext API提示。
如图:

下载地址:
http://extjs.org.cn/files/spketdwcs-ext-2.0.2.zip
引用方法:
1、将下载回来的文件解压,并安裝.(双击.mpx文件,默认会以Adobe Extension Manager打开)。
如果还没有安装 Adobe Extension Manager 请到百度或者迅雷下载。
2、打开Dreamweaver CS3点击菜单 "Spket" -> "ExtJS Source...", 在打开的对话框中选择ExtJs源代码中的"ext.jsb".
3、新建一个html文件,打开菜单 "Spket" -> "Show Code Hints", 或者按下 Ctrl+Alt+Space 组合键.出来的效果如上图所示.
打算为dreamweaver装一个扩展,但用的是精简版,执行“命令”>“扩展管理”,弹出"扩展管理器不可用"信息,看来精简版的确够精简的!
前往ADOBE公司下载最新的扩展管理器,网址:http://www.adobe.com/cn/exchange/em_download/
注意:不同的dreamweaver版本应该下载不同的扩展,我用的是Dreamweaver CS4,于是我就选择下载Extension Manager CS4 2.0。
下载后,安装,一路回车到底。没有出现什么错误。直到安装完成。
运行dreamweaver cs4,再次执行“命令”>“扩展管理”,一切OK。
I've been getting more and more into jQuery. You can expect most of the effects on this website to be moved to jQuery soon. While learning and exploring this new Javascript Framework, I thought there must be a jQuery Dreamweaver Extension and it turns out there was. However, it took a long time to find, and many of mirrors were dead. So I figured it was my civic duty to provide a real dependable source for downloading this Dreamweaver jQuery Extension.
A note: there seems to have been some confusion, this does work on CS3 and CS4 of Adobe Dreamweaver.
Download jQuery Dreamweaver Extension Now!
Feeling generous? Give us a link somewhere on your site linking the words "Minneapolis Web Design".
DOwnLoad:
http://himmdesign.com/assets/files/jQuery_API.mxp.zip
官方:http://xtnd.us/dreamweaver/jquery
Dreamweaver CS3的Ext 2.0.2智能提示.它提供了非常准确的Ext API提示。
如图:
下载地址:
http://extjs.org.cn/files/spketdwcs-ext-2.0.2.zip
引用方法:
1、将下载回来的文件解压,并安裝.(双击.mpx文件,默认会以Adobe Extension Manager打开)。
如果还没有安装 Adobe Extension Manager 请到百度或者迅雷下载。
2、打开Dreamweaver CS3点击菜单 "Spket" -> "ExtJS Source...", 在打开的对话框中选择ExtJs源代码中的"ext.jsb".
3、新建一个html文件,打开菜单 "Spket" -> "Show Code Hints", 或者按下 Ctrl+Alt+Space 组合键.出来的效果如上图所示.
打算为dreamweaver装一个扩展,但用的是精简版,执行“命令”>“扩展管理”,弹出"扩展管理器不可用"信息,看来精简版的确够精简的!
前往ADOBE公司下载最新的扩展管理器,网址:http://www.adobe.com/cn/exchange/em_download/
注意:不同的dreamweaver版本应该下载不同的扩展,我用的是Dreamweaver CS4,于是我就选择下载Extension Manager CS4 2.0。
下载后,安装,一路回车到底。没有出现什么错误。直到安装完成。
运行dreamweaver cs4,再次执行“命令”>“扩展管理”,一切OK。
我估计还有不少人被蒙在鼓里,我也是刚刚装完 Aptana Studio 2.0 后才知道的。详情请见 http://aptana.org/php
我对博客做了点调整,然后决定要经常更新了。很多在 RIM 所学的 Eclipse 开发知识我想很有必要分享给大家
在侧边栏加了 Twitter 小工具,像我这种本来就不爱写很长东西的人,Twitter 上反而比较活跃
又换了个新外观,很强,用 Ext JS library 实现了大部分的 UI。不过我还是更喜欢 jQuery,所以已经开始构思一个用它的风格模板了
我对博客做了点调整,然后决定要经常更新了。很多在 RIM 所学的 Eclipse 开发知识我想很有必要分享给大家
在侧边栏加了 Twitter 小工具,像我这种本来就不爱写很长东西的人,Twitter 上反而比较活跃
又换了个新外观,很强,用 Ext JS library 实现了大部分的 UI。不过我还是更喜欢 jQuery,所以已经开始构思一个用它的风格模板了
细心的phper们都发现了,自从zend studio升级到7.0以后,代码自动提示功能(Code Assist)变得非常慢,慢的让人无法承受,写代码也搞的不顺畅了,本来一提高敲代码速度,提高工作效率的集成开发工具,一下子成了拖累,这谁还用IDE呀?
是的,经过证实,这是zend studio 7.0的固有bug,zend官方对此也作出了修正,在新版的zend studio 7.1中,代码提示慢的问题已不复存在,那么为什么还有朋友不断的反映说自从用上了7.0以后,代码提示就是比6.x的时候慢很多呢?我总结了一下,原因有两条:
1、很多同学下载的是zend studio 7.0,7.0.1,7.0.2,并因此而找到bug穷追猛打;
2、下载了zend studio 7.1的同学没有进行一处默认设置,导致代码提示比6.1稍微慢而被其感觉了出来;
关于代码自动提示慢的第一点,没有办法,请各位同学速速升级到zend studio 7.1,第二点,请看下面的截图:

(上张win7下的截图,吼吼~)上图中Auto activation delay就是提示窗口出现的延迟时间,刚刚安装的时候默认是500毫秒,据本人实际测试,这个值改成200即可与zend studio 6.1.2的提示速度相媲美,再小于200似乎没有什么效果,当然,如果仔细比较,此代码自动提示速度还是稍微慢于6.1.2,但这已经完全不影响我们的编程工作了,因为7.1在代码提示上做了很不错的优化,6.1.2时候代码提示时的疯狂读硬盘情况已经有了很好的改善,如果还有人蹦出来说zend studio 7.1的代码提示比6.1.2的慢,那我想你不是要代码提示了,你要的是一台自动敲代码、自动编程的机器。
阴谋陷害别人的人,自己会首先遭到不幸。 —— 伊索
是的,经过证实,这是zend studio 7.0的固有bug,zend官方对此也作出了修正,在新版的zend studio 7.1中,代码提示慢的问题已不复存在,那么为什么还有朋友不断的反映说自从用上了7.0以后,代码提示就是比6.x的时候慢很多呢?我总结了一下,原因有两条:
1、很多同学下载的是zend studio 7.0,7.0.1,7.0.2,并因此而找到bug穷追猛打;
2、下载了zend studio 7.1的同学没有进行一处默认设置,导致代码提示比6.1稍微慢而被其感觉了出来;
关于代码自动提示慢的第一点,没有办法,请各位同学速速升级到zend studio 7.1,第二点,请看下面的截图:
(上张win7下的截图,吼吼~)上图中Auto activation delay就是提示窗口出现的延迟时间,刚刚安装的时候默认是500毫秒,据本人实际测试,这个值改成200即可与zend studio 6.1.2的提示速度相媲美,再小于200似乎没有什么效果,当然,如果仔细比较,此代码自动提示速度还是稍微慢于6.1.2,但这已经完全不影响我们的编程工作了,因为7.1在代码提示上做了很不错的优化,6.1.2时候代码提示时的疯狂读硬盘情况已经有了很好的改善,如果还有人蹦出来说zend studio 7.1的代码提示比6.1.2的慢,那我想你不是要代码提示了,你要的是一台自动敲代码、自动编程的机器。
阴谋陷害别人的人,自己会首先遭到不幸。 —— 伊索