<?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>idea&#039;s blog</title>
	<atom:link href="http://www.ideawu.net/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ideawu.net/blog</link>
	<description>网络服务器架构, Linux C/C++服务器端开发, TCP/IP网络协议, PHP Web后端和Web前端开发, 网站架构.</description>
	<lastBuildDate>Thu, 12 Jan 2012 14:55:11 +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>Chrome浏览器必装的插件</title>
		<link>http://www.ideawu.net/blog/archives/625.html</link>
		<comments>http://www.ideawu.net/blog/archives/625.html#comments</comments>
		<pubDate>Thu, 12 Jan 2012 14:55:11 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[etc]]></category>
		<category><![CDATA[Chrome Toolbox]]></category>
		<category><![CDATA[SwitchySharp]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/?p=625</guid>
		<description><![CDATA[<p>默认的Chrome浏览器非常弱智, 弱智到不可用. 举两点:</p>
<ul>
<li>关闭最后一个标签时, Chrome程序就退出了 &#8211; 而且没有选项可以配置.</li>
<li>和IE共用同一个代理(Proxy)设置, Google的人技术会差到不能开发一个HTTP库, 而要用操作系统自带的吗?!.</li>
</ul>
<p>为了解决这两个问题, 必须安装两个插件:</p>
<ul>
<li><a href="https://chrome.google.com/webstore/detail/fjccknnhdnkbanjilpjddjhmkghmachn">Chrome Toolbox</a></li>
<li><a href="https://chrome.google.com/webstore/detail/dpplabbmogkhghncfbfdeeokoefdjegm">SwitchySharp</a></li>
</ul>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/510.html' rel='bookmark' title='Permanent Link: SSH ProxyCommand及其思想'>SSH ProxyCommand及其思想</a></li>
<li><a href='http://www.ideawu.net/blog/archives/511.html' rel='bookmark' title='Permanent Link: endless_tcp &#8211; 一种适应极端网络环境的网络软件架构'>endless_tcp &#8211; 一种适应极端网络环境的网络软件架构</a></li>
<li><a href='http://www.ideawu.net/blog/archives/396.html' rel='bookmark' title='Permanent Link: 博客防垃圾评论探讨'>博客防垃圾评论探讨</a></li>
<li><a href='http://www.ideawu.net/blog/archives/125.html' rel='bookmark' title='Permanent Link: 从感观上体验桌面Linux'>从感观上体验桌面Linux</a></li>
<li><a href='http://www.ideawu.net/blog/archives/32.html' rel='bookmark' title='Permanent Link: Java中文问题及最优解决方法'>Java中文问题及最优解决方法</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/625.html" title="Chrome浏览器必装的插件">Chrome浏览器必装的插件</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>默认的Chrome浏览器非常弱智, 弱智到不可用. 举两点:</p>
<ul>
<li>关闭最后一个标签时, Chrome程序就退出了 &#8211; 而且没有选项可以配置.</li>
<li>和IE共用同一个代理(Proxy)设置, Google的人技术会差到不能开发一个HTTP库, 而要用操作系统自带的吗?!.</li>
</ul>
<p>为了解决这两个问题, 必须安装两个插件:</p>
<ul>
<li><a href="https://chrome.google.com/webstore/detail/fjccknnhdnkbanjilpjddjhmkghmachn">Chrome Toolbox</a></li>
<li><a href="https://chrome.google.com/webstore/detail/dpplabbmogkhghncfbfdeeokoefdjegm">SwitchySharp</a></li>
</ul>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/510.html' rel='bookmark' title='Permanent Link: SSH ProxyCommand及其思想'>SSH ProxyCommand及其思想</a></li>
<li><a href='http://www.ideawu.net/blog/archives/511.html' rel='bookmark' title='Permanent Link: endless_tcp &#8211; 一种适应极端网络环境的网络软件架构'>endless_tcp &#8211; 一种适应极端网络环境的网络软件架构</a></li>
<li><a href='http://www.ideawu.net/blog/archives/396.html' rel='bookmark' title='Permanent Link: 博客防垃圾评论探讨'>博客防垃圾评论探讨</a></li>
<li><a href='http://www.ideawu.net/blog/archives/125.html' rel='bookmark' title='Permanent Link: 从感观上体验桌面Linux'>从感观上体验桌面Linux</a></li>
<li><a href='http://www.ideawu.net/blog/archives/32.html' rel='bookmark' title='Permanent Link: Java中文问题及最优解决方法'>Java中文问题及最优解决方法</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/625.html" title="Chrome浏览器必装的插件">Chrome浏览器必装的插件</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/625.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Python logging 标准配置</title>
		<link>http://www.ideawu.net/blog/archives/624.html</link>
		<comments>http://www.ideawu.net/blog/archives/624.html#comments</comments>
		<pubDate>Wed, 04 Jan 2012 09:10:57 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/624.html</guid>
		<description><![CDATA[<pre>
# encoding=UTF-8
import logging
import logging.config

logging.addLevelName(5, 'TRACE')
logging.addLevelName(30, 'WARN')
logging.addLevelName(50, 'FATAL')

logging.config.fileConfig('my.conf')
logger = logging.getLogger('root')
</pre>
<p>my.conf:</p>
<pre>
[loggers]
keys=root

[handlers]
keys=consoleHandler, fileHandler

[formatters]
keys=simpleFormatter

[logger_root]
#level=ERROR
level=DEBUG
handlers=consoleHandler, fileHandler

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('a.log', 'a')

[formatter_simpleFormatter]
#format=%(asctime)s [%(levelname)-5s] %(name)s %(message)s
format=%(asctime)s [%(levelname)-5s] %(message)s
#datefmt= %Y-%m-%d %H:%M:%S
datefmt=
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/407.html' rel='bookmark' title='Permanent Link: .Net程序中使用log4net记录日志'>.Net程序中使用log4net记录日志</a></li>
<li><a href='http://www.ideawu.net/blog/archives/426.html' rel='bookmark' title='Permanent Link: C#封装log4net'>C#封装log4net</a></li>
<li><a href='http://www.ideawu.net/blog/archives/508.html' rel='bookmark' title='Permanent Link: Windows Python select标准输入输出'>Windows Python select标准输入输出</a></li>
<li><a href='http://www.ideawu.net/blog/archives/155.html' rel='bookmark' title='Permanent Link: 如何使用ServletContextListener'>如何使用ServletContextListener</a></li>
<li><a href='http://www.ideawu.net/blog/archives/270.html' rel='bookmark' title='Permanent Link: 使用Python POST任意的HTTP数据以及使用Cookie'>使用Python POST任意的HTTP数据以及使用Cookie</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/624.html" title="Python logging 标准配置">Python logging 标准配置</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<pre>
# encoding=UTF-8
import logging
import logging.config

logging.addLevelName(5, 'TRACE')
logging.addLevelName(30, 'WARN')
logging.addLevelName(50, 'FATAL')

logging.config.fileConfig('my.conf')
logger = logging.getLogger('root')
</pre>
<p>my.conf:</p>
<pre>
[loggers]
keys=root

[handlers]
keys=consoleHandler, fileHandler

[formatters]
keys=simpleFormatter

[logger_root]
#level=ERROR
level=DEBUG
handlers=consoleHandler, fileHandler

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=simpleFormatter
args=('a.log', 'a')

[formatter_simpleFormatter]
#format=%(asctime)s [%(levelname)-5s] %(name)s %(message)s
format=%(asctime)s [%(levelname)-5s] %(message)s
#datefmt= %Y-%m-%d %H:%M:%S
datefmt=
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/407.html' rel='bookmark' title='Permanent Link: .Net程序中使用log4net记录日志'>.Net程序中使用log4net记录日志</a></li>
<li><a href='http://www.ideawu.net/blog/archives/426.html' rel='bookmark' title='Permanent Link: C#封装log4net'>C#封装log4net</a></li>
<li><a href='http://www.ideawu.net/blog/archives/508.html' rel='bookmark' title='Permanent Link: Windows Python select标准输入输出'>Windows Python select标准输入输出</a></li>
<li><a href='http://www.ideawu.net/blog/archives/155.html' rel='bookmark' title='Permanent Link: 如何使用ServletContextListener'>如何使用ServletContextListener</a></li>
<li><a href='http://www.ideawu.net/blog/archives/270.html' rel='bookmark' title='Permanent Link: 使用Python POST任意的HTTP数据以及使用Cookie'>使用Python POST任意的HTTP数据以及使用Cookie</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/624.html" title="Python logging 标准配置">Python logging 标准配置</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/624.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让他们来告我吧!</title>
		<link>http://www.ideawu.net/blog/archives/623.html</link>
		<comments>http://www.ideawu.net/blog/archives/623.html#comments</comments>
		<pubDate>Thu, 01 Dec 2011 06:16:37 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[IT技术和评论]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/623.html</guid>
		<description><![CDATA[<p>事情是这样的，</p>
<p>那是1998年，互联网经济爆发的年代。我22岁，是一名自由职业的程序员，在纽约从事网站开发。第一个客户我收了他1400美元，第二个客户给了我5400美元。之后的一笔收入是2万4千美元。我清清楚楚的记得这些数字——这是我当时见过的最大面额的支票。</p>
<p>然后我写了一份价值34万美元的方案来帮助一个在线零售商改进他们的网站。当时我和5个全职的程序员一起干(全在我家工作)，这也是不小的开销。客户同意了这个方案，但他们要求我签一份合同——一切看来都很正常。</p>
<p>没问题。我把合同发给了我的律师。她做了些修改，然后发给了客户。然后客户又做了些修改，发回我的律师。这样来来回回，大概进行了一个月。我毫无经验，以为做生意就是这样。</p>
<p>不堪我合同条文上的折腾，客户最终放弃了我，采用了其他人的方案。</p>
<p>该死。</p>
<p>但是我很幸运，另外一个大客户来敲门了。一个世界500强的大公司需要一个电子商务网站。我写了一个400万美元的方案(哇塞，这互联网经济繁荣的日子…)。客户接受了，并给了我一份合同让我签署。</p>
<p>这回，我没有把它发给我的律师，而是发给了我的老爸——他是一个老企业家。</p>
<p>“只管签，”老爸冷静的说。</p>
<p><span id="more-623"></span>“可是里面写着各种各样让人抓狂的条款！”我回复道。“上面说，如果事情办不好，我个人要承担法律责任的！上面说，如果逾期未完成，我要赔偿损失的！”等等。</p>
<p>“只管签，”他说。</p>
<p>“但是，如果出了什么意外了呢？？如果网站宕机了呢？如果我没有按时完工呢？如果…??”</p>
<p>“你觉得这些事情会发生吗？”他问。</p>
<p>“应该不会。但万一呢？”</p>
<p>“到时你知道该怎么做吗？”他说。“告诉他们，‘去告我吧。’”</p>
<p>老爸是对的。我接下来这个项目，他们付了款，事情很顺利，没有人被起诉。</p>
<p>之后有个时间，我需要雇一个全职的程序员。我很不安，因为我的积蓄只够支付他两个月的薪水，除非我能尽快的找到下一个客户。</p>
<p>“两个月后再考虑这个问题，”老爸说。</p>
<p>他已经为我工作好几年了。</p>
<p>这种完全不考虑风险的做法让我受益不少。人们说企业家就是探险者。我觉得我是太懒、太大意，没有去全面的了解这种风险。</p>
<p>我喜欢这种行事风格。</p>
<p>我不知道这能给你们什么启示。</p>
<p>转自: http://www.aqee.net/fucking-sue-me/</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/585.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP Web面试题(会做就能进百度)'>史上最强大的PHP Web面试题(会做就能进百度)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/572.html' rel='bookmark' title='Permanent Link: Groupon团购网站启示录'>Groupon团购网站启示录</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
<li><a href='http://www.ideawu.net/blog/archives/422.html' rel='bookmark' title='Permanent Link: 炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发'>炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发</a></li>
<li><a href='http://www.ideawu.net/blog/archives/384.html' rel='bookmark' title='Permanent Link: 你所不知道的腾讯和马化腾'>你所不知道的腾讯和马化腾</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/623.html" title="让他们来告我吧!">让他们来告我吧!</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>事情是这样的，</p>
<p>那是1998年，互联网经济爆发的年代。我22岁，是一名自由职业的程序员，在纽约从事网站开发。第一个客户我收了他1400美元，第二个客户给了我5400美元。之后的一笔收入是2万4千美元。我清清楚楚的记得这些数字——这是我当时见过的最大面额的支票。</p>
<p>然后我写了一份价值34万美元的方案来帮助一个在线零售商改进他们的网站。当时我和5个全职的程序员一起干(全在我家工作)，这也是不小的开销。客户同意了这个方案，但他们要求我签一份合同——一切看来都很正常。</p>
<p>没问题。我把合同发给了我的律师。她做了些修改，然后发给了客户。然后客户又做了些修改，发回我的律师。这样来来回回，大概进行了一个月。我毫无经验，以为做生意就是这样。</p>
<p>不堪我合同条文上的折腾，客户最终放弃了我，采用了其他人的方案。</p>
<p>该死。</p>
<p>但是我很幸运，另外一个大客户来敲门了。一个世界500强的大公司需要一个电子商务网站。我写了一个400万美元的方案(哇塞，这互联网经济繁荣的日子…)。客户接受了，并给了我一份合同让我签署。</p>
<p>这回，我没有把它发给我的律师，而是发给了我的老爸——他是一个老企业家。</p>
<p>“只管签，”老爸冷静的说。</p>
<p><span id="more-623"></span>“可是里面写着各种各样让人抓狂的条款！”我回复道。“上面说，如果事情办不好，我个人要承担法律责任的！上面说，如果逾期未完成，我要赔偿损失的！”等等。</p>
<p>“只管签，”他说。</p>
<p>“但是，如果出了什么意外了呢？？如果网站宕机了呢？如果我没有按时完工呢？如果…??”</p>
<p>“你觉得这些事情会发生吗？”他问。</p>
<p>“应该不会。但万一呢？”</p>
<p>“到时你知道该怎么做吗？”他说。“告诉他们，‘去告我吧。’”</p>
<p>老爸是对的。我接下来这个项目，他们付了款，事情很顺利，没有人被起诉。</p>
<p>之后有个时间，我需要雇一个全职的程序员。我很不安，因为我的积蓄只够支付他两个月的薪水，除非我能尽快的找到下一个客户。</p>
<p>“两个月后再考虑这个问题，”老爸说。</p>
<p>他已经为我工作好几年了。</p>
<p>这种完全不考虑风险的做法让我受益不少。人们说企业家就是探险者。我觉得我是太懒、太大意，没有去全面的了解这种风险。</p>
<p>我喜欢这种行事风格。</p>
<p>我不知道这能给你们什么启示。</p>
<p>转自: http://www.aqee.net/fucking-sue-me/</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/585.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP Web面试题(会做就能进百度)'>史上最强大的PHP Web面试题(会做就能进百度)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/572.html' rel='bookmark' title='Permanent Link: Groupon团购网站启示录'>Groupon团购网站启示录</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
<li><a href='http://www.ideawu.net/blog/archives/422.html' rel='bookmark' title='Permanent Link: 炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发'>炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发</a></li>
<li><a href='http://www.ideawu.net/blog/archives/384.html' rel='bookmark' title='Permanent Link: 你所不知道的腾讯和马化腾'>你所不知道的腾讯和马化腾</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/623.html" title="让他们来告我吧!">让他们来告我吧!</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/623.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP重用curl句柄, CURLOPT_HTTPGET的BUG</title>
		<link>http://www.ideawu.net/blog/archives/622.html</link>
		<comments>http://www.ideawu.net/blog/archives/622.html#comments</comments>
		<pubDate>Wed, 12 Oct 2011 10:55:51 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/2011/10/php%e9%87%8d%e7%94%a8curl%e5%8f%a5%e6%9f%84-curlopt_httpget%e7%9a%84bug.html</guid>
		<description><![CDATA[<p>重用一个CURL句柄时, 发现curl_setopt($ch, CURLOPT_HTTPGET, TRUE) 不起作用. 期望在调用这条语句之后发起请求, 应该发送的是GET, 但看服务器log, 却使用了和前一次请求相同的HTTP方法.</p>
<p>PHP脚本:</p>
<pre>
&lt;?php
$url = 'http://www.ideawu.net/';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_exec($ch);

curl_setopt($ch, CURLOPT_HTTPGET, true); // 错误! BUG
curl_exec($ch);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); // 正确
curl_exec($ch);
?&gt;
</pre>
<p>web server log:</p>
<pre>
124.127.130.50 "2011-10-12 18:55:09" "POST / HTTP/1.1" 200 3516 "-" www.ideawu.net
124.127.130.50 "2011-10-12 18:55:09" "POST / HTTP/1.1" 200 3516 "-" www.ideawu.net
124.127.130.50 "2011-10-12 18:55:09" "GET / HTTP/1.1" 200 3516 "-" www.ideawu.net
</pre>
<p>这个BUG目前还没找到相关的资料.</p>
<p><b>补充: 不仅仅是CURLOPT_HTTPGET, CURLOPT_POST也有同样的问题. 所以, 结论是: 只有CURLOPT_CUSTOMREQUEST才是正确的方法.</b></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/517.html' rel='bookmark' title='Permanent Link: HTTP POST using PHP cURL'>HTTP POST using PHP cURL</a></li>
<li><a href='http://www.ideawu.net/blog/archives/556.html' rel='bookmark' title='Permanent Link: lighttpd配置HTTPS(SSL)'>lighttpd配置HTTPS(SSL)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/114.html' rel='bookmark' title='Permanent Link: 艾薇儿Avril Lavigne的照片'>艾薇儿Avril Lavigne的照片</a></li>
<li><a href='http://www.ideawu.net/blog/archives/410.html' rel='bookmark' title='Permanent Link: PHP字符串==比较的副作用'>PHP字符串==比较的副作用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/376.html' rel='bookmark' title='Permanent Link: 使用i_am_not_spam Wordpress插件'>使用i_am_not_spam Wordpress插件</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/622.html" title="PHP重用curl句柄, CURLOPT_HTTPGET的BUG">PHP重用curl句柄, CURLOPT_HTTPGET的BUG</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>重用一个CURL句柄时, 发现curl_setopt($ch, CURLOPT_HTTPGET, TRUE) 不起作用. 期望在调用这条语句之后发起请求, 应该发送的是GET, 但看服务器log, 却使用了和前一次请求相同的HTTP方法.</p>
<p>PHP脚本:</p>
<pre>
&lt;?php
$url = 'http://www.ideawu.net/';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_exec($ch);

curl_setopt($ch, CURLOPT_HTTPGET, true); // 错误! BUG
curl_exec($ch);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); // 正确
curl_exec($ch);
?&gt;
</pre>
<p>web server log:</p>
<pre>
124.127.130.50 "2011-10-12 18:55:09" "POST / HTTP/1.1" 200 3516 "-" www.ideawu.net
124.127.130.50 "2011-10-12 18:55:09" "POST / HTTP/1.1" 200 3516 "-" www.ideawu.net
124.127.130.50 "2011-10-12 18:55:09" "GET / HTTP/1.1" 200 3516 "-" www.ideawu.net
</pre>
<p>这个BUG目前还没找到相关的资料.</p>
<p><b>补充: 不仅仅是CURLOPT_HTTPGET, CURLOPT_POST也有同样的问题. 所以, 结论是: 只有CURLOPT_CUSTOMREQUEST才是正确的方法.</b></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/517.html' rel='bookmark' title='Permanent Link: HTTP POST using PHP cURL'>HTTP POST using PHP cURL</a></li>
<li><a href='http://www.ideawu.net/blog/archives/556.html' rel='bookmark' title='Permanent Link: lighttpd配置HTTPS(SSL)'>lighttpd配置HTTPS(SSL)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/114.html' rel='bookmark' title='Permanent Link: 艾薇儿Avril Lavigne的照片'>艾薇儿Avril Lavigne的照片</a></li>
<li><a href='http://www.ideawu.net/blog/archives/410.html' rel='bookmark' title='Permanent Link: PHP字符串==比较的副作用'>PHP字符串==比较的副作用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/376.html' rel='bookmark' title='Permanent Link: 使用i_am_not_spam Wordpress插件'>使用i_am_not_spam Wordpress插件</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/622.html" title="PHP重用curl句柄, CURLOPT_HTTPGET的BUG">PHP重用curl句柄, CURLOPT_HTTPGET的BUG</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/622.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shell循环</title>
		<link>http://www.ideawu.net/blog/archives/621.html</link>
		<comments>http://www.ideawu.net/blog/archives/621.html#comments</comments>
		<pubDate>Fri, 30 Sep 2011 04:14:11 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/2011/09/shell%e5%be%aa%e7%8e%af.html</guid>
		<description><![CDATA[<p>做个笔记:</p>
<p>SHELL循环:</p>
<p>1. while<br />
i=0; while [ $i -lt 10 ]; do echo $i; i=$(($i+1)); done</p>
<p>2. for<br />
for ((i=1; i<=10; i++)); do echo $i; done</p>
<p>3. while<br />
cat file.txt | while read line; do echo $line; done<br />
while read line; do echo $line; done < file.txt</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/518.html' rel='bookmark' title='Permanent Link: if-else对优化代码冗余度的反作用'>if-else对优化代码冗余度的反作用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/619.html' rel='bookmark' title='Permanent Link: PHP浮点数显示和转成字符串'>PHP浮点数显示和转成字符串</a></li>
<li><a href='http://www.ideawu.net/blog/archives/367.html' rel='bookmark' title='Permanent Link: Wordpress分页代码'>Wordpress分页代码</a></li>
<li><a href='http://www.ideawu.net/blog/archives/464.html' rel='bookmark' title='Permanent Link: 用PHP去除重复图片文件'>用PHP去除重复图片文件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/216.html' rel='bookmark' title='Permanent Link: 用mplayer,toolame提取rmvb等视频文件中的音频为mp3'>用mplayer,toolame提取rmvb等视频文件中的音频为mp3</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/621.html" title="Shell循环">Shell循环</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>做个笔记:</p>
<p>SHELL循环:</p>
<p>1. while<br />
i=0; while [ $i -lt 10 ]; do echo $i; i=$(($i+1)); done</p>
<p>2. for<br />
for ((i=1; i<=10; i++)); do echo $i; done</p>
<p>3. while<br />
cat file.txt | while read line; do echo $line; done<br />
while read line; do echo $line; done < file.txt</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/518.html' rel='bookmark' title='Permanent Link: if-else对优化代码冗余度的反作用'>if-else对优化代码冗余度的反作用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/619.html' rel='bookmark' title='Permanent Link: PHP浮点数显示和转成字符串'>PHP浮点数显示和转成字符串</a></li>
<li><a href='http://www.ideawu.net/blog/archives/367.html' rel='bookmark' title='Permanent Link: Wordpress分页代码'>Wordpress分页代码</a></li>
<li><a href='http://www.ideawu.net/blog/archives/464.html' rel='bookmark' title='Permanent Link: 用PHP去除重复图片文件'>用PHP去除重复图片文件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/216.html' rel='bookmark' title='Permanent Link: 用mplayer,toolame提取rmvb等视频文件中的音频为mp3'>用mplayer,toolame提取rmvb等视频文件中的音频为mp3</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/621.html" title="Shell循环">Shell循环</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/621.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linode日本东京机房速度飞快</title>
		<link>http://www.ideawu.net/blog/archives/620.html</link>
		<comments>http://www.ideawu.net/blog/archives/620.html#comments</comments>
		<pubDate>Tue, 27 Sep 2011 16:18:54 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[IT技术和评论]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/?p=620</guid>
		<description><![CDATA[<p>为了应对亚太地区快速增长的需求, <a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">Linode</a> 开始把机房建在亚洲了! 第一个 Linode 亚洲机房<a href="http://blog.linode.com/2011/09/19/linode-cloud-asia-pacific/">选择在日本东京</a>.</p>
<p>我测了下, 速度比原来在美国加州快多了, 应该主要得益于网络延时的减少. 所以, 我立即开了张 Support Ticket 将我的 VPS 迁到了日本. 迁完之后, 访问速度飞快! 和原来在国内某机房没有感觉上的区别.</p>
<p>大家可以反馈下你访问的速度是否有提升?</p>
<p>注: Linode VPS 是完整的 VPS, 一年的费用在人民币一千五左右, 可以月付, 建议选择年付(可优惠10%). <a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">看看去&#8230;</a></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/459.html' rel='bookmark' title='Permanent Link: IT牛人博客聚合和Linode虚拟主机'>IT牛人博客聚合和Linode虚拟主机</a></li>
<li><a href='http://www.ideawu.net/blog/archives/476.html' rel='bookmark' title='Permanent Link: Linode虚拟主机Linux安全第一步'>Linode虚拟主机Linux安全第一步</a></li>
<li><a href='http://www.ideawu.net/blog/archives/585.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP Web面试题(会做就能进百度)'>史上最强大的PHP Web面试题(会做就能进百度)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
<li><a href='http://www.ideawu.net/blog/archives/422.html' rel='bookmark' title='Permanent Link: 炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发'>炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/620.html" title="Linode日本东京机房速度飞快">Linode日本东京机房速度飞快</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>为了应对亚太地区快速增长的需求, <a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">Linode</a> 开始把机房建在亚洲了! 第一个 Linode 亚洲机房<a href="http://blog.linode.com/2011/09/19/linode-cloud-asia-pacific/">选择在日本东京</a>.</p>
<p>我测了下, 速度比原来在美国加州快多了, 应该主要得益于网络延时的减少. 所以, 我立即开了张 Support Ticket 将我的 VPS 迁到了日本. 迁完之后, 访问速度飞快! 和原来在国内某机房没有感觉上的区别.</p>
<p>大家可以反馈下你访问的速度是否有提升?</p>
<p>注: Linode VPS 是完整的 VPS, 一年的费用在人民币一千五左右, 可以月付, 建议选择年付(可优惠10%). <a href="http://www.linode.com/?r=cdac879712675bce943d61e99e1f8ea81b6b3e33">看看去&#8230;</a></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/459.html' rel='bookmark' title='Permanent Link: IT牛人博客聚合和Linode虚拟主机'>IT牛人博客聚合和Linode虚拟主机</a></li>
<li><a href='http://www.ideawu.net/blog/archives/476.html' rel='bookmark' title='Permanent Link: Linode虚拟主机Linux安全第一步'>Linode虚拟主机Linux安全第一步</a></li>
<li><a href='http://www.ideawu.net/blog/archives/585.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP Web面试题(会做就能进百度)'>史上最强大的PHP Web面试题(会做就能进百度)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
<li><a href='http://www.ideawu.net/blog/archives/422.html' rel='bookmark' title='Permanent Link: 炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发'>炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/620.html" title="Linode日本东京机房速度飞快">Linode日本东京机房速度飞快</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/620.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP浮点数显示和转成字符串</title>
		<link>http://www.ideawu.net/blog/archives/619.html</link>
		<comments>http://www.ideawu.net/blog/archives/619.html#comments</comments>
		<pubDate>Fri, 09 Sep 2011 03:33:47 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/2011/09/php%e6%b5%ae%e7%82%b9%e6%95%b0%e6%98%be%e7%a4%ba%e5%92%8c%e8%bd%ac%e6%88%90%e5%ad%97%e7%ac%a6%e4%b8%b2.html</guid>
		<description><![CDATA[<p>你可能会觉得PHP中将浮点数(float)转成字符串非常简单, 但是, 常用的方法隐藏着严重的bug. 因为, PHP在处理浮点数时有非常不合理的做法, 会有精度丢失. 经研究, 其实是PHP在显示浮点数时的问题, 也可以说是BUG. PHP内置的echo, var_dump, json_encode, 字符串拼接等函数(指令)在显示浮点数时都有问题, 导致精度丢失.</p>
<pre>
&lt;?php
$a = 1315537636.338467;
printf("%f", $a); echo "\n";
echo $a . "\n";
echo $a; echo "\n";
</pre>
<p>结果</p>
<pre>
1315537636.338467
1315537636.3385
1315537636.3385
</pre>
<p>也就是说, 用PHP最顺手的方法将浮点数转成字符串或者显示是不行的, 必须使用printf/sprintf将浮点数转成字符串.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/518.html' rel='bookmark' title='Permanent Link: if-else对优化代码冗余度的反作用'>if-else对优化代码冗余度的反作用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/468.html' rel='bookmark' title='Permanent Link: 后端开发工程师的DIV+CSS两栏布局入门'>后端开发工程师的DIV+CSS两栏布局入门</a></li>
<li><a href='http://www.ideawu.net/blog/archives/367.html' rel='bookmark' title='Permanent Link: Wordpress分页代码'>Wordpress分页代码</a></li>
<li><a href='http://www.ideawu.net/blog/archives/582.html' rel='bookmark' title='Permanent Link: PHP的continue 2'>PHP的continue 2</a></li>
<li><a href='http://www.ideawu.net/blog/archives/464.html' rel='bookmark' title='Permanent Link: 用PHP去除重复图片文件'>用PHP去除重复图片文件</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/619.html" title="PHP浮点数显示和转成字符串">PHP浮点数显示和转成字符串</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>你可能会觉得PHP中将浮点数(float)转成字符串非常简单, 但是, 常用的方法隐藏着严重的bug. 因为, PHP在处理浮点数时有非常不合理的做法, 会有精度丢失. 经研究, 其实是PHP在显示浮点数时的问题, 也可以说是BUG. PHP内置的echo, var_dump, json_encode, 字符串拼接等函数(指令)在显示浮点数时都有问题, 导致精度丢失.</p>
<pre>
&lt;?php
$a = 1315537636.338467;
printf("%f", $a); echo "\n";
echo $a . "\n";
echo $a; echo "\n";
</pre>
<p>结果</p>
<pre>
1315537636.338467
1315537636.3385
1315537636.3385
</pre>
<p>也就是说, 用PHP最顺手的方法将浮点数转成字符串或者显示是不行的, 必须使用printf/sprintf将浮点数转成字符串.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/518.html' rel='bookmark' title='Permanent Link: if-else对优化代码冗余度的反作用'>if-else对优化代码冗余度的反作用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/468.html' rel='bookmark' title='Permanent Link: 后端开发工程师的DIV+CSS两栏布局入门'>后端开发工程师的DIV+CSS两栏布局入门</a></li>
<li><a href='http://www.ideawu.net/blog/archives/367.html' rel='bookmark' title='Permanent Link: Wordpress分页代码'>Wordpress分页代码</a></li>
<li><a href='http://www.ideawu.net/blog/archives/582.html' rel='bookmark' title='Permanent Link: PHP的continue 2'>PHP的continue 2</a></li>
<li><a href='http://www.ideawu.net/blog/archives/464.html' rel='bookmark' title='Permanent Link: 用PHP去除重复图片文件'>用PHP去除重复图片文件</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/619.html" title="PHP浮点数显示和转成字符串">PHP浮点数显示和转成字符串</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/619.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache用mod_rewrite配置子域名</title>
		<link>http://www.ideawu.net/blog/archives/618.html</link>
		<comments>http://www.ideawu.net/blog/archives/618.html#comments</comments>
		<pubDate>Sun, 04 Sep 2011 14:26:02 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/2011/09/apache%e7%94%a8mod_rewrite%e9%85%8d%e7%bd%ae%e5%ad%90%e5%9f%9f%e5%90%8d.html</guid>
		<description><![CDATA[<p>虽然用vhost可以支持子域名, 但不方便.</p>
<pre>
RewriteCond $1 !^bbs/
RewriteCond %{HTTP_HOST} bbs.example.com
RewriteRule (.*) /bbs/$1 [L]
</pre>
<p>RewriteCond $1 !^bbs/ 避免内部无限redirect.</p>
<p><span id="more-618"></span><del datetime="2011-09-04T16:16:59+00:00">或者支持无限子域名:</del></p>
<pre>
RewriteCond %{ENV:Rewrite-Done} !^Yes$
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com
RewriteRule (.*) /%1/$1 [E=Rewrite-Done:Yes,L]
</pre>
<p>注: Apache mod_rewrite 有一个严重的BUG, 无法获取自己设置的环境变量. 所以上面的代码有问题! 所以还是半自动:</p>
<pre>
RewriteCond $1 !^bbs/
RewriteCond $1 !^OTHER_SUBDOMAIN/
......
# BUG: RewriteCond %{ENV:Rewrite-Done} !^Yes$
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com
RewriteRule (.*) /%1/$1 [E=Rewrite-Done:Yes,L]
</pre>
<p><strong>补充</strong>: <a href="http://xiaobin.net/201109/apache-mapping-subdomain-to-subdir-with-mod_vhost_alias/">xiaobin</a> 提到可以使用 vhost_alias 模块. 我在他的基础之上做了改进, 结合 mod_rewrite, 可以更好的兼容www子域:</p>
<pre>
&lt;VirtualHost *:80&gt;
	ServerAlias ideawu.net *.ideawu.net
	VirtualDocumentRoot /home/work/htdocs/ideawu.net/%1

	RewriteEngine On
	RewriteCond %{HTTP_HOST} ^ideawu.net$
	RewriteRule /(.*) http://www.ideawu.net/$1 [R=301,L]
&lt;/VirtualHost&gt;
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/447.html' rel='bookmark' title='Permanent Link: Linux下编译安装Apache/Lighttpd+PHP+MySQL'>Linux下编译安装Apache/Lighttpd+PHP+MySQL</a></li>
<li><a href='http://www.ideawu.net/blog/archives/494.html' rel='bookmark' title='Permanent Link: 链接包含&#8221;%2F&#8221;导致mod_rewrite失效'>链接包含&#8221;%2F&#8221;导致mod_rewrite失效</a></li>
<li><a href='http://www.ideawu.net/blog/archives/556.html' rel='bookmark' title='Permanent Link: lighttpd配置HTTPS(SSL)'>lighttpd配置HTTPS(SSL)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/169.html' rel='bookmark' title='Permanent Link: Tomcat网站server.xml设置'>Tomcat网站server.xml设置</a></li>
<li><a href='http://www.ideawu.net/blog/archives/26.html' rel='bookmark' title='Permanent Link: Apache2的httpd.conf翻译'>Apache2的httpd.conf翻译</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/618.html" title="Apache用mod_rewrite配置子域名">Apache用mod_rewrite配置子域名</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>虽然用vhost可以支持子域名, 但不方便.</p>
<pre>
RewriteCond $1 !^bbs/
RewriteCond %{HTTP_HOST} bbs.example.com
RewriteRule (.*) /bbs/$1 [L]
</pre>
<p>RewriteCond $1 !^bbs/ 避免内部无限redirect.</p>
<p><span id="more-618"></span><del datetime="2011-09-04T16:16:59+00:00">或者支持无限子域名:</del></p>
<pre>
RewriteCond %{ENV:Rewrite-Done} !^Yes$
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com
RewriteRule (.*) /%1/$1 [E=Rewrite-Done:Yes,L]
</pre>
<p>注: Apache mod_rewrite 有一个严重的BUG, 无法获取自己设置的环境变量. 所以上面的代码有问题! 所以还是半自动:</p>
<pre>
RewriteCond $1 !^bbs/
RewriteCond $1 !^OTHER_SUBDOMAIN/
......
# BUG: RewriteCond %{ENV:Rewrite-Done} !^Yes$
RewriteCond %{HTTP_HOST} !^www\.example\.com
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com
RewriteRule (.*) /%1/$1 [E=Rewrite-Done:Yes,L]
</pre>
<p><strong>补充</strong>: <a href="http://xiaobin.net/201109/apache-mapping-subdomain-to-subdir-with-mod_vhost_alias/">xiaobin</a> 提到可以使用 vhost_alias 模块. 我在他的基础之上做了改进, 结合 mod_rewrite, 可以更好的兼容www子域:</p>
<pre>
&lt;VirtualHost *:80&gt;
	ServerAlias ideawu.net *.ideawu.net
	VirtualDocumentRoot /home/work/htdocs/ideawu.net/%1

	RewriteEngine On
	RewriteCond %{HTTP_HOST} ^ideawu.net$
	RewriteRule /(.*) http://www.ideawu.net/$1 [R=301,L]
&lt;/VirtualHost&gt;
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/447.html' rel='bookmark' title='Permanent Link: Linux下编译安装Apache/Lighttpd+PHP+MySQL'>Linux下编译安装Apache/Lighttpd+PHP+MySQL</a></li>
<li><a href='http://www.ideawu.net/blog/archives/494.html' rel='bookmark' title='Permanent Link: 链接包含&#8221;%2F&#8221;导致mod_rewrite失效'>链接包含&#8221;%2F&#8221;导致mod_rewrite失效</a></li>
<li><a href='http://www.ideawu.net/blog/archives/556.html' rel='bookmark' title='Permanent Link: lighttpd配置HTTPS(SSL)'>lighttpd配置HTTPS(SSL)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/169.html' rel='bookmark' title='Permanent Link: Tomcat网站server.xml设置'>Tomcat网站server.xml设置</a></li>
<li><a href='http://www.ideawu.net/blog/archives/26.html' rel='bookmark' title='Permanent Link: Apache2的httpd.conf翻译'>Apache2的httpd.conf翻译</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/618.html" title="Apache用mod_rewrite配置子域名">Apache用mod_rewrite配置子域名</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/618.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>云计算不靠谱?</title>
		<link>http://www.ideawu.net/blog/archives/615.html</link>
		<comments>http://www.ideawu.net/blog/archives/615.html#comments</comments>
		<pubDate>Sun, 07 Aug 2011 12:57:17 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[IT技术和评论]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/?p=615</guid>
		<description><![CDATA[<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/08/dark-clouds-200x133.jpg" alt="" title="dark-clouds" width="200" height="133" class="alignright size-thumbnail wp-image-616" /></p>
<p>最近, 两大知名的社交游戏厂商, Zynga 和 Digital Chocolate 开始建造自己的服务器硬件环境(IDC)了. 之前, 这两家公司完全使用的是 Amazon 的 AWS 云计算服务. 也就是说, 虽然他们从创业到发展壮大, 却从来不知道也不用关心自己所用的服务器和机房是什么样子. 但是, 现在他们开始控制这部分的内容了, 比如Zynga 建造自己了云计算环境.</p>
<p>这似乎就是云计算服务的作用, 它可以帮助你创业时减少支基础计算能力的考虑, 关注于自己的服务更好的服务于用户. 但一旦发展壮大, 就要把云给踢开了.</p>
<p>不过, 在中国创业初期连这个选择都没有, 必须一开始就要被服务器购买, IDC 机架位租用, 操作系统和软件(如 LAMP)安装等烦恼, 更困难的还是在与管理部门打交道, 耗费大量精力.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/476.html' rel='bookmark' title='Permanent Link: Linode虚拟主机Linux安全第一步'>Linode虚拟主机Linux安全第一步</a></li>
<li><a href='http://www.ideawu.net/blog/archives/585.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP Web面试题(会做就能进百度)'>史上最强大的PHP Web面试题(会做就能进百度)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
<li><a href='http://www.ideawu.net/blog/archives/422.html' rel='bookmark' title='Permanent Link: 炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发'>炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/615.html" title="云计算不靠谱?">云计算不靠谱?</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/08/dark-clouds-200x133.jpg" alt="" title="dark-clouds" width="200" height="133" class="alignright size-thumbnail wp-image-616" /></p>
<p>最近, 两大知名的社交游戏厂商, Zynga 和 Digital Chocolate 开始建造自己的服务器硬件环境(IDC)了. 之前, 这两家公司完全使用的是 Amazon 的 AWS 云计算服务. 也就是说, 虽然他们从创业到发展壮大, 却从来不知道也不用关心自己所用的服务器和机房是什么样子. 但是, 现在他们开始控制这部分的内容了, 比如Zynga 建造自己了云计算环境.</p>
<p>这似乎就是云计算服务的作用, 它可以帮助你创业时减少支基础计算能力的考虑, 关注于自己的服务更好的服务于用户. 但一旦发展壮大, 就要把云给踢开了.</p>
<p>不过, 在中国创业初期连这个选择都没有, 必须一开始就要被服务器购买, IDC 机架位租用, 操作系统和软件(如 LAMP)安装等烦恼, 更困难的还是在与管理部门打交道, 耗费大量精力.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/476.html' rel='bookmark' title='Permanent Link: Linode虚拟主机Linux安全第一步'>Linode虚拟主机Linux安全第一步</a></li>
<li><a href='http://www.ideawu.net/blog/archives/585.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP Web面试题(会做就能进百度)'>史上最强大的PHP Web面试题(会做就能进百度)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
<li><a href='http://www.ideawu.net/blog/archives/422.html' rel='bookmark' title='Permanent Link: 炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发'>炮轰IT写书神棍 &#8211; 由炮轰JavaScript征途有感而发</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/615.html" title="云计算不靠谱?">云计算不靠谱?</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/615.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fn和CTRL的故事</title>
		<link>http://www.ideawu.net/blog/archives/614.html</link>
		<comments>http://www.ideawu.net/blog/archives/614.html#comments</comments>
		<pubDate>Fri, 05 Aug 2011 14:55:50 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Computer System]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/2011/08/fn%e5%92%8cctrl%e7%9a%84%e6%95%85%e4%ba%8b.html</guid>
		<description><![CDATA[<p>从前, 键盘工程师新创造了一个叫&#8221;Fn&#8221;的人造人, 想把它加入到键盘按键的队伍里. 工程师想, 它是一个革命性的产品, 因为, 它功能强大, 这从它的名字就能看出它的工程师老母对它的期望. 它可以帮忙打开键盘灯, 这样, 在黑暗中你也可以使用笔记本电脑. 它还可以帮忙调整屏幕亮度, 调整音量, 真是一个强大贴心的助手. 所以, 工程师决定把它放到了原来一个叫&#8221;CTRL&#8221;的人的位置, 把CTRL排挤到了一边. 那是键盘上最左下角的地方, 也是手指流量最密集的地方.</p>
<p>但是, Fn并不受欢迎, 因为没有人经常需要, 没有人天天不停地打开和关闭键盘灯, 即使好几年下来有一天遇到了, 先开灯或者在进入黑暗之前打开键盘灯也很正常.</p>
<p>相反, 人们怀念CTRL, 因为人们每天要把手指放在CTRL上面上千遍:</p>
<p>CTRL + C: 复制<br />
CTRL + V: 粘贴<br />
CTRL + S: 保存<br />
CTRL + A: 全选<br />
CTRL + X: 剪切<br />
CTRL + W: 关闭窗口<br />
CTRL + T: 打开浏览器标签<br />
CTRL + 空格: 切换输入法</p>
<p>对比Fn, Fn用不了一两回. 因为那些自以为是很内裤的功能, 其实都是和硬件有关, 根本就不常用到. 比如谁会没事按Fn让自己的键盘灯一亮一灭的, 或者没完没了地调整屏幕亮度和音量, 他有病啊!</p>
<p>大部分的电脑厂商都明白了这个道理, 绝情地把Fn赶走了, 重新迎回CTRL. 但是, 有一个叫IBM的巨人和它的买主还是坚持迂腐, 感情上不愿意把CTRL接回来, 最终决定帮人在BIOS里偷偷给Fn和CTRL换了衣服.</p>
<p>Fn垂头丧气, 成了不受欢迎的失败产品. 现在, 它在寻找一个最不起眼的角落, 想静地躺在那里, 不要像以前那么招摇.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/512.html' rel='bookmark' title='Permanent Link: screen 命令使用'>screen 命令使用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/42.html' rel='bookmark' title='Permanent Link: Linux不是Windows'>Linux不是Windows</a></li>
<li><a href='http://www.ideawu.net/blog/archives/514.html' rel='bookmark' title='Permanent Link: endlessssh &#8211; SSH 代理工具'>endlessssh &#8211; SSH 代理工具</a></li>
<li><a href='http://www.ideawu.net/blog/archives/358.html' rel='bookmark' title='Permanent Link: Mesh: 对象的多对多关系'>Mesh: 对象的多对多关系</a></li>
<li><a href='http://www.ideawu.net/blog/archives/281.html' rel='bookmark' title='Permanent Link: 使用流水线来实现并发'>使用流水线来实现并发</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/614.html" title="Fn和CTRL的故事">Fn和CTRL的故事</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>从前, 键盘工程师新创造了一个叫&#8221;Fn&#8221;的人造人, 想把它加入到键盘按键的队伍里. 工程师想, 它是一个革命性的产品, 因为, 它功能强大, 这从它的名字就能看出它的工程师老母对它的期望. 它可以帮忙打开键盘灯, 这样, 在黑暗中你也可以使用笔记本电脑. 它还可以帮忙调整屏幕亮度, 调整音量, 真是一个强大贴心的助手. 所以, 工程师决定把它放到了原来一个叫&#8221;CTRL&#8221;的人的位置, 把CTRL排挤到了一边. 那是键盘上最左下角的地方, 也是手指流量最密集的地方.</p>
<p>但是, Fn并不受欢迎, 因为没有人经常需要, 没有人天天不停地打开和关闭键盘灯, 即使好几年下来有一天遇到了, 先开灯或者在进入黑暗之前打开键盘灯也很正常.</p>
<p>相反, 人们怀念CTRL, 因为人们每天要把手指放在CTRL上面上千遍:</p>
<p>CTRL + C: 复制<br />
CTRL + V: 粘贴<br />
CTRL + S: 保存<br />
CTRL + A: 全选<br />
CTRL + X: 剪切<br />
CTRL + W: 关闭窗口<br />
CTRL + T: 打开浏览器标签<br />
CTRL + 空格: 切换输入法</p>
<p>对比Fn, Fn用不了一两回. 因为那些自以为是很内裤的功能, 其实都是和硬件有关, 根本就不常用到. 比如谁会没事按Fn让自己的键盘灯一亮一灭的, 或者没完没了地调整屏幕亮度和音量, 他有病啊!</p>
<p>大部分的电脑厂商都明白了这个道理, 绝情地把Fn赶走了, 重新迎回CTRL. 但是, 有一个叫IBM的巨人和它的买主还是坚持迂腐, 感情上不愿意把CTRL接回来, 最终决定帮人在BIOS里偷偷给Fn和CTRL换了衣服.</p>
<p>Fn垂头丧气, 成了不受欢迎的失败产品. 现在, 它在寻找一个最不起眼的角落, 想静地躺在那里, 不要像以前那么招摇.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/512.html' rel='bookmark' title='Permanent Link: screen 命令使用'>screen 命令使用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/42.html' rel='bookmark' title='Permanent Link: Linux不是Windows'>Linux不是Windows</a></li>
<li><a href='http://www.ideawu.net/blog/archives/514.html' rel='bookmark' title='Permanent Link: endlessssh &#8211; SSH 代理工具'>endlessssh &#8211; SSH 代理工具</a></li>
<li><a href='http://www.ideawu.net/blog/archives/358.html' rel='bookmark' title='Permanent Link: Mesh: 对象的多对多关系'>Mesh: 对象的多对多关系</a></li>
<li><a href='http://www.ideawu.net/blog/archives/281.html' rel='bookmark' title='Permanent Link: 使用流水线来实现并发'>使用流水线来实现并发</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/614.html" title="Fn和CTRL的故事">Fn和CTRL的故事</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/614.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>强大的纯JS数据图工具-flot</title>
		<link>http://www.ideawu.net/blog/archives/611.html</link>
		<comments>http://www.ideawu.net/blog/archives/611.html#comments</comments>
		<pubDate>Wed, 03 Aug 2011 17:03:09 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[flot]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/?p=611</guid>
		<description><![CDATA[<p>发现一个在网页中绘制数据图, 如曲线图, 柱状图的纯 JavaScript 工具: <a href="http://code.google.com/p/flot/">flot</a>. 极度推荐啊! 有图和代码为证:</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/08/flot.png" alt="" title="flot" width="526" height="253" class="alignnone size-full wp-image-612" /></p>
<p>*代码附后*</p>
<p>以前知道的工具有 <a href="http://teethgrinder.co.uk/open-flash-chart/index.php">Open Flash Chart</a>, 还有 Google 出品的 <a href="http://code.google.com/apis/chart/">Google Chart Tool</a>. 两者使用不同的技术, 同时也是两种截然不同的设计理念. 相比较而言, 我更认同 Google Chart 的设计理念. 原因如下:</p>
<p><span id="more-611"></span>Open Flash Chart 使用 Flash 来做图, 这本来也可以接受. 但是, 图形的样式必须通过一个 URL 返回的数据来指定, 而不是网页端技术.</p>
<p>Google Chart Tool 使用 VML 来做图, 同时实现数据和表现的分离, 是 MVC 的思想. 这样的好处是, 同一份数据, 可以用来显示曲线图, 也可以显示成柱状图等等.</p>
<p>显而易见, Open Flash Chart 的技术和理念太陈旧了, 所以不推荐使用. 但是, Google Chart Tool 也有一个重大缺陷, 就是不能离线使用. 当网络状况不好时(在中国大陆经常遇到), 就没法使用了. Google 太霸道, 也不能用.</p>
<p>flot 也是 Google Chart Tool 类似的理念, 所以使用起来非常方便, 而且 demo 代码简单修改就能运行, 学习曲线非常轻松. 而且完美支持 IE6.</p>
<p>附一个可以运行的 flot 例子代码, 将下面的代码保存成 a.html, 然后到 flot 网站下载 JavaScript 代码, 保证路径正确即可用浏览器打开看效果.</p>
<pre>
&lt;html&gt;
&lt;head&gt;
	&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&gt;
	&lt;title&gt;flot&lt;/title&gt;
	&lt;!--[if lte IE 8]&gt;
		&lt;script language="javascript" type="text/javascript" src="excanvas.min.js"&gt;&lt;/script&gt;
	&lt;![endif]--&gt;
	&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
	&lt;script type="text/javascript" src="jquery.flot.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;script type="text/javascript"&gt;
&lt;!--
var data = [];
data.push({
    "label": "中国",
    "data": [[2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1]]
});

$(function(){
    var options = {
        lines: { show: true },
        points: { show: true },
        xaxis: { tickDecimals: 0, tickSize: 1 }
    };
    var placeholder = $("#placeholder");
    $.plot(placeholder, data, options);
});
//--&gt;
&lt;/script&gt;

&lt;div id="placeholder" style="width:500px;height:240px"&gt;&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>flot 项目首页: <a href="http://code.google.com/p/flot/">http://code.google.com/p/flot/</a></p>
<p><strong>补充:</strong> 再推荐另外一个非常不错的工具 &#8211; <a href="http://www.highcharts.com/">Highcharts</a>, 看起来功能更强大, 但还没调研使用是否简便.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/399.html' rel='bookmark' title='Permanent Link: JavaScript+jQuery两栏选择控件'>JavaScript+jQuery两栏选择控件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/434.html' rel='bookmark' title='Permanent Link: 最简单的JavaScript两级联动示例'>最简单的JavaScript两级联动示例</a></li>
<li><a href='http://www.ideawu.net/blog/archives/270.html' rel='bookmark' title='Permanent Link: 使用Python POST任意的HTTP数据以及使用Cookie'>使用Python POST任意的HTTP数据以及使用Cookie</a></li>
<li><a href='http://www.ideawu.net/blog/archives/412.html' rel='bookmark' title='Permanent Link: JavaScript分页控件'>JavaScript分页控件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/542.html' rel='bookmark' title='Permanent Link: 以浏览器为核心的客户端软件的安全问题'>以浏览器为核心的客户端软件的安全问题</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/611.html" title="强大的纯JS数据图工具-flot">强大的纯JS数据图工具-flot</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>发现一个在网页中绘制数据图, 如曲线图, 柱状图的纯 JavaScript 工具: <a href="http://code.google.com/p/flot/">flot</a>. 极度推荐啊! 有图和代码为证:</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/08/flot.png" alt="" title="flot" width="526" height="253" class="alignnone size-full wp-image-612" /></p>
<p>*代码附后*</p>
<p>以前知道的工具有 <a href="http://teethgrinder.co.uk/open-flash-chart/index.php">Open Flash Chart</a>, 还有 Google 出品的 <a href="http://code.google.com/apis/chart/">Google Chart Tool</a>. 两者使用不同的技术, 同时也是两种截然不同的设计理念. 相比较而言, 我更认同 Google Chart 的设计理念. 原因如下:</p>
<p><span id="more-611"></span>Open Flash Chart 使用 Flash 来做图, 这本来也可以接受. 但是, 图形的样式必须通过一个 URL 返回的数据来指定, 而不是网页端技术.</p>
<p>Google Chart Tool 使用 VML 来做图, 同时实现数据和表现的分离, 是 MVC 的思想. 这样的好处是, 同一份数据, 可以用来显示曲线图, 也可以显示成柱状图等等.</p>
<p>显而易见, Open Flash Chart 的技术和理念太陈旧了, 所以不推荐使用. 但是, Google Chart Tool 也有一个重大缺陷, 就是不能离线使用. 当网络状况不好时(在中国大陆经常遇到), 就没法使用了. Google 太霸道, 也不能用.</p>
<p>flot 也是 Google Chart Tool 类似的理念, 所以使用起来非常方便, 而且 demo 代码简单修改就能运行, 学习曲线非常轻松. 而且完美支持 IE6.</p>
<p>附一个可以运行的 flot 例子代码, 将下面的代码保存成 a.html, 然后到 flot 网站下载 JavaScript 代码, 保证路径正确即可用浏览器打开看效果.</p>
<pre>
&lt;html&gt;
&lt;head&gt;
	&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"/&gt;
	&lt;title&gt;flot&lt;/title&gt;
	&lt;!--[if lte IE 8]&gt;
		&lt;script language="javascript" type="text/javascript" src="excanvas.min.js"&gt;&lt;/script&gt;
	&lt;![endif]--&gt;
	&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
	&lt;script type="text/javascript" src="jquery.flot.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;script type="text/javascript"&gt;
&lt;!--
var data = [];
data.push({
    "label": "中国",
    "data": [[2000, 3.9], [2001, 2.0], [2002, 1.2], [2003, 1.3], [2004, 2.5], [2005, 2.0], [2006, 3.1]]
});

$(function(){
    var options = {
        lines: { show: true },
        points: { show: true },
        xaxis: { tickDecimals: 0, tickSize: 1 }
    };
    var placeholder = $("#placeholder");
    $.plot(placeholder, data, options);
});
//--&gt;
&lt;/script&gt;

&lt;div id="placeholder" style="width:500px;height:240px"&gt;&lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>flot 项目首页: <a href="http://code.google.com/p/flot/">http://code.google.com/p/flot/</a></p>
<p><strong>补充:</strong> 再推荐另外一个非常不错的工具 &#8211; <a href="http://www.highcharts.com/">Highcharts</a>, 看起来功能更强大, 但还没调研使用是否简便.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/399.html' rel='bookmark' title='Permanent Link: JavaScript+jQuery两栏选择控件'>JavaScript+jQuery两栏选择控件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/434.html' rel='bookmark' title='Permanent Link: 最简单的JavaScript两级联动示例'>最简单的JavaScript两级联动示例</a></li>
<li><a href='http://www.ideawu.net/blog/archives/270.html' rel='bookmark' title='Permanent Link: 使用Python POST任意的HTTP数据以及使用Cookie'>使用Python POST任意的HTTP数据以及使用Cookie</a></li>
<li><a href='http://www.ideawu.net/blog/archives/412.html' rel='bookmark' title='Permanent Link: JavaScript分页控件'>JavaScript分页控件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/542.html' rel='bookmark' title='Permanent Link: 以浏览器为核心的客户端软件的安全问题'>以浏览器为核心的客户端软件的安全问题</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/611.html" title="强大的纯JS数据图工具-flot">强大的纯JS数据图工具-flot</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/611.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>概率选取的实现</title>
		<link>http://www.ideawu.net/blog/archives/610.html</link>
		<comments>http://www.ideawu.net/blog/archives/610.html#comments</comments>
		<pubDate>Wed, 03 Aug 2011 01:02:49 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Computer System]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/2011/08/%e6%a6%82%e7%8e%87%e9%80%89%e5%8f%96%e7%9a%84%e5%ae%9e%e7%8e%b0.html</guid>
		<description><![CDATA[<p>常常有这样的功能需求: 每次从一批候选项中随机选取其中一项, 要求每一项的出现都有一定的概率. 比如说, 有如下候选项和对应的概率: A:10%, B:5%, C:25%, D:60%.</p>
<p>现在, 把每一项的概率用一个正整数(概率值)来表示, 不使用百分率, 整数的总和不一定等于100, 可以是任意大小,</p>
<pre>实际概率 = 概率值/总和 * 100%</pre>
<p>概率选取的算法如下:</p>
<ul>
<li>依次(顺序可随机)将各项按概率值从原点开始放在一维坐标上首尾相连, 这样, 每一项对应一个取值区间</li>
<li>在总区间范围内随机选取一个点, 落在哪一项对应的区间就选中哪一项</li>
</ul>
<p>用伪码表示:</p>
<pre>
total_p = sum(p1 + p2 + p3 + ...)
rand = random(1, total_p) // [1, total_p]
foreach(items as item){
    rand -= item.p
    if(rand &lt;= 0){
        // 选中了
    }
}
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/302.html' rel='bookmark' title='Permanent Link: 生产者消费者模型中生产者的速度快于消费者时所产生的问题及其解决方法讨论'>生产者消费者模型中生产者的速度快于消费者时所产生的问题及其解决方法讨论</a></li>
<li><a href='http://www.ideawu.net/blog/archives/438.html' rel='bookmark' title='Permanent Link: PHP中使用foreach和引用导致程序BUG'>PHP中使用foreach和引用导致程序BUG</a></li>
<li><a href='http://www.ideawu.net/blog/archives/202.html' rel='bookmark' title='Permanent Link: 写自己的 http_build_query'>写自己的 http_build_query</a></li>
<li><a href='http://www.ideawu.net/blog/archives/495.html' rel='bookmark' title='Permanent Link: 开发搜索引擎 &#8211; PHP中文分词'>开发搜索引擎 &#8211; PHP中文分词</a></li>
<li><a href='http://www.ideawu.net/blog/archives/606.html' rel='bookmark' title='Permanent Link: 关系数据库应用设计基础'>关系数据库应用设计基础</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/610.html" title="概率选取的实现">概率选取的实现</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>常常有这样的功能需求: 每次从一批候选项中随机选取其中一项, 要求每一项的出现都有一定的概率. 比如说, 有如下候选项和对应的概率: A:10%, B:5%, C:25%, D:60%.</p>
<p>现在, 把每一项的概率用一个正整数(概率值)来表示, 不使用百分率, 整数的总和不一定等于100, 可以是任意大小,</p>
<pre>实际概率 = 概率值/总和 * 100%</pre>
<p>概率选取的算法如下:</p>
<ul>
<li>依次(顺序可随机)将各项按概率值从原点开始放在一维坐标上首尾相连, 这样, 每一项对应一个取值区间</li>
<li>在总区间范围内随机选取一个点, 落在哪一项对应的区间就选中哪一项</li>
</ul>
<p>用伪码表示:</p>
<pre>
total_p = sum(p1 + p2 + p3 + ...)
rand = random(1, total_p) // [1, total_p]
foreach(items as item){
    rand -= item.p
    if(rand &lt;= 0){
        // 选中了
    }
}
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/302.html' rel='bookmark' title='Permanent Link: 生产者消费者模型中生产者的速度快于消费者时所产生的问题及其解决方法讨论'>生产者消费者模型中生产者的速度快于消费者时所产生的问题及其解决方法讨论</a></li>
<li><a href='http://www.ideawu.net/blog/archives/438.html' rel='bookmark' title='Permanent Link: PHP中使用foreach和引用导致程序BUG'>PHP中使用foreach和引用导致程序BUG</a></li>
<li><a href='http://www.ideawu.net/blog/archives/202.html' rel='bookmark' title='Permanent Link: 写自己的 http_build_query'>写自己的 http_build_query</a></li>
<li><a href='http://www.ideawu.net/blog/archives/495.html' rel='bookmark' title='Permanent Link: 开发搜索引擎 &#8211; PHP中文分词'>开发搜索引擎 &#8211; PHP中文分词</a></li>
<li><a href='http://www.ideawu.net/blog/archives/606.html' rel='bookmark' title='Permanent Link: 关系数据库应用设计基础'>关系数据库应用设计基础</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/610.html" title="概率选取的实现">概率选取的实现</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/610.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>中科院院士简水生：让时间去考验京沪高铁吧</title>
		<link>http://www.ideawu.net/blog/archives/608.html</link>
		<comments>http://www.ideawu.net/blog/archives/608.html#comments</comments>
		<pubDate>Tue, 26 Jul 2011 07:06:55 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[etc]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/2011/07/%e4%b8%ad%e7%a7%91%e9%99%a2%e9%99%a2%e5%a3%ab%e7%ae%80%e6%b0%b4%e7%94%9f%ef%bc%9a%e8%ae%a9%e6%97%b6%e9%97%b4%e5%8e%bb%e8%80%83%e9%aa%8c%e4%ba%ac%e6%b2%aa%e9%ab%98%e9%93%81%e5%90%a7.html</guid>
		<description><![CDATA[<blockquote><p>提示: 这篇新闻稿的开头很容易让人起疑惑, 甚至是头脑发热地愤怒. 但是, 如果你认真看完, 动脑思考, 而不是仅限于表面, 你就会发现这位院士道出了惊天内幕! 特别是结尾那一句:&#8221;既然有这样的说法，我们就不吭声了，让时间去考验吧。&#8221;值得让人思考.</p></blockquote>
<p>京沪高铁刚刚开通十多天，就已发生多起故障，共造成数十趟列车晚点，以致人们惊呼：高铁变成了蜗牛。</p>
<p>值得探究的是，尽管有工程监管制度，但中国许多重大工程完工后，为什么仍是质量问题百出？我们如何才能从根本上减少工程质量问题？</p>
<p><span id="more-608"></span>我们看到，中国制造的世界上跨度最大的桥梁之一，美国旧金山奥克兰海湾大桥东段，其桥面钢箱梁在全部通过报验，本准备装船起运的时候，项目总承包方美国加州交通部却提出采用全球顶尖的相控阵技术对产品进行“D向扫查”检验，“1毫米、2毫米一个点进行复探”，远高于美国焊接协会的桥梁规范，据说检测结果令美国人心服口服。</p>
<p>由此可见，中国制造绝对不是粗制滥造的代名词，问题在于能否所有的中国制造中都有严格的质量监管和高度的责任心？</p>
<p>曾经参与京沪高铁项目论证的中国科学院院士、中国铁道学会学术委员会副主任委员、光通信领域著名科学家、北京交通大学光波技术研究所所长简水生教授，7月13日接受《华夏时报》专访，回答了相关问题。</p>
<p><b>更多隐患尚未公开</b></p>
<p>《华夏时报》：京沪高铁开通短短十多天来已连续发生多起故障，这让我们该如何客观评价其安全质量？</p>
<p>简水生：现在是刚刚开始，随着时间的推移，才能看得更清楚。</p>
<p>《华夏时报》：业内有分析说，按照要求，接触网如果断电，列车或失去电源，不过京沪高铁列车自备120分钟的电源、通风功能。但为何最近两次京沪高铁滞留期间，列车自备应急电力和通风系统并没有发挥作用？</p>
<p>简水生：不，京沪高铁列车自备的电源，肯定走不了120分钟。120分钟的自备电源可以跑多少公里呢？600公里。但实际的情形，人们看到了，可能吗？根本不可能。二分之一MV（M是重量，V是速度）平方300公里的速度，你们算算，有多大能量？列车能有多少储电池？或者能有发电机吗？</p>
<p>《华夏时报》：我们看到，京沪高铁才开通十多天，就发生多起所谓接触网的问题。</p>
<p>简水生：接触网是最容易发生问题的，因为其本身摩擦很厉害。因为列车速度越高，输电弓在接触网上的摩擦速度或跳动频率也越快，摩擦阻力与速度起码成正比，甚至是高次方，所以在雷雨天气容易发生问题。我觉得，京沪高铁整个的防雷系统还不行。防雷系统应在沿线都做好，如果某个地方地质条件好，导电力很高，就可以吸引全部雷电；如果导电力不高，雷电发生时，结果就可能很糟糕。因此，防雷是个比较复杂的问题。</p>
<p>《华夏时报》：如此复杂的问题，在京沪高铁这样重大的工程中没有加以周全考虑吗？</p>
<p>简水生：没有考虑。列车运行时，输电弓在接触网上一直处于动态，若列车以300公里的高速运行，输电弓在任何条件下都必须始终接触良好才行。</p>
<p>《华夏时报》：据说整个京沪高铁系统在建设时都有防雷的考虑，供电网、列车都应该有防雷系统。那么，我们该如何理解故障的发生？</p>
<p>简水生：防雷系统的作用主要是在下大雨的时候，防止磁隔电子表面电子达到限相发生短路。也就是说，每一串挂导线的瓷瓶，要承受27500伏安的电压，遇到雨量特别大的雷雨天气，瓷瓶的电阻可能就会改变。</p>
<p>《华夏时报》：既然输电弓与接触网动态接触的防雷技术不过关，若由此推论，今后相关问题会否发生？</p>
<p>简水生：还有最大的问题要加以考虑。</p>
<p>《华夏时报》：是关于轮轨的问题，还是关于输电等动力系统的问题？</p>
<p>简水生：也可以说是轮轨的问题。实际上，我们可以说，轴是中国人自己制造的，但轴承却不是我们自己制造的。而且，轴承的钢材(4895,-5.00,-0.10%)是什么，也不太清楚。里面的润滑剂是固态的，列车开起来之后，固态润滑剂变成了液态。我们学校的老师曾经做过实验，原先说京沪高铁要跑350公里，按照规定，在实验台上就得跑385公里。</p>
<p>我们看到，如果实际是跑300公里，这个技术在实验台上，加10%，跑330公里，可以跑到好几十万公里吧。但跑385公里，跑到2万多公里的时候，就不行了。所以后来为什么退下来？就是这个原因。现在我们是把瞬态的东西，看做自己的成绩，这怎么行？人家国外一个实验，根本不能算数的。法国高铁实验在好几年前就跑过了一趟瞬间574公里，但当时钢轨就已经不行了，都拧了。</p>
<p>这与导弹技术不一样。导弹一次就发射出去，说多快，就多快。所以，钱学森当时说，如果我们发展飞机制造业，材料不过关，因为飞机要使用N次。高铁就更不能跑一趟瞬间高速就算数了，一年365天，天天都要跑的。</p>
<p><b>器件隐患要认真排除</b></p>
<p>《华夏时报》：舆论批评如此重大的工程尤其不应片面追求建设速度，而忽视对工程质量的严格检验检测，甚至搞成献礼工程、政绩工程，因为那将是对人民生命安全和公共财产安全的严重不负责任，您怎么看？安全第一不是高铁运营的最基本方针吗？</p>
<p>简水生：工程质量应该严格检测只是一方面。</p>
<p>我跟你大概地说一件事情。中国的高铁，全部采用无砟的整体道床。2000年我去欧洲做本专业的考察研究，但我到了英法德、到了比利时、丹麦、西班牙等好几个国家都仔细看了他们的高铁铁路，发现都是有砟的。只有德国做了一段无砟整体道床实验，但当时的部长却拍板决定中国的高铁都采用这种无砟整体道床，谁也不敢提不同意见。</p>
<p>实际上，列车在有砟道床上运行到每小时300公里的速度，是没多大问题的，道床上的小石头子起着很大作用。高速铁路上的钢轨，是由每一根长达100多公里的钢轨焊接起来的，其温度膨胀系数，是1.1乘以10的负5次方，也就是温度每变化摄氏一度，钢轨就伸长或缩短1.1米。当夏天的时候，钢轨晒得发烫，起码有60多摄氏度，到了晚上，又凉下来，热胀冷缩的问题靠谁来解决？一胀轨，稍微有一点轨距，列车就翻了。就靠着轨枕上的铆钉将钢轨铆住，严格防止胀轨或缩轨的问题。</p>
<p>除了铆钉在轨枕上的抑制力量，还有一个抑制力量，那就是列车前行的时候，是以二分之一MV平方向前冲的力量，将钢轨整体向后拉，但此时钢轨却被石头子卡住了，石头子吃掉了其中的力量。所以我们看到铁路上的石头子经常是粉碎的，养路工人经常要更新这些石头子。</p>
<p>无砟整体道床靠得则是压在钢板下的弹簧抵消应力。但弹簧能否消除温度变化产生的钢轨伸缩问题，与弹簧自身的钢材有关。而更严重的问题是，二分之一MV平方向前冲的力量，都吃在弹簧上了，很可能使得弹簧发生崩裂，这方面，没有做过任何科学研究分析。</p>
<p>究竟这弹簧的钢材要求多高强度，能维持多长时间？任何钢材在不断的应力作用下，都会弹性疲乏，一旦弹性疲乏，一旦龟裂，就可能断掉，那时的钢轨将如何稳定？这个问题可比接触网问题大得多了。</p>
<p>即使可以更换弹簧，所发生的费用也很可观。而且，高架上900吨一根梁的价格，与平地上建设有砟道床的价格相比，要贵得多。何况现在要修16000公里高铁。这些问题，都需要经过充分的论证。速度越快，所有的钢材，都要重新考虑。这里面的隐患必须加以排除。</p>
<p>《华夏时报》：德国人的那个无砟整体道床实验，后来并没有成功地付诸实际运用吗？</p>
<p>简水生：德国并没有正规运行，那个发明者曾公开在电视上表示，其在德国总共才做了10公里的实验段。</p>
<p>《华夏时报》：京沪高铁的开通运行似乎标志着中国在铁路技术上进入了世界先进行列，但遭遇雷击发生触网故障是否意味着在高度精确精细的现代技术方面还有差距，还面临很艰巨的挑战？</p>
<p>简水生：让时间去考验吧。</p>
<p>《华夏时报》：我们看到有报道说，今年6月初，国内30名工程界院士、专家，在即将开通运营的京沪高铁上进行了检查评估，在对轨道、通信信号牵引供电、动车组、运营安全等情况进行专项检查后，专家组认为，京沪高铁轨道状态达到了高平顺和高稳定的要求；通信信号和牵引供电系统稳定可靠；运营安全保障设施齐全，开行方案合理，各项检测指标完全具备开通运营条件。您如何看待这个结论？</p>
<p>简水生：被请去做检查评估的人，未必全是专家。比如在通信信号安全的问题上，当时他们的调度电话系统采用的是一种老制式的东西，很容易被别人攻破，而且其频带与中国移动的频带一样，于是我提出，这套系统将来可能很危险。当然，也可以采取密钥通信的方式来防止和避免被攻击，但其带宽又太小。所以，评估是否全面？</p>
<p>《华夏时报》：据报道所谓日中高铁技术探究领域内拥有高度权威的日本拓殖大学王曙光教授，最近接受中国媒体访问时说此次雷雨接触发生后，中国高铁的安全系统应对合理、处理得当，起到了应有作用。甚至认为“这反而验证了中国高铁在安全技术领域内值得信赖，应该给予高度评价才对”！您怎么看他的观点？</p>
<p>简水生：既然有这样的说法，我们就不吭声了，让时间去考验吧。</p>
<p>原文: http://finance.sina.com.cn/review/jcgc/20110715/232210157291.shtml</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/518.html' rel='bookmark' title='Permanent Link: if-else对优化代码冗余度的反作用'>if-else对优化代码冗余度的反作用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/278.html' rel='bookmark' title='Permanent Link: 什么是 goodle 和 goodle Earth?'>什么是 goodle 和 goodle Earth?</a></li>
<li><a href='http://www.ideawu.net/blog/archives/215.html' rel='bookmark' title='Permanent Link: 世界上最恐怖的厕所及最危险的路'>世界上最恐怖的厕所及最危险的路</a></li>
<li><a href='http://www.ideawu.net/blog/archives/125.html' rel='bookmark' title='Permanent Link: 从感观上体验桌面Linux'>从感观上体验桌面Linux</a></li>
<li><a href='http://www.ideawu.net/blog/archives/32.html' rel='bookmark' title='Permanent Link: Java中文问题及最优解决方法'>Java中文问题及最优解决方法</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/608.html" title="中科院院士简水生：让时间去考验京沪高铁吧">中科院院士简水生：让时间去考验京沪高铁吧</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<blockquote><p>提示: 这篇新闻稿的开头很容易让人起疑惑, 甚至是头脑发热地愤怒. 但是, 如果你认真看完, 动脑思考, 而不是仅限于表面, 你就会发现这位院士道出了惊天内幕! 特别是结尾那一句:&#8221;既然有这样的说法，我们就不吭声了，让时间去考验吧。&#8221;值得让人思考.</p></blockquote>
<p>京沪高铁刚刚开通十多天，就已发生多起故障，共造成数十趟列车晚点，以致人们惊呼：高铁变成了蜗牛。</p>
<p>值得探究的是，尽管有工程监管制度，但中国许多重大工程完工后，为什么仍是质量问题百出？我们如何才能从根本上减少工程质量问题？</p>
<p><span id="more-608"></span>我们看到，中国制造的世界上跨度最大的桥梁之一，美国旧金山奥克兰海湾大桥东段，其桥面钢箱梁在全部通过报验，本准备装船起运的时候，项目总承包方美国加州交通部却提出采用全球顶尖的相控阵技术对产品进行“D向扫查”检验，“1毫米、2毫米一个点进行复探”，远高于美国焊接协会的桥梁规范，据说检测结果令美国人心服口服。</p>
<p>由此可见，中国制造绝对不是粗制滥造的代名词，问题在于能否所有的中国制造中都有严格的质量监管和高度的责任心？</p>
<p>曾经参与京沪高铁项目论证的中国科学院院士、中国铁道学会学术委员会副主任委员、光通信领域著名科学家、北京交通大学光波技术研究所所长简水生教授，7月13日接受《华夏时报》专访，回答了相关问题。</p>
<p><b>更多隐患尚未公开</b></p>
<p>《华夏时报》：京沪高铁开通短短十多天来已连续发生多起故障，这让我们该如何客观评价其安全质量？</p>
<p>简水生：现在是刚刚开始，随着时间的推移，才能看得更清楚。</p>
<p>《华夏时报》：业内有分析说，按照要求，接触网如果断电，列车或失去电源，不过京沪高铁列车自备120分钟的电源、通风功能。但为何最近两次京沪高铁滞留期间，列车自备应急电力和通风系统并没有发挥作用？</p>
<p>简水生：不，京沪高铁列车自备的电源，肯定走不了120分钟。120分钟的自备电源可以跑多少公里呢？600公里。但实际的情形，人们看到了，可能吗？根本不可能。二分之一MV（M是重量，V是速度）平方300公里的速度，你们算算，有多大能量？列车能有多少储电池？或者能有发电机吗？</p>
<p>《华夏时报》：我们看到，京沪高铁才开通十多天，就发生多起所谓接触网的问题。</p>
<p>简水生：接触网是最容易发生问题的，因为其本身摩擦很厉害。因为列车速度越高，输电弓在接触网上的摩擦速度或跳动频率也越快，摩擦阻力与速度起码成正比，甚至是高次方，所以在雷雨天气容易发生问题。我觉得，京沪高铁整个的防雷系统还不行。防雷系统应在沿线都做好，如果某个地方地质条件好，导电力很高，就可以吸引全部雷电；如果导电力不高，雷电发生时，结果就可能很糟糕。因此，防雷是个比较复杂的问题。</p>
<p>《华夏时报》：如此复杂的问题，在京沪高铁这样重大的工程中没有加以周全考虑吗？</p>
<p>简水生：没有考虑。列车运行时，输电弓在接触网上一直处于动态，若列车以300公里的高速运行，输电弓在任何条件下都必须始终接触良好才行。</p>
<p>《华夏时报》：据说整个京沪高铁系统在建设时都有防雷的考虑，供电网、列车都应该有防雷系统。那么，我们该如何理解故障的发生？</p>
<p>简水生：防雷系统的作用主要是在下大雨的时候，防止磁隔电子表面电子达到限相发生短路。也就是说，每一串挂导线的瓷瓶，要承受27500伏安的电压，遇到雨量特别大的雷雨天气，瓷瓶的电阻可能就会改变。</p>
<p>《华夏时报》：既然输电弓与接触网动态接触的防雷技术不过关，若由此推论，今后相关问题会否发生？</p>
<p>简水生：还有最大的问题要加以考虑。</p>
<p>《华夏时报》：是关于轮轨的问题，还是关于输电等动力系统的问题？</p>
<p>简水生：也可以说是轮轨的问题。实际上，我们可以说，轴是中国人自己制造的，但轴承却不是我们自己制造的。而且，轴承的钢材(4895,-5.00,-0.10%)是什么，也不太清楚。里面的润滑剂是固态的，列车开起来之后，固态润滑剂变成了液态。我们学校的老师曾经做过实验，原先说京沪高铁要跑350公里，按照规定，在实验台上就得跑385公里。</p>
<p>我们看到，如果实际是跑300公里，这个技术在实验台上，加10%，跑330公里，可以跑到好几十万公里吧。但跑385公里，跑到2万多公里的时候，就不行了。所以后来为什么退下来？就是这个原因。现在我们是把瞬态的东西，看做自己的成绩，这怎么行？人家国外一个实验，根本不能算数的。法国高铁实验在好几年前就跑过了一趟瞬间574公里，但当时钢轨就已经不行了，都拧了。</p>
<p>这与导弹技术不一样。导弹一次就发射出去，说多快，就多快。所以，钱学森当时说，如果我们发展飞机制造业，材料不过关，因为飞机要使用N次。高铁就更不能跑一趟瞬间高速就算数了，一年365天，天天都要跑的。</p>
<p><b>器件隐患要认真排除</b></p>
<p>《华夏时报》：舆论批评如此重大的工程尤其不应片面追求建设速度，而忽视对工程质量的严格检验检测，甚至搞成献礼工程、政绩工程，因为那将是对人民生命安全和公共财产安全的严重不负责任，您怎么看？安全第一不是高铁运营的最基本方针吗？</p>
<p>简水生：工程质量应该严格检测只是一方面。</p>
<p>我跟你大概地说一件事情。中国的高铁，全部采用无砟的整体道床。2000年我去欧洲做本专业的考察研究，但我到了英法德、到了比利时、丹麦、西班牙等好几个国家都仔细看了他们的高铁铁路，发现都是有砟的。只有德国做了一段无砟整体道床实验，但当时的部长却拍板决定中国的高铁都采用这种无砟整体道床，谁也不敢提不同意见。</p>
<p>实际上，列车在有砟道床上运行到每小时300公里的速度，是没多大问题的，道床上的小石头子起着很大作用。高速铁路上的钢轨，是由每一根长达100多公里的钢轨焊接起来的，其温度膨胀系数，是1.1乘以10的负5次方，也就是温度每变化摄氏一度，钢轨就伸长或缩短1.1米。当夏天的时候，钢轨晒得发烫，起码有60多摄氏度，到了晚上，又凉下来，热胀冷缩的问题靠谁来解决？一胀轨，稍微有一点轨距，列车就翻了。就靠着轨枕上的铆钉将钢轨铆住，严格防止胀轨或缩轨的问题。</p>
<p>除了铆钉在轨枕上的抑制力量，还有一个抑制力量，那就是列车前行的时候，是以二分之一MV平方向前冲的力量，将钢轨整体向后拉，但此时钢轨却被石头子卡住了，石头子吃掉了其中的力量。所以我们看到铁路上的石头子经常是粉碎的，养路工人经常要更新这些石头子。</p>
<p>无砟整体道床靠得则是压在钢板下的弹簧抵消应力。但弹簧能否消除温度变化产生的钢轨伸缩问题，与弹簧自身的钢材有关。而更严重的问题是，二分之一MV平方向前冲的力量，都吃在弹簧上了，很可能使得弹簧发生崩裂，这方面，没有做过任何科学研究分析。</p>
<p>究竟这弹簧的钢材要求多高强度，能维持多长时间？任何钢材在不断的应力作用下，都会弹性疲乏，一旦弹性疲乏，一旦龟裂，就可能断掉，那时的钢轨将如何稳定？这个问题可比接触网问题大得多了。</p>
<p>即使可以更换弹簧，所发生的费用也很可观。而且，高架上900吨一根梁的价格，与平地上建设有砟道床的价格相比，要贵得多。何况现在要修16000公里高铁。这些问题，都需要经过充分的论证。速度越快，所有的钢材，都要重新考虑。这里面的隐患必须加以排除。</p>
<p>《华夏时报》：德国人的那个无砟整体道床实验，后来并没有成功地付诸实际运用吗？</p>
<p>简水生：德国并没有正规运行，那个发明者曾公开在电视上表示，其在德国总共才做了10公里的实验段。</p>
<p>《华夏时报》：京沪高铁的开通运行似乎标志着中国在铁路技术上进入了世界先进行列，但遭遇雷击发生触网故障是否意味着在高度精确精细的现代技术方面还有差距，还面临很艰巨的挑战？</p>
<p>简水生：让时间去考验吧。</p>
<p>《华夏时报》：我们看到有报道说，今年6月初，国内30名工程界院士、专家，在即将开通运营的京沪高铁上进行了检查评估，在对轨道、通信信号牵引供电、动车组、运营安全等情况进行专项检查后，专家组认为，京沪高铁轨道状态达到了高平顺和高稳定的要求；通信信号和牵引供电系统稳定可靠；运营安全保障设施齐全，开行方案合理，各项检测指标完全具备开通运营条件。您如何看待这个结论？</p>
<p>简水生：被请去做检查评估的人，未必全是专家。比如在通信信号安全的问题上，当时他们的调度电话系统采用的是一种老制式的东西，很容易被别人攻破，而且其频带与中国移动的频带一样，于是我提出，这套系统将来可能很危险。当然，也可以采取密钥通信的方式来防止和避免被攻击，但其带宽又太小。所以，评估是否全面？</p>
<p>《华夏时报》：据报道所谓日中高铁技术探究领域内拥有高度权威的日本拓殖大学王曙光教授，最近接受中国媒体访问时说此次雷雨接触发生后，中国高铁的安全系统应对合理、处理得当，起到了应有作用。甚至认为“这反而验证了中国高铁在安全技术领域内值得信赖，应该给予高度评价才对”！您怎么看他的观点？</p>
<p>简水生：既然有这样的说法，我们就不吭声了，让时间去考验吧。</p>
<p>原文: http://finance.sina.com.cn/review/jcgc/20110715/232210157291.shtml</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/518.html' rel='bookmark' title='Permanent Link: if-else对优化代码冗余度的反作用'>if-else对优化代码冗余度的反作用</a></li>
<li><a href='http://www.ideawu.net/blog/archives/278.html' rel='bookmark' title='Permanent Link: 什么是 goodle 和 goodle Earth?'>什么是 goodle 和 goodle Earth?</a></li>
<li><a href='http://www.ideawu.net/blog/archives/215.html' rel='bookmark' title='Permanent Link: 世界上最恐怖的厕所及最危险的路'>世界上最恐怖的厕所及最危险的路</a></li>
<li><a href='http://www.ideawu.net/blog/archives/125.html' rel='bookmark' title='Permanent Link: 从感观上体验桌面Linux'>从感观上体验桌面Linux</a></li>
<li><a href='http://www.ideawu.net/blog/archives/32.html' rel='bookmark' title='Permanent Link: Java中文问题及最优解决方法'>Java中文问题及最优解决方法</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/608.html" title="中科院院士简水生：让时间去考验京沪高铁吧">中科院院士简水生：让时间去考验京沪高铁吧</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/608.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>获取动态加载的图片大小的正确方法</title>
		<link>http://www.ideawu.net/blog/archives/607.html</link>
		<comments>http://www.ideawu.net/blog/archives/607.html#comments</comments>
		<pubDate>Sun, 03 Jul 2011 14:32:43 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/2011/07/%e8%8e%b7%e5%8f%96%e5%8a%a8%e6%80%81%e5%8a%a0%e8%bd%bd%e7%9a%84%e5%9b%be%e7%89%87%e5%a4%a7%e5%b0%8f%e7%9a%84%e6%ad%a3%e7%a1%ae%e6%96%b9%e6%b3%95.html</guid>
		<description><![CDATA[<p>有一些很容易出错的获取动态加载的图片的尺寸的方法, 之所以出错, 主要原因是:</p>
<ul>
<li>你在代码在图片从网页上下载完毕之前就调用了, 这种情况在本机开发时不太容易发现.</li>
<li>jQuery load()事件处理的BUG, 当图片是从浏览器缓存取得时, 获取的是错误的尺寸.</li>
</ul>
<p>错误的代码是:</p>
<p><span id="more-607"></span></p>
<h3>(错误)在添加了HTML之后立即调用代码获取尺寸</h3>
<pre>
var html = '<img src="URL" />';
$('#my_div').html(html);
var width = $('#my_div img').width(); // may return 0
</pre>
<h3>(错误)用jQuery的load()事件处理</h3>
<pre>
var html = '<img src="URL" />';
var img = $(html);
html.load(function(){
    // return 0 if image is loaded from browser cache
    var width = img.width();
});
$('#my_div').html(img);
</pre>
<p>下面这种才是真正正确的方法, 使用JavaScript的Image类:</p>
<h3>正确的方法</h3>
<pre>
var html = '<img src="URL" />';
$('#my_div').html(html);

var ni = new Image();
ni.onload = function(){
    var width = ni.width;
}
ni.src = img.attr(URL);
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/477.html' rel='bookmark' title='Permanent Link: jQuery BlockUI 页面遮挡插件'>jQuery BlockUI 页面遮挡插件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/591.html' rel='bookmark' title='Permanent Link: jQuery延时绑定事件(lazy-bind)'>jQuery延时绑定事件(lazy-bind)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/87.html' rel='bookmark' title='Permanent Link: Debian Linux 系统提速'>Debian Linux 系统提速</a></li>
<li><a href='http://www.ideawu.net/blog/archives/611.html' rel='bookmark' title='Permanent Link: 强大的纯JS数据图工具-flot'>强大的纯JS数据图工具-flot</a></li>
<li><a href='http://www.ideawu.net/blog/archives/471.html' rel='bookmark' title='Permanent Link: 最简单的PHP缓存方案 &#8211; Zend_Cache'>最简单的PHP缓存方案 &#8211; Zend_Cache</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/607.html" title="获取动态加载的图片大小的正确方法">获取动态加载的图片大小的正确方法</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>有一些很容易出错的获取动态加载的图片的尺寸的方法, 之所以出错, 主要原因是:</p>
<ul>
<li>你在代码在图片从网页上下载完毕之前就调用了, 这种情况在本机开发时不太容易发现.</li>
<li>jQuery load()事件处理的BUG, 当图片是从浏览器缓存取得时, 获取的是错误的尺寸.</li>
</ul>
<p>错误的代码是:</p>
<p><span id="more-607"></span></p>
<h3>(错误)在添加了HTML之后立即调用代码获取尺寸</h3>
<pre>
var html = '<img src="URL" />';
$('#my_div').html(html);
var width = $('#my_div img').width(); // may return 0
</pre>
<h3>(错误)用jQuery的load()事件处理</h3>
<pre>
var html = '<img src="URL" />';
var img = $(html);
html.load(function(){
    // return 0 if image is loaded from browser cache
    var width = img.width();
});
$('#my_div').html(img);
</pre>
<p>下面这种才是真正正确的方法, 使用JavaScript的Image类:</p>
<h3>正确的方法</h3>
<pre>
var html = '<img src="URL" />';
$('#my_div').html(html);

var ni = new Image();
ni.onload = function(){
    var width = ni.width;
}
ni.src = img.attr(URL);
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/477.html' rel='bookmark' title='Permanent Link: jQuery BlockUI 页面遮挡插件'>jQuery BlockUI 页面遮挡插件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/591.html' rel='bookmark' title='Permanent Link: jQuery延时绑定事件(lazy-bind)'>jQuery延时绑定事件(lazy-bind)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/87.html' rel='bookmark' title='Permanent Link: Debian Linux 系统提速'>Debian Linux 系统提速</a></li>
<li><a href='http://www.ideawu.net/blog/archives/611.html' rel='bookmark' title='Permanent Link: 强大的纯JS数据图工具-flot'>强大的纯JS数据图工具-flot</a></li>
<li><a href='http://www.ideawu.net/blog/archives/471.html' rel='bookmark' title='Permanent Link: 最简单的PHP缓存方案 &#8211; Zend_Cache'>最简单的PHP缓存方案 &#8211; Zend_Cache</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/607.html" title="获取动态加载的图片大小的正确方法">获取动态加载的图片大小的正确方法</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/607.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>关系数据库应用设计基础</title>
		<link>http://www.ideawu.net/blog/archives/606.html</link>
		<comments>http://www.ideawu.net/blog/archives/606.html#comments</comments>
		<pubDate>Fri, 24 Jun 2011 10:02:57 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Computer System]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/2011/06/%e5%85%b3%e7%b3%bb%e6%95%b0%e6%8d%ae%e5%ba%93%e5%ba%94%e7%94%a8%e8%ae%be%e8%ae%a1%e5%9f%ba%e7%a1%80.html</guid>
		<description><![CDATA[<p>这是我给部门同事做的技术分享.</p>
<p>当今绝大部分的软件系统都用到了关系数据库, 所以, 作为软件开发工程师, 必须掌握关系数据库应用设计能力.</p>
<div style="width:425px" id="__ss_8410690"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ideawu/ss-8410690" title="关系数据库应用设计基础">关系数据库应用设计基础</a></strong> <object id="__sse8410690" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-110624045756-phpapp02&#038;stripped_title=ss-8410690&#038;userName=ideawu" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse8410690" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-110624045756-phpapp02&#038;stripped_title=ss-8410690&#038;userName=ideawu" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ideawu">ideawu</a> </div>
</p></div>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/589.html' rel='bookmark' title='Permanent Link: 高性能并发Web服务器实现核心内幕'>高性能并发Web服务器实现核心内幕</a></li>
<li><a href='http://www.ideawu.net/blog/archives/482.html' rel='bookmark' title='Permanent Link: 开发爬虫友好的Ajax网站'>开发爬虫友好的Ajax网站</a></li>
<li><a href='http://www.ideawu.net/blog/archives/364.html' rel='bookmark' title='Permanent Link: [不会停止]idea&#8217;s blog 即将停止了&#8230;'>[不会停止]idea&#8217;s blog 即将停止了&#8230;</a></li>
<li><a href='http://www.ideawu.net/blog/archives/355.html' rel='bookmark' title='Permanent Link: 朋友在中关村买华硕笔记本被骗'>朋友在中关村买华硕笔记本被骗</a></li>
<li><a href='http://www.ideawu.net/blog/archives/585.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP Web面试题(会做就能进百度)'>史上最强大的PHP Web面试题(会做就能进百度)</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/606.html" title="关系数据库应用设计基础">关系数据库应用设计基础</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>这是我给部门同事做的技术分享.</p>
<p>当今绝大部分的软件系统都用到了关系数据库, 所以, 作为软件开发工程师, 必须掌握关系数据库应用设计能力.</p>
<div style="width:425px" id="__ss_8410690"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ideawu/ss-8410690" title="关系数据库应用设计基础">关系数据库应用设计基础</a></strong> <object id="__sse8410690" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-110624045756-phpapp02&#038;stripped_title=ss-8410690&#038;userName=ideawu" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse8410690" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=random-110624045756-phpapp02&#038;stripped_title=ss-8410690&#038;userName=ideawu" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ideawu">ideawu</a> </div>
</p></div>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/589.html' rel='bookmark' title='Permanent Link: 高性能并发Web服务器实现核心内幕'>高性能并发Web服务器实现核心内幕</a></li>
<li><a href='http://www.ideawu.net/blog/archives/482.html' rel='bookmark' title='Permanent Link: 开发爬虫友好的Ajax网站'>开发爬虫友好的Ajax网站</a></li>
<li><a href='http://www.ideawu.net/blog/archives/364.html' rel='bookmark' title='Permanent Link: [不会停止]idea&#8217;s blog 即将停止了&#8230;'>[不会停止]idea&#8217;s blog 即将停止了&#8230;</a></li>
<li><a href='http://www.ideawu.net/blog/archives/355.html' rel='bookmark' title='Permanent Link: 朋友在中关村买华硕笔记本被骗'>朋友在中关村买华硕笔记本被骗</a></li>
<li><a href='http://www.ideawu.net/blog/archives/585.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP Web面试题(会做就能进百度)'>史上最强大的PHP Web面试题(会做就能进百度)</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/606.html" title="关系数据库应用设计基础">关系数据库应用设计基础</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/606.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>端午节坝上两日游记</title>
		<link>http://www.ideawu.net/blog/archives/592.html</link>
		<comments>http://www.ideawu.net/blog/archives/592.html#comments</comments>
		<pubDate>Mon, 06 Jun 2011 04:44:54 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Diary]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/?p=592</guid>
		<description><![CDATA[<p>这一次去丰宁坝上草原, 从2011年6月3日离开北京到回到北京, 整整花了两天时间, 一共花费是600元, 属于平民消费. 我们去的地方叫河北省丰宁县大滩镇扎拉营村, 全程约300公里, 要花6,7个小时.</p>
<p>出发时, 天已经黑. 一出怀柔, 地势陡然升高, 山丘密布, 我们一路穿隧道和盘山. 延途看到山谷中不少小片山谷平地上亮着昏暗灯光的小村子, 或者是已经废弃的村子, 不禁感叹人和大自然的融合和争斗. 当车盘山爬到顶部时, 往下一看, 一条蜿蜒的车龙跟在我们后面.</p>
<p>又走了一段, 从车灯照的路边的景物来看, 已经从陡峭的石头山变为了平坦的长着草皮的山丘, 估计是已经来到了草原. 最后, 我们来到了扎拉营村的一个小院子里.</p>
<p><span id="more-592"></span>院主人夫妇热情纯朴, 但和当地的许多人包括向导一样, 文化程度不高, 这可以从院内有文字的多个牌子上看得出来, 牌子上多有文字涂改的痕迹. 当然, 并非文化程度不高就代表了纯朴, 接下来你们会发现, 缺斤短两, 睁着眼睛说瞎话的村民并不在少数. 我不想特别说明哪一种, 只是想提出, 纯朴和落后在当地是共存的.</p>
<p>第二天早上7点我们才集体起床去骑马, 这算一个小失误, 起得太晚. 高原上的太阳特别低, 天空晴朗得没有一片云彩, 所以太阳毒辣. 幸好我们有20元租来的牛仔帽和小围巾等骑马护具, 保护住了脸和脖子, 不然估计两天下来, 要和向导一样脸皮又亮又黑了.</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/me-on-horse.jpg" alt="" title="我骑在马上" /></p>
<p>骑马前出现一个小插曲, 我们一时找不到马. 从村民嘴里听出似乎是由于当地旅游管理部门新出的一个骑马管理政策导致的, 接下来, 不断地听出村民和管理部门有比较大的冲突, 管理部门的一些政策极大地打击了他们的积极性. 但我认为, 加强管理是必须的, 因为凭村民自身的智慧, 根本无法让当地草原旅游业得到长久发展. 他们中一些人所具有的纯朴, 很有可能被管理落后所带来的瑕疵所掩埋.</p>
<p>当地的旅游来属于各村各自为战的农家院形式, 极不正规. 骑马是一项非常危险的运动, 甚至一个当地经验丰富的骑马向导就在当天从马上摔下来受了点小伤. 但我没看到有买保险, 简单训练等内容. 说到底, 毕竟价格低廉, 要求也不用太高. 管理越完善, 必定带来价格的上升.</p>
<p>由于第一次骑马, 马主人(村民每家有几匹马)和向导(把几家村民的马聚合起来由他带领)说哪匹马好, 我们也无从分辨, 但慢慢就发现, 次马当好马, 甚至是病马当好马的情况比比皆是. 而且一旦你发现之后, 对方矢口否认, 欺负你不懂行. 而且, 由于平民化消费带来游人众多, 每匹马几乎都超量服务, 甚至一匹受伤的马大中午刚回村, 就被马主人用鞭子抽着出去继续作为好马接客, 我开玩笑说马儿比低级妓女还可怜.</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/bashang.jpg" alt="" title="坝上" /></p>
<p>说到骑马, 马的行动有三种: 散步, 小跑, 撒开腿大跑. 第一种最清闲, 第三种最爽快刺激, 而第二种难受至极. 不是每匹马都能大跑, 所以, 骑到次马就是受罪. 而且马儿也会欺负人, 一旦向导不在身后鞭促, 它就不情愿干活了. 哼! 也不知道是接客太多耍脾气, 还是接客太多累的.</p>
<p>听说每匹好马的价格大概是两万元, 估计次马有一万, 以每匹马每天接客8小时共320元钱, 如果利润率有60%按挣200算, 旺季大概有一百五十天, 其实一年也能回本, 但也挣不了大钱, 只是些辛苦钱. 除非走前面提到的高级化道路.</p>
<p>到了中午, 我们在小院子中休息, 有一个开着三轮摩托车走家窜户卖小吃特产的中年男子, 把车开进院来推销. 他的车上有栗子, 奶酪, 干蘑菇等, 还有一种声称是马奶酒的东西, 但后来我在一个杂货店里发现摆了一摞, 再到我们队伍当中懂行的人的说法, 估计那酒是工厂生产的伪品, 和马奶没有一点关系. 其实, 这货郎就跟北京地铁口的坑蒙拐骗的小贩是同一路货色.</p>
<p>我问了一件声称是当地草原特产的蘑菇干品, 价格其实我也不知道贵贱, 因为没有对比. 我抓了一些到电子称上一称, 4两共20元, 我拿手上一掂量, 估计只有2两. 我怀疑这就是传说中有开关的称, 于是趁对方不注意, 回我住的屋中取来瓶装水, 往上面一放, 只有600毫升的水, 竟然有1千克多, 无可置疑这个称的读数已经乘2了. 我一提出, 货主把手往称底部一摸, 计数变回大概600克了, 他说刚才是压着了. 我再拿所谓的两斤马奶酒往上一放, 这回变为一斤多一点了.</p>
<p>我看到院子里有一辆越野摩托车, 便手痒想上去骑一会. 我跟院女主人一提, 她立马就答应了. 这便是他们热情和爽快的一面, 要知道, 租那种四轮的玩具摩托车要50元一小时, 而我免费骑了两轮的真正摩托车! 我骑着摩托车出去跑了一圈, 还骑到附近最高的一个山丘上, 在上面还是真点恐惧.</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/me-on-motocycle-upon-hill.jpg" alt="" title="我骑摩托车上山" /></p>
<p>下午, 有些人去游乐场, 但我们有二十五人去了十公里外的闪电湖. 路上我认识了三个漂亮的小女生, 还给他们拍了不少照片. 湖边的景色空旷迷人, 三个模特又非常配合地摆姿势, 所以照片都拍得很不错, 我们四个人玩得非常开心. 这算是此行值得称赞的事之一, 但最兴奋的还在后头. 随带说一句, 听去过游乐场的人说不值得.</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/flash-lake-1.jpg" alt="" title="闪电湖" /></p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/flash-lake-2.jpg" alt="" title="闪电湖" /></p>
<p>晚上, 随行的几个老手打算第二天一大早找好马来骑, 我也报名了. 当晚我最期待的烤全羊虽然从宰杀到烤熟, 形式和味道都非常正宗, 但人多羊少, 非常不爽, 大家都抢着吃怕吃不着, 我觉得还不如大家每人多花几十块钱再买一两只羊呢.</p>
<p>第二天早上六点半起床, 还真是像院主人说的, 马玩马浑身酸痛, 我觉得腰酸背痛, 身体其他部位也有一些僵硬, 但为了骑马, 我到阳光下做了会热身运动, 便觉得好多了. 这一次总算没白费, 由于有懂行的人带着, 所以我们一行十人都选了好马, 马儿都能快跑, 就是那种真正的甩着尘土风驰电掣. 这算是此行最超值的一件!</p>
<p>骑完马到了中午, 吃过简单的午饭, 也到了我们了院主人告别的时候了.</p>
<p>回京的路上, 我思考此行的收获. 首先, 以后我可以声称, 我新掌握了一项技能 &#8212; 骑马. 对于坝上, 或者准确的说是对这个村子, 总体上感觉还算正面, 毕竟花钱不多, 还能玩得有些开心, 但是, 如果不是今天早上计划外的这一趟马骑的, 我肯定对坝上有不少失望. 遇到的各种问题, 本质还是消费低层次的问题, 花钱少, 也就这种待遇了.</p>
<p>但有些人估计不认同, 举例说, 文明的人开了一个超市, 给苹果标了5元一斤的价格, 卖给你的绝对不会缺斤短两. 但一个所谓的&#8221;纯朴&#8221;的村民, 开口说他的苹果只要2元一斤, 但在称砣上吃你一半, 实际你花了4元买了一斤苹果. 同样的苹果, 我情愿多花一元钱买前者.</p>
<p>我的家乡也是一个知名的旅游目的地, 但我知道, 家乡人可不都是善类, 坑蒙拐骗强买强卖一样不少. 又说湖南凤凰风景优美, 但那里是湖南西部, 我的湖南朋友所说的湘西土匪的老窝. 前段时间出现的少女被当地警察奸污跳楼的事, 证实了我朋友的说法. 所以我至少对中国境内的旅游都有最坏的设想.</p>
<p>这一回在坝上痛快地骑了一回马, 我觉得是天赐的幸运. 生活, 就像我最喜欢的一位作家说的, 不是想像中的那么好, 也不是想像中的那么坏.</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/girls.jpg" alt="" title="三个女生的背影" /></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/532.html' rel='bookmark' title='Permanent Link: 典型的中国俗小说'>典型的中国俗小说</a></li>
<li><a href='http://www.ideawu.net/blog/archives/355.html' rel='bookmark' title='Permanent Link: 朋友在中关村买华硕笔记本被骗'>朋友在中关村买华硕笔记本被骗</a></li>
<li><a href='http://www.ideawu.net/blog/archives/344.html' rel='bookmark' title='Permanent Link: 牢记&#8221;九一八&#8221;国耻'>牢记&#8221;九一八&#8221;国耻</a></li>
<li><a href='http://www.ideawu.net/blog/archives/64.html' rel='bookmark' title='Permanent Link: 按“下一步”按钮？'>按“下一步”按钮？</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/592.html" title="端午节坝上两日游记">端午节坝上两日游记</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>这一次去丰宁坝上草原, 从2011年6月3日离开北京到回到北京, 整整花了两天时间, 一共花费是600元, 属于平民消费. 我们去的地方叫河北省丰宁县大滩镇扎拉营村, 全程约300公里, 要花6,7个小时.</p>
<p>出发时, 天已经黑. 一出怀柔, 地势陡然升高, 山丘密布, 我们一路穿隧道和盘山. 延途看到山谷中不少小片山谷平地上亮着昏暗灯光的小村子, 或者是已经废弃的村子, 不禁感叹人和大自然的融合和争斗. 当车盘山爬到顶部时, 往下一看, 一条蜿蜒的车龙跟在我们后面.</p>
<p>又走了一段, 从车灯照的路边的景物来看, 已经从陡峭的石头山变为了平坦的长着草皮的山丘, 估计是已经来到了草原. 最后, 我们来到了扎拉营村的一个小院子里.</p>
<p><span id="more-592"></span>院主人夫妇热情纯朴, 但和当地的许多人包括向导一样, 文化程度不高, 这可以从院内有文字的多个牌子上看得出来, 牌子上多有文字涂改的痕迹. 当然, 并非文化程度不高就代表了纯朴, 接下来你们会发现, 缺斤短两, 睁着眼睛说瞎话的村民并不在少数. 我不想特别说明哪一种, 只是想提出, 纯朴和落后在当地是共存的.</p>
<p>第二天早上7点我们才集体起床去骑马, 这算一个小失误, 起得太晚. 高原上的太阳特别低, 天空晴朗得没有一片云彩, 所以太阳毒辣. 幸好我们有20元租来的牛仔帽和小围巾等骑马护具, 保护住了脸和脖子, 不然估计两天下来, 要和向导一样脸皮又亮又黑了.</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/me-on-horse.jpg" alt="" title="我骑在马上" /></p>
<p>骑马前出现一个小插曲, 我们一时找不到马. 从村民嘴里听出似乎是由于当地旅游管理部门新出的一个骑马管理政策导致的, 接下来, 不断地听出村民和管理部门有比较大的冲突, 管理部门的一些政策极大地打击了他们的积极性. 但我认为, 加强管理是必须的, 因为凭村民自身的智慧, 根本无法让当地草原旅游业得到长久发展. 他们中一些人所具有的纯朴, 很有可能被管理落后所带来的瑕疵所掩埋.</p>
<p>当地的旅游来属于各村各自为战的农家院形式, 极不正规. 骑马是一项非常危险的运动, 甚至一个当地经验丰富的骑马向导就在当天从马上摔下来受了点小伤. 但我没看到有买保险, 简单训练等内容. 说到底, 毕竟价格低廉, 要求也不用太高. 管理越完善, 必定带来价格的上升.</p>
<p>由于第一次骑马, 马主人(村民每家有几匹马)和向导(把几家村民的马聚合起来由他带领)说哪匹马好, 我们也无从分辨, 但慢慢就发现, 次马当好马, 甚至是病马当好马的情况比比皆是. 而且一旦你发现之后, 对方矢口否认, 欺负你不懂行. 而且, 由于平民化消费带来游人众多, 每匹马几乎都超量服务, 甚至一匹受伤的马大中午刚回村, 就被马主人用鞭子抽着出去继续作为好马接客, 我开玩笑说马儿比低级妓女还可怜.</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/bashang.jpg" alt="" title="坝上" /></p>
<p>说到骑马, 马的行动有三种: 散步, 小跑, 撒开腿大跑. 第一种最清闲, 第三种最爽快刺激, 而第二种难受至极. 不是每匹马都能大跑, 所以, 骑到次马就是受罪. 而且马儿也会欺负人, 一旦向导不在身后鞭促, 它就不情愿干活了. 哼! 也不知道是接客太多耍脾气, 还是接客太多累的.</p>
<p>听说每匹好马的价格大概是两万元, 估计次马有一万, 以每匹马每天接客8小时共320元钱, 如果利润率有60%按挣200算, 旺季大概有一百五十天, 其实一年也能回本, 但也挣不了大钱, 只是些辛苦钱. 除非走前面提到的高级化道路.</p>
<p>到了中午, 我们在小院子中休息, 有一个开着三轮摩托车走家窜户卖小吃特产的中年男子, 把车开进院来推销. 他的车上有栗子, 奶酪, 干蘑菇等, 还有一种声称是马奶酒的东西, 但后来我在一个杂货店里发现摆了一摞, 再到我们队伍当中懂行的人的说法, 估计那酒是工厂生产的伪品, 和马奶没有一点关系. 其实, 这货郎就跟北京地铁口的坑蒙拐骗的小贩是同一路货色.</p>
<p>我问了一件声称是当地草原特产的蘑菇干品, 价格其实我也不知道贵贱, 因为没有对比. 我抓了一些到电子称上一称, 4两共20元, 我拿手上一掂量, 估计只有2两. 我怀疑这就是传说中有开关的称, 于是趁对方不注意, 回我住的屋中取来瓶装水, 往上面一放, 只有600毫升的水, 竟然有1千克多, 无可置疑这个称的读数已经乘2了. 我一提出, 货主把手往称底部一摸, 计数变回大概600克了, 他说刚才是压着了. 我再拿所谓的两斤马奶酒往上一放, 这回变为一斤多一点了.</p>
<p>我看到院子里有一辆越野摩托车, 便手痒想上去骑一会. 我跟院女主人一提, 她立马就答应了. 这便是他们热情和爽快的一面, 要知道, 租那种四轮的玩具摩托车要50元一小时, 而我免费骑了两轮的真正摩托车! 我骑着摩托车出去跑了一圈, 还骑到附近最高的一个山丘上, 在上面还是真点恐惧.</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/me-on-motocycle-upon-hill.jpg" alt="" title="我骑摩托车上山" /></p>
<p>下午, 有些人去游乐场, 但我们有二十五人去了十公里外的闪电湖. 路上我认识了三个漂亮的小女生, 还给他们拍了不少照片. 湖边的景色空旷迷人, 三个模特又非常配合地摆姿势, 所以照片都拍得很不错, 我们四个人玩得非常开心. 这算是此行值得称赞的事之一, 但最兴奋的还在后头. 随带说一句, 听去过游乐场的人说不值得.</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/flash-lake-1.jpg" alt="" title="闪电湖" /></p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/flash-lake-2.jpg" alt="" title="闪电湖" /></p>
<p>晚上, 随行的几个老手打算第二天一大早找好马来骑, 我也报名了. 当晚我最期待的烤全羊虽然从宰杀到烤熟, 形式和味道都非常正宗, 但人多羊少, 非常不爽, 大家都抢着吃怕吃不着, 我觉得还不如大家每人多花几十块钱再买一两只羊呢.</p>
<p>第二天早上六点半起床, 还真是像院主人说的, 马玩马浑身酸痛, 我觉得腰酸背痛, 身体其他部位也有一些僵硬, 但为了骑马, 我到阳光下做了会热身运动, 便觉得好多了. 这一次总算没白费, 由于有懂行的人带着, 所以我们一行十人都选了好马, 马儿都能快跑, 就是那种真正的甩着尘土风驰电掣. 这算是此行最超值的一件!</p>
<p>骑完马到了中午, 吃过简单的午饭, 也到了我们了院主人告别的时候了.</p>
<p>回京的路上, 我思考此行的收获. 首先, 以后我可以声称, 我新掌握了一项技能 &#8212; 骑马. 对于坝上, 或者准确的说是对这个村子, 总体上感觉还算正面, 毕竟花钱不多, 还能玩得有些开心, 但是, 如果不是今天早上计划外的这一趟马骑的, 我肯定对坝上有不少失望. 遇到的各种问题, 本质还是消费低层次的问题, 花钱少, 也就这种待遇了.</p>
<p>但有些人估计不认同, 举例说, 文明的人开了一个超市, 给苹果标了5元一斤的价格, 卖给你的绝对不会缺斤短两. 但一个所谓的&#8221;纯朴&#8221;的村民, 开口说他的苹果只要2元一斤, 但在称砣上吃你一半, 实际你花了4元买了一斤苹果. 同样的苹果, 我情愿多花一元钱买前者.</p>
<p>我的家乡也是一个知名的旅游目的地, 但我知道, 家乡人可不都是善类, 坑蒙拐骗强买强卖一样不少. 又说湖南凤凰风景优美, 但那里是湖南西部, 我的湖南朋友所说的湘西土匪的老窝. 前段时间出现的少女被当地警察奸污跳楼的事, 证实了我朋友的说法. 所以我至少对中国境内的旅游都有最坏的设想.</p>
<p>这一回在坝上痛快地骑了一回马, 我觉得是天赐的幸运. 生活, 就像我最喜欢的一位作家说的, 不是想像中的那么好, 也不是想像中的那么坏.</p>
<p><img src="http://www.ideawu.net/blog/wp-content/uploads/2011/06/girls.jpg" alt="" title="三个女生的背影" /></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/532.html' rel='bookmark' title='Permanent Link: 典型的中国俗小说'>典型的中国俗小说</a></li>
<li><a href='http://www.ideawu.net/blog/archives/355.html' rel='bookmark' title='Permanent Link: 朋友在中关村买华硕笔记本被骗'>朋友在中关村买华硕笔记本被骗</a></li>
<li><a href='http://www.ideawu.net/blog/archives/344.html' rel='bookmark' title='Permanent Link: 牢记&#8221;九一八&#8221;国耻'>牢记&#8221;九一八&#8221;国耻</a></li>
<li><a href='http://www.ideawu.net/blog/archives/64.html' rel='bookmark' title='Permanent Link: 按“下一步”按钮？'>按“下一步”按钮？</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/592.html" title="端午节坝上两日游记">端午节坝上两日游记</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/592.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQuery延时绑定事件(lazy-bind)</title>
		<link>http://www.ideawu.net/blog/archives/591.html</link>
		<comments>http://www.ideawu.net/blog/archives/591.html#comments</comments>
		<pubDate>Fri, 27 May 2011 08:27:05 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/?p=591</guid>
		<description><![CDATA[<p>有个延时绑定事件的需求, 如等待鼠标停留在某图片上面一段时间之后才展示浮动层, 以避免鼠标滑过屏幕时一片乱闪. 一时找不到合适的插件, 所以自己写了个.</p>
<pre>
// 定义
(function($){
    $.fn.lazybind = function(event, fn, timeout, abort){
        var timer = null;
        $(this).bind(event, function(){
            timer = setTimeout(fn, timeout);
        });
        if(abort == undefined){
            return;
        }
        $(this).bind(abort, function(){
            if(timer != null){
                clearTimeout(timer);
            }
        });
    };
})(jQuery);

// 使用
$('#my_img').lazybind(
    'mouseover',
    function(){
        alert(1);
    },
    240,
    'mouseout');
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/607.html' rel='bookmark' title='Permanent Link: 获取动态加载的图片大小的正确方法'>获取动态加载的图片大小的正确方法</a></li>
<li><a href='http://www.ideawu.net/blog/archives/477.html' rel='bookmark' title='Permanent Link: jQuery BlockUI 页面遮挡插件'>jQuery BlockUI 页面遮挡插件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/351.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP MySQL操作类'>史上最强大的PHP MySQL操作类</a></li>
<li><a href='http://www.ideawu.net/blog/archives/166.html' rel='bookmark' title='Permanent Link: 使用ServletContextListener在服务器启动和关闭时创建和关闭缓存'>使用ServletContextListener在服务器启动和关闭时创建和关闭缓存</a></li>
<li><a href='http://www.ideawu.net/blog/archives/290.html' rel='bookmark' title='Permanent Link: Ideawu.P2P API 简介'>Ideawu.P2P API 简介</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/591.html" title="jQuery延时绑定事件(lazy-bind)">jQuery延时绑定事件(lazy-bind)</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>有个延时绑定事件的需求, 如等待鼠标停留在某图片上面一段时间之后才展示浮动层, 以避免鼠标滑过屏幕时一片乱闪. 一时找不到合适的插件, 所以自己写了个.</p>
<pre>
// 定义
(function($){
    $.fn.lazybind = function(event, fn, timeout, abort){
        var timer = null;
        $(this).bind(event, function(){
            timer = setTimeout(fn, timeout);
        });
        if(abort == undefined){
            return;
        }
        $(this).bind(abort, function(){
            if(timer != null){
                clearTimeout(timer);
            }
        });
    };
})(jQuery);

// 使用
$('#my_img').lazybind(
    'mouseover',
    function(){
        alert(1);
    },
    240,
    'mouseout');
</pre>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/607.html' rel='bookmark' title='Permanent Link: 获取动态加载的图片大小的正确方法'>获取动态加载的图片大小的正确方法</a></li>
<li><a href='http://www.ideawu.net/blog/archives/477.html' rel='bookmark' title='Permanent Link: jQuery BlockUI 页面遮挡插件'>jQuery BlockUI 页面遮挡插件</a></li>
<li><a href='http://www.ideawu.net/blog/archives/351.html' rel='bookmark' title='Permanent Link: 史上最强大的PHP MySQL操作类'>史上最强大的PHP MySQL操作类</a></li>
<li><a href='http://www.ideawu.net/blog/archives/166.html' rel='bookmark' title='Permanent Link: 使用ServletContextListener在服务器启动和关闭时创建和关闭缓存'>使用ServletContextListener在服务器启动和关闭时创建和关闭缓存</a></li>
<li><a href='http://www.ideawu.net/blog/archives/290.html' rel='bookmark' title='Permanent Link: Ideawu.P2P API 简介'>Ideawu.P2P API 简介</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/591.html" title="jQuery延时绑定事件(lazy-bind)">jQuery延时绑定事件(lazy-bind)</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/591.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL&#8221;海量数据&#8221;查询性能分析</title>
		<link>http://www.ideawu.net/blog/archives/590.html</link>
		<comments>http://www.ideawu.net/blog/archives/590.html#comments</comments>
		<pubDate>Sat, 21 May 2011 02:18:05 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[高性能Web架构]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/?p=590</guid>
		<description><![CDATA[<p>最近做了一次<a href="http://www.ideawu.net/blog/tag/mysql">MySQL</a>所谓的&#8221;海量数据&#8221;查询性能分析.</p>
<h3>表结构</h3>
<table border="1" bordercolor="#666666" cellpadding="3" cellspacing="0"	width="98%" style="font-family: arial; font-size: 13px; border-collapse: collapse;">
<tr style="background: #bbb">
<td><b>dt</b></td>
<td><b>dt2</b></td>
<td><b>dt3</b></td>
<td><b>it</b></td>
<td><b>it2</b></td>
<td><b>it3</b></td>
<td><b></b></td>
</tr>
<tr>
<td>id</td>
<td>id</td>
<td>id</td>
<td>id</td>
<td>id</td>
<td>id</td>
<td>int PK</td>
</tr>
<tr>
<td></td>
<td></td>
<td><b>ext1</b></td>
<td></td>
<td></td>
<td><b>ext1</b></td>
<td>varchar(256)</td>
</tr>
<tr>
<td>time</td>
<td>time</td>
<td>time</td>
<td>time</td>
<td>time</td>
<td>time</td>
<td>int/datetime KEY</td>
</tr>
<tr>
<td></td>
<td><b>ext2</b></td>
<td><b>ext2</b></td>
<td></td>
<td><b>ext2</b></td>
<td><b>ext2</b></td>
<td>varchar(128)</td>
</tr>
</table>
<p>说明, MyISAM引擎, dt表示时间字段使用datetime类型, it表示时间字段使用int类型. </p>
<h3>初始数据</h3>
<p>首先生成100K个UNIX时间戳(int), 然后随机选取10M次, 每一次往6个表里插入一条记录(当time字段是datetime类型时, 做类型转换). 所以每一个表都有10M条记录. ext1和ext2字段会用随机的字符串填充.</p>
<p><span id="more-590"></span></p>
<h3>SQL查询</h3>
<p>使用的查询SQL语句如: </p>
<pre>
select SQL_NO_CACHE count(*) from it where time&gt;10000;
select SQL_NO_CACHE count(*) from dt where time&gt;from_unixtime(10000);
select SQL_NO_CACHE * from it where time&gt;10000 order by time limit 1;
select SQL_NO_CACHE * from it use key(PRIMARY) where time&gt;10000 order by id limit 1;
</pre>
<p>SQL_NO_CACHE用于消除查询结果缓存的影响. use key用于指定查询时使用的索引. 统计每一条SQL的执行时间(单位s)和满足WHERE条件的记录总数(total), it-tm表示在dt表上执行SQL的耗时, 并explain得到key和extra, 结果如下.</p>
<table border="1" bordercolor="#666666" cellpadding="3" cellspacing="0" width="98%" style="font-family: arial; font-size: 13px; border-collapse: collapse;">
<tr style="background: #bbb">
<td><b>where</b></td>
<td><b>total</b></td>
<td><b>select</b></td>
<td><b>orderby</b></td>
<td><b>key</b></td>
<td><b>it-tm</b></td>
<td><b>dt-tm</b></td>
<td><b>it2-tm</b></td>
<td><b>dt2-tm</b></td>
<td><b>it3-tm</b></td>
<td><b>dt3-tm</b></td>
<td><b>extra</b></td>
</tr>
<tr>
<td>time&gt;10000</td>
<td>8999050</td>
<td>count(*)</td>
<td></td>
<td>time</td>
<td>3.52</td>
<td>4.28</td>
<td>3.74</td>
<td>4.49</td>
<td>3.53</td>
<td>4.47</td>
<td>where; index</td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(time)</td>
<td></td>
<td>time</td>
<td>3.44</td>
<td>4.00</td>
<td>3.69</td>
<td>4.36</td>
<td>3.56</td>
<td>4.26</td>
<td>where; index</td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(id)</td>
<td></td>
<td>NULL</td>
<td><b>1.44</b></td>
<td><b>1.92</b></td>
<td>4.30</td>
<td>4.60</td>
<td>4.79</td>
<td>4.98</td>
<td>where</td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>time</td>
<td>time</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>where</td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td>time</td>
<td><b>14.81</b></td>
<td><b>15.38</b></td>
<td><b>19.37</b></td>
<td><b>20.30</b></td>
<td><b>20.94</b></td>
<td><b>21.42</b></td>
<td>where; filesort</td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td>PK</td>
<td>0.00</td>
<td>0.03</td>
<td>0.00</td>
<td>0.02</td>
<td>0.00</td>
<td>0.04</td>
<td>where</td>
</tr>
<tr style="background: #eee">
<td>&nbsp;</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>time&gt;50000</td>
<td>4987990</td>
<td>count(*)</td>
<td></td>
<td></td>
<td>1.90</td>
<td>2.36</td>
<td>2.02</td>
<td>2.41</td>
<td>1.99</td>
<td>2.42</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(time)</td>
<td></td>
<td></td>
<td>1.90</td>
<td>2.23</td>
<td>2.01</td>
<td>2.32</td>
<td>1.96</td>
<td>2.29</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(id)</td>
<td></td>
<td></td>
<td>1.48</td>
<td>1.91</td>
<td>4.25</td>
<td>4.61</td>
<td>4.80</td>
<td>5.12</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>time</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>8.15</td>
<td>8.77</td>
<td>10.74</td>
<td>11.36</td>
<td>11.59</td>
<td>11.79</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
<tr style="background: #eee">
<td>&nbsp;</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>time&gt;80000</td>
<td>1991982</td>
<td>count(*)</td>
<td></td>
<td></td>
<td>0.76</td>
<td>0.95</td>
<td>0.83</td>
<td>0.98</td>
<td>0.80</td>
<td>1.00</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(time)</td>
<td></td>
<td></td>
<td>0.77</td>
<td>0.91</td>
<td>0.81</td>
<td>0.91</td>
<td>0.83</td>
<td>0.92</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(id)</td>
<td></td>
<td></td>
<td><b>1.38</b></td>
<td><b>1.86</b></td>
<td>4.17</td>
<td>4.49</td>
<td>4.71</td>
<td>5.02</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>time</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>3.26</td>
<td>3.44</td>
<td>4.26</td>
<td>4.51</td>
<td>4.56</td>
<td>4.76</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
<tr style="background: #eee">
<td>&nbsp;</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>time&gt;99900</td>
<td>10871</td>
<td>count(*)</td>
<td></td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.01</td>
<td>0.01</td>
<td>0.00</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(time)</td>
<td></td>
<td></td>
<td>0.01</td>
<td>0.01</td>
<td>0.01</td>
<td>0.00</td>
<td>0.01</td>
<td>0.01</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(id)</td>
<td></td>
<td></td>
<td>0.01</td>
<td>0.01</td>
<td>0.02</td>
<td>0.03</td>
<td>0.02</td>
<td>0.02</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>time</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>0.02</td>
<td>0.02</td>
<td>0.03</td>
<td>0.03</td>
<td>0.03</td>
<td>0.03</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
</table>
<h3>分析和结论</h3>
<p>count(*), count(time)和count(id)的对比. 结果有较大变化. 当表的字段只有2个且查询条件较宽松(即符合条件的记录数较多)时, count(id)比count(*)快很多, 但是, 当表中还有其它的字段时, count(id)反而更慢了. 虽然id是主键, time是索引列, 但是select count(id) where time并没有用到索引, 而是进行<b>全表扫描</b>. 当对count(*)进行ignore key(time)时, 查询时间和count(id)相同. <b>证明当结果集较大时索引导致查询变慢, </b>应该是全表扫描进行的是连续的磁盘IO和内存操作, 而使用索引是进行随机的磁盘IO和内存操作, 并且MyISAM存储索引的BTree结构占用更多的空间. 当WHERE条件约束更严格, total的值小到一定程度时, 全表扫描比使用索引慢, 因为索引极大减少了磁盘IO和内存操作.</p>
<p>排序字段和索引的使用. 当有排序且LIMIT(偏移为0)时, <b>如果查询时使用的索引不是排序字段的索引, 那么速度非常慢</b>. 当偏移不为0时, 如果使用排序列的索引, 要考虑偏移可能导致扫描的记录数, 所以应该根据情况选取合适的索引.</p>
<p><b>判断符合条件的记录是否存在, 使用select * limit 1速度要比select count(*)计数快得多</b>.</p>
<p>时间字段类型的选择. int比datetime快, 但差距不是很明显. </p>
<p>无论如何, 条件限制得越严格, 查询就会越快.</p>
<p>另外, 根据随机id更新时, 大约能达到5K行/s.</p>
<p><strong>列的先后顺序对查询性能的影响也非常大.</strong></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/357.html' rel='bookmark' title='Permanent Link: MySQL 查询使用 Group By 的注意点'>MySQL 查询使用 Group By 的注意点</a></li>
<li><a href='http://www.ideawu.net/blog/archives/133.html' rel='bookmark' title='Permanent Link: 写一个对搜索引擎友好的文章SEO分页类'>写一个对搜索引擎友好的文章SEO分页类</a></li>
<li><a href='http://www.ideawu.net/blog/archives/417.html' rel='bookmark' title='Permanent Link: MySQL 建立外键约束'>MySQL 建立外键约束</a></li>
<li><a href='http://www.ideawu.net/blog/archives/447.html' rel='bookmark' title='Permanent Link: Linux下编译安装Apache/Lighttpd+PHP+MySQL'>Linux下编译安装Apache/Lighttpd+PHP+MySQL</a></li>
<li><a href='http://www.ideawu.net/blog/archives/434.html' rel='bookmark' title='Permanent Link: 最简单的JavaScript两级联动示例'>最简单的JavaScript两级联动示例</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/590.html" title="MySQL&#8221;海量数据&#8221;查询性能分析">MySQL&#8221;海量数据&#8221;查询性能分析</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>最近做了一次<a href="http://www.ideawu.net/blog/tag/mysql">MySQL</a>所谓的&#8221;海量数据&#8221;查询性能分析.</p>
<h3>表结构</h3>
<table border="1" bordercolor="#666666" cellpadding="3" cellspacing="0"	width="98%" style="font-family: arial; font-size: 13px; border-collapse: collapse;">
<tr style="background: #bbb">
<td><b>dt</b></td>
<td><b>dt2</b></td>
<td><b>dt3</b></td>
<td><b>it</b></td>
<td><b>it2</b></td>
<td><b>it3</b></td>
<td><b></b></td>
</tr>
<tr>
<td>id</td>
<td>id</td>
<td>id</td>
<td>id</td>
<td>id</td>
<td>id</td>
<td>int PK</td>
</tr>
<tr>
<td></td>
<td></td>
<td><b>ext1</b></td>
<td></td>
<td></td>
<td><b>ext1</b></td>
<td>varchar(256)</td>
</tr>
<tr>
<td>time</td>
<td>time</td>
<td>time</td>
<td>time</td>
<td>time</td>
<td>time</td>
<td>int/datetime KEY</td>
</tr>
<tr>
<td></td>
<td><b>ext2</b></td>
<td><b>ext2</b></td>
<td></td>
<td><b>ext2</b></td>
<td><b>ext2</b></td>
<td>varchar(128)</td>
</tr>
</table>
<p>说明, MyISAM引擎, dt表示时间字段使用datetime类型, it表示时间字段使用int类型. </p>
<h3>初始数据</h3>
<p>首先生成100K个UNIX时间戳(int), 然后随机选取10M次, 每一次往6个表里插入一条记录(当time字段是datetime类型时, 做类型转换). 所以每一个表都有10M条记录. ext1和ext2字段会用随机的字符串填充.</p>
<p><span id="more-590"></span></p>
<h3>SQL查询</h3>
<p>使用的查询SQL语句如: </p>
<pre>
select SQL_NO_CACHE count(*) from it where time&gt;10000;
select SQL_NO_CACHE count(*) from dt where time&gt;from_unixtime(10000);
select SQL_NO_CACHE * from it where time&gt;10000 order by time limit 1;
select SQL_NO_CACHE * from it use key(PRIMARY) where time&gt;10000 order by id limit 1;
</pre>
<p>SQL_NO_CACHE用于消除查询结果缓存的影响. use key用于指定查询时使用的索引. 统计每一条SQL的执行时间(单位s)和满足WHERE条件的记录总数(total), it-tm表示在dt表上执行SQL的耗时, 并explain得到key和extra, 结果如下.</p>
<table border="1" bordercolor="#666666" cellpadding="3" cellspacing="0" width="98%" style="font-family: arial; font-size: 13px; border-collapse: collapse;">
<tr style="background: #bbb">
<td><b>where</b></td>
<td><b>total</b></td>
<td><b>select</b></td>
<td><b>orderby</b></td>
<td><b>key</b></td>
<td><b>it-tm</b></td>
<td><b>dt-tm</b></td>
<td><b>it2-tm</b></td>
<td><b>dt2-tm</b></td>
<td><b>it3-tm</b></td>
<td><b>dt3-tm</b></td>
<td><b>extra</b></td>
</tr>
<tr>
<td>time&gt;10000</td>
<td>8999050</td>
<td>count(*)</td>
<td></td>
<td>time</td>
<td>3.52</td>
<td>4.28</td>
<td>3.74</td>
<td>4.49</td>
<td>3.53</td>
<td>4.47</td>
<td>where; index</td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(time)</td>
<td></td>
<td>time</td>
<td>3.44</td>
<td>4.00</td>
<td>3.69</td>
<td>4.36</td>
<td>3.56</td>
<td>4.26</td>
<td>where; index</td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(id)</td>
<td></td>
<td>NULL</td>
<td><b>1.44</b></td>
<td><b>1.92</b></td>
<td>4.30</td>
<td>4.60</td>
<td>4.79</td>
<td>4.98</td>
<td>where</td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>time</td>
<td>time</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>where</td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td>time</td>
<td><b>14.81</b></td>
<td><b>15.38</b></td>
<td><b>19.37</b></td>
<td><b>20.30</b></td>
<td><b>20.94</b></td>
<td><b>21.42</b></td>
<td>where; filesort</td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td>PK</td>
<td>0.00</td>
<td>0.03</td>
<td>0.00</td>
<td>0.02</td>
<td>0.00</td>
<td>0.04</td>
<td>where</td>
</tr>
<tr style="background: #eee">
<td>&nbsp;</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>time&gt;50000</td>
<td>4987990</td>
<td>count(*)</td>
<td></td>
<td></td>
<td>1.90</td>
<td>2.36</td>
<td>2.02</td>
<td>2.41</td>
<td>1.99</td>
<td>2.42</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(time)</td>
<td></td>
<td></td>
<td>1.90</td>
<td>2.23</td>
<td>2.01</td>
<td>2.32</td>
<td>1.96</td>
<td>2.29</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(id)</td>
<td></td>
<td></td>
<td>1.48</td>
<td>1.91</td>
<td>4.25</td>
<td>4.61</td>
<td>4.80</td>
<td>5.12</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>time</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>8.15</td>
<td>8.77</td>
<td>10.74</td>
<td>11.36</td>
<td>11.59</td>
<td>11.79</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
<tr style="background: #eee">
<td>&nbsp;</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>time&gt;80000</td>
<td>1991982</td>
<td>count(*)</td>
<td></td>
<td></td>
<td>0.76</td>
<td>0.95</td>
<td>0.83</td>
<td>0.98</td>
<td>0.80</td>
<td>1.00</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(time)</td>
<td></td>
<td></td>
<td>0.77</td>
<td>0.91</td>
<td>0.81</td>
<td>0.91</td>
<td>0.83</td>
<td>0.92</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(id)</td>
<td></td>
<td></td>
<td><b>1.38</b></td>
<td><b>1.86</b></td>
<td>4.17</td>
<td>4.49</td>
<td>4.71</td>
<td>5.02</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>time</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>3.26</td>
<td>3.44</td>
<td>4.26</td>
<td>4.51</td>
<td>4.56</td>
<td>4.76</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
<tr style="background: #eee">
<td>&nbsp;</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>time&gt;99900</td>
<td>10871</td>
<td>count(*)</td>
<td></td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.01</td>
<td>0.01</td>
<td>0.00</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(time)</td>
<td></td>
<td></td>
<td>0.01</td>
<td>0.01</td>
<td>0.01</td>
<td>0.00</td>
<td>0.01</td>
<td>0.01</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>count(id)</td>
<td></td>
<td></td>
<td>0.01</td>
<td>0.01</td>
<td>0.02</td>
<td>0.03</td>
<td>0.02</td>
<td>0.02</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>time</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>0.02</td>
<td>0.02</td>
<td>0.03</td>
<td>0.03</td>
<td>0.03</td>
<td>0.03</td>
<td></td>
</tr>
<tr style="background: #ff9">
<td></td>
<td></td>
<td>*</td>
<td>id</td>
<td></td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td>0.00</td>
<td></td>
</tr>
</table>
<h3>分析和结论</h3>
<p>count(*), count(time)和count(id)的对比. 结果有较大变化. 当表的字段只有2个且查询条件较宽松(即符合条件的记录数较多)时, count(id)比count(*)快很多, 但是, 当表中还有其它的字段时, count(id)反而更慢了. 虽然id是主键, time是索引列, 但是select count(id) where time并没有用到索引, 而是进行<b>全表扫描</b>. 当对count(*)进行ignore key(time)时, 查询时间和count(id)相同. <b>证明当结果集较大时索引导致查询变慢, </b>应该是全表扫描进行的是连续的磁盘IO和内存操作, 而使用索引是进行随机的磁盘IO和内存操作, 并且MyISAM存储索引的BTree结构占用更多的空间. 当WHERE条件约束更严格, total的值小到一定程度时, 全表扫描比使用索引慢, 因为索引极大减少了磁盘IO和内存操作.</p>
<p>排序字段和索引的使用. 当有排序且LIMIT(偏移为0)时, <b>如果查询时使用的索引不是排序字段的索引, 那么速度非常慢</b>. 当偏移不为0时, 如果使用排序列的索引, 要考虑偏移可能导致扫描的记录数, 所以应该根据情况选取合适的索引.</p>
<p><b>判断符合条件的记录是否存在, 使用select * limit 1速度要比select count(*)计数快得多</b>.</p>
<p>时间字段类型的选择. int比datetime快, 但差距不是很明显. </p>
<p>无论如何, 条件限制得越严格, 查询就会越快.</p>
<p>另外, 根据随机id更新时, 大约能达到5K行/s.</p>
<p><strong>列的先后顺序对查询性能的影响也非常大.</strong></p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/357.html' rel='bookmark' title='Permanent Link: MySQL 查询使用 Group By 的注意点'>MySQL 查询使用 Group By 的注意点</a></li>
<li><a href='http://www.ideawu.net/blog/archives/133.html' rel='bookmark' title='Permanent Link: 写一个对搜索引擎友好的文章SEO分页类'>写一个对搜索引擎友好的文章SEO分页类</a></li>
<li><a href='http://www.ideawu.net/blog/archives/417.html' rel='bookmark' title='Permanent Link: MySQL 建立外键约束'>MySQL 建立外键约束</a></li>
<li><a href='http://www.ideawu.net/blog/archives/447.html' rel='bookmark' title='Permanent Link: Linux下编译安装Apache/Lighttpd+PHP+MySQL'>Linux下编译安装Apache/Lighttpd+PHP+MySQL</a></li>
<li><a href='http://www.ideawu.net/blog/archives/434.html' rel='bookmark' title='Permanent Link: 最简单的JavaScript两级联动示例'>最简单的JavaScript两级联动示例</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/590.html" title="MySQL&#8221;海量数据&#8221;查询性能分析">MySQL&#8221;海量数据&#8221;查询性能分析</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/590.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>高性能并发Web服务器实现核心内幕</title>
		<link>http://www.ideawu.net/blog/archives/589.html</link>
		<comments>http://www.ideawu.net/blog/archives/589.html#comments</comments>
		<pubDate>Fri, 29 Apr 2011 10:06:54 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[高性能Web架构]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/589.html</guid>
		<description><![CDATA[<p>今天, 和部门的同事一起分享了Web服务器的核心内幕, 把PPT奉上, 大家喜欢可以下载. 本PPT的出发点和许多所谓的XX源码分析非常不同.</p>
<div style="width:425px" id="__ss_7775049"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ideawu/web-7775049" title="高性能并发Web服务器实现核心内幕">高性能并发Web服务器实现核心内幕</a></strong> <object id="__sse7775049" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=web-110429050116-phpapp02&#038;rel=0&#038;stripped_title=web-7775049&#038;userName=ideawu" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse7775049" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=web-110429050116-phpapp02&#038;rel=0&#038;stripped_title=web-7775049&#038;userName=ideawu" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ideawu">ideawu</a> </div>
</p></div>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/606.html' rel='bookmark' title='Permanent Link: 关系数据库应用设计基础'>关系数据库应用设计基础</a></li>
<li><a href='http://www.ideawu.net/blog/archives/482.html' rel='bookmark' title='Permanent Link: 开发爬虫友好的Ajax网站'>开发爬虫友好的Ajax网站</a></li>
<li><a href='http://www.ideawu.net/blog/archives/364.html' rel='bookmark' title='Permanent Link: [不会停止]idea&#8217;s blog 即将停止了&#8230;'>[不会停止]idea&#8217;s blog 即将停止了&#8230;</a></li>
<li><a href='http://www.ideawu.net/blog/archives/355.html' rel='bookmark' title='Permanent Link: 朋友在中关村买华硕笔记本被骗'>朋友在中关村买华硕笔记本被骗</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/589.html" title="高性能并发Web服务器实现核心内幕">高性能并发Web服务器实现核心内幕</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>今天, 和部门的同事一起分享了Web服务器的核心内幕, 把PPT奉上, 大家喜欢可以下载. 本PPT的出发点和许多所谓的XX源码分析非常不同.</p>
<div style="width:425px" id="__ss_7775049"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/ideawu/web-7775049" title="高性能并发Web服务器实现核心内幕">高性能并发Web服务器实现核心内幕</a></strong> <object id="__sse7775049" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=web-110429050116-phpapp02&#038;rel=0&#038;stripped_title=web-7775049&#038;userName=ideawu" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse7775049" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=web-110429050116-phpapp02&#038;rel=0&#038;stripped_title=web-7775049&#038;userName=ideawu" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/ideawu">ideawu</a> </div>
</p></div>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/606.html' rel='bookmark' title='Permanent Link: 关系数据库应用设计基础'>关系数据库应用设计基础</a></li>
<li><a href='http://www.ideawu.net/blog/archives/482.html' rel='bookmark' title='Permanent Link: 开发爬虫友好的Ajax网站'>开发爬虫友好的Ajax网站</a></li>
<li><a href='http://www.ideawu.net/blog/archives/364.html' rel='bookmark' title='Permanent Link: [不会停止]idea&#8217;s blog 即将停止了&#8230;'>[不会停止]idea&#8217;s blog 即将停止了&#8230;</a></li>
<li><a href='http://www.ideawu.net/blog/archives/355.html' rel='bookmark' title='Permanent Link: 朋友在中关村买华硕笔记本被骗'>朋友在中关村买华硕笔记本被骗</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/589.html" title="高性能并发Web服务器实现核心内幕">高性能并发Web服务器实现核心内幕</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/589.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>面试IT业界顶尖企业所应该知道的10道题(2)</title>
		<link>http://www.ideawu.net/blog/archives/588.html</link>
		<comments>http://www.ideawu.net/blog/archives/588.html#comments</comments>
		<pubDate>Fri, 15 Apr 2011 12:55:42 +0000</pubDate>
		<dc:creator>ideawu</dc:creator>
				<category><![CDATA[IT技术和评论]]></category>
		<category><![CDATA[程序员]]></category>
		<category><![CDATA[面试IT业界顶尖企业所应该知道的10道题]]></category>

		<guid isPermaLink="false">http://www.ideawu.net/blog/archives/588.html</guid>
		<description><![CDATA[<p>题目: 设计一个网站的后端系统, 网页带有一个输入框, 该输入框可进行输入提示, 如用户输入&#8221;a&#8221;, 会提示一个下拉列表, 把以&#8221;a&#8221;开头的若干单词列出来, 词库总共有一千万个英文单词.</p>
<p>难度: 12K<br />
作者: <a href="http://www.ideawu.net/">ideawu</a><br />
领域: Web, 算法, 架构</p>
<h3>*** 解析 ***</h3>
<p>这道题不太涉及编码, 主要是考察面试者知识面广度, 架构设计能力. 面试者做的设计不能太理论化, 也不能具体到代码级别, 应该利用图, 表, 文字, 对话等方式来解.</p>
<p><span id="more-588"></span>首先考察面试者对 <a href="http://www.ideawu.net/blog/category/web">Web</a> 应用前端的原理是否了解, 如使用 AJAX.</p>
<p>这道题不应该用<a href="http://www.ideawu.net/blog/tag/mysql">数据库</a>来解决.</p>
<p>如果面试者回复&#8221;用&#8217;树&#8217;的数据结构来保存所有单词&#8221;, 则要求其设计这棵树的结构, 用图来画出来. 即使设计出了这样的树, 那么下一步, 将是如何实现的问题. 用什么语言? 主要的类和函数有哪些? 内存占用多少? 如何同 Web 结合?</p>
<p>如果面试者能把词典的存储和查询封装成一个网络服务, 那么这种思路可以加分. 下一步可以考察其对<a href="http://www.ideawu.net/blog/category/high-performance">高性能网络编程</a>的理解, 可不用具体到代码.</p>
<p>面试者提出其他方案也可, 关键是要看方案是否具有&#8221;可操作性&#8221;.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/587.html' rel='bookmark' title='Permanent Link: 面试IT业界顶尖企业所应该知道的10道题(1)'>面试IT业界顶尖企业所应该知道的10道题(1)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/482.html' rel='bookmark' title='Permanent Link: 开发爬虫友好的Ajax网站'>开发爬虫友好的Ajax网站</a></li>
<li><a href='http://www.ideawu.net/blog/archives/338.html' rel='bookmark' title='Permanent Link: Prado 中解决 Ajax 中文乱码问题'>Prado 中解决 Ajax 中文乱码问题</a></li>
<li><a href='http://www.ideawu.net/blog/archives/261.html' rel='bookmark' title='Permanent Link: Spring + Hibernate Web 开发者笔记'>Spring + Hibernate Web 开发者笔记</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/588.html" title="面试IT业界顶尖企业所应该知道的10道题(2)">面试IT业界顶尖企业所应该知道的10道题(2)</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></description>
			<content:encoded><![CDATA[<p>题目: 设计一个网站的后端系统, 网页带有一个输入框, 该输入框可进行输入提示, 如用户输入&#8221;a&#8221;, 会提示一个下拉列表, 把以&#8221;a&#8221;开头的若干单词列出来, 词库总共有一千万个英文单词.</p>
<p>难度: 12K<br />
作者: <a href="http://www.ideawu.net/">ideawu</a><br />
领域: Web, 算法, 架构</p>
<h3>*** 解析 ***</h3>
<p>这道题不太涉及编码, 主要是考察面试者知识面广度, 架构设计能力. 面试者做的设计不能太理论化, 也不能具体到代码级别, 应该利用图, 表, 文字, 对话等方式来解.</p>
<p><span id="more-588"></span>首先考察面试者对 <a href="http://www.ideawu.net/blog/category/web">Web</a> 应用前端的原理是否了解, 如使用 AJAX.</p>
<p>这道题不应该用<a href="http://www.ideawu.net/blog/tag/mysql">数据库</a>来解决.</p>
<p>如果面试者回复&#8221;用&#8217;树&#8217;的数据结构来保存所有单词&#8221;, 则要求其设计这棵树的结构, 用图来画出来. 即使设计出了这样的树, 那么下一步, 将是如何实现的问题. 用什么语言? 主要的类和函数有哪些? 内存占用多少? 如何同 Web 结合?</p>
<p>如果面试者能把词典的存储和查询封装成一个网络服务, 那么这种思路可以加分. 下一步可以考察其对<a href="http://www.ideawu.net/blog/category/high-performance">高性能网络编程</a>的理解, 可不用具体到代码.</p>
<p>面试者提出其他方案也可, 关键是要看方案是否具有&#8221;可操作性&#8221;.</p>


<h3>Related posts:</h3><ol><li><a href='http://www.ideawu.net/blog/archives/587.html' rel='bookmark' title='Permanent Link: 面试IT业界顶尖企业所应该知道的10道题(1)'>面试IT业界顶尖企业所应该知道的10道题(1)</a></li>
<li><a href='http://www.ideawu.net/blog/archives/482.html' rel='bookmark' title='Permanent Link: 开发爬虫友好的Ajax网站'>开发爬虫友好的Ajax网站</a></li>
<li><a href='http://www.ideawu.net/blog/archives/338.html' rel='bookmark' title='Permanent Link: Prado 中解决 Ajax 中文乱码问题'>Prado 中解决 Ajax 中文乱码问题</a></li>
<li><a href='http://www.ideawu.net/blog/archives/261.html' rel='bookmark' title='Permanent Link: Spring + Hibernate Web 开发者笔记'>Spring + Hibernate Web 开发者笔记</a></li>
<li><a href='http://www.ideawu.net/blog/archives/493.html' rel='bookmark' title='Permanent Link: 程序员的投资和理财之道'>程序员的投资和理财之道</a></li>
</ol><div><p><img src="http://www.ideawu.net/favicon.ico" /> 你现在看的文章是: <a href="http://www.ideawu.net/blog/archives/588.html" title="面试IT业界顶尖企业所应该知道的10道题(2)">面试IT业界顶尖企业所应该知道的10道题(2)</a></p>

<div>
	<a href="http://www.benegg.com/linode-ad.php">
		Linode VPS - 美国虚拟主机
	</a>
	|
	<a href="http://www.udpwork.com/">
		IT牛人博客聚合网站
	</a>
</div></div>]]></content:encoded>
			<wfw:commentRss>http://www.ideawu.net/blog/archives/588.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

