﻿<?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>博客园-Vss2005|Silverlight教程|jQuery教程|Ajax框架|Asp.net下载教程|VS2008下载安装教程 - Kai.Ma的世界,道法自然</title><link>http://www.cnblogs.com/kaima/</link><description>sliverlight教程 Ajax jQuery VS2008 Vss2005</description><language>zh-cn</language><lastBuildDate>Thu, 28 Aug 2008 03:55:34 GMT</lastBuildDate><pubDate>Thu, 28 Aug 2008 03:55:34 GMT</pubDate><ttl>60</ttl><item><title>ASP.NET MVC 精彩文章收集</title><link>http://www.cnblogs.com/kaima/archive/2008/08/26/1276528.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Tue, 26 Aug 2008 03:53:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/26/1276528.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1276528.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/26/1276528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1276528.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1276528.html</trackback:ping><description><![CDATA[<ol>
    <li><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/hjf1223/archive/2008/07/09/mvc_webform.html"><font color="#000080">ASP.NET MVC :从ASP.NET WebForm到ASP.NET MVC技术上的共用和差异</font></a> </li>
    <li><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/hjf1223/archive/2008/07/09/mvc_authorization.html"><font color="#000080">ASP.NET MVC ：MVC页面验证与授权</font></a> </li>
</ol>
  <img src ="http://www.cnblogs.com/kaima/aggbug/1276528.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41931/" target="_blank">[新闻]GC2008：星际争霸2进程报告 微调进程延续</a>]]></description></item><item><title>微软发布了ASP.NET MVC框架的第4个预览版本</title><link>http://www.cnblogs.com/kaima/archive/2008/08/23/1274766.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Sat, 23 Aug 2008 09:53:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/23/1274766.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1274766.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/23/1274766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1274766.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1274766.html</trackback:ping><description><![CDATA[<p>作者 <strong>Robert Bazinet</strong>译者 <strong><a href="http://www.infoq.com/cn/news/2008/07/aspnet-mvc-preview4">赵劼</a></strong></p> <p>继续保持着一个月发布一个版本的进度，微软发布了ASP.NET MVC框架的Preview 4版本。这个版本开始提供更多高端功能，以帮助开发人员提高生产力。 <p>Scott Guthrie在他的博客文章《<a href="http://weblogs.asp.net/scottgu/archive/2008/07/14/asp-net-mvc-preview-4-release-part-1.aspx">ASP.NET MVC Preview 4发布（第一部分）</a>》中介绍了这个发布，同时也解释了一些新特性。 <h4>更新</h4> <h5>默认项目模板中新增的简单Membership（成员）特性</h5> <p>默认的项目模板中引入了一个AccountController类，可以操作以下用户行为： <ul> <li>登陆  <li>登出 <li>注册  <li>改变密码 </li></ul> <p>考虑到大部分应用程序会涉及用户及验证，这部分功能为开发人员节省了时间。默认设置的MembershipProvider使用了SQL Server快速版，不过您也可以使用其他SQL Server版本，或者已存在的数据库。 <h4>新增的授权和异常处理的Filter（过滤器）类型</h4> <p>这次发布包含两个新的Filter类型：Authorization（授权）和Exception（异常）Filter。这些Filter会在其他类型的Action Filter（动作过滤器）之前执行，而与其它Filter的作用域无关。 <p>以下功能对新的类型提供支持： <ul> <li>新增<strong>IAuthorizationFilter</strong>和<strong>IExceptionFilter</strong>接口。Authorization Filter保证在其它Action Filter之前执行。即使某个Filter已经处理了请求中的异常，Exception Filter也会被执行。这一点在捕获和记录异常时非常有用。  <li><strong>AuthorizeAttribute</strong>类。这是个IAuthorizationFilter的具体实现。它为action方法提供了保护。  <li><strong>HandleErrorAttribute</strong>类。这是个IExceptionFilter的默认实现。 它可以捕获异常，并且在异常发生时指定一个视图进行输出。 </li></ul> <h5>新的Output Cache Filter</h5> <p>OutPutCacheAttribute利用了ASP.NET中健壮的缓存机制，为Action方法实现了输出缓存。 <h5>为ASP.NET AJAX的改变</h5> <p>框架中添加了一些新的AJAX辅助方法，它们利用AjaxOptions类来提供异步操作。 <ul> <li><strong>ActionLink - </strong> 生成一个指向某个Action方法的a标签。点击这个链接会异步调用Action方法。一个典型的使用方式是在得到响应之后更新某个DOM元素，这个DOM元素可以使用AjaxOptions.UpdateTargetId属性来指定。  <li><strong>Form - </strong>生成一个HTML异步提交的表单。典型的使用方式则是异步提交一个表单，然后和ActionLink一样，得到响应之后更新一个AjaxOptions.UpdateTagetId指定的DOM元素。 </li></ul> <p>Scott Hanselman在他的<a href="http://www.hanselman.com/blog/ASPNETMVCPreview4UsingAjaxAndAjaxForm.aspx">博客文章</a>中提供了一个不错的示例来演示这些功能。 <h5>Routes中的命名空间</h5> <p>这个框架之前的版本中用于查找Controller的方法偶尔会出现问题而引发异常。这次的版本通过为ControllerBuilder类引入DefaultNamespaces属性修补了这个问题。以下是这个实现的示例：<pre>Application_Start( sender, EventArgs e) <br>{<br>    ControllerBuilder.Current.DefaultNamespaces.Add();<br>    ControllerBuilder.Current.DefaultNamespaces.Add();<br>    ControllerBuilder.Current.DefaultNamespaces.Add();<br><br><br>}</pre>
<h5>增强TempData可测试性的新接口</h5>
<p>新版本框架引入了一个新接口：<strong>ITempDataProvider</strong>。这允许Controller使用<strong>SessionStateTempDataProvider</strong>以外的Provider，这增强了可测试性，并允许开发人员使用cookies而不是会话状态。
<h5>ActionInvoker扩展性的改进</h5>
<p>ActionInvoker中添加了一些virtual方法，能够在高级情景下用于扩展invoker。这些新方法包括：
<ul>
<li><strong>GetFiltersForActionMethod - </strong>返回所有的Filter（Authorization、Action和Expcetion Filter）。 
<li><strong>InvokeActionResultWithFilters</strong> - 调用Action方法返回的ActionResult对象中的ExecuteReuslt方法，并且将所有的Filter应用到Action方法上。 
<li><strong>InvokeAuthorizationFilters</strong> - 执行所有运用在Action方法上的Authorization Filter。 
<li><strong>InvokeExceptionFilters</strong> - 执行所有运用在Action方法上的Exception Filter。 </li></ul>
<p>这个预览版本能够在<u><a href="http://www.codeplex.com/aspnet/Wiki/View.aspx?title=MVC&amp;referringTitle=Home">CodePlex</a></u>上下载到。请仔细阅读Readme文件中的内容，以及CodePlex上对所有<a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=15389">新特性细节的描述</a> 。
<p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2008/07/aspnet-mvc-preview4">Microsoft Releases ASP.NET MVC Framework Preview 4</a></p> <img src ="http://www.cnblogs.com/kaima/aggbug/1274766.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41930/" target="_blank">[新闻]科学家在世界最大对撞机中观察到首批粒子</a>]]></description></item><item><title>为什么会出现ASP.NET平台下的MVC框架？(转)</title><link>http://www.cnblogs.com/kaima/archive/2008/08/23/1274661.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Sat, 23 Aug 2008 05:26:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/23/1274661.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1274661.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/23/1274661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1274661.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1274661.html</trackback:ping><description><![CDATA[<p class="info">作者 <strong>Jonathan Allen</strong>译者 <strong>赵劼</strong>&nbsp; <a href="http://www.infoq.com/cn/news/2007/12/MVC-vs-Web-Forms">http://www.infoq.com/cn/news/2007/12/MVC-vs-Web-Forms</a><br />
<br />
Rick Strahl在他<a id="n2tu" title="对ASP.NET平台下的Web Forms和MVC框架的观察" href="http://west-wind.com/weblog/posts/198731.aspx" target="_blank">对ASP.NET平台下的Web Form和MVC框架的观察</a>中首先谈到了Web Forms的强大之处。他提到，Web Forms已经被证明是一个非常稳定和成熟的平台。即使在性能要求非常高的情况下，它也不太会出现扩展方面的问题。同时，Rick还认为从Web Froms入门Web开发是一件非常容易的事情。&nbsp;</p>
<blockquote>微软设计了一个完整Web开发环境，使得构建Web应用有了新的体验，开发人员只需在一个可视化设计器中拖放控件、并且在表单中设置属性即可。与此同时，开发人员可以编写代码来响应事件，这使得对于程序逻辑的操作变得非常直观，就好像并非在开发一个Web应用一样。Web Forms模型提供了一个高度抽象的框架，使得入门变得非常容易。但是它也容易造成一些问题，因为它在很多方面将开发人员和低端的Web机制隔离开来。我稍候将回过来再谈一下这个次要的问题。 </blockquote>
<p>他在总结中谈到，这个框架有着非常强大的扩展能力，并且肯定了它对自定义控件这一产业所做出的贡献（可能ASP.NET控件厂商比其他平台下的总和还要多）。</p>
<p>对&#8220;高度抽象&#8221;进行了褒扬之后，Rick开始阐述它的缺点。</p>
<blockquote>这既是一种幸运也是一个祸根。Web Forms让开发人员能够轻松地拖放控件，并且通过响应页面和控件的各种事件来快速开发Web应用。这一点很不错，但是首先这种高度的抽象使很多开发人员完全忽略了——甚至从没有了解过在这背后HTML是如何运作的。这往往会产生无法通过校验的HTML代码，或者是一些非常冗余，难以管理的HTML布局，这对于页面设计人员非常不友好。同时，如果没有合理控制ViewState的话，你很容易得到一个包含大量ViewState的页面，它的尺寸远远超过所需的内容，最终使得页面打开异常缓慢。<br />
<br />
Web Forms框架的缺点之一，就是微软在这个抽象背后构建了一个非常复杂的引擎，它给页面的执行过程带来了许多的负面效应。如果你曾经构建过包含大量组件的复杂页面，就会发现某些时候要协调好数据绑定，页面生成等事件的顺序，并且在页面的生命周期中选择恰当的时间来设置不同的控件是一件非常困难的事情。你是否曾经在Init、Load或者PreRender事件中加载过数据？你是否在PostBack事件中进行过赋值？Web Forms需要服务器端的一个独立的表单中进行操作，因此你可能无法轻易地将它分解成小的逻辑单元。在一些复杂情况下，事件处理程序会变得非常庞大，你很难对它们的工作进行重构，最终你会得到许多难以维护的代码，并且几乎无法进行测试。 </blockquote>
<p>他继续详细讨论了ViewState，事件管理和PostBack机制的问题。对于这些内容还没有做到了如指掌的ASP.NET开发人员应该通过文章内容再努力学习一下。</p>
<p>有个问题可能会使非.NET平台的开发人员感到非常惊讶：我们很难在设计期间就确定一个控件的ID。由于文档中少有提及的命名容器链（Naming Container Chain）存在一定的缺陷，我们只有在运行时期才能知道&#8220;txtPassword&#8221;控件最终会获得一个形如&#8220;PublicSiteTemplate1_ctl00_txtPassword&#8221;的ID。而在使用其它技术开发的普通页面中，这应该是一个相对较短的ID。</p>
<p>含糊不清的控件ID以及ViewState对于如今的Web 2.0站点来说都是严重的问题。唯一不会受到ViewState带来的负面影响的框架是ASP.NET AJAX，但这还是一个不成熟的类库。（<strong>译者注：</strong>事实上，如果您使用了ASP.NET AJAX中的UpdatePanel控件，在客户端与服务器端交互的过程中依旧需要传递页面上所有的ViewState。另外，2006年最佳个人定制页面网站<a href="http://www.pageflakes.com/">http://www.pageflakes.com/</a>，也是基于当时的ASP.NET AJAX框架开发的，并且集成到.NET Framework 3.5中的ASP.NET AJAX又在各方面有了更进一步的改进，如果武断地称之为一个不成熟的类库未免有失偏颇）。</p>
<blockquote>对我来说，Microsoft AJAX总体上无法成为我的首选客户端框架。它体积很大，并不十分模块化，而且对于客户端开发人员来说，一个本应该包含更多有用核心功能的客户端脚本框架，它提供的功能又非常有限。如果你将它和jQuery，Prototype，MooTools等包含强大功能的类库相比，感觉Microsoft AJAX严重缺乏一些在实际使用中有用的功能。同时，它包含的控件构建模型又显得死板而复杂，这些都无法成为选择Microsoft AJAX的理由，除非你想使用UpdatePanel或者AJAX Control Tookit中的服务器端控件。 </blockquote>
<p>接着Rick又谈到了Web Forms开发人员很容易将业务逻辑和表现层逻辑混合在一起。虽然使用Web Forms也可以将两者很好的分开，但是做到这点需要遵守相当数量的规则。</p>
<p>对于专业人员来说，Web Forms难以测试是一个更大的问题。Web Forms几乎无法做到自动测试，一部分原因是由于我们很难模拟Context、Response和Session对象，至于其他的原因还有例如我们很难处理它的事件驱动模型等。</p>
<p>MVC框架完全将这些缺点抛至一边，因为它舍弃了Page类和其他相关的负担。Rick是这样描述它的：</p>
<blockquote>微软创建了另一种Http Handler来实现MVC框架，所以它完全与Page类无关，也避免了很多Web Forms框架所带来的复杂性。MVC框架的一个关键特性是提供了一种为特定任务生成内容而创建自定义视图（View）的能力。而控制器（Controller）负责使用各种模型来完成应用的核心任务，然后为视图提供生成页面内容所需的数据。例如，我们很容易想到为RSS或者其它XML输出的数据，亦或是类似登陆框或者出错页面来编写可复用的视图。然而，在默认情况下，生成视图的输出内容依旧使用了ASPX页面：ViewPage类。它基于Page类，但是并不会直接被HTTP Handler执行，而是被MVC引擎用作内容生成器，这比在完整的Web Forms框架中运行传统的ASPX页面要显得轻量了许多。 </blockquote>
<p>我们还是可以使用Web Forms框架中的部分控件和一些技巧，不过前提条件是它们不能依赖Post Back。和在页面中使用控件的传统开发方式不同的是，开发人员会发现他们需要使用大量的内联代码，就好像传统的ASP应用一样。</p>
<blockquote>MVC模型在工作时是通过URL来选择应该执行哪个指定的控制器方法，并且任何的操作都会被引导至控制器中的特定方法。微软开发的引擎使用了类似Ruby（译者注：确切的说应该是Rails框架，Ruby只是一种开发语言）的机制来解析干净的URL（例如<a href="http://localhost/Customers/Show/1">http://localhost/Customers/Show/1</a>），并且根据URL的格式将它们引导至特定的控制器，这种引导机制——就像MVC框架中的大部分东西一样——能够被很轻易地重新定义，这样你就能够使用不同的URL语法来将引导至特定的控制器。 </blockquote>
<p>同时，Rick发现一些有趣的东西，因为事物在过去十年中的发展形成了一个循环。</p>
<blockquote>Web Forms模型曾经是.NET平台下Web开发最钟意的方式，在这个讨论中谈到这点显得多少有些有趣。事实上，我觉得有些讽刺的是，MVC框架在一定程度上回到了传统的ASP风格，那便是直接使用脚本来手动生成HTML的开发方式，而现在只是提供了一种更为严格的做法来将这种开发方式和代码逻辑区分开来。我还记得在早些时候，那些ASP.NET的疯狂追随者们是多么不屑使用内联的脚本标签，或者使用显式的URL而不是PostBack来进行开发的做法，而其中的一些人现在又毫不犹豫地张开双臂去迎接MVC框架，这难道不讽刺吗？<br />
<br />
现在要确定MVC框架是否真正满足大多数Web开发人员的需要还为时过早。从现在所表现出来的结果上看，即使是开发简单的页面，MVC框架也需要大量的代码。我看过早期版本的MVC框架，但是并不清楚如何才能有效地编写一些更加复杂的页面，除非编写大量的选择语句来引导代码，我很难确定究竟页面上的哪一部份需要更新。以前我曾经开发过几个和MVC框架运作方式比较接近的Web开发框架，根据我的经验，它们总能很轻易的用于简单的页面开发，但是一旦页面上需要出现各种不同的、且相互独立的组件时，这些做法都逐渐出现问题了。使用基于无状态的控制器的做法来管理复杂度高的应用，要比目前Web Forms框架提供的功能要困难许多。至于这个框架会如何发展，以及最终会形成什么样的模式来处理复杂任务，我们都还需要拭目以待。如果关注一些Java或.NET平台下已经出现一段时间的MVC开发方式并加以比较，则可能会带来不小的帮助。 </blockquote>
<p>&nbsp;最后，Rick是这样总结的：</p>
<blockquote>到目前为止，我还没有打算将所有的希望押在一个新出现的，还没有被证明成功的框架，因为这好比连小孩和洗澡水一起倒了。Web Forms还是有许多优点，微软现在只是决定尝试一些新的事物，但这并不意味着我们必须完全转向它们。毕竟MVC框架出现的时间还不够长，现在还不能算作久经考验。虽然MVC框架很快就会吸引一批开发人员——但是对于其余像我们这样的人，微软还必须给出一个无比强大的框架，它至少需要能够在灵活性，扩展性和可用性等方面和Web Forms相媲美。有趣的事情还在前面，我也会兴致勃勃地关注它们&#8230;&#8230; </blockquote><strong>查看英文原文：</strong><a id="w82w" title="Why MVC for ASP.NET" href="http://www.infoq.com/news/2007/12/MVC-vs-Web-Forms" target="_blank">Why MVC for ASP.NET?</a> 
  <img src ="http://www.cnblogs.com/kaima/aggbug/1274661.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41930/" target="_blank">[新闻]科学家在世界最大对撞机中观察到首批粒子</a>]]></description></item><item><title>IE6环境下遭遇winow.location.href=''的跳转bug</title><link>http://www.cnblogs.com/kaima/archive/2008/08/22/1273808.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Fri, 22 Aug 2008 02:25:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/22/1273808.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1273808.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/22/1273808.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1273808.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1273808.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;goUrl(x)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.location.href</span><span style="color: #000000">=</span><span style="color: #000000">x;<br />
}<br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">script&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:goUrl('http://www.sina.com');</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">跳转1</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">a&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:void(0);</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:goUrl('http://www.sina.com');</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">跳转2</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">a&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:void(0);</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:goUrl('http://www.sina.com');return&nbsp;false;</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">跳转3</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">a&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">#</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:goUrl('http://www.sina.com');</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">跳转4</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">a&gt;</span><span style="color: #000000"><br />
</span><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">###</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:goUrl('http://www.sina.com');</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">跳转5</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">a&gt;</span></div>
<p>&nbsp;</p>
<p>测试环境IE6,IE7,Firefox 3。</p>
<p>&nbsp;</p>
<p>跳转1和2在IE6环境下无效，3、4、5在IE6,IE7,Firefox3.01下测试均能 通过，。</p>
<p>跳转4和5最简洁。</p>
<p>关键在于&lt;a&gt;的href属性,<span style="color: red"><span style="color: #000000"><span style="color: #000000">空链接用"#","###"。</span></span></span></p>
<p><span style="color: red"><span style="color: #000000"><span style="color: #000000">为了不返回网页顶端。</span></span></span></p>
<p><span style="color: red"><span style="color: red">空链接推荐用"###"。</span></span></p>
 <img src ="http://www.cnblogs.com/kaima/aggbug/1273808.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41929/" target="_blank">[新闻]阿里巴巴利润增1.36倍</a>]]></description></item><item><title>SilverLight开发系列第3步：制作鼠标跟随效果，顺便熟悉一些基本概念：群组 和 动画</title><link>http://www.cnblogs.com/kaima/archive/2008/08/20/1270668.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Wed, 20 Aug 2008 15:32:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/20/1270668.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1270668.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/20/1270668.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1270668.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1270668.html</trackback:ping><description><![CDATA[<p>上一篇：<a class="postTitle2" id="homepage1_HomePageDays_DaysList_ctl01_DayItem_DayList_ctl00_TitleUrl" href="http://www.cnblogs.com/kaima/archive/2008/08/17/1269637.html"><font color="#0000ff">SilverLight开发系列第2步：使用vs2008和Blend 2.5打造Hellow World程序</font></a> </p>
<p>&nbsp;</p>
<p>SL 2.0 目前扩展到了5种用来布局的<span style="color: red">群组</span><span style="color: red">(Group)</span>:<strong>Grid</strong>，<strong>Canvas</strong>，<strong>StackPanel</strong>，<strong>ScrollViewer</strong>，<strong>Border</strong>。Blend 2.5把它们放在一个工具位上。<br />
<img height="137" alt="" src="http://images.cnblogs.com/cnblogs_com/kaima/SilverLightProgramSerial/Mouse/1.jpg" width="124" border="0" /></p>
<p>我自己的理解，简单来说，Grid相当于Html的表格(&lt;table&gt;)，用来进行复杂布局<span style="color: #999999">（html的table多行多列、嵌套，在web2.0没来之前，我们一直用的布局方式）</span>；Canvas就是一张单行单列的简单表格；StackPanel相当于单列多行、或者单行多列的表格；ScrollViewer是带滚动条的表格；border是只有边框的布局对象（不带背景的）。良好的习惯，一个页面至少带一个Group对象。当然你一定不放Group对象也行，只是做效果、定位等会麻烦很多。</p>
<p>&nbsp;</p>
<p>SL2.0 分两种基本动画类别：<span style="color: red">&#8220;From/To/By&#8221;动画</span>和<span style="color: red">关键帧动画<span style="color: #999999">（做过flash的朋友对于关键桢动画都有所了解）</span></span>。这两种类别是纯概念，NET3.5框架没有具体实现他们的基类（可能我没发现）。下表描述了动画类别和命名约定</p>
<p>
<table border="1">
    <tr>
            <th>类别</th>
            <th>描述</th>
            <th>命名约定</th>
        </tr>
        <tr>
            <td>"From/To/By" 动画</td>
            <td>在开始值和目标值之间的动画，或者给开始值添加一个偏移值。
            <ul>
                <li>要指定开始值，设置动画的 From 属性。</li>
                <li>要指定结束值，设置动画的 To 属性。</li>
                <li>要指定偏移值，设置动画的 By 属性。 </li>
            </ul>
            <p>本部分中的例子使用这些动画，因为他们使用起来都是最简单的。</p>
            </td>
            <td>&lt;<em>Type</em>&gt;<code>Animation</code></td>
        </tr>
        <tr>
            <td>关键帧动画</td>
            <td style="width: 571px; height: 59px">通过使用关键帧对象在指定的一系列值之间进行动画。关键帧动画比 From/To/By 动画更强大，这是因为你可以指定任意数目的目标值，甚至控制它们的内插方法。某些类型只能使用关键帧动画。</td>
            <td>&lt;<em>Type</em>&gt;<code>AnimationUsingKeyFrames</code></td>
        </tr>
    </table>
</p>
<p>&nbsp;</p>
<p>SL2.0 按变化效果（属性）分，有三种常用<span style="color: red">动画对象(Animation Object)</span>，位于NET3.5框架的System.Windows.Media.Animation名称空间下。动画对象都是继承自时间线(Timeline对象，借鉴的Flash的概念)。</p>
<p>&nbsp;下表显示了几张常见的动画类型和他们使用的属性。</p>
<div class="tableSection">
<table cellspacing="2" cellpadding="5" border="1">
    <tr>
            <th>属性类型 </th>
            <th>对应的基本 From/To/By 动画 </th>
            <th>对应的关键帧动画 </th>
            <th>使用例子 </th>
        </tr>
        <tr>
            <td>
            <p>Color </p>
            </td>
            <td>
            <p>ColorAnimation </p>
            </td>
            <td>
            <p>ColorAnimationUsingKeyFrames </p>
            </td>
            <td>
            <p>改变颜色</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>Double </p>
            </td>
            <td>
            <p>DoubleAnimation </p>
            </td>
            <td>
            <p>DoubleAnimationUsingKeyFrames </p>
            </td>
            <td>
            <p>改变高度和宽度</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>Point </p>
            </td>
            <td>
            <p>PointAnimation </p>
            </td>
            <td>
            <p>PointAnimationUsingKeyFrames </p>
            </td>
            <td>
            <p>旋转</p>
            </td>
        </tr>
    </table>
</div>
<div class="tableSection">&nbsp;</div>
<p>概念可能有点枯燥，这两种基本概念对以后的学习都很重要。如果暂时不理解也无所谓。</p>
<p>&nbsp;</p>
<p>下面跟我来一起做一个简单的鼠标跟随效果。目前Blend2.5支持PNG,JPG两种常用WEB用图片格式，GIF不支持，其他格式未测试。</p>
<p>新建一个项目，新建一个Images目录，拷贝一个png鼠标图象</p>
<p><img height="184" alt="" src="http://images.cnblogs.com/cnblogs_com/kaima/SilverLightProgramSerial/Mouse/2.jpg" width="223" border="0" /></p>
<p><br />
</p>
<p>然后拖放到工作区中。</p>
<p>&nbsp;<img height="211" alt="" src="http://images.cnblogs.com/cnblogs_com/kaima/SilverLightProgramSerial/Mouse/3.jpg" width="427" /></p>
<p>&nbsp;</p>
<p>&nbsp;Canvas背景可以设置。首先选择</p>
<p><img height="68" alt="" src="http://images.cnblogs.com/cnblogs_com/kaima/SilverLightProgramSerial/Mouse/4.jpg" width="267" />&nbsp;</p>
<p>进入属性面板，看到Background了吧：）自己去玩玩 。<br />
</p>
<p><img height="296" alt="" src="http://images.cnblogs.com/cnblogs_com/kaima/SilverLightProgramSerial/Mouse/5.jpg" width="284" />&nbsp;</p>
<p>&nbsp;</p>
<p>这些好了之后，选择Page.xaml，点右键 ，选择&#8220;Edit in Visual Studio&#8221;进入VS2008。</p>
<p>&nbsp;</p>
<p>给Canvas和图片设置x:Name,并给Canvas添加MouseMove事件。XAML和CS代码分别如下。<br />
</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">&lt;</span><span style="color: #800000">UserControl<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;xmlns:x</span><span style="color: #0000ff">="http://schemas.microsoft.com/winfx/2006/xaml"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;x:Class</span><span style="color: #0000ff">="MouseFollow.Page"</span><span style="color: #ff0000">&nbsp;xmlns:MouseFollow</span><span style="color: #0000ff">="clr-namespace:MouseFollow"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Canvas&nbsp;</span><span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="bg"</span><span style="color: #ff0000">&nbsp;Height</span><span style="color: #0000ff">="800"</span><span style="color: #ff0000">&nbsp;Width</span><span style="color: #0000ff">="1024"</span><span style="color: #ff0000">&nbsp;Background</span><span style="color: #0000ff">="Gray"</span><span style="color: #ff0000">&nbsp;MouseMove</span><span style="color: #0000ff">="bg_MouseMove"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Image&nbsp;</span><span style="color: #ff0000">x:Name</span><span style="color: #0000ff">="myImage"</span><span style="color: #ff0000">&nbsp;Canvas.Left</span><span style="color: #0000ff">="180"</span><span style="color: #ff0000">&nbsp;Canvas.Top</span><span style="color: #0000ff">="62"</span><span style="color: #ff0000">&nbsp;Height</span><span style="color: #0000ff">="26.663"</span><span style="color: #ff0000">&nbsp;Width</span><span style="color: #0000ff">="26.663"</span><span style="color: #ff0000">&nbsp;Source</span><span style="color: #0000ff">="Images/cursor.png"</span><span style="color: #ff0000">&nbsp;Stretch</span><span style="color: #0000ff">="Fill"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Canvas</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">UserControl</span><span style="color: #0000ff">&gt;</span></div>
<p style="color: #999999">&nbsp;注意我删除了<span style="color: #800000">UserControl的高度和宽度</span>属性，为的是让他自动适应浏览器高宽。仅仅是让UserControl自动适应，在本例Canvas不会自适应浏览器高宽。</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;MouseFollow<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">partial</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Page&nbsp;:&nbsp;UserControl<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Page()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Required&nbsp;to&nbsp;initialize&nbsp;variables</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;bg_MouseMove(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;MouseEventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Point&nbsp;p&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;e.GetPosition(sender&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;FrameworkElement);</span><span style="color: #008000">//</span><span style="color: #008000">获取鼠标位置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myImage.SetValue(Canvas.LeftProperty,&nbsp;p.X);</span><span style="color: #008000">//</span><span style="color: #008000">设置鼠标图象x坐标</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myImage.SetValue(Canvas.TopProperty,&nbsp;p.Y);</span><span style="color: #008000">//</span><span style="color: #008000">设置鼠标图象y坐标</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bg.Cursor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Cursors.None;</span><span style="color: #008000">//</span><span style="color: #008000">在画布上隐藏鼠标</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myImage.Cursor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Cursors.None;</span><span style="color: #008000">//</span><span style="color: #008000">这里加一个，在图片上也隐藏鼠标</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
<p>cs代码我都写注释了，应该很好懂。只要熟悉了WPF的类库，SL开发不难。</p>
<p>&nbsp;</p>
<p>最后测试效果看看，成功！</p>
<p>&nbsp;</p>
<p><img height="501" alt="" src="http://images.cnblogs.com/cnblogs_com/kaima/SilverLightProgramSerial/Mouse/6.jpg" width="493" /><br />
</p>
<p>&nbsp;</p>
<p>最后附上源码<a href="http://files.cnblogs.com/kaima/MouseFollow.rar">MouseFollow.rar</a> <br />
</p>
<img src ="http://www.cnblogs.com/kaima/aggbug/1270668.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41928/" target="_blank">[新闻]Google Gears覆盖四大浏览器 Safari版推出</a>]]></description></item><item><title>再推一款正则表达式测试工具</title><link>http://www.cnblogs.com/kaima/archive/2008/08/20/1271975.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Wed, 20 Aug 2008 02:16:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/20/1271975.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1271975.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/20/1271975.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1271975.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1271975.html</trackback:ping><description><![CDATA[<p>作者<a href="http://www.chenjiliang.com/Article/View.aspx?ArticleID=2139&amp;TypeID=101">阿良</a></p>
<p>这个正则表达式测试工具件是阿良用.NET开发的，功能比较强大，非常适合.NET开发人员。能生成C#,VB等代码，支持各种替换，支持正则表达式模板导入导出，非常灵活。比较符合国内程序员的操作习惯。</p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/kaima/ALiangRegTestTool.jpg" border="0" />&nbsp;<br />
&nbsp;<br />
<a href="http://www.chenjiliang.com/Article/Download.aspx?ID=756&amp;FileName=RegularExpressionTest2008_3_11.rar">点击下载</a></p>
<p>&nbsp;</p>
<p>正则表达式基础学习</p>
<p><a href="http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F">http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F</a></p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/kaima/aggbug/1271975.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41928/" target="_blank">[新闻]Google Gears覆盖四大浏览器 Safari版推出</a>]]></description></item><item><title>Silverlight视频教程、资源下载。如果你觉得看图文不够形象，不够生动，那就看看视频吧。</title><link>http://www.cnblogs.com/kaima/archive/2008/08/19/1271802.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Tue, 19 Aug 2008 15:54:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/19/1271802.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1271802.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/19/1271802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1271802.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1271802.html</trackback:ping><description><![CDATA[<div class="t_msgfont" id="postmessage_4127674">虽然都是老外做Silverlight视频，讲的也是洋文，相信聪明的你，不开喇叭，都能理解老外的意思:)Very Simple!</div>
<div class="t_msgfont">&nbsp;</div>
<div class="t_msgfont">&nbsp;&nbsp;&nbsp;1. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Hello-World/" target="_blank">Silverlight - Hello World</a><br />
&nbsp; &nbsp;2. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Anatomy-of-an-Application/" target="_blank">Silverlight - Anatomy of an Application</a><br />
&nbsp; &nbsp;3. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-The-VS-Environment/" target="_blank">Silverlight - The VS Environment</a><br />
&nbsp; &nbsp;4. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Content-Controls/" target="_blank">Silverlight - Content Controls</a><br />
&nbsp; &nbsp;5. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Built-In-Controls/" target="_blank">Silverlight - Built-In Controls</a><br />
&nbsp; &nbsp;6. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Width-Height-Margins-Padding-Alignment/" target="_blank">Silverlight - Width, Height, Margins, Padding, Alignment</a><br />
&nbsp; &nbsp;7. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-a-GridSplitter/" target="_blank">Silverlight - Using a GridSplitter</a><br />
&nbsp; &nbsp;8. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Grid-Layout/" target="_blank">Silverlight - Grid Layout</a><br />
&nbsp; &nbsp;9. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-StackPanel-Layout/" target="_blank">Silverlight - StackPanel Layout</a><br />
&nbsp;&nbsp;10. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Canvas-Layout/" target="_blank">Silverlight - Canvas Layout</a><br />
&nbsp;&nbsp;11. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Databinding-UI-to-NET-Classes/" target="_blank">Silverlight - Databinding UI to .NET Classes</a><br />
&nbsp;&nbsp;12. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Simple-Styles/" target="_blank">Silverlight - Simple Styles</a><br />
&nbsp;&nbsp;13. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Custom-Types-in-XAML/" target="_blank">Silverlight - Custom Types in XAML</a><br />
&nbsp;&nbsp;14. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Binding-with-Conversion/" target="_blank">Silverlight - Binding with Conversion</a><br />
&nbsp;&nbsp;15. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-List-Based-Data-Binding/" target="_blank">Silverlight - List Based Data Binding</a><br />
&nbsp;&nbsp;16. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Simple-User-Control/" target="_blank">Silverlight - Simple User Control</a><br />
&nbsp;&nbsp;17. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Templating-a-Button/" target="_blank">Silverlight - Templating a Button</a><br />
&nbsp;&nbsp;18. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Resources-from-XAPDLLSite-Of-Origin/" target="_blank">Silverlight - Resources from XAP/DLL/Site Of Origin</a><br />
&nbsp;&nbsp;19. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Animations--Storyboards/" target="_blank">Silverlight - Animations &amp; Storyboards</a><br />
&nbsp;&nbsp;20. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Uploads-with-WebClient/" target="_blank">Silverlight - Uploads with WebClient</a><br />
&nbsp;&nbsp;21. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Downloads-with-WebClient/" target="_blank">Silverlight - Downloads with WebClient</a><br />
&nbsp;&nbsp;22. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Calling-HTTPS-Web-Services/" target="_blank">Silverlight - Calling HTTPS Web Services</a><br />
&nbsp;&nbsp;23. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Calling-Web-Services/" target="_blank">Silverlight - Calling Web Services</a><br />
&nbsp;&nbsp;24. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Making-Cross-Domain-Requests/" target="_blank">Silverlight - Making Cross Domain Requests</a><br />
&nbsp;&nbsp;25. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-HttpWebRequest/" target="_blank">Silverlight - Using HttpWebRequest</a><br />
&nbsp;&nbsp;26. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-File-Dialogs-and-User-Files/" target="_blank">Silverlight - File Dialogs and User Files</a><br />
&nbsp;&nbsp;27. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-Sockets/" target="_blank">Silverlight - Using Sockets</a><br />
&nbsp;&nbsp;28. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-Isolated-Storage/" target="_blank">Silverlight - Using Isolated Storage</a><br />
&nbsp;&nbsp;29. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-NET-Code-Modifying-HTML/" target="_blank">Silverlight - .NET Code Modifying HTML</a><br />
&nbsp;&nbsp;30. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-Isolated-Storage-Quotas/" target="_blank">Silverlight - Using Isolated Storage Quotas</a><br />
&nbsp;&nbsp;31. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Calling-JavaScript-from-NET/" target="_blank">Silverlight - Calling JavaScript from .NET</a><br />
&nbsp;&nbsp;32. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Evaluating-JavaScript-from-NET-Code/" target="_blank">Silverlight - Evaluating JavaScript from .NET Code</a><br />
&nbsp;&nbsp;33. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Handling-HTML-Events-in-NET-Code/" target="_blank">Silverlight - Handling HTML Events in .NET Code</a><br />
&nbsp;&nbsp;34. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Handling-NET-Events-in-JavaScript/" target="_blank">Silverlight - Handling .NET Events in JavaScript</a><br />
&nbsp;&nbsp;35. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Calling-NET-from-JavaScript/" target="_blank">Silverlight - Calling .NET from JavaScript</a><br />
&nbsp;&nbsp;36. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Displaying-a-Custom-Splash-Screen/" target="_blank">Silverlight - Displaying a Custom Splash Screen</a><br />
&nbsp;&nbsp;37. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Passing-Parameters-from-your-Web-Page/" target="_blank">Silverlight - Passing Parameters from your Web Page</a><br />
&nbsp;&nbsp;38. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Loading-Media-at-Runtime/" target="_blank">Silverlight - Loading Media at Runtime</a><br />
&nbsp;&nbsp;39. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Dynamically-Loading-AssembliesCode/" target="_blank">Silverlight - Dynamically Loading Assemblies/Code</a><br />
&nbsp;&nbsp;40. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-ReadingWriting-XML/" target="_blank">Silverlight - Reading/Writing XML</a><br />
&nbsp;&nbsp;41. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Using-Silverlight-Streaming/" target="_blank">Silverlight - Multiple Threads with BackgroundWorker</a><br />
&nbsp;&nbsp;42. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-InsertUpdateDelete-with-the-DataGrid/" target="_blank">Silverlight - Insert/Update/Delete with the DataGrid</a><br />
&nbsp;&nbsp;43. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Getting-Started-with-the-DataGrid/" target="_blank">Silverlight - Getting Started with the DataGrid</a><br />
&nbsp;&nbsp;44. <a href="http://channel9.msdn.com/posts/mtaulty/Silverlight-Embedding-Custom-Fonts/" target="_blank">Silverlight - Embedding Custom Fonts</a></div>
 <img src ="http://www.cnblogs.com/kaima/aggbug/1271802.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41927/" target="_blank">[新闻]Internet Explorer 8 Beta 2 发布</a>]]></description></item><item><title>推荐一款Log4net 日志浏览器：Log4Net Dashboard </title><link>http://www.cnblogs.com/kaima/archive/2008/08/19/1270871.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Tue, 19 Aug 2008 01:33:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/19/1270871.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1270871.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/19/1270871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1270871.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1270871.html</trackback:ping><description><![CDATA[<p>这款小巧的网站包挺好用的，界面也非常友好。<br />
也是免费的。非常方便使用log4net的开发人员阅读查找日志信息。</p>
<p>配置也非常方便。<br />
<img height="159" alt="Log4Net Dashboard " src="http://www.l4ndash.com/Portals/0/Picture/SummaryTable.JPG" width="435" border="0" /></p>
<p>&nbsp;</p>
<p>本地<a href="http://files.cnblogs.com/kaima/L4NDash23a.zip">下载Log4Net Dashboard 地址</a></p>
<p>&nbsp;</p>
<p style="color: #999999">PS:免费版只支持单机，呵呵，老外在这方面比较认真，不过已经非常好用了。团队里面人手一个，也不错。</p>
<img src ="http://www.cnblogs.com/kaima/aggbug/1270871.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41927/" target="_blank">[新闻]Internet Explorer 8 Beta 2 发布</a>]]></description></item><item><title>SilverLight开发系列第2步：使用vs2008和Blend 2.5打造Hellow World程序</title><link>http://www.cnblogs.com/kaima/archive/2008/08/17/1269637.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Sun, 17 Aug 2008 03:57:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/17/1269637.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1269637.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/17/1269637.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1269637.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1269637.html</trackback:ping><description><![CDATA[摘要: 简单介绍了VS2008配合Blend 2.5开发Hellow World程序的方法，有多种截图。开发流程和传统ASP.NET WEBFORM有异曲同工之妙。&nbsp;&nbsp;<a href='http://www.cnblogs.com/kaima/archive/2008/08/17/1269637.html'>阅读全文</a><img src ="http://www.cnblogs.com/kaima/aggbug/1269637.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41924/" target="_blank">[新闻]中国软件协会：SAP羞辱国产软件是不正当竞争</a>]]></description></item><item><title>SilverLight开发系列第1步：搭建开发环境</title><link>http://www.cnblogs.com/kaima/archive/2008/08/16/1269474.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Sat, 16 Aug 2008 11:08:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/16/1269474.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1269474.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/16/1269474.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1269474.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1269474.html</trackback:ping><description><![CDATA[<p><strong>在缺乏SilverLight中文教程的今天，新人要入门不容易，所以我根据自己阅读英文原档和实践经验，总结一个系列。首先介绍的是开发环境的搭建。</strong></p>
<p><strong></strong><span style="color: red">&nbsp;个人强烈推荐安装英文版的开发环境，因为英文版本最先更新，有了问题也是最先解决。</span></p>
<p><strong>1：安装VS2008</strong></p>
<p>下载地址：<a href="http://msdn.microsoft.com/en-us/vs2008/products/cc268305.aspx">http://msdn.microsoft.com/en-us/vs2008/products/cc268305.aspx</a></p>
<p>&nbsp;</p>
<p><strong>2：给VS2008打SP1补丁</strong></p>
<p>下载地址：<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=FBEE1648-7106-44A7-9649-6D9F6D58056E&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyID=FBEE1648-7106-44A7-9649-6D9F6D58056E&amp;displaylang=en</a></p>
<p>安装补丁要注意关闭其他应用软件以及杀毒软件，拔掉网线最好（避免杀毒软件关闭期遭遇木马）</p>
<p>&nbsp;</p>
<p><strong>3：安装VS2008专用SilverLight开发插件</strong></p>
<p>VS2008 SP1默认不安装Silverlight模版。需要手动下载Microsoft Silverlight Tools for Visual Studio 2008下载地址是：</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=50a9ec01-267b-4521-b7d7-c0dba8866434&amp;DisplayLang=en">http://www.microsoft.com/downloads/details.aspx?FamilyID=50a9ec01-267b-4521-b7d7-c0dba8866434&amp;DisplayLang=en</a></p>
<p>有多种语言版本。&nbsp;</p>
<p>下载前请按网页上的，提示卸载以前任何SL1.1或以前版本的 相关补丁。&nbsp;</p>
<p>下载安装后，新建工程，会出现SilverLight模版选项，此时，VS2008也能和Microsoft Expression Blend 结合使用了。</p>
<p><img alt="" src="http://images.cnblogs.com/cnblogs_com/shore/silverlight3.JPG" border="0" />（图用的博客园一位同仁的）&nbsp;</p>
<p>最后，<span style="color: red">注意安装顺序</span>。&nbsp;</p>
<p><span style="color: red"><span style="color: #0000ff"><span style="color: #0000ff">（1），卸载<a href="http://www.microsoft.com/silverlight/resources/install.aspx">Silverlight Runtime</a>(客户端插件)，<span style="color: #999999">经过个人测试，这步好像是必须的，不然第2步到最后会失败。如果失败，从第1步重来</span></span></span></span></p>
<p><span style="color: red"><span style="color: #0000ff"><span style="color: #0000ff">（2），安装Microsoft Silverlight Tools for Visual Studio 2008</span></span></span></p>
<p><span style="color: red"><span style="color: #0000ff">（3），然后安装<a href="http://www.microsoft.com/silverlight/resources/install.aspx">Silverlight Runtime</a></span></span></p>
<p>&nbsp;</p>
<p><strong>4：安装SilverLight设计工具软件Expression Blend 2.5</strong></p>
<p>下载的地址是：<a href="http://expression.microsoft.com/en-us/cc643423.aspx">http://expression.microsoft.com/en-us/cc643423.aspx</a></p>
<p>&nbsp;</p>
<p><strong>5：安装Deep Zoom Composer</strong></p>
<p>这个附加工具可以让你使用SilverLight的Deep Zoom特性。关于Deep Zoom，个人理解的话，<font face="宋体">简单地说，</font><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Calibri','sans-serif'">Deep Zoom</span><span style="font-size: 10.5pt; font-family: 宋体">技术就是能实时、非常有效率地创建size很小的图片缩略图。举例：对于一张3M以上size但是height和width很小的图片，你不用下载3M，Deep Zoom会自动快速地实时地创建一个size很小的缩略图代替3M的原图，这个过程你几乎不用做什么，可能这个缩略图只有10来K的size。这样的好处显而易见的，提升体验，避免无谓等待。具体应用可见<a href="http://memorabilia.hardrock.com/">http://memorabilia.hardrock.com/</a></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10.5pt; font-family: 宋体"><span style="color: #808080"><span style="font-size: 10.5pt; color: #808080; font-family: 宋体">如果1－5步都顺利，那你的环境应该搭建起来了。下一步，用SilverLight做第一个hello world程序，并练习vs2008和Blend工具的搭配使用。：）</span></span></span></p>
<p><br />
</p>
<img src ="http://www.cnblogs.com/kaima/aggbug/1269474.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41923/" target="_blank">[新闻]福布斯：Facebook网站十大最火爆游戏</a>]]></description></item><item><title>中国的软件人才是靠挖的</title><link>http://www.cnblogs.com/kaima/archive/2008/08/14/1268169.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Thu, 14 Aug 2008 11:40:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/14/1268169.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1268169.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/14/1268169.html#Feedback</comments><slash:comments>56</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1268169.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1268169.html</trackback:ping><description><![CDATA[<p>作为一个自由工作者，去过很多小软件公司做短期项目，有不少决策人员还抱着&#8220;不会慢慢培养的思想&#8221;，去让一些新人做商业性的、公司的重要项目，</p>
<p>&nbsp;</p>
<p>我觉得这是对资源的严重浪费。不仅耽误公司项目开发进度，而且耽误新人的学习进程。</p>
<p>&nbsp;</p>
<p>在国内，对于生存环境越来越恶劣的小公司、创业型公司而言，最迫切的两大目标莫过于：</p>
<p>1.服务型的公司要盈利；</p>
<p>2.项目、产品型的公司，要项目/产品尽快上线以便拉投资/销售；</p>
<p>盈利靠什么呢？当然是靠服务，服务得好，客户才能给钱。服务要人去做，经验丰富的老手、高手短时间内能提供高质量的服务，只有这样，服务型小公司才有竞争力。才能有生存盈利的可能。</p>
<p>同理，项目/产品尽快上线，当然是有经验的熟手，轻车熟路，才更有可能保证时间并保证质量地做上去。</p>
<p>让新人来做这些事情，在有限的时间内，进度是最大的问题，没有进度的公司，没有竞争力！无竞争力会导致饥饿 甚至 死亡。</p>
<p>&nbsp;</p>
<p><span style="color: red">培养人才，对小公司来说太昂贵了，决定之前慎重考虑。</span></p>
<p>&nbsp;</p>
<p>这里绝对没有贬低新人的意思，我自己就是来自小型创业公司，也做过创业型公司。中国软件人才，确实有很大一批成长自小型软件公司或创业型公司。</p>
<p>&nbsp;</p>
<p>小型软件公司或创业型公司，最大的缺点就是软件技术上&#8220;不规范&#8221;，&#8220;乱&#8221;（但最大的优点是，带头人有冲劲），学习上很难短期内学到那种软件开发的精髓，相信有不少来自小型公司的高手们，都是多年的辛苦摸索之后才&#8220;得道&#8221;的。新人在这种公司，很少的机会得到真正的锻炼。有时候迫于项目的压力，会让新人无所适从，选择逃避，以致于公司个人两败俱伤。</p>
<p>&nbsp;</p>
<p>我的意思是说，新人，完全可以选择一个更好的环境去学习锻炼自己。你们可以去用友、可以去阿里巴巴、金蝶、可以去Google、微软&#8230;&#8230;总之那种规范的、又充满朝气的公司、团队，这些地方一般都有健全的新人培养制度，是新人学习的理想乐园。另外那种软件外包公司(上地有不少)，也是不错的学习场所，虽然呆久了枯燥，但对于新人来说，一进去就能接触国际上通行的规范和合作思想，有机会的话，一定要抓住时机进去深造一下。实在进不了大公司，选择一些规范的、分工明确的小公司学习，也是不错的。</p>
<p>&nbsp;</p>
<p>所以，&#8220;<span style="color: red">中国的软件人才是靠挖的</span>&#8221;，这句话，应该适应绝大多数小型公司，也应该会适应不少大公司。</p>
<p><img alt="" src="http://www.cnblogs.com/Emoticons/qface/055243929.gif" /></p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/kaima/aggbug/1268169.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41922/" target="_blank">[新闻]谷歌允许用户评论搜索结果调整顺序</a>]]></description></item><item><title>修复Jscript(IE浏览器脚本引擎)异常</title><link>http://www.cnblogs.com/kaima/archive/2008/08/10/1264722.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Sun, 10 Aug 2008 10:25:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/10/1264722.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1264722.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/10/1264722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1264722.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1264722.html</trackback:ping><description><![CDATA[<p>今天IE出现不能处理JS脚本的问题，一开始怀疑IE坏了，但不知道具体坏在哪。</p>
<p>想到了重装IE，上网搜&#8220;重装IE&#8221;，结果给出的方法非常复杂，手头又没有Windows XP安装盘</p>
<p>想想手头还有Firefox可以用，打算先忍忍。</p>
<p>&nbsp;</p>
<p>后来在装DW CS3的时候，突然报错&#8220;因为未正确注册jscript，所以无法安装此软件。请修复jscript，然后在重新启动安装程序&#8221;（原来DW CS3的安装程序是JS ＋ HTML ＋ Adobe AIR做成的伪桌面程序），根据这句话，我得到了搜索关键字线索。</p>
<p>&nbsp;</p>
<p>上百度一搜关键字&#8220;修复 JScript&#8221;，找到了方法。实验后成功解决难题。</p>
<p>&nbsp;</p>
<p style="color: red">&#8220;开始&#8221;—&gt;&#8220;运行&#8221;。 <br />
输入regsvr32 jscript.dll后选择&#8220;确定&#8221; <br />
输入regsvr32 vbscript.dll 选择&#8220;确定&#8221;</p>
<img src ="http://www.cnblogs.com/kaima/aggbug/1264722.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41921/" target="_blank">[新闻]Internet 另一超级漏洞被公布</a>]]></description></item><item><title>AspNetPager，asp.net分页的最终解决方案！</title><link>http://www.cnblogs.com/kaima/archive/2008/08/09/1264188.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Sat, 09 Aug 2008 03:57:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/09/1264188.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1264188.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/09/1264188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1264188.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1264188.html</trackback:ping><description><![CDATA[<p>这款asp.net分页控件，支持很多新的特性，ajax、静态化地址分页等各种最新出现的特性。</p>
<p>&nbsp;</p>
<p>控件作者主页（含下载）是：<font face="Verdana"><a href="http://www.webdiyer.com/">http://www.webdiyer.com/</a></font></p>
<p>这个控件我用了几年了，最近的项目，又能用上它了。</p>
<p>&nbsp;</p>
<p>这几年来作者一直在更新维护，很能持之以恒。</p>
<p>真正免费、开源、使用方便的分页控件之一。</p>
<p>作者做了很多详细的例子和完整的教程，对于新手非常容易上手。</p>
<p>&nbsp;</p>
<p>再次感谢作者的辛勤劳动。</p>
  <img src ="http://www.cnblogs.com/kaima/aggbug/1264188.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41920/" target="_blank">[新闻]3 个独特的未来搜索引擎</a>]]></description></item><item><title>现实让我感到无奈，换了家新公司</title><link>http://www.cnblogs.com/kaima/archive/2008/08/02/1258752.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Sat, 02 Aug 2008 04:58:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/08/02/1258752.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1258752.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/08/02/1258752.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1258752.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1258752.html</trackback:ping><description><![CDATA[<p>目前在知春路盈都大厦上班，工作内容没有大的变化。</p>
<p>很舍不得原来的团队，但现实压迫得我不得不离开。 <br />
</p>
<p>感慨：一个工作上融洽的团队，好的项目，没有资金，是很致命的问题。即使人再优秀，团队再努力，解决温饱问题仍然是迫切需要的。</p>
<p>&nbsp;</p>
<p>遥想新中国初期的 &#8220;大跃进 &#8221;，&#8220;工业学大庆&#8221;，&#8230;&#8230;本意是好的，但是方式是不对的，主要矛盾也没有抓准。<br />
</p>
<p>&nbsp;</p>
<p>现在创业&#8220;大跃进 &#8221;，饿着肚子闹革命，这不好，很多时候，这真的很糟糕！<br />
</p>
<p>&nbsp; <br />
</p><img src ="http://www.cnblogs.com/kaima/aggbug/1258752.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41919/" target="_blank">[新闻]诺基亚新机N85 N79发布</a>]]></description></item><item><title>能简单才不简单，仿Flickr.com：基于Flash+jQuery的一次性划选多文件并上传</title><link>http://www.cnblogs.com/kaima/archive/2008/06/06/1215215.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Fri, 06 Jun 2008 08:56:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/06/06/1215215.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1215215.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/06/06/1215215.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1215215.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1215215.html</trackback:ping><description><![CDATA[摘要: <div><img src="http://www.adobe.com/images/store/product_boxshots/112x112/box_flash_cs3_grey_112x112.jpg"  align="right"/>
测试网址http://www.yluck.com/
其实我很想用silverlight+asp.net(C#)做一个，但是不太了解silverlight是否有flash那样的“一次性多选控件”。
欢迎讨论silverlight+asp.net(C#)的可行性
</div>&nbsp;&nbsp;<a href='http://www.cnblogs.com/kaima/archive/2008/06/06/1215215.html'>阅读全文</a><img src ="http://www.cnblogs.com/kaima/aggbug/1215215.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41918/" target="_blank">[新闻]数据库市场:微软和甲骨文快速进步 威胁IBM</a>]]></description></item><item><title>三五个人十来条枪 如何走出软件作坊成为开发正规军(转)</title><link>http://www.cnblogs.com/kaima/archive/2008/06/06/1214959.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Fri, 06 Jun 2008 02:20:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/06/06/1214959.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1214959.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/06/06/1214959.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1214959.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1214959.html</trackback:ping><description><![CDATA[<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 大家从各个开发语言的优缺点和适用领域，一直讨论到设计模式、框架、重构、单元测试，乃至敏捷编程，最后都讨论到了软件开发过程管理，甚至都谈到了盈利模式和中国软件</font><font face="Verdana">的悲哀。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 最后不了了之，都觉得改善中国内地现在的软件生产状况不可能。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 为什么呢？</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 我重新把这几天大家的讨论留言翻了一遍，发现大家的软件团队都存在着这样一种普遍现象</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 1、大部分人所在的公司，开发人员仅3-5人，多的在10人。别看就这几条枪，还从售前支持，软件开发，测试、打包发布、文档编写、实施安装、培训、技术支持都做。<br />
&nbsp;&nbsp;&nbsp; 这还不算什么，而且几乎是一个人负责一个产品或一个项目，一个人从头跟到尾，而且负责多个客户的维护工作。<br />
&nbsp;&nbsp;&nbsp; 这还不算什么，而且随时老板会找来八竿子打不着的新活，要的还挺紧，突然要开发，打乱了所有的计划，最后都懒的按计划行事，每天撞钟，老板有事就吩咐，没事就上网，还不让听歌，当然更不让打游戏。甚至还不让看技术书籍，呵斥不干工作。只能上网装作在工作。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 2、老板和员工互相斗智斗勇，在年终奖、报销、出差、平时福利上啊，都明争暗斗。老板卡的紧，员工就在项目和产品上下药，还不知道是谁占了谁便宜，谁给谁打了工。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 3、员工一边在刻苦钻研各种开发工具，阅读源代码，学习做DEMO例子，阅读UML、设计模式、单元测试、敏捷编程等等，一边却懒的修改现在公司的产品，有问题就打补丁，客户不嚷嚷就懒的修改，代码不优化，界面不友好，架构没架构，代码不封装</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 但是，在讨论中，我时时都强烈感觉到，大家是想把产品开发好，把开发过程管理的井井有条，但是都心有余而力不足。阅读了N多软件工程的书籍，从重型方法到轻型方法都阅读了，但都无法把现在的开发状态一点点扭转好。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 许多人想闹革命，把现在这些产品和团队都砸塌，然后重新来过，但这只是梦想，说说而已。只能希冀下一次跳槽，能找到一个好的公司，把自己平生所学全部发挥出来，但这好像也只是梦想，因为交流了一下，大家彼此的境况基本相同。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 一些极端主义者自己开了公司，才发现不持家不知道油盐贵，现在自己和手下变成了老板和员工的关系，走了过去的老路。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 更有一些极端主义者辞职，自己做软件，最后由于生活拮据或做做发现这个软件没什么意义，就丢弃了自己的梦想，随便找一家公司开始沉默撞钟。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 一些聪明的家伙，有的入了外企，有的进了大的网游公司，有的进了外包公司，有的进了大网站公司，都是讲究大规模开发的公司，希望能找到一条中国式团队开发产品保证之路</font></p>
<font face="Verdana">
</font>
<p><font face="Verdana"><br />
&nbsp;&nbsp;&nbsp; 作为小软件公司，我们真的无能为力了么？我们真的成为炮灰了么？</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 但是，中国软件行业大部分都是这样的公司。从每年的CSDN、51aspx的程序员调查都可以看到，中国软件公司大部分都保持在这种开发团队规模，开发人员大部分都在毕业1-3年。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 我们是在等待时间让人变得成熟么？我们是在等待时间让人变得技术综合实力增强么？</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 依笔者看，作为中国软件群体最大的小软件公司，需要的不是UML/RUP/CMM这些重型方法，不是前几年大家关注的小组开发方法，也不是敏捷编程这样的结对方法，我们都无法有这样的资源实现这样的方法。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 但是，想想，星星之火可以燎原。红军能从爬雪山过草地起家，最后解放全中国。我们就没有方法？</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 那我们就需要想，就我们目前能拥有的权力和资源，我们如何一点点改进。我们需要的是从游击队到兄弟连，从兄弟连到正规军的方法。我们现在还处于游击队，一个队长领了一帮游兵散勇，有的人甚至没有枪还背着大刀，有的人还没杀过鬼子。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 首先，要把我们自己变成兄弟连。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 我常常观看国际著名的CS战队的比赛录像，他们配合的多好啊。如果他们都单兵作战，那么早就死翘翘了。这和咱们的软件开发多么相像。我们多么神往这种默契的配合，打的多么流畅。我们要的就是这个。他们也不几个人么。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 那让我们来分析分析吧。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 我们想好好专职的开发软件，但我们的时间都被实施安装、培训、技术支持占去了。为什么我们要做这些？是因为我们软件没有操作说明，其他部门人都不会用。而且我们也没有培训机制，其他部门人更不会用。而且我们的软件不稳定，其他部门人都拒绝实施。由于我们软件不稳定，老出问题，出了问题其他部门人也帮不上忙，只能我们自己去做技术支持。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 从以上来看，主要矛盾就是在：<strong>操作说明、培训机制、稳定性</strong>。如何保证这三点。而且从以上来分析，稳定性是最重要的。不稳定，你即使有操作说明和培训机制，其他部门人都躲着实施，谁想去客户那里尴尬丢脸挨骂呀。所以，其他部门人会找各种理由向老板告开发部的状，以躲避实施，说软件太烂，根本无法拿出去。这也就是开发部往往和其他部门关系都不好，开发人员老抱怨自己就闷头辛苦开发解决问题，没有人说好，却被奸人陷害。天长日久，积怨颇深。其实说起来，根源还在开发部自己这里。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 如何保证稳定性？</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 大家第一想到的就是招测试人员。当然，一些公司的老板是拒绝养测试人员的。另外，如果你只想到招测试人员，其他方法不配合测试人员，即使有了测试人员，软件稳定性仍然不会有提高。所以，有一些工作，是不管有没有测试人员，都必须是我们开发人员要做的：</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 每个人的技术水平都参次不齐的，每个人对自己代码的负责认真性也都是不一样的，所以要想提高稳定性，必须专门从队伍中找一个人，他作为公共代码开发员。每个产品或项目的修改需求，必须首先经过他的思考，能做成公共代码，能封装成函数，就他来做。其他的程序员只管调用函数，实现客户UI操作和辅助功能。这个公共代码开发员必须具备以下能力：<br />
&nbsp;&nbsp;&nbsp; A、参与过几个主要项目的开发、实施、支持。这样，他对客户需求有综合的把握。如果队伍中没有这样的人，只有开发经理一个人有这样的经理，那么接到客户需求，分析客户需求，分解析辨是公共代码员来做还是其他开发人员来做。<br />
&nbsp;&nbsp;&nbsp; B、公共代码开发员具有负责认真的工作态度，代码细心严谨考虑周详异常保护做的到位内存创建释放有头有尾，代码优美，代码可阅读，代码重构，代码性能和稳定都高<br />
&nbsp;&nbsp;&nbsp; C、公共代码开发人员的技术能力高，知道封装成什么样的函数接口，在灵活性，以后的修改变化性上最好</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 应该说，找一个技术能力好的，工作认真负责的人，应该是不难找到的。而且专门做这件事，不让他参与各种杂事，他是应该能干好这件事的，而且会越做越好，这就是术有专攻。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 刚才还讲到一件事，那就是开发经理要熟悉客户需求，而且是深刻理解客户需求。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 客户需求，客户需求。这个让开发部最头疼的字眼。每当想起客户需求，就想起了以下这些话：<br />
&nbsp;&nbsp;&nbsp; 1、程序员说：这是你们家个性的需求，太邪门，我们不做。客户说：不做我们找你们老板去，我们是花钱买了你们的产品的。<br />
&nbsp;&nbsp;&nbsp; 2、客户说：我不会用鼠标，你给我做一个语音输入吧。我们还想要一个类似QQ的东西供我们内部沟通，你们给我们做一个吧。程序员：我晕。<br />
&nbsp;&nbsp;&nbsp; 3、程序员说：等你们内部斗争完，你们协调完了，我再调研需求。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 似乎，我们在需求上无能为力，我们永远在追赶客户的需求，满足他们的现状，把N多家的客户需求都加进软件中，只要能实现的，我们尽量咬牙实现了。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 最后，我们发现，我们的软件无比复杂，谁也不会用了，连开发部门都不会用了，谁也不知道这个需求当时为什么是这样的。因为无比复杂，所以实施、培训、技术支持都成了问题，稳定性更成了问题。代码互相交叉，根本无法理清有多少交叉影响点。维护的程序员都快崩溃了，天天在祈求，千万别接到客户电话，千万别接到客户电话。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 这个问题终归是问题，而且是软件开发最大的问题。虽然我们也动用了这样的技巧：<br />
&nbsp;&nbsp;&nbsp; 1、客户业务部门不能随便提需求。必须集中汇总到客户IT部门，由客户IT部门汇总过滤完，再集中报给软件公司<br />
&nbsp;&nbsp;&nbsp; 2、客户IT部门的需求，必须客户方负责IT项目的老板签字才能生效，才能报给软件公司<br />
&nbsp;&nbsp;&nbsp; 3、不能随时报，每3个月集中报一次<br />
&nbsp;&nbsp;&nbsp; 4、不能口头报（即使在现场实施支持也不行），不能电话报，只能MAIL或传真来报<br />
&nbsp;&nbsp;&nbsp; 5、必须按我们规定的格式报，要严格写清楚需要实现的功能的界面，输入数据或输出数据，输入输出数据的格式要求，谁操作，多长时间操作一次。<br />
&nbsp;&nbsp;&nbsp; 6、软件上线后只能免费修改3次。以后再有需求，就必须另签合同另收费，否则不予修改。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 经过这么几招，客户也疲了。需求是不提了，开发部欢呼雀跃。但我们真的做好了么？难道客户真的满意了么？客户为什么要用我们的软件？难道仅仅是为了把他们现在手工做的，然后转到计算机去做。让计算机的查询统计计算速度代替人工？</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 客户为什么要提这样的需求？客户要根本解决什么问题？这些问题谁来想，谁来想解决办法？</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; OH，My God!我们无能为力，因为我们是技术人员，我们不懂业务。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 那这个问题谁来解决？</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 程序员苦笑了：没有人解决，也没有人能解决。客户就要，你不做他就要给老板打电话。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 噢，那就让程序员的噩梦继续吧。谁也救不了你，能救你的只有你自己。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 要救我们自己，必须我们自己走出我们自己。谁让我们就处在这样的处境呢？我们都想过的好，只能我们自己救我们自己。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 那我们就鼓足勇气，走出来，从我们的设计模式、OO、软件工程、虚拟接口、反射、持久化、框架中走出来。开发经理来承担起客户行业研究来：<br />
&nbsp;&nbsp;&nbsp; 1、客户行业这个群体有多大？大中小规模各有多少家，各分布在什么省？我们面对的最佳客户是什么规模什么信息化程度的？我们的次佳客户是什么规模什么信息化程度的？<br />
&nbsp;&nbsp;&nbsp; 2、我们的上层竞争对手、本层的竞争对手、下层竞争对手目前的产品怎么样？他们各自的优点是什么？他们各自的缺点是什么？我们应该突出的优点是什么？我们的缺点是什么？<br />
&nbsp;&nbsp;&nbsp; 3、客户行业的过去5年，现在2年，未来3年的发展历史和趋势是什么？他们面临哪些挑战和机遇？<br />
&nbsp;&nbsp;&nbsp; 4、我们现在所做的典型客户，他们的组织结构，人员规模，每个岗位每日业务流程、每个岗位每日每周每月每季每年的异常处理业务流程，每个岗位每日每周每月季每年的输入表格，每个岗位每日每周每月季每年的常用数据查询，每个岗位每日每周每月季每年的统计报表<br />
&nbsp;&nbsp;&nbsp; 5、针对以上的了解，客户面对未来挑战和机遇，未来应该如何变更他们的岗位和职责和流程，尽量流程少，效率高，运转快？</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 其实，开发经理就相当于业务架构师（因为我们还是游击队，不可能有专职的业务架构师），公共代码开发员就相当于技术架构师。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 柳传志说的非常好：搭班子，定战略，带队伍。你班子不行，上什么需求管理软件、版本管理软件、项目进度管理软件、自动测试、自动集成软件，都是无法落地执行的。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 有了夯实的业务+技术，功能实用、功能符合客户操作、功能稳定。这是软件最基本的要求，就都能满足了。这时候再招测试人员，就能把质量再夯实了。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 而且，测试人员由于熟知产品，他们还能做技术支持呢，这样可以有更多的开发人员来专职开发，开发的专业性就能越来越提高了。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 好的产品，还需要有好的文档和培训，否则其他部门还是不会接开发部的产品的。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 那就招一个文案人员，写帮助说明，制作操作视频，制作学习版数据库，参与辅助测试（这个很重要，否则文案人员不熟知产品，无法写出有质量的文案）。有了这些文案的基础，最熟悉产品的非开发人员就有了两个岗位：测试兼技术支持，那么文案就兼起培训工作（由于他自己写文案自己用自己的文案做培训，在培训中会有各种提问，会更加增进他对文案和产品的理解，能写出更好的文案。而且他不是开发人员，他能站在使用者的角度上来写来讲，而且他属于开发部门，他会给产品开发带来更多更好的产品易用性建议）。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 好了，开发部的四套马车终于起来了，这就是我要讲的开发模式：从游击队转变为兄弟连，从软件作坊走向</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 记住：业务架构、技术架构、测试兼技术支持、文案兼培训，四套马车。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 我们一直用它，效果很好，搭建团队容易，循序渐进不革命。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 有了这么好的团队，就能比过去产出更好的软件，软件的质量，软件的进度，软件的竞争力就都上来了，再上各种管理软件：如项目管理软件、版本管理软件、BUG管理软件、自动测试软件，就水到渠成了。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 其他部门也愿意接软件了，软件的实施和培训和技术支持都被其他部门接过去了。开发部门也终于专职专业起来了，整个公司都很协调了，部门间也不互相陷害抱怨了。公司发展速度蹭蹭的。</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 老板看着形式这么好，也不抠门了。奖金福利随之而来。老板看着公司产品销售这么好，也不用再为公司生存发愁了，不用随处找单子养活了，给开发部门更带来了专业理顺的计划发展。老板也开始重视研发部门了，研发部门在公司的地位高多了，给与研发部门的资源和支持也更多了。</font></p>
<p><font face="Verdana">OH，My God!</font><br />
</p><img src ="http://www.cnblogs.com/kaima/aggbug/1214959.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41918/" target="_blank">[新闻]数据库市场:微软和甲骨文快速进步 威胁IBM</a>]]></description></item><item><title>服务器Jmail配置问题</title><link>http://www.cnblogs.com/kaima/archive/2008/05/28/1209186.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Wed, 28 May 2008 05:58:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/05/28/1209186.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1209186.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/05/28/1209186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1209186.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1209186.html</trackback:ping><description><![CDATA[<p>将内网的程序上传至外网后，出现&#8220;<span style="color: red">检索 COM 类工厂中 CLSID 为 {E5FF9F62-0E7C-4372-8AD5-DA7D2418070C} 的组件时失败，原因是出现以下错误: 80070005</span>&#8221;。<br />
<br />
外网服务器也安装过Jmail，但根据报错，明显是组件没有被正确注册。<br />
<br />
利用Jmail的安装包，卸载、重新安装也不行，最后采用极端手段。<br />
<font face="Verdana">将jmail.dll拷贝到服务器的system32目录下&nbsp;，开始-运行-CMD-输入<span style="color: #3366ff">regsvr32&nbsp;&nbsp; jmail.dll<br />
<span style="color: #000000">才算搞定。</span></span></font></p>
 <img src ="http://www.cnblogs.com/kaima/aggbug/1209186.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41917/" target="_blank">[新闻]深度分析：全球千亿美元市值IT企业7月榜单点评</a>]]></description></item><item><title>ASP.NET中上传多文件时，用日期时间命名新文件，这不是个好主意。</title><link>http://www.cnblogs.com/kaima/archive/2008/05/14/1196283.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Wed, 14 May 2008 02:20:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/05/14/1196283.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1196283.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/05/14/1196283.html#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1196283.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1196283.html</trackback:ping><description><![CDATA[<p>网上流行的多文件上传，都是上传之后，用日期时间命名。都认为方便、简单，似乎还能避免同目录下产生相同的文件。<br />
代码大多如下：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;新文件名&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DateTime.Now.ToString(</span><span style="color: #800000">"</span><span style="color: #800000">yyMMddHHmmss</span><span style="color: #800000">"</span><span style="color: #000000">);</span></div>
<br />
上面这行代码会导致很有趣的bug：那就是当网站繁忙很多人同时上传的时候，或者一个人多文件同时上传的时候，你会发现，你传上去文件，经常性（跟别人）都是一样的，经常性&#8220;丢掉&#8221;一些图片。<br />
<br />
你会奇怪，为什么？<br />
<br />
很简单，服务器处理太快了，几乎1秒内就处理你的多文件上传请求，这一秒内，所有的文件名都相同（因为上面那个行代码就只精确到秒）。<br />
<br />
OK，既然是文件名相同，我精确到毫秒，不就解决了？于是有了下面的代码：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;新文件名&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;DateTime.Now.ToString(</span><span style="color: #800000">"</span><span style="color: #800000">yyMMddHHmmssfff</span><span style="color: #800000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">精确到毫秒，防止1秒内被处理的文件获得的新名称都相同</span></div>
经过上面的改造，会发现问题减少了很多，不再经常&#8220;丢&#8221;图片了&#8230;&#8230;但是，偶尔还是有照片丢失的情况发生&#8230;&#8230;<br />
<br />
知道原因吗？MSDN告诉我们：&#8220;<span style="color: #3366ff">Windows<font face="Verdana">系统时钟精确到10~15毫秒</font></span>&#8221;，也即说，DateTime类型只能精确到10~15毫秒。<font face="Verdana">如果用时间命名，即便精确到毫秒，10~15毫秒内处理的文件，名字仍然会相同，有趣的bug仍然会产生。<br />
<br />
故，不推荐使用日期时间命名文件。<br />
<br />
那怎么办呢？用Guid！唯一的、一出生即与众不同的家伙，它的唯一性，理论上保证了同一目录下无可能出现重复的文件名。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;新文件名&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Guid.NewGuid().ToString(</span><span style="color: #800000">"</span><span style="color: #800000">N</span><span style="color: #800000">"</span><span style="color: #000000">);</span></div>
<br />
</font>
 <img src ="http://www.cnblogs.com/kaima/aggbug/1196283.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41916/" target="_blank">[新闻]中移动上半年净利549亿元 每天盈利3亿</a>]]></description></item><item><title>谨慎使用Paypal一类的 支付 中介公司</title><link>http://www.cnblogs.com/kaima/archive/2008/05/10/1191382.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Sat, 10 May 2008 09:09:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/05/10/1191382.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1191382.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/05/10/1191382.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1191382.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1191382.html</trackback:ping><description><![CDATA[<div class="t_msgfont" id="postmessage_3995772">我有几百美元，paypal楞是给我扣了两年&#8230;&#8230;就是不给结。原因据内行用户说是在同一机器上使用了2个帐号转账。<br />
<br />
又要身份证，又要我交水电气费单，又要住址证明，还要讲清楚交易来历。后来我冒着隐私透露问题，愣是通过【截图】取证，把关键证据给补上了，他们还是不办，一定要交水电气费单。<br />
<br />
有点气愤，我都在【截图】取证中解释了，自己住公司房子，不用交水电气费，也就拿不出水电气费单。只要是一个明白道理的人，一看我的截图，就知道整件事情的来由，绝对合法，合理。<br />
<br />
可paypal中国区工作人员就是不办，而且用自动回复处理&#8230;&#8230;<br />
<br />
前前后后2年，快把我耐心耗没了，想想也就几百$，在这上面花的时间，够我挣N个几百$。<br />
<br />
我怀疑那的工作人员(Paypal中国国内的)都是机械人，不会看文件，只会按程序办事。<br />
<br />
建议大家谨慎使用paypal，一旦出现问题，真的很麻烦。<br />
<br />
而且使用的时候，他们不会提醒你有哪些失误，让你去踩地雷，然后就扣你的款，扣到你失去耐心放弃这笔款。<br />
<br />
我想世界之大，有同样的朋友碰到类似的事情吧？<br />
<br />
谨慎使用类似的公司的服务。</div>
<img src ="http://www.cnblogs.com/kaima/aggbug/1191382.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41915/" target="_blank">[新闻]中国移动谋划推出Web2.0产品mspaces.net</a>]]></description></item><item><title>SQL Server中查看SQL句子执行所用的时间</title><link>http://www.cnblogs.com/kaima/archive/2008/05/06/1184807.html</link><dc:creator>Kai.Ma</dc:creator><author>Kai.Ma</author><pubDate>Tue, 06 May 2008 03:39:00 GMT</pubDate><guid>http://www.cnblogs.com/kaima/archive/2008/05/06/1184807.html</guid><wfw:comment>http://www.cnblogs.com/kaima/comments/1184807.html</wfw:comment><comments>http://www.cnblogs.com/kaima/archive/2008/05/06/1184807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/kaima/comments/commentRss/1184807.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/kaima/services/trackbacks/1184807.html</trackback:ping><description><![CDATA[&nbsp; set &nbsp; statistics &nbsp; profile &nbsp; on &nbsp; <br />
&nbsp; set &nbsp; statistics &nbsp; io &nbsp; on &nbsp; <br />
&nbsp; set &nbsp; statistics &nbsp; time &nbsp; on &nbsp; <br />
&nbsp; go &nbsp; <br />
&nbsp; 你执行的语句 &nbsp; <br />
&nbsp; go &nbsp; <br />
&nbsp; set &nbsp; statistics &nbsp; profile &nbsp; off &nbsp; <br />
&nbsp; set &nbsp; statistics &nbsp; io &nbsp; off &nbsp; <br />
&nbsp; set &nbsp; statistics &nbsp; time &nbsp; off &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 执行完点消息!
<img src ="http://www.cnblogs.com/kaima/aggbug/1184807.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41914/" target="_blank">[新闻]奇虎诉瑞星侵犯名誉权 瑞星称是恶人先告状</a>]]></description></item></channel></rss>