<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[才子手记]]></title>
  <subtitle type="html"><![CDATA[爱好技术就永远玩下去]]></subtitle>
  <id>http://54caizi.com/blog/</id> 
  <link rel="alternate" type="text/html" href="http://54caizi.com/blog/" /> 
  <link rel="self" type="application/atom+xml" href="http://54caizi.com/blog/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.4.1022">PJBlog2</generator> 
  <updated>2008-06-08T22:17:18+08:00</updated> 

  <entry>
	  <title type="html"><![CDATA[别小看代码缩进中的空格造成的文件体积问题]]></title>
	  <author>
		 <name>风流才子</name>
		 <uri>http://54caizi.com/blog/</uri>
		 <email>mackyliu@gmail.com</email>
	  </author>
	  <category term="" scheme="http://54caizi.com/blog/default.asp?cateID=19" label="电脑技巧" /> 
	  <updated>2008-06-08T22:17:18+08:00</updated>
	  <published>2008-06-08T22:17:18+08:00</published>
		  <summary type="html"><![CDATA[一直以来，才子写代码都养成了注意缩进的好习惯，在网上下载的一些源码中，绝大部分也都有缩进，但有的缩进选用的是空格符，有的是用tab制表符，其实这都是没有什么问题的，但选用空格符有个不可小视的问题，那就是文件体积可能会增加许多，才子做了个简单的测试，如下：<br/>建两个空白文本文件，01.txt和02.txt，01.txt内容为：<br/>a b c d e f g<br/>每两个字母中间用一个空格来间隔，这是一行，我总共复制了1500行。02.txt内容也完全一样，因为我把01.txt的内容直接粘贴了过来，然后只是用替换的方式将一个空格替换成一个tab制表符，存档。这时比较两个文件大小，呵呵，是一样大的，都是21.9KB，看来一个空格与一个tab制表符所占用的体积是一样大的了。<br/>这时再做个实验，因为许多用空格代替tab制表符来当缩进的，大部分都是用4个空格来代表一个tab制表符的，那我们来试试，我将01.txt文件执行替换，用一个空格替换成4个空格，这时每两个字母之间就变成了4个空格间隔了，再存档看看。不看不知道，一看真是吓一跳，01.txt文件的大小居然变成了48.3KB，比02.txt文件大了一倍还有多，晕，看来，这问题不能小视了。<br/><br/>PS：有人说用tab制表符来缩进，会造成跨平台的兼容性问题，才子没有用过其它系统做过测试，不知道会不会有这种情况，希望有经验的朋友提个醒。<br/>大名鼎鼎的prototype javascript框架就是用空格来进行缩进的，难道真的是有跨平台兼容性问题？]]></summary>
	  <link rel="alternate" type="text/html" href="http://54caizi.com/blog/default.asp?id=44" /> 
	  <id>http://54caizi.com/blog/default.asp?id=44</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[又到6.4]]></title>
	  <author>
		 <name>风流才子</name>
		 <uri>http://54caizi.com/blog/</uri>
		 <email>mackyliu@gmail.com</email>
	  </author>
	  <category term="" scheme="http://54caizi.com/blog/default.asp?cateID=5" label="胡编乱侃" /> 
	  <updated>2008-06-04T12:12:57+08:00</updated>
	  <published>2008-06-04T12:12:57+08:00</published>
		  <summary type="html"><![CDATA[今天是个大日子，很特别。<br/>才子今天30大寿，发个日志纪念一下，告别青年，正式踏入而立之年。<br/><br/>家乡有个习俗，男不做30，女不做40，今天生日，没任何排场，还是家常便饭。<br/>一转眼就30了，人生差不多走完一半了。。。]]></summary>
	  <link rel="alternate" type="text/html" href="http://54caizi.com/blog/default.asp?id=43" /> 
	  <id>http://54caizi.com/blog/default.asp?id=43</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[收集一些Array及String原型对象的扩展方法]]></title>
	  <author>
		 <name>风流才子</name>
		 <uri>http://54caizi.com/blog/</uri>
		 <email>mackyliu@gmail.com</email>
	  </author>
	  <category term="" scheme="http://54caizi.com/blog/default.asp?cateID=6" label="程序代码" /> 
	  <updated>2008-05-18T16:56:26+08:00</updated>
	  <published>2008-05-18T16:56:26+08:00</published>
		  <summary type="html"><![CDATA[从无忧脚本收集过来的，有些的确还不错，比较实用，值得收藏一下。<br/><br/>扩展Array的原型对象的方法<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://54caizi.com/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">// 删除数组中数据<br/>Array.prototype.del = function(n)<br/>{<br/>&#160;&#160;&#160;&#160;if (n&lt;0) return this;<br/>&#160;&#160;&#160;&#160;return this.slice(0,n).concat(this.slice(n+1,this.length));<br/>}<br/><br/>// 数组洗牌<br/>Array.prototype.random = function()<br/>{<br/>&#160;&#160;&#160;&#160;var nr=[], me=this, t;<br/>&#160;&#160;&#160;&#160;while(me.length&gt;0)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;nr[nr.length] = me[t = Math.floor(Math.random() * me.length)];<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;me = me.del(t);<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;return nr;<br/>}<br/><br/>// 数字数组排序<br/>Array.prototype.sortNum = function(f)<br/>{<br/>&#160;&#160;&#160;&#160;if (!f) f=0;<br/>&#160;&#160;&#160;&#160;if (f==1) return this.sort(function(a,b){return b-a;});<br/>&#160;&#160;&#160;&#160;return this.sort(function(a,b){return a-b;});<br/>}<br/><br/>// 获得数字数组的最大项<br/>Array.prototype.getMax = function()<br/>{<br/>&#160;&#160;&#160;&#160;return this.sortNum(1)[0];<br/>}<br/><br/>// 获得数字数组的最小项<br/>Array.prototype.getMin = function()<br/>{<br/>&#160;&#160;&#160;&#160;return this.sortNum(0)[0];<br/>}<br/><br/>// 数组第一次出现指定元素值的位置<br/>Array.prototype.indexOf = function(o)<br/>{<br/>&#160;&#160;&#160;&#160;for (var i=0; i&lt;this.length; i++) if (this[i]==o) return i;<br/>&#160;&#160;&#160;&#160;return -1;<br/>}<br/><br/>// 移除数组中重复的项<br/>Array.prototype.removeRepeat=function()<br/>{<br/>&#160;&#160;&#160;&#160;this.sort();<br/>&#160;&#160;&#160;&#160;var rs = [];<br/>&#160;&#160;&#160;&#160;var cr = false;<br/>&#160;&#160;&#160;&#160;for (var i=0; i&lt;this.length; i++)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (!cr) cr = this[i];<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else if (cr==this[i]) rs[rs.length] = i;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else cr = this[i];<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;var re = this;<br/>&#160;&#160;&#160;&#160;for (var i=rs.length-1; i&gt;=0; i--) re = re.del(rs[i]);<br/>&#160;&#160;&#160;&#160;return re;<br/>}</div></div><br/><br/>例子：<br/>var arr=[&#34;ni&#34;,&#34;wo&#34;,&#34;ta&#34;];<br/>删除数组中的“wo”<br/>var newArr=arr.del(1);<br/>返回数组中“me”第一次出现的位置，若没有就返回-1<br/>var strPos=arr.indexOf(&#34;me&#34;);<br/><br/><br/><br/>扩展String的原型对象的方法<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://54caizi.com/blog/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent">//获取字符数组<br/>String.prototype.ToCharArray=function()<br/>{<br/>&#160;&#160;&#160;&#160;return this.split(&#34;&#34;);<br/>}<br/><br/>//获取N个相同的字符串<br/>String.prototype.Repeat=function(num)<br/>{<br/>&#160;&#160;&#160;&#160;var tmpArr=[];<br/>&#160;&#160;&#160;&#160;for(var i=0;i&lt;num;i++) tmpArr.push(this);<br/>&#160;&#160;&#160;&#160;return tmpArr.join(&#34;&#34;);<br/>}<br/><br/>//逆序<br/>String.prototype.Reverse=function()<br/>{<br/>&#160;&#160;&#160;&#160; return this.split(&#34;&#34;).reverse().join(&#34;&#34;);<br/>}<br/><br/>//测试是否是数字<br/>String.prototype.IsNumeric=function()<br/>{<br/>&#160;&#160;&#160;&#160;var tmpFloat=parseFloat(this);<br/>&#160;&#160;&#160;&#160;if(isNaN(tmpFloat)) return false;<br/>&#160;&#160;&#160;&#160;var tmpLen=this.length-tmpFloat.toString().length;<br/>&#160;&#160;&#160;&#160;return tmpFloat+&#34;0&#34;.Repeat(tmpLen)==this;<br/>}<br/><br/>//测试是否是整数<br/>String.prototype.IsInt=function()<br/>{<br/>&#160;&#160;&#160;&#160;if(this==&#34;NaN&#34;) return false;<br/>&#160;&#160;&#160;&#160;return this==parseInt(this).toString();<br/>}<br/><br/>// 合并多个空白为一个空白<br/>String.prototype.resetBlank = function()<br/>{<br/>&#160;&#160;&#160;&#160;return this.replace(/s+/g,&#34; &#34;);<br/>}<br/><br/>// 除去左边空白<br/>String.prototype.LTrim = function()<br/>{<br/>&#160;&#160;&#160;&#160;return this.replace(/^s+/g,&#34;&#34;);<br/>}<br/><br/>// 除去右边空白<br/>String.prototype.RTrim = function()<br/>{<br/>&#160;&#160;&#160;&#160;return this.replace(/s+$/g,&#34;&#34;);<br/>}<br/><br/>// 除去两边空白<br/>String.prototype.trim = function()<br/>{<br/>&#160;&#160;&#160;&#160;return this.replace(/(^s+)|(s+$)/g,&#34;&#34;);<br/>}<br/><br/>// 保留数字<br/>String.prototype.getNum = function()<br/>{<br/>&#160;&#160;&#160;&#160;return this.replace(/[^d]/g,&#34;&#34;);<br/>}<br/><br/>// 保留字母<br/>String.prototype.getEn = function()<br/>{<br/>&#160;&#160;&#160;&#160;return this.replace(/[^A-Za-z]/g,&#34;&#34;);<br/>}<br/><br/>// 保留中文<br/>String.prototype.getCn = function()<br/>{<br/>&#160;&#160;&#160;&#160;return this.replace(/[^u4e00-u9fa5uf900-ufa2d]/g,&#34;&#34;);<br/>}<br/><br/>// 得到字节长度<br/>String.prototype.getRealLength = function()<br/>{<br/>&#160;&#160;&#160;&#160;return this.replace(/[^x00-xff]/g,&#34;--&#34;).length;<br/>}<br/><br/>// 从左截取指定长度的字串<br/>String.prototype.left = function(n)<br/>{<br/>&#160;&#160;&#160;&#160;return this.slice(0,n);<br/>}<br/><br/>// 从右截取指定长度的字串<br/>String.prototype.right = function(n)<br/>{<br/>&#160;&#160;&#160;&#160;return this.slice(this.length-n);<br/>}<br/><br/>// HTML编码<br/>String.prototype.HTMLEncode = function()<br/>{<br/>&#160;&#160;&#160;&#160;var re = this;<br/>&#160;&#160;&#160;&#160;var q1 = [/x26/g,/x3C/g,/x3E/g,/x20/g];<br/>&#160;&#160;&#160;&#160;var q2 = [&#34;&amp;&#34;,&#34;&lt;&#34;,&#34;&gt;&#34;,&#34; &#34;];<br/>&#160;&#160;&#160;&#160;for(var i=0;i&lt;q1.length;i++)<br/>&#160;&#160;&#160;&#160;re = re.replace(q1[i],q2[i]);<br/>&#160;&#160;&#160;&#160;return re;<br/>}<br/><br/>// Unicode转化<br/>String.prototype.ascW = function()<br/>{<br/>&#160;&#160;&#160;&#160;var strText = &#34;&#34;;<br/>&#160;&#160;&#160;&#160;for (var i=0; i&lt;this.length; i++) strText += &#34;&amp;#&#34; + this.charCodeAt(i) + &#34;;&#34;;<br/>&#160;&#160;&#160;&#160;return strText;<br/>}</div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://54caizi.com/blog/default.asp?id=42" /> 
	  <id>http://54caizi.com/blog/default.asp?id=42</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[window.onerror事件学习新收获]]></title>
	  <author>
		 <name>风流才子</name>
		 <uri>http://54caizi.com/blog/</uri>
		 <email>mackyliu@gmail.com</email>
	  </author>
	  <category term="" scheme="http://54caizi.com/blog/default.asp?cateID=6" label="程序代码" /> 
	  <updated>2008-05-18T16:09:33+08:00</updated>
	  <published>2008-05-18T16:09:33+08:00</published>
		  <summary type="html"><![CDATA[在捕获js错误时，我们通常使用try{}catch(e){}的方式，然后通过e.errorMessage等方式获取错误信息然后报告错误。但对于onerror事件可能很少问津，我们是否思考过如何报告错误所在的行号？如果想过这个是否也被这个问题所困扰过，是否认为在js里不可能捕获错误的行号呢?其实本人就遇到上述的几个问题，今日读某人写的一段js代码顿然发现了onerror事件，要说onerror这个时间也是n久以前就知道了，但对于其所带有的三个参数和其特殊性质却一直没有去了解过。经过自己的研究测试，对onerror事件有了一些新的认识和了解。在页面没有错误时，window.onerror事件是不存在的，也就是null（废话！没出错如果onerror出现还正常吗？）我们一般通过函数名传递的方式（引用的方式）将要执行的操作函数传递给onerror事件，如window.onerror=reportError;window.onerror=function(){alert(&#39;error&#39;)}，但我们可能不知道该事件触发时还带有三个默认的参数，他们分别是错误信息，错误页面的url和错误行号。要知道这个可是事件，就如onclick和onmouseover等事件一样，但它是有参数。我们可以这样测试。 <br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://54caizi.com/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">&lt;script type=&#34;text/javascript&#34;&gt;<br/>window.onerror=testError;<br/>function testError(){<br/>arglen=arguments.length;<br/>var errorMsg=&#34;参数个数：&#34;+arglen+&#34;个&#34;;<br/>for(var i=0;i&lt;arglen;i++){<br/>&nbsp;&nbsp;errorMsg+=&#34;\n参数&#34;+(i+1)+&#34;：&#34;+arguments[i];<br/>}<br/>alert(errorMsg);<br/>window.onerror=null;<br/>return true;<br/>}<br/><br/>function test(){<br/>error<br/>}<br/>test()<br/>&lt;/script&gt;</div></div><br/><br/>首先将testError方法绑定给onerror事件，然后在test方法里触发一个错误，在IE中执行时我们发现如下提示：<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://54caizi.com/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">---------------------------<br/>Microsoft Internet Explorer<br/>---------------------------<br/>参数个数：3个<br/>参数1：&#39;error&#39; 未定义<br/>参数2：file://E:\yanwei\test\testError.html<br/>参数3：14<br/>---------------------------<br/>确定&nbsp;&nbsp; <br/>--------------------------- </div></div><br/><br/>可以发现，当出错时函数testError捕获到了三个参数。通过将函数绑定到onerror事件就可以在页面出错时捕获以上三个参数。<br/><br/>在测试中还发现以下一些问题：<br/>1、通过在函数末尾加上return true，可以在函数出错时不会弹出系统的错误信息(IE)。<br/>2、如果页面出现多次错误，只捕获第一次错误并进行处理然后终止后面程序的执行。<br/>3、onerror事件并不能捕获所有的错误，只能捕获函数外或函数内错误（？？这个是什么意思，可不是开玩笑呢），如<br/>adasdf;<br/>function test(){<br/>aaaa;<br/>}<br/>可以捕获到adasdf未定义的错误<br/>function test(){<br/>aaaa;<br/>}<br/>可以捕获到aaaa未定义的错误，而对于<br/>functiona test(){}或function test()dd{}<br/>的错误却不能捕获而会直接弹出系统错误信息。<br/>4、onerror在IE和FF等浏览器执行方式是一样的，而且都包含这三个参数。<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://54caizi.com/blog/default.asp?id=41" /> 
	  <id>http://54caizi.com/blog/default.asp?id=41</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[愤怒]]></title>
	  <author>
		 <name>风流才子</name>
		 <uri>http://54caizi.com/blog/</uri>
		 <email>mackyliu@gmail.com</email>
	  </author>
	  <category term="" scheme="http://54caizi.com/blog/default.asp?cateID=5" label="胡编乱侃" /> 
	  <updated>2008-05-17T14:33:47+08:00</updated>
	  <published>2008-05-17T14:33:47+08:00</published>
		  <summary type="html"><![CDATA[四川地震发生已经有四天时间了，各地捐款络绎不绝，电视上，网络上不断播报着一段段，一张张令人痛彻心扉的视频与照片，泪水已经无数次涌出，衷心祝愿受灾的同胞们坚强点，一切都会过去的。。。<br/><br/>今天在网上看到的一段视频，实在难掩心中的愤怒，各位自己看。<br/>据说是广东惠州三中捐款学生偷拍的，偷拍的学生据说也已被开除校籍。<br/><span style="color:Red">再次愤怒，视频到处都被删除</span><br/><br/>才子下载了，传到纳米盘上去，看网管们怎么删！！！<br/><a href="http://www.namipan.com/d/560357445faf6581995a3af7819a8ac0878b3124a9952e00" target="_blank">http://www.namipan.com/d/560357445faf6581995a3af7819a8ac0878b3124a9952e00</a><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://54caizi.com/blog/default.asp?id=40" /> 
	  <id>http://54caizi.com/blog/default.asp?id=40</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[金山词霸与谷歌联手，欲与有道试比高]]></title>
	  <author>
		 <name>风流才子</name>
		 <uri>http://54caizi.com/blog/</uri>
		 <email>mackyliu@gmail.com</email>
	  </author>
	  <category term="" scheme="http://54caizi.com/blog/default.asp?cateID=20" label="资源共享" /> 
	  <updated>2008-05-08T23:00:58+08:00</updated>
	  <published>2008-05-08T23:00:58+08:00</published>
		  <summary type="html"><![CDATA[今天，金山词霸与<a href="http://www.google.cn" target="_blank">谷歌</a>联手推出了联合品牌的金山词霸，以《<a href="http://www.google.cn" target="_blank">谷歌</a>金山词霸》命名，今天正式发布，有兴趣的朋友可以看一下发布的新闻页面：<br/><a href="http://cp.iciba.com/news/2008/05/08/120894.shtml" target="_blank">http://cp.iciba.com/news/2008/05/08/120894.shtml</a><br/><br/>大家都知道金山词霸原版有300多M，但这个版本只有23M，与<a target="_blank" href="http://54caizi.com/blog/article.asp?id=12">有道桌面词典</a>一样，运用了网络搜索功能，只要联网了就可以获取网上的词汇信息。但比有道桌面词典功能更多，请看下面的官方说明：<br/>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br/>　　《<a href="http://www.google.cn" target="_blank">谷歌</a>金山词霸合作版》是金山与<a href="http://www.google.cn" target="_blank">谷歌</a>面向互联网翻译市场联合开发，适用于个人用户的免费翻译软件。软件支持中、日、英三语查询，有取词、查词、查句、全文翻译、网页翻译等功能。<br/><br/>　　词霸的容量将从原来的300余M缩小为20多M，方便用户下载，同时节省电脑空间。词霸用户也将及时获得来自互联网的丰富词汇。<br/><br/>　　据金山公司报道，此次发布的《<a href="http://www.google.cn" target="_blank">谷歌</a>金山词霸》有三大特点。<br/><br/>　　最主要的一点是，此次发布的《<a href="http://www.google.cn" target="_blank">谷歌</a>金山词霸》是金山词霸十二年发展历程中首个完全免费的版本，是首次以联合品牌出现的金山词霸系列产品，是金山词霸最重要的版本之一，该版本集合了对文章、网页翻译等功能。尤为重要的是，它的发布标志着金山词霸完全转型“互联网”。<br/><br/>　　《<a href="http://www.google.cn" target="_blank">谷歌</a>金山词霸》以免费、互联网化、创新的机器翻译技术为三大核心特点，并以十项全能的完善功能为卖点，涵盖了当前翻译软件的绝大部分功能，包括十二年来首度提供的全文翻译、整句翻译、网页翻译等功能。在此次版本中保持了金山原有的强大资源外，同时嵌入<a href="http://www.google.cn" target="_blank">谷歌</a>领先的互联网优势以及机器翻译支持实现了对最新语汇、俚语的更好支持以及全文翻译的功能，依靠对互联网海量的不同语言文献进行比对、匹配，方便快捷地提供精确的结果。<br/>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br/><a target="_blank" href="http://download.iciba.com/pwl/powerwordlite.25269.3008.exe">点击下载 《<a href="http://www.google.cn" target="_blank">谷歌</a>金山词霸》正式版 (官方下载)</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://54caizi.com/blog/default.asp?id=39" /> 
	  <id>http://54caizi.com/blog/default.asp?id=39</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[[转]SHTML 教程]]></title>
	  <author>
		 <name>风流才子</name>
		 <uri>http://54caizi.com/blog/</uri>
		 <email>mackyliu@gmail.com</email>
	  </author>
	  <category term="" scheme="http://54caizi.com/blog/default.asp?cateID=19" label="电脑技巧" /> 
	  <updated>2008-05-04T23:11:47+08:00</updated>
	  <published>2008-05-04T23:11:47+08:00</published>
		  <summary type="html"><![CDATA[什么是 SHTML<br/>使用SSI（Server Side Include）的html文件扩展名，SSI（Server Side Include），通常称为“服务器端嵌入”或者叫“服务器端包含”，是一种类似于ASP的基于服务器的网页制作技术。<br/><br/>SSI工作原理：<br/>将内容发送到浏览器之前，可以使用“服务器端包含 (SSI)”指令将文本、图形或应用程序信息包含到网页中。例如，可以使用 SSI 包含时间/日期戳、版权声明或供客户填写并返回的表单。对于在多个文件中重复出现的文本或图形，使用包含文件是一种简便的方法。将内容存入一个包含文件中即可，而不必将内容输入所有文件。通过一个非常简单的语句即可调用包含文件，此语句指示 Web 服务器将内容插入适当网页。而且，使用包含文件时，对内容的所有更改只需在一个地方就能完成。<br/><br/>因为包含 SSI 指令的文件要求特殊处理，所以必须为所有 SSI 文件赋予 SSI 文件扩展名。默认扩展名是 .stm、.shtm 和 .shtml。<br/><br/>Web 服务器在处理网页的同时处理 SSI 指令。当 Web 服务器遇到 SSI 指令时，直接将包含文件的内容插入 HTML 网页。如果“包含文件”中包含 SSI 指令，则同时插入此文件。除了用于包含文件的基本指令之外，还可以使用 SSI 指令插入文件的相关信息（如文件的大小）或者运行应用程序或 shell 命令。<br/><br/>网站维护常常碰到的一个问题是，网站的结构已经固定，却为了更新一点内容而不得不重做一大批网页。SSI提供了一种简单、有效的方法来解决这一问题，它将一个网站的基本结构放在几个简单的HTML文件中（模板），以后我们要做的只是将文本传到服务器，让程序按照模板自动生成网页，从而使管理大型网站变得容易。<br/><br/>所以，利用SHTML格式的页面目的和 ASP 差不多，但是因为是 API 所以运转速度更快，效率更高，比ASP快，比HTML慢，但由于可以使用服务器端包含，因此使页面更新容易（特别是批量更新banner，版权等），想象一下吧，你有一段 HTML，要在中间穿插一些特殊的服务端脚本，比如插入其他 HTML 段落，你选择 ASP 来完成这个任务，但是如果任务更繁重，需要更多的时间，比如 5 s，这个时候你不用 ASP 而用&nbsp;&nbsp;SHTML，或许处理时间就只用 4s 了。<br/><br/>SSI有什么用？<br/>之所以要扯到 SSI，是因爲 Shtml - Server-Parsed HTML 的首字母缩略词。包含有嵌入式服务器方包含命令的 HTML 文本。在被传送给浏览器之前，服务器会对 SHTML 文档进行完全地读取、分析以及修改。shtml和asp 有一些相似，以shtml命名的文件里，使用了ssi的一些指令，就像asp中的指令，你可以在SHTML文件中写入SSI指令，当客户端访问这些shtml文件时，服务器端会把这些SHTML文件进行读取和解释，把SHTML文件中包含的SSI指令解释出来比如：你可以在SHTML文件中用SSI指令引用其他的html文件（#include ），服务器传送给客户端的文件，是已经解释的SHTML不会有SSI指令。它实现了HTML所没有的功能，就是可以实现了动态的SHTML，可以说是HTML的一种进化吧。像新浪的新闻系统就是这样的，新闻内容是固定的但它上面的广告和菜单等就是用#include引用进来的。<br/><br/>目前，主要有以下几种用用途：<br/><br/>显示服务器端环境变量&lt;#echo&gt; <br/>将文本内容直接插入到文档中&lt;#include&gt; <br/>显示WEB文档相关信息&lt;#flastmod #fsize&gt; (如文件制作日期/大小等) <br/>直接执行服务器上的各种程序&lt;#exec&gt;(如CGI或其他可执行程序) <br/>设置SSI信息显示格式&lt;#config&gt;(如文件制作日期/大小显示方式) <br/>高级SSI&lt;XSSI&gt;可设置变量使用if条件语句。<br/><br/>使用SSI<br/>SSI是为WEB服务器提供的一套命令，这些命令只要直接嵌入到HTML文档的注释内容之中即可。如：<br/><br/>&lt;!--#include file=&#34;info.htm&#34;--&gt;<br/><br/>就是一条SSI指令，其作用是将&#34;info.htm&#34;的内容拷贝到当前的页面中，当访问者来浏览时，会看到其它HTML文档一样显示info.htm其中的内容。其它的SSI指令使用形式基本同刚才的举例差不多，可见SSI使用只是插入一点代码而已，使用形式非常简单。当然，如果WEB服务器不支持SSI，它就会只不过将它当作注释信息，直接跳过其中的内容；浏览器也会忽略这些信息。<br/><br/>如何在我的WEB服务器上配置SSI功能？<br/>在一些WEB服务器上（如IIS 4.0/SAMBAR 4.2），包含 #include 指令的文件必须使用已被映射到 SSI 解释程序的扩展名；否则，Web 服务器将不会处理该SSI指令；默认情况下，扩展名 .stm、.shtm 和 .shtml 被映射到解释程序（Ssinc.dll）。<br/>Apache则是根据你的设置情况而定，修改srm.conf如：<br/><br/>AddType text/x-server-parsed-html .shtml 将只对.shtml扩展名的文件解析SSI指令<br/>AddType text/x-server-parsed-html .html 将对所有HTML文档解析SSI指令<br/><br/>Netscape WEB服务器直接使用 Administration Server(管理服务器)可打开SSI功能。<br/>Website 使用 Server Admin 程序中的 Mapping 标签，扩展名添加内容类型为：wwwserver/html-ssi<br/>Cern 服务器不支持SSI，可用SSI诈骗法，到 <a href="http://sw.cse.bris.ac.uk/WebTools/fakessi.html" target="_blank">http://sw.cse.bris.ac.uk/WebTools/fakessi.html</a> 上下载一个PERL脚本，即可使你的CERN服务器使用一些SSI指令。（不支持exec指令。）<br/><br/>SSI指令基本格式<br/>程序代码：<br/><br/>&lt;!-- 指令名称=&#34;指令参数&#34;&gt;<br/><br/>示例：<br/><br/>&lt;!--#include file=&#34;info.htm&#34;--&gt;<br/><br/>说明：<br/><br/>&lt;!-- --&gt;是HTML语法中表示注释，当WEB服务器不支持SSI时，会忽略这些信息。<br/>#include 为SSI指令之一。<br/>file 为include的参数， info.htm为参数值，在本指令中指将要包含的文档名。<br/>注意：<br/><br/>&lt;!--与#号间无空格，只有SSI指令与参数间存在空格。<br/>上面的标点=&#34;&#34;，一个也不能少。<br/>SSI指令是大小写敏感的，因此参数必须是小写才会起作用。<br/>SSI指令使用详解<br/>#echo 示范<br/><br/>作用：将环境变量插入到页面中。<br/><br/>语法：<br/><br/>&lt;!--#echo var=&#34;变量名称&#34;--&gt;<br/><br/>示例：<br/><br/>&lt;!--#echo var=&#34;DOCUMENT_NAME&#34;--&gt; 本文档名称<br/>&lt;!--#echo var=&#34;DATE_LOCAL&#34;--&gt; 现在时间<br/>&lt;!--#echo var=&#34;REMOTE_ADDR&#34;--&gt; 你的IP地址<br/><br/>#include 示范<br/><br/>作用：将文本文件的内容直接插入到文档页面中。<br/><br/>语法：<br/><br/>&lt;!--#include file=&#34;文件名称&#34;--&gt;<br/>&lt;!--#include virtual=&#34;文件名称&#34;--&gt;<br/><br/>file 文件名是一个相对路径，该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中，但不能在上一级目录中。如表示当前目录下的的nav_head.htm文档，则为file=&#34;nav_head.htm&#34;。<br/>virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文件；则为file=&#34;/hoyi/nav_head.htm&#34;<br/><br/>参数：<br/><br/>file 指定包含文件相对于本文档的位置<br/>virtual 指定相对于服务器文档根目录的位置<br/><br/>注意：<br/><br/>文件名称必须带有扩展名。 <br/>被包含的文件可以具有任何文件扩展名，我觉得直接使用htm扩展名最方便，<a href="http://www.microsoft.com" target="_blank">微软</a>公司推荐使用 .inc 扩展名（这就看你的爱好了）。 <br/>示例：<br/><br/>&lt;!--#include file=&#34;nav_head.htm&#34;--&gt; 将头文件插入到当前页面<br/>&lt;!--#include file=&#34;nav_foot.htm&#34;--&gt; 将尾文件插入到当前页面<br/><br/>#flastmod 和 #fsize 示范<br/><br/>作用：<br/><br/>#flastmod 文件最近更新日期<br/>#fsize 文件的长度<br/><br/>语法：<br/><br/>&lt;!--#flastmod file=&#34;文件名称&#34;--&gt;<br/>&lt;!--#fsize file=&#34;文件名称&#34;--&gt;<br/><br/>参数：<br/><br/>file 指定包含文件相对于本文档的位置 如 info.txt 表示当前目录下的的info.txt文档<br/>virtual 指定相对于服务器文档根目录的位置 如 /hoyi/info.txt 表示<br/><br/>注意：文件名称必须带有扩展名。<br/><br/>示例：<br/><br/>&lt;!--#flastmod file=&#34;news.htm&#34;--&gt; 将当前目录下news.htm文件的最近更新日期插插入到当前页面<br/>&lt;!--#fsize file=&#34;news.htm&#34;--&gt; 将当前目录下news.htm的文件大小入到当前页面<br/><br/>#exec 示范<br/><br/>作用：将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入，这取决于使用的参数是cmd还是cgi。<br/><br/>语法：<br/><br/>&lt;!--#exec cmd=&#34;文件名称&#34;--&gt;<br/>&lt;!--#exec cgi=&#34;文件名称&#34;--&gt;<br/><br/>参数：<br/><br/>cmd 常规应用程序<br/>cgi CGI脚本程序<br/><br/>示例：<br/><br/>&lt;!--#exec cmd=&#34;cat /etc/passwd&#34;--&gt; 将会显示密码文件<br/>&lt;!--#exec cmd=&#34;dir /b&#34;--&gt; 将会显示当前目录下文件列表<br/>&lt;!--#exec cgi=&#34;/cgi-bin/gb.cgi&#34;--&gt; 将会执行CGI程序gb.cgi。<br/>&lt;!--#exec cgi=&#34;/cgi-bin/access_log.cgi&#34;--&gt; 将会执行CGI程序access_log.cgi。<br/><br/>注意：从上面的示例可以看出，这个指令相当方便，但是也存在安全问题。<br/><br/>禁止方法：<br/><br/>Apache，将access.conf中的&#34;Options Includes ExecCGI&#34;这行代码删除；<br/>在IIS中，要禁用 #exec 命令，可修改 SSIExecDisable 元数据库；<br/>#config<br/><br/>作用： 指定返回给客户端浏览器的错误信息、日期和文件大小的格式。<br/><br/>语法：<br/><br/>&lt;!--#config errmsg=&#34;自定义错误信息&#34;--&gt;<br/>&lt;!--#config sizefmt=&#34;显示单位&#34;--&gt;<br/>&lt;!--#config timefmt=&#34;显示格式&#34;--&gt;<br/><br/>参数：<br/><br/>errmsg 自定义SSI执行错误信息，可以为任何你喜欢的方式。<br/>sizefmt 文件大小显示方式，默认为字节方式(&#34;bytes&#34;)可以改为千字节方式(&#34;abbrev&#34;)<br/>timefmt 时间显示方式，最灵活的配置属性。<br/><br/>示例：显示一个不存在文件的大小<br/><br/>&lt;!--#config errmsg=&#34;服务器执行错误，请联系管理员 yiho@126.com，谢谢！&#34;--&gt;<br/>&lt;!--#fsize file=&#34;不存在的文件.htm&#34;--&gt;<br/><br/>以千字节方式显示文件大小<br/><br/>语法：<br/><br/>&lt;!--#config sizefmt=&#34;abbrev&#34;--&gt;<br/>&lt;!--#fsizefile=&#34;news.htm&#34;--&gt;<br/><br/>以特定的时间格式显示时间<br/><br/>&lt;!--#config timefmt=&#34;%Y年/%m月%d日 星期%W 北京时间%H:%M:%s，%Y年已过去了%j天 今天是%Y年的第%U个星期&#34;--&gt;<br/>&lt;!--#echo var=&#34;DATE_LOCAL&#34;--&gt; 显示今天是星期几，几月，时区<br/>&lt;!--#config timefmt=&#34;今天%A， %B ，服务器时区是 %z，是&#34;--&gt;<br/>&lt;!--#echo var=&#34;DATE_LOCAL&#34;--&gt;<br/><br/>XSSI<br/>XSSI（Extended SSI）是一组高级SSI指令，内置于Apache 1.2或更高版本的mod-include模块之中。其中可利用的的指令有：<br/><br/>#printenv<br/>#set<br/>#if<br/><br/>#printenv<br/><br/>作用： 显示当前存在于WEB服务器环境中的所有环境变量。<br/><br/>语法：<br/><br/>&lt;!--#printenv--&gt;<br/><br/>#set<br/><br/>作用：可给变量赋值，以用于后面的if语句。<br/><br/>语法：<br/><br/>&lt;!--#set var=&#34;变量名&#34; value=&#34;变量值&#34;--&gt;<br/><br/>示例：<br/><br/>&lt;!--#set var=&#34;color&#34; value=&#34;红色&#34;--&gt;<br/><br/>#if<br/><br/>作用：创建可以改变数据的页面，这些数据根据使用if语句时计算的要求予以显示。<br/><br/>语法：<br/><br/>&lt;!--#if expr=&#34;$变量名=\&#34;变量值A\&#34;&#34;--&gt;<br/>&nbsp;&nbsp;显示内容<br/>&lt;!--#elif expr=&#34;$变量名=\&#34;变量值B\&#34;&#34;--&gt;<br/>&nbsp;&nbsp;显示内容<br/>&lt;!--#else--&gt;<br/>&nbsp;&nbsp;显示内容<br/>&lt;!--#endif&#34;--&gt;<br/><br/>示例：<br/><br/>&lt;!--#if expr=&#34;$SERVER_NAME=\&#34;hoyi.zb169.net\&#34;&#34;--&gt;<br/>&nbsp;&nbsp;欢迎光临好易CGI工厂在淄博热线的分站 <a href="http://hoyi.zb169.net" target="_blank">http://hoyi.zb169.net</a>。<br/>&lt;!--#elif expr=&#34;$SERVER_NAME=\&#34;linux.cqi.com.cn\&#34;&#34; --&gt;<br/>&nbsp;&nbsp;欢迎光临好易CGI工厂在太阳城的分站 <a href="http://linux.cqi.com.cn/~hoyi" target="_blank">http://linux.cqi.com.cn/~hoyi</a>。<br/>&lt;!--#else--&gt;<br/>&nbsp;&nbsp;欢迎光临好易CGI工厂！<br/>&lt;!--#endif&#34;--&gt;<br/><br/>注意：用于前面指令中的反斜杠，是用来代换内部的引号，以便它们不会被解释为结束表达式。不可省略。<br/><br/>1、Config 命令<br/><br/>Config 命令主要用于修改SSI的默认设置。其中：<br/><br/>Errmsg：设置默认错误信息。为了能够正常的返回用户设定的错误信息，在HTML文件中Errmsg参数必须被放置在其它SSI命令的前面，否则客户端只能显示默认的错误信息，而不是由用户设定的自定义信息。<br/><br/>&lt;!--#config errmsg=&#34;Error! Please email webmaster@mydomain.com&#34; --&gt;<br/><br/>Timefmt：定义日期和时间的使用格式。Timefmt参数必须在echo命令之前使用。<br/><br/>&lt;!--#config timefmt=&#34;%A， %B %d， %Y&#34;--&gt;<br/>&lt;!--#echo var=&#34;LAST_MODIFIED&#34; --&gt;<br/><br/>显示结果为：<br/><br/>Wednesday， April 12， 2000<br/><br/>也许用户对上例中所使用的%A %B %d感到很陌生，下面我们就以表格的形式总结一下SSI中较为常用的一些日期和时间格式。<br/><br/>Sizefmt：决定文件大小是以字节、千字节还是兆字节为单位表示。如果以字节为单位，参数值为&#34;bytes&#34;；对于千字节和兆字节可以使用缩写形式。同样，sizefmt参数必须放在fsize命令的前面才能使用。<br/><br/>&lt;!--#config sizefmt=&#34;bytes&#34; --&gt;<br/>&lt;!--#fsize file=&#34;index.html&#34; --&gt;<br/><br/>2、Include 命令<br/><br/>Include 命令可以把其它文档中的文字或图片插入到当前被解析的文档中，这是整个SSI的关键所在。通过Include命令只需要改动一个文件就可以瞬间更新整个站点！<br/><br/>Include 命令具有两个不同的参数：<br/><br/>Virtual：给出到服务器端某个文档的虚拟路径。<br/>File：给出到当前目录的相对路径，其中不能使用&#34;../&#34;，也不能使用绝对路径。<br/><br/>&lt;!--#include virtual=&#34;/includes/header.html&#34; --&gt;<br/>&lt;!--#include file=&#34;header.html&#34; --&gt; 这就要求每一个目录中都包含一个header.html文件。<br/><br/>3、Echo 命令<br/><br/>Echo 命令可以显示以下各环境变量：<br/><br/>DOCUMENT_NAME：显示当前文档的名称。<br/>DOCUMENT_URI：显示当前文档的虚拟路径。例如：<br/><br/>&lt;!--#echo var=&#34;DOCUMENT_NAME&#34; --&gt;<br/>&lt;!--#echo var=&#34;DOCUMENT_URI&#34; --&gt;<br/><br/>随着网站的不断发展，那些越来越长的URL地址肯定会让人头疼。如果使用SSI，一切就会迎刃而解。因为我们可以把网站的域名和SSI命令结合在一起显示完整的URL，即：<br/><br/><a href="http://YourDomain" target="_blank">http://YourDomain</a>&lt;!--#echo var=&#34;DOCUMENT_URI&#34; --&gt;<br/><br/>QUERY_STRING_UNESCAPED：显示未经转义处理的由客户端发送的查询字串，其中所有的特殊字符前面都有转义符&#34;\&#34;。例如：<br/><br/>&lt;!--#echo var=&#34;QUERY_STRING_UNESCAPED&#34; --&gt;<br/><br/>DATE_LOCAL：显示服务器设定时区的日期和时间。用户可以结合config命令的timefmt参数，定制输出信息。例如：<br/><br/>&lt;!--#config timefmt=&#34;%A， the %d of %B， in the year %Y&#34; --&gt;<br/>&lt;!--#echo var=&#34;DATE_LOCAL&#34; --&gt;<br/><br/>显示结果为：<br/><br/>Saturday， the 15 of April， in the year 2000<br/><br/>DATE_GMT：功能与DATE_LOCAL一样，只不过返回的是以格林尼治标准时间为基准的日期。例如：<br/><br/>&lt;!--#echo var=&#34;DATE_GMT&#34; --&gt;<br/><br/>LAST_MODIFIED：显示当前文档的最后更新时间。同样，这是SSI中非常实用的一个功能，只要在HTML文档中加入以下这行简单的文字，就可以在页面上动态的显示更新时间。<br/><br/>&lt;!--#echo var=&#34;LAST_MODIFIED&#34; --&gt;<br/><br/>CGI环境变量<br/><br/>除了SSI环境变量之外，echo命令还可以显示以下CGI环境变量：<br/><br/>SERVER_SOFTWARE：显示服务器软件的名称和版本。例如：<br/>&lt;!--#echo var=&#34;SERVER_SOFTWARE&#34; --&gt;<br/>SERVER_NAME： 显示服务器的主机名称，DNS别名或IP地址。例如：<br/>&lt;!--#echo var=&#34;SERVER_NAME&#34; --&gt;<br/>SERVER_PROTOCOL：显示客户端请求所使用的协议名称和版本，如HTTP/1.0。例如：<br/>&lt;!--#echo var=&#34;SERVER_PROTOCOL&#34; --&gt;<br/>SERVER_PORT：显示服务器的响应端口。例如：<br/>&lt;!--#echo var=&#34;SERVER_PORT&#34; --&gt;<br/>REQUEST_METHOD：显示客户端的文档请求方法，包括GET， HEAD， 和POST。例如：<br/>&lt;!--#echo var=&#34;REQUEST_METHOD&#34; --&gt;<br/>REMOTE_HOST：显示发出请求信息的客户端主机名称。<br/>&lt;!--#echo var=&#34;REMOTE_HOST&#34; --&gt;<br/>REMOTE_ADDR：显示发出请求信息的客户端IP地址。<br/>&lt;!--#echo var=&#34;REMOTE_ADDR&#34; --&gt;<br/>AUTH_TYPE：显示用户身份的验证方法。<br/>&lt;!--#echo var=&#34;AUTH_TYPE&#34; --&gt;<br/>REMOTE_USER：显示访问受保护页面的用户所使用的帐号名称。<br/>&lt;!--#echo var=&#34;REMOTE_USER&#34; --&gt;<br/><br/>4、Fsize：显示指定文件的大小，可以结合config命令的sizefmt参数定制输出格式。<br/><br/>&lt;!--#fsize file=&#34;index_working.html&#34; --&gt;<br/><br/>5、Flastmod：显示指定文件的最后修改日期，可以结合config 命令的timefmt参数控制输出格式。<br/><br/>&lt;!--#config timefmt=&#34;%A， the %d of %B， in the year %Y&#34; --&gt;<br/>&lt;!--#flastmod file=&#34;file.html&#34; --&gt;<br/><br/>这里，我们可以利用flastmod参数显示出一个页面上所有链接页面的更新日期。方法如下：<br/><br/>&lt;!--#config timefmt=&#34; %B %d， %Y&#34; --&gt;<br/>&lt;A HREF=&#34;/directory/file.html&#34;&gt;File&lt;/A&gt;<br/>&lt;!--#flastmod virtual=&#34;/directory/file.html&#34; --&gt;<br/>&lt;A HREF=&#34;/another_directory/another_file.html&#34;&gt;Another File&lt;/A&gt;<br/>&lt;!--#flastmod virtual=&#34;/another_directory/another_file.html&#34; --&gt;<br/><br/>显示结果为：<br/><br/>File April 19， 2000<br/>Another File January 08， 2000<br/><br/>6、Exec<br/><br/>Exec命令可以执行CGI脚本或者shell命令。使用方法如下：<br/><br/>Cmd：使用/bin/sh执行指定的字串。如果SSI使用了IncludesNOEXEC选项，则该命令将被屏蔽。<br/>Cgi：可以用来执行CGI脚本。例如，下面这个例子中使用服务端cgi-bin目录下的counter.pl脚本程序在每个页面放置一个计数器：<br/><br/>&lt;!--#exec cgi=&#34;/cgi-bin/counter.pl&#34; --&gt;<br/><br/>关于SHTML和HTML的区别<br/>让我们先来看看SHTML和HTML的区别，如果用一句话来解释就是:SHTML 不是HTML而是一种服务器 API，shtml是服务器动态产成的html.<br/><br/>虽然两者都是超文本格式，但shtml是一种用于SSI技术的文件。也就是Server Side Include--SSI 服务器端包含指令。如果Web Server有SSI功能的话，大多数（尤其是基于Unix平台）的WEB服务器，如Netscape Enterprise Server等均支持SSI命令。<br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://54caizi.com/blog/default.asp?id=38" /> 
	  <id>http://54caizi.com/blog/default.asp?id=38</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[VirtualBox 1.6.0 试用手记]]></title>
	  <author>
		 <name>风流才子</name>
		 <uri>http://54caizi.com/blog/</uri>
		 <email>mackyliu@gmail.com</email>
	  </author>
	  <category term="" scheme="http://54caizi.com/blog/default.asp?cateID=20" label="资源共享" /> 
	  <updated>2008-05-04T15:20:02+08:00</updated>
	  <published>2008-05-04T15:20:02+08:00</published>
		  <summary type="html"><![CDATA[玩虚拟机也玩了很多年了，一直都在用Virtual PC (简称VPC) 被<a href="http://www.microsoft.com" target="_blank">微软</a>收购之前的版本，也就是VPC5.2中文汉化版，网络上也有很多这个这个版本的精简版或绿化版，但才子还是喜欢VPC 5.2的简体中文汉化安装版，个人感觉这个版本比<a href="http://www.microsoft.com" target="_blank">微软</a>收购后的任何一个版本都要好用，速度快，也很稳定。<br/>至于VMware，才子也试用过，总觉得不如VPC好用，又慢，体积也大得吓人，设置又复杂，试用过一天就删除了，从此不再考虑它。<br/>早听说虚拟机已经有替代品出来了，名叫VirtualBox，但才子一直没有试用过，今天逛人家博客时又听到人家评论VirtualBox，好奇心促使我去下载了它，装上一试，嘿嘿，还真不错，体积又小，又是多国语言，运行速度似乎比VPC还要快，装了个安装版的原版XP系统，十分钟不到就搞定了，软件自带增强功能包，装上后就可以共享虚拟机与实机的资源，很方便。<br/>VirtualBox界面很清爽，漂亮，设置很简单，速度又快，绝对是Virtual PC及VMware的强有力的竞争者，才子觉得它是唯一的替代品，不夸张。有兴趣的朋友自己去下载个玩玩，相信你也会喜欢上它。<br/><br/>下载地址：<br/>霏凡下载站：<a href="http://www.crsky.com/soft/9441.html" target="_blank">http://www.crsky.com/soft/9441.html</a><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://54caizi.com/blog/images/quote.gif" style="margin:0px 2px -3px 0px" alt="隐藏内容"/> 隐藏内容</div><div class="UBBContent">该内容已经被作者隐藏,只有会员才允许查阅 <a href="http://54caizi.com/blog/login.asp">登录</a> | <a href="http://54caizi.com/blog/register.asp">注册</a></div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://54caizi.com/blog/default.asp?id=37" /> 
	  <id>http://54caizi.com/blog/default.asp?id=37</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[强大的图片处理软件－－光影魔术手(nEO iMAGING) 0.26免费版]]></title>
	  <author>
		 <name>风流才子</name>
		 <uri>http://54caizi.com/blog/</uri>
		 <email>mackyliu@gmail.com</email>
	  </author>
	  <category term="" scheme="http://54caizi.com/blog/default.asp?cateID=20" label="资源共享" /> 
	  <updated>2008-05-03T17:04:34+08:00</updated>
	  <published>2008-05-03T17:04:34+08:00</published>
		  <summary type="html"><![CDATA[好久没写日志了，最近在帮人改版网站，需要对图片做一些处理，找到一款很不错的软件，光影魔术手，英文名叫nEO iMAGING，功能非常强大，最难能可贵的是作者刚刚升级了版本到0.26，且将软件免费化了，并提供了非常多的素材给用户免费下载，才子试用了一下，功能非常齐全而且强大，是菜鸟们编辑图片的利器。<br/>由于官方暂时还没有提供最新的免安装版下载，才子将其绿化了一下，提供给大家下载。<br/>PS：软件没有包含帮助文件，只有一个单独的帮助文件下载，但版本还是0.24版的，不过差别不是非常大。才子一起集成进来。帮助文件名是nEOiMAGING.gb.CHM<br/><br/>官方网站：<a href="http://www.neoimaging.cn" target="_blank">http://www.neoimaging.cn</a><br/>里面提供了非常多的素材下载，请各位自行选择下载。<br/><br/>才子提供的绿化版下载：<br/><img src="http://54caizi.com/blog/images/download.gif" alt="只允许会员下载" style="margin:0px 2px -4px 0px"/> 该文件只允许会员下载! <a href="http://54caizi.com/blog/login.asp">登录</a> | <a href="http://54caizi.com/blog/register.asp">注册</a>]]></summary>
	  <link rel="alternate" type="text/html" href="http://54caizi.com/blog/default.asp?id=36" /> 
	  <id>http://54caizi.com/blog/default.asp?id=36</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[推荐一款独特的资源管理器---Q-Dir]]></title>
	  <author>
		 <name>风流才子</name>
		 <uri>http://54caizi.com/blog/</uri>
		 <email>mackyliu@gmail.com</email>
	  </author>
	  <category term="" scheme="http://54caizi.com/blog/default.asp?cateID=20" label="资源共享" /> 
	  <updated>2008-04-22T17:42:30+08:00</updated>
	  <published>2008-04-22T17:42:30+08:00</published>
		  <summary type="html"><![CDATA[找到一款非常独特的资源管理器,特别适用于频繁在各个目录间跳跃复制粘贴的情况，因为，它有 4 个窗口！每个窗口都可以方便的切换目录，以不同颜色区分不同类型的文件，各窗口之间可以方便的拖放操作互相的文件。<br/>一个只有100多KB的小工具，可以高亮区分文件类型，虽然是英文版的，但应该不至于影响各位使用，因为它真的很简单。<br/>界面:<br/><img src="http://54caizi.com/blog/attachments/month_0804/s2008422174046.jpg" border="0" alt=""/><br/><br/><a target="_blank" href="http://54caizi.com/down/Q-Dir.rar">点击下载 Q-Dir</a><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://54caizi.com/blog/default.asp?id=35" /> 
	  <id>http://54caizi.com/blog/default.asp?id=35</id> 
  </entry>	
		
</feed>