<?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>四有新人 &#187; Wang Wen Hao</title>
	<atom:link href="http://wangwenhao.net/author/wangwenhao/feed/" rel="self" type="application/rss+xml" />
	<link>http://wangwenhao.net</link>
	<description>本站不支持IE，谢谢</description>
	<lastBuildDate>Sun, 25 Dec 2011 13:37:20 +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>浏览器Quirksmode(怪异模式)与CSS1compat</title>
		<link>http://wangwenhao.net/2011/10/31/the-quirksmode-and-css1compat/</link>
		<comments>http://wangwenhao.net/2011/10/31/the-quirksmode-and-css1compat/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 01:06:50 +0000</pubDate>
		<dc:creator>Wang Wen Hao</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://wangwenhao.net/?p=627</guid>
		<description><![CDATA[由于历史的原因，各个浏览器在对页面的渲染上存在差异，甚至同一浏览器在不同版本中，对页面的渲染也不同。在W3C标准出台以前，浏览器在对页面的渲染上没有统一规范，产生了差异(Quirks mode或者称为Compatibility Mode)；由于W3C标准的推出，浏览器渲染页面有了统一的标准(CSScompat或称为Strict mode也有叫做Standars mode)，这就是二者最简单的区别。 W3C标准推出以后，浏览器都开始采纳新标准，但存在一个问题就是如何保证旧的网页还能继续浏览，在标准出来以前，很多页面都是根据旧的渲染方法编写的，如果用的标准来渲染，将导致页面显示异常。为保持浏览器渲染的兼容性，使以前的页面能够正常浏览，浏览器都保留了旧的渲染方法（如：微软的IE）。这样浏览器渲染上就产生了Quircks mode和Standars mode，两种渲染方法共存在一个浏览器上。 那么浏览器究竟该采用哪种模式渲染呢？这就引出的DTD，既是网页的头部声明，浏览器会通过识别DTD而采用相对应的渲染模式： 浏览器要使老旧的网页正常工作，但这部分网页是没有doctype声明的，所以浏览器对没有doctype声明的网页采用quirks mode解析。 对于拥有doctype声明的网页，什么浏览器采用何种模式解析，这里有一张详细列表可参考。 对于拥有doctype声明的网页，这里有几条简单的规则可用于判断：对于那些浏览器不能识别的doctype声明，浏览器采用strict mode解析 在doctype声明中，没有使用DTD声明或者使用HTML4以下（不包括HTML4）的DTD声明时，基本所有的浏览器都是使用quirks mode呈现，其他的则使用strict mode解析。 可以这么说，在现有有doctype声明的网页，绝大多数是采用strict mode进行解析的。 在ie6中，如果在doctype声明前有一个xml声明(比如:)，则采用quirks mode解析。这条规则在ie7中已经移除了。 Quirks mode和Standars mode最大的不同就是提现在对盒模式的解释上，这也是我们在js里要注意的地方。 什么是盒模式？ 这是针对块级元素说的，说白了就是把块级元素想像成一个装东西的盒子，而margin,padding,border,width这些css属性构成了盒模式。 在Standars mode中： 元素真正的宽度 = margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right; 在Quirks mode中： width则是元素的实际宽度，内容宽度 = width &#8211; (margin-left + margin-right + padding-left + [...]]]></description>
			<content:encoded><![CDATA[<p>由于历史的原因，各个浏览器在对页面的渲染上存在差异，甚至同一浏览器在不同版本中，对页面的渲染也不同。在W3C标准出台以前，浏览器在对页面的渲染上没有统一规范，产生了差异(Quirks mode或者称为Compatibility Mode)；由于W3C标准的推出，浏览器渲染页面有了统一的标准(CSScompat或称为Strict mode也有叫做Standars mode)，这就是二者最简单的区别。</p>
<p>W3C标准推出以后，浏览器都开始采纳新标准，但存在一个问题就是如何保证旧的网页还能继续浏览，在标准出来以前，很多页面都是根据旧的渲染方法编写的，如果用的标准来渲染，将导致页面显示异常。为保持浏览器渲染的兼容性，使以前的页面能够正常浏览，浏览器都保留了旧的渲染方法（如：微软的IE）。这样浏览器渲染上就产生了Quircks mode和Standars mode，两种渲染方法共存在一个浏览器上。</p>
<p>那么浏览器究竟该采用哪种模式渲染呢？这就引出的DTD，既是网页的头部声明，浏览器会通过识别DTD而采用相对应的渲染模式：</p>
<ol>
<li>浏览器要使老旧的网页正常工作，但这部分网页是没有doctype声明的，所以浏览器对没有doctype声明的网页采用quirks mode解析。</li>
<li>对于拥有doctype声明的网页，什么浏览器采用何种模式解析，<a href="http://hsivonen.iki.fi/doctype/">这里有一张详细列表可参考</a>。</li>
<li>对于拥有doctype声明的网页，这里有几条简单的规则可用于判断：对于那些浏览器不能识别的doctype声明，浏览器采用strict mode解析</li>
<li>在doctype声明中，没有使用DTD声明或者使用HTML4以下（不包括HTML4）的DTD声明时，基本所有的浏览器都是使用quirks mode呈现，其他的则使用strict mode解析。</li>
<li>可以这么说，在现有有doctype声明的网页，绝大多数是采用strict mode进行解析的。</li>
<li>在ie6中，如果在doctype声明前有一个xml声明(比如:)，则采用quirks mode解析。这条规则在ie7中已经移除了。</li>
</ol>
<p>Quirks mode和Standars mode最大的不同就是提现在对盒模式的解释上，这也是我们在js里要注意的地方。</p>
<p>什么是盒模式？ 这是针对块级元素说的，说白了就是把块级元素想像成一个装东西的盒子，而margin,padding,border,width这些css属性构成了盒模式。</p>
<p>在Standars mode中：</p>
<p>元素真正的宽度 = margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right;</p>
<p>在Quirks mode中：</p>
<p>width则是元素的实际宽度，内容宽度 = width &#8211; (margin-left + margin-right + padding-left + padding-right + border-left-width + border-right-width)</p>
<ol>
<li>内联元素 ，例如&lt;a&gt;|&lt;span&gt;等，定义上下边界不会影响到行高（line-height），内联元素距离上一行元素的距离由行高决定，而不是填充或边界。</li>
<li>内联元素（display: inline） 内联元素不需要在新行内显示，而且也不强迫其后的元素换行，如&lt;a&gt;|&lt;em&gt;|&lt;span&gt;等都为内联元素。内联元素可以为任何其他元素的子元素。</a></li>
<li>浮动元素（无论左或者右浮动）边界不压缩 ，且若浮动元素不声明宽度，则其宽度趋向于0，即压缩到其内容能承受的最小宽度。</li>
<li>如果盒中没有内容，则即使定义了宽度和高度都为100%，实际上只占0% ，因此不会被显示，此点在采取层布局的时候需特别注意。</li>
<li>边界值可为负，其显示效果各浏览器可能不相同。</li>
<li>填充值不可为负。</li>
<li>边框默认的样式（border-style）为不显示（none）。</li>
</ol>
<p>在js中如何判断当前浏览器正在以何种方式解析？</p>
<p>document对象有个属性compatMode ,它有两个值：</p>
<p>BackCompat 对应quirks mode</p>
<p>CSS1Compat 对应strict mode</p>
<p>各浏览器的兼容性表，可以查看<a href="http://www.quirksmode.org/compatibility.html">PPK的网站</a>。</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://wangwenhao.net/2011/10/31/the-quirksmode-and-css1compat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iOS开发中@property的属性介绍</title>
		<link>http://wangwenhao.net/2011/10/26/the-property-in-ios-develop/</link>
		<comments>http://wangwenhao.net/2011/10/26/the-property-in-ios-develop/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 12:52:57 +0000</pubDate>
		<dc:creator>Wang Wen Hao</dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://wangwenhao.net/?p=611</guid>
		<description><![CDATA[大家都知道@property和@synthesize可以自动生成某个类成员变量的存取方法，但可能对property中的一些属性不是很了解，网上的一些介绍有的不是很正确，感觉会误导新手，于是准备详细介绍一下property中的详细属性。 先介绍一下默认的情况： readwrite：这个属性是默认的情况，会自动为你生成存取器 assign：这个属性一般用来处理基础类型，比如int、float等等，如果你声明的属性是基础类型的话，assign是默认的，你可以不加这个属性 对于assign来说，他的存取器代码是这样的： @property &#40;nonatomic, assign&#41; NSString* myField - &#40;NSString*&#41; myField &#123; &#160; &#160; return myField; &#125; - &#40;void&#41; setMyField: &#40;NSString*&#41; newValue &#123; &#160; &#160; myField = newValue; &#125; natomic：默认是有该属性的，这个属性是为了保证程序在多线程情况，编译器会自动生成一些互斥加锁代码，避免该变量的读写不同步问题。 然后说一下其他的情况： readonly：只生成getter不会有setter方法 copy：这个会自动生成你赋值对象的克隆，相当于在内存中新生成了该对象的副本，这样一来，改变赋值对象就不会改变你声明的这个成员变量了 retain：会自动retain赋值对象，具体实现如下： @property &#40;nonatomic, retain&#41; NSString* myField - &#40;NSString*&#41; myField &#123; &#160; &#160; return myField; &#125; - &#40;void&#41; setMyField: &#40;NSString*&#41; newValue [...]]]></description>
			<content:encoded><![CDATA[<p>大家都知道@property和@synthesize可以自动生成某个类成员变量的存取方法，但可能对property中的一些属性不是很了解，网上的一些介绍有的不是很正确，感觉会误导新手，于是准备详细介绍一下property中的详细属性。</p>
<p>先介绍一下默认的情况：</p>
<p><strong>readwrite</strong>：这个属性是默认的情况，会自动为你生成存取器</p>
<p><strong>assign</strong>：这个属性一般用来处理基础类型，比如int、float等等，如果你声明的属性是基础类型的话，assign是默认的，你可以不加这个属性</p>
<p>对于assign来说，他的存取器代码是这样的：</p>
<div class="codecolorer-container objc mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #a61390;">@property</span> <span style="color: #002200;">&#40;</span>nonatomic, assign<span style="color: #002200;">&#41;</span> <span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> myField<br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> myField <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #a61390;">return</span> myField;<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> setMyField<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> newValue <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; myField <span style="color: #002200;">=</span> newValue;<br />
<span style="color: #002200;">&#125;</span></div></div>
<p><strong>natomic</strong>：默认是有该属性的，这个属性是为了保证程序在多线程情况，编译器会自动生成一些互斥加锁代码，避免该变量的读写不同步问题。</p>
<p>然后说一下其他的情况：</p>
<p><strong>readonly</strong>：只生成getter不会有setter方法</p>
<p><strong>copy</strong>：这个会自动生成你赋值对象的克隆，相当于在内存中新生成了该对象的副本，这样一来，改变赋值对象就不会改变你声明的这个成员变量了</p>
<p><strong>retain</strong>：会自动retain赋值对象，具体实现如下：</p>
<div class="codecolorer-container objc mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="objc codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #a61390;">@property</span> <span style="color: #002200;">&#40;</span>nonatomic, retain<span style="color: #002200;">&#41;</span> <span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> myField<br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> myField <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #a61390;">return</span> myField;<br />
<span style="color: #002200;">&#125;</span><br />
<br />
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> setMyField<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> newValue <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>newValue <span style="color: #002200;">!=</span>myField<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #002200;">&#91;</span>myField release<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; myField <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>newValue retain<span style="color: #002200;">&#93;</span>;<br />
&nbsp; &nbsp; <span style="color: #002200;">&#125;</span><br />
<span style="color: #002200;">&#125;</span></div></div>
<p>可见首先要判断一下当前myField是否就是新赋值来的对象，如果不是要将自己release掉，之后才会进行赋值及retain。</p>
<p><strong>nonatomic</strong>：如果该对象无需考虑多线程的情况，请加入这个属性，这样会让编译器少生成一些互斥加锁代码，可以提高效率。</p>
]]></content:encoded>
			<wfw:commentRss>http://wangwenhao.net/2011/10/26/the-property-in-ios-develop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS里的MVC</title>
		<link>http://wangwenhao.net/2011/10/20/mvc-in-ios/</link>
		<comments>http://wangwenhao.net/2011/10/20/mvc-in-ios/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 02:54:45 +0000</pubDate>
		<dc:creator>Wang Wen Hao</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://wangwenhao.net/?p=597</guid>
		<description><![CDATA[我们今天谈谈cocoa程序设计中的 模型－视图－控制器（MVC）范型。我们将从两大方面来讨论MVC： 什么是MVC？ M、V、C之间的交流方式是什么样子的？ 理解了MVC的概念，对cocoa程序开发是至关重要的。 一、MVC的概念 MVC是Model-VIew-Controller，就是模型－视图－控制器，这些都是什么东西呢？ MVC把软件系统分为三个部分：Model，View，Controller。在cocoa中，你的程序中的每一个object（对象）都将明显地仅属于这三部分中的一个，而完全不属于另外两个。 Model = 你的程序是什么(而不是你的程序是如何显示的) 让我们举个例子，我们上中学的时候，我们的步步高电子词典中有个游戏叫“雷霆战机”，也就是“打飞机”的游戏，Model就是：你的小飞机的攻击力是多少？你的小飞机上装的是什么武器，炮弹，导弹，还是激光炮？你的小飞机还有多少血？等等。再概括点说，就是你的程序将要实现的功能，或者是它所能干的事情。 Controller = 如何使你的模型呈现给用户(程序逻辑) Controller是程序内部的逻辑，大多情况下你将看不到它，它将Model和View捆绑在一起，它将处理用户的输入，例如，你按开炮的键子，Controller就会通过内部的逻辑来处理你的要求，并在屏幕上做出相应的显示，你将看到屏幕上的小飞机发出炮弹击中敌机。这也是Controller控制View的显示的例子。所以你可以把Controller看成是连接M和V的桥梁。 View ＝ 在屏幕上你所看到的（是你的Controller的“奴才”） 接着前面的小飞机，View就是：你的小飞机是什么样子的，有一个还是两个翅膀，有几挺枪炮；还有，你的飞机在屏幕上的位置等等。总之，你在屏幕上看到的组件都可以归类为View。 MVC可以帮助确保帮助实现程序最大程度的可重用性。各MVC元素彼此独立运作，通过分开这些元素，可以构建可维护，可独立更新的程序组建。 二、M V C之间的交流模式 好了，现在我们来讨论MVC中各个元素之间的交流方式。 我们把程序分成三个部分，但并不希望他们完全独立，因为那样的话，我们的程序将毫无意义和功能而言。它们之间必然存在某种联系，使它们能有机的成为一个整体来实现各种强大的功能。而这种联系就是我们提到的交流方式。我们来看看下面的图，此图出自斯坦福大学CS193课程的课件。 图中有几条线把这三部分划分开，有黄线，虚线，和白色的实线。我们把它们想象成路标。你可以看到，在M和V之间有两条黄线，这表示什么呢？它意味着你不能穿越这黄线，任何一个方向都不行。在图的上部，你可以看到白色的虚线，它意味着你可以自由的穿越它，只要是安全的。那白色的实线呢？它代表你可以穿越，但你必须要买票，或者交点过路费。 好了，如果你觉得前面的比喻没有使你明白的话，让我们来讲点实在的东西。 首先， 我们来看C和M之间的绿色箭头，这箭头的方向就代表着“发起对话”的方向，也就是说，发起对话的是C，而做出回答的是M。C可以问M各种各样的问题，但M只是回答C的问题或要求，它不可以主动的向C要求什么。还记得虚线是畅通无阻的意思吧，所以，C知道M的所有的事情,如果用代码来说明这件事情，就是说，C可以导入M的头文件或是M的接口（API）。因为C可以通过M的API，所以它就可以肆无忌惮的向M要求这要求那了。 我们再来看看另外的一个绿色箭头，它是在C和V之间，和前一个绿色箭头的意义一样，它代表C可以直接地向V进行交流。你可以想想，C要把V放到屏幕上，并设置V的属性，告诉它们什么时候从屏幕上消失，把它们分成组等等。如果C不能自由的向V发号施令的话，程序的显示将会多么的困难,所以，C可以毫无限制地向V说话。 可能你已经注意到了，这个箭头上还有outlet(输出口)，outlet可以看作是从C指向V的指针，它在C中被定义。outlet给我们提供了很大的方便，它使我们在C的内部就可以轻松准确地向V施令。C可以拥有很多的outlet，可以不止一个，这也使它可以更高效的和V进行交流。 那M和V之间可以交流么？还记得黄线的意思么？完全不可以通过，所以我们是不允许M和V进行交流的。这是因为我们不希望这三部分之间有过多的交流，你想想，假如V在显示时出现了问题，比如有一个图形没有显示出来，我们就要去查找错误，因为C可以和V交流，M也可以和V交流的话，我们就要去检查两个部分。相反的，只有C可以和V交流的话，在出错时，我们就只需要去C那里查找原因，这样查找错误不就很是简单了么？所以，我们不允许M和V之间有直接的联系，这也是在它们两之间有两根黄线的原因。 好的应用程序要具备与用户交互的能力。如果没有良好的交互性，程序的功能将会受到很大的限制。在MVC中，V是和用户直接接触的，用户看不到M和C，所以，程序与用户的交互必须通过V来实现，但V只是视图而已，它并不能完全处理用户的要求，所以，这就要求V必须有某种手段来向C发送信息，移交用户的交互要求。这手段就是前面白色实线代表的过路费，你知道V不能知道C的一切，但它可以通过某种“手段”来和C进行交流，移交用户交互责任。 我们接下来讨论V是如何向C发送信息的。V对C的交流有三种不同的方式。 第一种我们称为目标操作(target-action)。它是这样工作的，C会在自己的内部“悬挂”一个目标(target)，如图中的红白相间的靶子，对应的，它还会分发一个操作(action，如图中的黄色箭头)给将要和它交流的视图对象(可能是屏幕上的一个按钮)，当按钮被按时，action就会被发送给与之对应的target，这样V就可以和C交流了。但是在这种情况下，V只是知道发送action给对应的target,它并不知道C中的类，也不知道它到底发送了什么。target-action是我们经常使用的方法。 第二种方式我们叫做委托(delegate)。有时候，V需要和C进行同步，你知道，用户交互不仅仅是什么按按钮，划滑块，还有很多种形式。好了，让我们来看看图中的delegate黄色箭头，你发现箭头上又分出了四个小箭头：should，did，will，还有一个没标注的。绝大部分的delegate信息都是should，will，did这三种形式。和英文意思相对应，should代表视图对象将询问C中的某个对象“我应该这么做么？”，举个例子，有一个web视图，有人点击了一个链接，web视图就要问“我应该打开这个链接么？这样做安全么？”。这就是should信息。那will和did呢？will就是“我将要做这件事了”，did就是“我已经做了这件事”。C把自己设置为V的委托(delegate),它让V知道：如果V想知道更多的关于将如何显示的信息的话，就向C发送delegate信息。通过接受V发过来的delegate信息，C就会做出相应的协调和处理。还有一点，每个V只能有一个delegate。 第三种方式就是数据源(datasource)，你知道，V不能拥有它所要显示的数据，记住这点非常重要。V希望别人帮助它管理将要显示的数据，当它需要数据时，它就会请求别人的帮助,把需要的数据给它。再者，iphone的屏幕很小，它不能显示包含大量信息的视图。看图中的datasource箭头，和delegate类似，V会发送cout，data at信息给C来请求数据。 好了，这就是V给C发送信息的三种形式。 最后一个问题。你看到M和C之间的白线，这意味着M不可以直接地，没有限制的对C进行交流。但有时，这个方向的交流是必要的。当M中的一些东西发生变化时，C需要了解这些变化，那我们怎么才能让C知道M的变化呢？通知（Notification）和KVO是解决问题的好方法。它们是这样工作的，当M中的某些东西发生变化时，他们会向C发出通知“嘿，老兄，注意了啊，我这发生变化了”，或者他们会发出指向变化的指针给C，或其他什么的。总之，他们的工作模式是这样的。 下面是我们的一个总结，cocoa忠实于MVC，所以理解cocoa的MVC是我们关键的开始，希望这些能使你明白一些。 C对M：API C对V：Outlet V对C：Target-action， Delegate，Datasource M对C：Notification，KVO]]></description>
			<content:encoded><![CDATA[<p>我们今天谈谈cocoa程序设计中的 <strong>模型</strong>－<strong>视图</strong>－<strong>控制器</strong>（MVC）范型。我们将从两大方面来讨论MVC：</p>
<ol>
<li>什么是MVC？</li>
<li>M、V、C之间的交流方式是什么样子的？</li>
</ol>
<p>理解了MVC的概念，对cocoa程序开发是至关重要的。</p>
<h3>一、MVC的概念</h3>
<p>MVC是Model-VIew-Controller，就是<strong>模型</strong>－<strong>视图</strong>－<strong>控制器</strong>，这些都是什么东西呢？</p>
<p>MVC把软件系统分为三个部分：Model，View，Controller。在cocoa中，你的程序中的每一个object（对象）都将明显地仅属于这三部分中的一个，而完全不属于另外两个。</p>
<p><strong>Model = 你的程序是什么</strong>(而不是你的程序是如何显示的)</p>
<p>让我们举个例子，我们上中学的时候，我们的步步高电子词典中有个游戏叫“雷霆战机”，也就是“打飞机”的游戏，Model就是：你的小飞机的攻击力是多少？你的小飞机上装的是什么武器，炮弹，导弹，还是激光炮？你的小飞机还有多少血？等等。再概括点说，就是你的程序将要实现的功能，或者是它所能干的事情。</p>
<p><strong>Controller = 如何使你的模型呈现给用户</strong>(程序逻辑)</p>
<p>Controller是程序内部的逻辑，大多情况下你将看不到它，它将Model和View捆绑在一起，它将处理用户的输入，例如，你按开炮的键子，Controller就会通过内部的逻辑来处理你的要求，并在屏幕上做出相应的显示，你将看到屏幕上的小飞机发出炮弹击中敌机。这也是Controller控制View的显示的例子。所以你可以把Controller看成是连接M和V的桥梁。</p>
<p><strong>View ＝ 在屏幕上你所看到的</strong>（是你的Controller的“奴才”）</p>
<p>接着前面的小飞机，View就是：你的小飞机是什么样子的，有一个还是两个翅膀，有几挺枪炮；还有，你的飞机在屏幕上的位置等等。总之，你在屏幕上看到的组件都可以归类为View。</p>
<p>MVC可以帮助确保帮助实现程序最大程度的可重用性。各MVC元素彼此独立运作，通过分开这些元素，可以构建可维护，可独立更新的程序组建。</p>
<h3>二、M V C之间的交流模式</h3>
<p>好了，现在我们来讨论MVC中各个元素之间的交流方式。</p>
<p>我们把程序分成三个部分，但并不希望他们完全独立，因为那样的话，我们的程序将毫无意义和功能而言。它们之间必然存在某种联系，使它们能有机的成为一个整体来实现各种强大的功能。而这种联系就是我们提到的交流方式。我们来看看下面的图，此图出自斯坦福大学CS193课程的课件。</p>
<p><a href="http://wangwenhao.net/wp-content/uploads/2011/10/6aa91d5an946e1420c155690.jpg"><img class="alignnone size-full wp-image-598" style="border-style: initial; border-color: initial;" title="6aa91d5an946e1420c155&amp;690" src="http://wangwenhao.net/wp-content/uploads/2011/10/6aa91d5an946e1420c155690.jpg" alt="" width="552" height="310" /></a></p>
<p>图中有几条线把这三部分划分开，有黄线，虚线，和白色的实线。我们把它们想象成路标。你可以看到，在M和V之间有两条黄线，这表示什么呢？它意味着你不能穿越这黄线，任何一个方向都不行。在图的上部，你可以看到白色的虚线，它意味着你可以自由的穿越它，只要是安全的。那白色的实线呢？它代表你可以穿越，但你必须要买票，或者交点过路费。</p>
<p>好了，如果你觉得前面的比喻没有使你明白的话，让我们来讲点实在的东西。</p>
<p>首先， 我们来看C和M之间的绿色箭头，这箭头的方向就代表着“发起对话”的方向，也就是说，发起对话的是C，而做出回答的是M。C可以问M各种各样的问题，但M只是回答C的问题或要求，它不可以主动的向C要求什么。还记得虚线是畅通无阻的意思吧，所以，C知道M的所有的事情,如果用代码来说明这件事情，就是说，C可以导入M的头文件或是M的接口（API）。因为C可以通过M的API，所以它就可以肆无忌惮的向M要求这要求那了。</p>
<p>我们再来看看另外的一个绿色箭头，它是在C和V之间，和前一个绿色箭头的意义一样，它代表C可以直接地向V进行交流。你可以想想，C要把V放到屏幕上，并设置V的属性，告诉它们什么时候从屏幕上消失，把它们分成组等等。如果C不能自由的向V发号施令的话，程序的显示将会多么的困难,所以，C可以毫无限制地向V说话。</p>
<p>可能你已经注意到了，这个箭头上还有outlet(输出口)，outlet可以看作是从C指向V的指针，它在C中被定义。outlet给我们提供了很大的方便，它使我们在C的内部就可以轻松准确地向V施令。C可以拥有很多的outlet，可以不止一个，这也使它可以更高效的和V进行交流。</p>
<p>那M和V之间可以交流么？还记得黄线的意思么？完全不可以通过，所以我们是不允许M和V进行交流的。这是因为我们不希望这三部分之间有过多的交流，你想想，假如V在显示时出现了问题，比如有一个图形没有显示出来，我们就要去查找错误，因为C可以和V交流，M也可以和V交流的话，我们就要去检查两个部分。相反的，只有C可以和V交流的话，在出错时，我们就只需要去C那里查找原因，这样查找错误不就很是简单了么？所以，我们不允许M和V之间有直接的联系，这也是在它们两之间有两根黄线的原因。</p>
<p>好的应用程序要具备与用户交互的能力。如果没有良好的交互性，程序的功能将会受到很大的限制。在MVC中，V是和用户直接接触的，用户看不到M和C，所以，程序与用户的交互必须通过V来实现，但V只是视图而已，它并不能完全处理用户的要求，所以，这就要求V必须有某种手段来向C发送信息，移交用户的交互要求。这手段就是前面白色实线代表的过路费，你知道V不能知道C的一切，但它可以通过某种“手段”来和C进行交流，移交用户交互责任。</p>
<p>我们接下来讨论V是如何向C发送信息的。V对C的交流有三种不同的方式。</p>
<p>第一种我们称为目标操作(target-action)。它是这样工作的，C会在自己的内部“悬挂”一个目标(target)，如图中的红白相间的靶子，对应的，它还会分发一个操作(action，如图中的黄色箭头)给将要和它交流的视图对象(可能是屏幕上的一个按钮)，当按钮被按时，action就会被发送给与之对应的target，这样V就可以和C交流了。但是在这种情况下，V只是知道发送action给对应的target,它并不知道C中的类，也不知道它到底发送了什么。target-action是我们经常使用的方法。</p>
<p>第二种方式我们叫做委托(delegate)。有时候，V需要和C进行同步，你知道，用户交互不仅仅是什么按按钮，划滑块，还有很多种形式。好了，让我们来看看图中的delegate黄色箭头，你发现箭头上又分出了四个小箭头：should，did，will，还有一个没标注的。绝大部分的delegate信息都是should，will，did这三种形式。和英文意思相对应，should代表视图对象将询问C中的某个对象“我应该这么做么？”，举个例子，有一个web视图，有人点击了一个链接，web视图就要问“我应该打开这个链接么？这样做安全么？”。这就是should信息。那will和did呢？will就是“我将要做这件事了”，did就是“我已经做了这件事”。C把自己设置为V的委托(delegate),它让V知道：如果V想知道更多的关于将如何显示的信息的话，就向C发送delegate信息。通过接受V发过来的delegate信息，C就会做出相应的协调和处理。还有一点，每个V只能有一个delegate。</p>
<p>第三种方式就是数据源(datasource)，你知道，V不能拥有它所要显示的数据，记住这点非常重要。V希望别人帮助它管理将要显示的数据，当它需要数据时，它就会请求别人的帮助,把需要的数据给它。再者，iphone的屏幕很小，它不能显示包含大量信息的视图。看图中的datasource箭头，和delegate类似，V会发送cout，data at信息给C来请求数据。</p>
<p>好了，这就是V给C发送信息的三种形式。</p>
<p>最后一个问题。你看到M和C之间的白线，这意味着M不可以直接地，没有限制的对C进行交流。但有时，这个方向的交流是必要的。当M中的一些东西发生变化时，C需要了解这些变化，那我们怎么才能让C知道M的变化呢？通知（Notification）和KVO是解决问题的好方法。它们是这样工作的，当M中的某些东西发生变化时，他们会向C发出通知“嘿，老兄，注意了啊，我这发生变化了”，或者他们会发出指向变化的指针给C，或其他什么的。总之，他们的工作模式是这样的。</p>
<p>下面是我们的一个总结，cocoa忠实于MVC，所以理解cocoa的MVC是我们关键的开始，希望这些能使你明白一些。</p>
<p>C对M：API<br />
C对V：Outlet<br />
V对C：Target-action， Delegate，Datasource<br />
M对C：Notification，KVO</p>
]]></content:encoded>
			<wfw:commentRss>http://wangwenhao.net/2011/10/20/mvc-in-ios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>项目快崩溃了怎么办？</title>
		<link>http://wangwenhao.net/2011/10/14/what-should-we-do-when-project-is-going-to-die/</link>
		<comments>http://wangwenhao.net/2011/10/14/what-should-we-do-when-project-is-going-to-die/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 04:59:55 +0000</pubDate>
		<dc:creator>Wang Wen Hao</dc:creator>
				<category><![CDATA[胡扯]]></category>

		<guid isPermaLink="false">http://wangwenhao.net/?p=593</guid>
		<description><![CDATA[60多年前，一群小白程序员扒了一个俄罗斯的开源框架，写了几行漏洞百出的代码，产品上线运营了，30年后新的CTO实在看不下去了，重构了部分代码，但框架依旧是旧的，又过了30年新代码和旧框架严重不兼容，产品濒临崩溃，用户流失严重，这时我们该 1 继续修bug打补丁 2 换个框架重构代码 3 干脆换掉这些程序猿 关键是那个开源框架糟糕得很，还没哪个使用它的产品成功过，虽然曾经在东欧拥有庞大的用户，但是22年前都抛弃不用了。 这个框架的设计师是两个德国人&#8230;]]></description>
			<content:encoded><![CDATA[<p>60多年前，一群小白程序员扒了一个俄罗斯的开源框架，写了几行漏洞百出的代码，产品上线运营了，30年后新的CTO实在看不下去了，重构了部分代码，但框架依旧是旧的，又过了30年新代码和旧框架严重不兼容，产品濒临崩溃，用户流失严重，这时我们该<br />
1 继续修bug打补丁<br />
2 换个框架重构代码<br />
3 干脆换掉这些程序猿</p>
<p>关键是那个开源框架糟糕得很，还没哪个使用它的产品成功过，虽然曾经在东欧拥有庞大的用户，但是22年前都抛弃不用了。<br />
这个框架的设计师是两个德国人&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://wangwenhao.net/2011/10/14/what-should-we-do-when-project-is-going-to-die/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>马英九辛亥双十讲话全文</title>
		<link>http://wangwenhao.net/2011/10/12/double-ten-speach/</link>
		<comments>http://wangwenhao.net/2011/10/12/double-ten-speach/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 07:38:14 +0000</pubDate>
		<dc:creator>Wang Wen Hao</dc:creator>
				<category><![CDATA[胡扯]]></category>

		<guid isPermaLink="false">http://wangwenhao.net/?p=590</guid>
		<description><![CDATA[今天是中华民国一百岁生日，也是辛亥革命一百週年，我们以欢欣鼓舞的心情，一起为中华民国庆生，一起分享喜悦，一起跨越这个伟大、感人的时刻。一百年前的今天，国父孙中山先生领导发动震惊世界的武昌起义，一举推翻满清政府与千年帝制，创立亚洲第一个民主共和国—中华民国。今天不仅台湾，世界各地的华人，包括中国大陆，都在纪念辛亥双十。 今天我们要以庄严崇敬的心情，向怀抱理想、不怕牺牲的革命志士致敬。他们包括广东的陆皓东、湖南的黄兴、浙江的秋瑾、福建的林觉民、台湾的罗福星。这些民国英雄，只是少数中的少数。过去一百年，从开国、北伐、抗战、戡乱到保台，不知折损多少仁人志士，他们绝大多数是无名英雄，奉献了青春、牺牲了生命，却照亮了中华民国的天空。 各位先进、各位同胞：辛亥双十是海峡两岸共同的记忆与资产。因此，英九要藉这个机会，呼吁大陆当局：纪念辛亥双十，就不能忘记国父建国的理想是要建立一个自由、民主、均富的国家，大陆应该勇敢地朝这个方向迈进，也唯有如此，才能缩短两岸目前的距离。纪念辛亥双十，也不能割裂历史，而必须呈现历史原貌，正视中华民国存在的事实。中华民国的存在不是过去式，而是现在进行式，六十多年来中华民国在台湾蓬勃发展，在世界发光发热，未来我们还会继续蓬勃发展，继续发光发热！ 各位先进、各位同胞：中华民国在抗战期间，牺牲了二千万军民的生命，台湾才能结束日本殖民统治，回到中华民国版图。如果没有台湾的回归，内战失利后，中华民国很可能在六十多年前就走入历史，没有机会新生，更不可能开启海峡两岸不同的发展历程。 六十多年来，中华民国不仅保障了台澎金马的安全，延续了中华文化的命脉，创造了台湾经济与政治的奇蹟，实现了台湾先贤追求议会自治的理想，而且还向世人证明：民主可以在华人社会的土壤中生根、开花、结果。 今天，台湾人民享有自由、民主、富足的生活，也凝聚对国家─中华民国─坚实的认同，中华民国宪法更早已成为全民共识的基础。国父建国的理想，当年在大陆没有机会实施，如今却在台湾完整实现。 今天，我们庆祝中华民国一百年双十国庆，我们深深以中华民国为荣，深深以台湾民主为傲。今天台湾所展现的活力与生活方式，已成为华人世界的标竿。 台湾面积不大，天然资源贫乏，我们却能赤手空拳，开创一片天。今天放眼全球，无论在半导体、平板电脑、智慧型手机或太阳光电方面，台湾产业不但角色重要，并对全球节能减碳贡献卓着。今年5月瑞士国际管理学院(IMD)世界竞争力评比，台湾排名世界第六，是有史以来最好的成绩；今年9月世界经济论坛(WEF)公布全球竞争力评比，我国竞争力分数创五年来最高分，排名全球第十三，其中有8项指标全球第一。 我们的年轻人才华横溢，在设计、发明与文创领域，光芒耀眼，在全球六大发明展中屡屡夺魁。如今全球80%的华语音乐在台湾创作，不论电影、戏剧、舞蹈、设计，我们都已经站上世界舞台。尤其我们的国片掀起一波波热潮，台湾新生代展现惊人的创作潜力，为台湾电影发展开创无限可能。 台湾社会也充满爱心，现在台湾有超过4万个非营利组织，有上百万志工在台湾各角落默默服务，甚至远赴海外，参与国际人道援助。去年我们的捐血率8％，在世界数一数二；我们认养了30万贫童，20万人在国外；每年慈善捐款超过350亿元，绝大多数来自一般人民。 在台湾这块土地上，我们看到很多值得尊敬、实践梦想的英雄。就像长年默默行善的阿嬷陈绸、陈树菊与老荣民尹殿甲、洪中海、战胜非洲疟疾的连日清、挑战超级马拉松的林义杰、创意烘焙大师吴宝春、康复再起的王建民、拾金不昧的杨黄牡丹、验出塑化剂的杨明玉、拍史诗电影的魏德圣、以及高球天后曾雅妮。从他们身上，我们看到了善良、勤奋与进取，更看到了坚持与希望，这是台湾前进的原动力。 各位先进，各位同胞：自由民主的中华民国、活力创新的中华民国、人文关怀的中华民国、开放自信的中华民国，这就是我们国家的形象。让我们一起为中华民国喝采，向所有曾经为中华民国付出汗水与青春的英雄，表达我们最深的敬意！ 近三年来全球经济动盪不安，台湾仍以稳健的步伐，脱困而出，大幅提升国家竞争力，这是全民共同努力的成果。面对全球竞争压力，未来十年将是关键的十年，我们要全面落实黄金十年的愿景，在自信中开放，在创新中发展，在公义中前进，让中华民国彻底脱胎换骨，跻身先进国家之林。 各位先进、各位同胞：两岸和平是台湾繁荣发展的必要条件。过去三年多，政府在中华民国宪法架构下，以「九二共识，一中各表」为基础，推动两岸关係，维持台海「不统、不独、不武」现状，并得以大幅降低台海紧张，赢得国际社会的肯定与支持。三年多来，我们与大陆签署15项协议，每一项协议都做到了「对等、尊严、互惠」、「以台湾为主，对人民有利」。两岸人民同属中华民族，希望双方在正视现实的基础上，求同存异，互助合作，建立制度化的和平关係。 如今大陆已经是台湾最大的贸易伙伴、顺差来源与投资地区，大陆也是驱动全球经济成长的主要动力。我们要善用台湾优势，布局大陆市场，还要加快脚步，与其他国家洽签自由贸易协定或经济合作协议，为台湾开创新的商机。上月22日，我们与日本签署了投资协议，就是成功的桉例。目前我们也正积极与新加坡协商经济合作协议，我们还要参与区域经济整合，努力创造条件，以十年为期，加入正在扩展中的「跨太平洋伙伴（TPP）协定」。 今后我们要继续推动活路外交，更加巩固与邦交国的关係，增进与美国、日本、欧盟、东协、纽澳等无邦交国的高层互信，并扩大国际参与。十天前，英国成为第七个与我国签署青年打工度假协定的国家；五天前，荷兰也给我们6个海外领土的免签证待遇；后天布吉纳法索给我们落地签证待遇将正式生效，使国人享有免签证或落地签证的国家（地区）总数达到124个，比英九上任时增加了70个国家（地区）。各位先进，各位同胞：这显示当国家受到肯定，人民就有尊严。 在推动两岸关係时，台海和平的维繫不能一厢情愿，必须以坚实的国防为后盾，台湾安全才有保障，民众才有信心与大陆进一步改善关係。过去三年多，我们在部队训练、武器自製方面都有长足进步，并且多次成功採购先进的防卫性武器。未来的十年，我们将持续强化国防力量，打造精锐新国军，以捍卫中华民国主权，保卫台湾安全。 各位先进、各位同胞：国父当年成立「兴中会」时，成员只有二十几位，可是他们坚持理想、勇于实践，掌握了时代的脉动，十七年后竟然推翻满清，建立民国。 今天我们纪念辛亥双十，就要继承先烈先贤这种理想主义，不怕风雨，勇于开创，让我们的国家成为华人世界的典范。中华民国不只是国家的名字，也代表了自由民主的生活方式，对嚮往自由民主的华人地区也将产生示范作用。 光辉的十月，对英九而言，还有一项特殊意义。六十年前的十月，在风雨飘摇中，我的父母带着家人和一岁多的我，从香港来到台湾，追求自由安定的生活。他们万万没有想到，他们的儿子在五十多年后会成为中华民国总统。对这个国家、对这块土地，我怀着深深感恩的心情，我愿意奉献此生一切，努力建设台湾，让她成为自由繁荣的乐土，继续哺育我们的下一代，让每一个孩子，不论出身贫富，都能实现梦想。 就任总统三年多来，英九体会责任的艰钜，不敢丝毫鬆懈。虽然世局多变，挑战随时出现，但我对这块土地有信心，对人民有信心。 各位先进、各位同胞：中华民国是我们的国家，台湾是我们的家园。中华民国的前途与台湾的未来掌握在我们二千三百万人的手中，我们要团结、要奋斗，让台湾更有活力，更有魅力，也更有竞争力！ 今天我们不分族群，不分党派，不分海内外，一起为中华民国庆生。我们要发下宏愿，一定要在我们的手中壮大台湾、振兴中华，为中华民国下一个精彩百年，打下基础。让中华民国在国际社会，成为一个更加受人尊敬、让人感动的国家！ 现在，让我们一起高呼： 中华民国万岁！ 台湾民主万岁！ 谢谢大家！]]></description>
			<content:encoded><![CDATA[<p>今天是中华民国一百岁生日，也是辛亥革命一百週年，我们以欢欣鼓舞的心情，一起为中华民国庆生，一起分享喜悦，一起跨越这个伟大、感人的时刻。一百年前的今天，国父孙中山先生领导发动震惊世界的武昌起义，一举推翻满清政府与千年帝制，创立亚洲第一个民主共和国—中华民国。今天不仅台湾，世界各地的华人，包括中国大陆，都在纪念辛亥双十。</p>
<p>今天我们要以庄严崇敬的心情，向怀抱理想、不怕牺牲的革命志士致敬。他们包括广东的陆皓东、湖南的黄兴、浙江的秋瑾、福建的林觉民、台湾的罗福星。这些民国英雄，只是少数中的少数。过去一百年，从开国、北伐、抗战、戡乱到保台，不知折损多少仁人志士，他们绝大多数是无名英雄，奉献了青春、牺牲了生命，却照亮了中华民国的天空。</p>
<p>各位先进、各位同胞：辛亥双十是海峡两岸共同的记忆与资产。因此，英九要藉这个机会，呼吁大陆当局：纪念辛亥双十，就不能忘记国父建国的理想是要建立一个自由、民主、均富的国家，大陆应该勇敢地朝这个方向迈进，也唯有如此，才能缩短两岸目前的距离。纪念辛亥双十，也不能割裂历史，而必须呈现历史原貌，正视中华民国存在的事实。中华民国的存在不是过去式，而是现在进行式，六十多年来中华民国在台湾蓬勃发展，在世界发光发热，未来我们还会继续蓬勃发展，继续发光发热！</p>
<p>各位先进、各位同胞：中华民国在抗战期间，牺牲了二千万军民的生命，台湾才能结束日本殖民统治，回到中华民国版图。如果没有台湾的回归，内战失利后，中华民国很可能在六十多年前就走入历史，没有机会新生，更不可能开启海峡两岸不同的发展历程。</p>
<p>六十多年来，中华民国不仅保障了台澎金马的安全，延续了中华文化的命脉，创造了台湾经济与政治的奇蹟，实现了台湾先贤追求议会自治的理想，而且还向世人证明：民主可以在华人社会的土壤中生根、开花、结果。</p>
<p>今天，台湾人民享有自由、民主、富足的生活，也凝聚对国家─中华民国─坚实的认同，中华民国宪法更早已成为全民共识的基础。国父建国的理想，当年在大陆没有机会实施，如今却在台湾完整实现。</p>
<p>今天，我们庆祝中华民国一百年双十国庆，我们深深以中华民国为荣，深深以台湾民主为傲。今天台湾所展现的活力与生活方式，已成为华人世界的标竿。</p>
<p>台湾面积不大，天然资源贫乏，我们却能赤手空拳，开创一片天。今天放眼全球，无论在半导体、平板电脑、智慧型手机或太阳光电方面，台湾产业不但角色重要，并对全球节能减碳贡献卓着。今年5月瑞士国际管理学院(IMD)世界竞争力评比，台湾排名世界第六，是有史以来最好的成绩；今年9月世界经济论坛(WEF)公布全球竞争力评比，我国竞争力分数创五年来最高分，排名全球第十三，其中有8项指标全球第一。</p>
<p>我们的年轻人才华横溢，在设计、发明与文创领域，光芒耀眼，在全球六大发明展中屡屡夺魁。如今全球80%的华语音乐在台湾创作，不论电影、戏剧、舞蹈、设计，我们都已经站上世界舞台。尤其我们的国片掀起一波波热潮，台湾新生代展现惊人的创作潜力，为台湾电影发展开创无限可能。</p>
<p>台湾社会也充满爱心，现在台湾有超过4万个非营利组织，有上百万志工在台湾各角落默默服务，甚至远赴海外，参与国际人道援助。去年我们的捐血率8％，在世界数一数二；我们认养了30万贫童，20万人在国外；每年慈善捐款超过350亿元，绝大多数来自一般人民。</p>
<p>在台湾这块土地上，我们看到很多值得尊敬、实践梦想的英雄。就像长年默默行善的阿嬷陈绸、陈树菊与老荣民尹殿甲、洪中海、战胜非洲疟疾的连日清、挑战超级马拉松的林义杰、创意烘焙大师吴宝春、康复再起的王建民、拾金不昧的杨黄牡丹、验出塑化剂的杨明玉、拍史诗电影的魏德圣、以及高球天后曾雅妮。从他们身上，我们看到了善良、勤奋与进取，更看到了坚持与希望，这是台湾前进的原动力。</p>
<p>各位先进，各位同胞：自由民主的中华民国、活力创新的中华民国、人文关怀的中华民国、开放自信的中华民国，这就是我们国家的形象。让我们一起为中华民国喝采，向所有曾经为中华民国付出汗水与青春的英雄，表达我们最深的敬意！</p>
<p>近三年来全球经济动盪不安，台湾仍以稳健的步伐，脱困而出，大幅提升国家竞争力，这是全民共同努力的成果。面对全球竞争压力，未来十年将是关键的十年，我们要全面落实黄金十年的愿景，在自信中开放，在创新中发展，在公义中前进，让中华民国彻底脱胎换骨，跻身先进国家之林。</p>
<p>各位先进、各位同胞：两岸和平是台湾繁荣发展的必要条件。过去三年多，政府在中华民国宪法架构下，以「九二共识，一中各表」为基础，推动两岸关係，维持台海「不统、不独、不武」现状，并得以大幅降低台海紧张，赢得国际社会的肯定与支持。三年多来，我们与大陆签署15项协议，每一项协议都做到了「对等、尊严、互惠」、「以台湾为主，对人民有利」。两岸人民同属中华民族，希望双方在正视现实的基础上，求同存异，互助合作，建立制度化的和平关係。</p>
<p>如今大陆已经是台湾最大的贸易伙伴、顺差来源与投资地区，大陆也是驱动全球经济成长的主要动力。我们要善用台湾优势，布局大陆市场，还要加快脚步，与其他国家洽签自由贸易协定或经济合作协议，为台湾开创新的商机。上月22日，我们与日本签署了投资协议，就是成功的桉例。目前我们也正积极与新加坡协商经济合作协议，我们还要参与区域经济整合，努力创造条件，以十年为期，加入正在扩展中的「跨太平洋伙伴（TPP）协定」。</p>
<p>今后我们要继续推动活路外交，更加巩固与邦交国的关係，增进与美国、日本、欧盟、东协、纽澳等无邦交国的高层互信，并扩大国际参与。十天前，英国成为第七个与我国签署青年打工度假协定的国家；五天前，荷兰也给我们6个海外领土的免签证待遇；后天布吉纳法索给我们落地签证待遇将正式生效，使国人享有免签证或落地签证的国家（地区）总数达到124个，比英九上任时增加了70个国家（地区）。各位先进，各位同胞：这显示当国家受到肯定，人民就有尊严。</p>
<p>在推动两岸关係时，台海和平的维繫不能一厢情愿，必须以坚实的国防为后盾，台湾安全才有保障，民众才有信心与大陆进一步改善关係。过去三年多，我们在部队训练、武器自製方面都有长足进步，并且多次成功採购先进的防卫性武器。未来的十年，我们将持续强化国防力量，打造精锐新国军，以捍卫中华民国主权，保卫台湾安全。</p>
<p>各位先进、各位同胞：国父当年成立「兴中会」时，成员只有二十几位，可是他们坚持理想、勇于实践，掌握了时代的脉动，十七年后竟然推翻满清，建立民国。</p>
<p>今天我们纪念辛亥双十，就要继承先烈先贤这种理想主义，不怕风雨，勇于开创，让我们的国家成为华人世界的典范。中华民国不只是国家的名字，也代表了自由民主的生活方式，对嚮往自由民主的华人地区也将产生示范作用。</p>
<p>光辉的十月，对英九而言，还有一项特殊意义。六十年前的十月，在风雨飘摇中，我的父母带着家人和一岁多的我，从香港来到台湾，追求自由安定的生活。他们万万没有想到，他们的儿子在五十多年后会成为中华民国总统。对这个国家、对这块土地，我怀着深深感恩的心情，我愿意奉献此生一切，努力建设台湾，让她成为自由繁荣的乐土，继续哺育我们的下一代，让每一个孩子，不论出身贫富，都能实现梦想。</p>
<p>就任总统三年多来，英九体会责任的艰钜，不敢丝毫鬆懈。虽然世局多变，挑战随时出现，但我对这块土地有信心，对人民有信心。</p>
<p>各位先进、各位同胞：中华民国是我们的国家，台湾是我们的家园。中华民国的前途与台湾的未来掌握在我们二千三百万人的手中，我们要团结、要奋斗，让台湾更有活力，更有魅力，也更有竞争力！</p>
<p>今天我们不分族群，不分党派，不分海内外，一起为中华民国庆生。我们要发下宏愿，一定要在我们的手中壮大台湾、振兴中华，为中华民国下一个精彩百年，打下基础。让中华民国在国际社会，成为一个更加受人尊敬、让人感动的国家！</p>
<p>现在，让我们一起高呼：</p>
<p>中华民国万岁！<br />
台湾民主万岁！</p>
<p>谢谢大家！</p>
]]></content:encoded>
			<wfw:commentRss>http://wangwenhao.net/2011/10/12/double-ten-speach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让人哭笑不得的好文章</title>
		<link>http://wangwenhao.net/2011/08/16/dumbfounding-good-article/</link>
		<comments>http://wangwenhao.net/2011/08/16/dumbfounding-good-article/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 07:25:12 +0000</pubDate>
		<dc:creator>Wang Wen Hao</dc:creator>
				<category><![CDATA[胡扯]]></category>

		<guid isPermaLink="false">http://wangwenhao.net/?p=587</guid>
		<description><![CDATA[原文转载不做评论，适当加亮…… 警惕骆家辉带来的美国“新殖民主义” 1 60年一个甲子，一个轮回。60多年前，毛泽东曾以一篇《别了，司徒雷登》送走了一位美国驻华大使；如今，我们应该以一篇《向骆家辉学习》欢迎新时期的华裔驻华大使了。 这前后的两个大使，标志着中美关系的两个时代——司徒雷登的离开，标志着工业时代美国旧式殖民主义的破产，标志着中国殖民地时代的结束；而骆家辉的到来，则标志着信息时代新式殖民主义的高潮，标志着中美在意识形态层面冲突的全面爆发。 所谓旧式的殖民主义，其本质是西方工业资本和寡头垄断资本图谋支配中国的政治、进而控制中国的经济最终谋取中国的物质资源以追求利益最大化的扩张举措，这是资本主义生产方式从西方向东方扩展势力范围而产生的必然结果，也是以毛泽东为核心的共产党人以武装斗争反对蒋介石独裁政治的历史背景。 而进入全球一体化的信息时代，以脑力劳动为主导的精神生产方式出现了，但由于资本无能驾驭这种崭新的生产方式，这使得资本主义从工业时代的产业和寡头垄断资本演变为金融投机资本，从旧式的帝国主义而走向新式的投机资本主义，但这种变化并没有从根本上改变美国的殖民主义思维，它只是将旧式的殖民主义升级为新式的殖民主义罢了。 2 新式殖民主义继承并保留了旧式殖民主义的一些成分，比如通过经济的渗透影响其他国家的政治，使得其他国家产生对其有利而对本国有害的政治决策，甚至扶持亲美派的政治经济势力、豢养亲美派的精英和说客，美化殖民主义，象利比亚的反对派得到西方集团的集体支持而陷入空前的内战，这不正是一大明证吗？ 新式殖民主义之新，乃是因为它也在与时俱进，比旧式的殖民主义多了新的理念、方法和手段，比如运用货币转嫁危机掠夺他国的财富、以及调动资本部队去做空其他国家的经济、用强势的媒体信息传播手段给落后国家的民众洗脑强化其崇洋媚外的奴性思想等等。 总而言之，与旧式的殖民主义更多的运用政治、经济和军事力量威逼利诱而图谋支配其他国家不同，新式的殖民主义，则是运用市场经济的所谓投机智慧，综合运用各种媒体的信息传播手段、大规模调动投机资本部队，去影响大众的心理预期、去干扰并影响其他国家的决策，以使得其他国家落入自己精心设计的圈套。 如果将旧式殖民主义比作狼的话，那么新式殖民主义则是披上羊皮的狼，虽然其外表发生了变化，但其掠夺的本性并未得到改变，如果一个强盗能够在麻将桌上通过耍老千而谋取你的口袋的话，那么他就不会去明目张胆的对你实施抢劫了，而如果他再将自己打扮的道貌岸然的话，你也就自然丧失了警惕性，甚至不再将其视为强盗。 3 美国就是这样一个把“美”字贴在国门而不是写在心里的国家，他们的美只是空挂于国门之上，而其国家意识的内心则仍然跳动着狼子野心，他们通过所谓的民主选举将资本的意志披上民意的外衣，再将其变成国家的政策和行为。 之所以如此，是因为资本主义的生产方式所决定的，资本主义国家在本质上都是被资本所支配的国家，由于追求利益最大化是资本的本性，所以，资本主义国家也必然追求其国家利益的最大化，而不是全人类整体利益的最大化。 所以我们看到，这个高举人权大旗、高呼人道主义的头号强国却无视北约的战机对利比亚的人权而造成粗暴践踏、无视这种侵略战争在利比亚造成的人道主义灾难，他们手中的人权和人道主义旗帜只是在对自己有利的时候才高高举起，而对自己不利的时候却悄悄放下甚至藏起，这种在利益面前而产生的双重标准便是美国的真实嘴脸。 美国人是笃信人性本恶论的，他们信仰基督教，并尊奉上帝，但却从来不会将上帝装在心中而把自己变成天使，他们将教堂当成心灵的浴场，而教堂却总洗不净他们的原罪，每次作恶之后，他们就去教堂面对上帝进行忏悔，而在自以为得到上帝的宽恕之后，则转身背叛上帝，继续作恶，他们来回奔波在善恶之间，却总不能自觉的弃恶扬善，因而，他们也不能自觉将唯利是图的思想意识升级为以义取利。 他们将利己主义和个人主义视为天经地义，并通过媒体的话语权将其美其名曰为“普世价值”，围绕这种思想建立起看似完善的三权分立的政治思想和自由主义的经济理论，企图将这种思想体系传播到世界各地，以支配其他国家，他们就是企图用自认为的先进思想来统治人们的脑袋，为的是持续不断掏取世界人民的口袋。 4 美国的行为，都是为了自己的一国之利而非全球大义，他们所追求的永远是称霸世界而非德政天下，在认识到道德、正义、责任和良知这些精神生产力的神奇力量之前，他们永远不会对全人类大爱无疆，不会把地球变成相互友爱的人间天堂，而只会将其变成一个弱肉强食的动物世界。 认识到资本主义国家这种利己主义的国家意识，这是洞悉美国国家战略乃至整个世界格局演变的一把钥匙，也是扭转世界格局而实现大同世界的按钮，只有将全人类的思想观念从资本的唯利是图升级为智本的以义取利，才能使得全人类的思想精神从资本的奴役之下解放出来，人类也才能彻底消灭战争而实现永久和平。 只要人类没有认识到自身的社会已经走过资本统治的工业文明时代而进入由智本统治的智慧文明时代，只要精神生产方式没有从根本上代替物质生产方式而驱动整个社会的经济发展，只要东西方的文化冲突没有从根本上从对立而实现统一并走向融合，整个世界将一直动荡不安，并不断产生新的灾难。 在这个工业文明向着智慧文明、物质生产向着精神生产、体力劳动向着脑力劳动转移过渡的社会变革时期，只要新旧生产方式的转换没有彻底完成，只要全人类没有在思想上达成共识，只要没有找到全世界共同富裕和平相处的根本办法，人类社会必将像分娩难产的母亲一样，给人类自身带来巨大持久的痛苦——金融危机、经济危机、政治动乱、生态灾难、社会动荡乃至思想意识等诸多社会综合症还会进一步爆发并长期持续。 在全人类的整体利益得不到维护的情况下，各个国家和民族将只顾一己之私利，而国家与国家、民族和民族之间，也必然通过威逼利诱、巧取豪夺、相互暗算的形式转嫁危机，将自己一国的所谓幸福建立在其他国家的痛苦之上，整个人类社会的冲突也就会在国家和国家、民族和民族之间爆发，就像地球板块之间的挤压冲撞而引发火山地震的自然灾难一样。 5 认清了这一世界大格局，我们就不会被骆家辉的表面现象所迷惑，这个华裔的驻华大使是为了美国不是为了全人类的整体利益而来，华裔的身份使得他可以吸引全世界华人的目光而召集民意，可以使他能够对中国的普通民众产生亲和力，而谁又知道，这恰恰暴露了美国以华治华、煽动中国政治动乱的卑鄙用心呢？ 果不其然，刚到中国的骆家辉，一下飞机就给中国的官员们来了一个下马威，没有随从、没有警卫、没有鲜花和掌声以及热烈欢迎的豪华排场、全家拎着大包小包抵达北京，活脱脱一派平民作风，显然，这种做派更能赢得中国普通民众的好感。 但这是什么做派呢？这是中国共产党当年与人民群众同甘共苦打成一片的作风，这是当年中国共产党不摆架子不讲排场务实求是的作风，这种作风与众多官僚权贵们的高高在上形成鲜明的对比和讽刺——走马还未上任的骆家辉先声夺人，给中国的官员们上了一堂重拾共产党人优良作风的行为艺术课。 当然，给中国的官员们上课绝不是骆家辉的目的，为美国收揽赢得中国的民心强化中国民众崇洋媚外的奴性，进而召集民意以壮大美国在中国的支持力量，借以分化中国断裂甚至碎裂的意识形态才是这位华裔大使的如意算盘。 6 但面对这一阳光下的阴谋，中国共产党早就通过建设学习型政党的号召而做好了准备，而敢于和善于批判学习一切人类文明成果也是马克思主义的内在要求，只有能够低头学习、伏案沉思并身体力行的政党也才是中国共产党的革命传统和真正本色。 因此，我郑重而又严肃的建议、呼吁和号召中国的官员们，要向美国驻华大使骆家辉同胞学习，学习他轻车简从脚踩大地的平民作风，学习他不讲排场节省社会资源以追求生态和谐的低碳生活方式，学习他不讲官话套话大话的务实作风。 骆家辉身上所喷薄洋溢出来的“美德”绝不是他个人的私有财产，而是全人类共同的精神财富，是中华民族的传统美德、是中国共产党人在革命时代创造积累的精神财富，一个敢于向对手低头学习的政党才是一个能令对手敬畏的伟大政党、才是真正的学习型政党、才是战无不胜攻无不克所向披靡汇聚民心、民力和民智的领导核心！ 如果中国共产党不能主动自觉清除官僚主义的病毒以确保自己机体的健康，如果中国共产党不能自己将党和官分开以整顿吏治收复民心，那就等着骆家辉掳走我们的民心和民意再反过来给我们自己动手术吧！但要知道，他们此前不会、现在不会、今后也不会拥护马克思主义、拥护社会主义、拥护共产党！]]></description>
			<content:encoded><![CDATA[<p><a href="http://guancha.gmw.cn/2011-08/15/content_2459744.htm" target="_blank">原文</a>转载不做评论，适当加亮……</p>
<p>警惕骆家辉带来的美国“新殖民主义”</p>
<p>1</p>
<p>60年一个甲子，一个轮回。60多年前，毛泽东曾以一篇《别了，司徒雷登》送走了一位美国驻华大使；如今，我们应该以一篇《向骆家辉学习》欢迎新时期的华裔驻华大使了。</p>
<p>这前后的两个大使，标志着中美关系的两个时代——司徒雷登的离开，标志着工业时代美国旧式殖民主义的破产，标志着中国殖民地时代的结束；而骆家辉的到来，则标志着信息时代新式殖民主义的高潮，标志着中美在意识形态层面冲突的全面爆发。</p>
<p>所谓旧式的殖民主义，其本质是西方工业资本和寡头垄断资本图谋支配中国的政治、进而控制中国的经济最终谋取中国的物质资源以追求利益最大化的扩张举措，这是资本主义生产方式从西方向东方扩展势力范围而产生的必然结果，也是以毛泽东为核心的共产党人以武装斗争反对蒋介石<strong><span style="color: #ff0000;">独裁政治</span></strong>的历史背景。</p>
<p>而进入全球一体化的信息时代，以脑力劳动为主导的精神生产方式出现了，但由于资本无能驾驭这种崭新的生产方式，这使得资本主义从工业时代的产业和寡头垄断资本演变为金融投机资本，从旧式的帝国主义而走向新式的投机资本主义，但这种变化并没有从根本上改变美国的殖民主义思维，它只是将旧式的殖民主义升级为新式的殖民主义罢了。</p>
<p>2</p>
<p>新式殖民主义继承并保留了旧式殖民主义的一些成分，比如通过经济的渗透影响其他国家的政治，使得其他国家产生对其有利而对本国有害的政治决策，甚至扶持亲美派的政治经济势力、豢养亲美派的精英和说客，美化殖民主义，象利比亚的反对派得到西方集团的集体支持而陷入空前的内战，这不正是一大明证吗？</p>
<p>新式殖民主义之新，乃是因为它也在与时俱进，比旧式的殖民主义多了新的理念、方法和手段，比如运用货币转嫁危机掠夺他国的财富、以及调动资本部队去做空其他国家的经济、用强势的媒体信息传播手段给落后国家的<strong><span style="color: #ff0000;">民众洗脑</span></strong>强化其崇洋媚外的<span style="color: #ff0000;"><strong>奴性思想</strong></span>等等。</p>
<p>总而言之，与旧式的殖民主义更多的运用政治、经济和军事力量威逼利诱而图谋支配其他国家不同，新式的殖民主义，则是运用市场经济的所谓投机智慧，综合运用各种媒体的信息传播手段、大规模调动投机资本部队，去影响大众的心理预期、去干扰并影响其他国家的决策，以使得其他国家落入自己精心设计的圈套。</p>
<p>如果将旧式殖民主义比作狼的话，那么新式殖民主义则是披上羊皮的狼，虽然其外表发生了变化，但其掠夺的本性并未得到改变，如果一个强盗能够在麻将桌上通过耍老千而谋取你的口袋的话，那么他就不会去明目张胆的对你实施抢劫了，而如果他再将自己打扮的道貌岸然的话，你也就自然丧失了警惕性，甚至不再将其视为强盗。</p>
<p>3</p>
<p>美国就是这样一个把“美”字贴在国门而不是写在心里的国家，他们的美只是空挂于国门之上，而其国家意识的内心则仍然跳动着狼子野心，他们通过所谓的民主选举将资本的意志披上民意的外衣，再将其变成国家的政策和行为。</p>
<p>之所以如此，是因为资本主义的生产方式所决定的，资本主义国家在本质上都是被资本所支配的国家，由于追求利益最大化是资本的本性，所以，资本主义国家也必然追求其国家利益的最大化，而不是全人类整体利益的最大化。</p>
<p>所以我们看到，这个高举人权大旗、高呼人道主义的头号强国却无视北约的战机对利比亚的人权而造成粗暴践踏、无视这种侵略战争在利比亚造成的人道主义灾难，<strong><span style="color: #ff0000;">他们手中的人权和人道主义旗帜只是在对自己有利的时候才高高举起，而对自己不利的时候却悄悄放下甚至藏起</span></strong>，这种在利益面前而产生的双重标准便是美国的真实嘴脸。</p>
<p>美国人是笃信人性本恶论的，他们信仰基督教，并尊奉上帝，但却从来不会将上帝装在心中而把自己变成天使，他们将教堂当成心灵的浴场，而教堂却总洗不净他们的原罪，每次作恶之后，他们就去教堂面对上帝进行忏悔，而在自以为得到上帝的宽恕之后，则转身背叛上帝，继续作恶，他们来回奔波在善恶之间，却总不能自觉的弃恶扬善，因而，他们也不能自觉将唯利是图的思想意识升级为以义取利。</p>
<p>他们将利己主义和个人主义视为天经地义，并<strong><span style="color: #ff0000;">通过媒体的话语权</span></strong>将其美其名曰为“普世价值”，围绕这种思想建立起看似完善的三权分立的政治思想和自由主义的经济理论，企图将这种思想体系传播到世界各地，以支配其他国家，他们就是企图用自认为的先进思想来统治人们的脑袋，为的是<strong><span style="color: #ff0000;">持续不断掏取世界人民的口袋</span></strong>。</p>
<p>4</p>
<p>美国的行为，都是为了自己的一国之利而非全球大义，他们所追求的永远是称霸世界而非德政天下，在认识到道德、正义、责任和良知这些精神生产力的神奇力量之前，他们永远不会对全人类大爱无疆，不会把地球变成相互友爱的人间天堂，而只会将其变成一个弱肉强食的动物世界。</p>
<p>认识到资本主义国家这种利己主义的国家意识，这是洞悉美国国家战略乃至整个世界格局演变的一把钥匙，也是扭转世界格局而实现大同世界的按钮，只有将全人类的思想观念从资本的唯利是图升级为智本的以义取利，才能使得全人类的思想精神从资本的奴役之下解放出来，人类也才能彻底消灭战争而实现永久和平。</p>
<p>只要人类没有认识到自身的社会已经走过资本统治的工业文明时代而进入由智本统治的智慧文明时代，只要精神生产方式没有从根本上代替物质生产方式而驱动整个社会的经济发展，只要东西方的文化冲突没有从根本上从对立而实现统一并走向融合，整个世界将一直动荡不安，并不断产生新的灾难。</p>
<p>在这个工业文明向着智慧文明、物质生产向着精神生产、体力劳动向着脑力劳动转移过渡的社会变革时期，只要新旧生产方式的转换没有彻底完成，只要全人类没有在思想上达成共识，只要没有找到全世界共同富裕和平相处的根本办法，人类社会必将像分娩难产的母亲一样，给人类自身带来巨大持久的痛苦——金融危机、经济危机、政治动乱、生态灾难、社会动荡乃至思想意识等诸多社会综合症还会进一步爆发并长期持续。</p>
<p>在全人类的整体利益得不到维护的情况下，各个国家和民族将只顾一己之私利，而国家与国家、民族和民族之间，也必然通过威逼利诱、巧取豪夺、相互暗算的形式转嫁危机，将自己一国的所谓幸福建立在其他国家的痛苦之上，整个人类社会的冲突也就会在国家和国家、民族和民族之间爆发，就像地球板块之间的挤压冲撞而引发火山地震的自然灾难一样。</p>
<p>5</p>
<p>认清了这一世界大格局，我们就不会被骆家辉的表面现象所迷惑，<strong><span style="color: #ff0000;">这个华裔的驻华大使是为了美国不是为了全人类的整体利益而来，华裔的身份使得他可以吸引全世界华人的目光而召集民意，可以使他能够对中国的普通民众产生亲和力，而谁又知道，这恰恰暴露了美国以华治华、煽动中国政治动乱的卑鄙用心呢？</span></strong></p>
<p><strong><span style="color: #ff0000;">果不其然，刚到中国的骆家辉，一下飞机就给中国的官员们来了一个下马威，没有随从、没有警卫、没有鲜花和掌声以及热烈欢迎的豪华排场、全家拎着大包小包抵达北京，活脱脱一派平民作风，显然，这种做派更能赢得中国普通民众的好感。</span></strong></p>
<p><strong><span style="color: #ff0000;">但这是什么做派呢？这是中国共产党当年与人民群众同甘共苦打成一片的作风，这是当年中国共产党不摆架子不讲排场务实求是的作风，这种作风与众多官僚权贵们的高高在上形成鲜明的对比和讽刺——走马还未上任的骆家辉先声夺人，给中国的官员们上了一堂重拾共产党人优良作风的行为艺术课。</span></strong></p>
<p><strong><span style="color: #ff0000;">当然，给中国的官员们上课绝不是骆家辉的目的，为美国收揽赢得中国的民心强化中国民众崇洋媚外的奴性，进而召集民意以壮大美国在中国的支持力量，借以分化中国断裂甚至碎裂的意识形态才是这位华裔大使的如意算盘。</span></strong></p>
<p>6</p>
<p>但面对这一阳光下的阴谋，中国共产党早就通过建设学习型政党的<strong><span style="color: #ff0000;">号召</span></strong>而做好了准备，而敢于和善于批判学习一切人类文明成果也是马克思主义的内在要求，只有能够低头学习、伏案沉思并身体力行的政党也才是中国共产党的革命传统和真正本色。</p>
<p><strong><span style="color: #ff0000;">因此，我郑重而又严肃的建议、呼吁和号召中国的官员们，要向美国驻华大使骆家辉同胞学习，学习他轻车简从脚踩大地的平民作风，学习他不讲排场节省社会资源以追求生态和谐的低碳生活方式，学习他不讲官话套话大话的务实作风。</span></strong></p>
<p>骆家辉身上所喷薄洋溢出来的“美德”绝不是他个人的私有财产，而是全人类共同的精神财富，是中华民族的传统美德、是中国共产党人在革命时代创造积累的精神财富，一个敢于向对手低头学习的政党才是一个能令对手敬畏的伟大政党、才是真正的学习型政党、才是战无不胜攻无不克所向披靡汇聚民心、民力和民智的领导核心！</p>
<p>如果中国共产党不能主动自觉清除官僚主义的病毒以确保自己机体的健康，如果中国共产党不能自己将<strong><span style="color: #ff0000;">党和官</span></strong>分开以整顿吏治收复民心，那就等着骆家辉掳走我们的民心和民意再反过来给我们自己动手术吧！但要知道，他们此前不会、现在不会、今后也不会拥护马克思主义、拥护社会主义、拥护共产党！</p>
]]></content:encoded>
			<wfw:commentRss>http://wangwenhao.net/2011/08/16/dumbfounding-good-article/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE你好，IE再见</title>
		<link>http://wangwenhao.net/2011/07/22/goodbye-ie/</link>
		<comments>http://wangwenhao.net/2011/07/22/goodbye-ie/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 05:08:26 +0000</pubDate>
		<dc:creator>Wang Wen Hao</dc:creator>
				<category><![CDATA[互联网]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://wangwenhao.net/?p=577</guid>
		<description><![CDATA[在网站模板中用了一些HTML5的语义标签，用IE访问显示混乱，远离IE，从我做起！让我们一起对IE说不！！！]]></description>
			<content:encoded><![CDATA[<p>在网站模板中用了一些HTML5的语义标签，用IE访问显示混乱，远离IE，从我做起！让我们一起对IE说不！！！</p>
]]></content:encoded>
			<wfw:commentRss>http://wangwenhao.net/2011/07/22/goodbye-ie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>刘谦EMC表演全球无人破解的巴格拉斯效果</title>
		<link>http://wangwenhao.net/2011/07/12/lu-chen-emc-magic-the-berglas-effect/</link>
		<comments>http://wangwenhao.net/2011/07/12/lu-chen-emc-magic-the-berglas-effect/#comments</comments>
		<pubDate>Mon, 11 Jul 2011 17:19:35 +0000</pubDate>
		<dc:creator>Wang Wen Hao</dc:creator>
				<category><![CDATA[娱乐]]></category>
		<category><![CDATA[Magic]]></category>

		<guid isPermaLink="false">http://wangwenhao.net/?p=521</guid>
		<description><![CDATA[THE BERGLAS EFFECT David Berglas has been performing a unique version of”any card at any number” for almost 50 years.The effect has 4 very strict criteria that no other version of ACAAN seems to be bale to match： The cards are on view before the effect starts A spectator freely names any card.They are not [...]]]></description>
			<content:encoded><![CDATA[<p>THE BERGLAS EFFECT</p>
<p>David Berglas has been performing a unique version of”any card at any number” for almost 50 years.The effect has 4 very strict criteria that no other version of ACAAN seems to be bale to match：</p>
<ol>
<li>The cards are on view before the effect starts</li>
<li>A spectator freely names any card.They are not a stooge and can freely choose any one of the 52 cards,no restrictions</li>
<li>Another spectator freely names any number between 1 and 52.They are not a stooge and have a free choice,no restriction.</li>
<li>A third spectator is invited to count down to the chosen number.The performer does not touch the cards.</li>
</ol>
<p>“The berglas Effect” is NOT available through any magic dealer or internet magic shop.The method is exclusively David&#8217;s and may never be released.There are no longer enough mystery in magic.</p>
<p>Some things should just remain secret.THE BERGLAS EFFECT&#8230;</p>
<p>巴格拉斯效果</p>
<p>大卫·巴格拉斯已经表演了这个“any card at any number”效果的独一无二的版本近50年了，任何其他版本的效果都无法与之相提并论，因为巴格拉斯效果有4个非常严格的标准：</p>
<ol>
<li>在表演开始前扑克可以展示，没有重复的牌。</li>
<li>观众任意说一张牌。他们不是托，可以不受限制的从52张牌中任意说一张。</li>
<li>另一名观众任意说一个1到52之间的数字。他们也不是托，并且不受任何限制。</li>
<li>邀请第三名观众来数牌，数第二名观众说出来的数字。表演者在表演的过程中不接触牌。</li>
</ol>
<p>任何魔术生产商或网上商店都不能以”The berglas Effect”为名进行销售。方法只属于David Berglas，可能永远不会公开，将成为魔术界永恒的秘密。</p>
<p>有些事情应该永远保持神秘。比如巴格拉斯效果&#8230;</p>
<p>视频见内页</p>
<p><span id="more-521"></span></p>
<p><embed src="http://player.youku.com/player.php/sid/XMjg0MDAwMzA0/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://wangwenhao.net/2011/07/12/lu-chen-emc-magic-the-berglas-effect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为HTML5的未来制定学习计划</title>
		<link>http://wangwenhao.net/2011/07/08/html5-study-plan/</link>
		<comments>http://wangwenhao.net/2011/07/08/html5-study-plan/#comments</comments>
		<pubDate>Fri, 08 Jul 2011 09:06:35 +0000</pubDate>
		<dc:creator>Wang Wen Hao</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://wangwenhao.net/?p=566</guid>
		<description><![CDATA[利用web技术进行应用开发的趋势已深入人心，甚至web浏览器以外亦是如此。最近披露Windows 8将会为编写运用HTML 5技术的应用提供支持只不过是契合了其在开发界的转变而已。因此问题是：你打算如何应对？ 如果你没有在一直地密切跟踪，很容易就会做出这样的猜测，为什么突然之间Web技术会扮演桌面应用开发平台的角色。在正在定稿的HTML5标准里面，添加了一些新的项目，这些项目为HTML目前的文档格式附加上了真正的应用开发能力。过去，庞大的JavaScript框架及浏览器插件是某些相当琐碎的功能之所需。 HTML5依靠添加对视频流、多线程以及异步处理（通过“Web Workers”消息传递系统）、利用套接字直接通信等的支持来改变这场游戏。尽管一个文档格式标准拥有这些能力会吓到某些人（包括我本人在内），但是车轮滚滚，这仍是HTML 5的前进方向，而且它还有苹果、微软、谷歌、Mozilla、Adobe等公司给它撑腰。此外，各种不同的框架的存在让它能够轻易地将Web应用直接与后台的Web服务连接起来。其结果是，对于许多任务来说，HTML 5现在跟Silverlight、Flash、Flex/AIR以及JavaFX等技术一样出色（尽管在某些事情上那些仍做得更好）。 以下就是你希望学习来步入此门槛的技术： HTML5： 尽管HTML5作为标准可能尚未完全确定，但是到了这个阶段变动不会太大了。目前，它已经是可用的，并在相当一些浏览器上有了实现。你现在可以开始学习它了。 CSS： 如果你对CSS还不熟悉，现在正是学习它的大好时机。浏览器支持还在不断完善，且现在IE6在市场的份额已经很少，对此开发人员已经觉得可以放心地忽略不计。 Web services： 每一种主流的服务器端开发语言都拥有一个框架或一套库，以便容易地生成web服务，如.NET中的Windows Communication Foundation （WCF）。理解这些基础应该不需要花费太多的学习精力。你也许特别希望学会如何生成JSON的输出，此物正在迅速变成Web应用的通用语。还有，确保你理解了RESTful Web服务。在现代的开发环境下，相对于SOAP来说，尽管它们可能需要花费更多的功夫，但是其可访问性可用性也要高得多。 JavaScript： 相对于传统的ASP.NET或类似开发需求来说，新的应用开发范式需要多一点JavaScript方面的知识。 jQuery： jQuery已经成为可用的客户端开发框架；它似乎可用包办一切。在利用一组扩展的插件的情况下，如果你想玩点UI的花样，很可能jQuery能帮你忙。 这些技术现在构成了若干不同的开发系统的基础。移动网站就是一条好的途径，靠它可用最少的功夫来达到最多的移动用户。像Appcelerator的Titanium那样的工具允许你在若干平台上（包括桌面和移动）在其系统之内使用web技术。其他的系统，像OutSystem的Agile Platform打包了像jQuery这样的库，使得开发桌面或移动web应用变得极其简单。Windows 8，尽管细节仍很含糊，看起来似乎会拿IE9（或彼时的当前版本）作为HTML 5的运行环境，来充当脱离明显的浏览器窗口之外的本地应用。可以推断，这些应用会拥有增强的特权来访问本地资源，也可能其行为会更像是本地应用。 自学上述核心技术可谓聪明的一步，今年9月微软的BUILD大会举办过后，我们就应该了解到该公司Windoes 8的策略调整计划，并能发现还有哪些东西需要我们去学。]]></description>
			<content:encoded><![CDATA[<p>利用web技术进行应用开发的趋势已深入人心，甚至web浏览器以外亦是如此。最近披露<a href="http://www.techrepublic.com/blog/programming-and-development/windows-8-native-apps-and-html5-facts-and-conjecture/4313">Windows 8将会为编写运用HTML 5技术的应用提供支持</a>只不过是契合了其在开发界的转变而已。因此问题是：你打算如何应对？</p>
<p>如果你没有在一直地密切跟踪，很容易就会做出这样的猜测，为什么突然之间Web技术会扮演桌面应用开发平台的角色。在正在定稿的<a href="http://dev.w3.org/html5/spec/Overview.html">HTML5标准</a>里面，添加了一些新的项目，这些项目为HTML目前的文档格式附加上了真正的应用开发能力。过去，庞大的JavaScript框架及浏览器插件是某些相当琐碎的功能之所需。</p>
<p>HTML5依靠添加对视频流、多线程以及异步处理（通过“Web Workers”消息传递系统）、利用套接字直接通信等的支持来改变这场游戏。尽管一个文档格式标准拥有这些能力会吓到某些人（包括我本人在内），但是车轮滚滚，这仍是HTML 5的前进方向，而且它还有苹果、微软、谷歌、Mozilla、Adobe等公司给它撑腰。此外，各种不同的框架的存在让它能够轻易地将Web应用直接与后台的Web服务连接起来。其结果是，对于许多任务来说，HTML 5现在跟Silverlight、Flash、Flex/AIR以及JavaFX等技术一样出色（尽管在某些事情上那些仍做得更好）。</p>
<p>以下就是你希望学习来步入此门槛的技术：</p>
<p><strong>HTML5</strong>： 尽管HTML5作为标准可能尚未完全确定，但是到了这个阶段变动不会太大了。目前，它已经是可用的，并在相当一些浏览器上有了实现。你现在可以开始学习它了。</p>
<p><strong>CSS</strong>： 如果你对CSS还不熟悉，现在正是学习它的大好时机。浏览器支持还在不断完善，且现在IE6在市场的份额已经很少，对此开发人员已经觉得可以放心地忽略不计。</p>
<p><strong>Web services</strong>： 每一种主流的服务器端开发语言都拥有一个框架或一套库，以便容易地生成web服务，如.NET中的<a href="http://www.techrepublic.com/blog/programming-and-development/an-introduction-to-windows-communication-foundation/2349">Windows Communication Foundation</a> （WCF）。理解这些基础应该不需要花费太多的学习精力。你也许特别希望学会如何生成JSON的输出，此物正在迅速变成Web应用的通用语。还有，确保你理解了RESTful Web服务。在现代的开发环境下，相对于SOAP来说，尽管它们可能需要花费更多的功夫，但是其可访问性可用性也要高得多。</p>
<p><strong>JavaScript</strong>： 相对于传统的ASP.NET或类似开发需求来说，新的应用开发范式需要多一点JavaScript方面的知识。</p>
<p><strong>jQuery</strong>： jQuery已经成为可用的客户端开发框架；它似乎可用包办一切。在利用一组扩展的插件的情况下，如果你想玩点UI的花样，很可能jQuery能帮你忙。</p>
<p>这些技术现在构成了若干不同的开发系统的基础。移动网站就是一条好的途径，靠它可用最少的功夫来达到最多的移动用户。像<a href="http://www.appcelerator.com/products/titanium-studio/">Appcelerator的Titanium</a>那样的工具允许你在若干平台上（包括桌面和移动）在其系统之内使用web技术。其他的系统，像<a href="http://www.outsystems.com/">OutSystem的Agile Platform</a>打包了像jQuery这样的库，使得开发桌面或移动web应用变得极其简单。Windows 8，尽管细节仍很含糊，看起来似乎会拿IE9（或彼时的当前版本）作为HTML 5的运行环境，来充当脱离明显的浏览器窗口之外的本地应用。可以推断，这些应用会拥有增强的特权来访问本地资源，也可能其行为会更像是本地应用。</p>
<p>自学上述核心技术可谓聪明的一步，<a href="http://www.buildwindows.com/">今年9月微软的BUILD大会</a>举办过后，我们就应该了解到该公司Windoes 8的策略调整计划，并能发现还有哪些东西需要我们去学。</p>
]]></content:encoded>
			<wfw:commentRss>http://wangwenhao.net/2011/07/08/html5-study-plan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>仿人人网底部“返回顶部”按钮实现</title>
		<link>http://wangwenhao.net/2011/07/06/implement-back-to-top-button/</link>
		<comments>http://wangwenhao.net/2011/07/06/implement-back-to-top-button/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 05:04:06 +0000</pubDate>
		<dc:creator>Wang Wen Hao</dc:creator>
				<category><![CDATA[Web开发]]></category>
		<category><![CDATA[互联网]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://wangwenhao.net/?p=535</guid>
		<description><![CDATA[最近上人人网的时候，发现页面的底部有一个“返回顶部”的按钮，于是在自己的网站上也搞了一个，其实非常简单。]]></description>
			<content:encoded><![CDATA[<p>最近上人人网的时候，发现页面的底部有一个“返回顶部”的按钮，于是在自己的网站上也搞了一个，其实非常简单。</p>
<p>首先，修改主题模板的footer.php文件，&lt;/body&gt;上面加入如下代码：</p>
<pre>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;toolBackTo&quot;</span> <span style="color: #000066;">style</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;display: none;&quot;</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">title</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;返回顶部&quot;</span> <span style="color: #000066;">onclick</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;window.scrollTo(0,0); return false;&quot;</span> </span><br />
<span style="color: #009900;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#top&quot;</span>&gt;</span>返回顶部<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span></div></div>
</pre>
<p>上面这段代码是完全Copy自人人网的源代码。返回页面顶端的代码很简单。</p>
<p>接下来修改style.css文件，加入上面div和链接的样式：</p>
<pre>
<div class="codecolorer-container css mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6666ff;">.back-to</span> <span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">fixed</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">bottom</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">right</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">z-index</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">999</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">110px</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">overflow</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">hidden</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; zoom<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">1</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; -ie6-position-fixed-delay<span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">200</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span><br />
<br />
<span style="color: #6666ff;">.back-to</span> .back-<span style="color: #000000; font-weight: bold;">top</span><span style="color: #3333ff;">:hover </span><span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">background-position</span><span style="color: #00AA00;">:</span> <span style="color: #933;">-50px</span> <span style="color: #cc66cc;">0</span><br />
<span style="color: #00AA00;">&#125;</span><br />
<br />
<span style="color: #6666ff;">.back-to</span> .back-<span style="color: #000000; font-weight: bold;">top</span> <span style="color: #00AA00;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">right</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">block</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">50px</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">50px</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">http://a.xnimg.cn/imgpro/button/back-top.png</span><span style="color: #00AA00;">&#41;</span> <span style="color: #993333;">no-repeat</span> <span style="color: #cc66cc;">0</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">margin-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">10px</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">outline</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">text-indent</span><span style="color: #00AA00;">:</span> <span style="color: #933;">-9999em</span><span style="color: #00AA00;">;</span><br />
<span style="color: #00AA00;">&#125;</span></div></div>
</pre>
<p>非常不好意思，这些代码也是原样copy自人人网。</p>
<p>.back-to就是div的样式，它的position设为fixed。这样它就会固定在页面的某个地方。在这里它的位置是bottom: 10px; right: 10px，就是右下角距离浏览器边角各10px的位置。</p>
<p>到这一步，基本功能已经实现了，当我们把页面滚动到下方的时候，点击这个按钮，就会自动跳到页面的顶端。</p>
<p>不过，当页面在顶端的时候，这个按钮其实没有存在的必要，我们可以用javascript来控制它。</p>
<p>再回到footer.php文件，在刚刚的代码下面加上如下代码。</p>
<pre>
<div class="codecolorer-container javascript mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span><br />
$<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> bt <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#toolBackTo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> hl <span style="color: #339933;">=</span> $.<span style="color: #660066;">browser</span>.<span style="color: #660066;">webkit</span> <span style="color: #339933;">?</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'html'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; $<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>.<span style="color: #000066;">scroll</span><span style="color: #009900;">&#40;</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> st <span style="color: #339933;">=</span> hl.<span style="color: #660066;">scrollTop</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; show <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>st<span style="color: #339933;">&gt;</span><span style="color: #CC0000;">30</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> show <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bt.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;slow&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #000066; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bt.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;slow&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></div></div>
</pre>
<p>这段代码用到了jQuery，所以需要先检查一下当前模板有没有引用jQuery，如果没有的话要在header.php里引用它。</p>
<p>我们给window对象绑上了scroll方法，在页面滚动的时候触发来控制返回按钮所在div的隐藏和显示。</p>
<p>代码非常简单。</p>
]]></content:encoded>
			<wfw:commentRss>http://wangwenhao.net/2011/07/06/implement-back-to-top-button/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

