<?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; AJAX</title>
	<atom:link href="http://libaocun.com/tag/ajax/feed" rel="self" type="application/rss+xml" />
	<link>http://libaocun.com</link>
	<description>Think globally, act locally.</description>
	<lastBuildDate>Fri, 02 Jul 2010 07:27:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>在线拍卖系统</title>
		<link>http://libaocun.com/online-auction-design</link>
		<comments>http://libaocun.com/online-auction-design#comments</comments>
		<pubDate>Wed, 30 Sep 2009 01:54:25 +0000</pubDate>
		<dc:creator>Bali</dc:creator>
				<category><![CDATA[Chinese - 中文]]></category>
		<category><![CDATA[ACT]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[Online-Service]]></category>

		<guid isPermaLink="false">http://www.balionweb.com/?p=218</guid>
		<description><![CDATA[早上，习惯性地打开新浪，小心地在广告链接中穿行，点新闻看。一则关于淘宝一元秒杀的新闻，很有意思。故事大概是：9/25日晚8时，淘宝将价值数千元的商品，以一元标价在淘宝上拍卖，庆祝成立6周年。结果搞砸了。很多用户还未看到开始页面就结束了，还有人用作弊器同时拍到了多个商品。
此事从商务角度来说，淘宝是毫无疑问的赢家。此次拍卖的目的并非真的拍卖，而是赚人气，赚眼球。尚不清楚，淘宝是否真的故意造成争议话题，让大家去议论，正如电影拍摄中常常传出男女主角的桃色新闻一样。从技术角度来说，如果要较完善设计此系统的话，至少有几点值得商榷。
（1）Use server push instead of client pull. 有淘宝用户留言，
我从19:50开始，不断刷新页面，都是显示“即将开始”，再刷新，活动已经结束！MLGB…
在线拍卖讲究的就是时效性，大家都想以最低的价格得到某样商品，所以非常想知道最新的价格，这时候就疯狂刷页面，造成服务器压力很大。另外一种做法是Server Push, “你们都不要刷了，有消息会告诉你们的，回家等着吧。” 这种东东就叫做Server Push。也不是什么新的概念，用Java applet等插件N年前都能实现，但让每个人都装这么个插件显然代价太大。现在的SilverLight, Flex也能实现类似功能，但需要安装插件。Dojo的Comet很好地解决了这个问题。code在这里。不用装插件，可以穿越防火墙，而且scalability很好，也可以做cluster。淘宝的兄弟们真应该考虑一下这个东西。对Java天然支持。很可能将是Servlet 3.0的一部分，HTML5中也有类似的概念了。Server Push的应用范围主要在Server需要主动传递信息给client的情况，如在线拍卖，聊天，股票报价等。下面是一个介绍的slide，有兴趣的朋友，仔细看看。5分钟就可以用maven弄一个玩玩。
Time for Comet?
（2）用一点anti-spamming技术吧，在这里就是验证码(CAPTCHA)。只有人能拍，程序不能拍。
（3）防一下DoS攻击，把疯狂刷页面的同学的IP暂时放入黑名单，或者弹出一个验证码页面。
]]></description>
			<content:encoded><![CDATA[<p>早上，习惯性地打开新浪，小心地在广告链接中穿行，点新闻看。一则关于<a href="http://tech.sina.com.cn/i/2009-09-30/05283480615.shtml">淘宝一元秒杀</a>的新闻，很有意思。故事大概是：9/25日晚8时，淘宝将价值数千元的商品，以一元标价在淘宝上拍卖，庆祝成立6周年。结果搞砸了。很多用户还未看到开始页面就结束了，还有人用作弊器同时拍到了多个商品。</p>
<p>此事从商务角度来说，淘宝是毫无疑问的赢家。此次拍卖的目的并非真的拍卖，而是赚人气，赚眼球。尚不清楚，淘宝是否真的故意造成争议话题，让大家去议论，正如电影拍摄中常常传出男女主角的桃色新闻一样。从技术角度来说，如果要较完善设计此系统的话，至少有几点值得商榷。</p>
<p>（1）Use server push instead of client pull. 有淘宝用户留言，</p>
<blockquote><p>我从19:50开始，不断刷新页面，都是显示“即将开始”，再刷新，活动已经结束！MLGB…</p></blockquote>
<p>在线拍卖讲究的就是时效性，大家都想以最低的价格得到某样商品，所以非常想知道最新的价格，这时候就疯狂刷页面，造成服务器压力很大。另外一种做法是Server Push, <span style="color: #ff0000;"><strong>“你们都不要刷了，有消息会告诉你们的，回家等着吧。”</strong></span> 这种东东就叫做Server Push。也不是什么新的概念，用Java applet等插件N年前都能实现，但让每个人都装这么个插件显然代价太大。现在的SilverLight, Flex也能实现类似功能，但需要安装插件。<a href="http://cometdproject.dojotoolkit.org/">Dojo的Comet</a>很好地解决了这个问题。code在<a href="http://svn.cometd.com/trunk/">这里</a>。不用装插件，可以穿越防火墙，而且scalability很好，也可以做cluster。淘宝的兄弟们真应该考虑一下这个东西。对Java天然支持。很可能将是Servlet 3.0的一部分，HTML5中也有类似的概念了。Server Push的应用范围主要在Server需要主动传递信息给client的情况，如在线拍卖，聊天，股票报价等。下面是一个介绍的slide，有兴趣的朋友，仔细看看。5分钟就可以用maven弄一个玩玩。</p>
<div id="__ss_192886" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Time for Comet?" href="http://www.slideshare.net/simon/time-for-comet">Time for Comet?</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=time-for-comet-1196863649369632-2&amp;rel=0&amp;stripped_title=time-for-comet" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=time-for-comet-1196863649369632-2&amp;rel=0&amp;stripped_title=time-for-comet" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<p>（2）用一点anti-spamming技术吧，在这里就是验证码(CAPTCHA)。只有人能拍，程序不能拍。</p>
<p>（3）防一下DoS攻击，把疯狂刷页面的同学的IP暂时放入黑名单，或者弹出一个验证码页面。</p>
]]></content:encoded>
			<wfw:commentRss>http://libaocun.com/online-auction-design/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Designing Your Own Recent Posts Widget for MSDN Blog</title>
		<link>http://libaocun.com/designing-your-own-recent-posts-widget-for-msdn-blog</link>
		<comments>http://libaocun.com/designing-your-own-recent-posts-widget-for-msdn-blog#comments</comments>
		<pubDate>Wed, 29 Jul 2009 03:57:29 +0000</pubDate>
		<dc:creator>Bali</dc:creator>
				<category><![CDATA[English - 英文]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ACT]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[Product/Feature-Desig]]></category>

		<guid isPermaLink="false">http://www.balionweb.com/?p=60</guid>
		<description><![CDATA[In my MSDN blog, I need “Recent Posts”, but I don’t need archive side bar. After having played with template for a while, still no luck. Hmmm, looks like I have to DIY it. Fortunately in News sidebar, you can fill in raw html including JavaScript. Then next question is where we can retrieve post [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US"><span style="font-family: Calibri;font-size: small">In my MSDN blog, I need “Recent Posts”, but I don’t need archive side bar. After having played with template for a while, still no luck. Hmmm, looks like I have to DIY it. Fortunately in News sidebar, you can fill in raw html including <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a>. Then next question is where we can retrieve post tiles. The immediate idea is from current <a href="http://en.wikipedia.org/wiki/Document_Object_Model">DOM</a> document. Through experiments, I found this is impossible because the DOM is not fully loaded yet when the script is executed. Later, I figured it out that all posts title can be gotten from <a href="http://en.wikipedia.org/wiki/RSS_(file_format)">RSS</a>. For my blog, the address is </span><a href="http://blogs.msdn.com/bali_msft/rss.xml"><span style="font-family: Calibri;color: #800080;font-size: small">http://blogs.msdn.com/bali_msft/rss.xml</span></a><span style="font-family: Calibri;font-size: small">. One thing worth noticing is the fact that RSS in MSDN blog is not up to date &#8211; Your post will not instantly appear in the RSS. After I get all posts in RSS format, things became much easier. And then I go ahead to add more interesting things:</span></span></p>
<ul>
<li>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 21pt;text-indent: -21pt"><span lang="EN-US"><span style="font-family: Calibri;font-size: small">Posts background use two colors in turn</span></span></div>
</li>
<li>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 21pt;text-indent: -21pt"><span lang="EN-US"> </span><span lang="EN-US"><span style="font-family: Calibri;font-size: small">Show a new tag for posts less than 3 days old</span></span></div>
</li>
<li>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 21pt;text-indent: -21pt"><span lang="EN-US"><span style="font-family: Calibri;font-size: small">Show latest 8 posts only</span></span></div>
</li>
<li>
<div class="MsoListParagraphCxSpFirst" style="margin: 0cm 0cm 0pt 21pt;text-indent: -21pt"><span lang="EN-US"><span style="font-family: Calibri;font-size: small">Show posts&#8217; age</span></span></div>
</li>
</ul>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US"><span style="font-family: Calibri;font-size: small">So, the final thing will look like this:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US"><img style="width: 209px;height: 305px" src="http://lh5.ggpht.com/_A9xfBBUVmv4/SZA17PBQS2I/AAAAAAAABdk/7keHM38EZUw/s400/MyRecentPosts.JPG" alt="" width="209" height="305" /></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US"> </span></p>
<p><span lang="EN-US"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US"><span style="font-family: Calibri;font-size: small">If you find it is useful, feel free to paste below code to you blog’s news section. Note to customize “<em>Configurable params</em>” to your own needs and leave other code intact. It works well at least in my IE 8 and Firefox 3.0.6.</span></span></p>
<table class="MsoTableGrid" style="border: medium none;background: #eeece1 none repeat scroll 0% 0%;border-collapse: collapse" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="border: medium none black;padding: 0cm 5.4pt;background-color: transparent;width: 821.75pt" width="1096" valign="top"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">&lt;</span><span style="font-family: 'Courier New';color: #a31515;font-size: 10pt" lang="EN-US">div</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> </span><span style="color: red">id</span><span style="color: blue">=&#8221;RecentPosts&#8221;&gt;&lt;/</span><span style="color: #a31515">div</span><span style="color: blue">&gt;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">&lt;</span><span style="font-family: 'Courier New';color: #a31515;font-size: 10pt" lang="EN-US">Script</span><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">&gt;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: green;font-size: 10pt" lang="EN-US">// Configurable params</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">var</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> recentPostNumber = 8;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">var</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> rssUrl = </span><span style="color: #a31515">&#8220;http://blogs.msdn.com/bali_msft/rss.xml&#8221;</span><span style="color: #000000">;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">var</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> title = </span><span style="color: #a31515">&#8220;My Recent Posts&#8221;</span><span style="color: #000000">;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">var</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> newPostAgeInHour = 72;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: green;font-size: 10pt" lang="EN-US">// Cacluate age of one post. It is all about getting time span in Javascript</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: green;font-size: 10pt" lang="EN-US">// return formate: x min; x hour y min, x day y min, x days, x yeas (ago)</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: green;font-size: 10pt" lang="EN-US">// Refer to: http://www.w3schools.com/jsref/jsref_obj_date.asp</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">function</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> calculateAge(postDate)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">{</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> ret = </span><span style="color: #a31515">&#8220;fresh!&#8221;</span><span style="color: #000000">;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>CurrentDate = </span><span style="color: blue">new</span><span style="color: #000000"> Date();</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>TimeSpan = </span><span style="color: blue">new</span><span style="color: #000000"> Date(CurrentDate &#8211; postDate);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> mySpanArray = </span><span style="color: blue">new</span><span style="color: #000000"> Array();</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> mySpanArray[0] = TimeSpan.getUTCFullYear()-1970;<br />
mySpanArray[1] = TimeSpan.getUTCMonth();<br />
mySpanArray[2] = TimeSpan.getUTCDate()-1;<br />
mySpanArray[3] = TimeSpan.getUTCHours();<br />
mySpanArray[4] = TimeSpan.getUTCMinutes();<br />
</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> TimeSpanTagArray_1 = </span><span style="color: blue">new</span><span style="color: #000000"> Array(</span><span style="color: #a31515">&#8220;years&#8221;</span><span style="color: #000000">, </span><span style="color: #a31515">&#8220;months&#8221;</span><span style="color: #000000">, </span><span style="color: #a31515">&#8220;days&#8221;</span><span style="color: #000000">, </span><span style="color: #a31515">&#8220;hours&#8221;</span><span style="color: #000000">, </span><span style="color: #a31515">&#8220;minutes&#8221;</span><span style="color: #000000">);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> TimeSpanTagArray_2 = </span><span style="color: blue">new</span><span style="color: #000000"> Array(</span><span style="color: #a31515">&#8220;year&#8221;</span><span style="color: #000000">, </span><span style="color: #a31515">&#8220;month&#8221;</span><span style="color: #000000">, </span><span style="color: #a31515">&#8220;day&#8221;</span><span style="color: #000000">, </span><span style="color: #a31515">&#8220;hour&#8221;</span><span style="color: #000000">, </span><span style="color: #a31515">&#8220;minute&#8221;</span><span style="color: #000000">);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: green">// Starting from non-zero element and pick two significant values</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">for</span><span style="color: #000000">(i = 0; i &lt; mySpanArray.length; i++) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">if</span><span style="color: #000000">(mySpanArray[i] != 0) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> correctTag = (mySpanArray[i] == 1)?(TimeSpanTagArray_2[i]):(TimeSpanTagArray_1[i]);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>ret = mySpanArray[i] + </span><span style="color: #a31515">&#8221; &#8220;</span><span style="color: #000000"> + correctTag;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">if</span><span style="color: #000000">(i+1 &lt; mySpanArray.length &amp;&amp; mySpanArray[i+1] != 0) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>correctTag = (mySpanArray[i+1] == 1)?(TimeSpanTagArray_2[i+1]):(TimeSpanTagArray_1[i+1]);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>ret = ret + </span><span style="color: #a31515">&#8220;, &#8220;</span><span style="color: #000000"> + mySpanArray[i+1] + </span><span style="color: #a31515">&#8221; &#8220;</span><span style="color: #000000"> + correctTag;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">break</span><span style="color: #000000">;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">return</span><span style="color: #000000"> ret;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: green;font-size: 10pt" lang="EN-US">// Display the recent posts</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: green;font-size: 10pt" lang="EN-US">// Refer to: </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: green;font-size: 10pt" lang="EN-US">// <a href="http://www.w3schools.com/DOM/dom_node.asp">http://www.w3schools.com/DOM/dom_node.asp</a></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: green;font-size: 10pt" lang="EN-US">// <a href="http://www.w3schools.com/DOM/dom_methods.asp">http://www.w3schools.com/DOM/dom_methods.asp</a></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">function</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> displayPosts (xmldoc)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">{</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> newTag = </span><span style="color: #a31515">&#8220;&lt;SPAN style=\&#8221;COLOR: red\&#8221;&gt;(New!)&lt;/SPAN&gt;&#8221;</span><span style="color: #000000">;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> posts = xmldoc.getElementsByTagName(</span><span style="color: #a31515">&#8220;item&#8221;</span><span style="color: #000000">);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> displayText = </span><span style="color: #a31515">&#8220;&lt;h3&gt;&#8221;</span><span style="color: #000000"> + title + </span><span style="color: #a31515">&#8220;&lt;/h3&gt;&lt;UL&gt;&#8221;</span><span style="color: #000000">;<span> </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">if</span><span style="color: #000000"> (posts.length &lt; recentPostNumber) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>recentPostNumber = posts.length;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">for</span><span style="color: #000000">(</span><span style="color: blue">var</span><span style="color: #000000"> i = 0; i &lt; recentPostNumber; i++)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>{</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>PostTitle = posts[i].firstChild.firstChild.nodeValue;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>PostLink = posts[i].firstChild.nextSibling.firstChild.nodeValue;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>PostDateStr = posts[i].firstChild.nextSibling.nextSibling.firstChild.nodeValue;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>PostDate = </span><span style="color: blue">new</span><span style="color: #000000"> Date(PostDateStr);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>CurrentDate = </span><span style="color: blue">new</span><span style="color: #000000"> Date();</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: green">// Calculate age</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> _PostAge = calculateAge(PostDate);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> PostAge = </span><span style="color: #a31515">&#8220;&lt;SPAN style=\&#8221;font-size: 80%; color: black\&#8221;&gt; (&#8220;</span><span style="color: #000000"> +_PostAge + </span><span style="color: #a31515">&#8221; ago)&lt;/SPAN&gt;&#8221;</span><span style="color: #000000">;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: green">// Show a new tag for posts happening last days defined by &#8216;newPostAgeInHour&#8217;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> myNewTag = </span><span style="color: #a31515">&#8220;&#8221;</span><span style="color: #000000">;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">if</span><span style="color: #000000">((CurrentDate.getTime() &#8211; PostDate.getTime())/1000/60 &lt; newPostAgeInHour * 60) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>myNewTag = newTag;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: green">// Get background color</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> BKColor = (i%2 == 0)?(</span><span style="color: #a31515">&#8220;#B8CCE4&#8243;</span><span style="color: #000000">):(</span><span style="color: #a31515">&#8220;#DBE5F1&#8243;</span><span style="color: #000000">);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>displayText = displayText + </span><span style="color: #a31515">&#8220;&lt;LI style=\&#8221;background-color:&#8221;</span><span style="color: #000000"> + BKColor + </span><span style="color: #a31515">&#8220;\&#8221;&gt;&lt;A href=\&#8221;"</span><span style="color: #000000"> + PostLink + </span><span style="color: #a31515">&#8220;\&#8221;&gt;&#8221;</span><span style="color: #000000"> + myNewTag + PostTitle + PostAge + </span><span style="color: #a31515">&#8220;&lt;/A&gt;&lt;/LI&gt;&#8221;</span><span style="color: #000000"><span> </span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>displayText = displayText + </span><span style="color: #a31515">&#8220;&lt;/UL&gt;&#8221;</span><span style="color: #000000">;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">var</span><span style="color: #000000"> target = document.getElementById(</span><span style="color: #a31515">&#8220;RecentPosts&#8221;</span><span style="color: #000000">);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>target.innerHTML=displayText;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: green;font-size: 10pt" lang="EN-US">// Call back</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">function</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> complete(){</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span><span style="color: #000000"> </span></span><span style="color: blue">if</span><span style="color: #000000"> (req.readyState == 4) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="color: #000000"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span> </span></span><span style="font-family: 宋体;font-size: 10pt"> </span></span><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">if</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> (req.status == 200) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>displayPosts (req.responseXML);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"><span> </span>}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: green;font-size: 10pt" lang="EN-US">// Initial async call</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">function</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> getPosts()</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">{</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体;font-size: 10pt"><span style="color: #000000"> </span></span><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">if</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> (window.XMLHttpRequest) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="color: #000000"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span> </span></span><span style="font-family: 宋体;font-size: 10pt"> </span></span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">req = </span><span style="color: blue">new</span><span style="color: #000000"> XMLHttpRequest();</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体;font-size: 10pt"><span style="color: #000000"> </span></span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">}</span><span style="color: blue">else</span><span style="color: #000000"> </span><span style="color: blue">if</span><span style="color: #000000"> (window.ActiveXObject) {</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="color: #000000"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span> </span></span><span style="font-family: 宋体;font-size: 10pt"> </span></span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">req = </span><span style="color: blue">new</span><span style="color: #000000"> ActiveXObject(</span><span style="color: #a31515">&#8220;Microsoft.XMLHTTP&#8221;</span><span style="color: #000000">);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="color: #000000"><span style="font-family: 宋体;font-size: 10pt"> </span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US">}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体;font-size: 10pt"><span style="color: #000000"> </span></span><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">if</span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">(req){</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="color: #000000"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span> </span></span><span style="font-family: 宋体;font-size: 10pt"> </span></span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">req.open(</span><span style="color: #a31515">&#8220;GET&#8221;</span><span style="color: #000000">, rssUrl, </span><span style="color: blue">true</span><span style="color: #000000">);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="color: #000000"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span> </span></span><span style="font-family: 宋体;font-size: 10pt"> </span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US">req.onreadystatechange = complete;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="color: #000000"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span> </span></span><span style="font-family: 宋体;font-size: 10pt"> </span></span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">req.send(</span><span style="color: blue">null</span><span style="color: #000000">);</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="color: #000000"><span style="font-family: 宋体;font-size: 10pt"> </span><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US">}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">}</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000"> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: green;font-size: 10pt" lang="EN-US">// Entry point </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';font-size: 10pt" lang="EN-US"><span style="color: #000000">getPosts();</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">&lt;/</span><span style="font-family: 'Courier New';color: #a31515;font-size: 10pt" lang="EN-US">Script</span><span style="font-family: 'Courier New';color: blue;font-size: 10pt" lang="EN-US">&gt;</span></p>
<p></span></td>
</tr>
</tbody>
</table>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US"><span style="font-family: Calibri;font-size: small"> </span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://libaocun.com/designing-your-own-recent-posts-widget-for-msdn-blog/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
