﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-鹰翔雪宇</title><link>http://www.cnblogs.com/shinyzhu/</link><description>IN SHARING WE IMPROVE 【齐分享，共进步】</description><language>zh-cn</language><lastBuildDate>Sun, 23 Nov 2008 15:10:38 GMT</lastBuildDate><pubDate>Sun, 23 Nov 2008 15:10:38 GMT</pubDate><ttl>60</ttl><item><title>C# 4.0中的协变和逆变（一）</title><link>http://www.cnblogs.com/shinyzhu/archive/2008/11/14/covariance-and-contravariance-in-csharp.html</link><dc:creator>Shiny Zhu</dc:creator><author>Shiny Zhu</author><pubDate>Fri, 14 Nov 2008 09:00:00 GMT</pubDate><guid>http://www.cnblogs.com/shinyzhu/archive/2008/11/14/covariance-and-contravariance-in-csharp.html</guid><wfw:comment>http://www.cnblogs.com/shinyzhu/comments/1333627.html</wfw:comment><comments>http://www.cnblogs.com/shinyzhu/archive/2008/11/14/covariance-and-contravariance-in-csharp.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/shinyzhu/comments/commentRss/1333627.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/shinyzhu/services/trackbacks/1333627.html</trackback:ping><description><![CDATA[<p>在刚刚落下帷幕的PDC上，我们得到了很多振奋的消息，包括C# 4.0及VS2010等等。<span style="font-family: comic sans ms,sans-serif;"><strong><em>Anders Liu</em></strong></span> 已经 <a href="/andersliu/archive/2008/11/03/new-features-in-csharp-4-ctp.html">将C# 4.0 新特性白皮书翻译了</a> 出来，那里面有非常详细的介绍。</p>
<p>C#的发展是很快很快的，C#的设计目的是成为一个有趣有用通用的程序语言，并因此让使用该语言的用户能获得更大的成功。所以，C#除了面向对象的基本特征外，现在引入了相当多的其他特征喔！</p>
<p>动态，动态。<strong>动态</strong>是目前超级流行的词汇。C#也要动起来了喔！</p>
<blockquote>
<p>C# 4.0的主要主题是动态编程。对象的意义变得越来越&ldquo;动态&rdquo;，它们的结构和行为无法通过静态类型来捕获，或者至少编译器在编译程序时无法得知对象的结构和行为。</p>
</blockquote>
<p>相关的特性有<strong>动态查找</strong>、<strong>命名参数</strong>、<strong>可选参数</strong>等。</p>
<p>还有，<strong>简化了与COM的互操作</strong>。</p>
<p>还有，<strong>协变</strong>和<strong>逆变</strong> <strong>Covariance and contravariance</strong> 。</p>
<p>这些都在白皮书里可以找到介绍。我在这里整理一下协变和逆变的一些参考资料，本来数学就不好，怕过一两天就又忘了，俗话说，好记性不如烂笔头嘛。</p>
<p>首先看看问题的引入。<a href="http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)"></a></p>
<p>这里有两个类型，T 和 U，在这两个类型间，以下伪表达式肯定有一个是&ldquo;真&rdquo;：</p>
<ul>
<li>T &gt; U</li>
<li>T &lt; U</li>
<li>T = U</li>
<li>T 和 U 没有任何关系</li>
</ul>
<p>例如有这些类型：<em>动物</em> <em>Animal</em>、<em>哺乳动物</em> <em>Mammal</em>、<em>爬行动物</em> <em>Reptile</em>、<em>长颈鹿</em> <em>Giraffe</em>、<em>老虎</em> <em>Tiger</em>、<em>蛇 Snake</em>和<em>海龟</em> <em>Turtle</em>，它们之间的继承关系<span style="text-decoration: line-through;">（<em>应该来个UML就一目了然了</em>）</span>有：<em>哺乳动物</em>是<em>动物</em>的一个子类，<em>长颈鹿</em>是<em>哺乳动物</em>的一个子类等等&hellip;&hellip;</p>
<p>看图：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200811/2008111416540767.jpg" alt="" /></p>
<p>那么就有：<em>哺乳动物</em>比<em>长颈鹿</em>大，比<em>动物</em>小，等于<em>哺乳动物</em>，和<em>爬行动物</em>却没有关系（<em>这里的比较都不是对象之间的比较，要注意哦。</em>）</p>
<p>呃，如果这个难于理解，我们再看看程序中的情况。假设有一个变量，这个变量在C#中有一个容身之处（<em>不是说的存储区的物理地址</em>），每一个变量在C#中的容身之处都对应一个类型（<em>强类型语言就是这样的</em>），<span style="color: #800000;">那么，在运行时你可以在一个特定的容身之处存储对应类型的实例或者小于这个类型的类型的实例</span>（<em>拗口-,-</em>）。所以呢，<em>哺乳动物</em>对象对应的容身之处可以存储一个<em>长颈鹿</em>，但是不能存储一个<em>海龟</em>。（<em>考虑面先接口编程和抽象基类的思想</em>）</p>
<p>容身之处这个例子说明的是&ldquo;交换原则&rdquo;，跟面向接口编程和抽象基类的机制很类似，也就是在很多地方，我们用子类代替基类（或接口或抽象类）来使用。</p>
<p>现在来定义什么是协变：<span style="color: #800000;">一个操作如果在 T 和 U 两个类型上执行后返回的 T' 和 U' 之间的关系跟原来的 T 和 U 之间的关系（<em>上面那4个伪表达式</em>）相同，则这个操作就叫做协变。英文名：Covariance</span>。</p>
<p>再看看什么是逆变：<span style="color: #800000;">一个操作如果将 T 和 U 的大小关系改变了（<em>大变小，小变大 - 逆转</em>），但是不改变 T 和 U 之间的相等或不相干这两个关系，则这个操作就叫做逆变。英文名：Contravariance</span>。</p>
<p>呃呃。变来变去，头已经晕了。</p>
<p>（还没完，等我喔！）</p><img src ="http://www.cnblogs.com/shinyzhu/aggbug/1333627.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43630/" target="_blank">[新闻]Silverlight 2 SDK中文版发布</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>编码、编码，还是编码</title><link>http://www.cnblogs.com/shinyzhu/archive/2008/11/06/encoding-encoding.html</link><dc:creator>Shiny Zhu</dc:creator><author>Shiny Zhu</author><pubDate>Thu, 06 Nov 2008 07:08:00 GMT</pubDate><guid>http://www.cnblogs.com/shinyzhu/archive/2008/11/06/encoding-encoding.html</guid><wfw:comment>http://www.cnblogs.com/shinyzhu/comments/1328129.html</wfw:comment><comments>http://www.cnblogs.com/shinyzhu/archive/2008/11/06/encoding-encoding.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/shinyzhu/comments/commentRss/1328129.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/shinyzhu/services/trackbacks/1328129.html</trackback:ping><description><![CDATA[<p>喔，似乎编码问题很容易被解决，也很容易造成误解，尤其是在不同系统交互的时候，特别是当传递的数据中包含中文的时候。</p>
<p>在中文的编码上有太多的差异，有的系统喜欢用GB2312，有的系统却采用UTF-8。</p>
<p>还有在网页上，Content-Type也有多种写法，有的爱好GB2312，其他的喜欢UTF-8等等。</p>
<p>很多系统中会用到MD5哈希进行数据校验，尤其是提供接口的时候，当这个时候编码不相同的话，就会出现很多头疼的问题，如果找不到原因，你或许还会埋怨这谁发明的C#语言，竟然MD5算法的结果不一样？！</p>
<p>当然，如果在接口间传递的数据不是非英文的话，一般是不会出现的，但是成产环境中，非英文的数据是很多的。</p>
<p>因此我们需要找到真正的解决办法来融合不同的系统。这里举一个小例子。</p>
<p>有一个第三方接口以HTTP方式提供，程序是用JAVA写的，提供的数据是GB2312编码的xml文件，现在你要用.NET来封装这个接口的实现，其中有些方法需要中文数据和MD5哈希校验，而你的系统是UTF-8编码。</p>
<p>找到问题在于编码的不同，就已经解决了90%，剩下的就只有需要一个算法了。</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><img id="Code_Closed_Image_151017" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_151017').style.display='none'; document.getElementById('Code_Open_Image_151017').style.display='inline'; document.getElementById('Code_Open_Text_151017').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" alt="" width="11" height="16" align="top" /><img id="Code_Open_Image_151017" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_151017').style.display='none'; getElementById('Code_Closed_Image_151017').style.display='inline'; getElementById('Code_Closed_Text_151017').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" width="11" height="16" align="top" /><span id="Code_Closed_Text_151017" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_151017"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;summary&gt;</span><span style="color: #008000;"><br /></span><span style="color: #808080;">///</span><span style="color: #008000;"> 指定字节流编码计算MD5哈希值，可解决不同系统中文编码差异的问题。<br /></span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;/summary&gt;</span><span style="color: #008000;"><br /></span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;param name="source"&gt;</span><span style="color: #008000;">要进行哈希的字符串</span><span style="color: #808080;">&lt;/param&gt;</span><span style="color: #008000;"><br /></span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;param name="bytesEncoding"&gt;</span><span style="color: #008000;">获取字符串字节流的编码，如果是中文，不同系统之间请使用相同编码</span><span style="color: #808080;">&lt;/param&gt;</span><span style="color: #008000;"><br /></span><span style="color: #808080;">///</span><span style="color: #008000;"> </span><span style="color: #808080;">&lt;returns&gt;</span><span style="color: #008000;">32位大写MD5哈希值</span><span style="color: #808080;">&lt;/returns&gt;</span><span style="color: #808080;"><br /></span><span style="color: #0000FF;">public</span><span style="color: #000000;"> </span><span style="color: #0000FF;">static</span><span style="color: #000000;"> </span><span style="color: #0000FF;">string</span><span style="color: #000000;"> ComputeMD5(</span><span style="color: #0000FF;">string</span><span style="color: #000000;"> source, Encoding bytesEncoding)<br />{<br />    </span><span style="color: #0000FF;">byte</span><span style="color: #000000;">[] sourceBytes </span><span style="color: #000000;">=</span><span style="color: #000000;"> bytesEncoding.GetBytes(source);<br /><br />    MD5CryptoServiceProvider md5 </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000FF;">new</span><span style="color: #000000;"> MD5CryptoServiceProvider();<br /><br />    </span><span style="color: #0000FF;">byte</span><span style="color: #000000;">[] hashedBytes </span><span style="color: #000000;">=</span><span style="color: #000000;"> md5.ComputeHash(sourceBytes);<br /><br />    StringBuilder buffer </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000FF;">new</span><span style="color: #000000;"> StringBuilder(hashedBytes.Length);<br />    </span><span style="color: #0000FF;">foreach</span><span style="color: #000000;"> (</span><span style="color: #0000FF;">byte</span><span style="color: #000000;"> item </span><span style="color: #0000FF;">in</span><span style="color: #000000;"> hashedBytes)<br />    {<br />        buffer.AppendFormat(</span><span style="color: #800000;">"</span><span style="color: #800000;">{0:X2}</span><span style="color: #800000;">"</span><span style="color: #000000;">, item);<br />    }<br /><br />    </span><span style="color: #0000FF;">return</span><span style="color: #000000;"> buffer.ToString();<br />}<br /></span></span></pre>
</div>
<p>&nbsp;</p>
<p>编码问题其实真的很头疼。</p><img src ="http://www.cnblogs.com/shinyzhu/aggbug/1328129.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>灵异事件薄：登录及认证问题</title><link>http://www.cnblogs.com/shinyzhu/archive/2008/11/06/spectral-auth.html</link><dc:creator>Shiny Zhu</dc:creator><author>Shiny Zhu</author><pubDate>Thu, 06 Nov 2008 06:43:00 GMT</pubDate><guid>http://www.cnblogs.com/shinyzhu/archive/2008/11/06/spectral-auth.html</guid><wfw:comment>http://www.cnblogs.com/shinyzhu/comments/1328106.html</wfw:comment><comments>http://www.cnblogs.com/shinyzhu/archive/2008/11/06/spectral-auth.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/shinyzhu/comments/commentRss/1328106.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/shinyzhu/services/trackbacks/1328106.html</trackback:ping><description><![CDATA[<p><strong>现象描述</strong>：</p>
<p>网站A和网站B都是ASP.NET的应用程序，采用ASP.NET FormsAuthentication，网站B有受保护的文件夹，通过web.config配置了权限。网站C是纯ASP网站，受保护的页面是通过Session来维持用户登录状态。</p>
<p>存在这么一种现象：</p>
<p>网站A的页面1上有一个到网站B的受保护页面2的一个目标是新窗口(target="_blank")的链接a，点击这个链接会在新窗口打开页面2，之后转向到网站B的登录页面，正常登录之后关闭(按浏览器关闭按钮或Alt+F4)网站B的页面2；</p>
<p>再次从网站A的页面1上点击链接a，会再次在新窗口打开网站B的受保护页面2。此时并没有转向到网站B的登录页面，而且你会发现已经是先前的登录状态了。</p>
<p>同样，网站A的页面1上还有另外一个链接a2，点击会在新窗口打开网站C的受保护资源，第一次会要求登录，登录之后关闭网站C的页面，然后再点击链接a2，打开了网站C的受保护页面，并且也是已经登录的状态。</p>
<p><strong>现象回显：</strong></p>
<p>在网上搜索了许多关键字，其中发现FormsAuthentication存在许多问题，比如地址里的&ldquo;/&rdquo;替换成&ldquo;\&rdquo;或&ldquo;%5C&rdquo;就能蒙混过关而绕过认证等。但以上描述的现象之前还没有遇到过，我这里创建了两个web app，有兴趣的朋友可以实际运行下看看效果，我还把Trace打开了，这样可以看到认证Cookies的状态。<a href="http://files.cnblogs.com/shinyzhu/Spectral.zip">请从这里下载它：http://files.cnblogs.com/shinyzhu/Spectral.zip</a></p>
<p>项目里有两个Web Application：web1和web2，web1上有个到web2的back文件夹的链接，按照上面的流程来运行，然后请告诉我你是否也遇到了这个现象。更进一步来说，你也可以把这两个web app部署到不同的服务器来测试。在这里我非常非常急切地希望听到大家的意见，或者有朋友知道这个原因，也请立即告诉我吧。非常非常地感谢！</p><img src ="http://www.cnblogs.com/shinyzhu/aggbug/1328106.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>大师们的一些CSS期望</title><link>http://www.cnblogs.com/shinyzhu/archive/2008/10/13/css-wishlist.html</link><dc:creator>Shiny Zhu</dc:creator><author>Shiny Zhu</author><pubDate>Mon, 13 Oct 2008 14:14:00 GMT</pubDate><guid>http://www.cnblogs.com/shinyzhu/archive/2008/10/13/css-wishlist.html</guid><wfw:comment>http://www.cnblogs.com/shinyzhu/comments/1310376.html</wfw:comment><comments>http://www.cnblogs.com/shinyzhu/archive/2008/10/13/css-wishlist.html#Feedback</comments><slash:comments>25</slash:comments><wfw:commentRss>http://www.cnblogs.com/shinyzhu/comments/commentRss/1310376.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/shinyzhu/services/trackbacks/1310376.html</trackback:ping><description><![CDATA[<p>著名的 Web 设计网站 <a href="http://css-tricks.com/is-there-anything-you-wish-css-could-do-15-designerdevelopers-sound-off/">CSS-tricks.com  最近组织了一次调查</a>，请15名顶尖的 Web 设计师对 CSS 提出自己的期望，15名设计师包括 Jon Hicks,&nbsp; Wolfgang  Bartelme, <a href="http://haveamint.com/">Mint</a>&nbsp;的 Shaun Inman 以及 <a href="http://www.stuffandnonsense.co.uk/">Stuff and Nonsense</a>&nbsp;的 Andy Clarke。<br /><br />
		调查结果显示，最被期待的 CSS 功能是 CSS 圆角，其它期待的功能包括跨浏览器渐变与阴影，类似 Photoshop 的层融合效果，更一致的声明简化语法以及对条件判断的本地支持。这些期待中一部分已经包含在未来的 CSS-3 中，但更多的仍然只是一些梦想。<br />
<br />
<a href="http://www.webmonkey.com">WebMonkey</a> 的编辑们将这个 Wishlist 发表在他们的网站并让 WebMonkey 的读者投票选出最热门的项目，以下是按投票多少排列的 CSS Wishlist 部分列表（只选取最热门的项目）。<br />
<br />
<strong>CSS 圆角 </strong><br />
by <a href="http://www.webmonkey.com/">Webmonkey</a><br />
标准的，直接基于 CSS 的圆角是很多人的期待，这样，就不必再费尽心机只为了显示一个圆角。</p>
<p><br />
<strong>垂直居中</strong><br />
by <a href="http://electrotone.com/">michael lascarides</a><br />
针对 block 对象的更容易的垂直居中设置。（div + css 让人既爱且恨的一个重要原因就是垂直居中，让一个对象垂直居中显示在 block 容器中，且兼容所有主流浏览器简直就是一个噩梦 - 译者）</p>
<p>&nbsp;</p>
<p><br />
<strong>兼容所有主流浏览器的 CSS 2.1 与 CSS 3 </strong><br />
by <a href="http://erik.simmlers.com/">Erik</a><br />
能兼容所有主流浏览器的 CSS 2.1 与 CSS 3 是 Erik 的梦想，但其中的某些功能在某些浏览器中总是磕磕绊绊。</p>
<p><br />
<strong>更好的嵌入字体 </strong><br />
by <a href="http://www.webmonkey.com/">Webmonkey</a><br />
不要 sFIR, 不要图片，要真正的字体。</p>
<p><br />
<strong>CSS 变量 </strong><br />
by <a href="http://css-tricks.com/is-there-anything-you-wish-css-could-do-15-designerdevelopers-sound-off/">Jeffrey Jordan Way, via css-tricks.com</a><br />
能定义诸如色彩值一类的变量</p>
<p><br />
<strong>更好地支持 100% height </strong><br />
by <a href="http://reddit.wired.com/csswishlist/">JLR</a><br />
设置了 100% height 的容器的顶部和底部真正附着在页首和页尾，页面中间部分匹配内容并准确显示滚动条。搜索&ldquo;100% height css&rdquo;能找到各种解决方法，但事情原本不该这么复杂。</p>
<p><br />
<strong>可重复使用变量 </strong><br />
by <a href="http://devneal.blogspot.com/">Neal Lindsay</a><br />
比如:<br />
<span style="font-family: courier new,courier;">@var mycolor = #0080FF <br />
h1 { color: mycolor; } <br />
div.containbox { border: 1px mycolor; }</span></p>
<p><br />
<strong>浏览器一致性与定义顺序 </strong><br />
by <a href="http://reddit.wired.com/csswishlist/">JML</a><br />
浏览器一致性非常重要。某些 CSS 在某些浏览器被忽略或部分忽略使 CSS 只有借助 JavaScript 才能正常使用。同时，对里面的 CSS 定义应该可以覆盖全局定义。</p>
<p><br />
<strong>一句话复原 </strong><br />
by <a href="http://www.lofiart.com/">Chris Pitzer</a><br />
很多设计者要写40多行代码才能清除浏览器默认 CSS 定义，应当有一个简单的声明一次性将所有 CSS 复原，比如：<br />
<span style="font-family: courier new,courier;">body { clear-default-styles:true; }</span></p>
<p><br />
<strong>图形旋转与反转 </strong><br />
by <a href="http://blogs.oc.edu/ee/?/sbell">Stephen Bell</a><br />
在设置图形圆角效果时候，我们需要同一个圆角图片的4个旋转版本来实现。应该有一个简单的声明实现旋转，如：<br />
<span style="font-family: courier new,courier;">img .horiz { rotate:90; }</span></p>
<p><br />
<strong>成组的 CSS 简化定义 </strong><br />
by <a href="http://css-tricks.com/is-there-anything-you-wish-css-could-do-15-designerdevelopers-sound-off/">Volkan G&ouml;rg&uuml;l&uuml;, via css-tricks.com</a><br />
如:<br />
<span style="font-family: courier new,courier;">#foo h1, #foo h2, #foo h3</span><br />
改为:<br />
<span style="font-family: courier new,courier;">#foo [h1, h2, h3]</span></p>
<p><br />
<strong>渐变 </strong><br />
by <a href="http://reddit.wired.com/csswishlist/">Anonymous</a><br />
以避免一条线一条线地实现渐变。</p>
<p><br />
<strong>定位计算 </strong><br />
by <a href="http://reddit.wired.com/csswishlist/">Anonymous</a><br />
不使用 JavaScript 而是直接在 CSS 中实现：<br />
<span style="font-family: courier new,courier;">left: ID1.Left + ID1.Width + 2px;</span></p>
<p><br />
<strong>网格布局 </strong><br />
by <a href="http://reddit.wired.com/csswishlist/kurtkrumme.com">Kurt Krumme</a><br />
table 布局曾经流行一时，因为 table 布局更接近网格布局的原理。CSS 的设置者们为什么要推出一个不伦不类的 box 模型？<br />
div + css 在 Web 设计界已经红得发紫，尽管 div 有众多缺陷（比如垂直居中，比如在 IE 中的众多
BUG），如果哪个设计师胆敢使用 table，被人查出源代码，是会被耻笑的。然而译者从不畏惧使用 table +
css，且愿意告戒那些盲目追随 div 并被折磨得半死的人，至少在目前，table 是被各种浏览器支持得最完美的容器对象。</p>
<p><br />
<strong>使用 image 作 border </strong><br />
by <a href="http://reddit.wired.com/csswishlist/">Anonymous</a><br />
应当可以用 image 作为 border，如：<br />
<span style="font-family: courier new,courier;">border-right: url('image.png')</span></p>
<p><br />
<strong>支持多个背景图</strong><br />
by <a href="http://reddit.wired.com/csswishlist/">Brad</a><br />
这个 CSS 功能非常有用，有了这个功能，完美实现 CSS 圆角就变得十分简单了。</p>
<p><br />
<strong>所有浏览器支持统一标准 </strong><br />
by <a href="http://reddit.wired.com/csswishlist/">Anonymous</a><br />
这里特指 IE&lt;8 的版本。CSS 有成型的标准，但有些浏览器一定要搞一些自己的东西出来。</p>
<p>&nbsp;</p>
<p>以上来自cb。大师们的期望果然很独特，相当多的期望也非常有用，如果实现了，Web开发就是多么轻松愉快的一件事情啊！比如变量、清除定义和定位计算，是我认为非常有用的。目前IE下可以用一些IE特有的表达式，但用起来太复杂。</p>
<p>还是期望CSS3更好更强大。也期望各个浏览器尽快支持CSS3。</p><img src ="http://www.cnblogs.com/shinyzhu/aggbug/1310376.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43628/" target="_blank">[新闻]微软：不裁员也不削减研发开支</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>去习惯还是去改变？</title><link>http://www.cnblogs.com/shinyzhu/archive/2008/10/11/thinking-about-changes.html</link><dc:creator>Shiny Zhu</dc:creator><author>Shiny Zhu</author><pubDate>Sat, 11 Oct 2008 03:27:00 GMT</pubDate><guid>http://www.cnblogs.com/shinyzhu/archive/2008/10/11/thinking-about-changes.html</guid><wfw:comment>http://www.cnblogs.com/shinyzhu/comments/1308565.html</wfw:comment><comments>http://www.cnblogs.com/shinyzhu/archive/2008/10/11/thinking-about-changes.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/shinyzhu/comments/commentRss/1308565.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/shinyzhu/services/trackbacks/1308565.html</trackback:ping><description><![CDATA[<p>在新公司上班有一个月时间了，经过这一个月，感想也挺多的，总的来说就是公司结构的复杂导致各方面都变得复杂。</p>
<p>技术是为业务提供支持的，但我觉得技术在一个IT公司的重要程度不亚于其它任何组成部分，有了稳定扎实的技术保障，展开业务就会得心应手了。而现在我感受
到的是在技术层面和其它的一些痛苦&hellip;</p>
<p>新公司新的环境，每个公司有自己的企业文化。当你进入新公司的时候，应该能听到&ldquo;习惯了就好&rdquo;之类的话。那你是要去习惯这些痛苦还是努力去改变些什么呢？
习惯之后或许痛苦也就消失了，但改变之后能更好的话，你要去尝试吗？</p>
<p>我想听听大家的意见。</p><img src ="http://www.cnblogs.com/shinyzhu/aggbug/1308565.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43625/" target="_blank">[新闻]2008年11月22日科技博客精选</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>现在就开始体验Live Mesh吧！</title><link>http://www.cnblogs.com/shinyzhu/archive/2008/10/06/live-mesh-first-view.html</link><dc:creator>Shiny Zhu</dc:creator><author>Shiny Zhu</author><pubDate>Mon, 06 Oct 2008 15:16:00 GMT</pubDate><guid>http://www.cnblogs.com/shinyzhu/archive/2008/10/06/live-mesh-first-view.html</guid><wfw:comment>http://www.cnblogs.com/shinyzhu/comments/1305106.html</wfw:comment><comments>http://www.cnblogs.com/shinyzhu/archive/2008/10/06/live-mesh-first-view.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/shinyzhu/comments/commentRss/1305106.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/shinyzhu/services/trackbacks/1305106.html</trackback:ping><description><![CDATA[<p>传说<a href="https://www.mesh.com/">Live Mesh</a>是微软的云计算平台，昨天无意中用Live ID成功登录上了Mesh.com，发现部分功能已经可以使用了，比如文件同步。后来在<a href="http://social.microsoft.com/Forums/en-US/LiveMesh/threads/">论坛</a>获悉，目前Live Mesh已经扩大试用范围，大家可以尝试登录一下。另外，我先前在Microsoft Connect加入了<a href="https://connect.microsoft.com/InvitationUse.aspx?ProgramID=2181&amp;SiteID=425&amp;InvitationID=DEV-VP8Q-K3KG">Live Mesh for Developer</a>的等待队列，一直处于挂起状态，看来还得等上一段时间才能开发Mesh应用。</p>
<p><strong>Here, There, Everywhere</strong></p>
<p>Live Mesh的目标是作为一个中心平台，管理您的设备和文件等等。目前登录进去后不用在PC上安装程序就可以访问一个叫Live Desktop的管理中心：</p>
<p>看图（点击放大）：</p>
<p><a href="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100622433929.jpg"><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100622433929.jpg" alt="" width="636" height="505" /></a></p>
<p>可以在这里管理文件夹和文件，打开一个文件夹（点击放大）：</p>
<p><a href="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100622494918.jpg"><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100622494918.jpg" alt="" width="630" height="351" /></a></p>
<p>文件夹右边有一个显示最近消息的小窗口，图片文件夹还可以浏览，采用Silverlight实现的图片幻灯片效果噢！</p>
<p>从手机上也<a href="http://m.mesh.com/">可以访问</a>(<a href="http://m.mesh.com/">http://m.mesh.com/</a>)，可以管理文件夹，上传图片。手机上传的图片都在Mobile Pictures文件夹里：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100622563574.jpg" alt="" /> <img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100622565971.jpg" alt="" /></p>
<p>上传方式我很喜欢，非常直接（不用发邮件），目前Flickr和校内也有这样的上传方式：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100622571438.jpg" alt="" /></p>
<p>这样我就可以随时上传照片了，并和家里的电脑保持同步，让家里的人同时看到我拍的照片，哈哈！~~~</p>
<p>慢着，家里的电脑怎么同步呢？</p>
<p>这，就需要安装一个小软件啦，在Devices的圈圈里选择Add Device，点击Install，会下载一个目前只支持XP或Vista的小软件，叫LiveMesh.exe。</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100623005737.jpg" alt="" width="644" height="494" /></p>
<p>这个小软件体积不大，却很挑剔：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100623025495.jpg" alt="" /></p>
<p>在控制面板将区域选项设为&ldquo;英语（美国）&rdquo;之后就可以正常安装了，安装的时候是在右下角提示的：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100623040767.jpg" alt="" /></p>
<p>大概下载一些文件，自动安装好之后，就出现登录框：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100623051437.jpg" alt="" /></p>
<p>然后会让你给你这个设备命名，这个时候再去看Mesh.com，会发现设备已经更新了。</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100623092066.jpg" alt="" /></p>
<p>这样在&ldquo;我的电脑&rdquo;里就会发现Live Mesh Folders，还有桌面上会有你在Live Desktop里的文件夹，这就是跟其他设备共享同步的地方了！</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100623104628.jpg" alt="" /></p>
<p>打开更新看看：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100623113978.jpg" alt="" /></p>
<p>文件夹右边也有一个显示最近消息的窗口，不过还有问题-,-</p>
<p>不过，不过我可以向文件夹里添加文件同步了：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100623132296.jpg" alt="" /></p>
<p>添加进去的文件会同步更新到Live Desktop里，这个时候用手机访问的话也会看到更新。以后会支持更多的设备，比如你有个MP3，也可以看到Update喔！</p>
<p>目前吧，还需要继续等待：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200810/2008100623150417.jpg" alt="" /></p><img src ="http://www.cnblogs.com/shinyzhu/aggbug/1305106.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43624/" target="_blank">[新闻]诺基亚将支持Lotus Notes 和黑莓争夺市场</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>jQuery成为微软.NET开发工具的一部分了</title><link>http://www.cnblogs.com/shinyzhu/archive/2008/09/29/jquery-now-part-of-aspnet.html</link><dc:creator>Shiny Zhu</dc:creator><author>Shiny Zhu</author><pubDate>Mon, 29 Sep 2008 07:41:00 GMT</pubDate><guid>http://www.cnblogs.com/shinyzhu/archive/2008/09/29/jquery-now-part-of-aspnet.html</guid><wfw:comment>http://www.cnblogs.com/shinyzhu/comments/1302012.html</wfw:comment><comments>http://www.cnblogs.com/shinyzhu/archive/2008/09/29/jquery-now-part-of-aspnet.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/shinyzhu/comments/commentRss/1302012.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/shinyzhu/services/trackbacks/1302012.html</trackback:ping><description><![CDATA[<p>国庆大假刚刚开始，这么<a href="http://jquery.com/blog/2008/09/28/jquery-microsoft-nokia/">振奋人心</a>的<a href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx">一条消息</a>发布了！我相信很多用.NET技术的朋友都接触过或者实际用到了<a href="http://jquery.com/">jQuery</a>这个轻量级javascript框架，它最大的特点就是支持类似CSS选择器的语法，比如$("#top")就是选择页面DOM中id等于top的元素，$("p")就是选择所有段落，相当利索简便的语法，用jQuery写出来的代码很一目了然。</p>
<p>现在，<a href="http://weblogs.asp.net/bleroy/archive/2008/09/28/jquery-now-officially-part-of-the-net-developer-s-toolbox.aspx">jQuery已经成为ASP.NET的一部分</a>了，很快就会通过<a href="http://asp.net/mvc">ASP.NET MVC</a>发布微软官方版本，还会发布一个具有Visual Studio智能感知的版本，非常值得期待啊。</p>
<p>看看<a href="http://weblogs.asp.net/scottgu">Scott</a>的图，jQuery的智能感知：</p>
<p><img src="http://www.scottgu.com/blogposts/jquery/step3.png" alt="jquery" width="706" height="118" /></p>
<p><strong><img style="background:#000" src="http://static.jquery.com/files/rocker/images/logo_jquery_215x53.gif" alt="jQuery" width="215" height="53" /><br /></strong></p>
<p><strong>JQuery资源推荐</strong></p>
<ul>
<li><strong><a href="http://www.jquery.com/">jQuery</a> - <a href="http://docs.jquery.com/Downloading_jQuery">下载</a></strong> 
<ul>
<li><strong><a href="http://plugins.jquery.com/">插件</a></strong> 
</li>
<li><strong><a href="http://ui.jquery.com/">jQuery UI</a></strong> 
</li>
<li><strong><a href="http://docs.jquery.com/About">jQuery团队</a></strong> 
</li>
<li><strong><a href="http://ejohn.org/blog/">John Resig's Blog</a></strong></li>
</ul>
</li>
<li><strong><a href="http://jquery.com/blog/">jQuery博客</a></strong> 
</li>
<li><strong><a href="http://docs.jquery.com/Main_Page">jQuery文档</a></strong></li>
</ul><img src ="http://www.cnblogs.com/shinyzhu/aggbug/1302012.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43623/" target="_blank">[新闻]Mozilla公布去年收入报告</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>“视图状态损坏”的困扰</title><link>http://www.cnblogs.com/shinyzhu/archive/2008/09/28/viewstate-invalid-troubleshooting.html</link><dc:creator>Shiny Zhu</dc:creator><author>Shiny Zhu</author><pubDate>Sun, 28 Sep 2008 06:35:00 GMT</pubDate><guid>http://www.cnblogs.com/shinyzhu/archive/2008/09/28/viewstate-invalid-troubleshooting.html</guid><wfw:comment>http://www.cnblogs.com/shinyzhu/comments/1301469.html</wfw:comment><comments>http://www.cnblogs.com/shinyzhu/archive/2008/09/28/viewstate-invalid-troubleshooting.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/shinyzhu/comments/commentRss/1301469.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/shinyzhu/services/trackbacks/1301469.html</trackback:ping><description><![CDATA[<p>如果你在调试或访问ASP.NET页面的时候遇到&ldquo;此页的状态信息无效，可能已损坏&rdquo;的异常，我相信你会束手无策的。因为网上能搜到的解决方案和微软的<a href="http://support.microsoft.com/kb/831150">KB831150</a>，都只会让你更迷惑。当然，我这里也不是给出解决方法，而是记录下我是如何遇到这个问题和如何避开这个问题的，希望对你处于类似场景中时能有所帮助。</p>
<p><strong>一、问题回显</strong></p>
<p>出问题的页面是一个注册页面。里面用到很多验证控件、输入框、下拉框，其中包含多个自定义验证控件，客户端的验证方法同时用到了jQuery。</p>
<p>出问题的症状是：当用户填写了用户名，点击了&ldquo;检查用户名是否可用&rdquo;，结果显示在一个id为accountHolder的span里，然后填完其他项，点击注册按钮，就出现错误页面了。</p>
<p>黄色经典错误页面如下：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200809/2008092813522211.jpg" alt="" /></p>
<p>一句&ldquo;没有相关源行&rdquo;将我们狠狠推开，无从调试。</p>
<p>通过各种途径（包括删掉控件、删掉验证、禁用脚本等等方法，花了一天多时间哦。<em>结果在这里一句话就叙述完了，太不甘了</em>）最后将视线定位在了一个用ajax实现的校验重复用户名的javascript方法上。这个javascript方法代码如下：</p>
<div class="cnblogs_code">
<pre><img id="Code_Closed_Image_140058" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_140058').style.display='none'; document.getElementById('Code_Open_Image_140058').style.display='inline'; document.getElementById('Code_Open_Text_140058').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" alt="" width="11" height="16" align="top" /><img id="Code_Open_Image_140058" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_140058').style.display='none'; getElementById('Code_Closed_Image_140058').style.display='inline'; getElementById('Code_Closed_Text_140058').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" width="11" height="16" align="top" /><span id="Code_Closed_Text_140058" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_140058"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF;">function</span><span style="color: #000000;"> checkAccountExists(){<br />    </span><span style="color: #0000FF;">var</span><span style="color: #000000;"> name </span><span style="color: #000000;">=</span><span style="color: #000000;"> $(</span><span style="color: #000000;">"</span><span style="color: #000000;">#nameBox</span><span style="color: #000000;">"</span><span style="color: #000000;">).val();<br />    <br />    </span><span style="color: #0000FF;">if</span><span style="color: #000000;"> (validateName(name)){<br />        $.ajax({<br />            type:</span><span style="color: #000000;">"</span><span style="color: #000000;">POST</span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />            url:</span><span style="color: #000000;">"</span><span style="text-decoration: underline;"><span style="color: #000000;">handlers/account</span></span></span><span id="Code_Open_Text_140058"><span style="text-decoration: underline;"><span style="color: #000000;">.ashx</span></span><span style="color: #000000;">"</span><span style="color: #000000;">,<br />            cache:</span><span style="color: #0000FF;">false</span><span style="color: #000000;">,<br />            data:</span><span style="color: #000000;">"</span><span style="color: #000000;">name=</span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">+</span><span style="color: #000000;"> name,<br />            success:</span><span style="color: #0000FF;">function</span><span style="color: #000000;">(data){<br />                $(</span><span style="color: #000000;">"</span><span style="color: #000000;">#accountHolder</span><span style="color: #000000;">"</span><span style="color: #000000;">).html(data);<br />            },<br />            error:</span><span style="color: #0000FF;">function</span><span style="color: #000000;">(data){<br />                $(</span><span style="color: #000000;">"</span><span style="color: #000000;">#accountHolder</span><span style="color: #000000;">"</span><span style="color: #000000;">).html(</span><span style="color: #000000;">"</span><span style="color: #000000;">系统异常，未能核对帐户名。</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />            }<br />        });<br />    }</span><span style="color: #0000FF;">else</span><span style="color: #000000;">{<br />      $(</span><span style="color: #000000;">"</span><span style="color: #000000;">#accountHolder</span><span style="color: #000000;">"</span><span style="color: #000000;">).html(</span><span style="color: #000000;">""</span><span style="color: #000000;">);<br />    }<br />}<br /></span></span></pre>
</div>
<p>&nbsp;</p>
<p>其中validateName(name)是一个正则测试方法。</p>
<p>由于这个错误难以调试，现在就寄希望于HttpWath能给我们一些提示了。</p>
<p><strong>二、HTTP请求和响应信息</strong></p>
<p>用HttpWath可以跟踪请求，来看一个出现错误后的截图吧：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200809/2008092814095592.jpg" alt="" /></p>
<p>ajax请求的地址是CheckAccountExists.aspx，这个页面用Response.Write返回校验的结果，我以为是POST的问题，把方法改成了GET(点击看大图)：</p>
<p><a href="http://pic002.cnblogs.com/img/shinyzhu/200809/2008092814114031.jpg" target="_blank"><img src="http://pic002.cnblogs.com/img/shinyzhu/200809/2008092814114031.jpg" alt="" width="690" height="340" /></a></p>
<p>无论POST还是GET获取校验结果，都返回500，也就是都返回黄色页面。到这里我已经很着急了，无论怎么调整控件和禁用脚本，它依然出错。</p>
<p>后来把ajax的请求换了一种方式处理，换成了一个Handler（实现IHttpHandler）来处理用户名校验，居然没有出错了。可以看看监测到的请求响应流：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200809/2008092814152856.jpg" alt="" /></p>
<p>上面是POST获取，下面是GET方式(点击看大图)：</p>
<p><a href="http://pic002.cnblogs.com/img/shinyzhu/200809/2008092814160944.jpg" target="_blank"><img src="http://pic002.cnblogs.com/img/shinyzhu/200809/2008092814160944.jpg" alt="" width="692" height="428" /></a></p>
<p>由于每次测试的时候我都清空了浏览器Cache和输入的相同数据，保证每次POST back的数据相同，你可以从上面的截图里看出来，用aspx作为ajax响应端的时候发送的数据是2058b，而用Handler的时候是1987b。这多出来的一部分是哪里来的呢？</p>
<p><strong>三、结论</strong></p>
<p>可能你已经发现了，可是我却经过了千辛万苦才发现啊。</p>
<p>从前两张HTTPWatch的截图看出，在用aspx页面当后台ajax响应的时候，不仅仅请求了aspx页面，还有两个css文件，这是因为aspx页面里有HTML代码，把css文件包含了进来，而且HTML代码里还有一个服务器端的form，问题就在这里！</p>
<p>用一般处理程序就不会存在这样的问题。因为它返回的东西必须由你来完成，因而也有了全部的控制权。</p>
<p>当然你也可以用aspx来作为ajax的后台处理程序，那么请把aspx页面的所有HTML代码删除掉，只保留@Page声明这一行即可，结果是：</p>
<p><img src="http://pic002.cnblogs.com/img/shinyzhu/200809/2008092814280885.jpg" alt="" /></p>
<p>谜题终于解开了。</p>
<p>结论是，修改别人的程序真的是很恼火的一件事，更恼火的是别人的程序还写得不好。合作的烦恼也因此而生。</p>
<p>另外关于排错，有的时候要到最后才能发现错误的根源，这也是相当郁闷的一件事。我之前就很不喜欢ASP.NET的Post back机制，原因之一是因为ViewState等控件在页面上太影响美观了。</p>
<p><strong>四、参考资源</strong></p>
<p>关于视图状态，或许你要参考如下地址：</p>
<p><a href="http://msdn.microsoft.com/zh-cn/library/bb386448.aspx">ASP.NET 视图状态概述</a></p>
<p><a href="http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx">TRULY Understanding ViewState</a></p>
<p><a href="http://forums.microsoft.com/china">微软中文技术论坛（MSDN and TechNet）</a></p><img src ="http://www.cnblogs.com/shinyzhu/aggbug/1301469.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43621/" target="_blank">[新闻]2008年11月21日科技博客精选</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>F#! and more</title><link>http://www.cnblogs.com/shinyzhu/archive/2008/09/09/fsharp-and-more.html</link><dc:creator>Shiny Zhu</dc:creator><author>Shiny Zhu</author><pubDate>Tue, 09 Sep 2008 15:35:00 GMT</pubDate><guid>http://www.cnblogs.com/shinyzhu/archive/2008/09/09/fsharp-and-more.html</guid><wfw:comment>http://www.cnblogs.com/shinyzhu/comments/1287954.html</wfw:comment><comments>http://www.cnblogs.com/shinyzhu/archive/2008/09/09/fsharp-and-more.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/shinyzhu/comments/commentRss/1287954.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/shinyzhu/services/trackbacks/1287954.html</trackback:ping><description><![CDATA[<p>如果你还不知道 F# ，请到<a href="http://msdn.com/fsharp"> http://msdn.com/fsharp</a> 看个究竟吧！ F# 最初是由 Microsoft Research 的 Don Syme 所开发，最新版本的F#已经发布了，现在就去<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=61ad6924-93ad-48dc-8c67-60f7e7803d3c">下载2008年9月技术预览版</a>吧，版本号是1.9.6。虽然还是 CTP 版本，不过 F# 也有不短的发展历史了，许多特性也非常有吸引力，如果你对面向对象有不满的地方，可能在F#里会找到非常好的解决办法。</p>
<p>Windows 平台的编程语言已经多得数不过来了，很大一部分是运行在 CLR 上的，CLR 的目标就是要在一个兼容的生态系统中将语言和 API 无缝集成在同一运行时中达到百花齐放、百家争鸣的效果，从而方便了任何有特殊爱好的程序员轻松选择自己钟意的语言开始快乐地coding，多么惬意的一件事啊。F# 就是这多种语言中的一种，它是一种<strong>函数化</strong>语言。</p>
<p><strong>面向对象有什么问题？</strong></p>
<p>面向对象是我们最熟悉的编程方式，从大学课程到培训，无一不把OO作为重头戏来开展。通过面向对象可以描述对象与绑定这些对象之间交互的约定所构成的环境。OO 利用类型约定、多态性以及精细的可见性等多种功能来提供出色的重用和封装特性。通常面向对象的语言采用静态类型系统，所以这些语言被称为静态类型语言，这意味着程序创建和使用的所有类型都在编译时进行检查；这可防止您对 Duck 类型的对象调用方法 Moo（在此方法不存在的情况下）。在代码运行之前，编译器可检测各种类型之间被破坏和误用的约定，从理论上讲，这样做可减少运行时错误。</p>
<p>但是 OO 也存在一些缺陷。类型安全性可能会使编程人员过分依赖编译器来捕获错误，而不是亲自创建必要的测试基础结构。同时，OO 还会促使编程人员预先定义自己的约定，而这往往是与快速原型编程和多用户编程环境背道而驰的。在大型软件项目中，组件之间的约定（通常由不同的团队所拥有）往往在整个开发周期中不断演变，这就要求约定的使用者不断更新其代码。由于上述这些问题，OO 语言可能显得有些复杂和冗长。</p>
<p><strong>函数式编程将程序计算视为数学函数的计算</strong>。将两个数字相加即为一个函数。假定有两个输入值 5 和 10，则输出值为 15。为解决某个问题，函数式编程将该问题细分为多个可使用函数表示的较小的块，然后再将这些函数进行组合以生成预期的输出。</p>
<p>函数式编程通常会避开状态（类似于变量和对象等内容）和状态变异。这实际上是与 OO 相左的，后者的主要目的恰恰是为了创建和操作状态（对象）。由于避开了状态，函数式程序往往更加准确、精密而且可验证。这是由于它很少会产生不可预知的副作用&mdash;&mdash;当程序（如某个变量）的内部状态在各操作之间发生变化时可能会产生一些副作用，这些副作用会导致在一个或多个操作中产生非预期的结果。面向对象的语言和动态语言依赖编程人员来封装和保护状态，以减少不可预知的副作用，因为这些副作用会不可避免地导致更多错误的发生。函数式语言可以是很纯粹的，也就是说没有任何副作用或状态。但是，大多数流行的函数式语言都具有状态操作功能，这有利于促进与外部 API、操作系统以及其他语言的互操作性。针对某些程序必须使用一定量的状态信息来表示问题这一事实，它们也有相应的考虑。<br />有一些很有用的功能，它们对函数式语言是通用的。<strong>高阶函数</strong>可以将另一个函数作为参数，并且返回结果可以是函数，这为代码重用提供了强大的支持。<br />下面的例子对数组或数据列表中的每个元素都执行（或映射）一个函数。<br />假定没有变异的状态（为返回的结果创建一个新数组），并且没有函数结果依赖于先前的结果，则现在即可开始考虑将这一映射示例扩展到多个处理内核（通过将数组分成两部分并将得到的两个数组连接起来）乃至多个计算机（跨 n 个计算机拆分序列化数据、将代码函数传递到计算机、在一个单独主机中执行并连接序列化结果），而不必担心诸如状态管理等并发操作问题。这就是最酷的地方噢！</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><img id="Code_Closed_Image_232253" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_232253').style.display='none'; document.getElementById('Code_Open_Image_232253').style.display='inline'; document.getElementById('Code_Open_Text_232253').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" alt="" width="11" height="16" align="top" /><img id="Code_Open_Image_232253" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_232253').style.display='none'; getElementById('Code_Closed_Image_232253').style.display='inline'; getElementById('Code_Closed_Text_232253').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" width="11" height="16" align="top" /><span id="Code_Closed_Text_232253" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_232253"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000;">//</span><span style="color: #008000;"> increment function</span><span style="color: #008000;"><br /></span><span style="color: #0000ff;">let</span><span style="color: #000000;"> increment x = x + </span><span style="color: #800080;">1</span><span style="color: #000000;"><br /><br /></span><span style="color: #008000;">//</span><span style="color: #008000;"> data</span><span style="color: #008000;"><br /></span><span style="color: #0000ff;">let</span><span style="color: #000000;"> data = [</span><span style="color: #800080;">1</span><span style="color: #000000;"> .. </span><span style="color: #800080;">5</span><span style="color: #000000;">]<br /><br /></span><span style="color: #008000;">//</span><span style="color: #008000;"> map (func, myList)</span><span style="color: #008000;"><br /></span><span style="color: #0000ff;">let</span><span style="color: #000000;"> map func myList = { </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> x </span><span style="color: #0000ff;">in</span><span style="color: #000000;"> myList </span><span style="color: #000000;">-&gt;</span><span style="color: #000000;"> func x }<br /><br />print_any (map increment data)<br /></span></span></pre>
</div>
<p>
第一行定义一个简单的递增函数，它有一个参数 x，此函数将计算 x + 1。然后，将数据定义为一个不可变异的列表，其中包含整数 1 到 5。此映射函数以函数和列表作为参数，使用传统编程中的喷淋方法来遍历列表并执行 func 函数参数，然后将列表中的当前元素传递给它。接下来，print_any 函数使用增量函数和数据列表作为参数来执行映射函数，随后将结果打印到屏幕。</p>
<p>&nbsp;</p>
<p>类型在哪里？在本例中并不存在。实质上，变量（数据）实际被类型化为 System.Int32 的列表，但并不需要将此告知编译器，因为它使用类型推断功能即可推断出这一情况。编译器做的工作越多，您的工作就会越少。这听起来非常不错。使用列表推导功能，您在一行内就可以轻松地重写先前的部分代码：</p>
<div class="cnblogs_code">
<pre><img id="Code_Closed_Image_232710" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_232710').style.display='none'; document.getElementById('Code_Open_Image_232710').style.display='inline'; document.getElementById('Code_Open_Text_232710').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" alt="" width="11" height="16" align="top" /><img id="Code_Open_Image_232710" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_232710').style.display='none'; getElementById('Code_Closed_Image_232710').style.display='inline'; getElementById('Code_Closed_Text_232710').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" width="11" height="16" align="top" /><span id="Code_Closed_Text_232710" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_232710"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">print_any { </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> x </span><span style="color: #0000ff;">in</span><span style="color: #000000;"> </span><span style="color: #800080;">1</span><span style="color: #000000;">..</span><span style="color: #800080;">5</span><span style="color: #000000;"> </span><span style="color: #000000;">-&gt;</span><span style="color: #000000;"> x + </span><span style="color: #800080;">1</span><span style="color: #000000;"> }<br /></span></span></pre>
</div>
<p>
另一个很酷的 F# 功能是模式匹配：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><img id="Code_Closed_Image_232801" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_232801').style.display='none'; document.getElementById('Code_Open_Image_232801').style.display='inline'; document.getElementById('Code_Open_Text_232801').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" alt="" width="11" height="16" align="top" /><img id="Code_Open_Image_232801" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_232801').style.display='none'; getElementById('Code_Closed_Image_232801').style.display='inline'; getElementById('Code_Closed_Text_232801').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" width="11" height="16" align="top" /><span id="Code_Closed_Text_232801" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_232801"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff;">let</span><span style="color: #000000;"> booleanToString x = </span><span style="color: #0000ff;">match</span><span style="color: #000000;"> x </span><span style="color: #0000ff;">with</span><span style="color: #000000;"> </span><span style="color: #0000ff;">false</span><span style="color: #000000;"> </span><span style="color: #000000;">-&gt;</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">False</span><span style="color: #800000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;">|</span><span style="color: #000000;"> _ </span><span style="color: #000000;">-&gt;</span><span style="color: #000000;"> </span><span style="color: #800000;">"</span><span style="color: #800000;">True</span><span style="color: #800000;">"</span><span style="color: #000000;"><br /></span></span></pre>
</div>
<p>
此函数具有一个 Boolean 类型，此类型可与 false 或任何其他值匹配，并返回相应的字符串。如果向 booleanToString 函数传递一个字符串，会出现什么结果？同样，编译器承担了繁重的工作，将 x 参数的类型定义为类型 bool。它通过 x 在此函数中的用法推断出这一点（在这种情况下，它仅与 bool 类型相匹配）。<br />模式匹配还可以用于构建强大的函数调度机制，以便在 OO 及其他环境中轻松地重现虚拟方法调度。当您需要根据接收方（将在此对象中调用虚拟方法）和方法参数的变化来改变行为时，虚拟方法才真正开始起作用。访问者模式即是为了帮助解决这种情况而设计的，但是在 F# 中基本不需要（已包含在模式匹配中）。</p>
<p>&nbsp;</p>
<p>支持用户定义的类型，通常由记录（类似于 OO 环境中的类）或聚合（通常是一种有序序列类型）提供。以下是用户定义的队员和球队记录：</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><img id="Code_Closed_Image_233032" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_233032').style.display='none'; document.getElementById('Code_Open_Image_233032').style.display='inline'; document.getElementById('Code_Open_Text_233032').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" alt="" width="11" height="16" align="top" /><img id="Code_Open_Image_233032" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_233032').style.display='none'; getElementById('Code_Closed_Image_233032').style.display='inline'; getElementById('Code_Closed_Text_233032').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" width="11" height="16" align="top" /><span id="Code_Closed_Text_233032" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_233032"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff;">type</span><span style="color: #000000;"> player = <br />  { firstName : </span><span style="color: #0000ff;">string</span><span style="color: #000000;">; <br />    lastName : </span><span style="color: #0000ff;">string</span><span style="color: #000000;">;<br />  }<br /><br /></span><span style="color: #0000ff;">type</span><span style="color: #000000;"> soccerTeam = <br />  { name : </span><span style="color: #0000ff;">string</span><span style="color: #000000;">;<br />    members : player list;<br />    location : </span><span style="color: #0000ff;">string</span><span style="color: #000000;">;<br />  }  <br /></span></span></pre>
</div>
<p>
延迟计算是另一种常见的函数式语言功能，其功能源自这样一种理论，即函数化编程中没有明显的副作用。延迟计算依赖于编译器和编程人员选择表达式计算顺序的能力，它可以使计算延迟到所需的时间点。编译器和编程人员都可以使用延迟计算技术作为精确的性能优化手段，因为它可以避免一些不必要的计算。在处理无限（或极大）数据集的计算时，它也是一种有用的技术。实际上，Microsoft Research 的 Applied Games 研究组曾在 F# 中使用此技术解析过数 TB 字节的 Xbox LIVE&reg; 日志数据。</p>
<p>&nbsp;</p>
<p>以下是 F# 中的延迟计算：</p>
<div class="cnblogs_code">
<pre><img id="Code_Closed_Image_233106" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_233106').style.display='none'; document.getElementById('Code_Open_Image_233106').style.display='inline'; document.getElementById('Code_Open_Text_233106').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" alt="" width="11" height="16" align="top" /><img id="Code_Open_Image_233106" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_233106').style.display='none'; getElementById('Code_Closed_Image_233106').style.display='inline'; getElementById('Code_Closed_Text_233106').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" width="11" height="16" align="top" /><span id="Code_Closed_Text_233106" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_233106"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff;">let</span><span style="color: #000000;"> lazyTwoTimesTwo = </span><span style="color: #0000ff;">lazy</span><span style="color: #000000;"> (</span><span style="color: #800080;">2</span><span style="color: #000000;"> * </span><span style="color: #800080;">2</span><span style="color: #000000;">)<br /></span><span style="color: #0000ff;">let</span><span style="color: #000000;"> actualValue = Lazy.force lazyTwoTimesTwo</span></span></pre>
</div>
<p>
此代码执行时，lazyTwoTimesTwo 只是在运行时充当指向执行 2 * 2 的函数的轻型指针。仅当实际强制执行此函数时，才能获得结果。<br />虽然函数化编程模型可能不太容易理解（可能需要 30-40 小时的准备时间），但一旦掌握它，您的编程能力就会有质的飞跃。您只需使用很少的代码就可以解决问题并减少错误。此模式通过最大程度减少意外的副作用来保护代码的安全，并通过执行积极的优化措施使其保持快速运行状态。此外，简单性往往代表出色的扩展性&mdash;&mdash;您只需看一下 Map 代码，想想该代码如何能够轻松分布到成千上万台计算机中，就可以了解其中的缘由了。<br />至此，您已经看到了函数化编程的一些非常出色的功能，例如类型推断、高阶函数、模式匹配和用户定义类型等。</p>
<p>在hubFS有很多热门的讨论，推荐去<a href="http://cs.hubfs.net">看看http://cs.hubfs.net</a>。</p>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/shinyzhu/aggbug/1287954.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43620/" target="_blank">[新闻]Google拟年底前关闭"lively" 因不敌"第二人生"</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>MSDN风格皮肤</title><link>http://www.cnblogs.com/shinyzhu/archive/2008/09/08/msdn-skin-for-cnblogs.html</link><dc:creator>Shiny Zhu</dc:creator><author>Shiny Zhu</author><pubDate>Mon, 08 Sep 2008 15:28:00 GMT</pubDate><guid>http://www.cnblogs.com/shinyzhu/archive/2008/09/08/msdn-skin-for-cnblogs.html</guid><wfw:comment>http://www.cnblogs.com/shinyzhu/comments/1287175.html</wfw:comment><comments>http://www.cnblogs.com/shinyzhu/archive/2008/09/08/msdn-skin-for-cnblogs.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/shinyzhu/comments/commentRss/1287175.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/shinyzhu/services/trackbacks/1287175.html</trackback:ping><description><![CDATA[<p>晚上设置了下博客，顺便把MSDN的一些元素搬过来了，<span style="text-decoration: line-through;">还有一些地方比如边栏要完善。明天再说啦。</span> 已经改好了噢！</p>
<p>&nbsp;</p>
<p>说明：这个皮肤是基于&ldquo;简约&rdquo;皮肤的，下面是我添加的CSS：（撑太大了。我把图片地址改了。）</p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><img id="Code_Closed_Image_093456" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_093456').style.display='none'; document.getElementById('Code_Open_Image_093456').style.display='inline'; document.getElementById('Code_Open_Text_093456').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" alt="" width="11" height="16" align="top" /><img id="Code_Open_Image_093456" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_093456').style.display='none'; getElementById('Code_Closed_Image_093456').style.display='inline'; getElementById('Code_Closed_Text_093456').style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" alt="" width="11" height="16" align="top" /><span id="Code_Closed_Text_093456" class="cnblogs_code_Collapse">Code</span><span id="Code_Open_Text_093456"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #800000;">a:hover</span><span style="color: #000000;">{</span><span style="color: #ff0000;">color</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#f60</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />body</span><span style="color: #000000;">{</span><span style="color: #ff0000;">background</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#fff</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />iframe</span><span style="color: #000000;">{</span><span style="color: #ff0000;">display</span><span style="color: #000000;">:</span><span style="color: #0000ff;">none</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />#main</span><span style="color: #000000;">{</span><span style="color: #ff0000;">margin</span><span style="color: #000000;">:</span><span style="color: #0000ff;">10px</span><span style="color: #000000;">;</span><span style="color: #ff0000;">background</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#f3f3f3</span><span style="color: #000000;">;</span><span style="color: #ff0000;">border</span><span style="color: #000000;">:</span><span style="color: #0000ff;">1px solid #999</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />.headermaintitle</span><span style="color: #000000;">{</span><span style="color: #ff0000;"></span><span style="color: #ff0000;">padding</span><span style="color: #000000;">:</span><span style="color: #0000ff;">5px 0 5px 55px</span><span style="color: #000000;">;</span><span style="color: #ff0000;">line-height</span><span style="color: #000000;">:</span><span style="color: #0000ff;">34px</span><span style="color: #000000;">;</span><span style="color: #ff0000;">color</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#fff</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />.postTitle a, .postTitle a:link, .postTitle a:visited</span><span style="color: #000000;">{</span><span style="color: #ff0000;">padding</span><span style="color: #000000;">:</span><span style="color: #0000ff;">0</span><span style="color: #000000;">;</span><span style="color: #ff0000;">color</span><span style="color: #000000;">:</span><span style="color: #0000ff;"> #03c</span><span style="color: #000000;">;</span><span style="color: #ff0000;">font-size</span><span style="color: #000000;">:</span><span style="color: #0000ff;"> 14px</span><span style="color: #000000;">;</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />.postTitle a:hover</span><span style="color: #000000;">{</span><span style="color: #ff0000;">padding</span><span style="color: #000000;">:</span><span style="color: #0000ff;">0</span><span style="color: #000000;">;</span><span style="color: #ff0000;">color</span><span style="color: #000000;">:</span><span style="color: #0000ff;"> #f60</span><span style="color: #000000;">;</span><span style="color: #ff0000;">text-decoration</span><span style="color: #000000;">:</span><span style="color: #0000ff;"> none</span><span style="color: #000000;">;</span><span style="color: #ff0000;">border</span><span style="color: #000000;">:</span><span style="color: #0000ff;">none</span><span style="color: #000000;">;</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />#header</span><span style="color: #000000;">{</span><span style="color: #ff0000;">background</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#801e2b url(...msdn.BG1.jpg) no-repeat left top</span><span style="color: #000000;">}</span><span style="color: #800000;"><br /><br />#blogTitle</span><span style="color: #000000;">{</span><span style="color: #ff0000;">padding</span><span style="color: #000000;">:</span><span style="color: #0000ff;">0 16px 0</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />#blogTitle h2</span><span style="color: #000000;">{</span><span style="color: #ff0000;">color</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#fff</span><span style="color: #000000;">;</span><span style="color: #ff0000;">font-size</span><span style="color: #000000;">:</span><span style="color: #0000ff;">12px</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />.blogStats</span><span style="color: #000000;">{</span><span style="color: #ff0000;">color</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#fff</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />#navigator</span><span style="color: #000000;">{</span><span style="color: #ff0000;">background</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#9b4342 url(...msdn.glassBG1.jpg) no-repeat left top</span><span style="color: #000000;">;<br /></span><span style="color: #ff0000;">border</span><span style="color: #000000;">:</span><span style="color: #0000ff;">none</span><span style="color: #000000;">;</span><span style="color: #ff0000;">border-top</span><span style="color: #000000;">:</span><span style="color: #0000ff;">1px solid #d09291</span><span style="color: #000000;">;</span><span style="color: #ff0000;">border-bottom</span><span style="color: #000000;">:</span><span style="color: #0000ff;">solid 1px #253e53</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />.menu</span><span style="color: #000000;">{</span><span style="color: #ff0000;">color</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#fff</span><span style="color: #000000;">}</span><span style="color: #800000;"><br /><br />#mainContent</span><span style="color: #000000;">{}</span><span style="color: #800000;"><br />#sideBar</span><span style="color: #000000;">{</span><span style="color: #ff0000;">border</span><span style="color: #000000;">:</span><span style="color: #0000ff;">none</span><span style="color: #000000;">;</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />.forFlow</span><span style="color: #000000;">{}</span><span style="color: #800000;"><br />.clear</span><span style="color: #000000;">{</span><span style="color: #ff0000;">clear</span><span style="color: #000000;">:</span><span style="color: #0000ff;">both</span><span style="color: #000000;">;</span><span style="color: #000000;">}</span><span style="color: #800000;"><br /><br />.day</span><span style="color: #000000;">{</span><span style="color: #ff0000;">margin</span><span style="color: #000000;">:</span><span style="color: #0000ff;">5px</span><span style="color: #000000;">;</span><span style="color: #ff0000;">padding</span><span style="color: #000000;">:</span><span style="color: #0000ff;">5px</span><span style="color: #000000;">;</span><span style="color: #ff0000;">border</span><span style="color: #000000;">:</span><span style="color: #0000ff;">1px solid #999</span><span style="color: #000000;">;</span><span style="color: #ff0000;">border-top</span><span style="color: #000000;">:</span><span style="color: #0000ff;">none</span><span style="color: #000000;">;<br /></span><span style="color: #ff0000;">background</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#fff url(...box_BG_repeater.jpg) repeat-x top</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />.dayTitle</span><span style="color: #000000;">{</span><span style="color: #ff0000;">display</span><span style="color: #000000;">:</span><span style="color: #0000ff;">block</span><span style="color: #000000;">;</span><span style="color: #ff0000;">font-size</span><span style="color: #000000;">:</span><span style="color: #0000ff;">16px</span><span style="color: #000000;">;</span><span style="color: #ff0000;">font-weight</span><span style="color: #000000;">:</span><span style="color: #0000ff;">bold</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />.postTitle,.entrylistPosttitle,.feedback_area_title</span><span style="color: #000000;">{</span><span style="color: #ff0000;">border-bottom</span><span style="color: #000000;">:</span><span style="color: #0000ff;">none</span><span style="color: #000000;">;</span><span style="color: #ff0000;">margin</span><span style="color: #000000;">:</span><span style="color: #0000ff;">0</span><span style="color: #000000;">;</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />.postDesc,.entrylistItemPostDesc</span><span style="color: #000000;">{</span><span style="color: #ff0000;">border-bottom</span><span style="color: #000000;">:</span><span style="color: #0000ff;">none</span><span style="color: #000000;">;</span><span style="color: #000000;">}</span><span style="color: #800000;"><br /><br />#sideBar li</span><span style="color: #000000;">{</span><span style="color: #ff0000;">margin</span><span style="color: #000000;">:</span><span style="color: #0000ff;">1px 0</span><span style="color: #000000;">;</span><span style="color: #ff0000;">text-indent</span><span style="color: #000000;">:</span><span style="color: #0000ff;">0</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />#sideBar li a</span><span style="color: #000000;">{</span><span style="color: #ff0000;">display</span><span style="color: #000000;">:</span><span style="color: #0000ff;">block</span><span style="color: #000000;">;</span><span style="color: #ff0000;">padding</span><span style="color: #000000;">:</span><span style="color: #0000ff;">0 2px</span><span style="color: #000000;">;</span><span style="color: #ff0000;">background</span><span style="color: #000000;">:</span><span style="color: #0000ff;">#e6e6e9</span><span style="color: #000000;">;</span><span style="color: #ff0000;">border</span><span style="color: #000000;">:</span><span style="color: #0000ff;">1px solid #e6e6e9</span><span style="color: #000000;">;</span><span style="color: #000000;">}</span><span style="color: #800000;"><br />#sideBar li a:hover</span><span style="color: #000000;">{</span><span style="color: #ff0000;">border</span><span style="color: #000000;">:</span><span style="color: #0000ff;">1px solid #7a1312</span><span style="color: #000000;">}</span></span></pre>
</div>
<p>&nbsp;</p><img src ="http://www.cnblogs.com/shinyzhu/aggbug/1287175.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43619/" target="_blank">[新闻]微软证实已雇佣前雅虎搜索官员Suchter</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item></channel></rss>