<?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>SQYBI.com &#187; [Technology]</title>
	<atom:link href="http://sqybi.com/blog/archives/category/about-computer/technology/feed" rel="self" type="application/rss+xml" />
	<link>http://sqybi.com/blog</link>
	<description>Change is a part of life, and takes part in finding us who we are.</description>
	<lastBuildDate>Mon, 09 Jan 2012 13:33:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Help! My Archlinux (my Gnome 3) crashed!</title>
		<link>http://sqybi.com/blog/archives/365</link>
		<comments>http://sqybi.com/blog/archives/365#comments</comments>
		<pubDate>Sun, 16 Oct 2011 09:38:00 +0000</pubDate>
		<dc:creator>sqybi</dc:creator>
				<category><![CDATA[About Computer]]></category>
		<category><![CDATA[[Technology]]]></category>

		<guid isPermaLink="false">http://sqybi.com/blog/?p=365</guid>
		<description><![CDATA[今天Gnome 3崩了。。。不得已上来求救一下。。。 写一下崩的过程，希望写得还算清楚，不会乱七八糟。。。 崩的过程是，我用gnome-tweak-tool修改主题（是有某个选项卡，上面基本上所有的选项都是修改主题相关的，比如修改icon等等，那一页上的第一个选项）。 刚开始的主题是默认主题Adwaita，后来改成了某个主题（忘了是哪个了），Alt+F2，r，回车，一切正常。 再后来又改了，似乎是Atlanta，然后Alt+F2，r，回车，然后弹出提示告诉我gnome崩溃了，然后有一个选项（没有仔细看，记不清选项是什么了）和一个重启的按钮。 我没动那个选项，直接点了按钮重启。结果重启之后，gdm登陆的部分没有问题，但是进了gnome shell，显示出桌面壁纸就卡住了。状态栏什么的都没有显示，快捷键也都没有作用（至少我试过的都没有作用，比如Alt+F2，Win，以及自己设置的Alt+F3等），不过Ctrl+Alt+Fn切换控制台有效果。 然后尝试解决。最开始想通过修改配置文件把主题改回来，不过找了好久也没找到配置文件。Arch的wiki上有一段关于怎么修改配置文件换主题的介绍，但是可惜的是，我压根就找不到那个文件。 又找了找改主题的方法，所有介绍中基本都是图形界面的程序。有个gnomesettings神马的（名字肯定不是这个，记不清楚了），但是里面找不到theme相关的内容。 之后在/usr/share/themes/文件夹下看到了许多以主题名字命名的文件夹，尝试把Atlanta主题下的文件用Adwaita下的替换，还是不起作用。 再之后卸载gnome（pacman -Rc gnome），重启，重新安装gnome和gdm，问题依旧。 现在的问题就是这样，虽然我觉得最开始的时候大概只要把主题换回来就没有问题了，不过现在这个方法不一定还可行（毕竟已经重新装过gnome了）。这里需要求助的是： 1.如果有人经历过这个问题，求解决方案。 2.如果有人知道怎么在命令行下面改主题 ，求方法。 3.如果有人知道这个问题是解决不了的，也请告诉我，我直接重装。。。 多谢各位！ update: 问题已经解决，方法是备份后删除所有配置文件，然后再将有用的配置文件移回。感谢lx各位以及人人上各位的帮助！]]></description>
			<content:encoded><![CDATA[<p>今天Gnome 3崩了。。。不得已上来求救一下。。。<br />
写一下崩的过程，希望写得还算清楚，不会乱七八糟。。。</p>
<p>崩的过程是，我用gnome-tweak-tool修改主题（是有某个选项卡，上面基本上所有的选项都是修改主题相关的，比如修改icon等等，那一页上的第一个选项）。<br />
刚开始的主题是默认主题Adwaita，后来改成了某个主题（忘了是哪个了），Alt+F2，r，回车，一切正常。<br />
再后来又改了，似乎是Atlanta，然后Alt+F2，r，回车，然后弹出提示告诉我gnome崩溃了，然后有一个选项（没有仔细看，记不清选项是什么了）和一个重启的按钮。<br />
我没动那个选项，直接点了按钮重启。结果重启之后，gdm登陆的部分没有问题，但是进了gnome shell，显示出桌面壁纸就卡住了。状态栏什么的都没有显示，快捷键也都没有作用（至少我试过的都没有作用，比如Alt+F2，Win，以及自己设置的Alt+F3等），不过Ctrl+Alt+Fn切换控制台有效果。</p>
<p>然后尝试解决。最开始想通过修改配置文件把主题改回来，不过找了好久也没找到配置文件。Arch的wiki上有一段关于怎么修改配置文件换主题的介绍，但是可惜的是，我压根就找不到那个文件。<br />
又找了找改主题的方法，所有介绍中基本都是图形界面的程序。有个gnomesettings神马的（名字肯定不是这个，记不清楚了），但是里面找不到theme相关的内容。<br />
之后在/usr/share/themes/文件夹下看到了许多以主题名字命名的文件夹，尝试把Atlanta主题下的文件用Adwaita下的替换，还是不起作用。<br />
再之后卸载gnome（pacman -Rc gnome），重启，重新安装gnome和gdm，问题依旧。</p>
<p>现在的问题就是这样，虽然我觉得最开始的时候大概只要把主题换回来就没有问题了，不过现在这个方法不一定还可行（毕竟已经重新装过gnome了）。这里需要求助的是：<br />
1.如果有人经历过这个问题，求解决方案。<br />
2.如果有人知道怎么在命令行下面改主题 ，求方法。<br />
3.如果有人知道这个问题是解决不了的，也请告诉我，我直接重装。。。</p>
<p>多谢各位！</p>
<p><span style="color: #ff0000;">update: 问题已经解决，方法是备份后删除所有配置文件，然后再将有用的配置文件移回。感谢lx各位以及人人上各位的帮助！</span></p>
]]></content:encoded>
			<wfw:commentRss>http://sqybi.com/blog/archives/365/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>你的网站价值几何？让PageRank告诉你答案</title>
		<link>http://sqybi.com/blog/archives/359</link>
		<comments>http://sqybi.com/blog/archives/359#comments</comments>
		<pubDate>Tue, 27 Sep 2011 10:35:34 +0000</pubDate>
		<dc:creator>sqybi</dc:creator>
				<category><![CDATA[About Computer]]></category>
		<category><![CDATA[About Science]]></category>
		<category><![CDATA[[Technology]]]></category>
		<category><![CDATA[[果壳网约稿]]]></category>

		<guid isPermaLink="false">http://sqybi.com/blog/archives/359</guid>
		<description><![CDATA[本文同时发表在果壳网死理性派栏目，传送门：http://www.guokr.com/article/65304/。因为字数原因，所以编辑对死理性派上发表的文章进行了一定的删减和修正。这里发出的是未删减的版本，表示“太理性了，看不懂”的童鞋们可以来围观此文。 如果你安装过Google工具栏，如果你建立过独立博客或个人网站，那么你肯定和PageRank打过照面。而即使是从未考虑建站的读者，也有很大一部分听说过PageRank，毕竟作为Google搜索结果排序的重要依据[1]，这个算法已经被广泛应用于网络的每一个角落。而PageRank值的大小，也早已与网站的SEO[2]成功与否紧密相连。 那么PageRank的名称从何而来？PageRank究竟如何准确表示网页重要度，它的算法又是如何高效准确运行的呢？在PageRank的背后，有什么数学理论的支持？且听笔者为您一一道来。 三个孩子和豌豆游戏 从前有一个死理性派老爸，他有三个孩子。老爸是个懒人，他在家里把三个孩子叫做老大、老二和老三。 一天，三个孩子正在玩游戏，老爸把他们叫到身边。“我这里有三十颗豌豆，”老爸说，“我们来用它们玩一个游戏，游戏结束之后按照游戏结果把豌豆分给你们，好不好啊？” “好！”三个孩子异口同声地答应了。 “你们先在这张纸上写下你们喜欢的人，如果你认为另外两个兄弟你都很喜欢，那就把两个人的名字都写下来。比如我知道老二很喜欢老大，那么老二就在纸上写老大的名字。” 三个孩子很快写好了，然后老爸把纸收了上来。老大的纸上写了老二和老三的名字，而老二写了老大，老三写了老二。三个人互相喜欢的结果如图： 老爸清了一下嗓子，继续向孩子们解释规则：“接下来，我会给你们每个人分十颗豌豆。桌上有三个盘子，分别代表你们三个人，豌豆都放在盘子里。在我喊‘预备’的时候，你们要把盘子里的豌豆全都拿到手里。在我喊‘开始’的时候，你们要把手里的豌豆全部平均分给自己喜欢的人。” 老二举手：“那就是说，我每次都要把自己盘子里的豌豆全部拿起来，然后放到老大的盘子里吗？” “没错，”老爸说，“老三和老大也类似。大家都明白规则了吗？” 三个孩子点头。“好，那游戏开始！” 一开始三个孩子盘子里豌豆的情况如图： “预备！”妈妈喊到，“开始！” 三个孩子开始分配自己手中的豌豆。老二把十颗豌豆都给了老大；老三把十颗豌豆都给了老二；老大则是给老二和老三一人分配了五颗豌豆，如图： 三个孩子很快就麻利地分配好了自己手中的豌豆。这时三个人的盘子变成了这种情况： 老大有点不高兴了：“为什么我的豌豆比老二的还少啊？这个游戏不公平！” 老爸说：“这个游戏还没有结束。接下来我还会继续吹哨，你们也还要继续这个游戏，直到你们盘子里的豌豆数不再变化为止。公平不公平，到时候就能看出来了。” 老大虽然有点疑惑，不过还是点头同意了。 就这样，游戏一直进行下去。在下一轮的交换豌豆后，老大的盘子里有了15颗豌豆，老二有10颗，而老三只有五颗。当然故事在这里还没有结束，不过我们的描述要结束了。因为这个游戏将会持续很长很长时间——这点大概是死理性派老爸没有想到的。当然如果继续分下去，豌豆的数量将不再是整数，这一点我们也不深究了，游戏怎么能进行下去，就留给老爸想办法吧。 那么这个游戏最终的结果是什么样的呢？我们可以用电脑模拟这个过程，得出的结果是：老大和老二的盘子里各有12颗豌豆，而老三的盘子里有6颗豌豆。这时候无论游戏怎么进行下去，盘子里的豌豆数量都不会再变化。 网页排名和PageRank 在互联网刚刚发展的时代，人们曾经为网页的排名问题伤透脑筋。网页排名，顾名思义，就是为互联网上成千上万（当然，现在互联网上的网页数量已经不只是成千上万的程度了）的网页按照重要度进行排序。能够得知哪个网页更重要，对搜索引擎的发展十分有帮助——很显然，搜索引擎应该把重要的网页放到搜索结果中比较靠前的地方。 这个问题看起来很容易，但是解决的方法却没有想象的那么简单。 最初，一些比较流行的网页排名算法都很类似，它们都使用了一个非常简单的思想：越是重要的网页，访问量就会越大。于是，许多大公司就通过统计网页的访问量来进行网页排名。但是这种排名算法有两个很显著的问题：一是因为只能够抽样统计，所以统计数据不一定准确，而且访问量的波动会比较大，想要得到准确的统计需要大量的时间和人力，还只能维持很短的有效时间；二是访问量并不一定能体现网页的“重要程度”——可能一些比较早接触互联网的网民还记得，那时有很多人推出了专门“刷访问量”的服务。 有没有更好的方法，不统计访问量就能够为网页的重要度排序呢？在1999年，一篇以拉里•佩奇（Larry Page）为第一作者的论文[3]发表了。论文中介绍了一种叫做PageRank的算法，这种算法的主要思想是：越“重要”的网页，页面上的链接质量也越高，同时越容易被其它“重要”的网页链接。于是，算法完全利用网页之间互相链接的关系来计算网页的重要程度，终于摆脱了访问量统计的框框。 不过，不知道我们的死理性派老爸是不是了解，实际上刚刚他和孩子玩的游戏，就是PageRank算法的运行过程。 PageRank会给每个网页一个数值，这个数值越高，就说明这个网页越“重要”。而刚刚的游戏中，如果把豌豆的数量看作这个数值（可以不是整数），把孩子们看作网页，那么游戏的过程就是PageRank的算法，而游戏结束时豌豆的分配，就是网页的PageRank值。[4] 随机行走模型和马尔可夫过程 PageRank算法的思想基于“随机行走模型”（Random Walk Model）[5]。实际上，PageRank求解了这样一个问题：一个人在网络上浏览网页，每看过一个网页之后就会随机点击网页上的链接访问新的网页。如果当前这个人浏览的网页x已经确定，那么网页x上每个链接被点击的概率也是确定的，可以用向量Nx表示。在这种条件下，这个人点击了无限多次链接后，恰好停留在每个网页上的概率分别是多少？ 在这个模型中，我们用向量Ri来表示点击了i次链接之后可能停留在每个网页上的概率（R0则为一开始就打开了每个网页的概率，后面可以看到R0的取值对最终结果没有影响）。很显然Ri的L1范式[4]为1，这也是PageRank算法本身的要求。 于是，整个浏览过程的一开始，我们有： 其中，A是一个表示每一次点击链接概率的矩阵。A的第i列第j行Ai, j的含义是，如果当前访问的网页是网页i，那么下一次点击链接跳转到网页j的概率为Ai, j。 这样设计矩阵A的好处是，通过矩阵A和向量Rn-1相乘，即可得出点击一次链接后每个网页可能的停留概率向量Rn。例如，令R1=AR0，可以得到点击一次链接后停留在每个网页的概率： &#8230; <a href="http://sqybi.com/blog/archives/359">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>本文同时发表在果壳网死理性派栏目，传送门：<a href="http://www.guokr.com/article/65304/">http://www.guokr.com/article/65304/</a>。因为字数原因，所以编辑对死理性派上发表的文章进行了一定的删减和修正。这里发出的是未删减的版本，表示“太理性了，看不懂”的童鞋们可以来围观此文。</p>
</blockquote>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/11.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="1" border="0" alt="1" src="http://sqybi.com/blog/wp-content/uploads/2011/09/1_thumb1.png" width="240" height="173" /></a>如果你安装过Google工具栏，如果你建立过独立博客或个人网站，那么你肯定和PageRank打过照面。而即使是从未考虑建站的读者，也有很大一部分听说过PageRank，毕竟作为Google搜索结果排序的重要依据[1]，这个算法已经被广泛应用于网络的每一个角落。而PageRank值的大小，也早已与网站的SEO[2]成功与否紧密相连。     <br />那么PageRank的名称从何而来？PageRank究竟如何准确表示网页重要度，它的算法又是如何高效准确运行的呢？在PageRank的背后，有什么数学理论的支持？且听笔者为您一一道来。</p>
<p><strong>三个孩子和豌豆游戏</strong></p>
<p>从前有一个死理性派老爸，他有三个孩子。老爸是个懒人，他在家里把三个孩子叫做老大、老二和老三。    <br />一天，三个孩子正在玩游戏，老爸把他们叫到身边。“我这里有三十颗豌豆，”老爸说，“我们来用它们玩一个游戏，游戏结束之后按照游戏结果把豌豆分给你们，好不好啊？”     <br />“好！”三个孩子异口同声地答应了。     <br />“你们先在这张纸上写下你们喜欢的人，如果你认为另外两个兄弟你都很喜欢，那就把两个人的名字都写下来。比如我知道老二很喜欢老大，那么老二就在纸上写老大的名字。”     <br />三个孩子很快写好了，然后老爸把纸收了上来。老大的纸上写了老二和老三的名字，而老二写了老大，老三写了老二。三个人互相喜欢的结果如图：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="2" border="0" alt="2" src="http://sqybi.com/blog/wp-content/uploads/2011/09/2_thumb.png" width="364" height="364" /></a></p>
<p>老爸清了一下嗓子，继续向孩子们解释规则：“接下来，我会给你们每个人分十颗豌豆。桌上有三个盘子，分别代表你们三个人，豌豆都放在盘子里。在我喊‘预备’的时候，你们要把盘子里的豌豆全都拿到手里。在我喊‘开始’的时候，你们要把手里的豌豆全部平均分给自己喜欢的人。”    <br />老二举手：“那就是说，我每次都要把自己盘子里的豌豆全部拿起来，然后放到老大的盘子里吗？”     <br />“没错，”老爸说，“老三和老大也类似。大家都明白规则了吗？”     <br />三个孩子点头。“好，那游戏开始！”     <br />一开始三个孩子盘子里豌豆的情况如图：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/3.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="3" border="0" alt="3" src="http://sqybi.com/blog/wp-content/uploads/2011/09/3_thumb.png" width="364" height="351" /></a></p>
<p>“预备！”妈妈喊到，“开始！”    <br />三个孩子开始分配自己手中的豌豆。老二把十颗豌豆都给了老大；老三把十颗豌豆都给了老二；老大则是给老二和老三一人分配了五颗豌豆，如图：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/4.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="4" border="0" alt="4" src="http://sqybi.com/blog/wp-content/uploads/2011/09/4_thumb.png" width="364" height="364" /></a></p>
<p>三个孩子很快就麻利地分配好了自己手中的豌豆。这时三个人的盘子变成了这种情况：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/5.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="5" border="0" alt="5" src="http://sqybi.com/blog/wp-content/uploads/2011/09/5_thumb.png" width="364" height="351" /></a></p>
<p>老大有点不高兴了：“为什么我的豌豆比老二的还少啊？这个游戏不公平！”    <br />老爸说：“这个游戏还没有结束。接下来我还会继续吹哨，你们也还要继续这个游戏，直到你们盘子里的豌豆数不再变化为止。公平不公平，到时候就能看出来了。”     <br />老大虽然有点疑惑，不过还是点头同意了。     <br />就这样，游戏一直进行下去。在下一轮的交换豌豆后，老大的盘子里有了15颗豌豆，老二有10颗，而老三只有五颗。当然故事在这里还没有结束，不过我们的描述要结束了。因为这个游戏将会持续很长很长时间——这点大概是死理性派老爸没有想到的。当然如果继续分下去，豌豆的数量将不再是整数，这一点我们也不深究了，游戏怎么能进行下去，就留给老爸想办法吧。     <br />那么这个游戏最终的结果是什么样的呢？我们可以用电脑模拟这个过程，得出的结果是：老大和老二的盘子里各有12颗豌豆，而老三的盘子里有6颗豌豆。这时候无论游戏怎么进行下去，盘子里的豌豆数量都不会再变化。     </p>
<p><strong>网页排名和PageRank</strong></p>
<p>在互联网刚刚发展的时代，人们曾经为网页的排名问题伤透脑筋。网页排名，顾名思义，就是为互联网上成千上万（当然，现在互联网上的网页数量已经不只是成千上万的程度了）的网页按照重要度进行排序。能够得知哪个网页更重要，对搜索引擎的发展十分有帮助——很显然，搜索引擎应该把重要的网页放到搜索结果中比较靠前的地方。    <br />这个问题看起来很容易，但是解决的方法却没有想象的那么简单。     <br />最初，一些比较流行的网页排名算法都很类似，它们都使用了一个非常简单的思想：越是重要的网页，访问量就会越大。于是，许多大公司就通过统计网页的访问量来进行网页排名。但是这种排名算法有两个很显著的问题：一是因为只能够抽样统计，所以统计数据不一定准确，而且访问量的波动会比较大，想要得到准确的统计需要大量的时间和人力，还只能维持很短的有效时间；二是访问量并不一定能体现网页的“重要程度”——可能一些比较早接触互联网的网民还记得，那时有很多人推出了专门“刷访问量”的服务。     <br />有没有更好的方法，不统计访问量就能够为网页的重要度排序呢？在1999年，一篇以拉里•佩奇（Larry Page）为第一作者的论文[3]发表了。论文中介绍了一种叫做PageRank的算法，这种算法的主要思想是：越“重要”的网页，页面上的链接质量也越高，同时越容易被其它“重要”的网页链接。于是，算法完全利用网页之间互相链接的关系来计算网页的重要程度，终于摆脱了访问量统计的框框。     <br />不过，不知道我们的死理性派老爸是不是了解，实际上刚刚他和孩子玩的游戏，就是PageRank算法的运行过程。     <br />PageRank会给每个网页一个数值，这个数值越高，就说明这个网页越“重要”。而刚刚的游戏中，如果把豌豆的数量看作这个数值（可以不是整数），把孩子们看作网页，那么游戏的过程就是PageRank的算法，而游戏结束时豌豆的分配，就是网页的PageRank值。[4]</p>
<p><strong>随机行走模型和马尔可夫过程</strong></p>
<p>PageRank算法的思想基于“随机行走模型”（Random Walk Model）[5]。实际上，PageRank求解了这样一个问题：一个人在网络上浏览网页，每看过一个网页之后就会随机点击网页上的链接访问新的网页。如果当前这个人浏览的网页x已经确定，那么网页x上每个链接被点击的概率也是确定的，可以用向量N<sub>x</sub>表示。在这种条件下，这个人点击了无限多次链接后，恰好停留在每个网页上的概率分别是多少？     <br />在这个模型中，我们用向量R<sub>i</sub>来表示点击了i次链接之后可能停留在每个网页上的概率（R<sub>0</sub>则为一开始就打开了每个网页的概率，后面可以看到R<sub>0</sub>的取值对最终结果没有影响）。很显然R<sub>i</sub>的L1范式[4]为1，这也是PageRank算法本身的要求。     <br />于是，整个浏览过程的一开始，我们有：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/eq1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="eq1" border="0" alt="eq1" src="http://sqybi.com/blog/wp-content/uploads/2011/09/eq1_thumb.png" width="253" height="207" /></a></p>
<p>其中，A是一个表示每一次点击链接概率的矩阵。A的第i列第j行A<sub>i, j</sub>的含义是，如果当前访问的网页是网页i，那么下一次点击链接跳转到网页j的概率为A<sub>i, j</sub>。     <br />这样设计矩阵A的好处是，通过矩阵A和向量R<sub>n-1</sub>相乘，即可得出点击一次链接后每个网页可能的停留概率向量R<sub>n</sub>。例如，令R<sub>1</sub>=AR<sub>0</sub>，可以得到点击一次链接后停留在每个网页的概率：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/eq2.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="eq2" border="0" alt="eq2" src="http://sqybi.com/blog/wp-content/uploads/2011/09/eq2_thumb.png" width="206" height="112" /></a></p>
<p>之后一直迭代下去，有：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/eq3.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="eq3" border="0" alt="eq3" src="http://sqybi.com/blog/wp-content/uploads/2011/09/eq3_thumb.png" width="166" height="41" /></a></p>
<p>对于以上例子，迭代结果如下图：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/9.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="9" border="0" alt="9" src="http://sqybi.com/blog/wp-content/uploads/2011/09/9_thumb.png" width="364" height="234" /></a></p>
<p>可以看到，每个网页停留的概率在振荡之后趋于稳定。    <br />在这种稳定状态下，我们可以知道，无论如何迭代，都有R<sub>n</sub>=R<sub>n-1</sub>。这样我们就获得了一个方程：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/eq4.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="eq4" border="0" alt="eq4" src="http://sqybi.com/blog/wp-content/uploads/2011/09/eq4_thumb.png" width="384" height="45" /></a></p>
<p>而整个迭代的过程，就是在寻求方程R=AR的解。这也是为什么R<sub>0</sub>的取值对结果没有影响：无论R<sub>0</sub>是多少，迭代无限多次之后，一定会取得令R=AR成立的R值。整个求解R的过程，就如同一个人在一张地图上的不同位置之间随机地行走一样，所以被称为“随机行走模型”。     <br />随机行走模型有一个显著的特点，那就是每一次迭代的结果只与前一次有关，与更早的结果完全无关。这种过程又被称为马尔可夫过程（Markov Process）或马尔可夫链（Markov Chain）[7]。     <br />马尔可夫过程的数学定义是：如果对于一个随机变量序列X<sub>0</sub>、X<sub>1</sub>、X<sub>2</sub>、…，其中X<sub>n</sub>表示时间n的状态及转移概率（transition possibility）P，有：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/eq5.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="eq5" border="0" alt="eq5" src="http://sqybi.com/blog/wp-content/uploads/2011/09/eq5_thumb.png" width="617" height="44" /></a></p>
<p>即X<sub>n</sub>只受X<sub>n-1</sub>的影响，则此过程成为马尔可夫过程。其中P(X<sub>n+1</sub>|X<sub>n</sub>)称作“一步转移概率”，而两步、三步转移概率则可以通过一步转移概率的积分求得。     <br />当状态空间有限时，转移概率可以用用一个矩阵A来表示，称作转移矩阵（transition matrix）。此时转移概率的积分即为矩阵的幂，k步转移概率可以用A<sup>k</sup>表示，这也是随机行走模型中的情况。而对于一个正的（每个元素都为正的）转移矩阵A，可以证明一定有：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/eq6.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="eq6" border="0" alt="eq6" src="http://sqybi.com/blog/wp-content/uploads/2011/09/eq6_thumb.png" width="240" height="63" /></a></p>
<p>这也解释了为什么在这段开始笔者提到，R<sub>0</sub>的取值对最终结果没有影响。     <br />上述有限状态空间的马尔可夫过程只是马尔可夫过程的一个小分支。马尔可夫过程作为一种有效的随机过程模型，已经在更广泛的领域中得以应用。除了PageRank算法外，LZMA压缩算法[8]也使用了马尔可夫过程作为信号模型；此外，生物学和机器写作的领域都有马尔可夫过程的身影。</p>
<p><strong>悬挂网页和个性化PageRank</strong></p>
<p>不知道细心的读者发现没有，以上叙述的算法有时并不能解决问题——在某些情况下，算法的结果中有很多网页的PageRank都是0，甚至结果就是一个零向量。    <br />这是为什么呢？其实，当一个网页只有链入链接没有链出链接的时候，这个网页就会像一个“黑洞”一样，将同一个连通子图中其它网页流向它的PageRank慢慢“吞掉”，这种网页我们称之为“悬挂网页”（Dangling Link）。此时的转移矩阵A，对于任意自然数n，A<sup>n</sup>都不会是一个正的转移矩阵——A中对应着悬挂网页的位置永远是0。     <br />为了解决这个问题，PageRank算法加入了一个新的向量E。它的作用是，按照其中所描述的比例来向全部网页分配悬挂网页每一次“吞掉”的PageRank。这样，相当于为悬挂网页添加了链向网络上全部网页的链接，避免了悬挂链接的出现。     <br />E的取值如何确定呢？论文中提到，一般可以直接使用平均分配的方式把悬挂网页的PageRank分配给所有网页。但是，因为抓取的数据库通常是不完全的，所以悬挂网页的数量一般来说非常巨大，E的改变也会对PageRank的结果造成影响。于是，通过设定不同的E，我们就可以人为干预PageRank的结果。这样得到的PageRank，称作“个性化PageRank”（Personalized PageRank）。     <br />事实上，这样的干预是很重要的。在PageRank算法的真正实现中，会增加一个常系数c，即：</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2011/09/eq7.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="eq7" border="0" alt="eq7" src="http://sqybi.com/blog/wp-content/uploads/2011/09/eq7_thumb.png" width="265" height="40" /></a></p>
<p>以此来人为“制造”悬挂网页。</p>
<p><strong>佩奇和“佩奇的排名”</strong></p>
<p>之前提到过，PageRank算法的论文中，第一作者的名字叫做拉里•佩奇，即Larry Page。    <br />佩奇是Google的创始人之一，现任Google的CEO。这里有一件很有意思的事情出现了：“佩奇”的英文是“Page”，恰好与“PageRank”的“Page”相吻合。这是巧合还是有意为之呢？     <br />在网络上笔者可以找到的许多资料中，均提到PageRank是以拉里•佩奇的姓命名。但是所有这些资料都没有提到这条信息的来源，所以其真实性无从得证。     <br />不过，既然佩奇本人没有出来解释，那我们也没有必要纠结于Page的含义了。或许这个词本身就是佩奇利用双关语向我们开的一个小玩笑呢！</p>
<p><strong>脚注与参考资料</strong></p>
<p>[1] 虽然PageRank是Google搜索结果排序的重要依据，不过它并不是全部依据——实际上，Google用了数百种不同的算法来确定最终显示给用户的搜索结果顺序。    <br />[2] SEO，即Search Engine Optimization，意为搜索引擎优化，主要是将网站的内容、布局等针对搜索引擎进行优化，使得页面更容易在搜索结果上被显示。     <br />[3] L. Page, S. Brin, R. Motwani and T. Winograd. The PageRank Citation Ranking: Bring Order to the Web. Jan, 1998.     <br />[4] 这里的描述不是非常准确：首先，在PageRank的算法中，要求结果向量的L2范式为1，所以需要将每个孩子的豌豆数量减少到例子中的1/30；另外，我们看到的网页PageRank值，实际上是通过对算法的结果求对数得到的。但算法的本质没有大的不同，所以这里不再赘述。     <br />[5] 随机行走模型，来自Wikipedia：<a href="http://en.wikipedia.org/wiki/Random_walk">http://en.wikipedia.org/wiki/Random_walk</a>     <br />[6] 向量的L1范式，即向量中每一项的绝对值之和。     <br />[7] 马尔可夫过程，来自Wikipedia：<a href="http://en.wikipedia.org/wiki/Markov_chain">http://en.wikipedia.org/wiki/Markov_chain</a>     <br />[8] LZMA算法，来自Wikipedia：<a href="http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Markov_chain_algorithm">http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Markov_chain_algorithm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sqybi.com/blog/archives/359/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>编译器和它的故事&#8212;&#8212;自展与交叉编译</title>
		<link>http://sqybi.com/blog/archives/322</link>
		<comments>http://sqybi.com/blog/archives/322#comments</comments>
		<pubDate>Sun, 08 May 2011 02:25:21 +0000</pubDate>
		<dc:creator>sqybi</dc:creator>
				<category><![CDATA[About Computer]]></category>
		<category><![CDATA[[Technology]]]></category>

		<guid isPermaLink="false">http://sqybi.com/blog/archives/322</guid>
		<description><![CDATA[其实好久以前就想开始动手写这么一篇文章了，不过一直没有时间。现在正好刚考完最后一门期中考试，还是编译原理，就把这篇文章写出来。 要阅读本文，不需要太高深的编译原理知识，甚至不需要编译相关的知识。但是本文也不是面向对电脑一无所知的读者的，你至少要知道： 1. 不管是exe可执行文件还是Linux下的程序，都是一些二进制代码，我们称之为机器语言。这些代码的执行和系统以及CPU都有关。 2. 大部分情况下，编译器是一种将高级语言翻译成机器语言的程序。而任何程序本身也是一些机器语言的代码。 3. 无论是高级语言、汇编语言还是机器语言，实际上都是等价的，唯一有区别的是，越高级的语言写起来越容易（所以我们倾向于尽量多书写高级语言代码）；同时，机器语言是可以直接运行的。 如果你觉得上面三条可以理解或者可以理解一部分，那么请继续阅读。 另外，本文中提到的无论是编译的过程还是语言的分类甚至是一些例子，都可以看做是一个简化的模型。实际上，很少有一个exe程序就可以运行的编译器，现代的编译器都是十分复杂的。不过，考虑这些简化模型对我们没有任何坏处，它们和实际情况相差并不很大。 首先我来详细解释一下高级语言和机器语言。 语言的所谓“高级”，实际上界定不是那么明确。不过我们可以确定的是：C++、Java、Python之流比汇编语言更高级，而汇编语言比机器语言更高级。 这里提到一个汇编语言和机器语言的区分。可能有些读者不明白这两个概念的区别，实际上很简单，汇编语言是我们会看到的那些MOV、JMP等命令组成的语言，而机器语言则纯粹是是各种01串。我想没有人会愿意写一个机器语言的程序——实际上，我们学校的计算机组成实验都是用Verilog HDL这种高级语言来完成的，而嵌入式原理实验也是用一种汇编语言完成的；即使是做处理器和单片机，也不会有人愿意去写机器语言，毕竟一大堆01串太坑爹了。 试想，让你用C++写一个从1输出到100的程序，几行代码就可以搞定；而汇编语言则可能需要几十行；机器语言呢，Oh my god，一大堆01000101110110101011111001……，看都看不懂，还写啥啊。 但是上面也提到了，机器语言和高级语言的区别是，它可以直接运行。比如exe程序，实际上它内部存储的就是一些机器语言的代码，机器可以直接阅读这些代码并在处理器中运行它们（这里说的不是完全准确，比如.NET编译出的exe程序实际上是一段中间代码，由CLR解释成机器代码才能运行——不过这可以暂且忽略，就当作我说的是一个简化的模型）。当然程序的运行是依赖机器架构和系统的，不然Wine什么的也就没有用了（什么是Wine？WINE = WINE Is Not an Emulator！有趣的名称递归定义还有很多，不过与本文无关，请自行Google）。 而实际上，是机器架构不同还是系统不同，并不是我们考虑的问题。我们考虑的问题只是，一段代码在A机器和X系统下能否运行，换到B机器和Y系统下又能否运行。就算在A机器和X系统下能运行，如果换成了A机器和Y系统之后不能运行了，那对于我们这也可以看做两台不同的机器（也就是说，A机器和Y系统实际上就可以看做一个新的机器B）。所以之后的描述中，我们不考虑操作系统的情况，而是只考虑机器，我们编号为a、b等，而它们上面可以运行的机器语言我们编号为A、B等。 以上几段的关键点是： 无论是机器语言还是高级语言，实际上都是代码。在之后的讨论中，我们不应该将它们区别对待。 虽然机器语言代码和高级语言略有不同，它可以直接在机器上运行，但是对于编译过程，它们没有任何区别。 上面的问题了解了之后，我再来简单说一下编译器。那编译器是什么？这要从两个方面来解释。 首先，编译器本身的功能是，将一种语言S的代码转化为一种语言T的代码。这里稍微了解编译器的读者可能有疑问了：我用的gcc之类的编译器，明明是把C语言代码编译成了一个exe程序，并不是把S语言的代码编译成了T语言的代码啊？如果你也有这个疑问，请重新阅读以上几段——我在前面已经提过了，“任何程序本身也是一些机器语言的代码”。也就是说，我们这里把机器语言也看作一种语言，只不过是很低级的语言；而编译器就可以将C语言这种高级语言S转化为机器语言这种低级语言T，恰好这种低级语言还是可以在机器t上直接运行的。 其次，大部分情况下，编译器自己也是一段程序，那么它也可以看做是一段代码。而编译器也会有它的源代码，这个源代码就是一种高级语言的代码，我们这时仍然叫它编译器。随便举个例子，对于gcc.exe，这个程序是一种机器语言A的代码，它可以直接在a机器上运行。而它的功能则是，将C语言的代码转化为机器语言A的代码（一个C语言的编译器），使得本身无法直接运行的C语言程序变得可以在a机器上运行。而在得到gcc.exe之前，我们一定也有一段代码，它是用来生成gcc.exe这个程序的，这段代码可能是一个高级语言的代码，比如汇编语言。那这时候，这段汇编语言的代码即使不能直接在电脑上运行，我们依然说这是一个C语言的编译器。 有了这两点，我们就可以总结出一个编译器的特征： 1. 本身是一段代码，假设是A语言的代码，A可以是机器语言，也可以不是； 2. 可以接收一段代码，假设是S语言的代码，S一般来说是高级语言，但理论上也可以不是； 3. 可以将接收到的S语言代码在内部转换后输出一段代码，假设是T语言的代码，T有可能是机器语言，但也有可能是一种高级语言。 这样，一个编译器就可以被表示为A(S –&#62; &#8230; <a href="http://sqybi.com/blog/archives/322">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>其实好久以前就想开始动手写这么一篇文章了，不过一直没有时间。现在正好刚考完最后一门期中考试，还是编译原理，就把这篇文章写出来。</p>
<blockquote><p>要阅读本文，不需要太高深的编译原理知识，甚至不需要编译相关的知识。但是本文也不是面向对电脑一无所知的读者的，你至少要知道：<br />
1. 不管是exe可执行文件还是Linux下的程序，都是一些<strong>二进制代码</strong>，我们称之为<strong>机器语言</strong>。这些代码的执行和系统以及CPU都有关。<br />
2. 大部分情况下，编译器是一种将<strong>高级语言翻译成机器语言</strong>的程序。而<strong>任何程序本身</strong>也是一些<strong>机器语言的代码</strong>。<br />
3. 无论是高级语言、汇编语言还是机器语言，实际上都是等价的，唯一有区别的是，越高级的语言写起来越容易（所以我们倾向于<strong>尽量多书写高级语言代码</strong>）；同时，<strong>机器语言是可以直接运行的</strong>。<br />
如果你觉得上面三条可以理解或者可以理解一部分，那么请继续阅读。</p>
<p>另外，本文中提到的无论是编译的过程还是语言的分类甚至是一些例子，都可以看做是一个简化的模型。实际上，很少有一个exe程序就可以运行的编译器，现代的编译器都是十分复杂的。不过，考虑这些简化模型对我们没有任何坏处，它们和实际情况相差并不很大。</p></blockquote>
<p>首先我来详细解释一下高级语言和机器语言。</p>
<p>语言的所谓“高级”，实际上界定不是那么明确。不过我们可以确定的是：C++、Java、Python之流比汇编语言更高级，而汇编语言比机器语言更高级。<br />
这里提到一个汇编语言和机器语言的区分。可能有些读者不明白这两个概念的区别，实际上很简单，汇编语言是我们会看到的那些MOV、JMP等命令组成的语言，而机器语言则纯粹是是各种01串。我想没有人会愿意写一个机器语言的程序——实际上，我们学校的计算机组成实验都是用Verilog HDL这种高级语言来完成的，而嵌入式原理实验也是用一种汇编语言完成的；即使是做处理器和单片机，也不会有人愿意去写机器语言，毕竟一大堆01串太坑爹了。<br />
试想，让你用C++写一个从1输出到100的程序，几行代码就可以搞定；而汇编语言则可能需要几十行；机器语言呢，Oh my god，一大堆01000101110110101011111001……，看都看不懂，还写啥啊。</p>
<p>但是上面也提到了，机器语言和高级语言的区别是，它可以直接运行。比如exe程序，实际上它内部存储的就是一些机器语言的代码，机器可以直接阅读这些代码并在处理器中运行它们（这里说的不是完全准确，比如.NET编译出的exe程序实际上是一段中间代码，由CLR解释成机器代码才能运行——不过这可以暂且忽略，就当作我说的是一个简化的模型）。当然程序的运行是依赖机器架构和系统的，不然Wine什么的也就没有用了（什么是Wine？WINE = WINE Is Not an Emulator！有趣的名称递归定义还有很多，不过与本文无关，请自行Google）。<br />
而实际上，是机器架构不同还是系统不同，并不是我们考虑的问题。我们考虑的问题只是，一段代码在A机器和X系统下能否运行，换到B机器和Y系统下又能否运行。就算在A机器和X系统下能运行，如果换成了A机器和Y系统之后不能运行了，那对于我们这也可以看做两台不同的机器（也就是说，A机器和Y系统实际上就可以看做一个新的机器B）。所以之后的描述中，我们不考虑操作系统的情况，而是只考虑机器，我们编号为a、b等，而它们上面可以运行的机器语言我们编号为A、B等。</p>
<blockquote><p>以上几段的关键点是：<br />
无论是机器语言还是高级语言，实际上都是代码。在之后的讨论中，我们不应该将它们区别对待。<br />
虽然机器语言代码和高级语言略有不同，它可以直接在机器上运行，但是对于编译过程，它们没有任何区别。</p></blockquote>
<p>上面的问题了解了之后，我再来简单说一下编译器。那编译器是什么？这要从两个方面来解释。</p>
<p>首先，编译器本身的功能是，将一种语言S的代码转化为一种语言T的代码。这里稍微了解编译器的读者可能有疑问了：我用的gcc之类的编译器，明明是把C语言代码编译成了一个exe程序，并不是把S语言的代码编译成了T语言的代码啊？如果你也有这个疑问，请重新阅读以上几段——我在前面已经提过了，“任何程序本身也是一些机器语言的代码”。也就是说，我们这里把机器语言也看作一种语言，只不过是很低级的语言；而编译器就可以将C语言这种高级语言S转化为机器语言这种低级语言T，恰好这种低级语言还是可以在机器t上直接运行的。<br />
其次，大部分情况下，编译器自己也是一段程序，那么它也可以看做是一段代码。而编译器也会有它的源代码，这个源代码就是一种高级语言的代码，我们这时仍然叫它编译器。随便举个例子，对于gcc.exe，这个程序是一种机器语言A的代码，它可以直接在a机器上运行。而它的功能则是，将C语言的代码转化为机器语言A的代码（一个C语言的编译器），使得本身无法直接运行的C语言程序变得可以在a机器上运行。而在得到gcc.exe之前，我们一定也有一段代码，它是用来生成gcc.exe这个程序的，这段代码可能是一个高级语言的代码，比如汇编语言。那这时候，这段汇编语言的代码即使不能直接在电脑上运行，我们依然说这是一个C语言的编译器。</p>
<p>有了这两点，我们就可以总结出一个编译器的特征：<br />
1. 本身是一段代码，假设是A语言的代码，A可以是机器语言，也可以不是；<br />
2. 可以接收一段代码，假设是S语言的代码，S一般来说是高级语言，但理论上也可以不是；<br />
3. 可以将接收到的S语言代码在内部转换后输出一段代码，假设是T语言的代码，T有可能是机器语言，但也有可能是一种高级语言。<br />
这样，一个编译器就可以被表示为A(S –&gt; T)，表示编译器本身的代码是A语言，可以接受一个S语言代码作为输入，同时产生相同功能的T语言代码作为输出。之后我们的编译器都会这么表示，请务必牢记。</p>
<blockquote><p>以上几段的关键点是：<br />
编译器是什么？从本质上看是一段代码，而从功能上看可以将一段代码等价地转化为另一段代码。<br />
所以，我们用A(S –&gt; T)表示一个编译器，这个编译器本身是由A语言写成的，它的功能是将S语言代码等价地转换为T语言代码。当A语言是机器语言的时候，这个编译器就是可以使用的。</p></blockquote>
<p>有了之前的知识基础，终于可以开始讲自展了。</p>
<p>不知道读了之前的内容，你有没有这样一个疑问：既然编译器本身是一段代码，那么如果想编译一个编译器，就需要更早的编译器来进行编译操作。而编译这个更早的编译器还需要更更早的编译器——长此以往，第一个编译器是怎么产生的呢？难道是直接用机器语言书写的？<br />
如果能这么想，那么你就猜对了。第一个编译器一定是用机器语言写出的。实际上，很久以前的程序员还在纸带上打孔编程呢，他们也照样乐在其中。机器语言只是很难书写，并不是不能书写。<br />
但是，毕竟用这么难书写的语言写一个C++编译器，谁都不会愿意去干。所以，第一个编译器的功能一定是很简单的。而人们会用这很简单的编译器的语言，去写一个稍微复杂一些的编译器；然后再用这个新的编译器，去写一个更复杂的编译器；最终得到一个很复杂的编译器，比如C++编译器——好了，如果能够理解这个过程，那么你实际上几乎就理解了自展。</p>
<p>所谓自展，实际上就是用一个功能不太完善的编译器支持的语言写代码，然后放到这个编译器上去编译，产生一个比自己更完善的编译器的过程。用一个不太恰当的例子来描述，就是我们已经有了一个C语言的编译器，然后我们用C语言写一个C++的编译器代码，并用C语言编译器编译这个代码生成可以运行的C++编译器（之所以不太恰当，是因为C语言不是C++语言的严格子集）。<br />
也就是说，我们有一个编译器A(C –&gt; A)，现在写一个编译器C(C++ –&gt; A)，将后者放入前者中进行编译，即A(C(C++ –&gt; A) –&gt; A)，得到一个可以执行的编译器A(C++ –&gt; A)。</p>
<blockquote><p>以上几段的关键点是：<br />
自展过程，实际上就是用低级语言先实现一个简单的编译器，然后用这个编译器的语言再去编写一个更高级的编译器——这个新编译器是旧编译器的扩展——的过程。</p></blockquote>
<p>自展很简单？那下面就是本文的重头戏——交叉编译了。</p>
<p>交叉编译这个概念，没有自展这个概念那么准确。所以先看一个问题：如果你想写一个手机系统上的程序，你会怎么做呢？我们可能会想到，开发一个手机上的编译器，然后把程序放到上面编译成手机可以运行的机器代码。但是这样就有一个很大的问题了，那就是手机的运行速度和电脑相比十分缓慢（虽然现在手机的CPU已经很强悍了，但是手机的内存一向很小，不太足以运行编译器）。<br />
实际上，在现实中我们的做法是，在电脑上完成编译过程，然后直接把在手机上可以运行的机器代码拷贝到手机内。这样就不受限于编译时手机的内存和CPU限制了。这样一个过程，就叫做交叉编译。<br />
当然交叉编译也有其它的应用，比如有时候我们也需要在一台电脑a上生成另外一台电脑b上同一个语言的编译器，比如在Windows下编译一个Linux的编译器。这个问题比前面的问题还要多一步编译操作，我们不妨在后面的讨论中将这两个问题称作问题1（前者）和问题2（后者）。</p>
<p>为了方便起见，我们把这两个问题用之前的表示方法来书写一下。<br />
首先，将电脑看做是机器a，手机看作是机器b。我们现在手里拥有的是某语言S在a机器上的编译器A(S –&gt; A)。对于问题1，我们需要最终生成一个在a机器上编译b机器代码的编译器，即A(S –&gt; B)。而对于问题2，我们则是需要一个在b机器上生成b机器代码的编译器，B(S –&gt; B)。<br />
而我们可以做到的是，用高级语言S写一个自身的编译器（可以是a机器的也可以是b机器的，不过这个问题中只有后者会被用到），即S(S –&gt; B)。<br />
好，现在我们就有了两个代码，A(S –&gt; A)和S(S –&gt; B)，其中只有第一个代码是可以在a机器上运行的。我们要从这两个代码中得到两个新的代码，那就是A(S –&gt; B)和B(S –&gt; B)。</p>
<p>首先先考虑如何得到一个A(S –&gt; B)，即一个在a机器上运行的可以将S语言代码编译为b机器代码的编译器。<br />
其实写成现在的形式，这一点如何做到已经很简单了。那就是将S(S –&gt; B)放入A(S –&gt; A)中编译，即A(S(S –&gt; B) –&gt; A)，这样就可以得到A(S –&gt; B)。这一步因为使用的编译器是A(S –&gt; A)，所以只需要在A机器上执行。<br />
这时，可以发现第一个问题已经解决了。我们这时就可以利用得到的A(S –&gt; B)在a机器（电脑）上编译b机器（手机）的代码了。</p>
<p>然后在考虑如何得到一个B(S –&gt; B)。<br />
可以看到，我们之前一步的时候有了一个A(S –&gt; B)，而最开始还拥有一个S(S –&gt; B)。这样，我们只需要将S(S –&gt; B)放入A(S –&gt; B)中编译，即A(S(S –&gt; B) –&gt; B)，这样就可以得到一个B(S –&gt; B)了。<br />
这样，我们用前一步得到的编译器A(S –&gt; B)，在a机器（Windows）上运行，又得到了一个新的编译器B(S –&gt; B)，它可以在b机器（Linux）下编译b机器（Linux）的代码。</p>
<p>可以看到，我们从最开始的编译器A(S –&gt; A)和代码S(S –&gt; B)得到最终代码B(S –&gt; B)的过程中，所有的步骤都是在A机器上运行的，完全没有用到B机器。这就是交叉编译的有趣之处！使用交叉编译，可以在很多情况下省去不少的麻烦。</p>
<p>另外解释一个问题，为什么不直接编写一个A(S –&gt; B)？因为A是机器代码，而之前也提到过了，“我们倾向于尽量多书写高级语言代码”，因为机器语言十分难以理解和书写。所以，我们写了一个高级语言代码S(S –&gt; B)，将它放到已有的A(S –&gt; A)上去编译（为什么是已有的？这个问题实际上不需要回答，因为这里假设a机器是一台很常用的机器（比如安装了Windows系统的PC机），所以A(S –&gt; A)是一个很普通的编译器，它的存在性无需证明；A(S –&gt; A)的书写可以利用之前提到的自展完成），最终得到了一个需要的B(S –&gt; B)。</p>
<blockquote><p>以上几段的关键点是：<br />
关键点太多了有木有！！！这个怎么总结呢……<br />
如果看不太懂交叉编译的过程的话，可以暂且把a机器当作一个安装了Windows的PC机，把b机器当作一台手机或者一个装了Linux的PC机，然后再带着这个理解重新阅读整个过程。<br />
实际上，交叉编译解决的两个问题分别都只需要一步操作，所以交叉编译没有听起来那么复杂！不要自己吓到自己就好了~</p></blockquote>
<p>拍了快两个小时，这篇文章终于完成了。文章是否容易理解？有没有出现什么技术性错误？欢迎各位留言讨论！<br />
神犇们就不要来bs内容太简单了……</p>
]]></content:encoded>
			<wfw:commentRss>http://sqybi.com/blog/archives/322/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gmail的哪些功能吸引了我？[updated]</title>
		<link>http://sqybi.com/blog/archives/306</link>
		<comments>http://sqybi.com/blog/archives/306#comments</comments>
		<pubDate>Thu, 14 Apr 2011 03:53:42 +0000</pubDate>
		<dc:creator>sqybi</dc:creator>
				<category><![CDATA[About Computer]]></category>
		<category><![CDATA[[Technology]]]></category>

		<guid isPermaLink="false">http://sqybi.com/blog/archives/306</guid>
		<description><![CDATA[昨天在人人上发了个关于Gmail的状态，引发了热烈讨论。某同学表示不知道为什么有那么多人在用Gmail，然后瞬间蹦出N个回复提出了Gmail的种种优点。 仔细想想，为什么Gmail这么吸引我呢？ 很早以前，我的第一个邮箱是sohu邮箱，用户名我还记得，是jk041。真的是很早以前的事情了。之后几乎尝试过国内每一个著名邮箱（正如当初几乎尝试过国内每一个著名BSP），然后换到了新浪。再后来，126邮箱似乎率先推出了什么功能（好像是无限容量，我也记不太清了），于是转到了126邮箱，而且那个邮箱也持续用到今天。 但是，实际上，现在的126邮箱对于我只是一个收垃圾邮件用的邮箱——所有网站的注册都用126的邮箱，然后私人的邮件都用Gmail。我已经忘了自己是什么时候开始用Gmail的，不过的确最开始的时候我也不觉得Gmail有什么好的功能，甚至觉得很难“上手”。不过某一次连续用了一个礼拜Gmail之后，我才发现原来这个邮箱真的这么优秀，国内没有任何一个邮箱能够与其比肩，甚至赶不上它的十分之一（国外估计也不会有吧？）。 这时我才发现，所谓很难“上手”，实际上只是迁移成本罢了，当初国内邮箱“上手”的时候，没有一个比Gmail更容易多少。Gmail已经在易用性和用户体验中间找到了一个十分良好的平衡点，国内邮箱互相的迁移成本低，是因为中国的网络产品“抄”的现象太严重，结果每个邮箱界面都一样，用起来感觉都一样，不一样的只剩下了域名。 扯淡扯太多了。那么回归正题，Gmail到底有哪些功能吸引了我呢？ ---------- 以下是Gmail默认开启的功能 ---------- 界面布局 之所以把这个放在第一个，是因为国内邮箱千篇一律的页面布局实在让人头疼。Gmail将Mail、Contacts和Tasks整合在了一起，对功能进行了分块。上面的搜索框也很有Google特色，用起来相当方便。通过Labs的功能，还可以对界面进行进一步改造（比如把Inbox分成多个，把Gtalk放到右边之类）。其实这个也不算太亮的亮点，但是用起来的确很舒服。 标签管理 这个是Gmail一个很核心的功能，可以说，如果不用这个功能，Gmail就浪费了一半。 虽然标签管理本身并不能带给我们什么体验上质的飞跃，但是它可以和很多功能相互配合使用，比如代收取邮件、过滤器和Archive等。可以发现，这时标签功能才真正展现出它的实力，把一切都统一成标签，简洁明了，完全不是国内邮箱那样，一个文件夹列表，一个代收取的邮箱列表，大大限制了灵活性。 Archive 这个功能可以说完全依赖标签才得以实现。有的邮件可能已经没有什么用处了，或许是谈论某个project然后project已经完成，或许是向教授套磁然后失败了……不管怎样，这种邮件会有一种删也不是不删也不是的感觉。这时怎么办？Archive功能告诉你，你可以把它从inbox中完全隐藏掉，但是这个邮件不会被删除，想要读的时候，搜索功能可以帮你忙。 这个功能的实现是，Inbox里的邮件都会被自动加上“Inbox”这样一个标签，只要把这个标签去掉，邮件就不会再在Inbox中出现了——这就是Archive功能。 代收取邮件 这个功能很多国内邮箱也已经开发了，不过至少我用126邮箱的时候，从来没收取成功过。Gmail的收取功能是十分稳定的，从来没有出错（除了126十分傻X地把POP端口只开放给本地客户端导致收取失败）。 配合Label，可以给每个邮箱收取的邮件标上不同的标签不同的颜色，一目了然。Labs里的Multiple Inbox功能，还可以在Inbox页同时显示多个Inbox，完全让Gmail替代、超越本地客户端。 可以说，这个功能是邮箱迁移的利器，也是多邮箱用户必用的功能。 Prioirty Inbox 这个功能也是Google最近才推出的，效果相当不错。 它可以通过邮件的内容，自动判断这封邮件是不是“重要”邮件。如果是“重要”邮件，就会在Priority Inbox的最前面集中显示出来。 上学期当助教的时候，我的邮箱受到了各种邮件轰炸，这个功能帮了我大忙。准确率令人发指啊，和垃圾邮件过滤的准确率有的一拼。 垃圾邮件过滤 既然提到了，就来说说垃圾邮件过滤。 我这个Gmail邮箱也和其它邮箱一样，每天收到十来封甚至几十封垃圾邮件。但是，Gmail的垃圾邮件过滤系统真的强大到了一定程度。至今为止，我似乎还没有任何有用邮件被识别为垃圾邮件的记忆；而垃圾邮件的漏网率，大概也不到百分之一——其实一个月也没有一封漏网的。 这么强大的垃圾邮件过滤器，大概是我选用Gmail的根本原因吧。 联系人管理 这个没什么亮点，不过给人感觉不差就是了。和国内的邮箱比起来，这个联系人管理可谓简单得多，怎么看上手也不会比国内那些乱七八糟的联系人管理难吧。 内嵌Google Talk和Google Tasks Google服务之间的整合做的相当不错。这个不多说了，内嵌的Gtalk估计每个Gmail邮箱用户都用过吧。Tasks虽然我没有用，但是放在邮箱里绝对没有错，想想那么多人热衷的Outlook就知道。 和Android手机的同步 安卓手机会和Google服务有紧密结合度是理所当然的事情。我现在的Milestone，通讯录是和Google &#8230; <a href="http://sqybi.com/blog/archives/306">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>昨天在人人上发了个关于Gmail的状态，引发了热烈讨论。某同学表示不知道为什么有那么多人在用Gmail，然后瞬间蹦出N个回复提出了Gmail的种种优点。<br />
仔细想想，为什么Gmail这么吸引我呢？</p>
<p>很早以前，我的第一个邮箱是sohu邮箱，用户名我还记得，是jk041。真的是很早以前的事情了。之后几乎尝试过国内每一个著名邮箱（正如当初几乎尝试过国内每一个著名BSP），然后换到了新浪。再后来，126邮箱似乎率先推出了什么功能（好像是无限容量，我也记不太清了），于是转到了126邮箱，而且那个邮箱也持续用到今天。<br />
但是，实际上，现在的126邮箱对于我只是一个收垃圾邮件用的邮箱——所有网站的注册都用126的邮箱，然后私人的邮件都用Gmail。我已经忘了自己是什么时候开始用Gmail的，不过的确最开始的时候我也不觉得Gmail有什么好的功能，甚至觉得很难“上手”。不过某一次连续用了一个礼拜Gmail之后，我才发现原来这个邮箱真的这么优秀，国内没有任何一个邮箱能够与其比肩，甚至赶不上它的十分之一（国外估计也不会有吧？）。</p>
<p>这时我才发现，所谓很难“上手”，实际上只是迁移成本罢了，当初国内邮箱“上手”的时候，没有一个比Gmail更容易多少。Gmail已经在易用性和用户体验中间找到了一个十分良好的平衡点，国内邮箱互相的迁移成本低，是因为中国的网络产品“抄”的现象太严重，结果每个邮箱界面都一样，用起来感觉都一样，不一样的只剩下了域名。</p>
<p>扯淡扯太多了。那么回归正题，Gmail到底有哪些功能吸引了我呢？</p>
<p>---------- 以下是Gmail默认开启的功能 ----------</p>
<p><strong>界面布局</strong></p>
<p>之所以把这个放在第一个，是因为国内邮箱千篇一律的页面布局实在让人头疼。Gmail将Mail、Contacts和Tasks整合在了一起，对功能进行了分块。上面的搜索框也很有Google特色，用起来相当方便。通过Labs的功能，还可以对界面进行进一步改造（比如把Inbox分成多个，把Gtalk放到右边之类）。其实这个也不算太亮的亮点，但是用起来的确很舒服。</p>
<p><strong>标签管理</strong></p>
<p>这个是Gmail一个很核心的功能，可以说，如果不用这个功能，Gmail就浪费了一半。<br />
虽然标签管理本身并不能带给我们什么体验上质的飞跃，但是它可以和很多功能相互配合使用，比如代收取邮件、过滤器和Archive等。可以发现，这时标签功能才真正展现出它的实力，把一切都统一成标签，简洁明了，完全不是国内邮箱那样，一个文件夹列表，一个代收取的邮箱列表，大大限制了灵活性。</p>
<p><strong>Archive</strong></p>
<p>这个功能可以说完全依赖标签才得以实现。有的邮件可能已经没有什么用处了，或许是谈论某个project然后project已经完成，或许是向教授套磁然后失败了……不管怎样，这种邮件会有一种删也不是不删也不是的感觉。这时怎么办？Archive功能告诉你，你可以把它从inbox中完全隐藏掉，但是这个邮件不会被删除，想要读的时候，搜索功能可以帮你忙。<br />
这个功能的实现是，Inbox里的邮件都会被自动加上“Inbox”这样一个标签，只要把这个标签去掉，邮件就不会再在Inbox中出现了——这就是Archive功能。</p>
<p><strong>代收取邮件</strong></p>
<p>这个功能很多国内邮箱也已经开发了，不过至少我用126邮箱的时候，从来没收取成功过。Gmail的收取功能是十分稳定的，从来没有出错（除了126十分傻X地把POP端口只开放给本地客户端导致收取失败）。<br />
配合Label，可以给每个邮箱收取的邮件标上不同的标签不同的颜色，一目了然。Labs里的Multiple Inbox功能，还可以在Inbox页同时显示多个Inbox，完全让Gmail替代、超越本地客户端。<br />
可以说，这个功能是邮箱迁移的利器，也是多邮箱用户必用的功能。</p>
<p><strong>Prioirty Inbox</strong></p>
<p>这个功能也是Google最近才推出的，效果相当不错。<br />
它可以通过邮件的内容，自动判断这封邮件是不是“重要”邮件。如果是“重要”邮件，就会在Priority Inbox的最前面集中显示出来。<br />
上学期当助教的时候，我的邮箱受到了各种邮件轰炸，这个功能帮了我大忙。准确率令人发指啊，和垃圾邮件过滤的准确率有的一拼。</p>
<p><strong>垃圾邮件过滤</strong></p>
<p>既然提到了，就来说说垃圾邮件过滤。<br />
我这个Gmail邮箱也和其它邮箱一样，每天收到十来封甚至几十封垃圾邮件。但是，Gmail的垃圾邮件过滤系统真的强大到了一定程度。至今为止，我似乎还没有任何有用邮件被识别为垃圾邮件的记忆；而垃圾邮件的漏网率，大概也不到百分之一——其实一个月也没有一封漏网的。<br />
这么强大的垃圾邮件过滤器，大概是我选用Gmail的根本原因吧。</p>
<p><strong>联系人管理</strong></p>
<p>这个没什么亮点，不过给人感觉不差就是了。和国内的邮箱比起来，这个联系人管理可谓简单得多，怎么看上手也不会比国内那些乱七八糟的联系人管理难吧。</p>
<p><strong>内嵌Google Talk和Google Tasks</strong></p>
<p>Google服务之间的整合做的相当不错。这个不多说了，内嵌的Gtalk估计每个Gmail邮箱用户都用过吧。Tasks虽然我没有用，但是放在邮箱里绝对没有错，想想那么多人热衷的Outlook就知道。</p>
<p><strong>和Android手机的同步</strong></p>
<p>安卓手机会和Google服务有紧密结合度是理所当然的事情。我现在的Milestone，通讯录是和Google Contact同步的，然后会自动收取Gmail，可以把Gtalk当短信用，Google Calendar上记录了课程表……总之都是完美协作，感觉那叫一个爽。</p>
<p><span style="color: #ff0000;"><strong>会话式邮件</strong></span></p>
<p>最重要的功能差点忘掉了，感谢winsty提醒！Gmail的Conversation Mail是最重要的一个功能，也是最实用的功能。抛弃以前乱七八糟的各种Re，用会话的形式把re的邮件组合到一起，用户体验绝对一流！这也是我抛弃本地客户端转投网页版Gmail最重要的原因。</p>
<p>---------- 以下是Labs中的功能 ----------</p>
<p><strong>Message Sneak</strong></p>
<p>右键点击邮件可以预览。算是补充了一个Gmail缺少的功能吧。</p>
<p><strong>Undo Send</strong></p>
<p>很多邮箱都缺少的一个功能。邮件会延迟几秒发送，在此期间可以取消邮件的发送。万一点错了或者发现忘了加附件，可以直接Undo，不用重新发邮件解释。</p>
<p><strong>Google Calendar Gadget</strong></p>
<p>把Google日历嵌入到Gmail，Google Task都有了，日历怎么能没有！</p>
<p><strong>Google Docs Preview</strong></p>
<p>有这个功能可谓情理之中。对于各种文档，Gmail中可以直接调用Google Doc进行预览。<br />
只不过，因为某些众所周知的原因，Google Doc经常打不开就是了……</p>
]]></content:encoded>
			<wfw:commentRss>http://sqybi.com/blog/archives/306/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>[zz from Nxun.com] Windows7中的扫雷</title>
		<link>http://sqybi.com/blog/archives/263</link>
		<comments>http://sqybi.com/blog/archives/263#comments</comments>
		<pubDate>Sun, 21 Nov 2010 01:45:48 +0000</pubDate>
		<dc:creator>sqybi</dc:creator>
				<category><![CDATA[About Computer]]></category>
		<category><![CDATA[[Technology]]]></category>

		<guid isPermaLink="false">http://sqybi.com/blog/archives/263</guid>
		<description><![CDATA[以下内容转载自Nxun的blog：http://blog.nxun.com/archives/35#comment-215。 ------------------------------------人肉分隔线------------------------------------ 扫雷游戏(Minesweeper)，自从1981年 Windows 3.1 出现以来，此款游戏的流行程度从未减退。在此不对游戏的规则及策略作介绍，如果您真的不清楚这是什么，请自行询问身边的朋友。 本人最近就迷上了 Windows 7 中自带的扫雷游戏，很OUT是吧，冒着被喷的危险，与大家分享点有趣的见闻。 Windows 7 / Vista 中的扫雷游戏，与 Windows XP / 2000 / 98- 中的比起来，游戏体验终于有了质的提升，从清新醒目的配色到简洁明快的动画效果，可见微软在此还是倾注了一定的心血。 新版本的改动并不仅限于画面效果，一个重要的变化是地雷的布局算法。有经验的扫雷玩家可能都知道，在一局扫雷游戏中，第一个点开的方块一定不是地雷。这一点不用怀疑，因为这不是概率问题，一个设计良好的扫雷游戏不会让你直接点到雷上，它们或者在点开第一个方块后再布局地雷，或者把第一下点到的地雷换到其他地方去。在Win7新版本扫雷中，做出了更加人性化的改动，第一个点开的方块连同周围8个方块（如果有的话）保证都不是地雷，使用9*9雷数最多的自定义游戏也可以证实这一点。 在XP扫雷（高级）中点开的第一个方块 在Win7扫雷（高级）中点开的第一个方块 9*9雷数67的自定义游戏 这样做给玩家带来的好处是显而易见的，因为开局点开一个孤立的方块几乎没有任何价值。事实上微软考虑的可能更多，我随便在高级游戏中测试了几次，几乎每次第一下都会点开一大片区域（超过20块），稍微计算一下便可知道这种概率并不高，唯一合适的解释就是游戏“智能”的为玩家提供了一个舒适的开局。 这里还有一个有趣的小程序，如果您对本文第一张截图感觉好奇，可以试一下。在这里下载。 实现原理见作者的这篇文章。 ------------------------------------人肉分隔线------------------------------------ 上面提供的程序下载经我测试在我这里无法运行，inject后找不到某个模块，所以懒得再传到我blog上了。可能和我是64位有关，想要自己试一下的请去原文照下载链接。 其实这几天在和Nxun玩扫雷，既然他开始研究扫雷的布局算法了，那我看来要多看看解扫雷的算法了……总感觉可以转化为一个完整的数学模型来解……]]></description>
			<content:encoded><![CDATA[<ul>
<li>以下内容转载自Nxun的blog：<a href="http://blog.nxun.com/archives/35#comment-215">http://blog.nxun.com/archives/35#comment-215</a>。</li>
</ul>
<p>------------------------------------人肉分隔线------------------------------------</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2010/11/mine.png"><img style="display: inline" title="mine" alt="mine" src="http://sqybi.com/blog/wp-content/uploads/2010/11/mine_thumb.png" width="616" height="409" /></a></p>
<p>扫雷游戏(Minesweeper)，自从1981年 Windows 3.1 出现以来，此款游戏的流行程度从未减退。在此不对游戏的规则及策略作介绍，如果您真的不清楚这是什么，请自行询问身边的朋友。</p>
<p>本人最近就迷上了 Windows 7 中自带的扫雷游戏，很OUT是吧，冒着被喷的危险，与大家分享点有趣的见闻。</p>
<p>Windows 7 / Vista 中的扫雷游戏，与 Windows XP / 2000 / 98- 中的比起来，游戏体验终于有了质的提升，从清新醒目的配色到简洁明快的动画效果，可见微软在此还是倾注了一定的心血。</p>
<p>新版本的改动并不仅限于画面效果，<strong>一个重要的变化是地雷的布局算法</strong>。有经验的扫雷玩家可能都知道，在一局扫雷游戏中，第一个点开的方块一定不是地雷。这一点不用怀疑，因为这不是概率问题，一个设计良好的扫雷游戏不会让你直接点到雷上，它们或者在点开第一个方块后再布局地雷，或者把第一下点到的地雷换到其他地方去。在Win7新版本扫雷中，做出了更加人性化的改动，第一个点开的方块连同周围8个方块（如果有的话）保证都不是地雷，使用9*9雷数最多的自定义游戏也可以证实这一点。</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2010/11/mine_in_xp.png"><img style="display: inline" title="mine_in_xp" alt="mine_in_xp" src="http://sqybi.com/blog/wp-content/uploads/2010/11/mine_in_xp_thumb.png" width="506" height="371" /></a>    <br />在XP扫雷（高级）中点开的第一个方块</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2010/11/mine_in_win7_a.png"><img style="display: inline" title="mine_in_win7_a" alt="mine_in_win7_a" src="http://sqybi.com/blog/wp-content/uploads/2010/11/mine_in_win7_a_thumb.png" width="616" height="409" /></a>    <br />在Win7扫雷（高级）中点开的第一个方块</p>
<p><a href="http://sqybi.com/blog/wp-content/uploads/2010/11/mine_in_win7_b.png"><img style="display: inline" title="mine_in_win7_b" alt="mine_in_win7_b" src="http://sqybi.com/blog/wp-content/uploads/2010/11/mine_in_win7_b_thumb.png" width="238" height="283" /></a>    <br />9*9雷数67的自定义游戏</p>
<p>这样做给玩家带来的好处是显而易见的，因为开局点开一个孤立的方块几乎没有任何价值。事实上微软考虑的可能更多，我随便在高级游戏中测试了几次，几乎每次第一下都会点开一大片区域（超过20块），稍微计算一下便可知道这种概率并不高，唯一合适的解释就是游戏“智能”的为玩家提供了一个舒适的开局。</p>
<p>这里还有一个有趣的小程序，如果您对本文第一张截图感觉好奇，可以试一下。<strike>在这里下载。     <br /></strike>实现原理见作者的<a href="http://cnbeta2004.blog.163.com/blog/static/602313402010820101425385/">这篇文章</a>。</p>
<p>------------------------------------人肉分隔线------------------------------------</p>
<p>上面提供的程序下载经我测试在我这里无法运行，inject后找不到某个模块，所以懒得再传到我blog上了。可能和我是64位有关，想要自己试一下的请去原文照下载链接。</p>
<p>其实这几天在和Nxun玩扫雷，既然他开始研究扫雷的布局算法了，那我看来要多看看解扫雷的算法了……总感觉可以转化为一个完整的数学模型来解……</p>
]]></content:encoded>
			<wfw:commentRss>http://sqybi.com/blog/archives/263/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fedora 10 Installation Notes (FINote) (之三) -- 开始安装 Fedora</title>
		<link>http://sqybi.com/blog/archives/113</link>
		<comments>http://sqybi.com/blog/archives/113#comments</comments>
		<pubDate>Sat, 03 Jan 2009 18:10:38 +0000</pubDate>
		<dc:creator>sqybi</dc:creator>
				<category><![CDATA[About Computer]]></category>
		<category><![CDATA[[Technology]]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[FINote]]></category>
		<category><![CDATA[Grub]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[配置]]></category>

		<guid isPermaLink="false">http://sqybi.com/blog/archives/113</guid>
		<description><![CDATA[文章来自 SQYBI.com, 作者为 sqybi; 在没有特殊说明的情况下, 允许一切非商业性的署名转载和署名再演绎, 转载请保留此行文字; 如有特殊说明, 以说明内容为准. FINote系列文章: Fedora 10 Installation Notes (FINote) (之一) -- My Fedora Story Fedora 10 Installation Notes (FINote) (之二) -- Fedora 安装笔记 Fedora 10 Installation Notes (FINote) (之三) -- 开始安装 Fedora 本文梗概: FINote &#8230; <a href="http://sqybi.com/blog/archives/113">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>文章来自 SQYBI.com, 作者为 sqybi; 在没有特殊说明的情况下, 允许一切非商业性的署名转载和署名再演绎, 转载请保留此行文字; 如有特殊说明, 以说明内容为准.</p>
<p>FINote系列文章:</p>
<blockquote><p><a href="http://sqybi.com/blog/archives/103">Fedora 10 Installation Notes (FINote) (之一) -- My Fedora Story</a>    <br /><a href="http://sqybi.com/blog/archives/104">Fedora 10 Installation Notes (FINote) (之二) -- Fedora 安装笔记</a>    <br /><strong>Fedora 10 Installation Notes (FINote) (之三) -- 开始安装 Fedora</strong></p></blockquote>
<p>本文梗概:</p>
<blockquote><p>FINote 系列的第三篇文章.      <br />文章介绍了安装 Fedora 的整个过程, 简单地描述了安装过程中每一步的选项如何去选择.</p>
</blockquote>
<p>刚才跑到 Fedora 下面写一个网络流的程序, 顺便调了调 Code::Blocks. 本来想写一下 C::B 的调配过程的, 突然就想起来 FINote 一直停下没写. 于是立马切到 Windows 下面, 开了 WLW 来写 FINote.    <br />这一部分内容在帮助 bw 和 jl 两位同学安装 Fedora 的时候就已经写好了, 现在做的只不过是改改格式发上来.</p>
<p>文章只描述了从分区到安装结束的整个过程和配置方法, 并没有讲解如何对 Fedora 进行进一步的配置. 按照本文的方法做下去, 最终只会得到一个刚刚可以运行的 Fedora, 想要调的顺手还有很长的路要走.    <br />发现当初装 Fedora 的时候遇到的问题都快忘记了, 这样可不好啊...</p>
<p>废话少说, 来看安装 Fedora 的过程.</p>
<p>首先, 需要用 PartitionMagic 之类的软件为 Fedora 分区. 当然这是在已经安装了 XP 而又希望双系统共存的情况下, 如果不是这样的话, 可以直接让 Fedora 去格式化整个硬盘. 分区的时候, 只需要改变一个已有分区的大小, 使得它分出一些空闲的空间就可以, 也就是 &quot;未被使用的空间&quot;. 没有必要对这些空间格式化 (当然做了也无妨), 因为 Fedora 在安装过程中会把它们格式化的.    <br />给 Fedora 的分区大小大致为 20 至 50G 即可 (包括 swap), 我分了30G. 20G 可能有点小, 不过40G足够了.     <br />这里再次友情提示, 使用 PartitionMagic 的时候, 一定要下载英文原版的 -- <strong>中文版的 PartitionMagic 可能会导致分区失败最终致使硬盘数据丢失</strong>, 切记! 另外<strong>最好在分区前做好数据备份</strong>!</p>
<p>然后还需要下载 Fedora 的 LiveCD (或者 LiveDVD), 点击 <a href="http://fedoraproject.org/zh_CN/get-fedora" target="_blank">这里</a> 打开 Fedora 官网的下载页面.     <br />下载完成后刻盘, 接下来就是重启, 从光盘启动 (如果不能从光盘启动需要配置 BIOS 为优先光盘启动, 这里不再赘述).</p>
<p>Fedora 的 LiveCD 在配置稍差的电脑上加载还是很慢的, 加载过程中可能会卡在一个只有鼠标的画面很久, 不要一着急就重启了, 加载是一直在进行的.    <br />等到出现登陆界面的时候, 在下方将语言更改为汉语 (当然你也可以选择默认的英文), 接下来用默认帐户登陆.     <br />然后可能还会卡一段时间才能看到桌面图标和 Gnome 的界面, 在 SweetSc 的机器上整个过程花了接近 20 分钟.</p>
<p>等两个任务栏也加载完毕, 安装就可以开始了. 和诸多 Linux 发行版一样, Fedora 的 LiveCD 的安装方法也是双击桌面上的 &quot;安装到硬盘&quot;.</p>
<p>刚开始有个欢迎界面, Next 掉.</p>
<p>接下来选择键盘布局, 如果没有特殊需要直接用默认的, 继续 Next.</p>
<p>下面需要为你的计算机起一个名字, 应该是在网络上显示的名字. 这个选项以后可以随时更改, 所以随便打一个然后 Next.</p>
<p>下一步时间设置, 对于我来说选择 &quot;Asia / Shanghai&quot; 的时区, 你也可以选择你所在的时区.    <br />这一步很关键, 下面有个 &quot;系统使用 UTC 时间&quot; 的选项默认是选中的, 如果你不希望你的时钟显示的时间比北京时间早 8 个小时, 那么<strong>把这项取消选择</strong>吧. 别的没有什么了.</p>
<p>需要输入 root 的密码了, root 用户在以后需要获得各种高权限的时候会用到, 很像 XP 里面的 Administrator, 但是强大得多. 这个密码一定要记牢.</p>
<p>接下来的一步是最关键的一步了, 也就是为硬盘分区.    <br />首先要选择分区方式, 如果你不希望整个硬盘上的数据都被抹掉然后重新分区的话, 还是不要用默认的了, 选择 &quot;建立自定义的分区结构&quot; 吧.     <br />然后在下面的页面选 &quot;新建&quot;, 文件系统类型为 ext3, 挂载点为 &quot;/&quot;, 大小比在第一步中分出去的空闲空间的大小稍小 1~2 个 G (这 1~2G 用来挂载 swap 分区, 也就是交换区, 相当于 XP 的虚拟内存), 确定.     <br />再次点击 &quot;新建&quot; (这次要挂载交换区了), 文件系统类型改为 swap, 大小不要更改, 只需要在下面的 &quot;其他大小选项&quot; 中选中 &quot;使用全部可用空间&quot;. 确定.     <br />然后就可以进入下一步了. 当然如果你愿意为 &quot;/home&quot; 之类的东西也都挂载到指定的分区上, 那么可以自己设置, 这里不多说.</p>
<p>这时会弹出一个对话框确认操作, 选择 &quot;将修改写入磁盘&quot; 即可.</p>
<p>然后就是配置 Grub, 不知道你是不是见过 Windows 装多系统的时候那个选择系统的界面, Grub 基本也就是干这个用的. 只不过 Windows 那个引导器比较弱不能引导 Linux, 而 Grub 可以引导 Windows, 所以我们要用 Grub.    <br />首先, 选上 &quot;在 /dev/sda 中安装引导装载程序&quot; (我安装的时候是默认选中的), 然后在下面的 &quot;引导装载程序操作系统列表&quot; 中的 &quot;默认&quot; 项选择一个你准备常用的操作系统.     <br />这样配置的 Grub 可能不合你的心意, 在以后的文章中我会提到如何修改 Grub 的启动顺序啥的.     <br />配置好之后继续 Next, 安装就会开始~</p>
<p>耐心的等待...</p>
<p>安装结束之后, 你会发现系统竟然没有自己重启!    <br />在屏幕最上面一行的 &quot;系统&quot; 菜单选择 &quot;关机&quot;, 在弹出的对话框选择 &quot;重启&quot;, 进行重新启动.     <br />光盘会在重启的时候自动弹出, 不用管它.</p>
<p>第一次启动系统的时候, 还会让你稍微配置一下, 这个配置很弱智, 没什么可说的.</p>
<p>配置完成之后, 一个 &quot;能够运行的 Fedora&quot; 就诞生了.</p>
<p>后面的文章, 我会开始讲 Fedora 下面的一些软件的安装和配置了. 在这之前, 请先阅读:    <br /><a href="http://fedora-zh.googlecode.com/files/Fedora_10_Installation_Guide_Chinese.pdf" target="_blank">Fedora 10 Installation Guide (Chinese)</a>     <br />这篇文章是我见过的最好的介绍 Fedora 下面一些基本软件的安装配置以及 Fedora 配置的文章了. 当然里面的内容有一些也不一定都要照做, 你可以自己尝试一下.     <br />这篇文章中有的东西, 在后文我不会再次介绍或者只会一带而过.</p>
]]></content:encoded>
			<wfw:commentRss>http://sqybi.com/blog/archives/113/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>菊子曰 Alpha 4 试用报告</title>
		<link>http://sqybi.com/blog/archives/109</link>
		<comments>http://sqybi.com/blog/archives/109#comments</comments>
		<pubDate>Sat, 27 Dec 2008 14:09:22 +0000</pubDate>
		<dc:creator>sqybi</dc:creator>
				<category><![CDATA[About Computer]]></category>
		<category><![CDATA[[Technology]]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[菊子曰]]></category>
		<category><![CDATA[试用]]></category>
		<category><![CDATA[软件]]></category>

		<guid isPermaLink="false">http://sqybi.com/blog/archives/109</guid>
		<description><![CDATA[什么是菊子曰? (via) 菊子曰，一款博客离线发布软件，除了能够满足您离线写文章、插入图片、自动上传图片到多个网络相册或博客本身的自带空间等基本的功能，最主要是您能够完整保留了自己所有网志的备份!这样的话，如果哪一天您打算为自己的博客建立起个人品牌而尝试架设独立博客服务器时，便可以轻而易举的立刻将过去所有的思想精华发布到新的独立域名博客，而无需为此而伤透了脑筋。在建立自有博客品牌的那一天，您还可以通过菊子曰独特的同步功能，同时更新还托管在其他的博客网站上的博客，并且也一拼更新您自有品牌域名的博客，以方便还未及时通知到的读者可以有比较长的时间过渡到您的自有品牌博客。正是有了这些方便，您可以把自己的时间更多的放在创作上，为您的读者准本更精彩的博客对话。 除了博客，在新的 Web 2.0 时代里，菊子曰还能为您整合那一些社会化媒体功能呢？整合了博客，也就不能不提一提微博客（Microblog）了。在您还未为自己下一篇博客充分厘清自己的思绪之前，您大可以以微博客做为捕捉每个瞬间的灵感，并且以此作为未来某篇精彩论述的起点！就在您的思绪点滴地在微博客上形成的同时，您已经开始与您的读者进行对话了！ 在菊子曰还是 Alpha 3 的时候, 我就已经申请了这个软件的试用. 当时菊子曰的工作人员提到 &#34;最后，由于目前还是属于内测阶段，也请您不要将软件下载资料让其他人知道&#34;, 所以我回复了邮件问是不是可以在blog上写菊子曰的试用感受. 工作人员的回答是(没有改错别字): 另外，由于 Alpha 4 也即将发布了，所以不知道您是否愿意再等多两个星期，才发布最新版本的使用感受呢？因为最新的哦版本添加了很多新功能，包括发布前的网志预览等。 然后今天去邮箱, 发现收到了菊子曰工作人员的邮件, 说 Alpha 4 已经发布. 立刻兴冲冲地下载, 安装. 虽然界面和以前一样, 但是从邮件里附带的 what's new 就可以看出这个版本有很多变化. 添加了新浪、百度与网易博客的支持。其他门户博客的支持将会陆续出现在以后的测试版本里。 解决了 Windows Live Spaces 与 BlogBus &#8230; <a href="http://sqybi.com/blog/archives/109">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="Published By Juziyue-[4]1_3BC457DAF73740B6B7280AF3E39AD67C_E375120E3F94408DA28BAEC74228B606">
<p>什么是菊子曰? (<a href="http://www.juxianzi.com/product/juziyue/" target=_blank>via</a>)</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px"><p>菊子曰，一款博客离线发布软件，除了能够满足您离线写文章、插入图片、自动上传图片到多个网络相册或博客本身的自带空间等基本的功能，最主要是您能够完整保留了自己所有网志的备份!这样的话，如果哪一天您打算为自己的博客建立起个人品牌而尝试架设独立博客服务器时，便可以轻而易举的立刻将过去所有的思想精华发布到新的独立域名博客，而无需为此而伤透了脑筋。在建立自有博客品牌的那一天，您还可以通过菊子曰独特的同步功能，同时更新还托管在其他的博客网站上的博客，并且也一拼更新您自有品牌域名的博客，以方便还未及时通知到的读者可以有比较长的时间过渡到您的自有品牌博客。正是有了这些方便，您可以把自己的时间更多的放在创作上，为您的读者准本更精彩的博客对话。<br/> 除了博客，在新的 Web 2.0 时代里，菊子曰还能为您整合那一些社会化媒体功能呢？整合了博客，也就不能不提一提微博客（Microblog）了。在您还未为自己下一篇博客充分厘清自己的思绪之前，您大可以以微博客做为捕捉每个瞬间的灵感，并且以此作为未来某篇精彩论述的起点！就在您的思绪点滴地在微博客上形成的同时，您已经开始与您的读者进行对话了！</p>
</blockquote>
<p>在菊子曰还是 Alpha 3 的时候, 我就已经申请了这个软件的试用. 当时菊子曰的工作人员提到 &quot;最后，由于目前还是属于内测阶段，也请您不要将软件下载资料让其他人知道&quot;, 所以我回复了邮件问是不是可以在blog上写菊子曰的试用感受. 工作人员的回答是(没有改错别字):</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px"><p>另外，由于 Alpha 4 也即将发布了，所以不知道您是否愿意再等多两个星期，才发布最新版本的使用感受呢？因为最新的哦版本添加了很多新功能，包括发布前的网志预览等。</p>
</blockquote>
<p>然后今天去邮箱, 发现收到了菊子曰工作人员的邮件, 说 Alpha 4 已经发布. 立刻兴冲冲地下载, 安装. 虽然界面和以前一样, 但是从邮件里附带的 what's new 就可以看出这个版本有很多变化.</p>
<ol>
<li>添加了新浪、百度与网易博客的支持。其他门户博客的支持将会陆续出现在以后的测试版本里。</li>
<li>解决了 Windows Live Spaces 与 BlogBus 的 20 篇网志备份限制。并且添加了 CSDN 的备份支持。</li>
<li>支持了更多的独立博客服务器，请参见：<a href="http://www.juxianzi.com/product/juziyue/help/partner.html">http://www.juxianzi.com/product/juziyue/help/partner.html</a></li>
<li>添加了以您的博客模板来预览网志的功能。</li>
<li>添加了 WordPress 的 slug 自定义网志链接名与密码保护。</li>
<li>取消了“集合”的管理，取而代之的是“状态”、“标签”与“分类”管理。</li>
<li>重新调整过网志编辑器“开始”工具栏的按钮。</li>
<li>数据库不再强制输入密码保护，而且支持自动登录。</li>
<li>在网志编辑器里的回车将会默认为 p 标签，不再是以前的 div 标签。</li>
<li>用户现在可以禁用网志同步功能。这样的话，每一篇发布的网志将不再附带一个菊子曰的网志同步辨识符。</li>
<li>添加了网志发布后通知 Ping 服务器的功能。</li>
<li>添加了文章里查找与替换的功能。</li>
<li>添加了网志汇整的链接库，以便您引用过去发布过的网志。</li>
<li>添加了备份网志的功能。如果您在创建博客帐户时没有备份网志，现在可以通过这个功能备份您所有的网志了。</li>
<li>添加了发布网志后自动启动浏览器来查看刚发布网志的功能。</li>
<li>添加了刷新网络相册的功能。</li>
<li>添加了自定义默认插入图片来源的功能，也就是您可以指定每一次插入图片时都是从本地图片插入，还是通过网络相册插入，而不需要像以前的版本从向导页面开始。</li>
<li>记住最后 5 个登录过的数据库。</li>
<li>其他难以形容的功能增强以及错误的修正。由于时间或一些少数的错误我们无法复制到的关系，所以无法在这个版本里及时修正所有的问题，但是我们还是会继续关注的。</li>
</ol>
<p>其中第9个是我的建议. 另外我还有几个小建议比如 HTML 编辑器的字体问题还有 WYSIWYG 编辑器的名称应该改掉, 都被采纳了.<br/> 不过还有一个支持 WordPress 的语法高亮插件的建议暂时没有见到更新, 不过这东西的可行性啥的我也不知道有多大, 所以还是不强求了.<br/> 总之, 菊子曰 Aplha 4 修复的 bug 的确都是能够极高地增进用户体验的 -- 所以我也决定从今天开始正式投入菊子曰的怀抱, WLW 再见了...<br/> 不过这篇菊子曰试用报告毕竟要一边用一边写, 用菊子曰写明显不合适, 于是这篇文章是用 Notepad 写成的.<br/> 为了避免 &quot;多图杀猫&quot;, 这次就不上图了, 如果想用的话请自己到<a href="http://www.juxianzi.com/downloads/" target=_blank>这里</a>申请内测资格~</p>
<p>首先安装不用说了, 第一次启动会要求新建数据库, 而你也可以选择一个已经存在的数据库 (如果有的话). 接下来设置密码自动登录啥的, 没什么可说的. 然后登录 (这里登录的是数据库, 和 blog 没有关系, 一个数据库可以看作一个本地用户, 每个本地用户里还可以维护多个 blog 用户).<br/> 登录之后一眼就看出来界面用了 Ribbon, 而事实正是这样.</p>
<p>WP 的 blog 用户默认都是用 WP 自己的功能维护图片的, 这和 Windows Live Writer 一样. 但是, 菊子曰强大就强大在它还能够支持很多相册 (现在支持的相册貌似不是很多), 当然还有 Micro-blog. 你可以选择一个相册作为自己的图片储存空间, 当然也可以选择一个 FTP 来储存你的文件.<br/> 编辑器是新窗口打开的, 依然是 Ribbon, 说实话没有 WLW 好看, 但是已经很不错了.</p>
<p>剩下的新功能也没啥了... 用起来还是比较顺手的, 虽然用惯了 WLW 找一些设置可能会麻烦一些.<br/> 如果你加入了菊子曰的内测活动 (加入时需要填写你是怎么知道菊子曰的, 欢迎填写本 blog~), 希望你能够为这个国产的离线 blog 软件积极地找 bug 提建议, 毕竟这东东还在发展过程中, 前途不可估量啊...<br/> btw, 根据网站上的招人启示, 貌似菊子曰是用 Delphi 开发的, 当然我是去不了开发组了...</p>
<p>没想到所谓的试用体验写了这么几句话就没了... 最近太懒了, 不过玩 Spore 倒是挺积极... 不行不行, 不能再这样了...<br/> 那就写到这儿吧... 各位晚安.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://sqybi.com/blog/archives/109/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Fedora 10 Installation Notes (FINote) (之二) -- Fedora 安装笔记</title>
		<link>http://sqybi.com/blog/archives/104</link>
		<comments>http://sqybi.com/blog/archives/104#comments</comments>
		<pubDate>Wed, 17 Dec 2008 08:47:33 +0000</pubDate>
		<dc:creator>sqybi</dc:creator>
				<category><![CDATA[About Computer]]></category>
		<category><![CDATA[[Technology]]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[FINote]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PartitionMagic]]></category>
		<category><![CDATA[SCIM]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[巨蟒]]></category>

		<guid isPermaLink="false">http://sqybi.com/blog/archives/104</guid>
		<description><![CDATA[文章来自 SQYBI.com, 作者为 sqybi; 在没有特殊说明的情况下, 允许一切非商业性的署名转载和署名再演绎, 转载请保留此行文字; 如有特殊说明, 以说明内容为准. FINote系列文章: Fedora 10 Installation Notes (FINote) (之一) -- My Fedora Story Fedora 10 Installation Notes (FINote) (之二) -- Fedora 安装笔记 Fedora 10 Installation Notes (FINote) (之三) -- 开始安装 Fedora 本文梗概: 虽然这篇文章的名字和整个系列文章的名字相同, &#8230; <a href="http://sqybi.com/blog/archives/104">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>文章来自 SQYBI.com, 作者为 sqybi; 在没有特殊说明的情况下, 允许一切非商业性的署名转载和署名再演绎, 转载请保留此行文字; 如有特殊说明, 以说明内容为准.</p>
<p>FINote系列文章:</p>
<blockquote><p><a href="http://sqybi.com/blog/archives/103">Fedora 10 Installation Notes (FINote) (之一) -- My Fedora Story</a>      <br /><strong>Fedora 10 Installation Notes (FINote) (之二) -- Fedora 安装笔记       <br /></strong><a href="http://sqybi.com/blog/archives/113">Fedora 10 Installation Notes (FINote) (之三) -- 开始安装 Fedora</a></p>
</blockquote>
<p>本文梗概:</p>
<blockquote><p>虽然这篇文章的名字和整个系列文章的名字相同, 但是这篇文章没有任何技术上的价值, 它只是记录了我安装 Fedora 的详细过程 (甚至有每一步的具体时间记录). 只是希望, 这个安装过程能够给以后安装 Fedora 的童鞋们一点小小的帮助.</p>
</blockquote>
<p>在安装 Fedora 的过程中, 我一直在随手记录每一个事件发生的时间. 从开始分区, 决定 Linux 版本到最终安装配置, 每一步完成的时间都有记录. 虽然有很多琐碎的内容, 但是还是希望能够对这篇文章的读者有所帮助.</p>
<p><strong>2008-12-13 21:55</strong> 为移动硬盘腾地方    <br />使用 PartitionMagic 8.0 (后文简写为 PQ) .</p>
<p><strong>2008-12-13 22:53</strong> 备份部分文件</p>
<p><strong>2008-12-13 23:24</strong> 决定安装 Fedora    <br />在 Twitter 上询问安装什么 Linux 版本合适.    <br />备选版本有: Fedora, OpenSuSE, Ubuntu 等.</p>
<p><strong>2008-12-13 23:58</strong> 备份完成    <br />此时考虑购入一个 500G 硬盘, 事实证明并不需要.</p>
<p><strong>2008-12-14 00:08</strong> 重新分区    <br />一边吃瓜子一边等 PQ 重新分区.</p>
<p><strong>2008-12-14 00:28</strong> C盘出现问题    <br />因为我用的是 PQ 8.0 的中文版, 而据网上说 PQ 8.0 中文版十分不稳定, 所以会出现分区出错. 所以, 千万不要用中文版的 PQ 8.0!</p>
<p><strong>2008-12-14 00:35</strong> 系统挂掉    <br />实际上, 在PQ分区失败之后, 或许还有恢复的机会. 可是当我运行 chkdsk 修复硬盘的时候, 屏幕上一直在不断地重复显示同一句话, &quot;正插入文件25的索引$0中的索引项&quot;, 就以为死循环掉了, 手动结束了 chkdsk. 但实际上, 它是正在修复硬盘的! 修复的时间会很长, 而且修复的时候会一直输出同样的一句话. 手动结束 chkdsk, 会导致分区表进一步损坏! 告诫童鞋们, 一定要耐心等待!</p>
<p><strong>2008-12-14 00:53</strong> 拆卸硬盘 准备装到移动硬盘盒上</p>
<p><strong>2008-12-14 00:58</strong> 拆卸完毕 安装到移动硬盘盒 准备找回数据</p>
<p><strong>2008-12-14 01:18</strong> 在老爸的电脑上下载 EasyRecovery</p>
<p><strong>2008-12-14 01:34</strong> 老爸的电脑装不了 msi 文件 重新安装 Windows Installer</p>
<p><strong>2008-12-14 01:50</strong> 依然无法安装 msi 文件</p>
<p><strong>2008-12-14 02:22</strong> 发现系统挂掉的最主要问题 (上述 chkdsk 的问题) 重新进行 chkdsk</p>
<p><strong>2008-12-14 02:23</strong> 电脑跑着 chkdsk 我去睡觉</p>
<p><strong>2008-12-14 02:38</strong> 突然想起来 Fedora 还没下 爬起来到老爸的电脑上拖了一个 Fedora</p>
<p><strong>2008-12-14 02:42</strong> 继续睡觉</p>
<p><strong>2008-12-14 08:17</strong> 起床 发现硬盘修复完毕</p>
<p><strong>2008-12-14 10:27</strong> 修复不是太成功    <br />当前分区情况为: 主分区 50G, 逻辑分区分别为 70G 和 30G.    <br />因为 Windows 如果不安装在主分区比较麻烦 (装 Windows 时才知道的), 所以决定把 50G 的主分区给 Windows, 而 30G 的扩展分区分给 Fedora.</p>
<p><strong>2008-12-14 10:40</strong> 光盘启动出现问题    <br />屏幕上显示一句话 &quot;ISOLINUX 3.61 2008-02-03 Copyright(C) 1994-2008 H. Peter Anrin&quot;, 查阅资料+问人之后, 确定是光盘刻废了.</p>
<p><strong>2008-12-14 10:47</strong> 路由器出问题... faint</p>
<p><strong>2008-12-14 11:56</strong> 重新刻光盘</p>
<p><strong>2008-12-14 12:06</strong> 又一次刻废了一张盘</p>
<p><strong>2008-12-14 13:24</strong> 还是不行 准备买新刻录机    <br />使用我最喜欢的 ONES 刻录前检测+最低速刻录 (4x 速, 我的破 CD combo 的最高速是10x)+刻录后校验,校验出错,基本认为是刻录机坏掉了.</p>
<p><strong>2008-12-14 13:43</strong> 找人帮忙刻盘    <br />因为时间比较仓促, 所以还是决定先不买刻录机, 而是找人帮忙刻盘. 电话联系了 SweetSc 同学, 他很热心地答应了 (本来很感谢他都高三了还抽出时间帮我刻盘... 到了他家才发现, 原来他在玩游戏...). 于是骑车去他家刻盘.</p>
<p><strong>2008-12-14 15:26</strong> 成功刻盘    <br />在 SweetSc 的机器上测试了一下, 因为他的机器配置比较差, 所以卡在一个仅能显示鼠标的画面很长时间... 还是需要有耐心...</p>
<p><strong>2008-12-14 15:54</strong> 回到家 开始装XP    <br />因为先装 Fedora 再装 XP 还需要修复 grub, 所以先装 XP 再装 Fedora</p>
<p><strong>2008-12-14 17:05</strong> 弄清楚了 Windows 必须装在主分区    <br />按照以前的分配, 50G 的主分区给 Windows</p>
<p><strong>2008-12-14 17:11</strong> 正式安装开始    <br />使用了深度的 XP SP3 安装盘 (而没有用手头正版的 Windows, 因为安装太慢), 大概 20min 左右, 安装结束. 然后稍稍配置了一下 Windows, 安了几个常用软件.</p>
<p><strong>2008-12-14 19:08</strong> Windows 配置基本完成 重启装 Linux</p>
<p><strong>2008-12-14 19:29</strong> 安装完毕    <br />速度比较快 (除了 Live CD 加载太慢)</p>
<p><strong>2008-12-14 20:16</strong> 初步配置完毕    <br />按照 Fedora 10 Installation Guide Chinese 配置</p>
<p><strong>2008-12-14 22:00</strong> yum update 完毕</p>
<p><strong>2008-12-15 00:04</strong> 基本装完 重启</p>
<p><strong>2008-12-15 00:45</strong> compiz 配置完毕 再次重启</p>
<p><strong>2008-12-15 01:07</strong> scim-python 出问题 卸载了</p>
<p>-----------------------我是分割线-----------------------</p>
<p>整个安装笔记, 到这里基本就结束了. 从下一篇文章开始, 就要进入正题了.</p>
<p>安装 Fedora 10 实际上真的是挺痛苦的过程, 比如在我的影响下安装了 Linux 的 molebo 和 rupxup 两位同学, 遇到了一些让我觉得十分奇怪的问题. 但无论如何, 问题总是要去解决的.   <br />或许解决问题的乐趣, 远大于顺利地配置好一台 Linux 的乐趣, 至少对于我来说是这样的.</p>
<p>笔记的最后提到, 我遇到了一个安装 scim-python (巨蟒输入法) 的小问题, 似乎 &quot;yum install scim-python*&quot; 会导致安装之后使用输入法的时候系统锁死 (即使不输入中文也会锁死), 需要禁用输入法并卸载才能解决. 所以不能随便用通配符安装package啊...</p>
]]></content:encoded>
			<wfw:commentRss>http://sqybi.com/blog/archives/104/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Fedora 10 Installation Notes (FINote) (之一) -- My Fedora Story</title>
		<link>http://sqybi.com/blog/archives/103</link>
		<comments>http://sqybi.com/blog/archives/103#comments</comments>
		<pubDate>Tue, 16 Dec 2008 17:52:54 +0000</pubDate>
		<dc:creator>sqybi</dc:creator>
				<category><![CDATA[About Computer]]></category>
		<category><![CDATA[[Technology]]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[FINote]]></category>
		<category><![CDATA[IRC]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OIBH]]></category>
		<category><![CDATA[Windows Live Writer]]></category>
		<category><![CDATA[安装]]></category>
		<category><![CDATA[配置]]></category>

		<guid isPermaLink="false">http://sqybi.com/blog/archives/103</guid>
		<description><![CDATA[文章来自 SQYBI.com, 作者为 sqybi; 在没有特殊说明的情况下, 允许一切非商业性的署名转载和署名再演绎, 转载请保留此行文字; 如有特殊说明, 以说明内容为准. FINote系列文章: Fedora 10 Installation Notes (FINote) (之一) -- My Fedora Story Fedora 10 Installation Notes (FINote) (之二) -- Fedora 安装笔记 Fedora 10 Installation Notes (FINote) (之三) -- 开始安装 Fedora 本文梗概: 本文为 &#8230; <a href="http://sqybi.com/blog/archives/103">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>文章来自 SQYBI.com, 作者为 sqybi; 在没有特殊说明的情况下, 允许一切非商业性的署名转载和署名再演绎, 转载请保留此行文字; 如有特殊说明, 以说明内容为准.</p>
<p>FINote系列文章:</p>
<blockquote><p><strong>Fedora 10 Installation Notes (FINote) (之一) -- My Fedora Story       <br /></strong><a href="http://sqybi.com/blog/archives/104">Fedora 10 Installation Notes (FINote) (之二) -- Fedora 安装笔记</a>      <br /><a href="http://sqybi.com/blog/archives/113">Fedora 10 Installation Notes (FINote) (之三) -- 开始安装 Fedora</a></p>
</blockquote>
<p>本文梗概:</p>
<blockquote><p>本文为 FINote 系列的第一篇文章, 基本没有任何技术性内容.     <br />介绍了笔者决定安装 Linux 以及选择 Linux 发行版的过程, 在安装过程中给予笔者帮助的人, 个人总结的成功安装 Linux 的几个条件.</p>
</blockquote>
<p>首先要承认, &quot;My Fedora Story&quot; 这个标题只是个噱头.</p>
<p>可能身边的人都已经发现了, 这段时间我一直没怎么上网. 因为这几天一直在折腾 Fedora 10, 直到今天终于基本折腾完毕了.   <br />折腾的过程中虽然基本来说都很顺利, 但是还是遇到了大大小小的不少问题. 而身边的很多人也给予了我很大的帮助, 为了能够让以后安装 Fedora 的童鞋们轻松一些, 所以才想到了写这个 FINote . 虽然在安装 Fedora 的时候用一个本子随时记了 note, 但是总结起来仍然很费力. 本来想写一个一步一步的教程, 现在看来不太现实.    <br />于是,我决定将它写成一系列文章. 前一部分会是我安装过程的一个小总结之类的东西, 后面则会更多的写成一个 FAQ 的形式, 介绍安装过程中遇到的一些小 trick 以及 &quot;xx软件怎么安装&quot; 的问题.    <br />系列会写几部分我也说不准, 希望一直写下去吧. 过段时间配置好了 TeX 说不定会同步发布 TeX 版本.</p>
<p>我以前曾经三次尝试安装 Ubuntu, 最后均以失败告终, 失败的原因也都是驱动问题. 而这次安装 Fedora 10, 驱动问题竟然十分轻易地就解决了, 这是出乎我的意料的, 也使得我有信心投入更多的时间到其它项目的配置上.   <br />这里插一句, 我个人认为 Fedora 比 Ubuntu 更易用一些, 但是因为这两个发行版的确很相像, 所以实际上还可以认为它们是<strong>不相上下</strong>的. 所以也请不要问我 &quot;你为什么觉得 Fedora 更易用&quot; 的这种无聊问题, 觉得一个东西好不需要什么理由 -- 我并没有将 Fedora 强制推广给任何人, 这只是一个建议.</p>
<p>一切从前几天一个偶然的想法开始. 恰逢我十分无聊, 突然想起了自己安装 Ubuntu 失败的几次经历, 然后就突然决定要好好的装一次 Linux. 于是, 就有了 Twitter 上的这句话:</p>
<blockquote><p><strong>sqybi</strong> 给硬盘腾地方,准备装Linux,这次要动真格的了 9:05 PM Dec 13th from TwitterFox</p>
</blockquote>
<p>也是在 Twitter 上的讨论中, 童鞋们给了我这样几个发行版的建议: Ubuntu, Debian, Fedora, OpenSuSE, Arch. 最终, 我选择了 Fedora 10, 事实证明我的选择是极其正确的 (对于我自己而言).</p>
<p>在接下来的安装和配置的过程中, Twitter 上的朋友们给予了我或多或少的帮助和支持. 他们是: <a href="http://twitter.com/wandsea" target="_blank">wandsea</a>, <a href="http://twitter.com/LeafDuo" target="_blank">LeafDuo</a>, <a href="http://twitter.com/ConcreteVitamin" target="_blank">ConcreteVitamin</a>, <a href="http://twitter.com/leewings" target="_blank">leewings</a>, <a href="http://twitter.com/irachex" target="_blank">irachex</a>, <a href="http://twitter.com/dqfind" target="_blank">dqfind</a>.    <br />而 <a href="http://mapping.blogbus.com/" target="_blank">Thity</a>, DDue 和 SweetSc 三位同学作为现实生活中的朋友为我安装 Fedora 10 的过程提供了各种各样的帮助.    <br />在 <a href="http://www.oibh.org/bbs" target="_blank">OIBH</a> 上, Rewrite, sNULLp 两人帮助我解决了关于 Live CD 引导系统的问题和关于 NTFS 的<a href="http://www.oibh.org/bbs/thread-27940-1-2.html" target="_blank">问题</a>.    <br /><a href="http://bbs.fedora-zh.org/" target="_blank">Fedora-zh (Fedora Chinse User Group Fourm)</a> 上的 bbbush, alex 和 gcell 也帮助我解决了 Live CD, NTFS 以及 VLC 的问题.    <br />最需要感谢的是 IRC (freenode) 的 #fedora-cn 讨论组中的 ArsenLupin, 是他一次一次不厌其烦地帮助我解决一个又一个的菜鸟问题. 也是他提议我总结一份安装字体的教程, 我才会想到写这系列文章的.</p>
<p>整个 Fedora 的配置和安装过程可谓有惊无险 -- 搞挂了两块硬盘, 还好大部分数据都找了回来, 只不过 Windows 被迫重做了一遍. 而算上今天, 为了 Fedora 相关的事情两点左右才睡觉, 这已经是连续第四天了. 眼睛也有些干涩, 但是我感觉这一切都十分值得, 因为如果没有这次体验, 或许我对 Linux 的认识还在<strong>敬畏</strong>的程度.    <br />对, 就是敬畏. 这也是在读者, 也就是你想要尝试 Linux 的时候万万不能有的心态. 如果把心态改变一下, 认为自己是为了 &quot;玩&quot; Linux 去安装它而不是为了 &quot;搞定&quot; 它, 或许会事半功倍的.</p>
<p>最终, 我对 Linux 和 Windows 的分工为:   <br />Linux 在 coding 的时候使用, 比如 TopCoder SRM 的时候或者刷 POJ, UVa 的时候.    <br />而 Windows, 依然是日常娱乐应用的不二选择.</p>
<p>时间不早了, 最后友情提示一下, 如果你没有下面的几个条件, 还是不要尝试安装 Linux 的为好...</p>
<ol>
<li>有大量的完整时间. 安装并配置任何版本的 Linux 都是费时费力的工作, 我用了整整一天 (从早到晚) 的时间才完成了基本配置. 所以, 如果你还是一个为了高考拼搏的学生之类的话, 或许等闲下来之后再去尝试安装 Linux 是更好的选择. </li>
<li>有耐心. 在安装和配置的过程中 (特别是配置), 遇到的问题可能会多得让你喘不过气. 切记, 不要出现问题就想要去立刻问别人得到答案 -- 虽然 Google 和百度一点也不好用, 但是它们也并不是什么问题都不能解决. 当然了, 如果找不到解决方法, 去论坛上或者 IRC 上找人解答还是最终的方案. 记得明白了问题所在之后, 把它总结下来, 并分享给网络上其它的人 -- 你也可以直接联系我, 我会尽量更新到这系列文章中. </li>
<li>有信心. 这里所说的信心, 是指一定要自信自己能够完美地配置好 Fedora (或者其它发行版). 见到过不少遇到一点困难 (大多数是驱动的问题) 就放弃配置 Linux 的人, 如果你认为自己会这样, 那么干脆不要安装, 因为这种困难是不可能碰不到的, 即使你 rp 极高. </li>
<li>知道自己要用 Linux 做什么. 就像我一样, 对 Windows 和 Linux 做一个分工; 或者确定自己是为了尝鲜; 或者像 Thity 一样, 干脆卸掉 Windows, 逼迫自己熟悉 Linux, 使用 Linux. </li>
</ol>
<p>好了, 今天就写到这里. 新版的 Windows Live Writer 14 真的很好用, 速度也很快, 菊子曰有点赶不上了.   <br />另外这篇文章开始换了新的风格, 英文与数字和中文之间有空格, 以及某些标点符号之间有空格 (这个和我在写 Pascal 时候的代码风格十分相似). 你可以在回复中发表对这种风格的看法.</p>
<p>各位晚安.</p>
]]></content:encoded>
			<wfw:commentRss>http://sqybi.com/blog/archives/103/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Copernic Desktop Search -- 强大的桌面搜索工具</title>
		<link>http://sqybi.com/blog/archives/98</link>
		<comments>http://sqybi.com/blog/archives/98#comments</comments>
		<pubDate>Sun, 07 Dec 2008 06:22:00 +0000</pubDate>
		<dc:creator>sqybi</dc:creator>
				<category><![CDATA[About Computer]]></category>
		<category><![CDATA[[Technology]]]></category>
		<category><![CDATA[Copernic]]></category>
		<category><![CDATA[Desktop Search]]></category>
		<category><![CDATA[介绍]]></category>
		<category><![CDATA[推荐]]></category>
		<category><![CDATA[搜索]]></category>
		<category><![CDATA[桌面搜素]]></category>
		<category><![CDATA[软件]]></category>

		<guid isPermaLink="false">http://sqybi.com/blog/archives/98</guid>
		<description><![CDATA[知识扫盲:什么是"桌面搜索"? wikipedia这样说:"桌面搜索是搜索工具所应用的一个新领域的名称，这个领域是用户拥有的计算机文件的内容，而不是搜索互联网。桌面搜索强调的是挖掘用户个人电脑上全部可用信息，包括网页浏览器历史，电子邮件档案，字处理器文档等等。" 桌面搜索是这几年刚刚出现的一个新名词.虽然叫做"桌面搜索",但是并不是说只能搜索你桌面的意思.说白了,桌面搜索就是利用索引技术在硬盘上查找符合某些关键词的文件.因为Windows XP及以下版本自带的搜索功能是在硬盘上用关键词依次比对每一个文件,速度很慢,于是一些"懒人"为了能够以后偷懒,就写出了桌面搜索软件.它只完全扫描一次电脑里的文件,然后为每个文件建立一个索引,之后的搜索只需要在索引中查找对应的关键字即可. 桌面搜索最火的时候,M$,Google和百度依次推出了自己的桌面搜索工具.对于中国人来说,使用这三种软件的人也最多.虽然这三家公司的名气都很大,但是毕竟是附属产品,三款软件都有这样那样的缺陷. 警告:某些十分厌烦Windows的读者请自行忽略此文,我不想在此文的评论中看到与文章无关的话题. 转载请注明出处 by sqybi(http://sqybi.com/) 欢迎对本文的再演绎 再演绎不必注明出处 但请trackback 谢谢合作 可能很多童鞋的PC里都备有一款桌面搜索软件,一般除了Google Desktop就是百度硬盘搜索,或者有些还用Window Search.不过对于我来说,Windows Search过于繁杂而且速度不快,Google Desktop的用户体验不是很好,百度硬盘搜索虽说基于网页比较好用,搜索速度也很快,但是这样那样的bug却是不少.最显著的一点是,在我的机器上有时会突然出现打开结果页十分缓慢的情况--或许是对于某个关键词的搜索比较慢,但是没有进度条甚至没有个Waiting令人很不爽(OJ上都有Waiting哈...).另外,某些文件出现了搜索不到的情况,很诡异. 百度硬盘搜索最强大的,就是它的"快照"功能.不过使用了一段时间就会发现,一般情况下,快照功能是派不上用场的. 某一天,sqybi突发奇想,不想继续用百度硬盘搜索了.于是,他随手搜了一下,发现了这样一个软件,也就是我们今天要介绍的: Copernic Desktop Search 先放个主界面截图: 主界面应该说是相当的简洁,不过一般我们用的却是它在开始菜单上的搜索栏: 可能细心的你已经发现了,搜索的时候出现了乱码的情况.但是这款软件是支持中文的,很少出现乱码.出现乱码的几个文件都是我自己录制的音频,所以我认为应该是编码的问题.貌似对音频文件,Copernic是会读取ID3标签的(只是貌似...). 为了证明软件的确不是不支持中文,请看下面这个截图: 另外呢,右下角状态栏里,左数第二个图标(也就是夹在搜狗拼音和卡巴斯基中间的那个图标)就是Copernic Desktop Search的图标了. 右键点一下,看看有什么功能: 五个功能从上到下依次为: 打开主界面,查看索引状态,暂停索引,更新索引,退出软件. 点开"Indexing Status",就会弹出这样一个窗口: 这里写着索引工作将在10秒钟空闲之后继续.那么这是什么意思呢? 实际上,Copernic的索引制度是十分完善的.首先,idle time,也就是空闲时间,指的是连续的一段鼠标键盘都没有操作的时间.如果上面这个窗口没有被打开,那么Copernic会在你设定的一段空闲时间之后自动开始索引工作(默认貌似是3min).而当上面这个窗口打开的时候,正如显示的那样,它就会在10秒钟的空闲时间之后开始索引. 可是除了这些,Copernic还会判断CPU占用情况.如果占用率过高,无论窗口是否打开,空闲时间是否到了,索引工作都不会开始,直到CPU占用率掉下来为止. 这里所说的"索引工作",在你刚刚开始使用这款软件的时候,是建立索引的工作.而当索引建立完毕之后,指的就是更新索引的工作了. &#8230; <a href="http://sqybi.com/blog/archives/98">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>知识扫盲:什么是"桌面搜索"?</p>
<p>wikipedia这样说:"桌面搜索是搜索工具所应用的一个新领域的名称，这个领域是用户拥有的计算机文件的内容，而不是搜索互联网。桌面搜索强调的是<a href="http://zh.wikipedia.org/w/index.php?title=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98&amp;variant=zh-cn">挖掘</a>用户个人电脑上全部可用信息，包括网页浏览器历史，电子邮件档案，字处理器文档等等。"</p>
<p>桌面搜索是这几年刚刚出现的一个新名词.虽然叫做"桌面搜索",但是并不是说只能搜索你桌面的意思.说白了,桌面搜索就是利用索引技术在硬盘上查找符合某些关键词的文件.因为Windows XP及以下版本自带的搜索功能是在硬盘上用关键词依次比对每一个文件,速度很慢,于是一些"懒人"为了能够以后偷懒,就写出了桌面搜索软件.它只完全扫描一次电脑里的文件,然后为每个文件建立一个索引,之后的搜索只需要在索引中查找对应的关键字即可.<br />
桌面搜索最火的时候,M$,Google和百度依次推出了自己的桌面搜索工具.对于中国人来说,使用这三种软件的人也最多.虽然这三家公司的名气都很大,但是毕竟是附属产品,三款软件都有这样那样的缺陷.</p></blockquote>
<p>警告:某些十分厌烦Windows的读者请自行忽略此文,我不想在此文的评论中看到与文章无关的话题.<br />
转载请注明出处 by sqybi(<a href="http://sqybi.com/">http://sqybi.com/</a>)<br />
欢迎对本文的再演绎 再演绎不必注明出处 但请trackback 谢谢合作</p>
<p>可能很多童鞋的PC里都备有一款桌面搜索软件,一般除了<a href="http://desktop.google.com/" target="_blank">Google Desktop</a>就是<a href="http://disk.baidu.com/" target="_blank">百度硬盘搜索</a>,或者有些还用<a href="http://www.microsoft.com/windows/products/winfamily/desktopsearch/default.mspx" target="_blank">Window Search</a>.不过对于我来说,Windows Search过于繁杂而且速度不快,Google Desktop的用户体验不是很好,百度硬盘搜索虽说基于网页比较好用,搜索速度也很快,但是这样那样的bug却是不少.最显著的一点是,在我的机器上有时会突然出现打开结果页十分缓慢的情况--或许是对于某个关键词的搜索比较慢,但是没有进度条甚至没有个Waiting令人很不爽(OJ上都有Waiting哈...).另外,某些文件出现了搜索不到的情况,很诡异.<br />
百度硬盘搜索最强大的,就是它的"快照"功能.不过使用了一段时间就会发现,一般情况下,快照功能是派不上用场的.</p>
<p>某一天,sqybi突发奇想,不想继续用百度硬盘搜索了.于是,他随手搜了一下,发现了这样一个软件,也就是我们今天要介绍的:<br />
<a href="http://www.copernic.com/en/products/desktop-search/index.html" target="_blank">Copernic Desktop Search</a></p>
<p>先放个主界面截图:<br />
<a href="http://sqybi.com/blog/wp-content/uploads/copernic.png" target="_blank"><img src="http://sqybi.com/blog/wp-content/uploads/copernic-thumb.png" alt="Copernic 主界面" width="640" height="424" /></a></p>
<p>主界面应该说是相当的简洁,不过一般我们用的却是它在开始菜单上的搜索栏:<br />
<a href="http://sqybi.com/blog/wp-content/uploads/copernic2.png" target="_blank"><img src="http://sqybi.com/blog/wp-content/uploads/copernic2-thumb.png" alt="Copernic 搜索栏" width="321" height="427" /></a></p>
<p>可能细心的你已经发现了,搜索的时候出现了乱码的情况.但是这款软件是支持中文的,很少出现乱码.出现乱码的几个文件都是我自己录制的音频,所以我认为应该是编码的问题.貌似对音频文件,Copernic是会读取ID3标签的(只是貌似...).<br />
为了证明软件的确不是不支持中文,请看下面这个截图:<br />
<a href="http://sqybi.com/blog/wp-content/uploads/copernic3.png" target="_blank"><img src="http://sqybi.com/blog/wp-content/uploads/copernic3-thumb.png" alt="Copernic 搜索栏" width="319" height="427" /></a></p>
<p>另外呢,右下角状态栏里,左数第二个图标(也就是夹在搜狗拼音和卡巴斯基中间的那个图标)就是Copernic Desktop Search的图标了.<br />
右键点一下,看看有什么功能:<br />
<a href="http://sqybi.com/blog/wp-content/uploads/copernic4.png" target="_blank"><img src="http://sqybi.com/blog/wp-content/uploads/copernic4-thumb.png" alt="Copernic状态栏图标" width="247" height="126" /></a></p>
<p>五个功能从上到下依次为:<br />
打开主界面,查看索引状态,暂停索引,更新索引,退出软件.<br />
点开"Indexing Status",就会弹出这样一个窗口:<br />
<a href="http://sqybi.com/blog/wp-content/uploads/copernic5.png" target="_blank"><img src="http://sqybi.com/blog/wp-content/uploads/copernic5-thumb.png" alt="Copernic Index Status" width="485" height="157" /></a></p>
<p>这里写着索引工作将在10秒钟空闲之后继续.那么这是什么意思呢?<br />
实际上,Copernic的索引制度是十分完善的.首先,idle time,也就是空闲时间,指的是连续的一段鼠标键盘都没有操作的时间.如果上面这个窗口没有被打开,那么Copernic会在你设定的一段空闲时间之后自动开始索引工作(默认貌似是3min).而当上面这个窗口打开的时候,正如显示的那样,它就会在10秒钟的空闲时间之后开始索引.<br />
可是除了这些,Copernic还会判断CPU占用情况.如果占用率过高,无论窗口是否打开,空闲时间是否到了,索引工作都不会开始,直到CPU占用率掉下来为止.<br />
这里所说的"索引工作",在你刚刚开始使用这款软件的时候,是建立索引的工作.而当索引建立完毕之后,指的就是更新索引的工作了.</p>
<p>另外,从主界面也可以看出,软件将文件分为了很多类.这样,就可以对每一类文件单独搜索了.<br />
在设置中可以选择被索引的扩展名列表,如果文件的扩展名在列表之外,那么是不会被建立到索引中的.而列表之内的每一个扩展名,都可以单独选择所属的类别,比如文件,音乐等.默认的列表十分齐全,我使用的时候只加了一个dpr(Delphi源代码的扩展名)就足够了.</p>
<p>下面是我在主界面以"SGU"为关键字搜索的结果:<br />
<a href="http://sqybi.com/blog/wp-content/uploads/copernic6.png" target="_blank"><img src="http://sqybi.com/blog/wp-content/uploads/copernic6-thumb.png" alt="Copernic 搜索 SGU" width="640" height="426" /></a></p>
<p>可以发现,如果选择了搜索到的文件,下方就会出现文件的预览.可以进行复制粘贴操作,十分方便.<br />
而如果选择了一个xls文件,预览的效果就会像下图这样:<br />
<a href="http://sqybi.com/blog/wp-content/uploads/copernic7.png" target="_blank"><img src="http://sqybi.com/blog/wp-content/uploads/copernic7-thumb.png" alt="Copernic 预览 xls" width="640" height="470" /></a></p>
<p>软件支持Office 2007的格式,即docx,xlsx等.<br />
如果搜索结果是网页,那么它会以网页的形式显示出来;pdf也是可以预览的,但是当我选择一个10M的大pdf的时候,预览的速度就很慢,而且预览效果和Foxit也不尽相同.<br />
但是总的来说,软件的搜索效果还是很棒的,基本上所有文件都能被搜索出来.界面也不难看,速度也不是太慢,十分值得推荐.现在它已经常驻我的内存了,而百度硬盘搜索,拜拜啦~</p>
<p>嗯,说到这里,是不是有人已经去搜索破解版了呢?<br />
不知道你是否注意文章开头给出的<a href="http://www.copernic.com/en/products/desktop-search/index.html" target="_blank">软件主页</a>的链接,页面上写的很清楚,有三个版本,分别为Home,Professional,Corporate.其中Home版是免费的,Professional版要50$ per licence,而Corporate要60$.<br />
三个版本的区别写的也很清楚了,为了照顾懒得看的童鞋,这里稍微写一下.</p>
<p>Home版的功能有:<br />
快速找到Word, Excel, PowerPoint, PDF, HTML, Word Perfect, text, ZIP文件;快速搜索一些邮件客户端中的邮件和附件(支持Outlook, Outlook Express, Eudora和Thunderbird,很可惜不支持Foxmail,毕竟是老外的东西嘛.但是Foxmail内置的搜索功能也很强大了);优化搜索结果(感觉说的貌似是能够根据你每次的搜索提高搜索效率,估计就是提高一些关键字的优先级吧);即时预览.<br />
对于我这样的个人用户来说,这些功能完全是足够的--根本没有必要去找破解版,因为你会发现即使找到了,那些多余的功能也都是废品.</p>
<p>Professional版比Home多出来的功能是:<br />
搜索Outlook中日程表之类的东西(搞GTD的比较有用);搜索网络驱动器(在家里用应该不会有网络驱动器吧,如果上班的话或许这个功能会有用);保存搜索结果(鸡肋...);用户支持(就是软件出问题了之后答疑啥的,基本不会用上);没有广告(说实话,我用免费版的到现在也没看到过一次广告- -||).</p>
<p>Corporate又比Professional多出来点东西,它们是:<br />
两项和CDS有关的功能(<span style="text-decoration: line-through;">CDS即内容分发服务,因为对CDS不了解,而且一般也用不上,这里不介绍了,想知道的童鞋猛击</span><a href="http://baike.baidu.com/view/983887.htm" target="_blank"><span style="text-decoration: line-through;">这个链接</span></a><span style="text-decoration: line-through;">去百度百科看,中文wikipedia上没找到相关内容</span>突然发现,CDS是Copernic Desktop Search的缩写,而这两项功能分别是自定义CDS的安装程序和自动部署CDS客户端);无缝客户端升级(貌似就是给局域网内的所有该软件升级);为局域网内部建立搜索引擎.<br />
很显然都是企业才用的上的功能.</p>
<p>另外补充一点,Copernic还带有网络搜索功能,对应的网址是:<a title="http://find.copernic.com/" href="http://find.copernic.com/">http://find.copernic.com/</a><br />
但是随便搜索一个关键词就会发现,实际上它只是把<a href="http://www.ask.com/" target="_blank">Ask.com</a>,<a href="http://www.live.com/" target="_blank">Windows Live Search</a>,<a href="http://search.yahoo.com/" target="_blank">Yahoo! Search</a>的结果合并到了一起,基本没啥太大用处.</p>
<p>好了,说到这里,你有没有心动呢?赶快<a href="http://www.copernic.com/en/products/desktop-search/home/download.html" target="_blank">猛击这里</a>下载一个试试看吧~扔掉那些Google百度微软的桌面搜索工具,和我一起高高兴兴地用Copernic搜索你的电脑吧~<br />
软件提供英文,法文,德文和西班牙文四种语言的版本,大小仅有5.82MB.</p>
<p><span style="color: #ff0000;">update:垃圾评论过多,关闭评论.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://sqybi.com/blog/archives/98/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

