<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title>supNate的新天地</title>
<link>http://www.x2blog.cn/</link>
<description>所有栏目</description>
<pubDate>Wed, 08 Sep 2010 00:00:00 GMT</pubDate>
<item>
<title>Dojo 1.5 正式发布</title>
<pubDate>2010-7-28 16:52:48</pubDate>
<category>技术专区</category>
<link>http://www.x2blog.cn/?tid=63</link>
<description><![CDATA[作为一款强大的Ajax框架，Dojo迎来了版本1.5的发布，在UI设计和稳定性上有了长足的进步。更多介绍移步：<a href="http://blog.csdn.com/dojotoolkit" target="_blank">http://blog.csdn.com/dojotoolkit</a>。上面有详细的介绍。]]></description>
</item>
<item>
<title>【Asp.net】如何在一个页面周期中设置全局变量</title>
<pubDate>2010-3-30 19:39:31</pubDate>
<category>技术专区</category>
<link>http://www.x2blog.cn/?tid=57</link>
<description><![CDATA[如果你想使用全局变量，可以有很多方法：Session，Cache，静态成员等等。<br/>但是这些方法的变量生命周期都是基于会话或大于会话的，那么如何仅在一个页面周期中使用全局变量呢？<br/>固然你可以增加一些逻辑来继续使用这些方法，但是对于Session和Cache，无谓增加了服务器端的负担；对于静态成员，则没法保证多线程访问时的一致性。<br/>那么如何解决？方案如下：<br/><br/>我们知道，对于每一次的页面请求，都会生成一个当前Http上下文的实例，通过System.Web.HttpContext.Current来提供，这个对象是HttpContext的实例。<br/>包含了当前的Request，Response，Session对象。这些对象极大方便了在单独的类文件中访问当前请求的常用信息。<br/><br/>那么，除了Request，Response，Session之外，你想自定义一个这样的对象，如何实现呢？答案还在HttpContext中，<br/>实际上HttpContext还提供了一个Items属性，它是一个IDictionary的实例，你可以在其中存储任何名/值对，并且在页面周期结束之后，这些值自动消失。<br/><br/>通过这个字典集合属性，我们就能够在其中存储任何的仅存活于当前请求的全局变量。<br/><br/><strong>应用场景举例：</strong><br/>一个页面中的多个类都用到数据库，那么需要创建连接。如果你只想创建一次连接，而被所有类公用。那么通常的做法，需要把这个数据库连接作为参数传递到各个类的构造函数。增加了不必要的麻烦。<br/>有了上述方案，假设我们有自定义的一个Connection类：MyConnection，这时，可以学习HttpContext，定义一个静态属性Current，来获取一个实例，并且避免重复创建：<br/><br/><div class="codeArea cpp">Class MyConnection<br/>{<br/>&nbsp;&nbsp;&nbsp; public static MyConnection Current<br/>&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(System.Web.HttpContext.Current.Items[&quot;myConnection&quot;] == null)System.Web.HttpContext.Current.Items[&quot;myConnection&quot;] = new MyConnection();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (MyConnection)System.Web.HttpContext.Current.Items[&quot;myConnection&quot;];<br/>&nbsp;&nbsp;&nbsp; }<br/>}</div>]]></description>
</item>
<item>
<title>对付中国电信的114流氓行为！</title>
<pubDate>2010-3-18 23:17:39</pubDate>
<category>综合杂记</category>
<link>http://www.x2blog.cn/?tid=56</link>
<description><![CDATA[中国电信作为网络服务提供商，不想着如何提高上网的速度和稳定性，却在自己的DNS服务器上做手脚，把所有无法解析的域名全部转到自己的广告站点，真是太无耻了！<br/>这种钻着各种空子利用用户赚钱的垄断公司，我们除了叹息一声，绕道而行，也别无它法。<br/><br/>114流氓行为的本质在于劫持了所有用户的DNS解析请求，把自己没法解析的域名通通转到一个并不对应于这个域名的IP，从而导致浏览器端对于无法显示的网站都跳到了114广告界面。<br/><br/>知道了原理，对策很简单，只需要更改一下自己的DNS就可以，这里首选google的公共DNS：8.8.8.8和8.8.8.4。<br/>对于直接拨号上网用户，打开网络连接，找到IP配置，取消自动获取DNS选项，而输入上面的地址；<br/><br/><img height="178" width="402" src="/UserFiles/dnsconfig.png" alt=""/><br/><br/>对于路由器上网用户，找到DHCP配置，将上述DNS地址输入到对应位置，即可一劳永逸。<br/><br/><img height="309" width="510" src="/UserFiles/routerdns.png" alt=""/>]]></description>
</item>
<item>
<title>原X2Blog多用户数据提供浏览和下载</title>
<pubDate>2010-2-3 0:42:15</pubDate>
<category>综合杂记</category>
<link>http://www.x2blog.cn/?tid=55</link>
<description><![CDATA[终于，当X2Blog多用户的熟悉的界面又一次的出现在我的面前，很伤感，带着深深的愧疚，我终于可以让X2Blog的用户拿回早该属于你们的数据。<br/>真的很感谢你们一直对X2Blog的支持，感谢你们在X2Blog这个平台留下你们岁月的痕迹。<br/>出于国内网络的现状，多用户平台无法继续，现在你们可以通过如下网址访问到原来的网络，<br/><font size="5"><a target="_blank" href="http://supnate.gicp.net">http://supnate.gicp.net</a></font><br/>但备份只做到2008年4月13日，其余数据随着机房的服务器的消失而消失了。。<br/>如有忘记密码，可以发邮件活着留言，我会将新密码发到你们的注册邮箱。<br/>对于给你们带来的不便和担忧，真的很抱歉。]]></description>
</item>
<item>
<title>转载一篇：做好人的原因</title>
<pubDate>2010-2-1 10:45:05</pubDate>
<category>综合杂记</category>
<link>http://www.x2blog.cn/?tid=54</link>
<description><![CDATA[转载一篇，证明自己还活着。<br/>－－－－－－－－－－－－－－－－－－－－<br/>初看此文，习惯性的开始想一个最优算法，却不得其解，直至看完全文方大悟，人性的问题机器是永远无法理解的。<br/>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br/><br/>来自: 王建硕 - FeedzShare&nbsp; <br/>原文：<a target="_blank" href="http://home.wangjianshuo.com/cn/20100130_aec.html">http://home.wangjianshuo.com/cn/20100130_aec.html</a><br/><br/>在一个培训里，我们做了个有趣的游戏。那个游戏是一个囚徒困境的翻版，是为了证明双赢的可能性和重要性的。简化来说，是这样的：<br/><div class="quote">&nbsp;&nbsp;&nbsp; 两个人猜拳。<br/>&nbsp;&nbsp;&nbsp; 每个人都可以出剪刀或者布。<br/>&nbsp;&nbsp;&nbsp; 积分规则如下：<br/>&nbsp;&nbsp;&nbsp; 若两人都出剪刀，各得1分；<br/>&nbsp;&nbsp;&nbsp; 若两人都出布，各得3分；<br/>&nbsp;&nbsp;&nbsp; 若一人剪刀，一人布，剪刀者得5分，布者得0分。<br/>&nbsp;&nbsp;&nbsp; 如此往复很多次，积分最多者获胜。</div>如果是你参加这个游戏，你会选择以何种逻辑出拳呢？如果是几百个人，两两玩这个游戏，8个小时以后，最高分获胜，你又会怎么玩呢？<br/><br/><strong><font size="4">局部和整体</font></strong><br/><br/>如果从个人自私和理性的角度判断，任何人在任何时候都应该出剪刀。在对方出剪刀和布这两种情况下，自己出剪刀总比出布得到更多的积分：<br/><br/>如果对方剪刀，自己出布，得0分；自己出剪刀，得1分。<br/>如果对方出布，自己出布，得3分，出剪刀，得5分。<br/><br/>同时，把两个玩家的积分相加，就得到总财富的增加。两个人都是剪刀的时候，总财富加2，一个剪刀一个布，总财富增加5，而只有两个人都是布的时候，总财富增加最多，是6。从集体的角度，每个人都出布最佳。<br/><br/>这是一个虽然游戏双方都知道出布对于整体更加有利，却又不得不出剪刀的困境。<br/><br/><strong><font size="4">最优解</font></strong><br/><br/>在二十年来的竞赛中，最高分的算法如下（相见维基百科的解释）:<br/><div class="quote">&nbsp;&nbsp;&nbsp; 第一步永远出布。<br/>&nbsp;&nbsp;&nbsp; 第二步和对方上一步出的相同，以此类推</div>这是个出奇简单的算法。尤其是第一招就出布好像挺傻的，但最终，这种做事准则总能赢得最多的分数。为什么呢？<br/><br/>出布，可以说是一个友好牌。他向对方表明自己的善意，虽然这对自己而言危险，等于把赤手空拳的自己把一把匕首交给陌生人一样。现实社会，会有人真么傻吗？<br/><br/>出剪刀，是防卫牌，是不合作的牌，是准备损人利己，或者至少也是正当防卫的牌。<br/><br/><font size="4"><strong>赢得战斗还是赢得战争</strong></font><br/><br/>对于永远出剪刀的人，他几乎赢得了每一次单独的战斗（不是比对手多得5分，也是至少和对手打个平手）。但最终因为<br/><br/>&nbsp;&nbsp; 1. 没有人会傻到当他出了多次剪刀以后依然和他出布，他每次得到的只是1分。<br/>&nbsp;&nbsp; 2. 就算有人因为过于善良或者仅仅是愚蠢，或者他利用第一次接触的机会，占了对方的便宜，得到5分，他的可怜搭档会因为他的欺负，在后面的比赛中会尽快的被淘汰。他能利用的人越来越少了，能够得到5分的机会也就越来越少了，直到最后，使出全力也只能每次1分的艰难争分了。<br/><br/>如果把这个世界简单的分为好人和坏人的话，好人喜欢和坏人打交道，而坏人也喜欢和好人打交道。最终，是一个好人和好人可以持续生活下去的世界。他赢得了所有的战斗，却最终失去了真个战争。因为，从你死我活的角度来看，他赢了；但从两人整体的角度，他输了。更多的出现在整体失败的回合中的人，也不会积累多少的财富。<br/><br/>对于永远出布的人，也是死路一条。没有原则的&ldquo;善良&rdquo;，是没有原则的放弃自己的利益，是最快被淘汰出局的。<br/><br/>对于最终获胜的那个仅仅出于自己的私利（就是获得最多的个人分数），却展示了如下的美德：<br/><div class="quote">&nbsp;&nbsp; 1. 善良。第一个回合向对方表达善意，希望以此找到同样善良的回应，并开创一路&ldquo;布&rdquo;下去的搭档。<br/>&nbsp;&nbsp; 2. 复仇。对于不善良的，背叛的行为，立刻不加犹豫的惩罚。因为对方如果处于一己私利，只有在受到惩罚以后才会有重新出布的可能性。<br/>&nbsp;&nbsp; 3. 原谅。当对方重新回归友好以后，自己立刻给予友好的回应。</div>这是个很神奇的结论。它从实验和推理的角度告诉我们为什么我们要对别人友好，为什么不要做坏人。<br/><font size="4"><strong><br/>现实的意义</strong></font><br/><br/>这个实验的分数设置是有讲究的，它模拟了我们现在的社会：这不是一个零和游戏（不是你死，就是我活），而是一个可以双赢的游戏（只有合作，才能让社会总财富增加，自己的那一份也要增加）。<br/><br/>在这样的游戏中，如果只有一次交锋，或许出剪刀是正解。但如果是多次的多人的游戏，最终，选择做好人是可以被验证的正解。<br/><br/>这也告诉我们为什么我们见面的时候会需要握手，虽然对方不见得一定会伸出手；为什么在电梯里面需要向邻居问好，虽然在现在的社会，会给与回应的机会不会很高；为什么在竞争的时候，不要出损人利己的招数，因为看似一个公司占了另外一个公司的便宜，却实际上伤害了两家公司所处的行业，最终伤及自己。<br/><br/>做好人，不仅仅是乌托邦的理想，和不切实际的道德要求，更是自己利益最大化的必由之路。]]></description>
</item>
<item>
<title>GridView为什么不分页？</title>
<pubDate>2009-6-29 16:29:20</pubDate>
<category>技术专区</category>
<link>http://www.x2blog.cn/?tid=39</link>
<description><![CDATA[今天<a href="http://www.kevinhou.net/" target="_blank">Kevin</a>问我为什么下面的代码生成的GridView为何不分页？<br/><div class="quote">&lt;asp:GridView ID=&quot;gv&quot; runat=&quot;server&quot; AutoGenerateColumns=&quot;False&quot; PageSize=&quot;10&quot; DataKeyNames=&quot;id&quot; AllowPaging=&quot;true&quot; OnPageIndexChanging=&quot;PageIndexChanging&quot;&gt;</div>顿时一愣，这个问题是如此眼熟，以至于还能记得以前经常遇到这个问题每次都要想上半天，而且还记得是一个很幼稚的错误引起。却一时半会想不起来。这种情况确实令人郁闷，却经常发生-_-。<br/>幸运的是经过5分钟的绞尽脑汁，终于想起来原因，遂记录下来，以备查询：<br/>Asp.net从2.0开始支持theme，如果设置了一个globalSkin，那么所有的page都会应用这个theme。而GridView的分页属性是可以在theme里设定的。这时会覆盖掉aspx文件中定义的属性。<br/>例如：我在app_thems/GlobalSkin/GridView.skin就定义了所有GridView的默认外观（包括分页）。<br/><div class="quote">&lt;asp:GridView runat=&quot;server&quot; CellPadding=5 ForeColor=&quot;#333333&quot; BorderWidth=&quot;1px&quot; BorderColor=&quot;#dddddd&quot; PageSize=20&gt;<br/>&nbsp;&nbsp;&nbsp; &lt;FooterStyle BackColor=&quot;#5D7B9D&quot; Font-Bold=&quot;True&quot; ForeColor=&quot;White&quot; /&gt;<br/>&lt;/asp:GridView&gt;</div>这里的PageSize=&quot;20&quot;就覆盖了控件定义里设置的PageSize=&quot;10&quot;，这就造就了GridView不能分页的假象，实际上如果数据量超过20还是会分页的。解决办法一是不在theme里定义PageSize，二是在控件或者页面的配置中设置EnableTheming=&quot;false&quot;。]]></description>
</item>
<item>
<title>用DOH实现Javascript，Ajax应用的单元测试</title>
<pubDate>2009-6-24 23:47:22</pubDate>
<category>技术专区</category>
<link>http://www.x2blog.cn/?tid=37</link>
<description><![CDATA[当我花费了2个小时才发现把enalbed拼写错误之后，郁闷之后痛定思痛，决定在我的新项目中完全彻底坚定的落实好单元测试。保证代码质量的同时也能提高开发效率，而且还能够帮助更好的划分模块。<br/>服务器端自然好办，VS2008自带的测试框架非常强大，轻松就能搞定。但javascript端，大家都知道的，还是有点麻烦的。大概比较多的人会用JSUnit，借助JUnit的大名，想必质量不会太差。但我没用过，也就没啥好评论。<br/>这里我要介绍的是Dojo框架自带的javascript测试框架D.O.H，全称是Dojo Objective Harness。用过之后感觉功能很强大，可惜的是文档相当稀少，官方仅有的一篇：<a href="http://www.dojotoolkit.org/book/dojo-book-0-9/part-4-meta-dojo/d-o-h-unit-testing" target="_blank">http://www.dojotoolkit.org/book/dojo-book-0-9/part-4-meta-dojo/d-o-h-unit-testing</a>。抗议者甚多，认为文章中假设太多，看过之后仍然摸不着头脑。但在我勇于探索勇于研究的精神指引下（轻拍<img alt="" src="/editor/images/smiley/msn/tounge_smile.gif"/>），还是基本掌握其要领，遂写此文章一篇与大家共享。<br/><br/>似乎废话多了点。。言归正传，尽量用最简洁的文章来让大家迅速上手<br/>目录：<br/>1. DOH特点<br/>2. DOH下载<br/>3. Hello DOH!<br/>4. 用统一界面运行单元测试<br/>5. 单独的JS单元测试文件<br/>6. 单元测试对象（Test Fixture）<br/>7. 分组测试<br/>8. 异步测试<br/>9. 总结]]></description>
</item>
<item>
<title>绿霸</title>
<pubDate>2009-6-12 15:50:18</pubDate>
<category>综合杂记</category>
<link>http://www.x2blog.cn/?tid=33</link>
<description><![CDATA[<p>绿霸事件最近可谓闹的沸沸扬扬，但终归口说无凭，大家质疑再多没证据也没什么办法。<br/>现在终于有人拿出了实实在在的技术文章，不服不行，链接于此和大家共仰，顺便感慨下中国民间力量的强大。<br/><a target="_blank" href="https://docs.google.com/View?id=afk7vnz54wt_12f8jzj9gw">绿坝-花季护航软件技术分析（不断更新中）</a><br/><br/>关键词：侵权，抄袭，安全性</p>]]></description>
</item>
<item>
<title>新博开张 之 旧瓶新酒</title>
<pubDate>2009-6-3 12:41:34</pubDate>
<category>综合杂记</category>
<link>http://www.x2blog.cn/?tid=28</link>
<description><![CDATA[<p>决定今天开始回归有博客的生活，立贴为证，大家多多支持～<br/><br/>对于x2blog.cn，不得不说维护一个多用户平台实在不易，不得以之下转战到这个个人平台。还请大家多多谅解。对于原来的数据，过几天我会做好导出备份，供有需要的下载。<br/><br/>开张贴仅此，更多精彩，敬请拭目以待！～<img alt="" src="/editor/images/smiley/msn/teeth_smile.gif"/></p>]]></description>
</item>
</channel>
</rss>
