<?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>Navins&#039; NoteBook</title>
	<atom:link href="http://www.32133.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.32133.com</link>
	<description>Information, Code, Programming, Java/C/C++/C# ...</description>
	<lastBuildDate>Mon, 13 Feb 2012 14:28:22 +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>《福布斯》：谷歌做硬件 不敌苹果的四大理由</title>
		<link>http://www.32133.com/news/422.html</link>
		<comments>http://www.32133.com/news/422.html#comments</comments>
		<pubDate>Mon, 13 Feb 2012 14:28:22 +0000</pubDate>
		<dc:creator>huanling</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.32133.com/?p=422</guid>
		<description><![CDATA[4点总结还是很到位的。摘录下来 2月13日消息，谷歌正在进军硬件产业。早些时候媒体报道称，谷歌正在测试一种新的神秘的家用产品。人们对此非常有兴趣，想知道这究竟是什么神秘产品。后经证实，谷歌是正在研发一种自有品牌的家庭娱乐设备。在过去几年里，Android团队一直致力于开发流媒体产品，旨在将谷歌音乐服务带入千家万户。 这对于搜索巨头谷歌而言是一种重大的方向性的变化。此前，谷歌已经通过推出Google+平台来改变人们与在线产品的交互方式，开辟了传统的搜索业务之外的社交平台业务。 现在，谷歌开始进入产品制造业务。有了Android操作系统，谷歌并未选择自己生产手机，而是决定走软件发展的路线，向制造商提供针对移动产品和平板电脑的开源系统平台。这招行之有效，尤其是现在采用Android系统的产品已经成为了Google+的重要门户。然而，与亚马逊和苹果这两家制造业的先驱竞争，对谷歌来说，制造业就是一场不易打胜的仗了。 谷歌在硬件产品制造领域难以与苹果匹敌，表现在如下几方面： 1.设计人才不及苹果 除传统的Mac产品线，苹果现已开发出大量其它产品，且每种产品都设计成功，无论是iPhone、iPad、iPod还是MacBook Air，苹果都将设计环节视为重中之重，且相当成功。用户也颇为满意。严苛的设计将苹果推上了高峰，苹果一跃成为美国乃至全世界最具价值的公司之一。随着千呼万唤的iPad 3以及iTV在不久之后的推出，苹果在产品设计领域的领先地位更是无人能超越。 2.客户服务不是谷歌强项 想想你和谷歌的客服交流过吗？你知道怎么联系谷歌客服吗？一些Android产品厂商都有极好的客户服务，而谷歌本身却没有。而另一方面，苹果的客户服务在业界有着很好的口碑。谷歌希望用户用它的产品自行解决问题，而苹果则有强大的客户服务网络。如果谷歌希望发展自己的硬件产品，那么在客户服务方面还需多多努力。 3.没有自己的产品供应链 谷歌目前所有产品都是在线产品，而苹果和亚马逊在各地区都已经建立了高效的供应链。谷歌仍在依赖第三方，而亚马逊和苹果已经在全球建立了分销网络，而谷歌想做成这些，不是一朝一夕的事。 4.没有零售店与零售经验 苹果拥有大受欢迎的零售店。目前亚马逊也在计划开自己的零售店。谷歌也有此意，但有一个问题：亚马逊多年以前就是在线零售巨头，跨入实体销售领域只是迈一小步的事情，但谷歌却并没有真正的产品零售经验，对苹果而言，开设零售店已经不算新闻，但对于谷歌而言却是一种全新的方向。 令我费解的是为什么谷歌会想要插足硬件业务。如果想进入硬件领域，为什么不做智能手机呢。出一款谷歌手机，运行着最新版的Android操作系统，这还是有可能的，特别是在谷歌收购之后摩托罗拉。 相对于发展智能手机，发展家庭娱乐产品就有些让人摸不着头脑了。可以理解，谷歌致力于推进他们的家庭音乐系统，将云服务推进手机领域、进入PC领域，进入家庭领域。但实现这些目标，就一定要自行开发产品吗？ Android的成功表示他们不需要这样。Android厂商正努力让谷歌网络模式更加社交化，应用更普遍，也正对Facebook构成威胁，从很多方面来看，这对谷歌而言都是一种明智的举措，厂商们也希望这能带来普及度更高，交互性更强的网络体验。 同样，进入制造业的风险多种多样的。在硬件领域一次失败的尝试，会让谷歌名誉受损，其它产品与服务也会跟着遭殃。 谷歌现在的行为模式越来越像是在模仿对手而不是超越对手。谷歌正在开发类似于Dropbox的应用，以希望以谷歌音乐服务挑战苹果iTunes，用Google+与Facebook抗衡，而在这些领域，谷歌又有哪些优势呢？也许这个音乐娱乐产品只是谷歌试探的一步，也许结果比预测的好的多。现在还没办法去说这个该产品是好是坏还是不好不坏，我们拭目以待吧。]]></description>
			<content:encoded><![CDATA[<p>4点总结还是很到位的。摘录下来</p>
<p>2月13日消息，谷歌正在进军硬件产业。早些时候媒体报道称，谷歌正在测试一种新的神秘的家用产品。人们对此非常有兴趣，想知道这究竟是什么神秘产品。后经证实，谷歌是正在研发一种自有品牌的家庭娱乐设备。在过去几年里，Android团队一直致力于开发流媒体产品，旨在将谷歌音乐服务带入千家万户。</p>
<p>这对于搜索巨头谷歌而言是一种重大的方向性的变化。此前，谷歌已经通过推出Google+平台来改变人们与在线产品的交互方式，开辟了传统的搜索业务之外的社交平台业务。</p>
<p>现在，谷歌开始进入产品制造业务。有了Android操作系统，谷歌并未选择自己生产手机，而是决定走软件发展的路线，向制造商提供针对移动产品和平板电脑的开源系统平台。这招行之有效，尤其是现在采用Android系统的产品已经成为了Google+的重要门户。然而，与亚马逊和苹果这两家制造业的先驱竞争，对谷歌来说，制造业就是一场不易打胜的仗了。</p>
<p>谷歌在硬件产品制造领域难以与苹果匹敌，表现在如下几方面：<span id="more-422"></span></p>
<p><strong>1.设计人才不及苹果</strong></p>
<p>除传统的Mac产品线，苹果现已开发出大量其它产品，且每种产品都设计成功，无论是iPhone、iPad、iPod还是MacBook Air，苹果都将设计环节视为重中之重，且相当成功。用户也颇为满意。严苛的设计将苹果推上了高峰，苹果一跃成为美国乃至全世界最具价值的公司之一。随着千呼万唤的iPad 3以及iTV在不久之后的推出，苹果在产品设计领域的领先地位更是无人能超越。</p>
<p><strong>2.客户服务不是谷歌强项</strong></p>
<p>想想你和谷歌的客服交流过吗？你知道怎么联系谷歌客服吗？一些Android产品厂商都有极好的客户服务，而谷歌本身却没有。而另一方面，苹果的客户服务在业界有着很好的口碑。谷歌希望用户用它的产品自行解决问题，而苹果则有强大的客户服务网络。如果谷歌希望发展自己的硬件产品，那么在客户服务方面还需多多努力。</p>
<p><strong>3.没有自己的产品供应链</strong></p>
<p>谷歌目前所有产品都是在线产品，而苹果和亚马逊在各地区都已经建立了高效的供应链。谷歌仍在依赖第三方，而亚马逊和苹果已经在全球建立了分销网络，而谷歌想做成这些，不是一朝一夕的事。</p>
<p><strong>4.没有零售店与零售经验</strong></p>
<p>苹果拥有大受欢迎的零售店。目前亚马逊也在计划开自己的零售店。谷歌也有此意，但有一个问题：亚马逊多年以前就是在线零售巨头，跨入实体销售领域只是迈一小步的事情，但谷歌却并没有真正的产品零售经验，对苹果而言，开设零售店已经不算新闻，但对于谷歌而言却是一种全新的方向。</p>
<p>令我费解的是为什么谷歌会想要插足硬件业务。如果想进入硬件领域，为什么不做智能手机呢。出一款谷歌手机，运行着最新版的Android操作系统，这还是有可能的，特别是在谷歌收购之后摩托罗拉。</p>
<p>相对于发展智能手机，发展家庭娱乐产品就有些让人摸不着头脑了。可以理解，谷歌致力于推进他们的家庭音乐系统，将云服务推进手机领域、进入PC领域，进入家庭领域。但实现这些目标，就一定要自行开发产品吗？</p>
<p>Android的成功表示他们不需要这样。Android厂商正努力让谷歌网络模式更加社交化，应用更普遍，也正对Facebook构成威胁，从很多方面来看，这对谷歌而言都是一种明智的举措，厂商们也希望这能带来普及度更高，交互性更强的网络体验。</p>
<p>同样，进入制造业的风险多种多样的。在硬件领域一次失败的尝试，会让谷歌名誉受损，其它产品与服务也会跟着遭殃。</p>
<p>谷歌现在的行为模式越来越像是在模仿对手而不是超越对手。谷歌正在开发类似于Dropbox的应用，以希望以谷歌音乐服务挑战苹果iTunes，用Google+与Facebook抗衡，而在这些领域，谷歌又有哪些优势呢？也许这个音乐娱乐产品只是谷歌试探的一步，也许结果比预测的好的多。现在还没办法去说这个该产品是好是坏还是不好不坏，我们拭目以待吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.32133.com/news/422.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Session和Cookie关系</title>
		<link>http://www.32133.com/share/419.html</link>
		<comments>http://www.32133.com/share/419.html#comments</comments>
		<pubDate>Sun, 12 Feb 2012 15:15:59 +0000</pubDate>
		<dc:creator>huanling</dc:creator>
				<category><![CDATA[Share]]></category>

		<guid isPermaLink="false">http://www.32133.com/?p=419</guid>
		<description><![CDATA[网上看到，留作记录。 PHP中的session可以默认情况下是使用客户端的Cookie(以便和普通意义上的Cookie区别,我称之为session cookie,普通意义上的Cookie为Cookie)来保存session id的,但是PHP中的session是否只能使用session cookie呢?当然不是,否则何必还弄个session出来,不如直接用Cookie算了.Session的一大优点就是当客户端的Cookie被禁用时会自动把session id附在URL中,这样再通过session id就能记住session变量了. $ T5 I# S: c: W9 B. X7 T- b 下面我写两个文件来证实一下,首先在浏览器中设置禁用Cookie. * ], N/ Q1 _7 Z9 \) E&#38; p' g &#60;? //文件名为test1.php session_start(); 4 k! Z) o' q$ z) B- w/ o+ L! V session_register("url"); $url="test2.php"; echo "&#60;a href=$url&#62;goto test2.php&#60;/a&#62; "; ?&#62; &#60;?//文件名为test2.php session_start(); if (session_is_registered("url")) { echo "Congratulations." q$ [...]]]></description>
			<content:encoded><![CDATA[<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td id="postmessage_730131">网上看到，留作记录。</p>
<p>PHP中的session可以默认情况下是使用客户端的Cookie(以便和普通意义上的Cookie区别,我称之为session cookie,普通意义上的Cookie为Cookie)来保存session id的,但是PHP中的session是否只能使用session cookie呢?当然不是,否则何必还弄个session出来,不如直接用Cookie算了.Session的一大优点就是当客户端的Cookie被禁用时会自动把session id附在URL中,这样再通过session id就能记住session变量了. <span>$ T5 I# S: c: W9 B. X7 T- b</span><br />
下面我写两个文件来证实一下,首先在浏览器中设置禁用Cookie. <span>* ], N/ Q1 _7 Z9 \) E&amp; p' g</span><br />
&lt;? //文件名为test1.php<br />
session_start(); <span>4 k! Z) o' q$ z) B- w/ o+ L! V</span><br />
session_register("url");<br />
$url="test2.php";<br />
echo "&lt;a href=$url&gt;goto test2.php&lt;/a&gt;<br />
";<br />
?&gt;<br />
<span id="more-419"></span><br />
&lt;?//文件名为test2.php<br />
session_start();<br />
if (session_is_registered("url")) {<br />
echo "Congratulations.<span>" q$ c" U- w# i/ B- j5 R' B  J</span><br />
";<br />
$url="test1.php"; <span>$ t) ]  Q7 N  S1 D* R( b4 Z</span><br />
echo "&lt;a href=$url&gt;goto test1.php&lt;/a&gt;<br />
";<br />
}<br />
else echo "Failed.<span>* E5 d4 E6 G4 u. f  `&amp; M</span><br />
"; <span>/ [2 e% w( [$ k( G. O</span><br />
?&gt; <span>% ]( V; d) i0 m% F9 t" W" ]3 h</span><br />
现在在浏览器中输入"http://localhost/test1.php",把鼠标移到链接上看看状态栏上的地址,不是简单的"http://localhost/test2.php",而是这种形式:"http://localhost/test2.php?PHPSESSID=6e3610749f7ded3784bc4a4dd10f879b".你还可以查看Html的源文件,源文件是这种形式: <span>, A&amp; V4 Z" L0 s</span><br />
&lt;a href="test2.php?PHPSESSID=6e3610749f7ded3784bc4a4dd10f879b"&gt;goto test2.php&lt;/a&gt;<br />
所以说这完全是PHP的功劳,和浏览器无关,也就是说无论你用什么浏览器session都有效,而不是有的人认为的只对IE有用.<br />
但是,我们的超链接是语句是由echo语句输出的,如果超链接不包含在PHP的标签&lt;? ?&gt;之内会怎样呢?还是写个例子来验证一下,把test1.php稍作修改: <span>$ {0 G, a1 F. ?/ p/ y* a/ W</span><br />
&lt;? <span>) I9 r- F) F. j8 P</span><br />
session_start(); <span>6 ?$ P" J&amp; i- e</span><br />
session_register("url"); <span>0 A# O. ?7 J4 O$ ]</span><br />
$url="test2.php";<br />
echo "&lt;a href=$url&gt;goto test2.php&lt;/a&gt;<span>( T6 c: b' d! g&amp; x$ X, _</span><br />
"; <span>. K7 l; ^' p+ a  ]&amp; Z; t' h+ r</span></p>
<p>?&gt;<br />
&lt;a href="test2.php"&gt;(Html形式)goto test2.php&lt;/a&gt; <span>* e3 k* I0 L&amp; ]# \7 |$ K</span><br />
在浏览器中输入"http://localhost/test1.php",分别把鼠标移到两个链接上看看有没有不同?可以看到,两个链接是完全相同的,后面都会自动附带session id.所以不必担心没被包含在PHP标签中的链接会失效,PHP不会这么笨的. <span>5 Q7 c, ^9 v/ G, r; Q8 t</span><br />
但是在使用时要注意必须先用session_start()函数告诉PHP开始用session,哪怕你在这个文件中只有html代码,如:<br />
&lt;? session_start();?&gt; <span>* I5 y4 N4 Y# S8 g</span><br />
&lt;html&gt; <span>( H  v, `+ M# }</span><br />
&lt;head&gt; <span>1 l% D5 s9 [6 D' N/ q6 {</span><br />
&lt;body&gt; <span>0 E$ y&amp; ~&amp; H- L5 i! u4 A( o0 l  p</span><br />
&lt;a href=test2.php&gt;gogogo&lt;/a&gt;<br />
………… <span>) K* i1 j% i&amp; p) Y, P$ I0 c</span></p>
<p>记得有人说过这个优点只能在linux/unix下才能发挥出来,而我用的Win2000p+Apache1.3.17+Php4.0.4pl1,PHP为Apache模块方式,却照样可以.恰恰相反,我转到linux下去测试时反而不行了.其实是在编译时的一个选项--enable-trans-sid控制了这项功能能否有用.而按照PHP默认来编译时是没有打开这项功能的,只需重新编译时加入它就可以了.我的配置为Apache1.3.17+Php4.0.4pl1,PHP为Apache模块方式,在linux重新编译后用Netscape Navigator4.7测试可以通过(这更证明了和浏览器无关). <span>8 O- `( U( t) y</span><br />
只靠session是不能跨窗口使用的,即使你启用了Cookie,当你在一个窗口中有一个合法的session id(记录在session cookie中,不是URL中),再新开一个窗口进入相同页面时,你会重新拥有一个新的session id,而与前一个窗口互不影响.要想跨窗口使用同一个session id就只能在URL后指定session id,也就是说如果你把带有session id的的窗口的URL复制,在新开的窗口中粘贴一下,还是照样使用的.知道了session id的这个原理要实现跨窗口session还是不难的,可以把Cookie与session结合起来,首先取得当前合法的session id,然后把它记录在Cookie中,在其它窗口读取Cookie就可获得当前的Session id了.具体实现我记得在phpuser上有一篇文章专门讨论过.<br />
最后再说一下: <span>. x( P* V) z; M( `</span><br />
①经常有人问到"为什么copy你写好的代码,却会出错,你也太……",再把出错提示拿来一看:<br />
Warning: open(/tmpsess_eca1da208748db2e9c6bec1fccc182b4, O_RDWR) failed: m (2) in c:/www/test1.php on line 2 <span>% U" Q9 Z, {* z5 v+ t# A</span><br />
其实是他自己的问题:session存放的路径/tmp不存在.有两种办法:一是在根目录(一般是C:)建一个名为tmp的目录;二是修改php.ini文件 <span>6 p* t) ]  V&amp; m. `1 |% M+ `</span><br />
session.save_path = /tmp ; <span>4 t* U6 P) ~7 Y</span><br />
把/tmp目录用绝对路径指定一个目录(当然必须存在),如我的php.ini中<br />
session.save_path = G:PHPtempsession ;<br />
②还有一种情况的出错信息为: <span>&amp; s5 y; F: h) }9 G7 B' D3 D</span><br />
Warning: Cannot send session cache limiter - headers already sent (output started at<br />
c:/www/test1.php:1) in c:/www/test1.php on line 2<br />
这是因为你在用session_start()之前已经数据输出到客户端了,比如说Html标签、文字甚至是空格都不行,所以最好在程序第一句就用session_start().</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.32133.com/share/419.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>反作弊策略思想</title>
		<link>http://www.32133.com/share/416.html</link>
		<comments>http://www.32133.com/share/416.html#comments</comments>
		<pubDate>Sat, 11 Feb 2012 12:39:47 +0000</pubDate>
		<dc:creator>huanling</dc:creator>
				<category><![CDATA[Share]]></category>

		<guid isPermaLink="false">http://www.32133.com/?p=416</guid>
		<description><![CDATA[从网上看到，觉得归纳的亮点说着挺有道理。 这要从搜索引擎反作弊策略说起。一个搜索引擎成功的反作弊策略一定是这样的： 1，允许算法被探测出来，而且即使算法被公布，搜索结果的公正性都不会受太大影响。要这么做的原因就是不希望和作弊的人陷入到一种猫捉老鼠的死循环当中。如果老是以堵漏洞的做法来修正算法，那永远都没有尽头。出于这样的考虑，搜索引擎会把那些无法被作弊的的因素在排序算法里放到比较重要的程度。 2，尽可能用一切技术手段自动检测，当技术手段不能解决问题，就用人工来解决。然后把人工发现的问题又反馈给自动检测机制，使自动检测越来越完善。 现在的google基本上就是这样来做的。在现有的排序规则中，那些无法作弊的和能精确反应内容的因素，都是很重要的排序因素。 当然Google也不排斥频繁的调整算法，这也有出于给用户一个最好的搜索体验考虑的。 至于技术检测和人工审查，google也一直在做。 google很早就有匿名蜘蛛来检测一个网站是不是在作弊的。如果去分析网站的服务器LOG日志，就会发现它们。 你会发现，有的爬虫，通过IP查询是来自google，但是它没有自己的声明（user-agent），这就是google的匿名爬虫。它会判断你有没有对google爬虫特别对待，做一些隐藏页面，还会解析Javascript文件和CSS文件等等。有人用CCS文件来隐藏内容，这种事情现在是不用去做的，google都能查出来。 Google也有人工审核机制，从webmaster tool 里提交的问题，都是有人工跟进审核的。以下就是号称google内部流传出来审核规则，可以点此下载。 既然google反作弊那么优秀，那文章一开始提到的那个作弊方法怎么解决呢？ 那个方法google确实检测不出来，但是用这个方法的人，到最后还是会被google发现作弊。 google的反作弊是“善意原则”优先，是假设你这个网站是没有作弊的，但是用其他所有作弊的特征来检查。 用了我提到的这个方法，在用颜色隐藏内容这一块是没事了，但是会在堆砌关键词，反向链接，以及其他很多方面路出马脚来。google就是相信，一个在页面上隐藏内容的人，也一定会去做垃圾链接群发等等其他作弊的事情。就像现实生活中一个吸毒的人，当然也是爱打架的，或者爱偷东西的，总有一件事情让你进局子里。 而你假设其他什么都不做，就是用那个方法隐藏一点内容，其实你也不能得到什么。因为你仅仅是隐藏内容的话也不会有排名的。 google就是这样捍卫了自己排名的公正性。 对这些了解得越多，就越发现作弊实在是费力不讨好了。（作弊源于不了解，通过正常途径提升SEO流量的方法有的是，为什么放弃那么多好的方法而选择差的方法呢？在现在的SEO界，你会发现一个现象，越是SEO刚入门的人越喜欢搞一些作弊的事情，而SEO从业越久的人，就越不会参与这些。） 想做一个优秀SEOer的人，对所有这些因素都要有一定程度的了解的。这样做即可以避开无意中犯下的错，又可以避免不必要的恐慌。 比如沙盒效应，很多人总觉得很神秘，其实从搜索引擎的角度出发没什么好神秘的。你要是站在搜索引擎的角度考虑问题，就觉得这是一个很有必要的措施了。你也会知道如何发展自己的外部链接。避免google的反作弊手段落到你网站上。 还有，关于重复内容，google一定是“善意原则”优先的，它甚至会帮你处理掉因为网站大量采用模板带来的重复问题。 要做到了解这些，就是不断的实践，学习和实验。 最近的美剧《Lie to me》非常好看，有一个印象我很深刻，就是他们会定期做一些实验，来了解人类各种复杂微妙的表情后面隐藏着怎样的心理活动，会定期形成报告。这是一种非常好的研究程序。 面对google，我们就像那些心理学家面对人类的心理一样，很多东西是你不了解的。你去测试，就能得到独家的资料和信息。这也是我博客很多东西的来源。]]></description>
			<content:encoded><![CDATA[<p>从网上看到，觉得归纳的亮点说着挺有道理。</p>
<p>这要从搜索引擎反作弊策略说起。一个搜索引擎成功的反作弊策略一定是这样的：</p>
<p>1，允许算法被探测出来，而且即使算法被公布，搜索结果的公正性都不会受太大影响。要这么做的原因就是不希望和作弊的人陷入到一种猫捉老鼠的死循环当中。如果老是以堵漏洞的做法来修正算法，那永远都没有尽头。出于这样的考虑，搜索引擎会把那些无法被作弊的的因素在排序算法里放到比较重要的程度。</p>
<p>2，尽可能用一切技术手段自动检测，当技术手段不能解决问题，就用人工来解决。然后把人工发现的问题又反馈给自动检测机制，使自动检测越来越完善。</p>
<p>现在的google基本上就是这样来做的。在现有的排序规则中，那些无法作弊的和能精确反应内容的因素，都是很重要的排序因素。</p>
<p>当然Google也不排斥频繁的调整算法，这也有出于给用户一个最好的搜索体验考虑的。</p>
<p>至于技术检测和人工审查，google也一直在做。</p>
<p><span id="more-416"></span></p>
<p>google很早就有匿名蜘蛛来检测一个网站是不是在作弊的。如果去分析网站的服务器LOG日志，就会发现它们。</p>
<p>你会发现，有的爬虫，通过IP查询是来自google，但是它没有自己的声明（user-agent），这就是google的匿名爬虫。它会判断你有没有对google爬虫特别对待，做一些隐藏页面，还会解析Javascript文件和CSS文件等等。有人用CCS文件来隐藏内容，这种事情现在是不用去做的，google都能查出来。</p>
<p>Google也有人工审核机制，从webmaster tool 里提交的问题，都是有人工跟进审核的。以下就是号称google内部流传出来审核规则，可以点此下载。</p>
<p>既然google反作弊那么优秀，那文章一开始提到的那个作弊方法怎么解决呢？</p>
<p>那个方法google确实检测不出来，但是用这个方法的人，到最后还是会被google发现作弊。</p>
<p>google的反作弊是“善意原则”优先，是假设你这个网站是没有作弊的，但是用其他所有作弊的特征来检查。 用了我提到的这个方法，在用颜色隐藏内容这一块是没事了，但是会在堆砌关键词，反向链接，以及其他很多方面路出马脚来。google就是相信，一个在页面上隐藏内容的人，也一定会去做垃圾链接群发等等其他作弊的事情。就像现实生活中一个吸毒的人，当然也是爱打架的，或者爱偷东西的，总有一件事情让你进局子里。</p>
<p>而你假设其他什么都不做，就是用那个方法隐藏一点内容，其实你也不能得到什么。因为你仅仅是隐藏内容的话也不会有排名的。</p>
<p>google就是这样捍卫了自己排名的公正性。</p>
<p>对这些了解得越多，就越发现作弊实在是费力不讨好了。（作弊源于不了解，通过正常途径提升SEO流量的方法有的是，为什么放弃那么多好的方法而选择差的方法呢？在现在的SEO界，你会发现一个现象，越是SEO刚入门的人越喜欢搞一些作弊的事情，而SEO从业越久的人，就越不会参与这些。）</p>
<p>想做一个优秀SEOer的人，对所有这些因素都要有一定程度的了解的。这样做即可以避开无意中犯下的错，又可以避免不必要的恐慌。</p>
<p>比如沙盒效应，很多人总觉得很神秘，其实从搜索引擎的角度出发没什么好神秘的。你要是站在搜索引擎的角度考虑问题，就觉得这是一个很有必要的措施了。你也会知道如何发展自己的外部链接。避免google的反作弊手段落到你网站上。</p>
<p>还有，关于重复内容，google一定是“善意原则”优先的，它甚至会帮你处理掉因为网站大量采用模板带来的重复问题。</p>
<p>要做到了解这些，就是不断的实践，学习和实验。</p>
<p>最近的美剧《Lie to me》非常好看，有一个印象我很深刻，就是他们会定期做一些实验，来了解人类各种复杂微妙的表情后面隐藏着怎样的心理活动，会定期形成报告。这是一种非常好的研究程序。</p>
<p>面对google，我们就像那些心理学家面对人类的心理一样，很多东西是你不了解的。你去测试，就能得到独家的资料和信息。这也是我博客很多东西的来源。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.32133.com/share/416.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python 命令行参数</title>
		<link>http://www.32133.com/labrary/404.html</link>
		<comments>http://www.32133.com/labrary/404.html#comments</comments>
		<pubDate>Wed, 07 Dec 2011 13:23:01 +0000</pubDate>
		<dc:creator>huanling</dc:creator>
				<category><![CDATA[Labrary]]></category>

		<guid isPermaLink="false">http://www.32133.com/?p=404</guid>
		<description><![CDATA[本篇将介绍python中sys, getopt模块处理命令行参数 如果想对python脚本传参数，python中对应的argc, argv(c语言的命令行参数)是什么呢？ 需要模块：sys 参数个数：len(sys.argv) 123脚本名：    sys.argv[0] 参数1：     sys.argv[1] 参数2：     sys.argv[2] test.py import sys print "脚本名：", sys.argv[0] for i in range(1, len(sys.argv)): print "参数", i, sys.argv[i] &#62;&#62;&#62;python test.py hello world 脚本名：test.py 参数 1 hello 参数 2 world python中使用命令行选项： 例如我们需要一个convert.py脚本。它的作用是处理一个文件,并将处理后的结果输出到另一个文件中。 要求该脚本满足以下条件： 1.通过-i -o选项来区别参数是输入文件还是输出文件. &#62;&#62;&#62; python convert.py -i inputfile -o outputfile 2.当不知道convert.py需要哪些参数时，用-h打印出帮助信息 [...]]]></description>
			<content:encoded><![CDATA[<p>本篇将介绍python中sys, getopt模块处理命令行参数</p>
<p>如果想对python脚本传参数，python中对应的argc, argv(c语言的命令行参数)是什么呢？<br />
需要模块：sys<br />
参数个数：len(sys.argv)</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">脚本名：    sys.argv[0]<br />
参数1：     sys.argv[1]<br />
参数2：     sys.argv[2]</div></td></tr></tbody></table></div>
<p>test.py<br />
import sys<br />
print "脚本名：", sys.argv[0]<br />
for i in range(1, len(sys.argv)):<br />
print "参数", i, sys.argv[i]</p>
<p>&gt;&gt;&gt;python test.py hello world<br />
脚本名：test.py<br />
参数 1 hello<br />
参数 2 world</p>
<p><span id="more-404"></span></p>
<p>python中使用命令行选项：<br />
例如我们需要一个convert.py脚本。它的作用是处理一个文件,并将处理后的结果输出到另一个文件中。<br />
要求该脚本满足以下条件：<br />
1.通过-i -o选项来区别参数是输入文件还是输出文件.<br />
&gt;&gt;&gt; python convert.py -i inputfile -o outputfile<br />
2.当不知道convert.py需要哪些参数时，用-h打印出帮助信息<br />
&gt;&gt;&gt; python convert.py -h</p>
<p>getopt函数原形:<br />
<strong>getopt.getopt(args, options[, long_options])</strong></p>
<p>convert.py</p>
<div id="highlighter_554570">
<div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">01</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">import</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sys, getopt</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">02</div></td></tr></tbody></table></div>
</td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">03</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">opts, args </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">=</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">getopt.getopt(sys.argv[</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">1</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:], </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;hi:o:&quot;</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">)</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">04</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">input_file</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">=</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;&quot;</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">05</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">output_file</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">=</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;&quot;</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">06</div></td></tr></tbody></table></div>
</td>
<td></td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">07</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">for</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">op, value </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">in</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">opts:</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">08</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">    </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">if</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">op </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">=</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">=</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;-i&quot;</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">09</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">        </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">input_file </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">=</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">value</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">10</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">    </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">elif</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">op </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">=</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">=</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;-o&quot;</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">11</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">        </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">output_file </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">=</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">value</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">12</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">    </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">elif</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">op </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">=</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">=</div></td></tr></tbody></table></div>
<p> </p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&quot;-h&quot;</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">:</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">13</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">        </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">usage()</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<table border="0">
<tbody>
<tr>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">14</div></td></tr></tbody></table></div>
</td>
<td>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">        </div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">sys.exit()</div></td></tr></tbody></table></div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">代码解释：<br />
&lt;strong&gt;&lt;em&gt;a&lt;/em&gt;)&lt;/strong&gt; sys.argv[1:]为要处理的参数列表，sys.argv[0]为脚本名，所以用sys.argv[1:]过滤掉脚本名。<br />
&lt;strong&gt;&lt;em&gt;b&lt;/em&gt;)&lt;/strong&gt; &quot;hi:o:&quot;: 当一个选项只是表示开关状态时，即后面不带附加参数时，在分析串中写入选项字符。当选项后面是带一个附加参数时，在分析串中写入选项字符同时后面加一个&quot;:&quot;号。所以&quot;hi:o:&quot;就表示&quot;h&quot;是一个开关选项；&quot;i:&quot;和&quot;o:&quot;则表示后面应该带一个参数。<br />
&lt;strong&gt;&lt;em&gt;c&lt;/em&gt;)&lt;/strong&gt; 调用getopt函数。函数返回两个列表：opts和args。opts为分析出的格式信息。args为不属于格式信息的剩余的命令行参数。opts是一个两元组的列表。每个元素为：(选项串,附加参数)。如果没有附加参数则为空串''。</div></td></tr></tbody></table></div>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">getopt函数的第三个参数[, long_options]为可选的长选项参数，上面例子中的都为短选项(如-i -o)<br />
长选项格式举例:<br />
--version<br />
--file=error.txt<br />
让一个脚本同时支持短选项和长选项<br />
getopt.getopt(sys.argv[1:], &quot;hi:o:&quot;, [&quot;version&quot;, &quot;file=&quot;])</div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.32133.com/labrary/404.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>php接口远程调用url方法</title>
		<link>http://www.32133.com/skills/401.html</link>
		<comments>http://www.32133.com/skills/401.html#comments</comments>
		<pubDate>Tue, 06 Dec 2011 04:59:06 +0000</pubDate>
		<dc:creator>huanling</dc:creator>
				<category><![CDATA[Skills]]></category>

		<guid isPermaLink="false">http://www.32133.com/?p=401</guid>
		<description><![CDATA[示例代码1: 用file_get_contents 以get方式获取内容 &#60;?php $url='http://www.baidu.com/'; $html = file_get_contents($url); //print_r($http_response_header); ec($html); printhr(); printarr($http_response_header); printhr(); ?&#62; 示例代码2: 用fopen打开url, 以get方式获取内容 &#60;? $fp = fopen($url, 'r'); printarr(stream_get_meta_data($fp)); printhr(); while(!feof($fp)) { $result .= fgets($fp, 1024); } echo "url body:    $result"; printhr(); fclose($fp); ?&#62; 示例代码3：用file_get_contents函数,以post方式获取url &#60;?php $data = array ('foo' =&#62; 'bar'); $data = http_build_query($data); $opts = array ( 'http' =&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>示例代码1: 用file_get_contents 以get方式获取内容<br />
&lt;?php</p>
<p>$url='http://www.baidu.com/';</p>
<p>$html = file_get_contents($url);<br />
//print_r($http_response_header);<br />
ec($html);<br />
printhr();</p>
<p>printarr($http_response_header);</p>
<p>printhr();<br />
?&gt;</p>
<p>示例代码2: 用fopen打开url, 以get方式获取内容<br />
&lt;?</p>
<p>$fp = fopen($url, 'r');</p>
<p>printarr(stream_get_meta_da<wbr>ta($fp));</p>
<p>printhr();<br />
while(!feof($fp)) {<br />
$result .= fgets($fp, 1024);<br />
}<br />
echo "url body:    $result";<br />
printhr();</p>
<p>fclose($fp);<br />
?&gt;<br />
<span id="more-401"></span><br />
示例代码3：用file_get_contents函数,以post方式获取url</p>
<p>&lt;?php<br />
$da<wbr>ta = array ('foo' =&gt; 'bar');<br />
$da<wbr>ta = http_build_query($da<wbr>ta);</p>
<p>$opts = array (<br />
'http' =&gt; array (<br />
'method' =&gt; 'POST',<br />
'header'=&gt; "Content-type: application/x-www-form-urlencoded\r\n" .<br />
"Content-Length: " . strlen($da<wbr>ta) . "\r\n",<br />
'content' =&gt; $da<wbr>ta<br />
),<br />
);</p>
<p>$context = stream_context_create($opts);<br />
$html = file_get_contents('http://localhost/e/admin/test.html', false, $context);</p>
<p>echo $html;<br />
?&gt;</p>
<p>示例代码4：用fsockopen函数打开url，以get方式获取完整的数据，包括header和body<br />
&lt;?<br />
function get_url ($url,$cookie=false) {<br />
$url = parse_url($url);<br />
$query = $url[path]."?".$url[query];<br />
ec("Query:".$query);<br />
$fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);<br />
if (!$fp) {<br />
return false;<br />
} else {<br />
$request = "GET $query HTTP/1.1\r\n";<br />
$request .= "Host: $url[host]\r\n";<br />
$request .= "Connection: Close\r\n";<br />
if($cookie) $request.="Cookie:   $cookie\n";<br />
$request.="\r\n";<br />
fwrite($fp,$request);<br />
while(!@feof($fp)) {<br />
$result .= @fgets($fp, 1024);<br />
}<br />
fclose($fp);<br />
return $result;<br />
}<br />
}</p>
<p>//获取url的html部分，去掉header<br />
function GetUrlHTML($url,$cookie=false) {</p>
<p>$rowdata = get_url($url,$cookie);<br />
if($rowdata)<br />
{<br />
$body= stristr($rowdata,"\r\n\r\n");<br />
$body=substr($body,4,strlen($body));<br />
return $body;<br />
}</p>
<p>return false;</p>
<p>}</p>
<p>?&gt;</p>
<p>示例代码5：用fsockopen函数打开url，以POST方式获取完整的数据，包括header和body<br />
&lt;?<br />
function HTTP_Post($URL,$da<wbr>ta,$cookie, $referrer="") {</p>
<p>// parsing the given URL<br />
$URL_Info=parse_url($URL);</p>
<p>// Building referrer<br />
if($referrer=="") // if not given use this script as referrer<br />
$referrer="111";</p>
<p>// making string from $da<wbr>ta<br />
foreach($da<wbr>ta as $key=&gt;$value)<br />
$values[]="$key=".urlencode($value);<br />
$da<wbr>ta_string=implode("&amp;",$values);</p>
<p>// Find out which port is needed - if not given use standard (=80)<br />
if(!isset($URL_Info["port"]))<br />
$URL_Info["port"]=80;</p>
<p>// building POST-request:<br />
$request.="POST ".$URL_Info["path"]." HTTP/1.1\n";<br />
$request.="Host: ".$URL_Info["host"]."\n";<br />
$request.="Referer: $referer\n";<br />
$request.="Content-type: application/x-www-form-urlencoded\n";<br />
$request.="Content-length: ".strlen($da<wbr>ta_string)."\n";<br />
$request.="Connection: close\n";</p>
<p>$request.="Cookie:   $cookie\n";</p>
<p>$request.="\n";<br />
$request.=$da<wbr>ta_string."\n";</p>
<p>$fp = fsockopen($URL_Info["host"],$URL_Info["port"]);<br />
fputs($fp, $request);<br />
while(!feof($fp)) {<br />
$result .= fgets($fp, 1024);<br />
}<br />
fclose($fp);</p>
<p>return $result;<br />
}<br />
printhr();<br />
?&gt;<br />
示例代码6:使用curl库，使用curl库之前，你可能需要查看一下php.ini，查看是否已经打开了curl扩展</p>
<p>&lt;?<br />
$ch = curl_init();<br />
$timeout = 5;<br />
curl_setopt ($ch, CURLOPT_URL, 'http://www.baidu.com/');<br />
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);<br />
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);<br />
$file_contents = curl_exec($ch);<br />
curl_close($ch);</p>
<p>echo $file_contents;<br />
?&gt;<br />
关于curl库：<br />
curl官方网站http://curl.haxx.se/<br />
curl 是使用URL语法的传送文件工具，支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL证书、HTTP POST、HTTP PUT 、FTP 上传，kerberos、基于HTT格式的上传、代理、cookie、用户＋口令证明、文件传送恢复、http代理通道和大量其他有用的技巧</p>
<p>&lt;?<br />
function printarr(array $arr)<br />
{<br />
echo "&lt;br&gt; Row field count: ".count($arr)."&lt;br&gt;";<br />
foreach($arr as $key=&gt;$value)<br />
{</p>
<p>echo "$key=$value    &lt;br&gt;";<br />
}<br />
}<br />
?&gt;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></p>
]]></content:encoded>
			<wfw:commentRss>http://www.32133.com/skills/401.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>preg_match学习，官方解释各种迷惑的可以参考下</title>
		<link>http://www.32133.com/share/396.html</link>
		<comments>http://www.32133.com/share/396.html#comments</comments>
		<pubDate>Fri, 25 Nov 2011 12:03:05 +0000</pubDate>
		<dc:creator>huanling</dc:creator>
				<category><![CDATA[Share]]></category>

		<guid isPermaLink="false">http://www.32133.com/?p=396</guid>
		<description><![CDATA[转：http://118ss.blog.163.com/blog/static/6560818200852592847982/ 大家一看到preg_match肯定会头痛的。。。其实没什么，下面我就尽力给还不明白的兄弟们争取讲明白了： 在这里我就不解释preg_match的说明了，朋友们可以通过php手册查看..先来个简单点的: preg_match("/^(http://)?([^/]+)/i", "http://www.php.net/index.html", $matches); $host = $matches[2]; // 从主机名中取得后面两段 preg_match("/[^./]+.[^./]+$/", $host, $matches); echo "domain name is: {$matches[0]}n"; 这是手册里的例子。多数人对preg_match犯晕都出在正则上，以后我也会介绍正则。先看这个例子， preg_match($pattern,$string,$matcher)其中$pattern对应的就是”/^(http://)?([^/]+)/i $str 是http://www.php.net/index.html.$match是匹配到的结果。按照手册上的意思： 如果提供了 matches，则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本，$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本，以此类推。 这是什么意思呢？第一句就不用解释了，$matches[0] 将包含与整个模式匹配的文本。 咱们用pring_r打印出来第一个$matches： Array ( [0] =&#62; http://www.php.net [1] =&#62; http:// [2] =&#62; www.php.net ) 这回明白了吧。。$matches[0] 将包含与整个模式匹配的文本，$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本。在正则中，()代表模式：匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在JScript 中则使用 $0…$9 属性。就是说数组中下标为1的值就是正则中/^(http://)?([^/]+)/i第一个()里的值！数组下标２的值以此类推 PHP extract() 函数 PHP [...]]]></description>
			<content:encoded><![CDATA[<p>转：<a href="http://118ss.blog.163.com/blog/static/6560818200852592847982/">http://118ss.blog.163.com/blog/static/6560818200852592847982/</a></p>
<p>大家一看到preg_match肯定会头痛的。。。其实没什么，下面我就尽力给还不明白的兄弟们争取讲明白了：</p>
<p>在这里我就不解释preg_match的说明了，朋友们可以通过php手册查看..先来个简单点的:</p>
<p>preg_match("/^(http://)?([^/]+)/i",</p>
<p>"<a href="http://www.php.net/index.html" rel="nofollow">http://www.php.net/index.html</a>",</p>
<p>$matches);</p>
<p>$host = $matches[2];</p>
<p>//</p>
<p>从主机名中取得后面两段</p>
<p>preg_match("/[^./]+.[^./]+$/", $host, $matches);</p>
<p>echo</p>
<p>"domain name is: {$matches[0]}n";</p>
<p>这是手册里的例子。多数人对preg_match犯晕都出在正则上，以后我也会介绍正则。先看这个例子，</p>
<p>preg_match($pattern,$string,$matcher)其中$pattern对应的就是”/^(http://)?([^/]+)/i</p>
<p>$str</p>
<p>是<a href="http://www.php.net/index.html.$match" rel="nofollow">http://www.php.net/index.html.$match</a>是匹配到的结果。按照手册上的意思：</p>
<p>如果提供了</p>
<p>matches，则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本，$matches[1]</p>
<p>将包含与第一个捕获的括号中的子模式所匹配的文本，以此类推。</p>
<p>这是什么意思呢？第一句就不用解释了，$matches[0]</p>
<p>将包含与整个模式匹配的文本。</p>
<p>咱们用pring_r打印出来第一个$matches：</p>
<p>Array ( [0] =&gt; <a href="http://www.php.net/" rel="nofollow">http://www.php.net</a> [1] =&gt; http:// [2] =&gt; <a href="http://www.php.net/" rel="nofollow">www.php.net</a> )</p>
<p>这回明白了吧。。$matches[0]</p>
<p>将包含与整个模式匹配的文本，$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本。在正则中，()代表模式：匹配 pattern</p>
<p>并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在JScript 中则使用</p>
<p>$0…$9 属性。就是说数组中下标为1的值就是正则中/^(<a href="http://%29/?([^/]+)/i" rel="nofollow">http://)?([^/]+)/i</a>第一个()里的值！数组下标２的值以此类推</p>
<p><span id="more-396"></span></p>
<p>PHP extract() 函数</p>
<p><a href="http://www.w3school.com.cn/php/php_ref_array.asp" rel="nofollow">PHP Array 函数</a></p>
<p>定义和用法</p>
<p>PHP extract() 函数从数组中把变量导入到当前的符号表中。</p>
<p>对于数组中的每个元素，键名用于变量名，键值用于变量值。</p>
<p>第二个参数 type 用于指定当某个变量已经存在，而数组中又有同名元素时，extract() 函数如何对待这样的冲突。</p>
<p>本函数返回成功设置的变量数目。</p>
<p>语法</p>
<p>extract(array,extract_rules,prefix)</p>
<table>
<tbody>
<tr>
<th>参数</th>
<th>描述</th>
</tr>
<tr>
<td>array</td>
<td>必需。规定要使用的输入。</td>
</tr>
<tr>
<td>extract_rules</td>
<td>可选。extract() 函数将检查每个键名是否为合法的变量名，同时也检查和符号表中的变量名是否冲突。</p>
<p>对非法、数字和冲突的键名的处理将根据此参数决定。可以是以下值之一：</p>
<p>可能的值：</p>
<ul>
<li>EXTR_OVERWRITE - 默认。如果有冲突，则覆盖已有的变量。</li>
<li>EXTR_SKIP - 如果有冲突，不覆盖已有的变量。（忽略数组中同名的元素）</li>
<li>EXTR_PREFIX_SAME - 如果有冲突，在变量名前加上前缀 prefix。自 PHP 4.0.5 起，这也包括了对数字索引的处理。</li>
<li>EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix（第三个参数）。</li>
<li>EXTR_PREFIX_INVALID - 仅在非法或数字变量名前加上前缀 prefix。本标记是 PHP 4.0.5 新加的。</li>
<li>EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时，覆盖它们的值。其它的都不处理。可以用在已经定义了一组合法的变量，然后要从一个数组例如 $_REQUEST 中提取值覆盖这些变量的场合。本标记是 PHP 4.2.0 新加的。</li>
<li>EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时，建立附加了前缀的变量名，其它的都不处理。本标记是 PHP 4.2.0 新加的。</li>
<li>EXTR_REFS - 将变量作为引用提取。这有力地表明了导入的变量仍然引用了 var_array 参数的值。可以单独使用这个标志或者在 extract_type 中用 OR 与其它任何标志结合使用。本标记是 PHP 4.3.0 新加的。</li>
</ul>
</td>
</tr>
<tr>
<td>prefix</td>
<td>可选。请注意 prefix 仅在 extract_type 的值是 EXTR_PREFIX_SAME，EXTR_PREFIX_ALL，EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名，将不会导入到符号表中。</p>
<p>前缀和数组键名之间会自动加上一个下划线。</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>例子 1</p>
<p>&lt;?php$a = 'Original';$my_array = array("a" =&gt; "Cat","b" =&gt; "Dog", "c" =&gt; "Horse");extract($my_array);echo "\$a = $a; \$b = $b; \$c = $c";?&gt;</p>
<p>输出：</p>
<p>$a = Cat; $b = Dog; $c = Horse</p>
<p>例子 2</p>
<p>使用全部参数：</p>
<p>&lt;?php$a = 'Original';$my_array = array("a" =&gt; "Cat","b" =&gt; "Dog", "c" =&gt; "Horse");extract($my_array, EXTR_PREFIX_SAME, 'dup');echo "\$a = $a; \$b = $b; \$c = $c; \$dup_a = $dup_a;";?&gt;</p>
<p>输出：</p>
<p>$a = Original; $b = Dog; $c = Horse; $dup_a = Cat;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.32133.com/share/396.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下vi命令大全</title>
		<link>http://www.32133.com/share/394.html</link>
		<comments>http://www.32133.com/share/394.html#comments</comments>
		<pubDate>Thu, 24 Nov 2011 03:04:52 +0000</pubDate>
		<dc:creator>huanling</dc:creator>
				<category><![CDATA[Share]]></category>

		<guid isPermaLink="false">http://www.32133.com/?p=394</guid>
		<description><![CDATA[文本编辑器是所有计算机系统中最常用的一种工具。UNIX下的编辑器有ex,sed和vi等，其中，使用最为广泛的是vi，而vi命令繁多，论坛里好像这方面的总结不多，以下稍做总结，以资共享！渴望更正和补充！ 进入vi的命令 vi filename :打开或新建文件，并将光标置于第一行首 vi +n filename ：打开文件，并将光标置于第n行首 vi + filename ：打开文件，并将光标置于最后一行首 vi +/pattern filename：打开文件，并将光标置于第一个与pattern匹配的串处 vi -r filename ：在上次正用vi编辑时发生系统崩溃，恢复filename vi filename....filename ：打开多个文件，依次进行编辑 移动光标类命令 h ：光标左移一个字符 l ：光标右移一个字符 space：光标右移一个字符 Backspace：光标左移一个字符 k或Ctrl+p：光标上移一行 j或Ctrl+n ：光标下移一行 Enter ：光标下移一行 w或W ：光标右移一个字至字首 b或B ：光标左移一个字至字首 e或E ：光标右移一个字至字尾 ) ：光标移至句尾 ( ：光标移至句首 }：光标移至段落开头 {：光标移至段落结尾 nG：光标移至第n行首 n+：光标下移n行 n-：光标上移n行 n$：光标移至第n行尾 H ：光标移至屏幕顶行 M ：光标移至屏幕中间行 [...]]]></description>
			<content:encoded><![CDATA[<p>文本编辑器是所有计算机系统中最常用的一种工具。UNIX下的编辑器有ex,sed和vi等，其中，使用最为广泛的是vi，而vi命令繁多，论坛里好像这方面的总结不多，以下稍做总结，以资共享！渴望更正和补充！  </p>
<p>进入vi的命令<br />
vi filename :打开或新建文件，并将光标置于第一行首<br />
vi +n filename ：打开文件，并将光标置于第n行首<br />
vi + filename ：打开文件，并将光标置于最后一行首<br />
vi +/pattern filename：打开文件，并将光标置于第一个与pattern匹配的串处<br />
vi -r filename ：在上次正用vi编辑时发生系统崩溃，恢复filename<br />
vi filename....filename ：打开多个文件，依次进行编辑 </p>
<p>移动光标类命令<br />
h ：光标左移一个字符<br />
l ：光标右移一个字符<br />
space：光标右移一个字符<br />
Backspace：光标左移一个字符<br />
k或Ctrl+p：光标上移一行<br />
j或Ctrl+n ：光标下移一行<br />
Enter ：光标下移一行<br />
w或W ：光标右移一个字至字首<br />
b或B ：光标左移一个字至字首<br />
e或E ：光标右移一个字至字尾<br />
) ：光标移至句尾<br />
( ：光标移至句首<br />
}：光标移至段落开头<br />
{：光标移至段落结尾<br />
nG：光标移至第n行首<br />
n+：光标下移n行<br />
n-：光标上移n行<br />
n$：光标移至第n行尾<br />
H ：光标移至屏幕顶行<br />
M ：光标移至屏幕中间行<br />
L ：光标移至屏幕最后行<br />
0：（注意是数字零）光标移至当前行首<br />
$：光标移至当前行尾 </p>
<p>屏幕翻滚类命令<br />
Ctrl+u：向文件首翻半屏<br />
Ctrl+d：向文件尾翻半屏<br />
Ctrl+f：向文件尾翻一屏<br />
Ctrl＋b；向文件首翻一屏<br />
nz：将第n行滚至屏幕顶部，不指定n时将当前行滚至屏幕顶部。 </p>
<p>插入文本类命令<br />
i ：在光标前<br />
I ：在当前行首<br />
a：光标后<br />
A：在当前行尾<br />
o：在当前行之下新开一行<br />
O：在当前行之上新开一行<br />
r：替换当前字符<br />
R：替换当前字符及其后的字符，直至按ESC键<br />
s：从当前光标位置处开始，以输入的文本替代指定数目的字符<br />
S：删除指定数目的行，并以所输入文本代替之<br />
ncw或nCW：修改指定数目的字<br />
nCC：修改指定数目的行 </p>
<p>删除命令<br />
ndw或ndW：删除光标处开始及其后的n-1个字<br />
do：删至行首<br />
d$：删至行尾<br />
ndd：删除当前行及其后n-1行<br />
x或X：删除一个字符，x删除光标后的，而X删除光标前的<br />
Ctrl+u：删除输入方式下所输入的文本<br />
<span id="more-394"></span><br />
搜索及替换命令<br />
/pattern：从光标开始处向文件尾搜索pattern<br />
?pattern：从光标开始处向文件首搜索pattern<br />
n：在同一方向重复上一次搜索命令<br />
N：在反方向上重复上一次搜索命令<br />
：s/p1/p2/g：将当前行中所有p1均用p2替代<br />
：n1,n2s/p1/p2/g：将第n1至n2行中所有p1均用p2替代<br />
：g/p1/s//p2/g：将文件中所有p1均用p2替换 </p>
<p>选项设置<br />
all：列出所有选项设置情况<br />
term：设置终端类型<br />
ignorance：在搜索中忽略大小写<br />
list：显示制表位(Ctrl+I)和行尾标志（$)<br />
number：显示行号<br />
report：显示由面向行的命令修改过的数目<br />
terse：显示简短的警告信息<br />
warn：在转到别的文件时若没保存当前文件则显示NO write信息<br />
nomagic：允许在搜索模式中，使用前面不带“\”的特殊字符<br />
nowrapscan：禁止vi在搜索到达文件两端时，又从另一端开始<br />
mesg：允许vi显示其他用户用write写到自己终端上的信息 </p>
<p>最后行方式命令<br />
：n1,n2 co n3：将n1行到n2行之间的内容拷贝到第n3行下<br />
：n1,n2 m n3：将n1行到n2行之间的内容移至到第n3行下<br />
：n1,n2 d ：将n1行到n2行之间的内容删除<br />
：w ：保存当前文件<br />
：e filename：打开文件filename进行编辑<br />
：x：保存当前文件并退出<br />
：q：退出vi<br />
：q!：不保存文件并退出vi<br />
：!command：执行shell命令command<br />
：n1,n2 w!command：将文件中n1行至n2行的内容作为command的输入并执行之，若不指定n1，n2，则表示将整个文件内容作为command的输入<br />
：r!command：将命令command的输出结果放到当前行 </p>
<p>寄存器操作<br />
"?nyy：将当前行及其下n行的内容保存到寄存器？中，其中?为一个字母，n为一个数字<br />
"?nyw：将当前行及其下n个字保存到寄存器？中，其中?为一个字母，n为一个数字<br />
"?nyl：将当前行及其下n个字符保存到寄存器？中，其中?为一个字母，n为一个数字<br />
"?p：取出寄存器？中的内容并将其放到光标位置处。这里？可以是一个字母，也可以是一个数字<br />
ndd：将当前行及其下共n行文本删除，并将所删内容放到1号删除寄存器中。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.32133.com/share/394.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java无数据源连接Access解决方案，获取mdb相对路径</title>
		<link>http://www.32133.com/labrary/391.html</link>
		<comments>http://www.32133.com/labrary/391.html#comments</comments>
		<pubDate>Fri, 09 Sep 2011 08:06:41 +0000</pubDate>
		<dc:creator>huanling</dc:creator>
				<category><![CDATA[Labrary]]></category>

		<guid isPermaLink="false">http://www.32133.com/?p=391</guid>
		<description><![CDATA[1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071package mytest; import java.sql.*; import java.io.*; import java.net.*; public class AccessDBConn &#123; &#160; &#160; private Connection conn = null; &#160; &#160; private File file = null; &#160; &#160; private URL url = null; //之所以要用URL是因为可以通过file.toURI()得到含有空格的地址。 &#160; &#160; public Connection AccessDBConn&#40;&#41; &#123; &#160; &#160;String driver=&#34;sun.jdbc.odbc.JdbcOdbcDriver&#34;; &#160; &#160; &#160; &#160; //获得数据库的真实路径 &#160; &#160; String dburl = String.valueOf&#40;Thread.currentThread&#40;&#41;.getContextClassLoader&#40;&#41;.getResource&#40;&#34;&#34;&#41;&#41;; &#160; [...]]]></description>
			<content:encoded><![CDATA[<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">mytest</span><span style="color: #339933;">;</span><br />
<br />
<br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.*</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.io.*</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.net.*</span><span style="color: #339933;">;</span><br />
<br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AccessDBConn <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">Connection</span> conn <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">File</span> file <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">URL</span> url <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//之所以要用URL是因为可以通过file.toURI()得到含有空格的地址。</span><br />
<br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Connection</span> AccessDBConn<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp;<span style="color: #003399;">String</span> driver<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp;<br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//获得数据库的真实路径</span><br />
<br />
&nbsp; &nbsp; <span style="color: #003399;">String</span> dburl <span style="color: #339933;">=</span> <span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Thread</span>.<span style="color: #006633;">currentThread</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getContextClassLoader</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getResource</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; dburl <span style="color: #339933;">=</span> dburl <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;../../family.mdb&quot;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//得到文件的URL: 'file:/C:\...'</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; url<span style="color: #339933;">=</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">URL</span><span style="color: #009900;">&#40;</span>dburl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; file<span style="color: #339933;">=</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">File</span><span style="color: #009900;">&#40;</span>url.<span style="color: #006633;">toURI</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//用toURI()就解决空格问题。</span><br />
<br />
<span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; dburl <span style="color: #339933;">=</span> file.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">//绝对路径</span><br />
<br />
&nbsp; &nbsp; &nbsp; <br />
<br />
&nbsp; &nbsp; <span style="color: #003399;">String</span> accessUrl<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=&quot;</span><span style="color: #339933;">+</span>dburl<span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">Class</span>.<span style="color: #006633;">forName</span><span style="color: #009900;">&#40;</span>driver<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; conn <span style="color: #339933;">=</span> <span style="color: #003399;">DriverManager</span>.<span style="color: #006633;">getConnection</span><span style="color: #009900;">&#40;</span>accessUrl<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> conn<span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp;AccessDBConn dbc<span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> AccessDBConn<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp;dbc.<span style="color: #006633;">AccessDBConn</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.32133.com/labrary/391.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL引擎</title>
		<link>http://www.32133.com/labrary/388.html</link>
		<comments>http://www.32133.com/labrary/388.html#comments</comments>
		<pubDate>Thu, 01 Sep 2011 12:30:10 +0000</pubDate>
		<dc:creator>huanling</dc:creator>
				<category><![CDATA[Labrary]]></category>

		<guid isPermaLink="false">http://www.32133.com/?p=388</guid>
		<description><![CDATA[MySQL常用的有以下几种引擎：ISAM、MyISAM、HEAP、InnoDB和Berkley（BDB）。 ISAM ISAM是一个定义明确且历经时间考验的数据表格管理方法，它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此，ISAM执行读取操作的速度很快，而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于，它不支持事务处理，也不能够容错：如果你的硬盘崩溃了，那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里，那就必须经常备份你所有的实时数据，通过其复制特性，MySQL能够支持这样的备份应用程序。 MyISAM MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能，MyISAM还使用一种表格锁定的机制，来优化多个并发的读写操作。其代价是你需要经常运行OPTIMIZE TABLE命令，来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展，例如用来修复数据库文件的MyISAMChk工具和用来恢复浪费空间的 MyISAMPack工具。 MyISAM强调了快速读取操作，这可能就是为什么MySQL受到了Web开发如此青睐的主要原因：在Web开发中你所进行的大量数据操作都是读取操作。所以，大多数虚拟主机提供商和Internet平台提供商（Internet Presence Provider，IPP）只允许使用MyISAM格式。 HEAP HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MyISAM 都快，但是它所管理的数据是不稳定的，而且如果在关机之前没有进行保存，那么所有的数据都会丢失。在数据行被删除的时候，HEAP也不会浪费大量的空间。 HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住，在用完表格之后就删除表格。让我再重复一遍：在你用完表格之后，不要忘记删除表格。 InnoDB和Berkley DB InnoDB和Berkley DB（BDB）数据库引擎都是造就MySQL灵活性的技术的直接产品，这项技术就是MySQL++ API。在使用MySQL的时候，你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAM和 MyISAM引擎慢很多，但是InnoDB和BDB包括了对事务处理和外来键的支持，这两点都是前两个引擎所没有的。如前所述，如果你的设计需要这些特性中的一者或者两者，那你就要被迫使用后两个引擎中的一个了。 认识完了这么多的引擎，我们也知道了它们应该在什么情况下拿来应急，那么接着我们就要学会如何来更换这些引擎了。 Globle：一种最简单的方法就是更改服务器配置，直接将其设置成你所需要的引擎。这个在 win下通过更改服务器安装目录下的mysql.ini中的default-storage-engine项即可，也可以通过运行MySQL Server Instance Configuration Wizard做简单的设置。 Per Table:除了全局的方法外，还有一种更灵活的配置方法，那就是按表来设置引擎，这样我们就可以把那些需要用到事务处理的表设置成InnoDB，其他设置成MyISAM,将性能提升到极致，这是不是很令人兴奋呢？设置方法也比较简单： 1、你可以在Create Table语句的最后添加扩展语句，如TYPE=MyISAM（或者ENGINE = INNODB）来指定当前标的引擎类型。也可以用Alter语句在建立表个后进行更改。当你不清楚当前数据库中各表的引擎时可以使用SHOW TABLE STATUS FROM DBname来查看。 2、使用随MySQL服务器发布同时提供的MySQL客户端来创建表，在创建时可以选择使用的存储引擎。 不同的引擎选择在不同的业务处理上，性能将有天壤之别！！]]></description>
			<content:encoded><![CDATA[<p>MySQL常用的有以下几种引擎：ISAM、MyISAM、HEAP、InnoDB和Berkley（BDB）。</p>
<p>ISAM<br />
ISAM是一个定义明确且历经时间考验的数据表格管理方法，它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此，ISAM执行读取操作的速度很快，而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于，它不支持事务处理，也不能够容错：如果你的硬盘崩溃了，那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里，那就必须经常备份你所有的实时数据，通过其复制特性，MySQL能够支持这样的备份应用程序。<br />
<span id="more-388"></span><br />
MyISAM<br />
MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能，MyISAM还使用一种表格锁定的机制，来优化多个并发的读写操作。其代价是你需要经常运行OPTIMIZE TABLE命令，来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展，例如用来修复数据库文件的MyISAMChk工具和用来恢复浪费空间的 MyISAMPack工具。<br />
MyISAM强调了快速读取操作，这可能就是为什么MySQL受到了Web开发如此青睐的主要原因：在Web开发中你所进行的大量数据操作都是读取操作。所以，大多数虚拟主机提供商和Internet平台提供商（Internet Presence Provider，IPP）只允许使用MyISAM格式。</p>
<p>HEAP<br />
HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MyISAM 都快，但是它所管理的数据是不稳定的，而且如果在关机之前没有进行保存，那么所有的数据都会丢失。在数据行被删除的时候，HEAP也不会浪费大量的空间。 HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住，在用完表格之后就删除表格。让我再重复一遍：在你用完表格之后，不要忘记删除表格。</p>
<p>InnoDB和Berkley DB<br />
InnoDB和Berkley DB（BDB）数据库引擎都是造就MySQL灵活性的技术的直接产品，这项技术就是MySQL++ API。在使用MySQL的时候，你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAM和 MyISAM引擎慢很多，但是InnoDB和BDB包括了对事务处理和外来键的支持，这两点都是前两个引擎所没有的。如前所述，如果你的设计需要这些特性中的一者或者两者，那你就要被迫使用后两个引擎中的一个了。</p>
<p>认识完了这么多的引擎，我们也知道了它们应该在什么情况下拿来应急，那么接着我们就要学会如何来更换这些引擎了。<br />
Globle：一种最简单的方法就是更改服务器配置，直接将其设置成你所需要的引擎。这个在 win下通过更改服务器安装目录下的mysql.ini中的default-storage-engine项即可，也可以通过运行MySQL Server Instance Configuration Wizard做简单的设置。<br />
Per Table:除了全局的方法外，还有一种更灵活的配置方法，那就是按表来设置引擎，这样我们就可以把那些需要用到事务处理的表设置成InnoDB，其他设置成MyISAM,将性能提升到极致，这是不是很令人兴奋呢？设置方法也比较简单：<br />
1、你可以在Create Table语句的最后添加扩展语句，如TYPE=MyISAM（或者ENGINE = INNODB）来指定当前标的引擎类型。也可以用Alter语句在建立表个后进行更改。当你不清楚当前数据库中各表的引擎时可以使用SHOW TABLE STATUS FROM DBname来查看。<br />
2、使用随MySQL服务器发布同时提供的MySQL客户端来创建表，在创建时可以选择使用的存储引擎。<br />
不同的引擎选择在不同的业务处理上，性能将有天壤之别！！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.32133.com/labrary/388.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>内网用户轻松穿越外网 ipv6+GAE</title>
		<link>http://www.32133.com/share/370.html</link>
		<comments>http://www.32133.com/share/370.html#comments</comments>
		<pubDate>Tue, 09 Aug 2011 10:45:35 +0000</pubDate>
		<dc:creator>huanling</dc:creator>
				<category><![CDATA[Share]]></category>

		<guid isPermaLink="false">http://www.32133.com/?p=370</guid>
		<description><![CDATA[　　引言：此文为校园网用户量身打造。按本文介绍的方法，成功后的效果是：你只需登录内网，然后通过IPv6网络和GAE个人代理服务，即可访问外网。本方案可以为你节省全部网费开支，当然运营商不大愿意看到的这样的结果，但我知道这是广大对于电信行业的垄断式经营怨声载道却又无可奈何的学子们梦寐以求的上网方案。我是站在群众一边的。 　　话又说回来，各位电信巨头在每个季度赚得盆满钵满之余，稍稍为祖国的教育事业让出一份利润，也不为过吧？要知道，大多数学生都是没有收入的，而目前提供给我们的各种网络业务，质量参差不齐，服务令人失望，而且仅此一家别无分号。 　　所以，每一个神奇的穿越技巧，都对应着一个糟糕的既有业务。 　　如果我们可以有选择，如果现在的各种服务都合情合理正规正常，没人会吃饱了撑的去折腾这些。 　　闲话到此为止，下面开始正式的技术讨论：）   　　首先，概述操作步骤如下，这是你将要在本文的指导下完成的整个配置流程： 　　1. 开启IPv6服务 　　2. 申请Google账号 　　3. 创建个人GAE应用 　　4. 配置GAppProxy/WallProxy代理 　　5. 更改本机hosts文件 　　6. 设置浏览器代理地址 　　7. 启动代理，开始上网！ 　　以下是详细操作流程，按着步骤一步一步来，一定能成功的，祝你好运！ 　　一、IPv6篇 　　1.1 准备工作： 　　1）关闭本地连接的第三方防火墙 　　当然你把本校的隧道地址添加为防火墙的白名单也可，但由于不同的防火墙软件设置不一样，一旦设置不对了就完全用不了IPv6，这里不再展开讨论。 　　关闭防火墙步骤：右击本地连接→属性，在“在连接时使用下列项目”中找到有你防火墙软件的名字那个选项，把前面的勾去掉，确定即可。 　　2）开启IPv6 helper服务 　　开始菜单，运行，输入“services.msc”（不要引号），打开服务窗口，找到“IPv6 helper service”，双击打开，启动类型改为“自动”，然后点击“启动”按钮，确定。 　　此外对于使用360安全卫士或者类似的国内所谓安全软件，由于它们会自作聪明地把这个必需服务给“优化”掉，所以你需要特别留意把禁掉的服务还原回来，否则IPv6是用不成的。 　　3）某些安装不成功情况下，在“运行”中输入“esentutl /p %windir%\security\Database\secedit.sdb”（不要引号），也可解决问题。 　　1.2 安装IPv6 　　（仅针对WinXP/2003，Vista和Win7自带IPv6，不必安装。） 　　开始，运行，输入“cmd”，回车打开命令提示符窗口；再输入“IPv6 install”，回车，搞定。 　　1.3 配置IPv6 　　由于校园网通常不是纯IPv6环境，所以需要一个“隧道”（很形象的比喻，具体技术细节大家有兴趣自己去搜吧），以电子科大的IPv6隧道设置为例（地址为：202.115.255.242） 　　配置步骤： 　　开始，运行，输入“cmd”，回车打开命令提示符窗口，输入“netsh”，回车，然后输入以下内容： 　　netsh&#62;int 　　netsh interface&#62;IPv6 　　netsh interface IPv6&#62;isatap 　　netsh interface [...]]]></description>
			<content:encoded><![CDATA[<p>　　引言：此文为校园网用户量身打造。按本文介绍的方法，成功后的效果是：你只需登录内网，然后通过IPv6网络和GAE个人代理服务，即可访问外网。本方案可以为你节省全部网费开支，当然运营商不大愿意看到的这样的结果，但我知道这是广大对于电信行业的垄断式经营怨声载道却又无可奈何的学子们梦寐以求的上网方案。我是站在群众一边的。</p>
<p>　　话又说回来，各位电信巨头在每个季度赚得盆满钵满之余，稍稍为祖国的教育事业让出一份利润，也不为过吧？要知道，大多数学生都是没有收入的，而目前提供给我们的各种网络业务，质量参差不齐，服务令人失望，而且仅此一家别无分号。</p>
<p>　　所以，每一个神奇的穿越技巧，都对应着一个糟糕的既有业务。</p>
<p>　　如果我们可以有选择，如果现在的各种服务都合情合理正规正常，没人会吃饱了撑的去折腾这些。</p>
<p>　　闲话到此为止，下面开始正式的技术讨论：）</p>
<p> <span id="more-370"></span></p>
<p>　　首先，概述操作步骤如下，这是你将要在本文的指导下完成的整个配置流程：</p>
<p>　　1. 开启IPv6服务</p>
<p>　　2. 申请Google账号</p>
<p>　　3. 创建个人GAE应用</p>
<p>　　4. 配置GAppProxy/WallProxy代理</p>
<p>　　5. 更改本机hosts文件</p>
<p>　　6. 设置浏览器代理地址</p>
<p>　　7. 启动代理，开始上网！</p>
<p>　　以下是详细操作流程，按着步骤一步一步来，一定能成功的，祝你好运！</p>
<p>　　<strong>一、IPv6篇</strong></p>
<p>　　1.1 准备工作：</p>
<p>　　1）关闭本地连接的第三方防火墙</p>
<p>　　当然你把本校的隧道地址添加为防火墙的白名单也可，但由于不同的防火墙软件设置不一样，一旦设置不对了就完全用不了IPv6，这里不再展开讨论。</p>
<p>　　关闭防火墙步骤：右击本地连接→属性，在“在连接时使用下列项目”中找到有你防火墙软件的名字那个选项，把前面的勾去掉，确定即可。</p>
<p>　　2）开启IPv6 helper服务</p>
<p>　　开始菜单，运行，输入“services.msc”（不要引号），打开服务窗口，找到“IPv6 helper service”，双击打开，启动类型改为“自动”，然后点击“启动”按钮，确定。</p>
<p>　　此外对于使用360安全卫士或者类似的国内所谓安全软件，由于它们会自作聪明地把这个必需服务给“优化”掉，所以你需要特别留意把禁掉的服务还原回来，否则IPv6是用不成的。</p>
<p>　　3）某些安装不成功情况下，在“运行”中输入“esentutl /p %windir%\security\Database\secedit.sdb”（不要引号），也可解决问题。</p>
<p>　　1.2 安装IPv6</p>
<p>　　（仅针对WinXP/2003，Vista和Win7自带IPv6，不必安装。）</p>
<p>　　开始，运行，输入“cmd”，回车打开命令提示符窗口；再输入“IPv6 install”，回车，搞定。</p>
<p>　　1.3 配置IPv6</p>
<p>　　由于校园网通常不是纯IPv6环境，所以需要一个“隧道”（很形象的比喻，具体技术细节大家有兴趣自己去搜吧），以电子科大的IPv6隧道设置为例（地址为：202.115.255.242）</p>
<p>　　配置步骤：</p>
<p>　　开始，运行，输入“cmd”，回车打开命令提示符窗口，输入“netsh”，回车，然后输入以下内容：</p>
<p>　　netsh&gt;int</p>
<p>　　netsh interface&gt;IPv6</p>
<p>　　netsh interface IPv6&gt;isatap</p>
<p>　　netsh interface IPv6 isatap&gt;set router 202.115.255.242</p>
<p>　　（注：对于非校园网用户，其实也可以借助隧道应用IPv6服务，比如设置为上海交大的隧道地址：isatap.sjtu.edu.cn，但速度就不很理想了，看IPTV通常会很卡。所以对于公网用户，不妨直接参考下文GAE篇进行代理，Google可是IPv4/IPv6通吃的）</p>
<p>　　完成后可打开http://www.6rank.edu.cn/网站进行验证，看能否登录，若可，则表示你的IPv6大功告成。（也可通过在命令行中输入“ipconfig”查看本机IP地址中有无形如“2001：******”的地址段，这个地址就是你的IPv6地址，若有，即表示配置成功）</p>
<p>　　1.4 更改HOSTS文件</p>
<p>　　更改hosts是最初等的翻墙术了，但在IPv6环境下效果那是出奇的好~</p>
<p>　　打开“C：\WINDOWS\system32\drivers\etc\”路径下的hosts文件（可用记事本打开）；</p>
<p>　　在末尾添加一组以Google为首的n多IPv6网站地址目录（传送门——最新Google IPv6 hosts地址集合：https://docs.google.com/View？id=dfkdmxnt_61d9ck9ffq，你会发现Google的IPv6地址数量很可观，多多益善啊！都复制进hosts里吧，这些可都是捷径啊~）</p>
<p>　　保存，退出。</p>
<p>　　你再用浏览器打开Google看看，是不是可以登上了？还不会跳转到Google HK，而且居然还可以查看网页快照！开心吧？且慢，再输入一个youtube.com试试，额滴神啊，阔别多年的U2B又回来了！爽翻了吧，呵呵~</p>
<p>　　好，我们歇一下，先开罐啤酒为生猛的IPv6干一杯~</p>
<p>　　接下来，轮到第二位主角——GAE——登场了，有了Google的引擎推动，IPv6那可是如虎添翼啊！</p>
<p>　　<strong>二、GAE篇——暨GAppProxy代理详解</strong></p>
<p>　　前文所介绍的IPv6技术只能达到访问部分外网的目的，可网络的世界是广阔的，天下甚多网站，一个小小的hosts岂能装得下？</p>
<p>　　况且所谓hosts翻墙，是很不稳妥的。</p>
<p>　　景德镇的局域网总是会出现各种意想不到的问题，所谓道高一尺魔高一丈，想用傻瓜的方式翻过GFW的高墙，那是不可能滴~</p>
<p>　　老罗不是说过么，坏人总是更勤奋一些。（我是坏人么？）</p>
<p>　　其实，下面将要介绍的GAE应用下的GAppProxy代理方法也不复杂，按照步骤操作，很快就能搞定~</p>
<p>　　Here we go！</p>
<p>　　2.1 准备工作</p>
<p>　　准备工作只有一条：你要有一个Google账号，也就是一个Gmail.</p>
<p>　　什么？你只用Qmail？呃，你还是真不关心自己的邮件安全，趁早换吧~原因不多说了……总之这种“网络严肃服务”（我自己下的定义，就是指邮箱、域名、账号等对自己来说等很重要的服务）还是尽量远离天朝IT企业，这些服务在他们的托管下，用着心里不踏实。</p>
<p>　　当然，这不是他们的错。</p>
<p>　　况且你已经摆平IPv6了，还添加了n多Google hosts，不整个Google账号享用一下，岂非暴殄天物？</p>
<p>　　好了，赶紧申请一个吧~（传送门：https://www.google.com/accounts/）</p>
<p>　　2.2 创建GAE</p>
<p>　　毫不夸张地说，GAE（Google App Engine）是Google划时代的产品。它的强大和便捷远远超出你的想象……打住打住。</p>
<p>　　下面是具体操作步骤图解：</p>
<p>　　1）打开"http://appengine.google.com/"，输入你的Google账户、密码，登录；</p>
<p>　　2） 点击“Create an Application”；</p>
<p>　　国家一栏选“Other”；</p>
<p>　　电话号码填“+86 你的手机号”（注意一个手机号只能注册一次）；</p>
<p>　　3） 片刻之后，Google会往你的手机发送一个验证短信，把验证码输入进去，确定；</p>
<p>　　4）填写你的Application Identifer，这个就是你以后上外网要仰仗的永久地址了，想个好点的名字哈（只能使用小写字母、数字和连字符“-”，长度不能小于6个字符。这里我使用的是uestcproxy，望文知意啊）；然后输入Application Title，确定；</p>
<p>　　注：“Authentication Options （Advanced）”中最好选择默认选项，即“Open to all Google Accounts user”，其中第三个选项（Open to all users with an OpenID Provider）貌似很有用，不过现在尚处于实验阶段，不推荐使用。</p>
<p>　　5）GAE应用创建成功！</p>
<p>　　以后使用时可以进入“Dashboard”，查看流量等使用信息。</p>
<p>　　注：每个Google账号可以申请十个GAE应用，每个GAE应用每天都有1G的流量（我通常一天的流量不超过100MB），足够用了。</p>
<p>　　2.3 配置服务器端</p>
<p>　　上一步仅仅是在Google为你申请了一个应用，但还未激活。你现在需要一个小小的上载工具，把Google服务器中的那个GAE代理服务激活，成为你的专属代理服务器！</p>
<p>　　下面先介绍应用GAppProxy代理的方法，下一篇再介绍WallProxy代理方案。</p>
<p>　　GAppProxy可以去项目下载专页下载，这里的版本最新（传送门：http://code.google.com/p/GAppProxy/downloads/list）。</p>
<p>　　下面是具体操作步骤：</p>
<p>　　1）点击“GAppProxy服务端源码+windows自动布署工具”，进入下载页面进行下载（下载地址：http://GAppProxy.googlecode.com/files/uploader-2.0.0-win.zip）；</p>
<p>　　2）把压缩包解开，点击uploader.exe，在AppID后输入你的Application Identifer，回车；</p>
<p>　　3）输入你的Gmail；</p>
<p>　　4）输入密码（注意：在输入密码的时候，屏幕不会有任何显示，不要紧，输完后回车即可）；</p>
<p>　　5）稍等片刻，待配置完毕，当出现“ready to start serving”，大功告成！ 打开 http://uestcproxy.appspot.com/fetch.py ，会看到你的GAppProxy服务器端已经在工作了：</p>
<p>　　2.4 配置GAppProxy本地代理</p>
<p>　　现在在Google的服务器中已经有了你的一席之地，接下来你就要在你的电脑和Google服务器之间打通一条通道，然后就能以Googl为跳板，遨游外面广阔的网络世界了！</p>
<p>　　这个通道，就由本地代理来开启。</p>
<p>　　所谓万事俱备，只欠代理^ ^</p>
<p>　　下面是具体操作步骤：</p>
<p>　　1）打开GAppProxy下载专页下载GAppProxy的Windows版客户端（下载地址：http://GAppProxy.googlecode.com/files/localproxy-2.0.0-win.zip）；</p>
<p>　　2）解开压缩包，用记事本打开proxy.conf文件；</p>
<p>　　在末行添加fetch_server = http://xxxxxx.appspot.com/fetch.py，这里的xxxxxx即为前面你申请的Application Identifer（注意行首没有“#”号），保存退出；</p>
<p>　　3）点击proxy.exe，开启代理！</p>
<p>　　此时若已经登录公网，那么将会出现如下画面：Direct Fetch后面是Yes，表示你已经与Google服务器建立了直接连接。</p>
<p>　　这时你再在浏览器中设置好如下代理：“127.0.0.1：8000”，就可以轻松翻墙，自由浏览了~而且你现在看下你的IP地理位置（传送门：http://www.geoiptool.com/），居然是美国加州山景城的IP，神奇吧~</p>
<p>　　当然，我们的最终目的是在不登录公网的情况下也可以自由浏览，作为一个准Geek，这种半自由状态是不能接受的。</p>
<p>　　下面在最后一节，隆重推出内网直通公网的杀手锏，各位童鞋打起精神咯~</p>
<p>　　2.5 配置APPSPOT的HOSTS地址映射</p>
<p>　　在开始真正的自由浏览之前，你还需做最后的一项工作： 为hosts添加当前的GoogleIPv6解析地址。</p>
<p>　　具体操作如下：</p>
<p>　　1）拨号进入校内网络；开始菜单，运行，输入“cmd”打开命令行窗口；</p>
<p>　　2）输入“ping IPv6.google.com”，回车，得到最新Google的IPv6解析地址，记下来；</p>
<p>　　3）用记事本打开hosts文件（位于C：\Windows\System32\drivers\etc），在末尾添加两行：</p>
<p>　　2404：6800：8007：：63 uestcproxy.appspot.com</p>
<p>　　2404：6800：8007：：63 www.appspot.com</p>
<p>　　这里“2404：6800：8007：：63”即为Google的IPv6解析地址（2010-10-31下午ping得到），“uestcproxy.appspot.com”是我申请的GAE地址。</p>
<p>　　注：添加appspot与Google的hosts地址映射非常重要，这是实现穿越的关键一环！</p>
<p>　　4）点击proxy.exe，开启代理！</p>
<p>　　此时Direct Fetch 后面为No，不必担心，这是因为你现在处于内网环境，但通过IPv6网络照样可以连接到Google的服务器。</p>
<p>　　5）现在，打开Internet选项，设置浏览器代理地址。</p>
<p>　　然后后打开你的浏览器，输入任意一个外网网址，回车！</p>
<p>　　哈哈，怎么样，是不是顺利打开了~再看看此时的proxy程序窗口，一行行的数据正滚滚而过，表示你的网卡与Google的服务器沟通良好~</p>
<p>　　然后再输入一个墙外的网站地址试试，是不是也可以顺畅打开了？</p>
<p>　　Congratulation！</p>
<p>　　至此，依托IPv6+GAppProxy技术，从内网穿越外网的任务大功告成！</p>
<p>　　好好享用吧：）</p>
<p>　　<strong>三、GAE番外篇——比GAppProxy更强大的WALLPROXY代理</strong></p>
<p>　　第三篇所介绍的方法是基于GAppProxy代理服务的，是个完整的解决方案。但GAppProxy有一个很不方便的地方，就是对https的支持很不好，比如Facebook和Twitter的加密账户页面就无法正常显示。还有就是对于很多SSL连接，每次打开浏览器都会弹出证书无效警告，由于我平时经常用Google的SSL搜索，每次打开新页面都要处理一下那个警告页面，使用久了也会感到不爽。</p>
<p>　　对于这个问题，GAppProxy项目的Groups上也讨论了很久，可解决方案不是太繁琐就是不完善，毕竟这只是个非商业项目，开发人员都是出于兴趣和爱好来维护，你也不能奢求太多。</p>
<p>　　后来在Twitter上偶然见一位网友提到另一个基于GAE的代理服务——WallProxy，据说可以很好地支持https，甚至还可以导入根证书而一劳永逸地解决SSL问题。</p>
<p>　　我顿时眼前一亮，连忙去搜索WallProxy的相关页面，很快看到步调博客上的《使用Google App Engine+WallProxy来看YouTube和玩Twitese》（传送门：http://www.budiao.biz/google-app-engineWallProxy.html），然后按照博主的方案一路操作下来，挂上代理一试——加密网站可以正常访问了~然后又试了下WallProxy独有的多app共存实现负载均衡技术，感觉也很不错，这下我申请的多个GAE-app地址都能派上用场，也不用担心每天1G的流量限制了。</p>
<p>　　虽然前文已经给出了完整的内网穿越外网的攻略，但鉴于WallProxy对加密服务的改善和灵活配置，我还是决定补充一个GAE的番外篇，把WallProxy隆重推荐给大家。</p>
<p>　　不过这里先说明下，WallProxy的设置步骤比之GAppProxy是比较繁琐的，而且你还要预装Python环境，如果实在懒得费功夫，而且对SSL应用要求不高的话，用GAppProxy代理足矣。</p>
<p>　　好，关于WallProxy的背景介绍到此为止，下面跟我来一起摆平这个不可多得的上网利器吧~</p>
<p>　　3.1 拥有至少一个GAE应用地址（方法同2.1~2.2）</p>
<p>　　3.2 安装Python</p>
<p>　　要求2.5以上，3.0以下版本。建议下载步调博主提供的压缩包（传送门：http://dl.dbank.com/c003f1c64w），这个压缩包已经包含了下文将要用到的所有工具，挺方便。</p>
<p>　　3.3 安装GAE SDK</p>
<p>　　SDK可以去GAE官方页面下载（传送门：http://code.google.com/intl/zh-CN/appengine/downloads.html）或者用3.2节给出的压缩包。</p>
<p>　　SDK这个套件不是必需的，但由于SDK用来管理上载服务实在很便捷，远比命令行来得直观，推荐安装。而且以后如果用到其他GAE服务（比如自建博客，自架Twitter API等）也会用得到。</p>
<p>　　如果你实在不想往电脑安装什么，可以用一个第三方上传工具SDUpload（传送门：http://code.google.com/p/sdapp/downloads/detail？name=SDUpload%200.1.rar&amp;can=2&amp;q=），不过对不熟悉命令行操作的人来说用起来稍显不便，这里不再赘述。</p>
<p>　　下文还是以SDK操作为例。</p>
<p>　　3.4 设置SDK</p>
<p>　　1）安装完SDK后，启动“Google App Engine Launcher”程序（图标是一个涡轮引擎），打开Edit-Preference；</p>
<p>　　2）Python栏选择你的Python安装路径；</p>
<p>　　3）App Engine SDK栏选择你的SDK安装路径；</p>
<p>　　4）Editor栏可选一个你用着顺手的编辑器，也可空着（默认为写字板）；OK.</p>
<p>　　3.5 配置上传文件</p>
<p>　　1）去WallProxy的下载页面下载WallProxy工具包（V0.3.7_for_windows版传送门：http://code.google.com/p/wallproxy/downloads/detail？name=wallproxy-win.7z&amp;can=2&amp;q=），或者使用3.2节给出的压缩包；</p>
<p>　　2）解压缩后得到三个文件夹：gae_server、php_server、local；</p>
<p>　　3）启动Google App Engine Launcher；</p>
<p>　　4）打开File-Existing Application，在Application Path中指定三个文件夹中的gae_server所在的硬盘地址，点击“Add”；</p>
<p>　　5）此时会发现SDK窗口中添加了一行内容，选中，然后点击“Edit”按钮，开始编辑app文件；</p>
<p>　　6）把application：后面的“your-gae-id”替换为你自己创建的GAE-app名称，即Application Identifer，保存；</p>
<p>　　7）回到SDK面板，你会发现name一栏中已经更新为你刚刚替换的Application Identifer；</p>
<p>　　点击“Deploy”，然后在打开的窗口中输入你的Gmail账号、密码；</p>
<p>　　点击“OK”，开始上传；</p>
<p>　　8）上传成功后即可关闭SDK程序。</p>
<p>　　3.6 添加APPSPOT与GOOGLE的IPv6地址的HOSTS地址映射（同2.5节）。</p>
<p>　　3.7 配置本地代理</p>
<p>　　1）打开三个文件夹中的local，点击WallProxy.exe；</p>
<p>　　2）点击“设置”按钮；</p>
<p>　　在打开的窗口中，把紧跟GAE_PROXY的一行中的'url'后面的地址替换为你自己的GAE应用地址，格式为'http://XXXXXX.appspot.com/fetch.php'（注意是php），确定退出；</p>
<p>　　3）点击“启动”按钮，此时若一切操作无误，代理便开始工作了；</p>
<p>　　4）设置浏览器代理地址为：127.0.0.1：8086（注意是8086，GAppProxy的是8000）。</p>
<p>　　现在随便打开一个网站试试吧~不出意外的话，你已经能够畅游万维网了！</p>
<p>　　3.8 WallProxy拓展应用</p>
<p>　　1）设置多GAE-app，只需在本地代理设置中添加多行GAE-app url即可（当然前提是这些GAE-app已经开通并且配置成功，检验是否配置成功的方法是：在浏览器中打开这个url，如果页面自动跳转到一个叫做“和谐社”的Twitter页面，就表示成功了- -III）</p>
<p>　　2）导入ca根证书</p>
<p>　　这是WallProxy的特色功能，也是我青睐它的主要原因；</p>
<p>　　在第一次执行WallProxy.exe后，会在local文件夹下生成一个cert文件夹，打开后会看到一个ca证书文件；</p>
<p>　　打开后点击“安装证书”，然后按照提示将之装入“受信任的根证书颁发机构”；</p>
<p>　　安装完成后再打开任何SSL等加密连接，都不会再出现使用GAppProxy时遇到的证书无效问题。</p>
<p>　　终于可以把默认搜索引擎设为Google with SSL了~</p>
<p>　　3.9 WALLPROXY与GAppProxy同时使用</p>
<p>　　虽然WallProxy已经足够优秀，但我还是不愿让它彻底取代GAppProxy，GAppProxy的简单易用特性还是蛮招人喜爱的；另一方面，毕竟人家做这个完全是义务劳动，再加上n多“不可控”因素（你懂的），谁也说不准某天某时某个代理就挂了，到那时该如何是好？</p>
<p>　　不如两个代理服务共存吧~</p>
<p>　　可以吗？</p>
<p>　　可以的~就算你手头只有一个GAE-app，也可以同时开两个代理！</p>
<p>　　还是以前文我申请的名为uestcproxy的GAE-app为例，现在已有http://uestcproxy.appspot.com/fetch.py配置为我的GAppProxy代理服务器，如果我再用SDK的把uestcproxy配置为WallProxy的代理服务器的话，很显然GAppProxy就不能用了。</p>
<p>　　解决思路就在于每个GAE-app服务其实可以有多个版本，不同版本对应不同的地址，然后让GAppProxy和WallProxy客户端代理不同的地址，就不会产生冲突了。</p>
<p>　　具体操作步骤如下：</p>
<p>　　1）在3.5节中，注意app文件内容中第二行有“version”，这就是版本号，默认为1；</p>
<p>　　现在将之改为2.然后保存，上传。</p>
<p>　　2）此时GAE将会为你分配两个不同的地址，分别是：</p>
<p>　　http://1.latest.uestcproxy.appspot.com</p>
<p>　　http://2.latest.uestcproxy.appspot.com</p>
<p>　　对应两个不同的版本。</p>
<p>　　你若输入http://uestcproxy.appspot.com/fetch.php，回车后将显示错误；</p>
<p>　　而如果改换成http://2.latest.uestcproxy.appspot.com/fetch.php，就可以顺利跳转到那个Twitter页面了~</p>
<p>　　3）现在，把WallProxy的设置页面中的url改成http://2.latest.uestcproxy.appspot.com/fetch.php，就可以顺利使用WallProxy代理上网了~</p>
<p>　　4）对于GAppProxy端，则无需任何改动。</p>
<p>　　这是因为，尽管http://1.latest.uestcproxy.appspot.com为版本1的地址，但它同时也是默认版本，而默认地址的格式是不变的。</p>
<p>　　现在，两个代理共存共用了！你可以一个代理用来看Youtube，另一个用来上Twitter，何等的畅快啊~</p>
<p>　　<strong>后记</strong></p>
<p>　　写这篇文章缘于某日在学校BBS上闲逛，来到IPv6版块，看到大量令人惊奇的IPv6应用文章，其中最令人激动的就是借助更改hosts文件访问几乎所有Google服务，对于我这个Google重度依赖用户，IPv6简直就是福音书。</p>
<p>　　后来又发生了一件让人很不愉快的事，让我对电信的服务彻底失望。我就想，我们缴的网费并不便宜，却只得到这么差劲的服务，原因还不就是因为它无可动摇的垄断地位，这是多么令人愤懑的事情啊。</p>
<p>　　作为一个学理工的，我只能从技术上寻找对策了。</p>
<p>　　恰逢在Google Reader中看到一篇介绍GAE的文章，其中提到了搭建个人GAE应用，然后可借助GAppProxy代理上网。</p>
<p>　　在此之前，我已经用过了不下5种代理工具，然而要么我对其安全不放心，要么效果差强人意。</p>
<p>　　有着Google血统的东东，应该不会让人失望吧？</p>
<p>　　抱着尝鲜的心态（凡是跟Google沾边的服务，我总是要试一试的），用自己的Gmail账号建立了一个GAE应用，然后下载GAppProxy工具包，简单几步配置完成后，打开浏览器一试，OMG，这速度真快啊！除了个别SSL网址打开有异常外，其他一切服务堪称完美~我从未想象在景德镇看Youtube，缓冲速度会这么猛。</p>
<p>　　爽了一段时间后，我的网费再次告急。</p>
<p>　　在去购买新的充值卡的路上，我突然想到在我的hosts文件中包含了大量Google的IPv6地址，让我得以直接从内网访问Google，那么，为何不能以此为通道，借Google作跳板，直接从内网访问公网呢？</p>
<p>　　思路有了，剩下的一切都好办。</p>
<p>　　一天之内，我就搞定了所有的配置工作，然后成功登录自己的Blog.</p>
<p>　　感谢教育网率先开通IPv6服务，感谢GFW的技术迟钝以致IPv6至今仍是一方净土，感谢Google一如既往地提供上乘的互联网服务，感谢那些热心的人编写出如此强劲的代理程序。</p>
<p>　　采用这种依托GAE平台的代理服务上网，最实际的效益就是：网费开支为零——没有哪位同学要请我喝一杯么？</p>
<p>　　不过最令我感到欣慰的，并非省去了一笔网费，而是我在完全合理、合法的情况下，完成了一次对既有约束的突破。</p>
<p>　　在这个死气沉沉的大局域网之内，我通过某种不温不火的方式为自己找到了一丝自由的感觉，这，才是最大的收获。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.32133.com/share/370.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

