<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mzsh`s Blog</title>
	<atom:link href="http://www.phpblog.cn/feed" rel="self" type="application/rss+xml" />
	<link>http://www.phpblog.cn</link>
	<description>昨夜的火光，今天的迷茫， 有情的背叛，无情的死亡。 山水远，只影向谁去？ 曼珠沙华，开在火中央....</description>
	<lastBuildDate>Sat, 06 Mar 2010 04:45:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Javascript常用优化方法</title>
		<link>http://www.phpblog.cn/archives/328</link>
		<comments>http://www.phpblog.cn/archives/328#comments</comments>
		<pubDate>Sat, 06 Mar 2010 04:07:28 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.phpblog.cn/?p=328</guid>
		<description><![CDATA[对于Javascript的代码速度，我们一般可以将它分为下载时间和执行速度两部分，所以，要做优化的话，我们可以从这两部分来入手。
一、优化代码下载速度

在单个TCP-IP包中，最多能放入的字节数是1160，所以每个js文件的字节大小，最好不要超过这个数，以便获得最优的下载时间。
合并js文件。如果一个页面中存在加载多个js外部文件的情况，则最好将它们合并为一个，这样可以有效减少HTTP请求数，从而节省下载时间。
为外部js使用不同的域名。我们知道，浏览器在下载页面时，对于同一个域名下的最大并发数是一定的（例如IE6/7在HTTP1.0下是2个，而Firefox3是6个），所以，假如前端页面的域名是www.phpblog.cn的话，外部js文件的域名可以改为js.phpblog.cn，这样做就可以使浏览器在js.phpblog.cn域名上也使用最大并发数下载，从而加快下载速度。（以上只是拿我的域名作为例子，目前我的站点还没有这样做）
浏览器缓存。在页面中引用的外部js文件是可以被浏览器缓存的，缓存时间由服务器发给客户端代理头部中的Last-modified、Etag或者Expires决定，所以缓存的时间长短，也成了优化速度的一个方面。我建议将js的缓存时间设置的较长，而如果一旦更改了js文件后，可以在引用url的js文件后加个自定义参数，来强迫客户端重新下载js。例如：
&#60;script src="http://js.phpblog.cn/jquery.js?var=2.0" type="text/javascript"&#62;&#60;/script&#62;

删除代码中的注释、制表符、空格、换行，这样做可以有效减小 js文件的体积。我们可以使用现成的工具来做这件事情，例如我之前介绍过的Google  Closure Compiler。
替换变量名，将较长的变量名替换为较短的变量名，以减少js文件体积。这方面，用Google Closure Compiler也可以完成。
替换布尔值。我们知道，对于比较来说，true等于1，false等于0。因此，在脚本中的true、false都可以用1和0来代替，这样可以减少几个字节。
使用数组和对象字面量。例如，定义数组时，使用var o = new []而不使用var o = new Array；定义对象时，使用var o = {}而不使用var o = new Object，它们是完全等价的。

二、优化代码执行时间

关注变量范围。在js中，变量范围是很重要的。我们可以认为变量的范围在浏览器中是一个树状层级，查找一个变量时，浏览器首先会在最近的范围中查找，如果没有找到，则会到它的父范围中查找，如果还没有找到，则再去父父的范围中查找，直到查找到window对象范围（浏览器默认的全局变量属于window对象）。这就说明，让浏览器最快的找到变量，就可以加快代码的执行速度。在js中，使用var定义的变量为局部范围变量，而不使用var定义的变量属于全局范围变量，所以，如果我们在某个方法中用到的变量，一定要将它定义成局部变量，这样就不会使浏览器一直找到window对象才获得该变量。和变量范围有关的另一个优化技巧就是，不使用with语句。因为with语句会创建另一个范围，增加了不必要的查找。
 反转循环。在使用for循环时，我们经常这样用：
for(i=0; i&#60;100; i++) {}
但是，你需要知道，将循环反转后，它的速度将更快：
for(i=100; i&#62;=0; i--) {}
这是因为，使用常数0来做为判断依据速度更快。当然，使用while循环也可以反转（变换成do..while），具体方法，我就在这里不再赘述。
 除了反转循环，我们还可以使用循环合并，来进一步提高循环的速度。关于循环合并的具体方法，我在这篇文章里已经介绍过。这里要特别说明的是，while循环也可以合并，方法和反转循环一样，也是使用do...while来替。
使用js的内置方法。例如，我们要计算一个数的阶乘，假如你不知道Math对象有个pow()方法的话，你很可能会自己写一个阶乘计算函数，但是要知道，这样做的效率是远远不如直接调用内置方法Math.pow()的，因为内置方法是用C++或C语言编译过的，速度要远远高于解释运行的js。
字符串连接优化。使用"+"来连接字符串的效率是很差的，尤其表现在一次连接多个字符串时，例如：
var s = "a" + "b" + "c" + "d";
因为此时js内部会进行多次连接操作，从而导致效率的下降。为了避免这个问题，我们可以使用Array.join()方法来代替：
var a = ["a", "b", "c", "d"];
var s = a.join();

存储常用的值。在js中，访问某个对象的属性，从效率上来说，都是非常昂贵的操作。所以可以将多次用到的值存储到一个变量里。例如，下面这个代码速度较慢：
o1.style.left = document.body.clientWidth;
o2.style.left = document.body.clientWidth;
而下面的代码速度较快：
var left [...]]]></description>
			<content:encoded><![CDATA[<p>对于Javascript的代码速度，我们一般可以将它分为下载时间和执行速度两部分，所以，要做优化的话，我们可以从这两部分来入手。</p>
<p>一、优化代码下载速度</p>
<ol>
<li>在单个TCP-IP包中，最多能放入的字节数是1160，所以每个js文件的字节大小，最好不要超过这个数，以便获得最优的下载时间。</li>
<li>合并js文件。如果一个页面中存在加载多个js外部文件的情况，则最好将它们合并为一个，这样可以有效减少HTTP请求数，从而节省下载时间。</li>
<li>为外部js使用不同的域名。我们知道，浏览器在下载页面时，对于同一个域名下的最大并发数是一定的（例如IE6/7在HTTP1.0下是2个，而Firefox3是6个），所以，假如前端页面的域名是www.phpblog.cn的话，外部js文件的域名可以改为js.phpblog.cn，这样做就可以使浏览器在js.phpblog.cn域名上也使用最大并发数下载，从而加快下载速度。（以上只是拿我的域名作为例子，目前我的站点还没有这样做）</li>
<li>浏览器缓存。在页面中引用的外部js文件是可以被浏览器缓存的，缓存时间由服务器发给客户端代理头部中的Last-modified、Etag或者Expires决定，所以缓存的时间长短，也成了优化速度的一个方面。我建议将js的缓存时间设置的较长，而如果一旦更改了js文件后，可以在引用url的js文件后加个自定义参数，来强迫客户端重新下载js。例如：<br />
<blockquote><p>&lt;script src="http://js.phpblog.cn/jquery.js?var=2.0" type="text/javascript"&gt;&lt;/script&gt;</p></blockquote>
</li>
<li>删除代码中的注释、制表符、空格、换行，这样做可以有效减小 js文件的体积。我们可以使用现成的工具来做这件事情，例如我之前介绍过的<a href="../archives/242" target="_blank">Google  Closure Compiler</a>。</li>
<li>替换变量名，将较长的变量名替换为较短的变量名，以减少js文件体积。这方面，用<a href="../archives/242" target="_blank">Google Closure Compiler</a>也可以完成。</li>
<li>替换布尔值。我们知道，对于比较来说，true等于1，false等于0。因此，在脚本中的true、false都可以用1和0来代替，这样可以减少几个字节。</li>
<li>使用数组和对象字面量。例如，定义数组时，使用var o = new []而不使用var o = new Array；定义对象时，使用var o = {}而不使用var o = new Object，它们是完全等价的。</li>
</ol>
<p>二、优化代码执行时间</p>
<ol>
<li>关注变量范围。在js中，变量范围是很重要的。我们可以认为变量的范围在浏览器中是一个树状层级，查找一个变量时，浏览器首先会在最近的范围中查找，如果没有找到，则会到它的父范围中查找，如果还没有找到，则再去父父的范围中查找，直到查找到window对象范围（浏览器默认的全局变量属于window对象）。这就说明，让浏览器最快的找到变量，就可以加快代码的执行速度。在js中，使用var定义的变量为局部范围变量，而不使用var定义的变量属于全局范围变量，所以，如果我们在某个方法中用到的变量，一定要将它定义成局部变量，这样就不会使浏览器一直找到window对象才获得该变量。和变量范围有关的另一个优化技巧就是，不使用with语句。因为with语句会创建另一个范围，增加了不必要的查找。</li>
<li> 反转循环。在使用for循环时，我们经常这样用：<br />
<blockquote><p>for(i=0; i&lt;100; i++) {}</p></blockquote>
<p>但是，你需要知道，将循环反转后，它的速度将更快：</p>
<blockquote><p>for(i=100; i&gt;=0; i--) {}</p></blockquote>
<p>这是因为，使用常数0来做为判断依据速度更快。当然，使用while循环也可以反转（变换成do..while），具体方法，我就在这里不再赘述。</li>
<li> 除了反转循环，我们还可以使用循环合并，来进一步提高循环的速度。关于循环合并的具体方法，我在<a href="http://www.phpblog.cn/archives/324" target="_blank">这篇文章</a>里已经介绍过。这里要特别说明的是，while循环也可以合并，方法和反转循环一样，也是使用do...while来替。</li>
<li>使用js的内置方法。例如，我们要计算一个数的阶乘，假如你不知道Math对象有个pow()方法的话，你很可能会自己写一个阶乘计算函数，但是要知道，这样做的效率是远远不如直接调用内置方法Math.pow()的，因为内置方法是用C++或C语言编译过的，速度要远远高于解释运行的js。</li>
<li>字符串连接优化。使用"+"来连接字符串的效率是很差的，尤其表现在一次连接多个字符串时，例如：<br />
<blockquote><p>var s = "a" + "b" + "c" + "d";</p></blockquote>
<p>因为此时js内部会进行多次连接操作，从而导致效率的下降。为了避免这个问题，我们可以使用Array.join()方法来代替：</p>
<blockquote><p>var a = ["a", "b", "c", "d"];<br />
var s = a.join();</p></blockquote>
</li>
<li>存储常用的值。在js中，访问某个对象的属性，从效率上来说，都是非常昂贵的操作。所以可以将多次用到的值存储到一个变量里。例如，下面这个代码速度较慢：<br />
<blockquote><p>o1.style.left = document.body.clientWidth;<br />
o2.style.left = document.body.clientWidth;</p></blockquote>
<p>而下面的代码速度较快：</p>
<blockquote><p>var left = document.body.clientWidth;<br />
o1.style.left = left;<br />
o2.style.left = left;</p></blockquote>
</li>
<li>在js中，脚本中的语句越少，执行速度越快。基于这个原则，我们可以知道，使用一个var来定义多个变量，要快于多个var定义。例如：<br />
<blockquote><p>var a = 1; b = 2; c = 3;</p></blockquote>
<p>要快于：</p>
<blockquote><p>var a = 1;<br />
var b = 2;<br />
var c = 3;</p></blockquote>
<p>同样，以下的代码：</p>
<blockquote><p>var s = a[i++];</p></blockquote>
<p>要快于：</p>
<blockquote><p>var s = a[i];<br />
i++;</p></blockquote>
</li>
<li>节约使用DOM。在用js改变页面上任何一个元素的样式时（或者增加删除元素），都会导致浏览器重新渲染页面，这个开销是不小的。因此，在连续多次操作DOM时，我们可以先将所有变化保存到DOM碎片（fragment）中，然后再一次性操作页面DOM。例如：<br />
<blockquote><p>var arrText=["1","2","3","4","5","6","7","8","9","10"];<br />
var oFrag=document.createDocumentFragment();<br />
for(var i=0;i<br />
{<br />
var op=document.createElement("P");<br />
var oText=document.createTextNode(arrText[i]);<br />
op.appendChild(oText);<br />
oFrag.appendChild(op);</p>
<p>}<br />
document.body.appendChild(oFrag);</p></blockquote>
</li>
</ol>
<p>以上这些，只是我知道的一些优化方法，当然，js中的优化方法肯定不止这一些，我只能是抛砖引玉，更多的方法，还需要大家一起补充。</p>
<p>转载请注明出处：http://www.phpblog.cn/archives/328</p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/328/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用for循环合并提高效率</title>
		<link>http://www.phpblog.cn/archives/324</link>
		<comments>http://www.phpblog.cn/archives/324#comments</comments>
		<pubDate>Sun, 28 Feb 2010 04:35:47 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.phpblog.cn/?p=324</guid>
		<description><![CDATA[在使用大量次的for循环时，往往由于循环次数较多而严重影响程序执行效率，这时，我们可以使用循环合并来解决这个问题。
首先看一个普通的for循环，这个循环用于计算50000000次e的指数。
&#60;?php
for ($i = 0; $i &#60; 50000000; $i++) {
exp(12);
}
我们看一下执行时间：
$ time php for.php
real    0m49.217s
user    0m32.522s
sys     0m0.280s
可以看到，总共需要49s。这时，我们对for循环做一点改动：
&#60;?php
for ($i = 0; $i &#60; 50000000; $i++) {
exp(12);
$i++;
exp(12);
$i++;
exp(12);
$i++;
exp(12);
$i++;
exp(12);
}
这样改动后，exp()函数依然被执行了50000000次，但for只会循环50000000 / 5 = 10000000 次。这时，再来看一下执行时间：
$ time php for.php
real    0m28.755s
user    0m23.953s
sys     0m0.204s
可以看到，现在只需要28s，效率提高了大约42%，还是比较明显的。]]></description>
			<content:encoded><![CDATA[<p>在使用大量次的for循环时，往往由于循环次数较多而严重影响程序执行效率，这时，我们可以使用循环合并来解决这个问题。</p>
<p>首先看一个普通的for循环，这个循环用于计算50000000次e的指数。</p>
<blockquote><p>&lt;?php<br />
for ($i = 0; $i &lt; 50000000; $i++) {<br />
exp(12);<br />
}</p></blockquote>
<p>我们看一下执行时间：</p>
<blockquote><p>$ time php for.php<br />
real    0m49.217s<br />
user    0m32.522s<br />
sys     0m0.280s</p></blockquote>
<p>可以看到，总共需要49s。这时，我们对for循环做一点改动：</p>
<blockquote><p>&lt;?php<br />
for ($i = 0; $i &lt; 50000000; $i++) {<br />
exp(12);<br />
$i++;<br />
exp(12);<br />
$i++;<br />
exp(12);<br />
$i++;<br />
exp(12);<br />
$i++;<br />
exp(12);<br />
}</p></blockquote>
<p>这样改动后，exp()函数依然被执行了50000000次，但for只会循环50000000 / 5 = 10000000 次。这时，再来看一下执行时间：</p>
<blockquote><p>$ time php for.php<br />
real    0m28.755s<br />
user    0m23.953s<br />
sys     0m0.204s</p></blockquote>
<p>可以看到，现在只需要28s，效率提高了大约42%，还是比较明显的。</p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/324/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>彩色版的svn diff</title>
		<link>http://www.phpblog.cn/archives/318</link>
		<comments>http://www.phpblog.cn/archives/318#comments</comments>
		<pubDate>Wed, 24 Feb 2010 08:03:43 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.phpblog.cn/?p=318</guid>
		<description><![CDATA[
首先，我们需要安装ColorDiff这个小工具。
官方网站：http://colordiff.sourceforge.net
下载最新版本
下载后，解压缩并安装：
tar xzvf colordiff-1.0.9.tar.gz
cd colordiff-1.0.9
sudo make install
然后在~/.bashrc中加一句：
alias svndiff='svn diff --diff-cmd=colordiff'
之后，使用svndiff这个命令就可以得到彩色的svn diff结果，分页可以使用less -R。
用diff命令时，也可以通过管道调用：
diff file1.txt file2.txt &#124; colordiff]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="http://colordiff.sourceforge.net/screen2.jpg" alt="" width="592" height="320" /></p>
<p>首先，我们需要安装ColorDiff这个小工具。</p>
<p>官方网站：<a href="http://colordiff.sourceforge.net" target="_blank">http://colordiff.sourceforge.net</a></p>
<p><a href="http://colordiff.sourceforge.net/colordiff-1.0.9.tar.gz">下载最新版本</a></p>
<p>下载后，解压缩并安装：</p>
<blockquote><p>tar xzvf colordiff-1.0.9.tar.gz<br />
cd colordiff-1.0.9<br />
sudo make install</p></blockquote>
<p>然后在~/.bashrc中加一句：</p>
<blockquote><p>alias svndiff='svn diff --diff-cmd=colordiff'</p></blockquote>
<p>之后，使用svndiff这个命令就可以得到彩色的svn diff结果，分页可以使用less -R。</p>
<p>用diff命令时，也可以通过管道调用：</p>
<blockquote><p>diff file1.txt file2.txt | colordiff</p></blockquote>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/318/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>北京，明年见！</title>
		<link>http://www.phpblog.cn/archives/314</link>
		<comments>http://www.phpblog.cn/archives/314#comments</comments>
		<pubDate>Thu, 11 Feb 2010 12:34:34 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://www.phpblog.cn/?p=314</guid>
		<description><![CDATA[窗外已经炮声隆隆，我也马上就要回家了，对于北漂人来说，回家似乎是最美好的事情之一，明天上午我就能到家了，祝大家2010年新年快乐，家庭幸福！北京，明年见！]]></description>
			<content:encoded><![CDATA[<p>窗外已经炮声隆隆，我也马上就要回家了，对于北漂人来说，回家似乎是最美好的事情之一，明天上午我就能到家了，祝大家2010年新年快乐，家庭幸福！北京，明年见！</p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/314/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>雪景几张</title>
		<link>http://www.phpblog.cn/archives/294</link>
		<comments>http://www.phpblog.cn/archives/294#comments</comments>
		<pubDate>Sat, 06 Feb 2010 16:15:13 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[photogragh]]></category>

		<guid isPermaLink="false">http://www.phpblog.cn/?p=294</guid>
		<description><![CDATA[今天北京又下雪了，2010年的第二场雪，我又手痒了，扛着相机在小区里乱拍一通。
晚上小区里的雪景还是挺漂亮的，我很喜欢。]]></description>
			<content:encoded><![CDATA[<p>今天北京又下雪了，2010年的第二场雪，我又手痒了，扛着相机在小区里乱拍一通。</p>
<p>晚上小区里的雪景还是挺漂亮的，我很喜欢。</p>

<a href='http://www.phpblog.cn/archives/294/dsc_0102' title='DSC_0102'><img width="150" height="150" src="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0102-150x150.jpg" class="attachment-thumbnail" alt="" title="DSC_0102" /></a>
<a href='http://www.phpblog.cn/archives/294/dsc_0058' title='DSC_0058'><img width="150" height="150" src="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0058-150x150.jpg" class="attachment-thumbnail" alt="" title="DSC_0058" /></a>
<a href='http://www.phpblog.cn/archives/294/dsc_0036' title='DSC_0036'><img width="150" height="150" src="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0036-150x150.jpg" class="attachment-thumbnail" alt="" title="DSC_0036" /></a>
<a href='http://www.phpblog.cn/archives/294/dsc_0071' title='DSC_0071'><img width="150" height="150" src="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0071-150x150.jpg" class="attachment-thumbnail" alt="" title="DSC_0071" /></a>
<a href='http://www.phpblog.cn/archives/294/dsc_0048' title='DSC_0048'><img width="150" height="150" src="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0048-150x150.jpg" class="attachment-thumbnail" alt="" title="DSC_0048" /></a>
<a href='http://www.phpblog.cn/archives/294/dsc_0044' title='DSC_0044'><img width="150" height="150" src="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0044-150x150.jpg" class="attachment-thumbnail" alt="" title="DSC_0044" /></a>
<a href='http://www.phpblog.cn/archives/294/dsc_0022' title='DSC_0022'><img width="150" height="150" src="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0022-150x150.jpg" class="attachment-thumbnail" alt="" title="DSC_0022" /></a>
<a href='http://www.phpblog.cn/archives/294/dsc_0012' title='DSC_0012'><img width="150" height="150" src="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0012-150x150.jpg" class="attachment-thumbnail" alt="" title="DSC_0012" /></a>
]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/294/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>推荐图书：《壹百度：百度十年千倍的29条法则》</title>
		<link>http://www.phpblog.cn/archives/279</link>
		<comments>http://www.phpblog.cn/archives/279#comments</comments>
		<pubDate>Wed, 03 Feb 2010 13:50:18 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://www.phpblog.cn/?p=279</guid>
		<description><![CDATA[虽然我个人不太喜欢百度这个公司，但是不得不说，这本书确实算得上是一本好书。
百度的成功，绝非偶然，创新思维、敢于试错、迭代上线和问题驱动等一系列产品研发模式，都是实实在在的经验之谈，每一条都值得我们好好思考，细细品位。
]]></description>
			<content:encoded><![CDATA[<p>虽然我个人不太喜欢百度这个公司，但是不得不说，这本书确实算得上是一本好书。</p>
<p>百度的成功，绝非偶然，创新思维、敢于试错、迭代上线和问题驱动等一系列产品研发模式，都是实实在在的经验之谈，每一条都值得我们好好思考，细细品位。</p>
<p><a href="http://www.phpblog.cn/wp-content/uploads/2010/02/2009128115232.jpg" rel="lightbox[279]"><img class="alignnone size-full wp-image-281" title="2009128115232" src="http://www.phpblog.cn/wp-content/uploads/2010/02/2009128115232.jpg" alt="" width="322" height="450" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/279/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>拍水两张</title>
		<link>http://www.phpblog.cn/archives/272</link>
		<comments>http://www.phpblog.cn/archives/272#comments</comments>
		<pubDate>Mon, 01 Feb 2010 15:27:03 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[photogragh]]></category>

		<guid isPermaLink="false">http://www.phpblog.cn/?p=272</guid>
		<description><![CDATA[今天晚上没什么事情，于是想起来拍水，拍的不好，请大家多多指教。


拍摄要点：

使用三脚架。
在全黑的屋子里，开足闪光灯。
使用最大光圈。
使用最大焦距。
保证足够的快门速度。

难点：

因为在全黑的屋子里拍摄，所以对焦非常困难，拍摄的时候，可以先把灯开了，对好焦，然后再关灯拍摄。
水滴速度太快，无法特意抓拍想要的某个瞬间，只能不停狂拍。
因为要离的近，所以水滴很容易溅到镜头上，要小心！拍完之后，我才发现我的镜头前面已经全湿了...
]]></description>
			<content:encoded><![CDATA[<p>今天晚上没什么事情，于是想起来拍水，拍的不好，请大家多多指教。</p>
<p><a href="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0035.jpg" rel="lightbox[272]"><img class="alignnone size-full wp-image-273" title="DSC_0035" src="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0035.jpg" alt="" width="400" height="451" /></a></p>
<p><a href="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0134.jpg" rel="lightbox[272]"><img class="alignnone size-full wp-image-274" title="DSC_0134" src="http://www.phpblog.cn/wp-content/uploads/2010/02/DSC_0134.jpg" alt="" width="400" height="451" /></a></p>
<p>拍摄要点：</p>
<ol>
<li>使用三脚架。</li>
<li>在全黑的屋子里，开足闪光灯。</li>
<li>使用最大光圈。</li>
<li>使用最大焦距。</li>
<li>保证足够的快门速度。</li>
</ol>
<p>难点：</p>
<ol>
<li>因为在全黑的屋子里拍摄，所以对焦非常困难，拍摄的时候，可以先把灯开了，对好焦，然后再关灯拍摄。</li>
<li>水滴速度太快，无法特意抓拍想要的某个瞬间，只能不停狂拍。</li>
<li>因为要离的近，所以水滴很容易溅到镜头上，要小心！拍完之后，我才发现我的镜头前面已经全湿了...</li>
</ol>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/272/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>自动从豆瓣获取专辑封面</title>
		<link>http://www.phpblog.cn/archives/252</link>
		<comments>http://www.phpblog.cn/archives/252#comments</comments>
		<pubDate>Sun, 31 Jan 2010 07:07:05 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[.net]]></category>

		<guid isPermaLink="false">http://www.phpblog.cn/blog/?p=252</guid>
		<description><![CDATA[前几天看到 手气不错 写了一个 自动从豆瓣获取专辑封面的python脚本，感觉想法挺好，于是这几天我也利用空闲时间，用c#写了一个同样功能的小软件，希望对大家有用。
功能：给MP3文件加上封面图片，加上封面图片后，在支持图片的播放器中播放时，就能显示出来。以下是用Windows Media Player播放时的样子：

软件界面：

目前发现有两种情况下获取不到封面图片：

豆瓣上搜索不到歌曲的封面时。
MP3文件的ID3v1信息不全。

所以如果大家看到有没加上封面的MP3时，请不要大惊小怪；）
下载：getCover (64K)
注：Windows XP的用户，可能需要安装 .NET Framework 才能运行。下载  .NET Framework .20]]></description>
			<content:encoded><![CDATA[<p>前几天看到 <a href="http://www.gracecode.com/" target="_blank">手气不错</a> 写了一个 <a href="http://www.gracecode.com/archives/3009/" target="_blank">自动从豆瓣获取专辑封面的python脚本</a>，感觉想法挺好，于是这几天我也利用空闲时间，用c#写了一个同样功能的小软件，希望对大家有用。</p>
<p>功能：给MP3文件加上封面图片，加上封面图片后，在支持图片的播放器中播放时，就能显示出来。以下是用Windows Media Player播放时的样子：</p>
<p><a href="http://www.phpblog.cn/wp-content/uploads/2010/01/getCover-2.jpg" rel="lightbox[252]"><img class="alignnone size-full wp-image-261" title="getCover-2" src="http://www.phpblog.cn/wp-content/uploads/2010/01/getCover-2.jpg" alt="" width="252" height="274" /></a></p>
<p>软件界面：</p>
<p><a href="../wp-content/uploads/2010/01/getCover-1.jpg" rel="lightbox[252]"><img title="getCover-1" src="../wp-content/uploads/2010/01/getCover-1.jpg" alt="" width="520" height="376" /></a></p>
<p>目前发现有两种情况下获取不到封面图片：</p>
<ol>
<li>豆瓣上搜索不到歌曲的封面时。</li>
<li>MP3文件的ID3v1信息不全。</li>
</ol>
<p>所以如果大家看到有没加上封面的MP3时，请不要大惊小怪；）</p>
<p>下载：<a href="http://www.phpblog.cn/wp-content/uploads/2010/01/getCover.zip">getCover</a> (64K)</p>
<p>注：Windows XP的用户，可能需要安装 .NET Framework 才能运行。<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;displaylang=zh-cn" target="_blank">下载  .NET Framework .20</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/252/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Wave邀请分享</title>
		<link>http://www.phpblog.cn/archives/250</link>
		<comments>http://www.phpblog.cn/archives/250#comments</comments>
		<pubDate>Sun, 31 Jan 2010 05:42:32 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.phpblog.cn/blog/?p=250</guid>
		<description><![CDATA[很久以前我们老大给过我Google  Wave的邀请，当时玩儿了几天，后来就渐渐忘了这个东西了。今天突然想起，上去一看，wave生了小弟了，一共35个邀请，有感兴趣的朋友吗？如果有，请留下您的Gmail账户，我会在看到后第一时间发送邀请。Google Wave地址： https://wave.google.com]]></description>
			<content:encoded><![CDATA[<p>很久以前我们老大给过我Google  Wave的邀请，当时玩儿了几天，后来就渐渐忘了这个东西了。今天突然想起，上去一看，wave生了小弟了，一共35个邀请，有感兴趣的朋友吗？如果有，请留下您的Gmail账户，我会在看到后第一时间发送邀请。Google Wave地址： <a href="https://wave.google.com" target="_blank">https://wave.google.com</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/250/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用Google的Closure Compiler来压缩javascript</title>
		<link>http://www.phpblog.cn/archives/242</link>
		<comments>http://www.phpblog.cn/archives/242#comments</comments>
		<pubDate>Fri, 15 Jan 2010 06:43:25 +0000</pubDate>
		<dc:creator>shishirui</dc:creator>
				<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.phpblog.cn/blog/?p=242</guid>
		<description><![CDATA[Closure Compiler是一个google出的用来压缩、检查javascript的工具。其项目地址在：http://code.google.com/closure/compiler/
Closure Compiler的使用方法有如下3种：

在命令行下使用一个google编译好的java程序
使用google提供的在线服务
使用google提供的RESTful API

下面我来分别介绍一下这3种方法的具体使用。
1. 在命令行下使用一个google编译好的java程序
这种方法最适合在linux命令行下开发的同学们。首先在 http://closure-compiler.googlecode.com/files/compiler-latest.zip 这里下载编译好的Closure Compiler，下载后，随便解压缩到一个目录，比如解压到当前用户的根目录：
$ unzip compiler-latest.zip -d ~
这时，除了几个说明文件外，还会有一个叫compiler.jar的文件出现，然后，我们就可以直接使用它来压缩，例如：
$ java -jar ~/compiler.jar --js my_source.js --js_output_file my_package.js
这样，就把 my_source.js压缩成my_package.js了。经过我的测试，压缩率较别的压缩工具来说，还是相当高的。
如果想知道其他的可选参数，可以输入如下命令获得：
$ java -jar ~/compiler.jar --help
在压缩过程中，它还会告诉你的js文件中出现的错误，以及不建议使用的语法等，比如说不建议使用with语句，以及不建议使用没有大括号的if/while/for等等。
2. 使用google提供的在线服务
这种方法是最直观也是最容易使用的，但是缺点是麻烦，速度慢，而且不太方便压缩比较大的文件。
使用方法为直接打开浏览器访问 http://closure-compiler.appspot.com/（可能需要翻墙） ，然后在里面的文本框中输入你想要压缩的js，然后点Complie按钮即可。
3. 使用google提供的RESTful API
这种方法比较灵活，但缺点也是无法压缩较大的文件（压缩本地文件时）。使用时，同学们可以使用自己擅长的语言，参考google 的 RESTful API文档编写自己的压缩器，API文档见 http://code.google.com/closure/compiler/docs/api-tutorial1.html 。原理大概就是将需要压缩的js内容或js文件所在url，以及必要的配置信息发送给google的服务器，然后接收google的响应，响应结果即为压缩后的内容。
同学们可以在这3种方法中自己选择喜欢的方法。但我个人更喜欢使用第一种方法，因为不仅没有文件大小限制，而且速度很快。]]></description>
			<content:encoded><![CDATA[<p>Closure Compiler是一个google出的用来压缩、检查javascript的工具。其项目地址在：<a href="http://code.google.com/closure/compiler/" target="_blank">http://code.google.com/closure/compiler/</a></p>
<p>Closure Compiler的使用方法有如下3种：</p>
<ol>
<li>在命令行下使用一个google编译好的java程序</li>
<li>使用google提供的在线服务</li>
<li>使用google提供的RESTful API</li>
</ol>
<p>下面我来分别介绍一下这3种方法的具体使用。</p>
<p><strong>1. 在命令行下使用一个google编译好的java程序</strong></p>
<p>这种方法最适合在linux命令行下开发的同学们。首先在 <a href="http://closure-compiler.googlecode.com/files/compiler-latest.zip">http://closure-compiler.googlecode.com/files/compiler-latest.zip</a> 这里下载编译好的Closure Compiler，下载后，随便解压缩到一个目录，比如解压到当前用户的根目录：</p>
<blockquote><p>$ unzip compiler-latest.zip -d ~</p></blockquote>
<p>这时，除了几个说明文件外，还会有一个叫compiler.jar的文件出现，然后，我们就可以直接使用它来压缩，例如：</p>
<blockquote><p>$ java -jar ~/compiler.jar --js my_source.js --js_output_file my_package.js</p></blockquote>
<p>这样，就把 my_source.js压缩成my_package.js了。经过我的测试，压缩率较别的压缩工具来说，还是相当高的。</p>
<p>如果想知道其他的可选参数，可以输入如下命令获得：</p>
<blockquote><p>$ java -jar ~/compiler.jar --help</p></blockquote>
<p>在压缩过程中，它还会告诉你的js文件中出现的错误，以及不建议使用的语法等，比如说不建议使用with语句，以及不建议使用没有大括号的if/while/for等等。</p>
<p><strong>2. 使用google提供的在线服务</strong></p>
<p>这种方法是最直观也是最容易使用的，但是缺点是麻烦，速度慢，而且不太方便压缩比较大的文件。</p>
<p>使用方法为直接打开浏览器访问 <a href="http://closure-compiler.appspot.com/" target="_blank">http://closure-compiler.appspot.com</a>/（可能需要翻墙） ，然后在里面的文本框中输入你想要压缩的js，然后点Complie按钮即可。</p>
<p><strong>3. 使用google提供的RESTful API</strong></p>
<p>这种方法比较灵活，但缺点也是无法压缩较大的文件（压缩本地文件时）。使用时，同学们可以使用自己擅长的语言，参考google 的 RESTful API文档编写自己的压缩器，API文档见 <a href="http://code.google.com/closure/compiler/docs/api-tutorial1.html">http://code.google.com/closure/compiler/docs/api-tutorial1.html</a> 。原理大概就是将需要压缩的js内容或js文件所在url，以及必要的配置信息发送给google的服务器，然后接收google的响应，响应结果即为压缩后的内容。</p>
<p>同学们可以在这3种方法中自己选择喜欢的方法。但我个人更喜欢使用第一种方法，因为不仅没有文件大小限制，而且速度很快。</p>]]></content:encoded>
			<wfw:commentRss>http://www.phpblog.cn/archives/242/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
