<?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>迷途羔羊</title>
	<atom:link href="http://matrix7.me/feed/" rel="self" type="application/rss+xml" />
	<link>http://matrix7.me</link>
	<description>——我只是一直迷途羔羊</description>
	<lastBuildDate>Fri, 18 Nov 2011 08:18:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>XP连接MySQL出现Can&#039;t connect to MySQL server on &#039;127.0.0.1&#039; (10061)错误的解决方法</title>
		<link>http://matrix7.me/2011/09/xp%e8%bf%9e%e6%8e%a5mysql%e5%87%ba%e7%8e%b0cant-connect-to-mysql-server-on-127-0-0-1-10061%e9%94%99%e8%af%af%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95/</link>
		<comments>http://matrix7.me/2011/09/xp%e8%bf%9e%e6%8e%a5mysql%e5%87%ba%e7%8e%b0cant-connect-to-mysql-server-on-127-0-0-1-10061%e9%94%99%e8%af%af%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 05:17:06 +0000</pubDate>
		<dc:creator>Matrix7</dc:creator>
				<category><![CDATA[问题]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://matrix7.me/?p=1178</guid>
		<description><![CDATA[今天在XP上使用MySQL数据库的时候遇到了这个错误： Can't connect to MySQL server on '127.0.0.1' (10061) 这个错误的发生主要有以下几个方面： MySQL服务未启动 密码错误 XP防火墙屏蔽了3306端口 其他杀毒软件或防火墙屏蔽3306端口 但是我今天遇到的问题并非上面任何一条造成，经过多方搜索，后来想起头一天在xp上安装了ipv6，于是把ipv6卸载后就好了。当然我还不知道为什么ipv6会导致这个问题，hosts文件中localhost的确是指向127.0.0.1的。 作者：迷途羔羊 &#124; 本文链接：XP连接MySQL出现Can't connect to MySQL server on '127.0.0.1' (10061)错误的解决方法 Matr7x版权所有，转载本站文章请注明，转载自 迷途羔羊。 最多留言日志December 20, 2010 -- EM算法（四）——混合高斯模型（GMM）中的EM算法 (34)下载：EM算法的Matlab实现 在上一篇文章中，我们推导出一个式子，只要使这个式子最大化，不停地迭代，即可估计出混合模型的参数。今天这篇文章会推导混合高斯模型中EM算法的迭代公式，利用该公式反...April 1, 2010 -- 【翻译】操作系统开发系列——前言 (31)操作系统开发系列——前言 Translated By Matrix7 本系列旨在展示和教授如何从零开始开发一个操作系统。 引言 欢迎大家来到这里！ 这是一系列关于计算机和操作系统的章节、...June 30, 2010 -- 六月的最后一天，追忆我离逝的大学 (15)六月的武汉，终于热了起来。毕业的季节，校园里弥漫着淡淡的忧伤，梧桐流干了眼泪，似乎不舍我们的离去，青年园依旧郁郁葱葱，庇荫着莘莘学子，即将建成的西一食堂，渐渐有了西二的影子，但我们却来不及在里面吃上一...March 28, 2010 -- 新的开始&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>今天在XP上使用MySQL数据库的时候遇到了这个错误：</p>
<p>Can't connect to MySQL server on '127.0.0.1' (10061)</p>
<p>这个错误的发生主要有以下几个方面：</p>
<ul>
<li>MySQL服务未启动</li>
<li>密码错误</li>
<li>XP防火墙屏蔽了3306端口</li>
<li>其他杀毒软件或防火墙屏蔽3306端口</li>
</ul>
<div>但是我今天遇到的问题并非上面任何一条造成，经过多方搜索，后来想起头一天在xp上安装了ipv6，于是把ipv6卸载后就好了。当然我还不知道为什么ipv6会导致这个问题，hosts文件中localhost的确是指向127.0.0.1的。</div>
<div style="margin-top: 15px;">
<p><strong>作者：</strong><a href="http://matrix7.me/">迷途羔羊</a> | <strong>本文链接：</strong><a href="http://matrix7.me/2011/09/xp%e8%bf%9e%e6%8e%a5mysql%e5%87%ba%e7%8e%b0cant-connect-to-mysql-server-on-127-0-0-1-10061%e9%94%99%e8%af%af%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95/">XP连接MySQL出现Can't connect to MySQL server on '127.0.0.1' (10061)错误的解决方法</a></p>
</div>
<div style="margin-left: 26px; margin-bottom: 15px;"><strong>Matr7x版权所有，转载本站文章请注明，转载自</strong> <a href="http://matrix7.me/">迷途羔羊</a>。</strong></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fmatrix7.me%2F2011%2F09%2Fxp%25e8%25bf%259e%25e6%258e%25a5mysql%25e5%2587%25ba%25e7%258e%25b0cant-connect-to-mysql-server-on-127-0-0-1-10061%25e9%2594%2599%25e8%25af%25af%25e7%259a%2584%25e8%25a7%25a3%25e5%2586%25b3%25e6%2596%25b9%25e6%25b3%2595%2F&title=XP%E8%BF%9E%E6%8E%A5MySQL%E5%87%BA%E7%8E%B0Can%27t+connect+to+MySQL+server+on+%27127.0.0.1%27+%2810061%29%E9%94%99%E8%AF%AF%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><h2  class="related_post_title">最多留言日志</h2><ul class="related_post"><li>December 20, 2010 -- <a href="http://matrix7.me/2010/12/em%e7%ae%97%e6%b3%95%ef%bc%88%e5%9b%9b%ef%bc%89%e2%80%94%e2%80%94%e6%b7%b7%e5%90%88%e9%ab%98%e6%96%af%e6%a8%a1%e5%9e%8b%ef%bc%88gmm%ef%bc%89%e4%b8%ad%e7%9a%84em%e7%ae%97%e6%b3%95/" title="EM算法（四）——混合高斯模型（GMM）中的EM算法">EM算法（四）——混合高斯模型（GMM）中的EM算法</a> (34)<br /><small>下载：EM算法的Matlab实现

在上一篇文章中，我们推导出一个式子，只要使这个式子最大化，不停地迭代，即可估计出混合模型的参数。今天这篇文章会推导混合高斯模型中EM算法的迭代公式，利用该公式反...</small></li><li>April 1, 2010 -- <a href="http://matrix7.me/2010/04/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94%e5%89%8d%e8%a8%80/" title="【翻译】操作系统开发系列——前言">【翻译】操作系统开发系列——前言</a> (31)<br /><small>操作系统开发系列——前言
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
引言
欢迎大家来到这里！

这是一系列关于计算机和操作系统的章节、...</small></li><li>June 30, 2010 -- <a href="http://matrix7.me/2010/06/%e5%85%ad%e6%9c%88%e7%9a%84%e6%9c%80%e5%90%8e%e4%b8%80%e5%a4%a9%ef%bc%8c%e8%bf%bd%e5%bf%86%e6%88%91%e7%a6%bb%e9%80%9d%e7%9a%84%e5%a4%a7%e5%ad%a6/" title="六月的最后一天，追忆我离逝的大学">六月的最后一天，追忆我离逝的大学</a> (15)<br /><small>六月的武汉，终于热了起来。毕业的季节，校园里弥漫着淡淡的忧伤，梧桐流干了眼泪，似乎不舍我们的离去，青年园依旧郁郁葱葱，庇荫着莘莘学子，即将建成的西一食堂，渐渐有了西二的影子，但我们却来不及在里面吃上一...</small></li><li>March 28, 2010 -- <a href="http://matrix7.me/2010/03/%e6%96%b0%e7%9a%84%e5%bc%80%e5%a7%8b/" title="新的开始&#8230;">新的开始&#8230;</a> (14)<br /><small>今天我计划了大半年的博客终于开张了，我会记住这一天2010年3月28日。

不知是太懒还是为什么，一直想拥有一个个人网站，却迟迟没有动作，如果不是今天看到朱俊同学的新博客，可能今天我的博客还不能开...</small></li><li>April 26, 2010 -- <a href="http://matrix7.me/2010/04/vesa%e7%bc%96%e7%a8%8b%e2%80%94%e2%80%94gui%e7%a6%bb%e6%88%91%e4%bb%ac%e5%b9%b6%e4%b8%8d%e9%81%a5%e8%bf%9c/" title="VESA编程——GUI离我们并不遥远">VESA编程——GUI离我们并不遥远</a> (14)<br /><small>下载:Vesa Demo
下载:Vesa Source
自从学习操作系统开发以来，所接触到的操作系统开发资料都是关于文本模式的。然而黑色的命令行始终没有色彩斑斓的图形界面吸引眼球，所以查阅了很多资...</small></li><li>May 4, 2010 -- <a href="http://matrix7.me/2010/05/%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94%e5%8e%86%e5%8f%b2%e4%b8%8e%e5%9f%ba%e6%9c%ac%e7%90%86%e8%ae%ba/" title="【翻译】操作系统开发系列——历史与基本理论">【翻译】操作系统开发系列——历史与基本理论</a> (12)<br /><small>操作系统开发系列——历史与基本理论
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎来到奇妙而又令人疯狂的操作系统世界！

在前一...</small></li><li>July 9, 2010 -- <a href="http://matrix7.me/2010/07/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94bootloaders/" title="【翻译】操作系统开发系列——Bootloaders">【翻译】操作系统开发系列——Bootloaders</a> (9)<br /><small>操作系统开发系列——Bootloaders
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎光临！本章教程相信您已期待很久。本章我们将...</small></li><li>March 28, 2010 -- <a href="http://matrix7.me/about/" title="About">About</a> (9)<br /><small>声明
本站为个人站点，未注明出处的文章均为原创，转载请注明出处，如果您觉得本站有侵犯您权利/权益的地方，请第一时间通知我，我会在收到通知的第一时间撤掉涉嫌侵权的内容。
关于我
本科毕业于华中科技...</small></li></ul>]]></content:encoded>
			<wfw:commentRss>http://matrix7.me/2011/09/xp%e8%bf%9e%e6%8e%a5mysql%e5%87%ba%e7%8e%b0cant-connect-to-mysql-server-on-127-0-0-1-10061%e9%94%99%e8%af%af%e7%9a%84%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pylite：准备开发一款轻量级Python编辑器</title>
		<link>http://matrix7.me/2011/09/pylite%ef%bc%9a%e5%87%86%e5%a4%87%e5%bc%80%e5%8f%91%e4%b8%80%e6%ac%be%e8%bd%bb%e9%87%8f%e7%ba%a7python%e7%bc%96%e8%be%91%e5%99%a8/</link>
		<comments>http://matrix7.me/2011/09/pylite%ef%bc%9a%e5%87%86%e5%a4%87%e5%bc%80%e5%8f%91%e4%b8%80%e6%ac%be%e8%bd%bb%e9%87%8f%e7%ba%a7python%e7%bc%96%e8%be%91%e5%99%a8/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 02:24:44 +0000</pubDate>
		<dc:creator>Matrix7</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[程序&工具]]></category>
		<category><![CDATA[Editor]]></category>
		<category><![CDATA[编辑器]]></category>

		<guid isPermaLink="false">http://matrix7.me/?p=1170</guid>
		<description><![CDATA[鉴于目前现有的Python编辑器都用起来不太顺手，所以决定自己开发一款轻量级Python编辑器（Windows版本）。 目前项目名称暂时定为Pylite。 初定定下来这款编辑器应该具有以下特性： 界面友好 快捷键操作 源代码高亮 智能提示 代码折叠 代码跳转 重构 复制为HTML/CSS 内存占用小 类信息显示 准备用C++实现。为了保证轻量级，内存占用小的特性，所以决定使用C++来实现。当然Python会作为辅助语言，提供一些功能。 至于跨平台的问题，如果Windows版本做得好就会考虑。 从Edit控件开始。 作者：迷途羔羊 &#124; 本文链接：Pylite：准备开发一款轻量级Python编辑器 Matr7x版权所有，转载本站文章请注明，转载自 迷途羔羊。 最多留言日志December 20, 2010 -- EM算法（四）——混合高斯模型（GMM）中的EM算法 (34)下载：EM算法的Matlab实现 在上一篇文章中，我们推导出一个式子，只要使这个式子最大化，不停地迭代，即可估计出混合模型的参数。今天这篇文章会推导混合高斯模型中EM算法的迭代公式，利用该公式反...April 1, 2010 -- 【翻译】操作系统开发系列——前言 (31)操作系统开发系列——前言 Translated By Matrix7 本系列旨在展示和教授如何从零开始开发一个操作系统。 引言 欢迎大家来到这里！ 这是一系列关于计算机和操作系统的章节、...June 30, 2010 -- 六月的最后一天，追忆我离逝的大学 (15)六月的武汉，终于热了起来。毕业的季节，校园里弥漫着淡淡的忧伤，梧桐流干了眼泪，似乎不舍我们的离去，青年园依旧郁郁葱葱，庇荫着莘莘学子，即将建成的西一食堂，渐渐有了西二的影子，但我们却来不及在里面吃上一...March 28, 2010 -- 新的开始&#8230; (14)今天我计划了大半年的博客终于开张了，我会记住这一天2010年3月28日。 不知是太懒还是为什么，一直想拥有一个个人网站，却迟迟没有动作，如果不是今天看到朱俊同学的新博客，可能今天我的博客还不能开...April 26, 2010 -- VESA编程——GUI离我们并不遥远 [...]]]></description>
			<content:encoded><![CDATA[<p>鉴于目前现有的Python编辑器都用起来不太顺手，所以决定自己开发一款轻量级Python编辑器（Windows版本）。</p>
<p>目前项目名称暂时定为Pylite。</p>
<p>初定定下来这款编辑器应该具有以下特性：</p>
<ul>
<li>界面友好</li>
<li>快捷键操作</li>
<li>源代码高亮</li>
<li>智能提示</li>
<li>代码折叠</li>
<li>代码跳转</li>
<li>重构</li>
<li>复制为HTML/CSS</li>
<li>内存占用小</li>
<li>类信息显示</li>
</ul>
<p>准备用C++实现。为了保证轻量级，内存占用小的特性，所以决定使用C++来实现。当然Python会作为辅助语言，提供一些功能。</p>
<p>至于跨平台的问题，如果Windows版本做得好就会考虑。</p>
<p>从Edit控件开始。
<div style="margin-top: 15px;">
<p><strong>作者：</strong><a href="http://matrix7.me/">迷途羔羊</a> | <strong>本文链接：</strong><a href="http://matrix7.me/2011/09/pylite%ef%bc%9a%e5%87%86%e5%a4%87%e5%bc%80%e5%8f%91%e4%b8%80%e6%ac%be%e8%bd%bb%e9%87%8f%e7%ba%a7python%e7%bc%96%e8%be%91%e5%99%a8/">Pylite：准备开发一款轻量级Python编辑器</a></p>
</div>
<div style="margin-left: 26px; margin-bottom: 15px;"><strong>Matr7x版权所有，转载本站文章请注明，转载自</strong> <a href="http://matrix7.me/">迷途羔羊</a>。</strong></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fmatrix7.me%2F2011%2F09%2Fpylite%25ef%25bc%259a%25e5%2587%2586%25e5%25a4%2587%25e5%25bc%2580%25e5%258f%2591%25e4%25b8%2580%25e6%25ac%25be%25e8%25bd%25bb%25e9%2587%258f%25e7%25ba%25a7python%25e7%25bc%2596%25e8%25be%2591%25e5%2599%25a8%2F&title=Pylite%EF%BC%9A%E5%87%86%E5%A4%87%E5%BC%80%E5%8F%91%E4%B8%80%E6%AC%BE%E8%BD%BB%E9%87%8F%E7%BA%A7Python%E7%BC%96%E8%BE%91%E5%99%A8" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><h2  class="related_post_title">最多留言日志</h2><ul class="related_post"><li>December 20, 2010 -- <a href="http://matrix7.me/2010/12/em%e7%ae%97%e6%b3%95%ef%bc%88%e5%9b%9b%ef%bc%89%e2%80%94%e2%80%94%e6%b7%b7%e5%90%88%e9%ab%98%e6%96%af%e6%a8%a1%e5%9e%8b%ef%bc%88gmm%ef%bc%89%e4%b8%ad%e7%9a%84em%e7%ae%97%e6%b3%95/" title="EM算法（四）——混合高斯模型（GMM）中的EM算法">EM算法（四）——混合高斯模型（GMM）中的EM算法</a> (34)<br /><small>下载：EM算法的Matlab实现

在上一篇文章中，我们推导出一个式子，只要使这个式子最大化，不停地迭代，即可估计出混合模型的参数。今天这篇文章会推导混合高斯模型中EM算法的迭代公式，利用该公式反...</small></li><li>April 1, 2010 -- <a href="http://matrix7.me/2010/04/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94%e5%89%8d%e8%a8%80/" title="【翻译】操作系统开发系列——前言">【翻译】操作系统开发系列——前言</a> (31)<br /><small>操作系统开发系列——前言
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
引言
欢迎大家来到这里！

这是一系列关于计算机和操作系统的章节、...</small></li><li>June 30, 2010 -- <a href="http://matrix7.me/2010/06/%e5%85%ad%e6%9c%88%e7%9a%84%e6%9c%80%e5%90%8e%e4%b8%80%e5%a4%a9%ef%bc%8c%e8%bf%bd%e5%bf%86%e6%88%91%e7%a6%bb%e9%80%9d%e7%9a%84%e5%a4%a7%e5%ad%a6/" title="六月的最后一天，追忆我离逝的大学">六月的最后一天，追忆我离逝的大学</a> (15)<br /><small>六月的武汉，终于热了起来。毕业的季节，校园里弥漫着淡淡的忧伤，梧桐流干了眼泪，似乎不舍我们的离去，青年园依旧郁郁葱葱，庇荫着莘莘学子，即将建成的西一食堂，渐渐有了西二的影子，但我们却来不及在里面吃上一...</small></li><li>March 28, 2010 -- <a href="http://matrix7.me/2010/03/%e6%96%b0%e7%9a%84%e5%bc%80%e5%a7%8b/" title="新的开始&#8230;">新的开始&#8230;</a> (14)<br /><small>今天我计划了大半年的博客终于开张了，我会记住这一天2010年3月28日。

不知是太懒还是为什么，一直想拥有一个个人网站，却迟迟没有动作，如果不是今天看到朱俊同学的新博客，可能今天我的博客还不能开...</small></li><li>April 26, 2010 -- <a href="http://matrix7.me/2010/04/vesa%e7%bc%96%e7%a8%8b%e2%80%94%e2%80%94gui%e7%a6%bb%e6%88%91%e4%bb%ac%e5%b9%b6%e4%b8%8d%e9%81%a5%e8%bf%9c/" title="VESA编程——GUI离我们并不遥远">VESA编程——GUI离我们并不遥远</a> (14)<br /><small>下载:Vesa Demo
下载:Vesa Source
自从学习操作系统开发以来，所接触到的操作系统开发资料都是关于文本模式的。然而黑色的命令行始终没有色彩斑斓的图形界面吸引眼球，所以查阅了很多资...</small></li><li>May 4, 2010 -- <a href="http://matrix7.me/2010/05/%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94%e5%8e%86%e5%8f%b2%e4%b8%8e%e5%9f%ba%e6%9c%ac%e7%90%86%e8%ae%ba/" title="【翻译】操作系统开发系列——历史与基本理论">【翻译】操作系统开发系列——历史与基本理论</a> (12)<br /><small>操作系统开发系列——历史与基本理论
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎来到奇妙而又令人疯狂的操作系统世界！

在前一...</small></li><li>July 9, 2010 -- <a href="http://matrix7.me/2010/07/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94bootloaders/" title="【翻译】操作系统开发系列——Bootloaders">【翻译】操作系统开发系列——Bootloaders</a> (9)<br /><small>操作系统开发系列——Bootloaders
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎光临！本章教程相信您已期待很久。本章我们将...</small></li><li>March 28, 2010 -- <a href="http://matrix7.me/about/" title="About">About</a> (9)<br /><small>声明
本站为个人站点，未注明出处的文章均为原创，转载请注明出处，如果您觉得本站有侵犯您权利/权益的地方，请第一时间通知我，我会在收到通知的第一时间撤掉涉嫌侵权的内容。
关于我
本科毕业于华中科技...</small></li></ul>]]></content:encoded>
			<wfw:commentRss>http://matrix7.me/2011/09/pylite%ef%bc%9a%e5%87%86%e5%a4%87%e5%bc%80%e5%8f%91%e4%b8%80%e6%ac%be%e8%bd%bb%e9%87%8f%e7%ba%a7python%e7%bc%96%e8%be%91%e5%99%a8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>【翻译】操作系统开发系列——Bootloaders 4</title>
		<link>http://matrix7.me/2011/06/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94bootloaders-4/</link>
		<comments>http://matrix7.me/2011/06/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94bootloaders-4/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 09:30:20 +0000</pubDate>
		<dc:creator>Matrix7</dc:creator>
				<category><![CDATA[操作系统开发系列]]></category>
		<category><![CDATA[Bootloader]]></category>
		<category><![CDATA[CHS]]></category>
		<category><![CDATA[FAT12]]></category>
		<category><![CDATA[LBA]]></category>
		<category><![CDATA[引导程序]]></category>
		<category><![CDATA[扇区]]></category>
		<category><![CDATA[操作系统]]></category>
		<category><![CDATA[文件分配表]]></category>
		<category><![CDATA[文件系统]]></category>
		<category><![CDATA[根目录]]></category>
		<category><![CDATA[汇编]]></category>
		<category><![CDATA[簇]]></category>

		<guid isPermaLink="false">http://matrix7.me/?p=1144</guid>
		<description><![CDATA[操作系统开发系列——Bootloaders Translated By Matrix7 本系列旨在展示和教授如何从零开始开发一个操作系统。 简介 欢迎！在前一章中我们学习了如何加载和执行一个扇区。同时我们学习了汇编语言中的Ring以及详细了解了BIOS参数块（BPB）。 在这一章中，我们将用我们所学的所有东西去解析FAT12文件系统，同时通过名字来加载我们的二级loader。 这一章中会包含很多的代码。我将会尽我所能去解释每一个细节。同时，这一章中会需要一些数学知识。准备好了吗？ cli和hlt 你可能会好奇，为什么我所有的演示程序都以“cli”和“hlt”指令结尾。事实上它非常简单。如果没有一种停止程序的某种方式，则CPU会超出你的程序去执行一些随机的指令。这将最终导致结束于一个三重故障。 我清除中断的原因是因为中断会被执行（在系统没有停止之前），甚至在我想要停止系统的时候。这会产生一些问题。因此，如果仅仅只有hlt指令（没有cli）也会是cpu产生三重故障。 因此，我总是以cli和hlt来结束我的演示。 文件系统——理论 好极了！是时候来学习文件系统了:) 一个文件系统就是一个详细的规格。用于帮组我们建立磁盘上“文件”的概念。 一个文件是一组代表某种东西的数据。这些数据可以是任何我们需要的。它完全依赖于我们如何解释这些数据。 正如你所知，一个扇区是512字节。一个文件在磁盘是以跨越扇区的形式存储。如果文件超出了512字节，我们需要给它分配更多的扇区。因为并不是所有的文件都是均匀的512字节，我们需要填充剩下的字节（那些文件不需要的）。就像我们在我们的bootloader中所做的一样。 如果一个文件跨越几个扇区，在FAT文件系统中我们称这些扇区为一个簇。例如，我们的内核将会很可能跨越许多个扇区。为了加载我们的内核，我们需要从它所在的地方加载簇（几个扇区）。 如果一个文件跨越了都个扇区（不连续）跨越了多个簇，那么就称它形成了碎片。我们将需要收集文件的不同部分。 有许多不同种类的文件系统。其中一些被广泛运用（如FAT12，FAT16，FAT32，NTFS，ext（Linux），HFS（用在比较老的MAC中））；其他的一些文件系统仅仅被特定的公司内部使用（如GFS——Google File System）。 许多的操作系统开发人员在FAT文件系统的基础上创建他们自己的文件系统（或者甚至一些完全新的东西）。这些通常没有最常用的文件系统（如FAT和NTFS）好。 OK，我们现在知道了一点文件系统的知识。我们将会使用FAT12文件系统，因为它简单。如果我们想，我们同样可以用完全不同的另外一种:) FAT12文件系统——理论 FAT12是第一个FAT（File Allocation Table）文件系统，发布于1977年，用在微软磁盘BASIC版。FAT12，作为一款比较老的，通常用于软盘的文件系统，通常有一些限制。 FAT12不支持分层目录。这意味着它只有一个目录——根目录。 簇地址仅为12位长，限制了最大的簇数为4096 文件名以一个12位的标识存储在文件分配表中。簇地址代表文件的其实簇。 因为簇地址的限制，最大文件数为4077 磁盘的大小仅以16位计数扇区，限制其大小为32MB大小 FAT12使用“0x01”标识分区 既然有这么大的限制，那么为什么我们要使用FAT12文件系统呢？ FAT16支持目录，以及超过64000个文件因为它使用了一个16位的簇（文件）地址，与其FAT16的名字相符。然而，FAT16和FAT12非常相似。 为了简便，我们将使用FAT12。我们以后可能会用FAT16（或者甚至FAT32）来完善我们的系统:)（FAT32与FAT12/16有相当大的区别，所以我们后来可能最终使用FAT16）。 FAT12文件系统——磁盘存储 为了更多地理解FAT12文件系统以及它是如何工作的，我们最好首先看看一个典型的格式化后的磁盘的结构。 引导扇区 额外保留扇区 文件分配表 1 文件分配表 2 根目录 (仅用于FAT12/FAT16) 数据区域包含文件和文件夹 这是一个典型的格式化后的FAT12磁盘，从bootloader到磁盘的最后一个扇区。 理解这个结构对于我们加载和搜索我们的文件非常关键。 注意一个磁盘上有2个FAT。它的位置在保留扇区（或者bootloader，如果没有保留扇区）的右边。 同样注意：根目录在所有的FAT的右边。这意味着… 如果我们将每个FAT的扇区个数加起来，还有保留扇区，我们就可以得到根目录的第一个扇区。通过搜索根目录中的一个简单字符串（我们的文件名），我们就能够找到文件在磁盘上所在的确切扇区：）。 让我们更进一步学习… [...]]]></description>
			<content:encoded><![CDATA[<h1 style="text-align: center;">操作系统开发系列——Bootloaders</h1>
<h3 style="text-align: center;">Translated By <a href="http://matrix7.me/" target="_blank">Matrix7</a></h3>
<p>本系列旨在展示和教授如何从零开始开发一个操作系统。</p>
<h1><span style="color: #008000;">简介</span></h1>
<p>欢迎！在前一章中我们学习了如何加载和执行一个扇区。同时我们学习了汇编语言中的Ring以及详细了解了BIOS参数块（BPB）。</p>
<p>在这一章中，我们将用我们所学的所有东西去解析FAT12文件系统，同时通过名字来加载我们的二级loader。</p>
<p>这一章中会包含很多的代码。我将会尽我所能去解释每一个细节。同时，这一章中会需要一些数学知识。准备好了吗？</p>
<p><span id="more-1144"></span></p>
<h1><span style="color: #008000;">cli和hlt</span></h1>
<p>你可能会好奇，为什么我所有的演示程序都以“cli”和“hlt”指令结尾。事实上它非常简单。如果没有一种停止程序的某种方式，则CPU会超出你的程序去执行一些随机的指令。这将最终导致结束于一个三重故障。</p>
<p>我清除中断的原因是因为中断会被执行（在系统没有停止之前），甚至在我想要停止系统的时候。这会产生一些问题。因此，如果仅仅只有<strong>hlt</strong>指令（没有<strong>cli</strong>）也会是cpu产生三重故障。</p>
<p>因此，我总是以<strong>cli</strong><strong>和hlt</strong>来结束我的演示。</p>
<h1><span style="color: #008000;">文件系统——理论</span></h1>
<p>好极了！是时候来学习文件系统了:)</p>
<p>一个<strong>文件系统</strong>就是一个详细的规格。用于帮组我们建立磁盘上“文件”的概念。</p>
<p>一个<strong>文件</strong>是一组代表某种东西的数据。这些数据可以是任何我们需要的。它完全依赖于我们如何解释这些数据。</p>
<p>正如你所知，一个扇区是512字节。一个<strong>文件</strong>在磁盘是以跨越扇区的形式存储。如果文件超出了512字节，我们需要给它分配更多的扇区。因为并不是所有的文件都是均匀的512字节，我们需要填充剩下的字节（那些文件不需要的）。就像我们在我们的bootloader中所做的一样。</p>
<p>如果一个文件跨越几个扇区，在FAT文件系统中我们称这些扇区为一个<strong>簇</strong>。例如，我们的内核将会很可能跨越许多个扇区。为了加载我们的内核，我们需要从它所在的地方加载<strong>簇</strong>（几个扇区）。</p>
<p>如果一个文件跨越了都个扇区（不连续）跨越了多个簇，那么就称它<strong>形成了碎片</strong>。我们将需要收集文件的不同部分。</p>
<p>有许多不同种类的文件系统。其中一些被广泛运用（如FAT12，FAT16，FAT32，NTFS，ext（Linux），HFS（用在比较老的MAC中））；其他的一些文件系统仅仅被特定的公司内部使用（如GFS——Google File System）。</p>
<p>许多的操作系统开发人员在FAT文件系统的基础上创建他们自己的文件系统（或者甚至一些完全新的东西）。这些通常没有最常用的文件系统（如FAT和NTFS）好。</p>
<p>OK，我们现在知道了一点文件系统的知识。我们将会使用FAT12文件系统，因为它简单。如果我们想，我们同样可以用完全不同的另外一种:)</p>
<h1><span style="color: #008000;">FAT12文件系统——理论</span></h1>
<p>FAT12是第一个FAT（File Allocation Table）文件系统，发布于1977年，用在微软磁盘BASIC版。FAT12，作为一款比较老的，通常用于软盘的文件系统，通常有一些限制。</p>
<ul>
<li>FAT12不支持分层目录。这意味着它只有一个目录——<strong>根目录</strong>。</li>
<li>簇地址仅为12位长，限制了最大的簇数为4096</li>
<li><strong>文件名以一个12位的标识存储在文件分配表中。簇地址代表文件的其实簇。</strong></li>
<li>因为簇地址的限制，<strong>最大文件数为4077</strong></li>
<li>磁盘的大小仅以16位计数扇区，限制其大小为32MB大小</li>
<li>FAT12使用“0x01”标识分区</li>
</ul>
<p>既然有这么大的限制，那么为什么我们要使用FAT12文件系统呢？</p>
<p>FAT16支持目录，以及超过64000个文件因为它使用了一个16位的簇（文件）地址，与其FAT16的名字相符。然而，<strong>FAT16和FAT12非常相似</strong>。</p>
<p>为了简便，我们将使用FAT12。我们以后可能会用FAT16（或者甚至FAT32）来完善我们的系统:)（FAT32与FAT12/16有相当大的区别，所以我们后来可能最终使用FAT16）。</p>
<h1><span style="color: #008000;">FAT12文件系统——磁盘存储</span></h1>
<p>为了更多地理解FAT12文件系统以及它是如何工作的，我们最好首先看看一个典型的格式化后的磁盘的结构。</p>
<div style="border: 1px solid #00DD00;">
<table>
<tbody>
<tr style="background-color: #00dd00;">
<td>引导扇区</td>
<td>额外保留扇区</td>
<td>文件分配表 1</td>
<td>文件分配表 2</td>
<td>根目录 (仅用于FAT12/FAT16)</td>
<td>数据区域包含文件和文件夹</td>
</tr>
</tbody>
</table>
</div>
<p>这是一个典型的格式化后的FAT12磁盘，从bootloader到磁盘的最后一个扇区。</p>
<p>理解这个结构对于我们加载和搜索我们的文件非常关键。</p>
<p><strong>注意一个磁盘上有2个FAT。它的位置在保留扇区（或者bootloader，如果没有保留扇区）的右边。</strong></p>
<p><strong>同样注意：根目录在所有的FAT的右边。</strong>这意味着…</p>
<p><strong>如果我们将每个FAT的扇区个数加起来，还有保留扇区，我们就可以得到根目录的第一个扇区。</strong>通过搜索根目录中的一个简单字符串（我们的文件名），我们就能够找到文件在磁盘上所在的确切扇区：）。</p>
<p>让我们更进一步学习…</p>
<h3><span style="color: #ff6600;">引导扇区</span></h3>
<p>这部分包含BIOS参数块和bootloader。是的——我们的。BIOS参数块包含用于描述我们磁盘的信息。</p>
<h3><span style="color: #ff6600;">额外保留扇区</span></h3>
<p>还记得我们的BPB中的bpbReservedSectors 成员吗？任何额外的保留扇区被储存在这，就在引导扇区的后面。</p>
<h3><span style="color: #ff6600;">文件分配表（FATs）</span></h3>
<p>我们知道一个簇表示磁盘上一系列连续的扇区，每个簇的大小一般在2KB到32KB之间。文件片段是通过一个簇到另一个簇不断链接起来的，使用了一种通用的数据结构，比如说一个链表。</p>
<p>总共有两个文件分配表。然而，后一个文件分配表只是前一个的拷贝，用于数据恢复的目的，通常不会使用它。</p>
<p><strong>文件分配表（FAT）是一个映射到相应簇的实体的链表。他们帮助我们标识重要信息，以助于在这些簇中存储数据。</strong></p>
<p>每一个实体是一个12位的值代表一个簇。<strong>文件分配表是一个类似于链表的数据结构，它的实体用于帮助我们表示正在使用的簇。</strong></p>
<p>为了更好地理解，让我们看看它的一些可能值：</p>
<ul>
<li><strong>标识未使用的簇的值</strong>：0x00</li>
<li><strong>标识保留簇的值</strong>：0x01</li>
<li><strong>正在使用的簇——它的值代表下一个簇</strong>：0x002到0Xfef</li>
<li><strong>保留值</strong>：0xFF0到0xFF6</li>
<li><strong>标识坏簇的值</strong>：0xFF7</li>
<li><strong>标识文件中最后一个簇的值</strong>：0xFF8到0xFFF</li>
</ul>
<p>一个文件分配表就是这些值的一个数组——这就是全部。当我们从根目录中找到起始扇区，我们就可以查询FAT找出需要加载哪些簇。如何实现？我们只需要检查它的值。如果值在0x02到0xfef之间      ，它的值就表示访问这个文件所需要加载的下一个簇。</p>
<p>让我们更深入地学习它。一个<strong>簇</strong>，正如你所知，代表一系列扇区。我们在BIOS参数块中定义一个簇所代表的扇区数：</p>
<pre class="brush: cpp; title: ; notranslate">
bpbBytesPerSector:  	DW 512
bpbSectorsPerCluster: 	DB 1
</pre>
<p>在这里，一个簇是一个扇区。当我们得到了Stage 2的第一个扇区（我们通过根目录获取），我们就可以将这个扇区作为FAT中的起始簇号。一旦我们找到了起始簇，我们只需要引用FAT来确定簇（FAT就是一个12位数的数组。我们只需要将这些数与上面列出来的值比较就可以确定如何处理它们。）</p>
<h3><span style="color: #ff6600;">根目录表</span></h3>
<p>现在，<strong>它</strong>对我们非常重要:)</p>
<p>根目录是一个表示相关文件和目录信息的32字节值的表。这个32位值使用如下的格式：</p>
<ul>
<li><strong>字节0-7：DOS文件名（多的用空格填充）</strong></li>
<li><strong>字节8-10：DOS文件扩展名（多的用空格填充）</strong></li>
<li><strong>字节11：</strong>文件属性。这是一个位模式：
<ul>
<li><strong>位0：</strong>只读</li>
<li><strong>位1：</strong>隐藏</li>
<li><strong>位2：</strong>系统</li>
<li><strong>位3：</strong>卷标签</li>
<li><strong>位4：</strong>这是一个子目录</li>
<li><strong>位5：</strong>存档</li>
<li><strong>位6：</strong>设备（内部使用）</li>
<li><strong>位7：</strong>未使用</li>
</ul>
</li>
<li><strong>字节12：</strong>未使用</li>
<li><strong>字节13：</strong>创建时间单位毫秒</li>
<li><strong>字节14-15：</strong>创建时间，使用下面的格式：
<ul>
<li><strong>位0-4：</strong>秒（0-29）</li>
<li><strong>位5-10：</strong>分钟（0-59）</li>
<li><strong>位11-15：</strong>小时（0-23）</li>
</ul>
</li>
<li><strong>字节16-17：</strong>创建日期，使用下面的格式：
<ul>
<li><strong>位0-4：</strong>年（0=1980；127=2107）</li>
<li><strong>位5-8：</strong>月（1=一月；12=十二月）</li>
<li><strong>位9-15：</strong>日（1-31）</li>
</ul>
</li>
<li><strong>字节18-19：</strong>上一次访问日期（和上面一样的格式）</li>
<li><strong>字节20-21：</strong>EA索引（用在OS/2和NT中，不用担心它）</li>
<li><strong>字节22-23：</strong>上一次修改时间（格式参照字节14-15）</li>
<li><strong>字节24-25：</strong>上一次修改日期（格式参照字节16-17）</li>
<li><strong>字节26-27：</strong>第一个簇</li>
<li><strong>字节28-32：</strong>文件大小</li>
</ul>
<p>我加粗了其中重要的部分——其他的都是垃圾，微软增加了我们后面在创建FAT12驱动器时要增加的东西。等一下！</p>
<p>还记得DOS文件名被限制在11字节？这是为什么？</p>
<ul>
<li><strong>字节0-7：DOS文件名（多的用空格填充）</strong></li>
<li><strong>字节8-10：DOS文件扩展名（多的用空格填充）</strong></li>
</ul>
<p>0到10，嗯…总共11字节。如果一个文件名小于11字节，将会错过数据实体（上面显示的32字节实体表）。这当然很糟糕：）因此，我们不得不用字符填充文件名，保证它是11字节。</p>
<p>还记得上一章中我解释过什么是<strong>内部</strong>和<strong>外部</strong>文件名吗？我解释过的文件名结构是内部文件名。因为它被限制为11字节，所以文件名“Stage2.sys”必须为</p>
<pre class="brush: cpp; title: ; notranslate">
&quot;STAGE2  SYS&quot; (Note the padding!)
</pre>
<h1><span style="color: #008000;">搜索和读取FAT12——理论</span></h1>
<p>好，阅读上面的内容之后，你可能厌倦我说“FAT12”了：）</p>
<p>无论如何…这些信息都对我们来说非常重要！</p>
<p>我们下面将更多地参考BIOS参数块（BPB）。下面是我们在上一章中用于参考而创建的BPB：</p>
<pre class="brush: cpp; title: ; notranslate">
bpbBytesPerSector:  	DW 512
bpbSectorsPerCluster: 	DB 1
bpbReservedSectors: 	DW 1
bpbNumberOfFATs: 	    DB 2
bpbRootEntries: 	    DW 224
bpbTotalSectors: 	    DW 2880
bpbMedia: 		        DB 0xF0
bpbSectorsPerFAT: 	    DW 9
bpbSectorsPerTrack: 	DW 18
bpbHeadsPerCylinder: 	DW 2
bpbHiddenSectors: 	    DD 0
bpbTotalSectorsBig:     DD 0
bsDriveNumber: 	        DB 0
bsUnused: 		        B 0
bsExtBootSignature: 	DB 0x29
bsSerialNumber:	        DD 0xa0a1a2a3
bsVolumeLabel: 	        DB &quot;MOS FLOPPY &quot;
bsFileSystem: 	        DB &quot;FAT12   &quot;
</pre>
<p>请参看前一章中关于每个成员的详细解释。<br />
我们要做的是试着去加载一个二级加载器。让我们看看我们具体需要做些什么：</p>
<h2><span style="color: #0000ff;">从文件名开始</span></h2>
<p>第一件要做的事儿就是创建一个好的文件名。记住：<strong>文件名必须准确地为</strong><strong>11字节，以保证我们不会破坏根目录。</strong></p>
<p>我使用“STAGE2.SYS”作为我的二级loader名。你可以在上一节中查看它的内部文件名。</p>
<h2><span style="color: #0000ff;">创建Stage 2</span></h2>
<p>好了，Stage 2是一个独立于bootloader的程序。我们的Stage2将会非常类似一个DOS COM程序，是不是很酷？</p>
<p>到目前为止，Stage2所做的仅仅是打印一个消息，并停机。这些你在bootloader中已经见过了：</p>
<pre class="brush: cpp; title: ; notranslate">
; Note: Here, we are executed like a normal
; COM program, but we are still in Ring 0.
; We will use this loader to set up 32 bit
; mode and basic exception handling

; This loaded program will be our 32 bit Kernel.

; We do not have the limitation of 512 bytes here,
; so we can add anything we want here!

org 0x0		; offset to 0, we will set segments later

bits 16		; we are still in real mode

; we are loaded at linear address 0x10000

jmp main	; jump to main

;*************************************************;
;	Prints a string
;	DS=&gt;SI: 0 terminated string
;************************************************;

Print:
			lodsb		    ; load next byte from string from SI to AL
			or	al, al	    ; Does AL=0?
			jz	PrintDone	; Yep, null terminator found-bail out
			mov	ah,	0eh	    ; Nope-Print the character
			int	10h
			jmp	Print	    ; Repeat until null terminator found
PrintDone:
			ret		        ; we are done, so return

;*************************************************;
;	Second Stage Loader Entry Point
;************************************************;

main:
			cli		        ; clear interrupts
			push	cs	    ; Insure DS=CS
			pop	ds

			mov	si, Msg
			call	Print

			cli		        ; clear interrupts to prevent triple faults
			hlt		        ; hault the system

;*************************************************;
;	Data Section
;************************************************;

Msg	db	&quot;Preparing to load operating system...&quot;,13,10,0
</pre>
<p>为了用NASM汇编它，只需把它作为一个二进制程序（COM程序就是二进制）进行汇编，然后将其复制到软盘镜像中去。例如：</p>
<pre class="brush: cpp; title: ; notranslate">
nasm -f bin Stage2.asm -o STAGE2.SYS
copy STAGE2.SYS  A:\STAGE2.SYS
</pre>
<p>不需要PARTCOPY：）</p>
<h2><span style="color: #0000ff;">第一步：加载根目录表</span></h2>
<p>现在是加载Stage2.sys的时候了！在这里我们将会多次引用根目录表，以及BIOS参数块以获取磁盘信息。</p>
<h3><span style="color: #ff0000;">步骤1：获取根目录的大小</span></h3>
<p>好了，第一步我们需要获取根目录的大小。</p>
<p>为了获取其大小，只需要将根目录中实体的个数加起来。看起来非常简单：）</p>
<p>在Windows中，当你增加一个文件或者目录到一个以FAT12格式化的磁盘，Windows会自动地将文件信息加到根目录中去，因此我们不需要担心它。这使得事情更加简单。</p>
<p><strong>将根目录实体数除以每个扇区的字节数就可以知道根实体使用了多少个扇区。</strong></p>
<p>下面是一个例子：</p>
<pre class="brush: cpp; title: ; notranslate">
          mov     ax, 0x0020        ; 32 byte directory entry
          mul     WORD [bpbRootEntries]  ; number of root entrys
          div     WORD [bpbBytesPerSector] ; get sectors used by root directory
</pre>
<p>记住根目录表是一个代表文件信息的<strong>32字节值（实体）</strong>表。<br />
很好，我们知道了加载根目录所需的扇区数。现在，让我们寻找要加的起始扇区吧：）</p>
<h3><span style="color: #ff6600;">步骤2：获取根目录的起始处</span></h3>
<p>这同样是非常简单的一步。首先，让我们再次看一看一个FAT12格式化的磁盘的结构：</p>
<div style="border: 1px solid #00DD00;">
<table>
<tbody>
<tr style="background-color: #00dd00;">
<td>引导扇区</td>
<td>额外保留扇区</td>
<td>文件分配表 1</td>
<td>文件分配表 2</td>
<td style="background-color: #dd0000;">根目录 (仅用于FAT12/FAT16)</td>
<td>数据区域包含文件和文件夹</td>
</tr>
</tbody>
</table>
</div>
<p>好的，<strong>注意根目录就在两个文件分配表和保留扇区的后面</strong>。换句话说，只需要将文件分配表和保留扇区加起来，你就可以找到根目录！</p>
<p>例如…</p>
<pre class="brush: cpp; title: ; notranslate">
    mov     al, [bpbNumberOfFATs]  ; Get number of FATs (Useually 2)
    mul     [bpbSectorsPerFAT]  ; number of FATs * sectors per FAT; get number of sectors
    add     ax, [bpbReservedSectors] ; add reserved sectors

	; Now, AX = starting sector of root directory
</pre>
<p>很简单，嗯？现在，我们只需要将扇区读取到内存的特定位置：</p>
<pre class="brush: cpp; title: ; notranslate">
    mov     bx, 0x0200  ; load root directory to 7c00:0x0200
    call    ReadSectors
</pre>
<h3><span style="color: #ff6600;">根目录——完整的例子</span></h3>
<p>这段代码是直接从本章结束的bootloader中抽取的代码。它加载了根目录：</p>
<pre class="brush: cpp; title: ; notranslate">
  LOAD_ROOT:

     ; compute size of root directory and store in &quot;cx&quot;

          xor     cx, cx
          xor     dx, dx
          mov     ax, 0x0020                      ; 32 byte directory entry
          mul     WORD [bpbRootEntries]           ; total size of directory
          div     WORD [bpbBytesPerSector]        ; sectors used by directory
          xchg    ax, cx

     ; compute location of root directory and store in &quot;ax&quot;

          mov     al, BYTE [bpbNumberOfFATs]       ; number of FATs
          mul     WORD [bpbSectorsPerFAT]          ; sectors used by FATs
          add     ax, WORD [bpbReservedSectors]    ; adjust for bootsector
          mov     WORD [datasector], ax            ; base of root directory
          add     WORD [datasector], cx

     ; read root directory into memory (7C00:0200)

          mov     bx, 0x0200                        ; copy root dir above bootcode
          call    ReadSectors
</pre>
<h2><span style="color: #0000ff;">第二步：寻找Stage 2</span></h2>
<p>好了，现在根目录表已经被加载。看看上面代码，<strong>我们将它加载到</strong><strong>0x200</strong>。现在，去寻找我们的文件。</p>
<p>让我们再次回去看看32字节的根目录表（<strong>根目录表</strong>这一节）。记住<strong>最前面的</strong><strong>11字节表示文件名</strong>，同时记住，<strong>因为每个根目录实体是</strong><strong>32字节，每个32字节都会是下一个实体的开始——指向下一个实体的最先的11字节。</strong></p>
<p>从现在开始，我们所需要做的就是比较文件名，然后跳到下一个实体（32字节），然后再次测试，直到我们搜索到扇区的结尾。例如…</p>
<pre class="brush: cpp; title: ; notranslate">
  ; browse root directory for binary image
          mov     cx, [bpbRootEntries]        ; the number of entrys. If we reach 0, file doesnt exist
          mov     di, 0x0200        ; Root directory was loaded here
     .LOOP:
          push    cx
          mov     cx, 11            ; eleven character name
          mov     si, ImageName     ; compare the 11 bytes with the name of our file
          push    di
     rep  cmpsb                     ; test for entry match
          pop     di
          je      LOAD_FAT          ; they match, so begin loading FAT
          pop     cx
          add     di, 32            ; they dont match, so go to next entry (32 bytes)
          loop    .LOOP
          jmp     FAILURE           ; no more entrys left, file doesnt exist :(
</pre>
<p>成功进入下一步…</p>
<h2><span style="color: #0000ff;">第三步：加载文件分配表</span></h2>
<h3><span style="color: #ff6600;">步骤1：获取起始簇</span></h3>
<p>好了，现在根目录被加载，我们也找到了文件实体。那么我们如何获取其实簇呢？</p>
<ul>
<li>字节26-27：第一个簇</li>
<li>字节28-32：文件大小</li>
</ul>
<p>这看起来很熟悉：）为了获取其实簇，只需要引用文件实体中的字节26：</p>
<pre class="brush: cpp; title: ; notranslate">
mov     dx, [di + 0x001A]   ; di contains starting address of entry. Just refrence byte 26 (0x1A) of entry

; Yippe--dx now stores the starting cluster number
</pre>
<p>起始簇在加载文件时对我们来说非常重要。</p>
<h3><span style="color: #ff6600;">步骤2：获取文件分配表的大小</span></h3>
<p>让我们再次更加具有针对性地看看BIOS参数块。</p>
<pre class="brush: cpp; title: ; notranslate">
bpbNumberOfFATs: 	DB 2
bpbSectorsPerFAT: 	DW 9
</pre>
<p>好，那么我们如何知道两个文件本配表用了多少个扇区呢？只需要将每个文件分配表的扇区数乘以文件分配表的个数：）看起来很简单，…但是…</p>
<pre class="brush: cpp; title: ; notranslate">
        xor     ax, ax
        mov     al, [bpbNumberOfFATs]                ; number of FATs
        mul     WORD [bpbSectorsPerFAT]              ; multiply by number of sectors per FAT

	; ax = number of sectors the FATs use!
</pre>
<p>永远不用担心，就是这么简单^^</p>
<h3><span style="color: #ff6600;">步骤3：加载文件分配表</span></h3>
<p>现在我们知道了我们需要读取多少个扇区。那么，嗯…读取它吧：）</p>
<pre class="brush: cpp; title: ; notranslate">
    mov     bx, 0x0200                          ; address to load to
    call    ReadSectors                         ; load the FAT table
</pre>
<p>耶！现在FAT已经被加载（不完全！），将在stage 2中加载！</p>
<h3><span style="color: #ff6600;">文件分配表——完整的例子</span></h3>
<p>下面是bootloader抽取的完整代码：</p>
<pre class="brush: cpp; title: ; notranslate">
  LOAD_FAT:

     ; save starting cluster of boot image

          mov     si, msgCRLF
          call    Print
          mov     dx, WORD [di + 0x001A]
          mov     WORD [cluster], dx                    ; file's first cluster

     ; compute size of FAT and store in &quot;cx&quot;

          xor     ax, ax
          mov     al, BYTE [bpbNumberOfFATs]            ; number of FATs
          mul     WORD [bpbSectorsPerFAT]               ; sectors used by FATs
          mov     cx, ax

     ; compute location of FAT and store in &quot;ax&quot;

          mov     ax, WORD [bpbReservedSectors]         ; adjust for bootsector

     ; read FAT into memory (7C00:0200)

          mov     bx, 0x0200                            ; copy FAT above bootcode
          call    ReadSectors
</pre>
<h2><span style="color: #0000ff;">LBA和CHS</span></h2>
<p>加载镜像的过程中，我们所需要做的就是加载FAT中的每一个簇。</p>
<p>这里还有一个小问题我们没有讨论。好了，我们有了一个从文件分配表获取的簇号。但是，<strong>我们如何使用它呢？</strong></p>
<p>问题在于，簇表示一个线性地址，然而，为了加载扇区，我们需要一个段/磁道/面地址。（中断0x13）</p>
<p>有<strong>两种</strong>方法访问磁盘。通过<strong>柱面</strong><strong>/面/扇区（CHS）地址</strong>或者<strong>逻辑快地址（</strong><strong>LBA）</strong>。</p>
<p>LBA表示一个被索引的磁盘地址。第一个块是0，然后是1，继续下去。LBA仅仅代表从0开始连续被编号的扇区。没有比着更基本的了。</p>
<p>我们必须知道如何在LBA和CHS之间相互转换。</p>
<h3><span style="color: #ff6600;">将CHS转换为LBA</span></h3>
<p><strong>转换CHS为LBA的公式为：</strong></p>
<pre class="brush: cpp; title: ; notranslate">
LBA	=	(cluster - 2 ) * sectors per cluster
</pre>
<p>这非常简单。：）下面是一个例子：</p>
<pre class="brush: cpp; title: ; notranslate">
    sub     ax, 0x0002                          ; subtract 2 from cluster number
    xor     cx, cx
    mov     cl, BYTE [bpbSectorsPerCluster]     ; get sectors per cluster
    mul     cx                                  ; multply
</pre>
<h3><span style="color: #ff6600;">将LBA转换为CHS</span></h3>
<p>这有一点点复杂，但相对来说还是很简单：</p>
<pre class="brush: cpp; title: ; notranslate">
    absolute sector 	= 	(logical sector / sectors per track) + 1
    absolute head   	= 	(logical sector / sectors per track) MOD number of heads
    absolute track 	= 	 logical sector / (sectors per track * number of heads)
</pre>
<p>下面是例子…</p>
<pre class="brush: cpp; title: ; notranslate">
LBACHS:
          xor     dx, dx                              ; prepare dx:ax for operation
          div     WORD [bpbSectorsPerTrack]           ; divide by sectors per track
          inc     dl                                  ; add 1 (obsolute sector formula)
          mov     BYTE [absoluteSector], dl

; these forumlas are very simular...

          xor     dx, dx                              ; prepare dx:ax for operation
          div     WORD [bpbHeadsPerCylinder]          ; mod by number of heads (Absolue head formula)
          mov     BYTE [absoluteHead], dl             ; everything else was already done from the first formula

          mov     BYTE [absoluteTrack], al            ; not much else to do :)
          ret
</pre>
<p>不是太难，我希望：）</p>
<h2><span style="color: #0000ff;">加载簇</span></h2>
<p>好了，在加载Stage 2的过程中，我们首先需要获取文件分配表中的簇。这很简单。然后，将簇号转换为我们可以读取的LBA：</p>
<pre class="brush: cpp; title: ; notranslate">
    mov     ax, [cluster]                     ; cluster to read
    pop     bx                                ; buffer to read into
    call    ClusterLBA                        ; convert cluster to LBA
    xor     cx, cx
    mov     cl, [bpbSectorsPerCluster]        ; sectors to read
    call    ReadSectors                       ; read in cluster
    push    bx
</pre>
<h2><span style="color: #0000ff;">获取下一个簇</span></h2>
<p>这个有点棘手。</p>
<p>好了，记住，<strong>每个文件分配表实体中的簇号是</strong><strong>12位。</strong>这就是问题所在。<strong>如果我们读取</strong><strong>1字节，我们仅仅复制了簇号中的一部分!</strong></p>
<p>因此，我们必须读取一个WORD（2字节）值。</p>
<p>好了，现在，我们又遇到问题。复制2字节（从一个12位值）以为这我们将会复制<strong>下一个簇实体的一部分</strong>。例如，想象你的下面是你的文件分配表：</p>
<pre class="brush: cpp; title: ; notranslate">
      Note: Binary numbers seperated in bytes.
	       Each 12 bit FAT cluster entry is displayed.

                                   |                           |
   01011101       0111010   01110101  00111101  0011101  0111010  0011110 0011110
   |                |              |              |            |               |
   |                |1st cluster   |              |3rd cluster-|               |
   |-0 cluster  ----|              |2nd cluster---|            |4th cluster----|
</pre>
<p><strong>注意到所有偶数的簇需要复制所有的第一个字节和第二字节的一部分。同样所有奇数簇需要复制一部分第一字节和所有的第二字节！</strong></p>
<p>好了，我们所需要做的就是从文件分配表（我们的簇）读取2个字节（WORD）值。<br />
如果这个簇是偶数，<strong>将高4位掩盖掉，因为它属于下一个簇。</strong></p>
<p>如果是奇数，<strong>向低位移动4位（丢弃第一个簇使用的位）</strong>。例如…</p>
<pre class="brush: cpp; title: ; notranslate">
   ; compute next cluster

          mov     ax, WORD [cluster]  ; identify current cluster from FAT

	 ; is the cluster odd or even? Just divide it by 2 and test!

          mov     cx, ax              ; copy current cluster
          mov     dx, ax              ; copy current cluster
          shr     dx, 0x0001          ; divide by two
          add     cx, dx              ; sum for (3/2)

          mov     bx, 0x0200          ; location of FAT in memory
          add     bx, cx              ; index into FAT
          mov     dx, WORD [bx]       ; read two bytes from FAT

          test    ax, 0x0001
          jnz     .ODD_CLUSTER

; Remember that each entry in the FAT is a 12 but value. If it represents
; a cluster (0x002 through 0xFEF) then we only want to get those 12 bits
; that represent the next cluster

     .EVEN_CLUSTER:

          and     dx, 0000111111111111b      ; take low twelve bits
         jmp     .DONE

     .ODD_CLUSTER:

          shr     dx, 0x0004                 ; take high twelve bits

     .DONE:

          mov     WORD [cluster], dx         ; store new cluster
          cmp     dx, 0x0FF0                 ; test for end of file
          jb      LOAD_IMAGE    ; we are not done yet--go to next cluster
</pre>
<h1><span style="color: #008000;">演示</span></h1>

<a href="http://matrix7.me/wp-content/gallery/osdevseries/boot.gif" title="" rel="lightbox[singlepic153]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/153__x_boot.gif" alt="boot" title="boot" />
</a>

<p>第一幅图显示bootloader加载Stage 2成功。Stage 2打印加载操作系统的消息。</p>
<p>第二幅图显示一个当无法发现文件（从根目录中）时打印的错误消息。</p>
<p>演示中博阿含这节课中的绝大部分代码，2个源文件，2个目录，以及2个批处理程序。第一个目录包含Stage 1程序——我们的bootloader，第二个目录包含我们的Stage 2程序——STAGE2.SYS。</p>
<p><a href="http://www.brokenthorn.com/Resources/Demos/Demo1.zip" target="_blank">下载演示</a></p>
<h1><span style="color: #008000;">结论</span></h1>
<p>哇噢，这一章非常难写。因为从细节上解释一个复杂的话题，还必须使它学起来很简单<br />
，这非常难。我相信我做的还不错：）</p>
<p>如果你有任何建议来提高这一章，请告诉我：）</p>
<p>好了…我想我们可以：<strong>和bootloader说再见了！</strong></p>
<p>下一章中，我们会开始创建Stage 2。我们会学习A20，学习<strong>保护模式</strong>的更多细节…</p>
<p>再见了！</p>
<p>未完待续！</p>
<p><a href="http://www.brokenthorn.com/Resources/OSDev6.html" target="_blank">原文地址：http://www.brokenthorn.com/Resources/OSDev6.html</a></p>
<p><strong>译者英文水平有限，翻译不妥处，欢迎大家指正！</strong>
<div style="margin-top: 15px;">
<p><strong>作者：</strong><a href="http://matrix7.me/">迷途羔羊</a> | <strong>本文链接：</strong><a href="http://matrix7.me/2011/06/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94bootloaders-4/">【翻译】操作系统开发系列——Bootloaders 4</a></p>
</div>
<div style="margin-left: 26px; margin-bottom: 15px;"><strong>Matr7x版权所有，转载本站文章请注明，转载自</strong> <a href="http://matrix7.me/">迷途羔羊</a>。</strong></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fmatrix7.me%2F2011%2F06%2F%25e3%2580%2590%25e7%25bf%25bb%25e8%25af%2591%25e3%2580%2591%25e6%2593%258d%25e4%25bd%259c%25e7%25b3%25bb%25e7%25bb%259f%25e5%25bc%2580%25e5%258f%2591%25e7%25b3%25bb%25e5%2588%2597%25e2%2580%2594%25e2%2580%2594bootloaders-4%2F&title=%E3%80%90%E7%BF%BB%E8%AF%91%E3%80%91%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91%E7%B3%BB%E5%88%97%E2%80%94%E2%80%94Bootloaders+4" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>May 4, 2010 -- <a href="http://matrix7.me/2010/05/%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94%e5%8e%86%e5%8f%b2%e4%b8%8e%e5%9f%ba%e6%9c%ac%e7%90%86%e8%ae%ba/" title="【翻译】操作系统开发系列——历史与基本理论">【翻译】操作系统开发系列——历史与基本理论</a> (12)<br /><small>操作系统开发系列——历史与基本理论
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎来到奇妙而又令人疯狂的操作系统世界！

在前一...</small></li><li>January 29, 2011 -- <a href="http://matrix7.me/2011/01/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94bootloaders-3/" title="【翻译】操作系统开发系列——Bootloaders 3">【翻译】操作系统开发系列——Bootloaders 3</a> (0)<br /><small>操作系统开发系列——Bootloader 3
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎！

在前一章里，我们学习了不同的处...</small></li><li>July 9, 2010 -- <a href="http://matrix7.me/2010/07/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94bootloaders/" title="【翻译】操作系统开发系列——Bootloaders">【翻译】操作系统开发系列——Bootloaders</a> (9)<br /><small>操作系统开发系列——Bootloaders
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎光临！本章教程相信您已期待很久。本章我们将...</small></li><li>September 27, 2010 -- <a href="http://matrix7.me/2010/09/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94bootloaders2/" title="【翻译】操作系统开发系列——Bootloaders 2">【翻译】操作系统开发系列——Bootloaders 2</a> (4)<br /><small>操作系统开发系列——Bootloader 2
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎光临！

在上一章教程中我们已经学习...</small></li><li>April 11, 2010 -- <a href="http://matrix7.me/2010/04/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94%e7%ae%80%e4%bb%8b/" title="【翻译】操作系统开发系列——简介">【翻译】操作系统开发系列——简介</a> (7)<br /><small>操作系统开发系列­——简介
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
这是关于什么的？
操作系统是一个复杂深奥的话题。学习操作系统是如何工...</small></li><li>April 1, 2010 -- <a href="http://matrix7.me/2010/04/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94%e5%89%8d%e8%a8%80/" title="【翻译】操作系统开发系列——前言">【翻译】操作系统开发系列——前言</a> (31)<br /><small>操作系统开发系列——前言
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
引言
欢迎大家来到这里！

这是一系列关于计算机和操作系统的章节、...</small></li><li>April 26, 2010 -- <a href="http://matrix7.me/2010/04/vesa%e7%bc%96%e7%a8%8b%e2%80%94%e2%80%94gui%e7%a6%bb%e6%88%91%e4%bb%ac%e5%b9%b6%e4%b8%8d%e9%81%a5%e8%bf%9c/" title="VESA编程——GUI离我们并不遥远">VESA编程——GUI离我们并不遥远</a> (14)<br /><small>下载:Vesa Demo
下载:Vesa Source
自从学习操作系统开发以来，所接触到的操作系统开发资料都是关于文本模式的。然而黑色的命令行始终没有色彩斑斓的图形界面吸引眼球，所以查阅了很多资...</small></li></ul>]]></content:encoded>
			<wfw:commentRss>http://matrix7.me/2011/06/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94bootloaders-4/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>2011-05-21 雁栖湖游记（图）</title>
		<link>http://matrix7.me/2011/05/2011-05-21-%e9%9b%81%e6%a0%96%e6%b9%96%e6%b8%b8%e8%ae%b0%ef%bc%88%e5%9b%be%ef%bc%89/</link>
		<comments>http://matrix7.me/2011/05/2011-05-21-%e9%9b%81%e6%a0%96%e6%b9%96%e6%b8%b8%e8%ae%b0%ef%bc%88%e5%9b%be%ef%bc%89/#comments</comments>
		<pubDate>Mon, 23 May 2011 15:21:38 +0000</pubDate>
		<dc:creator>Matrix7</dc:creator>
				<category><![CDATA[旅行生活]]></category>
		<category><![CDATA[旅行]]></category>
		<category><![CDATA[雁栖湖]]></category>
		<category><![CDATA[骑行]]></category>

		<guid isPermaLink="false">http://matrix7.me/?p=1098</guid>
		<description><![CDATA[雁栖湖 蓝天 白云 远处的山 波光粼粼 湖中小岛 北京的天气总是阳光明媚，这样的天气窝在房子里实在是浪费生命！雁栖湖，第一次听到这个名字是听说关于中科院研究生院雁栖湖校区，后来在网上查询了有关雁栖湖的资料，瞬间被百度百科上雁栖湖的照片吸引，正值买了山地车，遂决定骑行雁栖湖。 拉面 啤酒 早上9点出发，沿北四环上S213沿地铁5号线一路向北，中间出了点小插曲，雁栖湖在北方，我们居然骑到三环以内北邮北师大去了（路上还讨论方向来着。。。囧）。沿着S213一直走到兴寿镇，兴寿镇就是一条街。到达兴寿镇的时间是中午12点，街上有一些餐馆小店之类的，找个街头餐馆，吃了碗拉面，喝一瓶啤酒，来了3串烧烤，拉面5块钱，啤酒3块，3串烧烤3块，便宜又好吃，拉面忒有劲道，啤酒没喝完，装在瓶里带走了，除此之外自己还带了一些吃的，总之街头吃饭是很有感觉的。 S307 一条很有感觉的林荫大道 旁边是引渠 吃完饭由兴寿镇出发，沿S307一路向东北。S307是一条非常有感觉的林荫大道，两边的树很高很大，有点华科的感觉，路上车很少，可以骑起速度来。路旁边有一条水渠，是一条引渠，应该是把怀柔水库的水引向北京，是北京的饮用水源。路上还遇到一片田，绿油油的一大片，远处是树和山，很有电影中的那种清新的感觉。 怀柔城区的小朋友们在抓鱼？ 国道很宽 继续往前走就到达怀柔城区，怀柔城区挺大的，但是跟北京城区完全是不同的风格，是那种小镇的感觉，不过城中的国道很宽很大。怀柔城区毗邻怀柔水库，城里的人们生活的非常惬意，水边上小盆友们在抓鱼，路边的老大爷们三五成群地聚在一起各种侃。 采摘园 看到水果就嘴馋 雁栖湖游乐园大门 再次看到江core的题字 出了怀柔城区，一路向北，走上京加路（G111），这条路非常宽，走起来很快，路上有路牌指向雁栖湖，不容易迷路。路边上很多采摘园，可以采摘各种水果。一路狂奔到达雁栖湖，没有看到湖，却首先看到的是雁栖湖游乐园。门票貌似要34元，门口晃悠了一下，果断不进去，最讨厌在风景秀丽的地方建游乐园了，建了就建了，还尼玛要门票。 BEIJING JUDGE EDUCATION INSTITUTE 建的跟白宫似的 看不到湖，决定绕到湖的另一面。从雁栖湖游乐园旁边，沿一条山间小道，绕着雁栖湖走，途中看到了北京法官教育学院，建的跟白宫似的，正欲拍照，被一名保安制止，真恨当时怎么不快点按下快门。你不让我拍，我偏要拍，找了个角落偷偷拍了一张。除此之外后面还有一个干部培训学校和度假村，也很豪华。我说怎么高级干部学校都建在风景秀丽的地方，不过一想中科院研究生院雁栖湖校区也建在这，我就平衡了，我终于了解到中科院被称为东厂的原因。 雁栖湖主湖 一个干涸的闸门 继续绕湖骑行，上了一个堤坝，终于看到了湖，也就是最上面那张照片。湖水波光粼粼，湖中小岛，远处的山，蓝天，白云交相辉映，生活在北京城区完全无法想象北京有这样的景。继续沿湖绕行，走到一个跟刚刚的堤坝很像的另一个堤坝，就可以看到雁栖湖的主湖，湖很大很蓝。继续沿湖骑行可以看到一个干涸的闸门，在雨量丰沛的时候这个闸门应该会起作用。 湖边垂钓 红顶小屋连着一座桥 看着像是别墅 顺着公路一直走，找了条小路可以走到湖边，湖边停了很多小车，很多人来这里钓鱼或者游玩。湖边有专业养殖水产的网，有小船，有小屋，还有在湖边休息的渔民。湖面很宽广，湖对面的山上有一个红顶房子连着一个桥，还有一栋别墅样的房子。上面的照片是拉近照的，对面的山很远很远。 雁栖湖桥 北京市雁栖华审度假村 继续沿着公路走会走到雁栖湖桥，过了桥之后又是一段堤坝，在堤坝上可以看到北京市雁栖华审度假村的房子，再往前走就看不到湖了，会进入一段山路。 路边的养蜂场 蜂蜡 密密麻麻的蜜蜂 白色的是被刀割过的雄蜂卵 在路边看到一个养蜂场，停下来买了两斤蜂蜜，是槐花蜜，然后与养蜂的大叔交流了一下，上面的第二副图中是蜂蜡，就是蜜蜂建的那些个六角形，据说有治疗鼻炎和口腔溃疡之功效，我弄了一个放嘴里嚼，嚼起来比口香糖硬。之后看着大叔打开蜂箱，近距离观察了一下蜜蜂。蜜蜂是东北的黑蜂，所以长得不怎么可爱。大叔用刀把雄蜂的卵都割掉，上面图中白色的就是被割掉的雄蜂卵。本来想让大叔把蜂王找出来我们看看，结果找了一圈没找到，发现了处女王的蛹壳儿，说明处女王把蜂王给干掉了，大叔急着找处女王，因为时间关系，我们就先撤了。 各种山货 看着就流口水啊 此时已经快下午6点了，为了能赶回家，不得不开始往回骑，向养蜂的大妈问了一下路，大妈说沿着路一直往左就可以上回京城的路。我们加速骑行，上了京密路，这是一条国道，很宽，一路上都有路牌指示如何回北京城区。路边有很多卖山货的，那些水果看着就令人嘴馋，只可惜物价飞涨，哥工资又少，只能买最便宜的苹果番茄。 回去的路是非常非常漫长的，此时已经精疲力竭，我们机械地用20km/h左右的巡航速度向北京城区骑行。从雁栖湖到六环骑了很远很远，在六环停下来吃了点儿东西，吃完东西差不多天黑了，六环到五环也有一段距离，然后五环到四环，到达四环差不多9点，此时才到望京，也就是上次去798那个地方，从这回去又花了1小时左右，最后快10点才到家。 骑行攻略： 青年公寓——&#62;北四环——&#62;S213（沿着5号线走就是了）——&#62;兴寿镇（可以吃饭）——&#62;怀昌路（S307）﻿——&#62;怀柔城区——&#62;京加路（G111）——&#62;雁栖湖——&#62;京加路（G111）——&#62;京密路（G101）——&#62;四环——&#62;青年公寓 补水吃饭40元可以搞定（不包括景点门票、山货的钱） Tips: 骑行的前一天晚上一定要保证睡眠，那天失眠只睡了5个小时，第二天累死了 早上必须早点出发，那天是9点出发，下午3点才到雁栖湖 出行之前一定要做好功课，搞清楚走哪条路，雁栖湖在北方，我们居然跑三环里面去了 一定要买巧克力以补充体力 [...]]]></description>
			<content:encoded><![CDATA[
<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1047.jpg" title="" rel="lightbox[singlepic134]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/134__x_img_1047.jpg" alt="蓝天白云 远处的山 波光粼粼 湖中小岛" title="蓝天白云 远处的山 波光粼粼 湖中小岛" />
</a>

<div style="text-align: center; color: blue;"><strong>雁栖湖 蓝天 白云 远处的山 波光粼粼 湖中小岛</strong></div>
<p>北京的天气总是阳光明媚，这样的天气窝在房子里实在是浪费生命！雁栖湖，第一次听到这个名字是听说关于中科院研究生院雁栖湖校区，后来在网上查询了有关雁栖湖的资料，瞬间被百度百科上雁栖湖的照片吸引，正值买了山地车，遂决定骑行雁栖湖。</p>
<p><span id="more-1098"></span></p>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1011.jpg" title="" rel="lightbox[singlepic152]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/152__x_img_1011.jpg" alt="拉面 & 啤酒" title="拉面 & 啤酒" />
</a>

<div style="text-align: center; color: blue;"><strong>拉面 啤酒</strong></div>
<p>早上9点出发，沿北四环上S213沿地铁5号线一路向北，中间出了点小插曲，雁栖湖在北方，我们居然骑到三环以内北邮北师大去了（路上还讨论方向来着。。。囧）。沿着S213一直走到兴寿镇，兴寿镇就是一条街。到达兴寿镇的时间是中午12点，街上有一些餐馆小店之类的，找个街头餐馆，吃了碗拉面，喝一瓶啤酒，来了3串烧烤，拉面5块钱，啤酒3块，3串烧烤3块，便宜又好吃，拉面忒有劲道，啤酒没喝完，装在瓶里带走了，除此之外自己还带了一些吃的，总之街头吃饭是很有感觉的。</p>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1013.jpg" title="" rel="lightbox[singlepic135]" >
	<img class="ngg-singlepic" src="http://matrix7.me/wp-content/gallery/cache/135__x_img_1013.jpg" alt="林荫大道" title="林荫大道" />
</a>

<div style="text-align: center; color: blue;"><strong>S307 一条很有感觉的林荫大道 旁边是引渠</strong></div>
<p>吃完饭由兴寿镇出发，沿S307一路向东北。S307是一条非常有感觉的林荫大道，两边的树很高很大，有点华科的感觉，路上车很少，可以骑起速度来。路旁边有一条水渠，是一条引渠，应该是把怀柔水库的水引向北京，是北京的饮用水源。路上还遇到一片田，绿油油的一大片，远处是树和山，很有电影中的那种清新的感觉。</p>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1030.jpg" title="" rel="lightbox[singlepic136]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/136__x_img_1030.jpg" alt="怀柔城区的小盆友在抓鱼？" title="怀柔城区的小盆友在抓鱼？" />
</a>

<div style="text-align: center; color: blue;"><strong>怀柔城区的小朋友们在抓鱼？</strong></div>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1031.jpg" title="" rel="lightbox[singlepic137]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/137__x_img_1031.jpg" alt="国道很宽很宽" title="国道很宽很宽" />
</a>

<div style="text-align: center; color: blue;"><strong>国道很宽</strong></div>
<p>继续往前走就到达怀柔城区，怀柔城区挺大的，但是跟北京城区完全是不同的风格，是那种小镇的感觉，不过城中的国道很宽很大。怀柔城区毗邻怀柔水库，城里的人们生活的非常惬意，水边上小盆友们在抓鱼，路边的老大爷们三五成群地聚在一起各种侃。</p>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1032.jpg" title="" rel="lightbox[singlepic138]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/138__x_img_1032.jpg" alt="采摘园" title="采摘园" />
</a>

<div style="text-align: center; color: blue;"><strong>采摘园 看到水果就嘴馋</strong></div>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1037.jpg" title="" rel="lightbox[singlepic139]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/139__x_img_1037.jpg" alt="雁栖湖优乐园大门" title="雁栖湖优乐园大门" />
</a>

<div style="text-align: center; color: blue;"><strong>雁栖湖游乐园大门 再次看到江core的题字</strong></div>
<p>出了怀柔城区，一路向北，走上京加路（G111），这条路非常宽，走起来很快，路上有路牌指向雁栖湖，不容易迷路。路边上很多采摘园，可以采摘各种水果。一路狂奔到达雁栖湖，没有看到湖，却首先看到的是雁栖湖游乐园。门票貌似要34元，门口晃悠了一下，果断不进去，最讨厌在风景秀丽的地方建游乐园了，建了就建了，还尼玛要门票。</p>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1040.jpg" title="" rel="lightbox[singlepic140]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/140__x_img_1040.jpg" alt="北京法官教育学院" title="北京法官教育学院" />
</a>

<div style="text-align: center; color: blue;"><strong>BEIJING JUDGE EDUCATION INSTITUTE 建的跟白宫似的</strong></div>
<p>看不到湖，决定绕到湖的另一面。从雁栖湖游乐园旁边，沿一条山间小道，绕着雁栖湖走，途中看到了北京法官教育学院，建的跟白宫似的，正欲拍照，被一名保安制止，真恨当时怎么不快点按下快门。你不让我拍，我偏要拍，找了个角落偷偷拍了一张。除此之外后面还有一个干部培训学校和度假村，也很豪华。我说怎么高级干部学校都建在风景秀丽的地方，不过一想中科院研究生院雁栖湖校区也建在这，我就平衡了，我终于了解到中科院被称为东厂的原因。</p>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1057.jpg" title="" rel="lightbox[singlepic141]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/141__x_img_1057.jpg" alt="雁栖湖主湖" title="雁栖湖主湖" />
</a>

<div style="text-align: center; color: blue;"><strong>雁栖湖主湖</strong></div>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1063.jpg" title="" rel="lightbox[singlepic143]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/143__x_img_1063.jpg" alt="一个干涸的水闸" title="一个干涸的水闸" />
</a>

<div style="text-align: center; color: blue;"><strong>一个干涸的闸门</strong></div>
<p>继续绕湖骑行，上了一个堤坝，终于看到了湖，也就是最上面那张照片。湖水波光粼粼，湖中小岛，远处的山，蓝天，白云交相辉映，生活在北京城区完全无法想象北京有这样的景。继续沿湖绕行，走到一个跟刚刚的堤坝很像的另一个堤坝，就可以看到雁栖湖的主湖，湖很大很蓝。继续沿湖骑行可以看到一个干涸的闸门，在雨量丰沛的时候这个闸门应该会起作用。</p>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1068.jpg" title="" rel="lightbox[singlepic142]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/142__x_img_1068.jpg" alt="湖边垂钓" title="湖边垂钓" />
</a>

<div style="text-align: center; color: blue;"><strong>湖边垂钓</strong></div>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1074.jpg" title="" rel="lightbox[singlepic144]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/144__x_img_1074.jpg" alt="红顶房子连着一座桥" title="红顶房子连着一座桥" />
</a>

<div style="text-align: center; color: blue;"><strong>红顶小屋连着一座桥</strong></div>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1075.jpg" title="" rel="lightbox[singlepic145]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/145__x_img_1075.jpg" alt="别墅？" title="别墅？" />
</a>

<div style="text-align: center; color: blue;"><strong>看着像是别墅</strong></div>
<p>顺着公路一直走，找了条小路可以走到湖边，湖边停了很多小车，很多人来这里钓鱼或者游玩。湖边有专业养殖水产的网，有小船，有小屋，还有在湖边休息的渔民。湖面很宽广，湖对面的山上有一个红顶房子连着一个桥，还有一栋别墅样的房子。上面的照片是拉近照的，对面的山很远很远。</p>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1083.jpg" title="" rel="lightbox[singlepic146]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/146__x_img_1083.jpg" alt="雁栖湖桥" title="雁栖湖桥" />
</a>

<div style="text-align: center; color: blue;"><strong>雁栖湖桥</strong></div>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1085.jpg" title="" rel="lightbox[singlepic147]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/147__x_img_1085.jpg" alt="对面的房子是度假村" title="对面的房子是度假村" />
</a>

<div style="text-align: center; color: blue;"><strong>北京市雁栖华审度假村</strong></div>
<p>继续沿着公路走会走到雁栖湖桥，过了桥之后又是一段堤坝，在堤坝上可以看到北京市雁栖华审度假村的房子，再往前走就看不到湖了，会进入一段山路。</p>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1089.jpg" title="" rel="lightbox[singlepic148]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/148__x_img_1089.jpg" alt="一个养蜂场" title="一个养蜂场" />
</a>

<div style="text-align: center; color: blue;"><strong>路边的养蜂场</strong></div>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1094.jpg" title="" rel="lightbox[singlepic149]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/149__x_img_1094.jpg" alt="蜂蜡" title="蜂蜡" />
</a>

<div style="text-align: center; color: blue;"><strong>蜂蜡</strong></div>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1101.jpg" title="" rel="lightbox[singlepic150]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/150__x_img_1101.jpg" alt="密密麻麻的蜜蜂 白色的是被割掉的雄蜂卵" title="密密麻麻的蜜蜂 白色的是被割掉的雄蜂卵" />
</a>

<div style="text-align: center; color: blue;"><strong>密密麻麻的蜜蜂 白色的是被刀割过的雄蜂卵</strong></div>
<p>在路边看到一个养蜂场，停下来买了两斤蜂蜜，是槐花蜜，然后与养蜂的大叔交流了一下，上面的第二副图中是蜂蜡，就是蜜蜂建的那些个六角形，据说有治疗鼻炎和口腔溃疡之功效，我弄了一个放嘴里嚼，嚼起来比口香糖硬。之后看着大叔打开蜂箱，近距离观察了一下蜜蜂。蜜蜂是东北的黑蜂，所以长得不怎么可爱。大叔用刀把雄蜂的卵都割掉，上面图中白色的就是被割掉的雄蜂卵。本来想让大叔把蜂王找出来我们看看，结果找了一圈没找到，发现了处女王的蛹壳儿，说明处女王把蜂王给干掉了，大叔急着找处女王，因为时间关系，我们就先撤了。</p>

<a href="http://matrix7.me/wp-content/gallery/coverimage/img_1103.jpg" title="" rel="lightbox[singlepic151]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/151__x_img_1103.jpg" alt="各种山货" title="各种山货" />
</a>

<div style="text-align: center; color: blue;"><strong>各种山货 看着就流口水啊</strong></div>
<p>此时已经快下午6点了，为了能赶回家，不得不开始往回骑，向养蜂的大妈问了一下路，大妈说沿着路一直往左就可以上回京城的路。我们加速骑行，上了京密路，这是一条国道，很宽，一路上都有路牌指示如何回北京城区。路边有很多卖山货的，那些水果看着就令人嘴馋，只可惜物价飞涨，哥工资又少，只能买最便宜的苹果番茄。</p>
<p>回去的路是非常非常漫长的，此时已经精疲力竭，我们机械地用20km/h左右的巡航速度向北京城区骑行。从雁栖湖到六环骑了很远很远，在六环停下来吃了点儿东西，吃完东西差不多天黑了，六环到五环也有一段距离，然后五环到四环，到达四环差不多9点，此时才到望京，也就是上次去798那个地方，从这回去又花了1小时左右，最后快10点才到家。</p>
<h3><span style="color: #0000ff;">骑行攻略：</span></h3>
<p>青年公寓——&gt;北四环——&gt;S213（沿着5号线走就是了）——&gt;兴寿镇（可以吃饭）——&gt;怀昌路（S307）﻿——&gt;怀柔城区——&gt;京加路（G111）——&gt;雁栖湖——&gt;京加路（G111）——&gt;京密路（G101）——&gt;四环——&gt;青年公寓</p>
<p>补水吃饭40元可以搞定（不包括景点门票、山货的钱）</p>
<h3><span style="color: #0000ff;">Tips:</span></h3>
<ul>
<li>骑行的前一天晚上一定要保证睡眠，那天失眠只睡了5个小时，第二天累死了</li>
<li>早上必须早点出发，那天是9点出发，下午3点才到雁栖湖</li>
<li>出行之前一定要做好功课，搞清楚走哪条路，雁栖湖在北方，我们居然跑三环里面去了</li>
<li>一定要买巧克力以补充体力</li>
</ul>
<div style="margin-top: 15px;">
<p><strong>作者：</strong><a href="http://matrix7.me/">迷途羔羊</a> | <strong>本文链接：</strong><a href="http://matrix7.me/2011/05/2011-05-21-%e9%9b%81%e6%a0%96%e6%b9%96%e6%b8%b8%e8%ae%b0%ef%bc%88%e5%9b%be%ef%bc%89/">2011-05-21 雁栖湖游记（图）</a></p>
</div>
<div style="margin-left: 26px; margin-bottom: 15px;"><strong>Matr7x版权所有，转载本站文章请注明，转载自</strong> <a href="http://matrix7.me/">迷途羔羊</a>。</strong></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fmatrix7.me%2F2011%2F05%2F2011-05-21-%25e9%259b%2581%25e6%25a0%2596%25e6%25b9%2596%25e6%25b8%25b8%25e8%25ae%25b0%25ef%25bc%2588%25e5%259b%25be%25ef%25bc%2589%2F&title=2011-05-21+%E9%9B%81%E6%A0%96%E6%B9%96%E6%B8%B8%E8%AE%B0%EF%BC%88%E5%9B%BE%EF%BC%89" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>May 14, 2011 -- <a href="http://matrix7.me/2011/05/%e5%8e%bb%e6%97%85%e8%a1%8c%e5%90%a7%ef%bc%8c%e5%81%9a%e4%b8%80%e4%b8%aa%e9%aa%91%e8%a1%8c%e8%80%85/" title="去旅行吧，做一个骑行者">去旅行吧，做一个骑行者</a> (0)<br /><small>梦想很多，要一个个去实现 :strive ！

北京的风很给力的说，这是骑行的一大阻碍，出发的时候，我的发型是有刘海的，回来已然成了大背头。今天的目的地是798，出发地青年公寓，全程走了44.2k...</small></li></ul>]]></content:encoded>
			<wfw:commentRss>http://matrix7.me/2011/05/2011-05-21-%e9%9b%81%e6%a0%96%e6%b9%96%e6%b8%b8%e8%ae%b0%ef%bc%88%e5%9b%be%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>去旅行吧，做一个骑行者</title>
		<link>http://matrix7.me/2011/05/%e5%8e%bb%e6%97%85%e8%a1%8c%e5%90%a7%ef%bc%8c%e5%81%9a%e4%b8%80%e4%b8%aa%e9%aa%91%e8%a1%8c%e8%80%85/</link>
		<comments>http://matrix7.me/2011/05/%e5%8e%bb%e6%97%85%e8%a1%8c%e5%90%a7%ef%bc%8c%e5%81%9a%e4%b8%80%e4%b8%aa%e9%aa%91%e8%a1%8c%e8%80%85/#comments</comments>
		<pubDate>Sat, 14 May 2011 15:45:30 +0000</pubDate>
		<dc:creator>Matrix7</dc:creator>
				<category><![CDATA[旅行生活]]></category>
		<category><![CDATA[旅行]]></category>
		<category><![CDATA[雁栖湖]]></category>
		<category><![CDATA[骑行]]></category>

		<guid isPermaLink="false">http://matrix7.me/?p=1042</guid>
		<description><![CDATA[梦想很多，要一个个去实现 ！ 北京的风很给力的说，这是骑行的一大阻碍，出发的时候，我的发型是有刘海的，回来已然成了大背头。今天的目的地是798，出发地青年公寓，全程走了44.2km（包括各种晃悠，就是自行车走的距离），很累，皮肤晒成了红色（明天估计就黑色了吧）。路上花费很少，仅仅一瓶饮料的钱 。 不知道什么时候我的意识里有了娱乐先行的观念，那就是出去玩第一，学习工作啥的随机往后排，讨厌各种耽误玩的理由。正是因为这个观念，导致了我最近的各种累，各种乏。安排了很多项目，有些是高强度运动，有些需要早起，但是学习工作上事儿又那么多，所以只能减少睡眠时间了，真的很 。 一直想买车骑行，前段时间终于下定决心买了一辆山地车，搞得最近吃饭都紧张。装备还没有配齐，通过两次骑行，也了解到一些装备的必要性，头盔是必须的，而且还不能买便宜货，这货可以提高你与大货车或者大客车或者大地亲吻后脑袋还能正常工作的概率。护肘也是必须的，晒了3个小时而已，感觉皮快掉了，去年5月份在武汉骑行一天，就掉了一层皮！魔术头巾，如果不想满嘴的沙和絮，就带一个当口罩用吧！后座包也是必须的，装相机啥的很方便。手套必须的，还有把套得换一个，长时间骑行不能总一种姿势。还有其他的工具啥的，想想如果在四环线上爆胎是灰常悲剧的 。 昨天和前天在驾校疲劳驾驶了两天，今天又疲劳骑行了一上午，虽然哥的体力还不错，不过哥的肉还是很不经掉的，我要长胖 。最近要转正了，5篇1500字，看来好好休息还是个奢望。 下一站骑行雁栖湖，在此广招各位兄弟姐妹加入，时间初步定为下周末，周六还是周日未定！ 作者：迷途羔羊 &#124; 本文链接：去旅行吧，做一个骑行者 Matr7x版权所有，转载本站文章请注明，转载自 迷途羔羊。 相关文章May 23, 2011 -- 2011-05-21 雁栖湖游记（图） (1)[singlepic id=134 float=center] 雁栖湖 蓝天 白云 远处的山 波光粼粼 湖中小岛 北京的天气总是阳光明媚，这样的天气窝在房子里实在是浪费生命！雁栖湖，第一次听到这个...]]></description>
			<content:encoded><![CDATA[<p>梦想很多，要一个个去实现 <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/strive.png' alt=':strive' class='wp-smiley' /> ！</p>
<p>北京的风很给力的说，这是骑行的一大阻碍，出发的时候，我的发型是有刘海的，回来已然成了大背头。今天的目的地是798，出发地青年公寓，全程走了44.2km（包括各种晃悠，就是自行车走的距离），很累，皮肤晒成了红色（明天估计就黑色了吧）。路上花费很少，仅仅一瓶饮料的钱 <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/grin.png' alt=':grin' class='wp-smiley' /> 。</p>
<p>不知道什么时候我的意识里有了娱乐先行的观念，那就是出去玩第一，学习工作啥的随机往后排，讨厌各种耽误玩的理由。正是因为这个观念，导致了我最近的各种累，各种乏。安排了很多项目，有些是高强度运动，有些需要早起，但是学习工作上事儿又那么多，所以只能减少睡眠时间了，真的很 <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/asleep.png' alt=':asleep' class='wp-smiley' />  。</p>
<p>一直想买车骑行，前段时间终于下定决心买了一辆山地车，搞得最近吃饭都紧张。装备还没有配齐，通过两次骑行，也了解到一些装备的必要性，头盔是必须的，而且还不能买便宜货，这货可以提高你与大货车或者大客车或者大地亲吻后脑袋还能正常工作的概率。护肘也是必须的，晒了3个小时而已，感觉皮快掉了，去年5月份在武汉骑行一天，就掉了一层皮！魔术头巾，如果不想满嘴的沙和絮，就带一个当口罩用吧！后座包也是必须的，装相机啥的很方便。手套必须的，还有把套得换一个，长时间骑行不能总一种姿势。还有其他的工具啥的，想想如果在四环线上爆胎是灰常悲剧的 <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/sad.png' alt=':sad' class='wp-smiley' /> 。</p>
<p>昨天和前天在驾校疲劳驾驶了两天，今天又疲劳骑行了一上午，虽然哥的体力还不错，不过哥的肉还是很不经掉的，我要长胖 <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/pleasantsuprise.png' alt=':pleasantsuprise' class='wp-smiley' /> 。最近要转正了，5篇1500字，看来好好休息还是个奢望。</p>
<p>下一站骑行<strong>雁栖湖</strong>，在此广招各位兄弟姐妹加入，时间初步定为下周末，周六还是周日未定！
<div style="margin-top: 15px;">
<p><strong>作者：</strong><a href="http://matrix7.me/">迷途羔羊</a> | <strong>本文链接：</strong><a href="http://matrix7.me/2011/05/%e5%8e%bb%e6%97%85%e8%a1%8c%e5%90%a7%ef%bc%8c%e5%81%9a%e4%b8%80%e4%b8%aa%e9%aa%91%e8%a1%8c%e8%80%85/">去旅行吧，做一个骑行者</a></p>
</div>
<div style="margin-left: 26px; margin-bottom: 15px;"><strong>Matr7x版权所有，转载本站文章请注明，转载自</strong> <a href="http://matrix7.me/">迷途羔羊</a>。</strong></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fmatrix7.me%2F2011%2F05%2F%25e5%258e%25bb%25e6%2597%2585%25e8%25a1%258c%25e5%2590%25a7%25ef%25bc%258c%25e5%2581%259a%25e4%25b8%2580%25e4%25b8%25aa%25e9%25aa%2591%25e8%25a1%258c%25e8%2580%2585%2F&title=%E5%8E%BB%E6%97%85%E8%A1%8C%E5%90%A7%EF%BC%8C%E5%81%9A%E4%B8%80%E4%B8%AA%E9%AA%91%E8%A1%8C%E8%80%85" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>May 23, 2011 -- <a href="http://matrix7.me/2011/05/2011-05-21-%e9%9b%81%e6%a0%96%e6%b9%96%e6%b8%b8%e8%ae%b0%ef%bc%88%e5%9b%be%ef%bc%89/" title="2011-05-21 雁栖湖游记（图）">2011-05-21 雁栖湖游记（图）</a> (1)<br /><small>[singlepic id=134 float=center]
雁栖湖 蓝天 白云 远处的山 波光粼粼 湖中小岛
北京的天气总是阳光明媚，这样的天气窝在房子里实在是浪费生命！雁栖湖，第一次听到这个...</small></li></ul>]]></content:encoded>
			<wfw:commentRss>http://matrix7.me/2011/05/%e5%8e%bb%e6%97%85%e8%a1%8c%e5%90%a7%ef%bc%8c%e5%81%9a%e4%b8%80%e4%b8%aa%e9%aa%91%e8%a1%8c%e8%80%85/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>博客建站一周年</title>
		<link>http://matrix7.me/2011/03/%e5%8d%9a%e5%ae%a2%e5%bb%ba%e7%ab%99%e4%b8%80%e5%91%a8%e5%b9%b4/</link>
		<comments>http://matrix7.me/2011/03/%e5%8d%9a%e5%ae%a2%e5%bb%ba%e7%ab%99%e4%b8%80%e5%91%a8%e5%b9%b4/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 14:45:50 +0000</pubDate>
		<dc:creator>Matrix7</dc:creator>
				<category><![CDATA[生活杂谈]]></category>
		<category><![CDATA[博客]]></category>
		<category><![CDATA[域名]]></category>

		<guid isPermaLink="false">http://matrix7.me/?p=1026</guid>
		<description><![CDATA[今天是博客开通一周年纪念日，一年前我开通了这个博客（关于一年前我的建站过程，参考这里），目的是为了作为一个技术博客来记录我的学习和工作的点滴。很高兴我能够把写博客这件事儿给坚持下来，虽然写文章的频率不高，但是这些文章都是我的心血，是我成长历程。 往后我的博客会继续写下去，但是会增加一些对生活的感悟，对历史文化的思考，不再单一局限于技术。下面是我的博客一年来的一些数据： 22篇文章，6个页面，15个分类，102个标签，166个评论。 这是一年来的月点击量曲线。 这是博客点击量，10年为2234，11年为2404，总点击量是4638，按照趋势，点击量是在逐渐增加的。 这是博客文章排名，排名第一的是我自己的一篇原创文章，后面的几篇是关于em算法的（可见网上查em算法的人非常多），然后是翻译的操作系统开发系列。 ===================我是可爱的分割线=================== 这次续费，域名花了7.98$，me域名的正常续费是19.99$，而这次我通过在godaddy上购买了一个月的主机7.99$，就可以以1.99$续费域名，然后用省25%优惠码，最后的价格就是7.99+1.99-2.00=7.98$。 这次续费主机还是68元，可能未来这一年流量会不够，等到流量不够的时候再考虑升级主机吧。 好吧，fighting！ 作者：迷途羔羊 &#124; 本文链接：博客建站一周年 Matr7x版权所有，转载本站文章请注明，转载自 迷途羔羊。 相关文章March 28, 2010 -- 新的开始&#8230; (14)今天我计划了大半年的博客终于开张了，我会记住这一天2010年3月28日。 不知是太懒还是为什么，一直想拥有一个个人网站，却迟迟没有动作，如果不是今天看到朱俊同学的新博客，可能今天我的博客还不能开...]]></description>
			<content:encoded><![CDATA[<p>今天是博客开通一周年纪念日，一年前我开通了这个博客（关于一年前我的建站过程，参考<a title="新的开始…" href="http://matrix7.me/2010/03/%e6%96%b0%e7%9a%84%e5%bc%80%e5%a7%8b/" target="_blank">这里</a>），目的是为了作为一个技术博客来记录我的学习和工作的点滴。很高兴我能够把写博客这件事儿给坚持下来，虽然写文章的频率不高，但是这些文章都是我的心血，是我成长历程。</p>
<p>往后我的博客会继续写下去，但是会增加一些对生活的感悟，对历史文化的思考，不再单一局限于技术。下面是我的博客一年来的一些数据：</p>

<a href="http://matrix7.me/wp-content/gallery/others/1year-content-and-discussion.png" title="" rel="lightbox[singlepic130]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/130__x_1year-content-and-discussion.png" alt="1year-content-and-discussion" title="1year-content-and-discussion" />
</a>

<p>22篇文章，6个页面，15个分类，102个标签，166个评论。 <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/yct011.gif' alt=':yct011' class='wp-smiley' /> </p>

<a href="http://matrix7.me/wp-content/gallery/others/1year-months.png" title="" rel="lightbox[singlepic131]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/131__x_1year-months.png" alt="1year-months" title="1year-months" />
</a>

<p>这是一年来的月点击量曲线。 <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/tsj017.gif' alt=':tsj017' class='wp-smiley' /> </p>
<p><span id="more-1026"></span></p>

<a href="http://matrix7.me/wp-content/gallery/others/1year-year-and-month.png" title="" rel="lightbox[singlepic132]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/132__x_1year-year-and-month.png" alt="1year-year-and-month" title="1year-year-and-month" />
</a>

<p>这是博客点击量，10年为2234，11年为2404，总点击量是4638，按照趋势，点击量是在逐渐增加的。 <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/yct015.gif' alt=':yct015' class='wp-smiley' /> </p>

<a href="http://matrix7.me/wp-content/gallery/others/1year-views-rating.png" title="" rel="lightbox[singlepic133]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/133__x_1year-views-rating.png" alt="1year-views-rating" title="1year-views-rating" />
</a>

<p>这是博客文章排名，排名第一的是我自己的一篇原创文章，后面的几篇是关于em算法的（可见网上查em算法的人非常多），然后是翻译的操作系统开发系列。 <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/tsj013.gif' alt=':tsj013' class='wp-smiley' /> </p>
<p> <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/strive.png' alt=':strive' class='wp-smiley' /> ===================我是可爱的分割线=================== <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/strive.png' alt=':strive' class='wp-smiley' /> </p>
<p>这次续费，域名花了7.98$，me域名的正常续费是19.99$，而这次我通过在godaddy上购买了一个月的主机7.99$，就可以以1.99$续费域名，然后用省25%优惠码，最后的价格就是7.99+1.99-2.00=7.98$。</p>
<p>这次续费主机还是68元，可能未来这一年流量会不够，等到流量不够的时候再考虑升级主机吧。</p>
<p>好吧，fighting！ <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/strive.png' alt=':strive' class='wp-smiley' /> <div style="margin-top: 15px;">
<p><strong>作者：</strong><a href="http://matrix7.me/">迷途羔羊</a> | <strong>本文链接：</strong><a href="http://matrix7.me/2011/03/%e5%8d%9a%e5%ae%a2%e5%bb%ba%e7%ab%99%e4%b8%80%e5%91%a8%e5%b9%b4/">博客建站一周年</a></p>
</div>
<div style="margin-left: 26px; margin-bottom: 15px;"><strong>Matr7x版权所有，转载本站文章请注明，转载自</strong> <a href="http://matrix7.me/">迷途羔羊</a>。</strong></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fmatrix7.me%2F2011%2F03%2F%25e5%258d%259a%25e5%25ae%25a2%25e5%25bb%25ba%25e7%25ab%2599%25e4%25b8%2580%25e5%2591%25a8%25e5%25b9%25b4%2F&title=%E5%8D%9A%E5%AE%A2%E5%BB%BA%E7%AB%99%E4%B8%80%E5%91%A8%E5%B9%B4" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>March 28, 2010 -- <a href="http://matrix7.me/2010/03/%e6%96%b0%e7%9a%84%e5%bc%80%e5%a7%8b/" title="新的开始&#8230;">新的开始&#8230;</a> (14)<br /><small>今天我计划了大半年的博客终于开张了，我会记住这一天2010年3月28日。

不知是太懒还是为什么，一直想拥有一个个人网站，却迟迟没有动作，如果不是今天看到朱俊同学的新博客，可能今天我的博客还不能开...</small></li></ul>]]></content:encoded>
			<wfw:commentRss>http://matrix7.me/2011/03/%e5%8d%9a%e5%ae%a2%e5%bb%ba%e7%ab%99%e4%b8%80%e5%91%a8%e5%b9%b4/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>图说战国</title>
		<link>http://matrix7.me/2011/03/%e5%9b%be%e8%af%b4%e6%88%98%e5%9b%bd/</link>
		<comments>http://matrix7.me/2011/03/%e5%9b%be%e8%af%b4%e6%88%98%e5%9b%bd/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 14:06:35 +0000</pubDate>
		<dc:creator>Matrix7</dc:creator>
				<category><![CDATA[历史文化]]></category>
		<category><![CDATA[历史]]></category>
		<category><![CDATA[战国]]></category>
		<category><![CDATA[秦国]]></category>

		<guid isPermaLink="false">http://matrix7.me/?p=998</guid>
		<description><![CDATA[花了半年时间终于看完了《大秦帝国》这部史诗级的小说，这部作品分为6部，从秦孝公商鞅变法一直讲到秦始皇统一六国后很短的时间内秦帝国轰然倒塌。且不说这部作品表达的思想不符合当今社会的主流及其引起的一些关于历史史实的争议，单从小说的角度来说，这是一部好作品。作者为了用这部作品表现尘封在时空深处那段令人振奋的历史，花了无数的日日夜夜，就这份热爱与执着也是令人敬佩的。 一直很喜欢战国这个大争之世，也一直在找战国时期的地图，后来在网上发现了这一系列地图，果断收藏之，非常感谢这几幅图的制作者！ 战国是个铁血大争的时代，与当今世界有着某些相似之处，归结起来一句话，一切靠实力说话，谁有实力，谁就可以称霸。虽然说当今世界的主题是发展，但是霸权主义仍然存在，实力说话的准则永远不会过时。除了在国家之间，其他的群体如企业甚至个人，也是毫无疑问靠实力说话。 战国时期有着一种当世已经不存在的学术现象，百家争鸣。正是在这种风气之下产生了无数的学派和思想家，才有了稷下学宫这种学术机构。战国时代的学者们“合则留，不合则去”，诸侯们也不会因为政见不合而残害这些学者，于是在那个大争的年代，才有了那么多伟大的思想家。 战国时代的人有一种类似于日本武士道的精神，姑且称之为士子精神，这个阶层的人都是有一定社会地位的，或者有学识，或者勇猛，或者有特异之术的人。这些人不为名利而活，坚守作为一个士子的原则，《战国策》有云“士为知己者死”。我赞赏这些豪侠之士，只为他们那种英雄节义，他们是真正的有自由个性、血性勇气的独立战士。晏子的那句话我非常喜欢，“凡有血气，皆有争心”。反观当今社会的主流思潮，相比于战国时期的浩然正气，不得不感叹世风日下，人心不古。 下面就用几幅地图来回忆一下战国那个激荡的年代的那些人那些事儿。 第一幅图，公元前361年，秦孝公元年。 此时的秦国不是强大的帝国，而是一个西部蛮夷小国，受到其他六个国家的蔑视。此时中原的霸主是魏国，地处中原，富庶繁华，拥有黄河以西的河西、上郡、函谷关等地。 秦孝公在位这段时期发生了对秦国来说最重要的一件大事儿——“商鞅变法”，可以说没有“商鞅变法”就没有后来秦国的持续强盛，就没有秦始皇统一六国。当然商鞅同志最后的结局是很悲惨的，被车裂而死，但变法却成功了。 这段时期发生的另外一件大事儿就是魏国的衰落。其时魏国的君主是魏惠王，他在位50年，也正是在他在位期间，魏国由鼎盛走向衰落。导致魏国衰落的事件是两场战争，一场是著名的围魏救赵，另外一场是围魏救韩，这两场战争的细节不说了，大家都清楚。但是这两场战争中的两个主角不得不提，一个是孙膑，一个是庞涓。此两人都是鬼谷子门徒（貌似是传说），发生在他们俩之间的故事也是耳熟能详。但我不得不赞扬孙膑是一个很牛逼的军事家，他毕生就此两场战役，但这两场战役极具艺术性，且创造了运动战的先河。毛泽东对其评价是“围魏救赵，千古高手”，也因此在解放战争中，解放军大量使用了运动战。所以说孙膑的战术思想对于后世有深远的影响。庞涓这家伙就不多说了，魏国上将军，死都死的那么怂。也是因为这两场战役，齐国崛起成为了一个超强战国。 秦孝公后期，因魏国衰败，秦国乘机夺回河西。 第二幅图，秦惠文王后期，公元前311年。 秦惠文王是个很牛逼的君主，他在位期间，先利用老氏族和山东六国的怨恨车裂商鞅，后以杀商鞅为名铲除老世族，但坚持商鞅变法。后来秦惠文王时期，秦国又夺回上郡，灭掉巴蜀，打败楚国夺取汉中郡。于是秦国的版图空前扩大，正如上图所示，再看魏国已经被压缩的很小很小了。 秦惠文王在位这段时间，不得不提苏秦张仪这两位纵横家，据传此两人也是鬼谷子门徒。这段时间，天下似乎就掌握在他们两个手里，苏秦合纵，张仪连横，两者针锋相对。似乎他们两个没有了谁，另一个活着都没有了意义。最后苏秦惨死，张仪隐退。 第三幅图，秦昭襄王前期，公元前286年。 秦昭襄王之前，还有一位秦国君主秦武王，他在位4年，死的真够冤的。武王赢姓，名荡（这名字取的...但实际上是指荡平天下）。武王荡继位时，秦国国力强盛，欲对外征伐，于是选取的目标是周王室，于是武王大军击退韩军，攻占宜阳，周都洛阳门户洞开，周天子无力迎击秦军，只好出迎秦军。武王直奔周室太庙，往观九鼎。九鼎本是大禹收取天下九州的贡金铸成，每鼎代表一州，共有荆、梁、雍、豫、徐、青、扬、兖、冀九州。武王好角力，这时候开始犯2了，跑上去举鼎，被鼎砸碎右脚足骨，血流如柱，不治而亡。武王荡的故事告诉我们，就算你再牛逼，也不要逞强。 秦昭王前期并没有亲政，但是秦昭王比较牛逼的一点就是他能忍，后来在范雎的帮助下终于亲政，他是中国历史上在位时间最长的国君之一。秦昭王是个比较强势的君主，但他在位期间也做过一些撮事儿，一个是著名的完璧归赵，一个是渑池会盟，这两个事件中的主角是蔺相如。除此之外还有廉颇与蔺相如的将相和故事。 第四幅图，公元前280年，燕国鼎盛，齐国仅剩二城。 这幅图包含的故事就比较有意思了，这个得从燕国子之之乱说起。燕王哙任子之为相，效法尧以天下让与许由的故事，把燕国政权交予相邦子之。以太子平为首的贵族联合将军市被，包围王宫，欲推翻子之，连攻几月不成。子之反击，取得大胜。齐宣王在孟子策动下攻燕(可见孟子也不是啥好人)，占领燕都，燕王哙被杀，子之逃亡，被齐人剁成肉酱。齐国与燕国的仇就是这个时候结下的，三年后在五国压力下，齐国撤兵，燕国公子职归燕，这就是燕昭王。燕昭王是个很有抱负的君主，欲振兴燕国，下决心招贤纳士，后拜乐毅为亚卿，整顿国政，训练兵马，后来燕国就强大了起来。而此时齐国是齐湣王在位，齐国正值强盛，燕国对齐国示弱，并诱齐攻宋，孤立齐国，后齐国灭宋，乐毅率五国联军攻齐，大破齐军，齐湣王被以救齐为名的楚将淖齿杀掉。后燕军连下齐国70余城，仅剩莒和即墨两座孤城。 第五幅图，公元前279年，田单火牛阵恢复齐国。 这幅图的故事是接上面的故事。乐毅欲化齐入燕，后燕昭王死，燕惠王即位，中田单反间计，以骑劫代替乐毅为将，后田单用火牛阵击破围攻即墨的燕军，将燕军逐出齐境，70余城复归于齐。不得不说田单是一个很强大的人，原本是一个商人，国家沦陷，不选择明哲保身，却为国家守城，后恢复齐国，留名青史。 除此之外这段时期还有秦名将白起伐楚。 第六幅图，公元前256年，秦灭东周。 周王室终于是被灭了，先说说在此之前的长平之战。长平之战的双方分别为秦国和赵国，秦国自商鞅变法之后成为了超强战国，而赵国自赵武灵王胡服骑射以来，也成为了超强战国。秦赵两国在上党对峙三年，后秦使反间计使赵国换将，以赵括代替廉颇来统领赵军，赵军被秦军围歼，赵卒四十余万被坑杀。长平之战时期，秦国的君主是秦昭王，上将军是白起，丞相范雎。白起是战国名将，一生灭六国军队一百万以上，后来与范雎结下仇怨，最后的结局是自刎而死。范雎是秦国名相，提出了“远交近攻”的战略，这一战略在当今世界仍然受用。太史公对范雎的评价是“一饭之恩必偿，睚眦之仇必报”，也正是因为这个性格，导致范雎最后妒杀白起，提拔亲信，犯了很严重的错误，但是范雎最后让位蔡泽，得了善终。 这段时间的另外一件大事儿，就是吕不韦扶持赢异人登上秦王宝座。吕不韦是个商人，这个大家都知道，他提出了“奇货可居”的理念，耗巨资扶持赢异人回国登基，最后自己成为了秦国丞相。吕不韦有门客三千，并组织门客编著了《吕氏春秋》。但是最终吕不韦因为处理感情问题不当，推荐嫪毐给太后赵姬，导致嫪毐乱国，后不得不自杀。 第七幅图，公元前230年，秦始皇统一六国进入最后10年。 第八幅图，秦灭六国形式图。 到了秦王政时期，秦国已经拥有了一统天下的实力，六个国家，除了韩国以外，其他六国皆为王翦王贲父子所灭，灭六国的过程就不多说了。 这个过程中必须提到的另外一个人是李斯，李斯是秦国开国丞相，他帮助秦始皇一统天下，后制定法律，车同轨，书同文。 之后秦始皇薨，赵高胁迫李斯合谋逼死公子扶苏，立胡亥为二世皇帝，后李斯被赵高腰斩于市，胡亥被赵高所杀，秦帝国轰然倒塌。 可以说李斯是一个很具有才具的人，但是为了个人利益，做出了对国家不利的事，导致了秦帝国的迅速灭亡。 再谈谈公子扶苏和蒙恬，扶苏是始皇帝长子，颇具才具，蒙恬是镇守北疆，抵抗匈奴的名将，若扶苏不那么听话，与蒙恬一起率军南下，铲除赵高，也许中国历史就会被改写，而蒙恬面对这种情况，没有保住扶苏的命并率军南下铲除奸佞，实在是有些不该。 以上图片均来自梦仙阁，再次感谢作者制作这些图片。 ===================我是可爱的分割线=================== 历史是个神奇的东西，很有趣，历史上所发生的事不断地重演着。我总是在想象，当年的那些人在那些情况下是如何做出那些决定的，那些事又是如何决定历史进程的。 我喜欢上了历史，决定从史记读起。 作者：迷途羔羊 &#124; 本文链接：图说战国 Matr7x版权所有，转载本站文章请注明，转载自 迷途羔羊。 最多留言日志December 20, 2010 -- EM算法（四）——混合高斯模型（GMM）中的EM算法 (34)下载：EM算法的Matlab实现 在上一篇文章中，我们推导出一个式子，只要使这个式子最大化，不停地迭代，即可估计出混合模型的参数。今天这篇文章会推导混合高斯模型中EM算法的迭代公式，利用该公式反...April 1, 2010 -- 【翻译】操作系统开发系列——前言 (31)操作系统开发系列——前言 Translated By [...]]]></description>
			<content:encoded><![CDATA[<p>花了半年时间终于看完了《大秦帝国》这部史诗级的小说，这部作品分为6部，从秦孝公商鞅变法一直讲到秦始皇统一六国后很短的时间内秦帝国轰然倒塌。且不说这部作品表达的思想不符合当今社会的主流及其引起的一些关于历史史实的争议，单从小说的角度来说，这是一部好作品。作者为了用这部作品表现尘封在时空深处那段令人振奋的历史，花了无数的日日夜夜，就这份热爱与执着也是令人敬佩的。</p>
<p>一直很喜欢战国这个大争之世，也一直在找战国时期的地图，后来在网上发现了这一系列地图，果断收藏之，非常感谢这几幅图的制作者！</p>
<p>战国是个铁血大争的时代，与当今世界有着某些相似之处，归结起来一句话，一切靠实力说话，谁有实力，谁就可以称霸。虽然说当今世界的主题是发展，但是霸权主义仍然存在，实力说话的准则永远不会过时。除了在国家之间，其他的群体如企业甚至个人，也是毫无疑问靠实力说话。</p>
<p><span id="more-998"></span></p>
<p>战国时期有着一种当世已经不存在的学术现象，百家争鸣。正是在这种风气之下产生了无数的学派和思想家，才有了稷下学宫这种学术机构。战国时代的学者们“合则留，不合则去”，诸侯们也不会因为政见不合而残害这些学者，于是在那个大争的年代，才有了那么多伟大的思想家。</p>
<p>战国时代的人有一种类似于日本武士道的精神，姑且称之为士子精神，这个阶层的人都是有一定社会地位的，或者有学识，或者勇猛，或者有特异之术的人。这些人不为名利而活，坚守作为一个士子的原则，<span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;">《战国策》</span>有云“士为知己者死”。我赞赏这些豪侠之士，只为他们那种英雄节义，他们是真正的有自由个性、血性勇气的独立战士。晏子的那句话我非常喜欢，“凡有血气，皆有争心”。反观当今社会的主流思潮，相比于战国时期的浩然正气，不得不感叹世风日下，人心不古。</p>
<p>下面就用几幅地图来回忆一下战国那个激荡的年代的那些人那些事儿。</p>

<a href="http://matrix7.me/wp-content/gallery/warringstates/1.jpg" title="" rel="lightbox[singlepic122]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/122__x_1.jpg" alt="1战国时期秦孝公初期，公元前361年" title="1战国时期秦孝公初期，公元前361年" />
</a>

<p>第一幅图，公元前361年，秦孝公元年。</p>
<p>此时的秦国不是强大的帝国，而是一个西部蛮夷小国，受到其他六个国家的蔑视。此时中原的霸主是魏国，地处中原，富庶繁华，拥有黄河以西的河西、上郡、函谷关等地。</p>
<p>秦孝公在位这段时期发生了对秦国来说最重要的一件大事儿——“商鞅变法”，可以说没有“商鞅变法”就没有后来秦国的持续强盛，就没有秦始皇统一六国。当然商鞅同志最后的结局是很悲惨的，被车裂而死，但变法却成功了。</p>
<p>这段时期发生的另外一件大事儿就是魏国的衰落。其时魏国的君主是魏惠王，他在位50年，也正是在他在位期间，魏国由鼎盛走向衰落。导致魏国衰落的事件是两场战争，一场是著名的围魏救赵，另外一场是围魏救韩，这两场战争的细节不说了，大家都清楚。但是这两场战争中的两个主角不得不提，一个是孙膑，一个是庞涓。此两人都是鬼谷子门徒（貌似是传说），发生在他们俩之间的故事也是耳熟能详。但我不得不赞扬孙膑是一个很牛逼的军事家，他毕生就此两场战役，但这两场战役极具艺术性，且创造了运动战的先河。毛泽东对其评价是“围魏救赵，千古高手”，也因此在解放战争中，解放军大量使用了运动战。所以说孙膑的战术思想对于后世有深远的影响。庞涓这家伙就不多说了，魏国上将军，死都死的那么怂。也是因为这两场战役，齐国崛起成为了一个超强战国。</p>
<p>秦孝公后期，因魏国衰败，秦国乘机夺回河西。</p>

<a href="http://matrix7.me/wp-content/gallery/warringstates/2.jpg" title="" rel="lightbox[singlepic123]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/123__x_2.jpg" alt="2战国时期地图第2张秦惠文王后期公元前311年" title="2战国时期地图第2张秦惠文王后期公元前311年" />
</a>

<p>第二幅图，秦惠文王后期，公元前311年。</p>
<p>秦惠文王是个很牛逼的君主，他在位期间，先利用老氏族和山东六国的怨恨车裂商鞅，后以杀商鞅为名铲除老世族，但坚持商鞅变法。后来秦惠文王时期，秦国又夺回上郡，灭掉巴蜀，打败楚国夺取汉中郡。于是秦国的版图空前扩大，正如上图所示，再看魏国已经被压缩的很小很小了。</p>
<p>秦惠文王在位这段时间，不得不提苏秦张仪这两位纵横家，据传此两人也是鬼谷子门徒。这段时间，天下似乎就掌握在他们两个手里，苏秦合纵，张仪连横，两者针锋相对。似乎他们两个没有了谁，另一个活着都没有了意义。最后苏秦惨死，张仪隐退。</p>

<a href="http://matrix7.me/wp-content/gallery/warringstates/3.jpg" title="" rel="lightbox[singlepic124]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/124__x_3.jpg" alt="3战国时期地图第3张秦昭襄王前期公元前286年，齐灭宋" title="3战国时期地图第3张秦昭襄王前期公元前286年，齐灭宋" />
</a>

<p>第三幅图，秦昭襄王前期，公元前286年。</p>
<p>秦昭襄王之前，还有一位秦国君主秦武王，他在位4年，死的真够冤的。武王赢姓，名荡（这名字取的...但实际上是指荡平天下）。武王荡继位时，秦国国力强盛，欲对外征伐，于是选取的目标是周王室，于是武王大军击退韩军，攻占宜阳，周都洛阳门户洞开，周天子无力迎击秦军，只好出迎秦军。武王直奔周室太庙，往观九鼎。九鼎本是大禹收取天下九州的贡金铸成，每鼎代表一州，共有荆、梁、雍、豫、徐、青、扬、兖、冀九州。武王好角力，这时候开始犯2了，跑上去举鼎，被鼎砸碎右脚足骨，血流如柱，不治而亡。武王荡的故事告诉我们，就算你再牛逼，也不要逞强。</p>
<p>秦昭王前期并没有亲政，但是秦昭王比较牛逼的一点就是他能忍，后来在范雎的帮助下终于亲政，他是中国历史上在位时间最长的国君之一。秦昭王是个比较强势的君主，但他在位期间也做过一些撮事儿，一个是著名的完璧归赵，一个是渑池会盟，这两个事件中的主角是蔺相如。除此之外还有廉颇与蔺相如的将相和故事。</p>

<a href="http://matrix7.me/wp-content/gallery/warringstates/4.jpg" title="" rel="lightbox[singlepic125]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/125__x_4.jpg" alt="4战国时期地图第4张公元前280年.燕国鼎盛，齐国仅剩二" title="4战国时期地图第4张公元前280年.燕国鼎盛，齐国仅剩二" />
</a>

<p>第四幅图，公元前280年，燕国鼎盛，齐国仅剩二城。</p>
<p>这幅图包含的故事就比较有意思了，这个得从燕国子之之乱说起。燕王哙任子之为相，效法尧以天下让与许由的故事，把燕国政权交予相邦子之。以太子平为首的贵族联合将军市被，包围王宫，欲推翻子之，连攻几月不成。子之反击，取得大胜。齐宣王在孟子策动下攻燕(可见孟子也不是啥好人)，占领燕都，燕王哙被杀，子之逃亡，被齐人剁成肉酱。齐国与燕国的仇就是这个时候结下的，三年后在五国压力下，齐国撤兵，燕国公子职归燕，这就是燕昭王。燕昭王是个很有抱负的君主，欲振兴燕国，下决心招贤纳士，后拜乐毅为亚卿，整顿国政，训练兵马，后来燕国就强大了起来。而此时齐国是齐湣王在位，齐国正值强盛，燕国对齐国示弱，并诱齐攻宋，孤立齐国，后齐国灭宋，乐毅率五国联军攻齐，大破齐军，齐湣王被以救齐为名的楚将淖齿杀掉。后燕军连下齐国70余城，仅剩莒和即墨两座孤城。</p>

<a href="http://matrix7.me/wp-content/gallery/warringstates/5.jpg" title="" rel="lightbox[singlepic126]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/126__x_5.jpg" alt="5战国时期地图公元前279年，田单火牛阵成功，恢复齐国" title="5战国时期地图公元前279年，田单火牛阵成功，恢复齐国" />
</a>

<p>第五幅图，公元前279年，田单火牛阵恢复齐国。</p>
<p>这幅图的故事是接上面的故事。乐毅欲化齐入燕，后燕昭王死，燕惠王即位，中田单反间计，以骑劫代替乐毅为将，后田单用火牛阵击破围攻即墨的燕军，将燕军逐出齐境，70余城复归于齐。不得不说田单是一个很强大的人，原本是一个商人，国家沦陷，不选择明哲保身，却为国家守城，后恢复齐国，留名青史。</p>
<p>除此之外这段时期还有秦名将白起伐楚。</p>

<a href="http://matrix7.me/wp-content/gallery/warringstates/6.jpg" title="" rel="lightbox[singlepic127]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/127__x_6.jpg" alt="6战国时期地图公元前256年，秦国灭东周" title="6战国时期地图公元前256年，秦国灭东周" />
</a>

<p>第六幅图，公元前256年，秦灭东周。</p>
<p>周王室终于是被灭了，先说说在此之前的长平之战。长平之战的双方分别为秦国和赵国，秦国自商鞅变法之后成为了超强战国，而赵国自赵武灵王胡服骑射以来，也成为了超强战国。秦赵两国在上党对峙三年，后秦使反间计使赵国换将，以赵括代替廉颇来统领赵军，赵军被秦军围歼，赵卒四十余万被坑杀。长平之战时期，秦国的君主是秦昭王，上将军是白起，丞相范雎。白起是战国名将，一生灭六国军队一百万以上，后来与范雎结下仇怨，最后的结局是自刎而死。范雎是秦国名相，提出了“远交近攻”的战略，这一战略在当今世界仍然受用。太史公对范雎的评价是“一饭之恩必偿，睚眦之仇必报”，也正是因为这个性格，导致范雎最后妒杀白起，提拔亲信，犯了很严重的错误，但是范雎最后让位蔡泽，得了善终。</p>
<p>这段时间的另外一件大事儿，就是吕不韦扶持赢异人登上秦王宝座。吕不韦是个商人，这个大家都知道，他提出了“奇货可居”的理念，耗巨资扶持赢异人回国登基，最后自己成为了秦国丞相。吕不韦有门客三千，并组织门客编著了《吕氏春秋》。但是最终吕不韦因为处理感情问题不当，推荐嫪毐给太后赵姬，导致嫪毐乱国，后不得不自杀。</p>

<a href="http://matrix7.me/wp-content/gallery/warringstates/7.jpg" title="" rel="lightbox[singlepic128]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/128__x_7.jpg" alt="7战国时期地图公元前230年，秦始皇统一六国战争进入最后10年" title="7战国时期地图公元前230年，秦始皇统一六国战争进入最后10年" />
</a>

<p>第七幅图，公元前230年，秦始皇统一六国进入最后10年。</p>

<a href="http://matrix7.me/wp-content/gallery/warringstates/8.jpg" title="" rel="lightbox[singlepic129]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/129__x_8.jpg" alt="8秦灭六国战争图" title="8秦灭六国战争图" />
</a>

<p>第八幅图，秦灭六国形式图。</p>
<p>到了秦王政时期，秦国已经拥有了一统天下的实力，六个国家，除了韩国以外，其他六国皆为王翦王贲父子所灭，灭六国的过程就不多说了。</p>
<p>这个过程中必须提到的另外一个人是李斯，李斯是秦国开国丞相，他帮助秦始皇一统天下，后制定法律，车同轨，书同文。</p>
<p>之后秦始皇薨，赵高胁迫李斯合谋逼死公子扶苏，立胡亥为二世皇帝，后李斯被赵高腰斩于市，胡亥被赵高所杀，秦帝国轰然倒塌。</p>
<p>可以说李斯是一个很具有才具的人，但是为了个人利益，做出了对国家不利的事，导致了秦帝国的迅速灭亡。</p>
<p>再谈谈公子扶苏和蒙恬，扶苏是始皇帝长子，颇具才具，蒙恬是镇守北疆，抵抗匈奴的名将，若扶苏不那么听话，与蒙恬一起率军南下，铲除赵高，也许中国历史就会被改写，而蒙恬面对这种情况，没有保住扶苏的命并率军南下铲除奸佞，实在是有些不该。</p>
<p>以上图片均来自<a href="http://photo.blog.sina.com.cn/chchch2009" target="_blank">梦仙阁</a>，再次感谢作者制作这些图片。</p>
<p> <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/strive.png' alt=':strive' class='wp-smiley' /> ===================我是可爱的分割线=================== <img src='http://matrix7.me/wp-content/plugins/smilies-themer/Custom/strive.png' alt=':strive' class='wp-smiley' /> </p>
<p>历史是个神奇的东西，很有趣，历史上所发生的事不断地重演着。我总是在想象，当年的那些人在那些情况下是如何做出那些决定的，那些事又是如何决定历史进程的。</p>
<p>我喜欢上了历史，决定从史记读起。
<div style="margin-top: 15px;">
<p><strong>作者：</strong><a href="http://matrix7.me/">迷途羔羊</a> | <strong>本文链接：</strong><a href="http://matrix7.me/2011/03/%e5%9b%be%e8%af%b4%e6%88%98%e5%9b%bd/">图说战国</a></p>
</div>
<div style="margin-left: 26px; margin-bottom: 15px;"><strong>Matr7x版权所有，转载本站文章请注明，转载自</strong> <a href="http://matrix7.me/">迷途羔羊</a>。</strong></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fmatrix7.me%2F2011%2F03%2F%25e5%259b%25be%25e8%25af%25b4%25e6%2588%2598%25e5%259b%25bd%2F&title=%E5%9B%BE%E8%AF%B4%E6%88%98%E5%9B%BD" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><h2  class="related_post_title">最多留言日志</h2><ul class="related_post"><li>December 20, 2010 -- <a href="http://matrix7.me/2010/12/em%e7%ae%97%e6%b3%95%ef%bc%88%e5%9b%9b%ef%bc%89%e2%80%94%e2%80%94%e6%b7%b7%e5%90%88%e9%ab%98%e6%96%af%e6%a8%a1%e5%9e%8b%ef%bc%88gmm%ef%bc%89%e4%b8%ad%e7%9a%84em%e7%ae%97%e6%b3%95/" title="EM算法（四）——混合高斯模型（GMM）中的EM算法">EM算法（四）——混合高斯模型（GMM）中的EM算法</a> (34)<br /><small>下载：EM算法的Matlab实现

在上一篇文章中，我们推导出一个式子，只要使这个式子最大化，不停地迭代，即可估计出混合模型的参数。今天这篇文章会推导混合高斯模型中EM算法的迭代公式，利用该公式反...</small></li><li>April 1, 2010 -- <a href="http://matrix7.me/2010/04/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94%e5%89%8d%e8%a8%80/" title="【翻译】操作系统开发系列——前言">【翻译】操作系统开发系列——前言</a> (31)<br /><small>操作系统开发系列——前言
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
引言
欢迎大家来到这里！

这是一系列关于计算机和操作系统的章节、...</small></li><li>June 30, 2010 -- <a href="http://matrix7.me/2010/06/%e5%85%ad%e6%9c%88%e7%9a%84%e6%9c%80%e5%90%8e%e4%b8%80%e5%a4%a9%ef%bc%8c%e8%bf%bd%e5%bf%86%e6%88%91%e7%a6%bb%e9%80%9d%e7%9a%84%e5%a4%a7%e5%ad%a6/" title="六月的最后一天，追忆我离逝的大学">六月的最后一天，追忆我离逝的大学</a> (15)<br /><small>六月的武汉，终于热了起来。毕业的季节，校园里弥漫着淡淡的忧伤，梧桐流干了眼泪，似乎不舍我们的离去，青年园依旧郁郁葱葱，庇荫着莘莘学子，即将建成的西一食堂，渐渐有了西二的影子，但我们却来不及在里面吃上一...</small></li><li>March 28, 2010 -- <a href="http://matrix7.me/2010/03/%e6%96%b0%e7%9a%84%e5%bc%80%e5%a7%8b/" title="新的开始&#8230;">新的开始&#8230;</a> (14)<br /><small>今天我计划了大半年的博客终于开张了，我会记住这一天2010年3月28日。

不知是太懒还是为什么，一直想拥有一个个人网站，却迟迟没有动作，如果不是今天看到朱俊同学的新博客，可能今天我的博客还不能开...</small></li><li>April 26, 2010 -- <a href="http://matrix7.me/2010/04/vesa%e7%bc%96%e7%a8%8b%e2%80%94%e2%80%94gui%e7%a6%bb%e6%88%91%e4%bb%ac%e5%b9%b6%e4%b8%8d%e9%81%a5%e8%bf%9c/" title="VESA编程——GUI离我们并不遥远">VESA编程——GUI离我们并不遥远</a> (14)<br /><small>下载:Vesa Demo
下载:Vesa Source
自从学习操作系统开发以来，所接触到的操作系统开发资料都是关于文本模式的。然而黑色的命令行始终没有色彩斑斓的图形界面吸引眼球，所以查阅了很多资...</small></li><li>May 4, 2010 -- <a href="http://matrix7.me/2010/05/%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94%e5%8e%86%e5%8f%b2%e4%b8%8e%e5%9f%ba%e6%9c%ac%e7%90%86%e8%ae%ba/" title="【翻译】操作系统开发系列——历史与基本理论">【翻译】操作系统开发系列——历史与基本理论</a> (12)<br /><small>操作系统开发系列——历史与基本理论
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎来到奇妙而又令人疯狂的操作系统世界！

在前一...</small></li><li>July 9, 2010 -- <a href="http://matrix7.me/2010/07/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94bootloaders/" title="【翻译】操作系统开发系列——Bootloaders">【翻译】操作系统开发系列——Bootloaders</a> (9)<br /><small>操作系统开发系列——Bootloaders
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎光临！本章教程相信您已期待很久。本章我们将...</small></li><li>March 28, 2010 -- <a href="http://matrix7.me/about/" title="About">About</a> (9)<br /><small>声明
本站为个人站点，未注明出处的文章均为原创，转载请注明出处，如果您觉得本站有侵犯您权利/权益的地方，请第一时间通知我，我会在收到通知的第一时间撤掉涉嫌侵权的内容。
关于我
本科毕业于华中科技...</small></li></ul>]]></content:encoded>
			<wfw:commentRss>http://matrix7.me/2011/03/%e5%9b%be%e8%af%b4%e6%88%98%e5%9b%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2011-03-13阳台山游记</title>
		<link>http://matrix7.me/2011/03/2011-03-13%e9%98%b3%e5%8f%b0%e5%b1%b1%e6%b8%b8%e8%ae%b0/</link>
		<comments>http://matrix7.me/2011/03/2011-03-13%e9%98%b3%e5%8f%b0%e5%b1%b1%e6%b8%b8%e8%ae%b0/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 04:11:58 +0000</pubDate>
		<dc:creator>Matrix7</dc:creator>
				<category><![CDATA[旅行生活]]></category>
		<category><![CDATA[大觉寺]]></category>
		<category><![CDATA[徒步旅行]]></category>
		<category><![CDATA[阳台山]]></category>

		<guid isPermaLink="false">http://matrix7.me/?p=977</guid>
		<description><![CDATA[上面这幅图是本次游阳台山的路线图，使用Android平台上的一款软件GeoRecorder记录轨迹，全程20.62km（因为软件是每隔一段时间采样一个gps数据，然后通过所有数据相邻两点之间距离和算出总距离，但是由于山路崎岖，采样周期大，再考虑到海拔的因素，所以我估计全程应该有30km），初始海拔54m，旅行所达最高点阳台山主峰峰顶海拔1260m。 首先申明我不是去做科学考察，我是去游玩，游玩也是可以专业点的。这次旅行的本来目的是想以参观千年古刹大觉寺为主，登阳台山为辅的，谁知道丫的山那么大…原计划先登山，登山归来参观大觉寺，奈何，下山时已近黄昏且距大觉寺几公里之遥，只好作罢，待到春暖花开时，我还会去的，去看古刹中那颗千年银杏。 早晨6点起床（上一次起这么早是在毕业典礼吧），准备完毕，6：40出发，与Boss匆匆吃完早餐，乘地铁10号线转4号线到颐和园北宫门，在北宫门看到很多登山者背着各种装备（主要是登山手杖，对讲机），与我们一起上了346路公交车，不过他们去的是凤凰岭，而我与Boss在周家巷下车，此地离大觉寺两站路。 下车后开启GPS，开启轨迹追踪，于是周家巷就是上图中绿线的起点（下面那个线头）。旅行的主要路线如下：634路周家巷车站→大觉寺→望京塔→萝芭地北尖儿→阳台山主峰→某不知名的山涧→634路西埠头车站。按照攻略上的路线，我们过了阳台山主峰之后的路线是完全错误的，不过那时候已经下午3点，也没有时间按照原计划路线来走，只好找个下山的路，谁知找了个鸟山涧，下山走了近10km，花了近4小时。 以前从来没有爬过这么大的海拔落差，宜昌城区最高峰磨基山海拔217米（貌似我还没登顶），武汉爬过木兰天池的一座山，不值一提。我上过最高的山应该是六盘山的某山峰，当年还把相机掉进了六盘山的小溪中，六盘山海拔有两千多米近三千米，但是六盘山的山脊海拔就2000多了，更何况我是坐车上的六盘山。所以这次登山感觉非常棒，在海拔一千多米的山上俯瞰北京城（其实能见度很低，看到6环就不错啦，想象一下而已）是一种多么豪迈的事儿。这次爬山有这样一种感觉，在某山峰上看着望京塔，感觉不可能爬上去，当我爬上望京塔，回望发现刚刚那地儿真tmd矮，当我爬上更高的山峰，感觉望京塔简直不值一提，当我下山时回望望京塔，那地儿我爬上去过么，不可能！ 北京的风很给力，回到寝室的时候，楼管阿姨说，今儿个风真大，我说我去爬山了，阿姨非常惊诧地看着我。山顶风的确很大，但我以为只有在山顶才这样。考虑到爬山会出汗，以及北京的艳阳，出门时我只穿了一件t-shirt和一件春装外套，结果在山顶上差点儿冻死我了，且不说1200米的海拔温度低了多少（还是得说一下，7.2摄氏度吧，高中大家都学过），就那风差点儿把我吹下山去了。不过这次听到了风吹过松林的沙沙声，以及风呼啸而过的隆隆声。以前只在语文课本上听说过松林的沙沙声，从来无法想象，这次算是亲耳听到，不虚此行。 攻略上说山上有可能看到狐狸，由于这个时节春未暖花未开，小动物们还在冬眠吧（我不知道狐狸是否冬眠），山上真的没看到啥动物，除了鸟。不过来的路上和回去的路上看到了各种狗，其中包括一只藏獒，不过我还是最喜欢哈士奇。 站在山上眺望远方的山脊和城市是一种非常美妙的感觉。山脊的美让我感叹于大自然的鬼斧神工，城市的渺小让我感佩于大自然的博大与包容。北京的山与湖北的山是截然不同的，北京的山豪迈，湖北的山灵秀；北京的山拔地而起，湖北的山傍水延绵。我开始迷上了登山的感觉，呼吸着新鲜的空气，眺望着祖国的山河（不过在北京看不到啥河），生活中所有的烦恼都可以抛之脑后，在这里你属于大自然，不会有讨厌的计算机，不用想实验室的任务，只想拥有一双翅膀，飞跃山河俯瞰大地。 另外值得一提的是，在山顶，有一个军用雷达正在执行任务，第一次看到这么大的雷达。 虽已是阳春三月，然万物尚未复苏，小鸭子还未下河泅水，狗熊尚未出洞撒欢，漫山遍野仍看不到些许青翠的绿色。待到春暖花开时节，我定会再登阳台山！ 【阳台山大觉寺攻略】 【阳台山麓风景照】 作者：迷途羔羊 &#124; 本文链接：2011-03-13阳台山游记 Matr7x版权所有，转载本站文章请注明，转载自 迷途羔羊。 最多留言日志December 20, 2010 -- EM算法（四）——混合高斯模型（GMM）中的EM算法 (34)下载：EM算法的Matlab实现 在上一篇文章中，我们推导出一个式子，只要使这个式子最大化，不停地迭代，即可估计出混合模型的参数。今天这篇文章会推导混合高斯模型中EM算法的迭代公式，利用该公式反...April 1, 2010 -- 【翻译】操作系统开发系列——前言 (31)操作系统开发系列——前言 Translated By Matrix7 本系列旨在展示和教授如何从零开始开发一个操作系统。 引言 欢迎大家来到这里！ 这是一系列关于计算机和操作系统的章节、...June 30, 2010 -- 六月的最后一天，追忆我离逝的大学 (15)六月的武汉，终于热了起来。毕业的季节，校园里弥漫着淡淡的忧伤，梧桐流干了眼泪，似乎不舍我们的离去，青年园依旧郁郁葱葱，庇荫着莘莘学子，即将建成的西一食堂，渐渐有了西二的影子，但我们却来不及在里面吃上一...March 28, 2010 -- 新的开始&#8230; (14)今天我计划了大半年的博客终于开张了，我会记住这一天2010年3月28日。 不知是太懒还是为什么，一直想拥有一个个人网站，却迟迟没有动作，如果不是今天看到朱俊同学的新博客，可能今天我的博客还不能开...April 26, 2010 -- VESA编程——GUI离我们并不遥远 (14)下载:Vesa Demo 下载:Vesa Source [...]]]></description>
			<content:encoded><![CDATA[[SinglePic not found]
<p>上面这幅图是本次游阳台山的路线图，使用Android平台上的一款软件GeoRecorder记录轨迹，全程20.62km（因为软件是每隔一段时间采样一个gps数据，然后通过所有数据相邻两点之间距离和算出总距离，但是由于山路崎岖，采样周期大，再考虑到海拔的因素，所以我估计全程应该有30km），初始海拔54m，旅行所达最高点阳台山主峰峰顶海拔1260m。</p>
<p><span id="more-977"></span></p>
<p>首先申明我不是去做科学考察，我是去游玩，游玩也是可以专业点的。这次旅行的本来目的是想以参观千年古刹大觉寺为主，登阳台山为辅的，谁知道丫的山那么大…原计划先登山，登山归来参观大觉寺，奈何，下山时已近黄昏且距大觉寺几公里之遥，只好作罢，待到春暖花开时，我还会去的，去看古刹中那颗千年银杏。</p>
<p>早晨6点起床（上一次起这么早是在毕业典礼吧），准备完毕，6：40出发，与Boss匆匆吃完早餐，乘地铁10号线转4号线到颐和园北宫门，在北宫门看到很多登山者背着各种装备（主要是登山手杖，对讲机），与我们一起上了346路公交车，不过他们去的是凤凰岭，而我与Boss在周家巷下车，此地离大觉寺两站路。</p>
<p>下车后开启GPS，开启轨迹追踪，于是周家巷就是上图中绿线的起点（下面那个线头）。旅行的主要路线如下：634路周家巷车站→大觉寺→望京塔→萝芭地北尖儿→阳台山主峰→某不知名的山涧→634路西埠头车站。按照攻略上的路线，我们过了阳台山主峰之后的路线是完全错误的，不过那时候已经下午3点，也没有时间按照原计划路线来走，只好找个下山的路，谁知找了个鸟山涧，下山走了近10km，花了近4小时。</p>
<p>以前从来没有爬过这么大的海拔落差，宜昌城区最高峰磨基山海拔217米（貌似我还没登顶），武汉爬过木兰天池的一座山，不值一提。我上过最高的山应该是六盘山的某山峰，当年还把相机掉进了六盘山的小溪中，六盘山海拔有两千多米近三千米，但是六盘山的山脊海拔就2000多了，更何况我是坐车上的六盘山。所以这次登山感觉非常棒，在海拔一千多米的山上俯瞰北京城（其实能见度很低，看到6环就不错啦，想象一下而已）是一种多么豪迈的事儿。这次爬山有这样一种感觉，在某山峰上看着望京塔，感觉不可能爬上去，当我爬上望京塔，回望发现刚刚那地儿真tmd矮，当我爬上更高的山峰，感觉望京塔简直不值一提，当我下山时回望望京塔，那地儿我爬上去过么，不可能！</p>
<p>北京的风很给力，回到寝室的时候，楼管阿姨说，今儿个风真大，我说我去爬山了，阿姨非常惊诧地看着我。山顶风的确很大，但我以为只有在山顶才这样。考虑到爬山会出汗，以及北京的艳阳，出门时我只穿了一件t-shirt和一件春装外套，结果在山顶上差点儿冻死我了，且不说1200米的海拔温度低了多少（还是得说一下，7.2摄氏度吧，高中大家都学过），就那风差点儿把我吹下山去了。不过这次听到了风吹过松林的沙沙声，以及风呼啸而过的隆隆声。以前只在语文课本上听说过松林的沙沙声，从来无法想象，这次算是亲耳听到，不虚此行。</p>
<p>攻略上说山上有可能看到狐狸，由于这个时节春未暖花未开，小动物们还在冬眠吧（我不知道狐狸是否冬眠），山上真的没看到啥动物，除了鸟。不过来的路上和回去的路上看到了各种狗，其中包括一只藏獒，不过我还是最喜欢哈士奇。</p>
<p>站在山上眺望远方的山脊和城市是一种非常美妙的感觉。山脊的美让我感叹于大自然的鬼斧神工，城市的渺小让我感佩于大自然的博大与包容。北京的山与湖北的山是截然不同的，北京的山豪迈，湖北的山灵秀；北京的山拔地而起，湖北的山傍水延绵。我开始迷上了登山的感觉，呼吸着新鲜的空气，眺望着祖国的山河（不过在北京看不到啥河），生活中所有的烦恼都可以抛之脑后，在这里你属于大自然，不会有讨厌的计算机，不用想实验室的任务，只想拥有一双翅膀，飞跃山河俯瞰大地。</p>
<p>另外值得一提的是，在山顶，有一个军用雷达正在执行任务，第一次看到这么大的雷达。</p>
<p>虽已是阳春三月，然万物尚未复苏，小鸭子还未下河泅水，狗熊尚未出洞撒欢，漫山遍野仍看不到些许青翠的绿色。待到春暖花开时节，我定会再登阳台山！</p>
<p>【<a href="http://www.cppblog.com/Files/Matrix7/%E9%98%B3%E5%8F%B0%E5%B1%B1%E5%A4%A7%E8%A7%89%E5%AF%BA%E6%94%BB%E7%95%A5.zip" target="_blank">阳台山大觉寺攻略</a>】</p>
<p>【<a href="http://matrix7.me/album/?album=1&amp;gallery=11" target="_blank">阳台山麓风景照</a>】
<div style="margin-top: 15px;">
<p><strong>作者：</strong><a href="http://matrix7.me/">迷途羔羊</a> | <strong>本文链接：</strong><a href="http://matrix7.me/2011/03/2011-03-13%e9%98%b3%e5%8f%b0%e5%b1%b1%e6%b8%b8%e8%ae%b0/">2011-03-13阳台山游记</a></p>
</div>
<div style="margin-left: 26px; margin-bottom: 15px;"><strong>Matr7x版权所有，转载本站文章请注明，转载自</strong> <a href="http://matrix7.me/">迷途羔羊</a>。</strong></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fmatrix7.me%2F2011%2F03%2F2011-03-13%25e9%2598%25b3%25e5%258f%25b0%25e5%25b1%25b1%25e6%25b8%25b8%25e8%25ae%25b0%2F&title=2011-03-13%E9%98%B3%E5%8F%B0%E5%B1%B1%E6%B8%B8%E8%AE%B0" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><h2  class="related_post_title">最多留言日志</h2><ul class="related_post"><li>December 20, 2010 -- <a href="http://matrix7.me/2010/12/em%e7%ae%97%e6%b3%95%ef%bc%88%e5%9b%9b%ef%bc%89%e2%80%94%e2%80%94%e6%b7%b7%e5%90%88%e9%ab%98%e6%96%af%e6%a8%a1%e5%9e%8b%ef%bc%88gmm%ef%bc%89%e4%b8%ad%e7%9a%84em%e7%ae%97%e6%b3%95/" title="EM算法（四）——混合高斯模型（GMM）中的EM算法">EM算法（四）——混合高斯模型（GMM）中的EM算法</a> (34)<br /><small>下载：EM算法的Matlab实现

在上一篇文章中，我们推导出一个式子，只要使这个式子最大化，不停地迭代，即可估计出混合模型的参数。今天这篇文章会推导混合高斯模型中EM算法的迭代公式，利用该公式反...</small></li><li>April 1, 2010 -- <a href="http://matrix7.me/2010/04/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94%e5%89%8d%e8%a8%80/" title="【翻译】操作系统开发系列——前言">【翻译】操作系统开发系列——前言</a> (31)<br /><small>操作系统开发系列——前言
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
引言
欢迎大家来到这里！

这是一系列关于计算机和操作系统的章节、...</small></li><li>June 30, 2010 -- <a href="http://matrix7.me/2010/06/%e5%85%ad%e6%9c%88%e7%9a%84%e6%9c%80%e5%90%8e%e4%b8%80%e5%a4%a9%ef%bc%8c%e8%bf%bd%e5%bf%86%e6%88%91%e7%a6%bb%e9%80%9d%e7%9a%84%e5%a4%a7%e5%ad%a6/" title="六月的最后一天，追忆我离逝的大学">六月的最后一天，追忆我离逝的大学</a> (15)<br /><small>六月的武汉，终于热了起来。毕业的季节，校园里弥漫着淡淡的忧伤，梧桐流干了眼泪，似乎不舍我们的离去，青年园依旧郁郁葱葱，庇荫着莘莘学子，即将建成的西一食堂，渐渐有了西二的影子，但我们却来不及在里面吃上一...</small></li><li>March 28, 2010 -- <a href="http://matrix7.me/2010/03/%e6%96%b0%e7%9a%84%e5%bc%80%e5%a7%8b/" title="新的开始&#8230;">新的开始&#8230;</a> (14)<br /><small>今天我计划了大半年的博客终于开张了，我会记住这一天2010年3月28日。

不知是太懒还是为什么，一直想拥有一个个人网站，却迟迟没有动作，如果不是今天看到朱俊同学的新博客，可能今天我的博客还不能开...</small></li><li>April 26, 2010 -- <a href="http://matrix7.me/2010/04/vesa%e7%bc%96%e7%a8%8b%e2%80%94%e2%80%94gui%e7%a6%bb%e6%88%91%e4%bb%ac%e5%b9%b6%e4%b8%8d%e9%81%a5%e8%bf%9c/" title="VESA编程——GUI离我们并不遥远">VESA编程——GUI离我们并不遥远</a> (14)<br /><small>下载:Vesa Demo
下载:Vesa Source
自从学习操作系统开发以来，所接触到的操作系统开发资料都是关于文本模式的。然而黑色的命令行始终没有色彩斑斓的图形界面吸引眼球，所以查阅了很多资...</small></li><li>May 4, 2010 -- <a href="http://matrix7.me/2010/05/%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94%e5%8e%86%e5%8f%b2%e4%b8%8e%e5%9f%ba%e6%9c%ac%e7%90%86%e8%ae%ba/" title="【翻译】操作系统开发系列——历史与基本理论">【翻译】操作系统开发系列——历史与基本理论</a> (12)<br /><small>操作系统开发系列——历史与基本理论
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎来到奇妙而又令人疯狂的操作系统世界！

在前一...</small></li><li>July 9, 2010 -- <a href="http://matrix7.me/2010/07/%e3%80%90%e7%bf%bb%e8%af%91%e3%80%91%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%80%e5%8f%91%e7%b3%bb%e5%88%97%e2%80%94%e2%80%94bootloaders/" title="【翻译】操作系统开发系列——Bootloaders">【翻译】操作系统开发系列——Bootloaders</a> (9)<br /><small>操作系统开发系列——Bootloaders
Translated By Matrix7
本系列旨在展示和教授如何从零开始开发一个操作系统。
简介
欢迎光临！本章教程相信您已期待很久。本章我们将...</small></li><li>March 28, 2010 -- <a href="http://matrix7.me/about/" title="About">About</a> (9)<br /><small>声明
本站为个人站点，未注明出处的文章均为原创，转载请注明出处，如果您觉得本站有侵犯您权利/权益的地方，请第一时间通知我，我会在收到通知的第一时间撤掉涉嫌侵权的内容。
关于我
本科毕业于华中科技...</small></li></ul>]]></content:encoded>
			<wfw:commentRss>http://matrix7.me/2011/03/2011-03-13%e9%98%b3%e5%8f%b0%e5%b1%b1%e6%b8%b8%e8%ae%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alpha-beta剪枝叶算法</title>
		<link>http://matrix7.me/2011/03/alpha-beta-pruning/</link>
		<comments>http://matrix7.me/2011/03/alpha-beta-pruning/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 12:03:13 +0000</pubDate>
		<dc:creator>Matrix7</dc:creator>
				<category><![CDATA[博弈算法]]></category>
		<category><![CDATA[Alpha-beta剪枝叶]]></category>
		<category><![CDATA[人工智能]]></category>
		<category><![CDATA[博弈]]></category>
		<category><![CDATA[极小化极大算法]]></category>
		<category><![CDATA[负极大值算法]]></category>

		<guid isPermaLink="false">http://matrix7.me/?p=921</guid>
		<description><![CDATA[Alpha-beta剪枝叶算法的基本原理 要理解什么是alpha-beta剪枝叶算法，就必须把alpha剪枝叶和beta剪枝叶分开来看，分别理解什么是alpha剪枝和beta剪枝。首先请看下面一张图（点击可以放大）： 注意：指出上图中的一个错误，上图中左边彩色部分标明了beta pruned的应该是alpha剪枝，右边彩色部分标明了alpha pruned的应该是beta剪枝。 alpha剪枝 上图中的左边标明了beta pruned的彩色部分演示的是alpha剪枝。图中的绿色节点处于第3层（层数从0开始），其值为+1，即为alpha的值，第3层选最大的节点。第3层的粉色节点的子节点中即第4层的粉色节点中有一个值是-1，第4层选最小的节点，那么第3层粉色节点的值就小于等于-1，而+1即beta的值大于-1，第3层的上一层即第2层无论如何也不会选择第3层的粉色节点，所以第3层粉色节点及其子节点就可以被剪掉，不用继续向下搜索了。这就是alpha剪枝。 beta剪枝 上图中右边标明了alpha pruned的彩色部分演示的是beta剪枝。图中绿色的节点处于第2层（层数从0开始），由上一篇文章我们知道，偶数层的上一层会在偶数层选择最小的节点。而在在第2层的粉色节点的子节点即第3层的粉色节点中的第一个节点值为+1，而第3层是选择最大的节点，那么第2层的粉色节点的值会大于等于+1，而第2层的绿色节点的值为-1是小于+1的，第2层选最小节点，也就是说无论如何都不会选择第2层的粉色节点，那么第2层的粉色节点及其子节点就不用再搜索了，因为第1层不会选择它。这就是beta剪枝，第2层的-1就是beta的值。 小结 Alpha-beta剪枝叶算法，顾名思义就是将冗余的枝叶给剪掉，即不搜索它们，上图中粉红色的部分就是被剪掉的枝叶。剪掉冗余的枝叶后可以使搜索的效率大大增加，而且搜索深度越深，被剪掉的枝叶越多。alpha剪枝发生在偶数层，beta剪枝发生在奇数层，但两种剪枝基于同一种原理，就是被剪掉的枝叶的值不可能被上层选取，是冗余的。 极小化极大值算法中的alpha-beta剪枝叶 下图是Minimax算法中的Alpha-beta剪枝叶算法的演示动画（点击观看）： Minimax中Alpha-beta剪枝叶算法的伪代码如下： 从上面的代码中可以看到如果Player是MaxPlayer，那么就要与上一层传进来的beta进行比较，如果beta小于等于alpha，则进行beta剪枝。如果Player是MinPlayer，那么就要与上一层传进来的alpha进行比较，如果beta小于等于alpha，则进行alpha剪枝。 以第一副图为例，左边的alpha剪枝部分，绿色的+1就是上一层传进来的alpha值，第4层的粉色-1就是当前的beta值，因beta小于alpha，发生alpha剪枝。同理，读者们可以对照伪代码分析右边的beta剪枝的过程。 负极大值算法中的alpha-beta剪枝叶 下图是Negamax算法中的Alpha-beta剪枝叶算法的演示动画（点击查看大图）： Negamax中Alpha-beta剪枝叶算法的伪代码如下： 因为在Negamax算法中总是取极大值，所以Negamax中只有beta剪枝。因Negamax将下一层的值取了负号，所以基于公式，则迭代调用negamax函数的时候须将作为，作为将参数传进去。 Reference http://www.clear.rice.edu/comp212/06-spring/lectures/35/ http://en.wikipedia.org/wiki/Alpha_beta_pruning http://en.wikipedia.org/wiki/Negamax 作者：迷途羔羊 &#124; 本文链接：Alpha-beta剪枝叶算法 Matr7x版权所有，转载本站文章请注明，转载自 迷途羔羊。 相关文章March 1, 2011 -- 极小化极大算法与负极大值算法 (4)极小化极大算法（Minimax） Minimax算法又名极小化极大算法，是一种找出失败的最大可能性中的最小值的算法。Minimax算法常用于棋类等由两方较量的游戏和程序，这类程序由两个游戏者轮流，每...]]></description>
			<content:encoded><![CDATA[<h1><span style="color: #008000;">Alpha-beta剪枝叶算法的基本原理</span></h1>
<p>要理解什么是alpha-beta剪枝叶算法，就必须把alpha剪枝叶和beta剪枝叶分开来看，分别理解什么是alpha剪枝和beta剪枝。首先请看下面一张图（点击可以放大）：</p>
<p>
<a href="http://matrix7.me/wp-content/gallery/algorithms/alpha-beta-pruning.gif" title="" rel="lightbox[singlepic56]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/56__x_alpha-beta-pruning.gif" alt="alpha-beta pruning" title="alpha-beta pruning" />
</a>
<br />
<span id="more-921"></span></p>
<p><strong><span style="color: #ff0000;">注意：指出上图中的一个错误，上图中左边彩色部分标明了beta pruned的应该是alpha剪枝，右边彩色部分标明了alpha pruned的应该是beta剪枝。</span></strong></p>
<h2><span style="color: #0000ff;">alpha剪枝</span></h2>
<p>上图中的左边标明了beta pruned的彩色部分演示的是alpha剪枝。图中的绿色节点处于第3层（层数从0开始），其值为+1，即为alpha的值，第3层选最大的节点。第3层的粉色节点的子节点中即第4层的粉色节点中有一个值是-1，第4层选最小的节点，那么第3层粉色节点的值就小于等于-1，而+1即beta的值大于-1，第3层的上一层即第2层无论如何也不会选择第3层的粉色节点，所以第3层粉色节点及其子节点就可以被剪掉，不用继续向下搜索了。这就是alpha剪枝。</p>
<h2><span style="color: #0000ff;">beta剪枝</span></h2>
<p>上图中右边标明了alpha pruned的彩色部分演示的是beta剪枝。图中绿色的节点处于第2层（层数从0开始），由上一篇文章我们知道，偶数层的上一层会在偶数层选择最小的节点。而在在第2层的粉色节点的子节点即第3层的粉色节点中的第一个节点值为+1，而第3层是选择最大的节点，那么第2层的粉色节点的值会大于等于+1，而第2层的绿色节点的值为-1是小于+1的，第2层选最小节点，也就是说无论如何都不会选择第2层的粉色节点，那么第2层的粉色节点及其子节点就不用再搜索了，因为第1层不会选择它。这就是beta剪枝，第2层的-1就是beta的值。</p>
<h2><span style="color: #0000ff;">小结</span></h2>
<p>Alpha-beta剪枝叶算法，顾名思义就是将冗余的枝叶给剪掉，即不搜索它们，上图中粉红色的部分就是被剪掉的枝叶。剪掉冗余的枝叶后可以使搜索的效率大大增加，而且搜索深度越深，被剪掉的枝叶越多。alpha剪枝发生在偶数层，beta剪枝发生在奇数层，但两种剪枝基于同一种原理，就是被剪掉的枝叶的值不可能被上层选取，是冗余的。</p>
<h1><span style="color: #008000;">极小化极大值算法中的alpha-beta剪枝叶</span></h1>
<p>下图是<a title="极小化极大算法与负极大值算法" href="http://matrix7.me/2011/03/%e6%9e%81%e5%b0%8f%e5%8c%96%e6%9e%81%e5%a4%a7%e7%ae%97%e6%b3%95%e4%b8%8e%e8%b4%9f%e6%9e%81%e5%a4%a7%e5%80%bc%e7%ae%97%e6%b3%95/" target="_blank">Minimax算法</a>中的Alpha-beta剪枝叶算法的演示动画（点击观看）：</p>

<a href="http://matrix7.me/wp-content/gallery/algorithms/minmaxab.gif" title="" rel="lightbox[singlepic57]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/57__x_minmaxab.gif" alt="Minimax with alpha-beta pruning" title="Minimax with alpha-beta pruning" />
</a>

<p>Minimax中Alpha-beta剪枝叶算法的伪代码如下：</p>
<pre class="brush: cpp; title: ; notranslate">
function alphabeta(node, depth, α, β, Player)
    if  depth = 0 or node is a terminal node
        return the heuristic value of node
    if  Player = MaxPlayer
        for each child of node
            α := max(α, alphabeta(child, depth-1, α, β, not(Player) ))
            if β≤α
                break                             (* Beta cut-off *)
        return α
    else
        for each child of node
            β := min(β, alphabeta(child, depth-1, α, β, not(Player) ))
            if β≤α
                break                             (* Alpha cut-off *)
        return β
(* Initial call *)
alphabeta(origin, depth, -infinity, +infinity, MaxPlayer)
</pre>
<p>从上面的代码中可以看到如果Player是MaxPlayer，那么就要与上一层传进来的beta进行比较，如果beta小于等于alpha，则进行beta剪枝。如果Player是MinPlayer，那么就要与上一层传进来的alpha进行比较，如果beta小于等于alpha，则进行alpha剪枝。</p>
<p>以第一副图为例，左边的alpha剪枝部分，绿色的+1就是上一层传进来的alpha值，第4层的粉色-1就是当前的beta值，因beta小于alpha，发生alpha剪枝。同理，读者们可以对照伪代码分析右边的beta剪枝的过程。</p>
<h1><span style="color: #008000;">负极大值算法中的alpha-beta剪枝叶<br />
</span></h1>
<p>下图是<a title="极小化极大算法与负极大值算法" href="http://matrix7.me/2011/03/%e6%9e%81%e5%b0%8f%e5%8c%96%e6%9e%81%e5%a4%a7%e7%ae%97%e6%b3%95%e4%b8%8e%e8%b4%9f%e6%9e%81%e5%a4%a7%e5%80%bc%e7%ae%97%e6%b3%95/" target="_blank">Negamax算法</a>中的Alpha-beta剪枝叶算法的演示动画（点击查看大图）：</p>
<p><a rel="attachment wp-att-927" href="http://matrix7.me/2011/03/alpha-beta-pruning/negamax_alphabeta/" target="_blank"><img class="aligncenter size-full wp-image-927" title="Negamax with alpha-beta pruning" src="http://matrix7.me/wp-content/uploads/2011/03/Negamax_AlphaBeta.gif" alt="" width="800" /></a></p>
<p>Negamax中Alpha-beta剪枝叶算法的伪代码如下：</p>
<pre class="brush: cpp; title: ; notranslate">
function negamax(node, depth, α, β, color)
    if node is a terminal node or depth = 0
        return color * the heuristic value of node
    else
        foreach child of node
            α := max(α, -negamax(child, depth-1, -β, -α, -color))
            {the following if statement constitutes alpha-beta pruning}
            if α≥β
                break
        return α
</pre>
<p>因为在Negamax算法中总是取极大值，所以Negamax中只有beta剪枝。因Negamax将下一层的值取了负号，所以基于公式<span class='MathJax_Preview'><img src='http://matrix7.me/wp-content/plugins/latex/cache/tex_d7e4146954aab100139da03b946c0bbf.gif' style='vertical-align: middle; border: none; ' class='tex' alt="\alpha  < value < \beta  \Rightarrow  - \beta  <  - value <  - \alpha " /></span><script type='math/tex'>\alpha  < value < \beta  \Rightarrow  - \beta  <  - value <  - \alpha </script>，则迭代调用negamax函数的时候须将<span class='MathJax_Preview'><img src='http://matrix7.me/wp-content/plugins/latex/cache/tex_3c2d85705ee2d88791be865b34c975a1.gif' style='vertical-align: middle; border: none; ' class='tex' alt="- \beta" /></span><script type='math/tex'>- \beta</script>作为<span class='MathJax_Preview'><img src='http://matrix7.me/wp-content/plugins/latex/cache/tex_7b7f9dbfea05c83784f8b85149852f08.gif' style='vertical-align: middle; border: none; padding-bottom:2px;' class='tex' alt="\alpha" /></span><script type='math/tex'>\alpha</script>，<span class='MathJax_Preview'><img src='http://matrix7.me/wp-content/plugins/latex/cache/tex_4b7e8099c15bf3fe069d741c2e37fdf9.gif' style='vertical-align: middle; border: none; padding-bottom:2px;' class='tex' alt="- \alpha" /></span><script type='math/tex'>- \alpha</script>作为<span class='MathJax_Preview'><img src='http://matrix7.me/wp-content/plugins/latex/cache/tex_b0603860fcffe94e5b8eec59ed813421.gif' style='vertical-align: middle; border: none; ' class='tex' alt="\beta" /></span><script type='math/tex'>\beta</script>将参数传进去。</p>
<h1><span style="color: #008000;">Reference</span></h1>
<ol>
<li><a href="http://www.clear.rice.edu/comp212/06-spring/lectures/35/" target="_blank">http://www.clear.rice.edu/comp212/06-spring/lectures/35/</a></li>
<li><a href="http://en.wikipedia.org/wiki/Alpha_beta_pruning" target="_blank">http://en.wikipedia.org/wiki/Alpha_beta_pruning</a></li>
<li><a href="http://en.wikipedia.org/wiki/Negamax" target="_blank">http://en.wikipedia.org/wiki/Negamax</a></li>
</ol>
<div style="margin-top: 15px;">
<p><strong>作者：</strong><a href="http://matrix7.me/">迷途羔羊</a> | <strong>本文链接：</strong><a href="http://matrix7.me/2011/03/alpha-beta-pruning/">Alpha-beta剪枝叶算法</a></p>
</div>
<div style="margin-left: 26px; margin-bottom: 15px;"><strong>Matr7x版权所有，转载本站文章请注明，转载自</strong> <a href="http://matrix7.me/">迷途羔羊</a>。</strong></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fmatrix7.me%2F2011%2F03%2Falpha-beta-pruning%2F&title=Alpha-beta%E5%89%AA%E6%9E%9D%E5%8F%B6%E7%AE%97%E6%B3%95" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>March 1, 2011 -- <a href="http://matrix7.me/2011/03/%e6%9e%81%e5%b0%8f%e5%8c%96%e6%9e%81%e5%a4%a7%e7%ae%97%e6%b3%95%e4%b8%8e%e8%b4%9f%e6%9e%81%e5%a4%a7%e5%80%bc%e7%ae%97%e6%b3%95/" title="极小化极大算法与负极大值算法">极小化极大算法与负极大值算法</a> (4)<br /><small>极小化极大算法（Minimax）
Minimax算法又名极小化极大算法，是一种找出失败的最大可能性中的最小值的算法。Minimax算法常用于棋类等由两方较量的游戏和程序，这类程序由两个游戏者轮流，每...</small></li></ul>]]></content:encoded>
			<wfw:commentRss>http://matrix7.me/2011/03/alpha-beta-pruning/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>极小化极大算法与负极大值算法</title>
		<link>http://matrix7.me/2011/03/%e6%9e%81%e5%b0%8f%e5%8c%96%e6%9e%81%e5%a4%a7%e7%ae%97%e6%b3%95%e4%b8%8e%e8%b4%9f%e6%9e%81%e5%a4%a7%e5%80%bc%e7%ae%97%e6%b3%95/</link>
		<comments>http://matrix7.me/2011/03/%e6%9e%81%e5%b0%8f%e5%8c%96%e6%9e%81%e5%a4%a7%e7%ae%97%e6%b3%95%e4%b8%8e%e8%b4%9f%e6%9e%81%e5%a4%a7%e5%80%bc%e7%ae%97%e6%b3%95/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 04:07:04 +0000</pubDate>
		<dc:creator>Matrix7</dc:creator>
				<category><![CDATA[博弈算法]]></category>
		<category><![CDATA[Minimax]]></category>
		<category><![CDATA[Negamax]]></category>
		<category><![CDATA[Tic-tac-toe]]></category>
		<category><![CDATA[人工智能]]></category>
		<category><![CDATA[博弈]]></category>
		<category><![CDATA[极小化极大算法]]></category>
		<category><![CDATA[深度优先搜索]]></category>
		<category><![CDATA[负极大值算法]]></category>

		<guid isPermaLink="false">http://matrix7.me/?p=892</guid>
		<description><![CDATA[极小化极大算法（Minimax） Minimax算法又名极小化极大算法，是一种找出失败的最大可能性中的最小值的算法。Minimax算法常用于棋类等由两方较量的游戏和程序，这类程序由两个游戏者轮流，每次执行一个步骤。我们众所周知的五子棋、象棋等都属于这类程序，所以说Minimax算法是基于搜索的博弈算法的基础。该算法是一种零总和算法，即一方要在可选的选项中选择将其优势最大化的选择，而另一方则选择令对手优势最小化的方法。 我们知道，常用的博弈算法都是基于搜索的博弈算法，所有可能的下棋步骤构成一个树的结构，以Tic-tac-toe（中文称为井字棋，即两人轮流在井字棋盘的方格内划×或〇，谁先将划过的三个方格成一直线或对角线为胜）游戏为例，下面一幅图表示了Tic-tac-toe游戏的前两步所有可能的步骤。 上图中第0层为空棋盘，第1层是×方所有可能的步骤，第2层是〇方所有可能的步骤。在第1层，×方需要选择使其优势最大的选择，而在第2层，〇方则需要选择使×方优势最小即己方优势最大的选择。 Minimax的含义就是极小化对手的最大利益，在上图中，在第2层〇方一定会选择使自己优势最大的选择，而对于×方需要做的就是选择〇方最大选择中的极小值。 基于上面的解释，我们就可以了解Minimax算法的主要步骤，即在奇数层中选择得分最大的节点，在偶数层中选择得分最小的节点。下图是一个Minimax算法的示例： 下图是一个Minimax过程演示图（点击图片即可看到动画演示）： 从上面的演示动画中可以看出Minimax是一种深度优先搜索，其用伪代码表示如下： Tic-tac-toe游戏中的Minimax算法代码如下： minimax函数会调用maxSearch函数，maxSearch会调用minSearch搜索下一层，同样minSearch会调用maxSearch搜索下一层。 Tic-tac-toe源码下载 负极大值算法（Negamax） 负极大值算法是极小化极大算法的一个变体，其基本原理是基于下面的公式： 即在几个节点中选择得分最小的节点相当于将这些节点的得分乘以-1然后取得分最大的节点。这样Negamax算法就将每一步递归过程都统一了起来，每一次递归都选取最大值。 下图是一个Negamax过程演示图（点击图片即可看到动画演示）： 下面是Negamax算法的伪代码： 下面是我正在写的五子棋AI中的负极大值算法的实现代码： Negamax函数的意义就是选取对于当前颜色棋子的所有走法中得分最高的走法，根据这个定义在Negamax中递归调用的Negamax则是选取对立颜色的那一方的最高得分，而对当前颜色来说则必须选取对立方最低得分的走法，故递归调用的Negamax前加一个负号，然后取最大值就相当于取对立方得分的最小值。 所以说负极大值算法与极小化极大算法是统一的，只是负极大值算法的形式更加简洁优雅，消除了博弈过程中对立双方的差别。 Reference Tic-tac-toe代码来自于我的朋友：http://www.cnblogs.com/chinese-zmm/archive/2011/01/26/1945795.html http://en.wikipedia.org/wiki/Minimax http://en.wikipedia.org/wiki/Negamax 作者：迷途羔羊 &#124; 本文链接：极小化极大算法与负极大值算法 Matr7x版权所有，转载本站文章请注明，转载自 迷途羔羊。 相关文章March 2, 2011 -- Alpha-beta剪枝叶算法 (2)Alpha-beta剪枝叶算法的基本原理 要理解什么是alpha-beta剪枝叶算法，就必须把alpha剪枝叶和beta剪枝叶分开来看，分别理解什么是alpha剪枝和beta剪枝。首先请看下面一张图...]]></description>
			<content:encoded><![CDATA[<h1><span style="color: #008000;">极小化极大算法（Minimax）</span></h1>
<p>Minimax算法又名极小化极大算法，是一种找出失败的最大可能性中的最小值的算法。Minimax算法常用于棋类等由两方较量的游戏和程序，这类程序由两个游戏者轮流，每次执行一个步骤。我们众所周知的五子棋、象棋等都属于这类程序，所以说Minimax算法是基于搜索的博弈算法的基础。该算法是一种<a href="http://zh.wikipedia.org/zh/%E9%9B%B6%E5%92%8C%E5%8D%9A%E5%BC%88" target="_blank">零总和</a>算法，即一方要在可选的选项中选择将其优势最大化的选择，而另一方则选择令对手优势最小化的方法。</p>
<p>我们知道，常用的博弈算法都是基于搜索的博弈算法，所有可能的下棋步骤构成一个树的结构，以Tic-tac-toe（中文称为井字棋，即两人轮流在井字棋盘的方格内划×或〇，谁先将划过的三个方格成一直线或对角线为胜）游戏为例，下面一幅图表示了Tic-tac-toe游戏的前两步所有可能的步骤。</p>

<a href="http://matrix7.me/wp-content/gallery/algorithms/minimax-tictac.gif" title="井字棋前两部所有走法" rel="lightbox[singlepic51]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/51__x_minimax-tictac.gif" alt="minimax-tictac" title="minimax-tictac" />
</a>

<p><span id="more-892"></span></p>
<p>上图中第0层为空棋盘，第1层是×方所有可能的步骤，第2层是〇方所有可能的步骤。在第1层，×方需要选择使其优势最大的选择，而在第2层，〇方则需要选择使×方优势最小即己方优势最大的选择。</p>
<p>Minimax的含义就是极小化对手的最大利益，在上图中，在第2层〇方一定会选择使自己优势最大的选择，而对于×方需要做的就是选择〇方最大选择中的极小值。</p>
<p>基于上面的解释，我们就可以了解Minimax算法的主要步骤，即在奇数层中选择得分最大的节点，在偶数层中选择得分最小的节点。下图是一个Minimax算法的示例：</p>

<a href="http://matrix7.me/wp-content/gallery/algorithms/minimax.png" title="极小化极大算法图例" rel="lightbox[singlepic53]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/53__x_minimax.png" alt="极小化极大算法图例" title="极小化极大算法图例" />
</a>

<p>下图是一个Minimax过程演示图（点击图片即可看到动画演示）：</p>

<a href="http://matrix7.me/wp-content/gallery/algorithms/plminmax.gif" title="" rel="lightbox[singlepic54]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/54__x_plminmax.gif" alt="Minimax算法演示" title="Minimax算法演示" />
</a>

<p>从上面的演示动画中可以看出Minimax是一种深度优先搜索，其用伪代码表示如下：</p>
<pre class="brush: cpp; title: ; notranslate">
function minimax(node, depth)
if node is a terminal node or depth = 0
    return the heuristic value of node
if the adversary is to play at node
    let α := +∞
    foreach child of node
        α := min(α, minimax(child, depth-1))
else {we are to play at node}
    let α := -∞
    foreach child of node
        α := max(α, minimax(child, depth-1))
return α
</pre>
<p>Tic-tac-toe游戏中的Minimax算法代码如下：</p>
<pre class="brush: cpp; title: ; notranslate">
int minSearch( char _board[9] )
{
    short int i;
    int positionValue = gameState(_board);
    if( positionValue == DRAW ) return 0;
    if( positionValue != INPROGRESS ) return positionValue;
    int bestValue = +INFINITY;
    for( i = 0; i &lt; 9; i++ )
    {
        if( _board[i] == empty )
        {
            _board[i] = o;
            int value = maxSearch( _board );
            if( value &lt; bestValue )
                bestValue = value;
            _board[i] = empty;
        }
    }
    return bestValue;
}
int maxSearch( char _board[9] )
{
    short int i;
    int positionValue = gameState(_board);
    if( positionValue == DRAW ) return 0;
    if( positionValue != INPROGRESS ) return positionValue;
    int bestValue = -INFINITY;
    for( i = 0; i &lt; 9; i++ )
    {
        if( _board[i] == empty )
        {
            _board[i] = x;
            int value = minSearch( _board );
            if( value &gt; bestValue )
                bestValue = value;
            _board[i] = empty;
        }
    }
    return bestValue;
}

int minimax( char _board[9] )
{
    short int i;
    int bestValue = +INFINITY, index = 0;
    char bestMoves[9] = {0};
    for( i = 0; i &lt; 9; i++ )
    {
        if( _board[i] == empty )
        {
            _board[i] = o;
            int value = maxSearch( _board );
            if( value &lt; bestValue )
            {
                bestValue = value;
                index = 0;
                bestMoves[index] = i;
            }
            else if( value == bestValue )
            {
                bestMoves[index++] = i;
            }
            _board[i] = empty;
        }
    }
    if( index &gt; 0 )
        index = rand() % index;
    return bestMoves[index];
}
</pre>
<p>minimax函数会调用maxSearch函数，maxSearch会调用minSearch搜索下一层，同样minSearch会调用maxSearch搜索下一层。</p>
<p><a href="http://www.cppblog.com/Files/Matrix7/Tic-Tac-Toe.7z" target="_blank">Tic-tac-toe源码下载</a></p>
<h1><span style="color: #008000;">负极大值算法（Negamax）</span></h1>
<p>负极大值算法是极小化极大算法的一个变体，其基本原理是基于下面的公式：</p>
<p style="text-align: center;"><span class='MathJax_Preview'><img src='http://matrix7.me/wp-content/plugins/latex/cache/tex_0dcfecfaea3e557be83566803d42d6c5.gif' style='vertical-align: middle; border: none; ' class='tex' alt="\max (a,b) =  - \min ( - a, - b)" /></span><script type='math/tex'>\max (a,b) =  - \min ( - a, - b)</script></p>
<p>即在几个节点中选择得分最小的节点相当于将这些节点的得分乘以-1然后取得分最大的节点。这样Negamax算法就将每一步递归过程都统一了起来，每一次递归都选取最大值。</p>
<p>下图是一个Negamax过程演示图（点击图片即可看到动画演示）：</p>

<a href="http://matrix7.me/wp-content/gallery/algorithms/plain_negamax.gif" title="最简单的负极大值算法" rel="lightbox[singlepic55]" >
	<img class="ngg-singlepic ngg-center" src="http://matrix7.me/wp-content/gallery/cache/55__x_plain_negamax.gif" alt="最简单的负极大值算法" title="最简单的负极大值算法" />
</a>

<p>下面是Negamax算法的伪代码：</p>
<pre class="brush: cpp; title: ; notranslate">
function negamax(node, depth)
if node is a terminal node or depth = 0
    return the heuristic value of node
 let best := -∞
 foreach child of node
     best := max(α, -negamax(child, depth-1))
return best
</pre>
<p>下面是我正在写的五子棋AI中的负极大值算法的实现代码：</p>
<pre class="brush: cpp; title: ; notranslate">
long SearchEngine::Negamax( Byte matrix[15][15], long color, long depth,
                           Move&amp; best_move )
{
    // if depth is 0 return the value of current node
    Evalutor evalutor;
    if (0 == depth) {
        return evalutor.Evaluate(matrix, static_cast(color));
    }

    // generate possible moves of current node
    MoveGenerator move_generator;
    MoveList list = move_generator.GeneratePossibleMove(matrix, color);

    // the opposite color
    long opposite_color = color == 1 ? 2 : 1;

    // set best score to negative infinity
    long best_score = -10000;
    best_move.x = list[0].x;
    best_move.y = list[0].y;

    for (MoveList::iterator i = list.begin(); i != list.end(); i++) {
        // make move
        AIMove&amp; move = *i;
        MakeMove(matrix, move);

        // select the max score of current ply
        Move m;
        move.score = -Negamax(matrix, opposite_color, depth - 1, m);
        if (move.score &gt; best_score) {
            best_score = move.score;
            best_move.x = move.x;
            best_move.y = move.y;
        }

        // unmake move
        UnmakeMove(matrix, move);
    }

    // if game over, return value of current node
    long value = evalutor.Evaluate(matrix, static_cast(color));
    if ( value &gt; 8000 || value &lt; -8000) {
        return value;
    }

    // return the best score
    return best_score;
}
</pre>
<p>Negamax函数的意义就是选取对于当前颜色棋子的所有走法中得分最高的走法，根据这个定义在Negamax中递归调用的Negamax则是选取对立颜色的那一方的最高得分，而对当前颜色来说则必须选取对立方最低得分的走法，故递归调用的Negamax前加一个负号，然后取最大值就相当于取对立方得分的最小值。</p>
<p>所以说负极大值算法与极小化极大算法是统一的，只是负极大值算法的形式更加简洁优雅，消除了博弈过程中对立双方的差别。</p>
<h1><span style="color: #008000;">Reference</span></h1>
<ol>
<li>Tic-tac-toe代码来自于我的朋友：<a href="http://www.cnblogs.com/chinese-zmm/archive/2011/01/26/1945795.html">http://www.cnblogs.com/chinese-zmm/archive/2011/01/26/1945795.html</a></li>
<li><a href="http://en.wikipedia.org/wiki/Minimax">http://en.wikipedia.org/wiki/Minimax</a></li>
<li><a href="http://en.wikipedia.org/wiki/Negamax">http://en.wikipedia.org/wiki/Negamax</a></li>
</ol>
<div style="margin-top: 15px;">
<p><strong>作者：</strong><a href="http://matrix7.me/">迷途羔羊</a> | <strong>本文链接：</strong><a href="http://matrix7.me/2011/03/%e6%9e%81%e5%b0%8f%e5%8c%96%e6%9e%81%e5%a4%a7%e7%ae%97%e6%b3%95%e4%b8%8e%e8%b4%9f%e6%9e%81%e5%a4%a7%e5%80%bc%e7%ae%97%e6%b3%95/">极小化极大算法与负极大值算法</a></p>
</div>
<div style="margin-left: 26px; margin-bottom: 15px;"><strong>Matr7x版权所有，转载本站文章请注明，转载自</strong> <a href="http://matrix7.me/">迷途羔羊</a>。</strong></div>
<p><a href="http://www.bshare.cn/share?url=http%3A%2F%2Fmatrix7.me%2F2011%2F03%2F%25e6%259e%2581%25e5%25b0%258f%25e5%258c%2596%25e6%259e%2581%25e5%25a4%25a7%25e7%25ae%2597%25e6%25b3%2595%25e4%25b8%258e%25e8%25b4%259f%25e6%259e%2581%25e5%25a4%25a7%25e5%2580%25bc%25e7%25ae%2597%25e6%25b3%2595%2F&title=%E6%9E%81%E5%B0%8F%E5%8C%96%E6%9E%81%E5%A4%A7%E7%AE%97%E6%B3%95%E4%B8%8E%E8%B4%9F%E6%9E%81%E5%A4%A7%E5%80%BC%E7%AE%97%E6%B3%95" title="用bShare分享或收藏本文"><img src="http://static.bshare.cn/frame/images/button_custom1-zh.gif" alt="用bShare分享或收藏本文" /></a></p><h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>March 2, 2011 -- <a href="http://matrix7.me/2011/03/alpha-beta-pruning/" title="Alpha-beta剪枝叶算法">Alpha-beta剪枝叶算法</a> (2)<br /><small>Alpha-beta剪枝叶算法的基本原理
要理解什么是alpha-beta剪枝叶算法，就必须把alpha剪枝叶和beta剪枝叶分开来看，分别理解什么是alpha剪枝和beta剪枝。首先请看下面一张图...</small></li></ul>]]></content:encoded>
			<wfw:commentRss>http://matrix7.me/2011/03/%e6%9e%81%e5%b0%8f%e5%8c%96%e6%9e%81%e5%a4%a7%e7%ae%97%e6%b3%95%e4%b8%8e%e8%b4%9f%e6%9e%81%e5%a4%a7%e5%80%bc%e7%ae%97%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

