<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky0.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/99de35fcd16b4037a7e06764af6fbdc2" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/99de35fcd16b4037a7e06764af6fbdc2" type="application/rss+xml"></fs:self_link><lastBuildDate>Tue, 09 Feb 2010 19:20:00 GMT</lastBuildDate><title>博客园-首页原创.NET区</title><description>技术改变世界</description><link>http://www.cnblogs.com/</link><language>zh-cn</language><pubDate>Tue, 09 Feb 2010 21:01:02 GMT</pubDate><item><title>Visual Studio 2010和.Net Framework 4 RC版本发布</title><link>http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html</link><description>&lt;p&gt;阅读: 11 评论: 0 作者: &lt;a href=&quot;http://www.cnblogs.com/jv9/&quot; target=&quot;_blank&quot;&gt;jv9&lt;/a&gt; 发表于 2010-02-10 03:20 &lt;a href=&quot;http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;p&gt;2009年2月9日，微软发布Visual Studio 2010 Release Candidate版本和.Net Framework 4.0 Release Candidate版本,大家可以在&lt;a href=&quot;http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx&quot; target=&quot;_blank&quot;&gt;MSDN Subscribers&lt;/a&gt;下载.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;众所周知，候选版本，是属于预发行版本，和测试版最大的不同是候选版本基本不再添加新的功能，主要是集中排除Bug和测试.&amp;nbsp;对于这次RC版本的发布，微软作出以下注释：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. Visual Studio 2010 和 .Net Framework 4 Release Candidate版本下载，2月8日在&lt;a href=&quot;http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx&quot; target=&quot;_blank&quot;&gt;MSDN Subscribers&lt;/a&gt;提供下载，2月10日提供全面下载。&lt;/p&gt;
&lt;p&gt;2. Visual Studio 2010 RC版本，仅支持Silverlight 3项目应用开发，暂时不支持Silverlight 4项目开发，也就是说，如果需要开发Silverlight 4，只能使用Visual Studio 2010 Beta2 和 .NET 4 Framework&amp;nbsp;Beta2。&lt;/p&gt;
&lt;p&gt;3. 安装Visual Studio 2010 RC版本，必须先卸载Visual Studio 2010 Beta2 和 .NET 4 Framework&amp;nbsp;Beta2。&lt;/p&gt;
&lt;p&gt;4. Visual Studio 2010 RC版本允许同时安装Visual Studio 2005 和2008。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;对于此次版本发布，最关注的莫属Silverlight开发人员，为什么Silverlight 4版本没有更新，甚至连正式发布时间也没有？微软的解释是Silverlight 4需要有一个稳定的开发平台，也就是Visual Studio 2010. 只有在开发平台稳定的情况下，才能保证Silverlight项目开发的稳定性。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src=&quot;http://www.cnblogs.com/jv9/aggbug/1666910.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 0　&lt;a href=&quot;http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/331484131/99de35fcd16b4037a7e06764af6fbdc2/feedsky/s.gif?r=http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331484131/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331484131/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Feb 2010 03:20:00 +0800</pubDate><author>jv9</author><guid isPermaLink="false">http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html</guid><dc:creator>jv9</dc:creator><fs:srclink>http://www.cnblogs.com/jv9/archive/2010/02/10/1666910.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/rss.aspx?id=-1</fs:srcfeed><fs:itemid>feedsky/99de35fcd16b4037a7e06764af6fbdc2/~1216755/331484131/1221989</fs:itemid></item><item><title>Visual Studio DSL 入门 6---DSL的图形表示1</title><link>http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html</link><description>&lt;p&gt;阅读: 33 评论: 1 作者: &lt;a href=&quot;http://www.cnblogs.com/lonely7345/&quot; target=&quot;_blank&quot;&gt;孤独侠客&lt;/a&gt; 发表于 2010-02-10 02:19 &lt;a href=&quot;http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 到现在为止，我们还是只是介绍模型相关的东西，还没有接触到Dsl的模型的展现，对于一个Dsl来说，没有图形展现也是可行的，不过对于一个开发工具来说，要提供一种方式来操作我们的元数据,Visual Studio DSL在图形展现这方面提供了不错的支持，不过对于复杂的Dsl来说，图形的展现往往需求很复杂，现在的图形化支持在一定程度上也未必能够满足一些特定的需求, 有总比没有好，期望微软会在这方面会有所加强。&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 还是以我们创建的LanguageSm项目为例，我们大概介绍一下界面表示相关的概念,打开DslDefinition.dsl文件,这次我们看泳道(也就是树线)的右边: &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-9%2022-39-46_2.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;2010-2-9 22-39-46&quot; border=&quot;0&quot; alt=&quot;2010-2-9 22-39-46&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-9%2022-39-46_thumb.png&quot; width=&quot;275&quot; height=&quot;391&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;strong&gt;一. 图表&lt;/strong&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们看最下面的LanguageSmDiagram,这就是图表元素，它是存储形状和连接器映射的容器，代表设计界面自身，映射到模型的根域类(图形元素Diagram Elements都是与模型相对应的),也就是映射到我们例子里的ExampleModel,我们来看一下图表的属性: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%200-12-07_2.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;2010-2-10 0-12-07&quot; border=&quot;0&quot; alt=&quot;2010-2-10 0-12-07&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%200-12-07_thumb.png&quot; width=&quot;493&quot; height=&quot;516&quot; /&gt;&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在这里，我们可以对图表的外观，代码，文档，公开样式属性，资源几个方面进行属性设置，Dsl会收集设置的这些信息，然后根据T4模板，在Dsl项目的Generate Code文件夹下面生成Diagram类，我们也可以对这个类进行扩展，实现图表方面的一些自定义，比如设置背景图，显示网络等。如果你想实现Dsl模型的自己的界面表示方式，也需要实现自己的图表元素Diagram类.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;strong&gt;二.编辑器 &lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 编辑器分为两种类型：(图形)设计器和自定义编辑器.编辑器的定义在Dsl资源管理器(Dsl Explorer)中的&amp;#8220;编辑器&amp;#8221;(editor)节点下，这里的定义的属性用于生成EditorFactory类(熟悉VSX的应该知道，我们会在后面介绍)，工具箱等，我们来看一下默认的设计器的属性: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%200-27-41_2.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;2010-2-10 0-27-41&quot; border=&quot;0&quot; alt=&quot;2010-2-10 0-27-41&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%200-27-41_thumb.png&quot; width=&quot;777&quot; height=&quot;349&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;这里需要提示一下，在dsl设计的过程中，有很多时候需要dsl浏览器和属性对应操作使用，可以通过右键属性来进行设置。 &lt;br /&gt;&lt;/em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 属性里设置了编辑器对应的图表元素，编辑器的GUID,根域类，以及存储Dsl模型的文件扩展名，与文件关联的图标。或许你不太明白这些属性代表什么意义，没有关系，以后会明白的。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们在第一节就说过， Dsl模型并不一定要有图形编辑器的，我们也可以在这里添加我们自定义的编辑器，你可以右键删除默认的Editor,然后在根结点LanguageSm上右键添加自定义编辑器，然后设置上面说的那些属性，然后实现自己的DocView，在&lt;a href=&quot;http://altinoren.com/PermaLink,guid,643ec407-4fe1-4238-a24e-20ef8b134a99.aspx&quot; target=&quot;_blank&quot;&gt;这里&lt;/a&gt;有详细流程，具体的方法我们也会在后面详细介绍. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img border=&quot;0&quot; src=&quot;http://altinoren.com/content/binary/WPFDSLEditorResult.png&quot;  alt=&quot;&quot; /&gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;三.形状 &lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 形状是Dsl图形符号的重点，因为形状和模型元素一一对应(前面说的ExampleShape是一个几何形状,和根域类对应),可以使模型元素形象化，这也是Vs.Net DSL图形化DSL的特点. 形状又分为以下五个不同的类型,这五个形状在工具箱上都有，可以直接拖动到图形区域创建对应的形状,建议现在没有必要太去细化，而只需要记住他们的样式，能够按需所有，具体怎么设置还是到使用的时候再去研究: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.几何形状(GeometryShape) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-24-52_2.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;2010-2-10 1-24-52&quot; border=&quot;0&quot; alt=&quot;2010-2-10 1-24-52&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-24-52_thumb.png&quot; width=&quot;402&quot; height=&quot;119&quot; /&gt;&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 左侧为形状的模型，右侧为调试后运行的显示模型，形状中的文本装饰器NameDecorator就是用来控制我们显示图形中的文本，你可以查看装饰器的属性，控制文本的显示，包括文本,显示位置等. &lt;br /&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-33-26_2.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;2010-2-10 1-33-26&quot; border=&quot;0&quot; alt=&quot;2010-2-10 1-33-26&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-33-26_thumb.png&quot; width=&quot;467&quot; height=&quot;346&quot; /&gt;&lt;/a&gt; &lt;br /&gt;对于几何形状，除了文本装饰器以外，你还可以添加IconDecorator（装饰图形上显示图标),ExpandCollapseDecorator(装饰图形的展开收缩) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.隔间形状(CompartmentShape) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 隔间形状是带有隔间的几何形状，一个隔间形状有可以有多个隔间: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-48-58_2.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;2010-2-10 1-48-58&quot; border=&quot;0&quot; alt=&quot;2010-2-10 1-48-58&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-48-58_thumb.png&quot; width=&quot;472&quot; height=&quot;203&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 同样，对于隔间形状，你也可以象几何形状那样添加其它的装饰器. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.图像形状(ImageShape) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 图像形状是显示图形非轮廓的形状: &lt;br /&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-54-12_2.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;2010-2-10 1-54-12&quot; border=&quot;0&quot; alt=&quot;2010-2-10 1-54-12&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%201-54-12_thumb.png&quot; width=&quot;681&quot; height=&quot;155&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 可以看到，图像形状显示的和我们普通的几何形状是不一样的，我们可以针对图象开关设置显示的图像和图标资源,我们来看一下上面的图像形状的属性,在最下面我们定义了显示的图标: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-01-08_2.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;2010-2-10 2-01-08&quot; border=&quot;0&quot; alt=&quot;2010-2-10 2-01-08&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-01-08_thumb.png&quot; width=&quot;455&quot; height=&quot;559&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.端口(PortShape) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 端口是依附在形状轮廓上，并只能绕轮廓移动的特殊形状，除此之外，和普通的几何形状没有区别。 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-10-18_2.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;2010-2-10 2-10-18&quot; border=&quot;0&quot; alt=&quot;2010-2-10 2-10-18&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-10-18_thumb.png&quot; width=&quot;593&quot; height=&quot;256&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.泳道(Swimlane) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 泳道用来将图表分割成行或例，我们看下面的状态流程图: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-05-02_2.png&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;2010-2-10 2-05-02&quot; border=&quot;0&quot; alt=&quot;2010-2-10 2-05-02&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/lonely7345/WindowsLiveWriter/VisualStudioDSL6_EA56/2010-2-10%202-05-02_thumb.png&quot; width=&quot;644&quot; height=&quot;214&quot; /&gt;&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;参考资源 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. Visual Stuido DSL 工具特定领域开发指南 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.&lt;a href=&quot;http://altinoren.com/PermaLink,guid,643ec407-4fe1-4238-a24e-20ef8b134a99.aspx&quot; target=&quot;_blank&quot;&gt;Using WPF As The Designer Surface In DSL Tools&lt;/a&gt;&amp;nbsp;&amp;nbsp; Gokhan Altinoren&lt;/p&gt;
&lt;p id=&quot;LyjSignature&quot;&gt;作者：&lt;a href=&quot;http://lonely7345.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;孤独侠客&lt;/a&gt;（&lt;a href=&quot;http://lonely7345.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;似水流年&lt;/a&gt;） &lt;br /&gt;出处：&lt;a href=&quot;http://lonely7345.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;http://lonely7345.cnblogs.com/&lt;/a&gt; &lt;br /&gt;本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。&lt;/p&gt;&lt;img src=&quot;http://www.cnblogs.com/lonely7345/aggbug/1666906.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 1　&lt;a href=&quot;http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/331484138/99de35fcd16b4037a7e06764af6fbdc2/feedsky/s.gif?r=http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331484138/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331484138/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Feb 2010 02:19:00 +0800</pubDate><author>孤独侠客</author><guid isPermaLink="false">http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html</guid><dc:creator>孤独侠客</dc:creator><fs:srclink>http://www.cnblogs.com/lonely7345/archive/2010/02/10/1666906.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/rss.aspx?id=-1</fs:srcfeed><fs:itemid>feedsky/99de35fcd16b4037a7e06764af6fbdc2/~1216755/331484138/1221989</fs:itemid></item><item><title>【翻译作品】JavaScript Event学习补遗：addEventSimple</title><link>http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html</link><description>&lt;p&gt;阅读: 69 评论: 1 作者: &lt;a href=&quot;http://www.cnblogs.com/beiyu/&quot; target=&quot;_blank&quot;&gt;北玉&lt;/a&gt; 发表于 2010-02-10 01:06 &lt;a href=&quot;http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这里有个addEventSimple和removeEventSimple函数，有时候需要不那么显眼的事件处理程序的时候我就用这两个函数注册。&lt;/p&gt;
&lt;pre&gt;&lt;pre class=&quot;brush:javascript&quot;&gt;function addEventSimple(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}

function removeEventSimple(obj,evt,fn) {
	if (obj.removeEventListener)
		obj.removeEventListener(evt,fn,false);
	else if (obj.detachEvent)
		obj.detachEvent('on'+evt,fn);
}
&lt;/pre&gt;
&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;用法如下：&lt;/p&gt;
&lt;pre&gt;&lt;pre class=&quot;brush:javascript&quot;&gt;addEventSimple(element,'click',functionname);
addEventSimple(document,'load',functionname2);
&lt;/pre&gt;
&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;现在如果元素element被点击的话就会触发functionaname，同样的document也有了onload的事件处理程序functionname2。&lt;/p&gt;
&lt;p&gt;缺陷：this关键字在IE下面不是你想象的指向触发事件的元素，而是指向整个文档。&lt;/p&gt;
&lt;p&gt;原文地址：&lt;a title=&quot;http://www.quirksmode.org/js/eventSimple.html&quot; href=&quot;http://www.quirksmode.org/js/eventSimple.html&quot;&gt;http://www.quirksmode.org/js/eventSimple.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;回老家过年了，不能及时发布了，来年继续，大家新年快乐！&lt;/p&gt;&lt;img src=&quot;http://www.cnblogs.com/beiyu/aggbug/1666892.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 1　&lt;a href=&quot;http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/331484143/99de35fcd16b4037a7e06764af6fbdc2/feedsky/s.gif?r=http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331484143/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331484143/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Feb 2010 01:06:00 +0800</pubDate><author>北玉</author><guid isPermaLink="false">http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html</guid><dc:creator>北玉</dc:creator><fs:srclink>http://www.cnblogs.com/beiyu/archive/2010/02/10/eventSimple.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/rss.aspx?id=-1</fs:srcfeed><fs:itemid>feedsky/99de35fcd16b4037a7e06764af6fbdc2/~1216755/331484143/1221989</fs:itemid></item><item><title>.NET 4.0 环境下无法直接运行 .NET 2.0 程序的问题，当然目前解决了</title><link>http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html</link><description>&lt;p&gt;阅读: 189 评论: 0 作者: &lt;a href=&quot;http://www.cnblogs.com/hongcing/&quot; target=&quot;_blank&quot;&gt;洪星&lt;/a&gt; 发表于 2010-02-10 00:09 &lt;a href=&quot;http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;p&gt;由于 .NET 4.0 使用新版本的 CLR，变化也不少，&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;p&gt;mscoree.dll 变为 mscoree.dll 和 mscoreei.dll，&lt;/p&gt;
&lt;p&gt;mscorwks.dll 变为 clr.dll，&lt;/p&gt;
&lt;p&gt;mscorjit.dll 变为 clrjit.dll。&lt;/p&gt;
&lt;p&gt;这导致在没有安装 .NET 2.0 的情况下，.NET 2.0 程序默认无法在 .NET 4.0 环境下运行（未安装 .NET 2.0/3.0/3.5）。（&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;纠正：不是文件名的变化导致无法运行，而是微软的新策略是强烈建议程序在开发时使用的运行时版本下运行，这样可以保证最大的兼容性&lt;/span&gt;&lt;/span&gt;）&lt;/p&gt;
&lt;p&gt;那么怎么办呢？&lt;/p&gt;
&lt;p&gt;Visual Studio 2010 对项目可以设置&amp;ldquo;目标框架&amp;rdquo;，在没有安装 .NET 3.5 的情况下可以选择 .NET Framework 4、.NET Framework 4 Client Profile，在改变选择之后，会生成一个配置文件，内容如下：&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;cnblogs_code&quot;&gt;
&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;span style=&quot;color: #ff00ff;&quot;&gt;xml version=&quot;1.0&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;configuration&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;startup&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;supportedRuntime &lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;version&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;=&quot;v4.0&quot;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt; sku&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;=&quot;.NETFramework,Version=v4.0&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;startup&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;configuration&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;把这个文件名改成你需要运行的程序的配置名，同时把程序与配置文件放到一起，这个时候就可以打开 .NET 2.0 的程序了。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;以上只是我当时想出此方法的思路，当然你没有必要这样做。&lt;/p&gt;
&lt;p&gt;你只要搞一个配置文件或者将以上配置文件内容添加到已有的配置文件中。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;supportedRuntime version=&quot;v4.0&quot;&lt;/span&gt; 强制当前程序在&amp;nbsp;CLR&amp;nbsp;4.0 环境下运行，当然你可以设置 1.0、1.1、2.0，前提是运行环境内有对于版本的运行时。（第二次纠正：如果强制在 CLR&amp;nbsp;2.0 下运行，必须设置 &lt;span style=&quot;color: #0000ff;&quot;&gt;supportedRuntime version=&quot;v2.0.50727&quot;&lt;/span&gt;，如果设置 v2.0 无效。）&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;顺便说明&lt;span style=&quot;color: #0000ff;&quot;&gt;目前的运行时版本只有 1.0、1.1、2.0、4.0&lt;/span&gt;，没有3.0、3.5。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;实际上仅对 Windows XP 需要这样做，因为 XP 默认情况下没有安装任何 .NET 版本，Windows&amp;nbsp;Vista/7 默认情况下分别安装了 .NET 3.0、.NET 3.5，具有 CLR 2.0。&lt;/p&gt;
&lt;p&gt;以上做法可能会有兼容性问题，大型复杂程序不推荐这样做。小工具或者自行编写的程序（例如我）可以这样做，出了问题自行解决。这样&lt;span style=&quot;color: #0000ff;&quot;&gt;在 XP&amp;nbsp;下，就不用安装 N 个 .NET 版本&lt;/span&gt;。&lt;/p&gt;
&lt;p&gt;本文没有说明的内容，可以自行摸索。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src=&quot;http://www.cnblogs.com/hongcing/aggbug/1666880.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 0　&lt;a href=&quot;http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/331446870/99de35fcd16b4037a7e06764af6fbdc2/feedsky/s.gif?r=http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331446870/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331446870/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Feb 2010 00:09:00 +0800</pubDate><author>洪星</author><guid isPermaLink="false">http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html</guid><dc:creator>洪星</dc:creator><fs:srclink>http://www.cnblogs.com/hongcing/archive/2010/02/10/1666880.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/rss.aspx?id=-1</fs:srcfeed><fs:itemid>feedsky/99de35fcd16b4037a7e06764af6fbdc2/~1216755/331446870/1221989</fs:itemid></item><item><title>【翻译作品】JavaScript Event学习第十一章：按键的检测</title><link>http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html</link><description>&lt;p&gt;阅读: 117 评论: 0 作者: &lt;a href=&quot;http://www.cnblogs.com/beiyu/&quot; target=&quot;_blank&quot;&gt;北玉&lt;/a&gt; 发表于 2010-02-09 23:26 &lt;a href=&quot;http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;检测用户的按键是事件处理程序的一个很特别的环节。这一章我们着力解决一些非常棘手的问题，并且制定一个完备的表格。&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;第一个问题是对于按键事件来说根本就没有标准，按照&lt;a href=&quot;http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings-keyevents&quot;&gt;规范&lt;/a&gt;说的：包含键盘等输入设备的事件模型会在以后的DOM规范中作出解释。&lt;/p&gt;
&lt;p&gt;
正如我们了解到的，浏览器在最开始设计的时候并没有一个标准，大家都像做实验似的，最后的成品虽然是有用的，但是肯定造成了兼容性的问题。按键问题也不例外：这里有两个属性能检测到用户按下了什么键，虽然有足够的理由为什么需要两个属性，但是依然并不是所有的浏览器都支持。&lt;/p&gt;
&lt;p&gt;另外，在keypress与keydown和keyup之间还有一些很重要的区别。&lt;/p&gt;
&lt;p&gt;最后就是windows和mac的区别了，在mac上要检测用户按下了什么键简直比在windows下难了N倍。 &lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;keyCode和charCode&lt;/h2&gt;
&lt;p&gt;能检测到用户按下了什么键的两个属性就是keyCode和charCode了。简单说来：keyCode是用来检测用户真正按下了键盘上那个键的，而charCode则是给出键入字符的ASCII码。有一些小问题需要注意：大写的A和小写的a的keyCode是一样的，因为他们在键盘上就是一个键；但是charCode不一样，因为他俩是两个不同的字符。&lt;/p&gt;
&lt;p&gt;IE和Opera不支持charCode。然而他们会在keyCode里面保存字符信息，但是只是在onkeypress的情况下，在onkeydown/up情况下包含的是键的信息。 &lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;字符和数字键&lt;/h2&gt;
&lt;p&gt;让我们以一个简单的例子开始。小写a的ASCII码是97，大写的是65。那么在两种情况下，当用户在键盘上敲下相同的键的时候，什么时候的键值是65呢（相当于大写的A）&lt;/p&gt;
&lt;h3&gt;keyCode&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt; &lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/beiyu/WindowsLiveWriter/JavaScriptEvent_11AF9/image_2.png&quot;&gt;&lt;img style=&quot;display: inline; border: 0px;&quot; title=&quot;image&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/beiyu/WindowsLiveWriter/JavaScriptEvent_11AF9/image_thumb.png&quot; border=&quot;0&quot; height=&quot;248&quot; width=&quot;799&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;charCode&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/beiyu/WindowsLiveWriter/JavaScriptEvent_11AF9/image_4.png&quot;&gt;&lt;img style=&quot;display: inline; border: 0px;&quot; title=&quot;image&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/beiyu/WindowsLiveWriter/JavaScriptEvent_11AF9/image_thumb_1.png&quot; border=&quot;0&quot; height=&quot;239&quot; width=&quot;807&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;因此，在onkeydown/up的情况下，你能够从keyCode里面得到键值。在onkeypress情况下，想要得到字符值就要使用：&lt;code&gt;evt.charCode || evt.keyCode&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;标点符号&lt;/h2&gt;
&lt;p&gt;我还是决定不对标点符号键做测试了。我怀疑这不仅跟浏览器和操作系统有关，还可能跟键盘设置和默认语言有关。我一般用的是荷兰语版的windows，如果跟美国版的101键的键盘相比有很大出入，我一点都不会觉得意外。&lt;/p&gt;
&lt;p&gt;比如说shift+,键出来的应该是&amp;lt;，但是我测试的ASCII码的结果却是&amp;rsquo;?&amp;rsquo;的。当我发现了这个问题，我决定还是不在标点符号键的问题上浪费时间了.&lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;特别键&lt;/h2&gt;
&lt;p&gt;功能键就是只那些不能打印出来的但是却具有一定功能的键。比如shift、ESC、enter等等都是功能键。&lt;/p&gt;
&lt;h3&gt;一些说明：&lt;/h3&gt;
&lt;p&gt;1、一般，mac的可靠性比windows要差，有些键可能检测不到&lt;/p&gt;
&lt;p&gt;2、IE不会触发下面这键的keypress事件：delete, end, enter, escape, 功能键, home, insert, pageUp/Down 和 tab。&lt;/p&gt;
&lt;p&gt;3、在onkeypress事件下，Safari会给下面这些键给出很奇怪的keyCode值：delete, end, 功能键, home 和 pageUp.Down。但是在onkeydown/up下面就很正常。&lt;/p&gt;
&lt;p&gt;4、Alt,Cmd,Ctrl和shfit键在mac上无法探测，不过Opera下面例外。然而你却可以使用altKey，ctrlKey，shfitKey这些属性。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;如果你需要探测这些键，你就探测一下载onkeydown/up下面的keyCode就行了，算是给自己帮忙了，onkeypress和charCode就忘掉吧。&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;原文后面有个大的键值的列表，还有一个测试框，有兴趣的童鞋可以移步。&lt;/h2&gt;
&lt;p&gt;翻译地址：&lt;a href=&quot;http://www.quirksmode.org/js/keys.html&quot;&gt;http://www.quirksmode.org/js/keys.html&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www.cnblogs.com/beiyu/aggbug/1666860.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 0　&lt;a href=&quot;http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/331446894/99de35fcd16b4037a7e06764af6fbdc2/feedsky/s.gif?r=http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331446894/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331446894/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 09 Feb 2010 23:26:00 +0800</pubDate><author>北玉</author><guid isPermaLink="false">http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html</guid><dc:creator>北玉</dc:creator><fs:srclink>http://www.cnblogs.com/beiyu/archive/2010/02/09/keys_detected.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/rss.aspx?id=-1</fs:srcfeed><fs:itemid>feedsky/99de35fcd16b4037a7e06764af6fbdc2/~1216755/331446894/1221989</fs:itemid></item><item><title>Silverlight 代码创建动画 示例</title><link>http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html</link><description>&lt;p&gt;阅读: 400 评论: 4 作者: &lt;a href=&quot;http://www.cnblogs.com/hongcing/&quot; target=&quot;_blank&quot;&gt;洪星&lt;/a&gt; 发表于 2010-02-09 20:11 &lt;a href=&quot;http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;p&gt;代码中使用了 C# 3.0 语法&lt;/p&gt;
&lt;p&gt;效果是一个红色矩形从右下角移动到左上角&lt;/p&gt;
&lt;p&gt;仅仅是示例，演示如何在代码中动态创建动画&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div onclick=&quot;cnblogs_code_show('07e7df3c-cdb2-4172-88c2-df29b67d3854')&quot; class=&quot;cnblogs_code&quot;&gt;&lt;img src=&quot;http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif&quot; class=&quot;code_img_closed&quot; id=&quot;code_img_closed_07e7df3c-cdb2-4172-88c2-df29b67d3854&quot; style=&quot;display: none;&quot; /&gt;&lt;img src=&quot;http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif&quot; onclick=&quot;cnblogs_code_hide('07e7df3c-cdb2-4172-88c2-df29b67d3854',event)&quot; class=&quot;code_img_opened&quot; id=&quot;code_img_opened_07e7df3c-cdb2-4172-88c2-df29b67d3854&quot; /&gt;&lt;span class=&quot;cnblogs_code_collapse&quot;&gt;MainPage.xaml&lt;/span&gt;
&lt;div id=&quot;cnblogs_code_open_07e7df3c-cdb2-4172-88c2-df29b67d3854&quot;&gt;
&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;UserControl &lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;x:Class&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;=&quot;Hongcing.Silverlight.Create_And_Run_Animation&quot;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;br /&gt;        xmlns&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;br /&gt;        xmlns:x&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;Canvas &lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Loaded&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;=&quot;LayoutRoot_Loaded&quot;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;UserControl&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div onclick=&quot;cnblogs_code_show('148d33a9-0f4c-4455-82e5-e85513ea4217')&quot; class=&quot;cnblogs_code&quot;&gt;&lt;img src=&quot;http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif&quot; class=&quot;code_img_closed&quot; id=&quot;code_img_closed_148d33a9-0f4c-4455-82e5-e85513ea4217&quot; style=&quot;display: none;&quot; /&gt;&lt;img src=&quot;http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif&quot; onclick=&quot;cnblogs_code_hide('148d33a9-0f4c-4455-82e5-e85513ea4217',event)&quot; class=&quot;code_img_opened&quot; id=&quot;code_img_opened_148d33a9-0f4c-4455-82e5-e85513ea4217&quot; /&gt;&lt;span class=&quot;cnblogs_code_collapse&quot;&gt;MainPage.xaml.cs&lt;/span&gt;
&lt;div id=&quot;cnblogs_code_open_148d33a9-0f4c-4455-82e5-e85513ea4217&quot;&gt;
&lt;pre&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; System;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; System.Windows;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; System.Windows.Controls;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; System.Windows.Media;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; System.Windows.Media.Animation;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;using&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; System.Windows.Shapes;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;namespace&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Hongcing.Silverlight&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;partial&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Create_And_Run_Animation : UserControl&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Create_And_Run_Animation()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;private&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; LayoutRoot_Loaded(&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;object&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; sender, RoutedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            var redRectangle &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Rectangle&lt;br /&gt;            {&lt;br /&gt;                Width &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #800080;&quot;&gt;300&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;br /&gt;                Height &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #800080;&quot;&gt;200&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;br /&gt;                Fill &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; SolidColorBrush(Colors.Red),&lt;br /&gt;                Stroke &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; SolidColorBrush(Colors.Black)&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            (sender &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Panel).Children.Add(redRectangle);&lt;br /&gt;&lt;br /&gt;            var leftAnimation &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; DoubleAnimation&lt;br /&gt;            {&lt;br /&gt;                Duration &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Duration(TimeSpan.FromSeconds(&lt;/span&gt;&lt;span style=&quot;color: #800080;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;)),&lt;br /&gt;                From &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #800080;&quot;&gt;700&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;br /&gt;                To &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            var topAnimation &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; DoubleAnimation&lt;br /&gt;            {&lt;br /&gt;                Duration &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; leftAnimation.Duration,&lt;br /&gt;                From &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #800080;&quot;&gt;350&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;,&lt;br /&gt;                To &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #800080;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            Storyboard.SetTarget(leftAnimation, redRectangle);&lt;br /&gt;            Storyboard.SetTarget(topAnimation, redRectangle);&lt;br /&gt;            Storyboard.SetTargetProperty(leftAnimation, &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; PropertyPath(&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;(Canvas.Left)&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;));&lt;br /&gt;            Storyboard.SetTargetProperty(topAnimation, &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; PropertyPath(&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;(Canvas.Top)&lt;/span&gt;&lt;span style=&quot;color: #800000;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;));&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Storyboard { Children &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt; { leftAnimation, topAnimation } }.Begin();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src=&quot;http://www.cnblogs.com/hongcing/aggbug/1666789.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 4　&lt;a href=&quot;http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/331402757/99de35fcd16b4037a7e06764af6fbdc2/feedsky/s.gif?r=http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331402757/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331402757/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 09 Feb 2010 20:11:00 +0800</pubDate><author>洪星</author><guid isPermaLink="false">http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html</guid><dc:creator>洪星</dc:creator><fs:srclink>http://www.cnblogs.com/hongcing/archive/2010/02/09/1666789.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/rss.aspx?id=-1</fs:srcfeed><fs:itemid>feedsky/99de35fcd16b4037a7e06764af6fbdc2/~1216755/331402757/1221989</fs:itemid></item><item><title>做一个优秀的PM（1）--论赞美和尊重</title><link>http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html</link><description>&lt;p&gt;阅读: 603 评论: 7 作者: &lt;a href=&quot;http://www.cnblogs.com/Rousef/&quot; target=&quot;_blank&quot;&gt;星际迷茫&lt;/a&gt; 发表于 2010-02-09 20:09 &lt;a href=&quot;http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;p&gt;最近一个进项目组时间不长的员工完成一个较为复杂的js代码给我查看，我看了以后，提出了些待改进的问题就走了。刚走了没有多久，听到这个员工小声对旁边的人说：X 哥都不表扬我。&lt;/p&gt;
&lt;p&gt;成功学大师卡耐基的著作&amp;#8220;人性的弱点&amp;#8221;前几章重点讲述了赞美的意义，（第一章，做个批评的吝啬鬼，第二章，给别人留足面子，&lt;strong&gt;第三章，用赞美来激励他人&lt;/strong&gt;，第四章不要对别人的优点视而不见）。他在文章里说：&amp;#8220;我们都希望得到认可和赏识，而且会尽一切努力去得到它。&amp;#8221;&amp;#8220;一个重要的原则是，称赞最微小的进步并称赞其每一次进步。&amp;#8221;现在，我能真切地体会到赞美的重要性。我们都能记住小时候，老师对自己的某次表扬，某次考试或者表现在班级里出类拔萃。。如果你还对赞美有怀疑的话，我想列举下面几个事实：&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;为什么玩家对网游上瘾？因为游戏中的每一次战斗获得的东西和经验，每一次升级的能力提高都让玩家有莫大的满足感。这会让你去做一些自己都不知道为什么要做的事情，只为了让自己愉悦和满足，去获得其他玩家的尊重。现实社会对你努力的漠然导致只有游戏才能最好激励你继续付出，每一次的付出，每一次的金币和经验的积累。一些貌似毫无意义的虚拟经验和财富驱动着无数玩家在废寝忘食中如痴如醉。&lt;/li&gt;&lt;li&gt;玫琳凯是美国历史上最伟大的女性企业家，在玫琳凯早期职业生涯中，一些不愉快的经验教给她很多待人之道。一次她参加了一整天销售讲习，有位销售经理做了一场激励士气的演讲，玫琳凯很渴望和他握手。&amp;#8220;我在队伍中排了3个小时，好不容易轮到我和他见面，但他从未正眼瞧过我一眼，只是从我肩膀上望过去，看看队伍还有多长，他甚至没有察觉到我正在和他握手。虽然我明白他很累，但我也是一样&amp;#8212;&amp;#8212;在队伍中等待了3个小时，我的疲惫并不亚于他！我觉得受到了伤害和侮辱，因为他根本没有把我看在眼里。从那时起，我便下定决心，如果有一天人们排队来和我握手，我将给每一位来到我面前的人全然的关注，不管我自己是多么疲劳！&amp;#8221;在玫琳凯公司成为一家大公司后，玫琳凯曾多次站在长长的队伍前，和上百位人士握手长达数小时。一旦她感到累了，她总是想起自己从前排队和那位销售经理握手的情形，并立即打起精神，直视握手者的眼睛，尽可能地说些比较亲切的话。也许只是几句简短的闲谈，如&amp;#8220;我喜欢你的发型&amp;#8221;或是&amp;#8220;你的衣裳漂亮极了&amp;#8221;，但她尽可能给予对方全然的注意，而且决不允许其他事情打扰自己。&amp;#8220;在握手的同时，我都将对方视为最重要的人。&amp;#8221;&lt;/li&gt;&lt;li&gt;比尔盖茨在１９７５年母亲节时给母亲寄了一张卡片，他用斜体英文写了这么一段：我爱您！，妈妈，您从来不说我比别的孩子差，您总是从我在干得事情当中，不断寻找值得赞许的地方。我怀念和您一起的所有时光。&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;　下次我一定会找个机会对这个同事说：你这次写的代码非常出色，完全实现了想要的效果，我在你这个年龄的时候远达不到这个能力。当然这里面对日后的重用性没有考虑，程序写的比较固定。我相信以后能看到你在这方面有更大的进步。&lt;/p&gt;&lt;img src=&quot;http://www.cnblogs.com/Rousef/aggbug/1666786.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 7　&lt;a href=&quot;http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/331402770/99de35fcd16b4037a7e06764af6fbdc2/feedsky/s.gif?r=http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331402770/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331402770/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 09 Feb 2010 20:09:00 +0800</pubDate><author>星际迷茫</author><guid isPermaLink="false">http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html</guid><dc:creator>星际迷茫</dc:creator><fs:srclink>http://www.cnblogs.com/Rousef/archive/2010/02/09/1666786.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/rss.aspx?id=-1</fs:srcfeed><fs:itemid>feedsky/99de35fcd16b4037a7e06764af6fbdc2/~1216755/331402770/1221989</fs:itemid></item><item><title>[WPF]使用自定义Panel更好地控制Resize时的行为——之二</title><link>http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html</link><description>&lt;p&gt;阅读: 232 评论: 2 作者: &lt;a href=&quot;http://www.cnblogs.com/nankezhishi/&quot; target=&quot;_blank&quot;&gt;南柯之石&lt;/a&gt; 发表于 2010-02-09 20:06 &lt;a href=&quot;http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;p&gt;考虑下面这样的界面布局。 &lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_2.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb.png&quot; width=&quot;508&quot; height=&quot;208&quot;&gt;&lt;/a&gt;  &lt;p&gt;对于这个小窗口而言，东西少。可以把窗口定死在500*300这样。但是如果这个表单是属于一个大窗体的一个部分。情况就比较复杂了。 &lt;p&gt;我们并不能把窗口定死大小。因为窗口有可能会需要在1920*1200到1024*768等不同的分辨率下运行。这样这个表单在不同情况下的大小就有可能有很大的差别。 &lt;p&gt;一个比较好的方案是，当窗口变小，第一行放不下所有控件时。换到第二行。当窗口变大，第一行有多余地方时，把第二行的内容放在第一行上，使界面的右边不留空白。 &lt;p&gt;有人会大叫这不就是WrapPanel做的事情吗？没有错，但是WrapPanel的每一行都是左对齐的，右边会有大片的留白，这在想要设计有良好用户体验的软件中，是不可接受的。 &lt;p&gt;也就是说WPF自带的WrapPanel没有处理好下面这种情况。 &lt;p&gt;&lt;b&gt;第一行有多余的空间，但是又不足以把第二行的什么控件放上来。&lt;/b&gt; &lt;p&gt;这时，&lt;b&gt;第一行的现有的控件应该充分利用第一行的所有可用空间，把第一行填满。&lt;/b&gt;这个是用WrapPanel做不到的。WrapPanel主要用于内部的Item的大小基本一样的情况。如果大小不一，WrapPanel就会造成不好的用户体验。还不如用Grid做等比例缩放好。 &lt;p&gt;很可惜，现在我们又要自己写一个WrapPanel了。如下图所示。 &lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_4.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_1.png&quot; width=&quot;508&quot; height=&quot;118&quot;&gt;&lt;/a&gt;  &lt;p&gt;图1. FillWrapPanel Demo &lt;p&gt;在这个Panel里的所有的Button都有 20的MinWidth和55的MaxWidth。并特意为3号Button设置了30的MaxWidth，为6号Button设置了100的MaxWidth。我们来看一下这个Panel在Resize时的行为。 &lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_6.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_2.png&quot; width=&quot;429&quot; height=&quot;118&quot;&gt;&lt;/a&gt;  &lt;p&gt;图2. 再小就要换行了（原则是让所有控件都尽可能大，但是右边又不能留白） &lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_8.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_3.png&quot; width=&quot;274&quot; height=&quot;118&quot;&gt;&lt;/a&gt;  &lt;p&gt;图3. 缩到6号Button &lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_10.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_4.png&quot; width=&quot;178&quot; height=&quot;145&quot;&gt;&lt;/a&gt;  &lt;p&gt;图4. 缩到4号Button &lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_12.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_5.png&quot; width=&quot;140&quot; height=&quot;145&quot;&gt;&lt;/a&gt;  &lt;p&gt;图5. 最小 &lt;p&gt;如果用WPF的WrapPanel呢？结果很简单。 &lt;p&gt;&lt;a href=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_14.png&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://images.cnblogs.com/cnblogs_com/nankezhishi/WindowsLiveWriter/WPFPanelResize_119EF/image_thumb_6.png&quot; width=&quot;298&quot; height=&quot;115&quot;&gt;&lt;/a&gt;  &lt;p&gt;图6. WPF的WrapPanel（Item的大小是确定的，不会变化，而且右边会留白） &lt;p&gt;系统的WrapPanel很适于实现Explorer里浏览文件、文件夹或是看图软件的缩略图模式。而本文中介绍的FillWrapPanel更适于实现类似表单的窗体。因为里面的东西大小很可能是各不相同的。   &lt;img src=&quot;http://www.cnblogs.com/nankezhishi/aggbug/1666784.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 2　&lt;a href=&quot;http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/331402778/99de35fcd16b4037a7e06764af6fbdc2/feedsky/s.gif?r=http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331402778/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331402778/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 09 Feb 2010 20:06:00 +0800</pubDate><author>南柯之石</author><guid isPermaLink="false">http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html</guid><dc:creator>南柯之石</dc:creator><fs:srclink>http://www.cnblogs.com/nankezhishi/archive/2010/02/09/customPanel2.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/rss.aspx?id=-1</fs:srcfeed><fs:itemid>feedsky/99de35fcd16b4037a7e06764af6fbdc2/~1216755/331402778/1221989</fs:itemid></item><item><title>Ubuntu 9.10 Server 配置基于SSL的Subversion</title><link>http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html</link><description>&lt;p&gt;阅读: 265 评论: 0 作者: &lt;a href=&quot;http://www.cnblogs.com/basilwang/&quot; target=&quot;_blank&quot;&gt;BAsil&lt;/a&gt; 发表于 2010-02-09 20:06 &lt;a href=&quot;http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;p&gt;1 配置准备&lt;/p&gt;  &lt;p&gt;&amp;nbsp; Ubuntu 9.10 Server 英文版。服务器版还是以稳定高效为主，也没有安装图形界面，另外主要是通过&lt;a href=&quot;http://www.chiark.greenend.org.uk/~sgtatham/putty/&quot; target=&quot;_blank&quot;&gt;putty.exe&lt;/a&gt;远程访问。没有采用中文版的原因是，在shell下，中文字体可能没有安装总显示乱码，拜过谷哥大神，未解决。&lt;/p&gt;  &lt;p&gt;2 安装软件及模块一览 &lt;/p&gt;  &lt;p&gt;&amp;nbsp; （1）Apache2.2.14&amp;nbsp; 自己下载编译。未用ubuntu 9.10 server 下apt-get安装的apache2 是因为这个版本的apache2在启用ssl的时候总是报undefined symbol apr_ldap_ssl_init错误，此处我怀疑可能是ubuntu9.10 server的问题,我在虚拟机ubuntu 8.04 desktop下配置成功。&lt;/p&gt;  &lt;p&gt;&amp;nbsp; （2）OpenSSL 通过apt-get install openssl 安装即可&lt;/p&gt;  &lt;p&gt;&amp;nbsp; （3）Subversion 自己编译下载。很不幸，我无法使用ubuntu的subversion来成功配置SSL。&lt;/p&gt;  &lt;p&gt;3 Ubuntu &amp;amp; Linux&amp;nbsp;&amp;nbsp; &lt;/p&gt;  &lt;p&gt;鉴于大家可能对不同发行版的linux不太了解，我简单介绍一下，并比较apache2的Ubuntu版本和自主安装的安装及配置文件路径&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp; 以下摘自Wiki&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; One can distinguish between commercially backed distributions, such as &lt;a href=&quot;http://en.wikipedia.org/wiki/Fedora_%28operating_system%29&quot; target=&quot;_blank&quot;&gt;Fedora&lt;/a&gt; (&lt;a href=&quot;http://en.wikipedia.org/wiki/Red_Hat&quot; target=&quot;_blank&quot;&gt;Red Hat&lt;/a&gt;), &lt;a href=&quot;http://en.wikipedia.org/wiki/OpenSUSE&quot; target=&quot;_blank&quot;&gt;openSUSE&lt;/a&gt; (&lt;a href=&quot;http://en.wikipedia.org/wiki/Novell&quot; target=&quot;_blank&quot;&gt;Novell&lt;/a&gt;), &lt;a href=&quot;http://en.wikipedia.org/wiki/Ubuntu_%28operating_system%29&quot; target=&quot;_blank&quot;&gt;Ubuntu&lt;/a&gt; (&lt;a href=&quot;http://en.wikipedia.org/wiki/Canonical_Ltd.&quot; target=&quot;_blank&quot;&gt;Canonical Ltd.&lt;/a&gt;), and &lt;a href=&quot;http://en.wikipedia.org/wiki/Mandriva_Linux&quot; target=&quot;_blank&quot;&gt;Mandriva Linux&lt;/a&gt; (&lt;a href=&quot;http://en.wikipedia.org/wiki/Mandriva&quot; target=&quot;_blank&quot;&gt;Mandriva&lt;/a&gt;) and entirely community-driven distributions such as &lt;a href=&quot;http://en.wikipedia.org/wiki/Debian&quot; target=&quot;_blank&quot;&gt;Debian&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Gentoo_Linux&quot; target=&quot;_blank&quot;&gt;Gentoo&lt;/a&gt;, though there are other distributions that are driven neither by a corporation nor a community, perhaps most famously &lt;a href=&quot;http://en.wikipedia.org/wiki/Slackware&quot; target=&quot;_blank&quot;&gt;Slackware&lt;/a&gt;.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;简单翻译一下，就是说linux有商业支持的发行版如Fedora,openSUSE,Ubuntu和社区推动的版本如Debian和Gentoo。另外Ubuntu本身又是基于Debian的，这点大家应该清楚。&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;  &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;747&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;142&quot;&gt;&amp;nbsp;&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;282&quot;&gt;Ubuntu Apache2&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;321&quot;&gt;自主安装Apache2&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;142&quot;&gt;安装目录&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;282&quot;&gt;/etc/apache2          &lt;br /&gt;&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;321&quot;&gt;指定路径          &lt;br /&gt;例如：           &lt;br /&gt;/usr/local/apache2           &lt;br /&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;142&quot;&gt;应用程序&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;282&quot;&gt;/etc/sbin/apache2          &lt;br /&gt;/etc/lib/apache2&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;321&quot;&gt;/usr/local/apache2/bin/httpd&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;142&quot;&gt;服务&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;282&quot;&gt;/etc/init.d/apache2&amp;nbsp; restart&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;321&quot;&gt;/usr/local/apache2/bin/httpd &amp;#8211;k restart&amp;nbsp; &lt;br /&gt;（不知还有没有别的方式？)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;142&quot;&gt;配置文件&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;282&quot;&gt;/etc/apache2/apache2.conf          &lt;br /&gt;/etc/apache2/httpd.conf (通常为空）           &lt;br /&gt;/etc/apache2/ports.conf           &lt;br /&gt;/etc/apache2/mods_available/           &lt;br /&gt;/etc/apache2/sites_available/           &lt;br /&gt;apache2.conf负责调用其他的配置文件&lt;/td&gt;        &lt;td valign=&quot;top&quot; width=&quot;321&quot;&gt;/usr/local/apache2/conf/httpd.conf          &lt;br /&gt;/usr/local/apache2/conf/extra/           &lt;br /&gt;httpd.conf负责调用extra文件夹下的配置文件&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;4 自主安装Apache2&lt;/p&gt;  &lt;p&gt;#sudo wget &lt;a title=&quot;http://apache.etoak.com/httpd/httpd-2.2.14.tar.gz&quot; href=&quot;http://apache.etoak.com/httpd/httpd-2.2.14.tar.gz&quot; target=&quot;_blank&quot;&gt;http://apache.etoak.com/httpd/httpd-2.2.14.tar.gz&lt;/a&gt;     &lt;br /&gt;#sudo tar -zxvf httpd-2.2.14.tar.gz&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;#cd httpd-2.2.14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;#sudo ./configure&amp;nbsp;&amp;nbsp; --enable-dav --enable-dav-fs --enable-so&amp;nbsp;&amp;nbsp; --enable-ssl --enable-maintainer-mode -prefix=/usr/local/apache2&amp;nbsp;&amp;nbsp; --enable-mods-shared=all&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;#sudo make&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;#sudo make install&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp; 注意./configure 时确保enable-dav和enable-ssl，其中dav模块是通过apache2存储文件的基础。    &lt;br /&gt;5 安装OpenSSL&lt;/p&gt;  &lt;p&gt;#sudo apt-get install openssl&lt;/p&gt;  &lt;p&gt;6 安装Subversion&lt;/p&gt;  &lt;p&gt;# sudo apt-get install build-essential openssl ssh expat libxyssl-dev libssl-dev&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;# sudo apt-get remove subversion&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;# sudo dpkg --purge subversion&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;# wget &lt;a href=&quot;http://subversion.tigris.org/downloads/subversion-1.6.2.tar.gz&quot; target=&quot;_blank&quot;&gt;http://subversion.tigris.org/downloads/subversion-1.6.2.tar.gz&lt;/a&gt;     &lt;br /&gt;# wget &lt;a href=&quot;http://subversion.tigris.org/downloads/subversion-deps-1.6.2.tar.gz&quot; target=&quot;_blank&quot;&gt;http://subversion.tigris.org/downloads/subversion-deps-1.6.2.tar.gz&lt;/a&gt;     &lt;br /&gt;# tar xvfz subversion-1.6.2.tar.gz&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;# tar xvfz subversion-deps-1.6.2.tar.gz&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;# cd subversion-1.6.2/neon/&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;# ./configure --prefix=/usr/local --with-ssl --with-pic&amp;nbsp;&amp;nbsp; &lt;br /&gt;# make&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;# sudo make install&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;# ./configure --prefix=/usr/local --with-ssl --with-neon=/usr/local&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;# make&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;# sudo make install&amp;nbsp;&amp;nbsp; &lt;/p&gt;  &lt;p&gt;&amp;nbsp; 注意：首先移除ubuntu自带的subversion，随后进行编译安装。其中&lt;a href=&quot;http://subversion.tigris.org/downloads/subversion-deps-1.6.2.tar.gz&quot; target=&quot;_blank&quot;&gt;subversion-deps-1.6.2.tar.gz&lt;/a&gt;是Subversion客户端使用的Neon库，它不仅仅可以用来验证服务器证书，也可以必要时提供客户端证书，因此也要安装上&lt;/p&gt;  &lt;p&gt;7 配置http访问subversion&lt;/p&gt;  &lt;p&gt;&amp;nbsp; 参考了&lt;a href=&quot;http://www.javaeye.com/topic/293540&quot; target=&quot;_blank&quot;&gt;主题：ubuntu下安装svn提供HTTP版本管理服务&lt;/a&gt;和&lt;a href=&quot;http://www.howtogeek.com/howto/ubuntu/install-subversion-with-web-access-on-ubuntu/&quot; target=&quot;_blank&quot;&gt;Install Subversion with Web Access on Ubuntu&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;(1)#sudo svnadmin create /svn&amp;nbsp;&amp;nbsp; &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp; 可以看一下/svn下是不是增加了些文件&amp;nbsp; &lt;br /&gt;(2)#sudo vim /usr/local/apache2/conf/httpd.conf&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp; 增加&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;Location /svn&amp;gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DAV svn     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SVNPath /svn     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AuthzSVNAccessFile /svn/conf/authz     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AuthType Basic     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AuthName &quot;Subversion.Tracker&quot;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AuthUserFile /svn/conf/passwd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Require valid-user     &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/Location&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这部分应该也可以放置到 conf/extra/httpd_dav.conf文件中，然后将httpd.conf中的 include conf/extra/httpd_dav.conf 注释去掉，不过奇怪的是httpd_dav.conf文件中的示例使用&amp;lt;Directory&amp;gt;而不是&amp;lt;Location&amp;gt;,我未作尝试。&lt;/p&gt;  &lt;p&gt;(3)#sudo htpasswd -cm /svn/conf/passwd &amp;lt;username&amp;gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp; 增加一个用户名,可以打开passwd文件查看是否创建成功     &lt;br /&gt;&amp;nbsp;&amp;nbsp; 同时在Ubuntu上创建同名用户和相同密码&amp;nbsp; (此处待验证，网络上有的文章没有强调这一点     &lt;br /&gt;&amp;nbsp;&amp;nbsp; sudo useradd &amp;lt;username&amp;gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp; sudo passwd &amp;lt;password&amp;gt;&lt;/p&gt;  &lt;p&gt;(4)#sudo chown www-data:www-data&amp;nbsp; -R /svn&amp;nbsp; &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 将/svn的所有者和所在的组更改为www-data（ubuntu下apache2的账户)&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #sudo chmod &amp;#8211;R g+ws /svn&lt;/p&gt;  &lt;p&gt;(5)#sudo /usr/local/apache2/bin/httpd &amp;#8211;k restart&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 看看&lt;a href=&quot;http://localhost/svn&quot; target=&quot;_blank&quot;&gt;http://localhost/svn&lt;/a&gt; 是否可以访问了&lt;/p&gt;  &lt;p&gt;8 配置ssl访问subversion&lt;/p&gt;  &lt;p&gt;&amp;nbsp; 参考了&lt;a href=&quot;http://ywbanm.javaeye.com/blog/341562&quot; target=&quot;_blank&quot;&gt;Linux SVN+Apache+SSL 安装配置&lt;/a&gt;和&lt;a href=&quot;http://koda.javaeye.com/blog/288187&quot; target=&quot;_blank&quot;&gt;Apache SSL配置&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;openssl genrsa -des3 -out ca.key 1024    &lt;br /&gt;//按提示输入密码：****     &lt;br /&gt;chmod 400 ca.key     &lt;br /&gt;//生成证书     &lt;br /&gt;openssl req -new -x509 -days 3650 -key ca.key -out ca.crt     &lt;br /&gt;//按提示分别输入如下内容：     &lt;br /&gt;//Country Name: CN     &lt;br /&gt;//State or Province Name:     &lt;br /&gt;//Locality Name:     &lt;br /&gt;//Organization Name:     &lt;br /&gt;//Organizational Unit Name:     &lt;br /&gt;//Common Name:     &lt;br /&gt;//Email Address: your email     &lt;br /&gt;chmod 400 ca.crt     &lt;br /&gt;openssl genrsa -des3 -out server.key 1024     &lt;br /&gt;//按提示输入密码：     &lt;br /&gt;chmod 400 server.key     &lt;br /&gt;openssl req -new -key server.key -out server.csr     &lt;br /&gt;//按提示分别输入如下内容：     &lt;br /&gt;//Country Name: CN     &lt;br /&gt;//State or Province Name:     &lt;br /&gt;//Locality Name:     &lt;br /&gt;//Organization Name:     &lt;br /&gt;//Organizational Unit Name:     &lt;br /&gt;//Common Name:     &lt;br /&gt;//Email Address: your email     &lt;br /&gt;(ca.crt 和server.csr 的Common Name不能一样)     &lt;br /&gt;openssl req -noout -text -in server.csr     &lt;br /&gt;openssl x509 -req -days 365 -in server.csr -signkey server.key -out&amp;nbsp; server.crt     &lt;br /&gt;chmod 400 server.crt &lt;/p&gt;  &lt;p&gt;vim /usr/local/apache2/conf/httpd.conf    &lt;br /&gt;取消Include conf/extra/httpd-ssl.conf前的注释#&lt;/p&gt;  &lt;p&gt;打开httpd-ssl.conf文件查看如下两行，确保前面生成的证书放置在该路径下&lt;/p&gt;  &lt;p&gt;SSLCertificateFile &quot;/usr/local/apache2/conf/server.crt&quot;&lt;/p&gt;  &lt;p&gt;SSLCertificateKeyFile &quot;/usr/local/apache2/conf/server.key&quot;&lt;/p&gt;  &lt;p&gt;重启httpd服务&lt;/p&gt;  &lt;p&gt;查看&lt;a title=&quot;https://202.194.254.21/svn/&quot; href=&quot;https://localhost/svn/&quot; target=&quot;_blank&quot;&gt;https://localhost/svn/&lt;/a&gt;&amp;nbsp; 浏览器显示此网站的安全证书有问题，忽略它，输入用户名和密码，至此基于SSL的Subversion配置完成。&lt;/p&gt;  &lt;p&gt;9 总结&lt;/p&gt;  &lt;p&gt;&amp;nbsp; 配置过程中应该了解ubuntu和其他linux发行版安装软件的不同，掌握make和make install。如碰到apache2不能启动，阅读错误提示以及查看日志(/usr/local/apache2/logs/error.log).&lt;/p&gt;&lt;img src=&quot;http://www.cnblogs.com/basilwang/aggbug/1666785.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 0　&lt;a href=&quot;http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/331402785/99de35fcd16b4037a7e06764af6fbdc2/feedsky/s.gif?r=http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331402785/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331402785/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 09 Feb 2010 20:06:00 +0800</pubDate><author>BAsil</author><guid isPermaLink="false">http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html</guid><dc:creator>BAsil</dc:creator><fs:srclink>http://www.cnblogs.com/basilwang/archive/2010/02/09/1666785.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/rss.aspx?id=-1</fs:srcfeed><fs:itemid>feedsky/99de35fcd16b4037a7e06764af6fbdc2/~1216755/331402785/1221989</fs:itemid></item><item><title>.NET/CLI元数据中使用的压缩整数</title><link>http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html</link><description>&lt;p&gt;阅读: 348 评论: 8 作者: &lt;a href=&quot;http://www.cnblogs.com/AndersLiu/&quot; target=&quot;_blank&quot;&gt;Anders Liu&lt;/a&gt; 发表于 2010-02-09 19:20 &lt;a href=&quot;http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html&quot; target=&quot;_blank&quot;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;al-body&quot;&gt;
&lt;h1&gt;.NET/CLI元数据中使用的压缩整数&lt;/h1&gt;
&lt;div class=&quot;al-copy&quot;&gt;
	&lt;p&gt;本文地址：&lt;a href=&quot;http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html&quot;
title=&quot;.NET/CLI元数据中使用的压缩整数&quot;&gt;http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;作者：&lt;a href=&quot;http://andersliu.cnblogs.com&quot; title=&quot;Anders Liu&quot;&gt;Anders Liu&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;al-summary&quot;&gt;
	&lt;p&gt;摘要：.NET/CLI的PE文件中广泛采用了一种整数压缩算法，这种算法可以将一个32位整数根据其大小的不同放置在1、2或4个字节中。当整数的值比较小时，这种算法能够有效地减少PE文件的大小。本文介绍了这种压缩算法，并给出了压缩/解压缩的参考实现。&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;参考文献&lt;/h2&gt;
&lt;ul class=&quot;dotul&quot;&gt;
&lt;li&gt;《ECMA-335——Common Language Infrastructure (CLI) 4th Edition》，June 2006&lt;/li&gt;
&lt;li&gt;《Expert .NET 2.0 IL Assembler》，Serge Lidin，Apress，2006&lt;/li&gt;
&lt;li&gt;《.NET探秘：MSIL权威指南》（《Expert .NET 2.0 IL Assembler》中文版），Serge Lidin著，包建强 译，人民邮电出版社，2009&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;简介&lt;/h2&gt;
&lt;p&gt;简单来说，整数压缩算法就是将一个32位整数（通常占用4个字节）放置到尽可能少的存储空间中（1、2或4个字节）的方法。&lt;/p&gt;
&lt;p&gt;整数压缩算法广泛地应用在.NET/CLI PE文件中，如各种元数据签名、#Blob和#US流等。在这些地方，需要使用整数值来记录条目的数量或是数据块的大小等。如果单纯地采用32位整数，由于绝大多数数量值或大小值都不大，会造成大量字节都被置为无意义的0值。在这些场景中使用压缩算法，可以有效地节省PE文件占用的磁盘空间或网络带宽。&lt;/p&gt;
&lt;p&gt;以下是PE文件中一些使用到压缩整数的场景：&lt;/p&gt;
&lt;ul class=&quot;dotul&quot;&gt;
&lt;li&gt;Blob堆（#Blob流和#US流所采用的存储格式）中的每个条目开始处，使用压缩的无符号整数表示条目的大小；&lt;/li&gt;
&lt;li&gt;方法的元数据签名中，使用压缩的无符号整数存储参数的数量；&lt;/li&gt;
&lt;li&gt;元数据签名中的数组下标，采用压缩的带符号整数进行存储。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意，本文所介绍的压缩与解压算法，都是针对32位整数的。此外，在本文的介绍中，如果没有特殊提及，则所出现的整数都按照大尾数法表示（最高权重字节放在左侧或上方）。&lt;/p&gt;
&lt;h2&gt;无符号整数的压缩与解压&lt;/h2&gt;
&lt;h3&gt;无符号整数的压缩算法&lt;/h3&gt;
&lt;p&gt;无符号整数的压缩是比较简单的，即将无符号整数的整个取值范围划分为几个区段，而整数值根据其所在的区段不同，放置在1、2或4个字节中。表1列出了无符号整数的区段划分和压缩方式。&lt;/p&gt;
&lt;table&gt;
&lt;caption&gt;表1 - 无符号整数的区段划分&lt;/caption&gt;
&lt;tr&gt;&lt;th&gt;区段&lt;/th&gt;&lt;th&gt;字节数&lt;/th&gt;&lt;th&gt;掩码&lt;/th&gt;&lt;th&gt;二进制形式&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;[00000000h, 0000007Fh]&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;80h&lt;/td&gt;&lt;td&gt;0BBBBBBBB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;[00000080h, 00003FFFh]&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;C0h&lt;/td&gt;&lt;td&gt;10BBBBBB BBBBBBBB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;[00004000h, 1FFFFFFFh]&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;E0h&lt;/td&gt;&lt;td&gt;110BBBBB BBBBBBBB BBBBBBBB BBBBBBBB&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;在表1中：&lt;/p&gt;
&lt;ul class=&quot;dotul&quot;&gt;
&lt;li&gt;“区段”列出了每个区段的最小值（含）和最大值（含）。&lt;/li&gt;
&lt;li&gt;“字节数”列出了压缩后的值占用的字节数。&lt;/li&gt;
&lt;li&gt;“掩码”列出了在压缩后的值上施加的掩码，
    &lt;ul class=&quot;dotul&quot;&gt;
    &lt;li&gt;如果压缩后的整数值占用1字节，则与掩码80h进行&amp;amp;（按位与）操作后的结果为0h，&lt;/li&gt;
    &lt;li&gt;如果压缩后的整数值占用2字节，则其首字节与掩码C0h进行&amp;amp;操作后的结果是80h，&lt;/li&gt;
    &lt;li&gt;如果压缩后的整数值占用4字节，则其首字节与掩码E0h进行&amp;amp;操作后的结果是C0h。&lt;/li&gt;
    &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;“二进制形式”列出了压缩结果的二进制形式，其中的“1”和“0”都是固定值，而“B”则表示实际整数值的有效位。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从表1可以清晰地看出，无符号整数压缩算法的适用范围是[0h, 1FFFFFFFh]（[0, 536870911]）之内的无符号整数，大于1FFFFFFFh的无符号整数不能用这种方式进行压缩。&lt;/p&gt;
&lt;p&gt;代码1给出了无符号整数压缩算法的参考实现。&lt;/p&gt;
&lt;div class=&quot;al-ins&quot;&gt;
&lt;p class=&quot;al-ins-title&quot;&gt;代码1 - 无符号整数压缩算法的参考实现&lt;/p&gt;
&lt;pre class=&quot;al-code-para&quot;&gt;
public static byte[] CompressUInt(uint data)
{
  if (data &lt;= 0x7F)
  {
    var bytes = new byte[1];
    bytes[0] = (byte)data;
    return bytes;
  }
  else if (data &lt;= 0x3FFF)
  {
    var bytes = new byte[2];
    bytes[0] = (byte)(((data &amp; 0xFF00) &gt;&gt; 8) | 0x80);
    bytes[1] = (byte)(data &amp; 0x00FF);
    return bytes;
  }
  else if (data &lt;= 0x1FFFFFFF)
  {
    var bytes = new byte[4];
    bytes[0] = (byte)(((data &amp; 0xFF000000) &gt;&gt; 24) | 0xC0);
    bytes[1] = (byte)((data &amp; 0x00FF0000) &gt;&gt; 16);
    bytes[2] = (byte)((data &amp; 0x0000FF00) &gt;&gt; 8);
    bytes[3] = (byte)(data &amp; 0x000000FF);
    return bytes;
  }
  else
    throw new NotSupportedException();
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;无符号整数的解压缩算法&lt;/h3&gt;
&lt;p&gt;无符号整数的解压缩算法也非常简单，如下所示：&lt;/p&gt;
&lt;ul class=&quot;dotul&quot;&gt;
&lt;li&gt;如果首字节的二进制形式型如0bbbbbbb（与80h进行按位与运算，结果为0h），则采用1个字节存放整数值（字节值为b0），原整数值=b0。&lt;/li&gt;
&lt;li&gt;如果首字节的二进制形式型如10bbbbbb（与C0h进行按位与运算，结果为80h），则采用2个字节存放整数值（字节值依次为b0，b1），原整数值=(b0 &amp;amp; 0x3F) &amp;lt;&amp;lt; 8 | b1。&lt;/li&gt;
&lt;li&gt;	如果首字节的二进制形式型如110bbbbb（与E0h进行按位与运算，结果为C0h），则采用4个字节存放整数值（字节值依次为b0，b1，b2，b3），原整数值=(b0 &amp;amp; 0x1F) &amp;lt;&amp;lt; 24 | b1 &amp;lt;&amp;lt; 16 | b2 &amp;lt;&amp;lt; 8 | b3。.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;代码2给出了无符号整数解压缩算法的参考实现。&lt;/p&gt;
&lt;div class=&quot;al-ins&quot;&gt;
&lt;p class=&quot;al-ins-title&quot;&gt;代码2 – 无符号整数解压缩算法的参考实现&lt;/p&gt;
&lt;pre class=&quot;al-code-para&quot;&gt;
public static uint DecompressUInt(byte[] data)
{
  if (data == null)
    throw new ArgumentNullException(&quot;data&quot;);

  if ((data[0] &amp; 0x80) == 0
    &amp;&amp; data.Length == 1)
  {
    return (uint)data[0];
  }
  else if ((data[0] &amp; 0xC0) == 0x80
    &amp;&amp; data.Length == 2)
  {
    return (uint)((data[0] &amp; 0x3F) &lt;&lt; 8 | data[1]);
  }
  else if ((data[0] &amp; 0xE0) == 0xC0
    &amp;&amp; data.Length == 4)
  {
    return (uint)((data[0] &amp; 0x1F) &lt;&lt; 24
      | data[1] &lt;&lt; 16 | data[2] &lt;&lt; 8 | data[3]);
  }
  else
    throw new NotSupportedException();
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;h2&gt;带符号整数的压缩与解压&lt;/h2&gt;
&lt;h3&gt;带符号整数的压缩算法&lt;/h3&gt;
&lt;p&gt;带符号整数的压缩与解压略微复杂一些，因为需要处理符号位。简单来说，需要在确定好所需的存储字节数之后，将原整数整体向左移1位，然后将符号位放置在最低位上（0表示正数，1表示负数），最后按照同无符号整数一样的方式为首字节设置掩码。&lt;/p&gt;
&lt;p&gt;在为带符号整数确定需要用多少个字节来存放压缩值时，需要首先取得原整数的“准绝对值”，即对负数进行按位取反（而不是数学求负），然后将这个“准绝对值”左移1位（为符号位空出最低位），再按照表1列出的区段取得最终占用的字节数。&lt;/p&gt;
&lt;p&gt;或者，可以省略左移1位的操作，而是按照表2中列出的区段进行查找。&lt;/p&gt;
&lt;table&gt;
&lt;caption&gt;表2 - 带符号整数“准绝对值”的区段划分&lt;/caption&gt;
&lt;tr&gt;&lt;th&gt;区段&lt;/th&gt;&lt;th&gt;字节数&lt;/th&gt;&lt;th&gt;有效位掩码&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;[00000000h, 0000003Fh]&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;0000003Fh&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;[00000040h, 00001FFFh]&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;00001FFFh&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;[00002000h, 0FFFFFFFh]&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;0FFFFFFFh&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;在表2中：&lt;/p&gt;
&lt;ul class=&quot;dotul&quot;&gt;
&lt;li&gt;“区段”列出的是根据原整数“准绝对值”划分出的每个区段的最小值（含）和最大值（含）。&lt;/li&gt;
&lt;li&gt;“字节数”列出了压缩后的值占用的字节数。&lt;/li&gt;
&lt;li&gt;“有效位掩码”列出的掩码在与原整数进行&amp;amp;操作之后，可以取得原整数中真正有意义的位数。这建立在这样一个事实上——对于正整数来说，其最左侧的一些位都是0，是没有意义的，可以省略；而对于负整数来说，其最左侧的一些位都是1，也是没有意义的，可以省略。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在与有效位掩码进行&amp;amp;操作取得有效位之后，需要将这些有效位整体左移1位。接下来，如果原整数是负数，则需要将最低位（符号位）置1。&lt;/p&gt;
&lt;p&gt;最后，为压缩值的首字节设置掩码，规则与无符号整数一样。&lt;/p&gt;
&lt;p&gt;带符号整数压缩算法的适用范围为——对于正数为[0h, 0FFFFFFFh]（[0, 268435455]），对于负数为[F0000000h, FFFFFFFFh]（[-268435456, -1]），在此范围之外的整数不能用这种方式进行压缩。&lt;/p&gt;
&lt;p&gt;代码3给出了带符号整数压缩算法的参考实现。&lt;/p&gt;
&lt;div class=&quot;al-ins&quot;&gt;
&lt;p class=&quot;al-ins-title&quot;&gt;代码3 -带符号整数压缩算法的参考实现&lt;/p&gt;
&lt;pre class=&quot;al-code-para&quot;&gt;
public static byte[] CompressInt(int data)
{
    var u = data &gt;= 0 ? (uint)data : ~(uint)data;
    if (u &lt;= 0x3F)
    {
        var uv = ((uint)data &amp; 0x0000003F) &lt;&lt; 1;
        if (data &lt; 0)
            uv |= 0x01;

        var bytes = new byte[1];
        bytes[0] = (byte)uv;
        return bytes;
    }
    else if (u &lt;= 0x1FFF)
    {
        var uv = ((uint)data &amp; 0x00001FFF) &lt;&lt; 1;
        if (data &lt; 0)
            uv |= 0x01;

        var bytes = new byte[2];
        bytes[0] = (byte)(((uv &amp; 0xFF00) &gt;&gt; 8) | 0x80);
        bytes[1] = (byte)(uv &amp; 0x00FF);
        return bytes;
    }
    else if (u &lt;= 0x0FFFFFFF)
    {
        var uv = ((uint)data &amp; 0x0FFFFFFF) &lt;&lt; 1;
        if (data &lt; 0)
            uv |= 0x01;

        var bytes = new byte[4];
        bytes[0] = (byte)(((uv &amp; 0xFF000000) &gt;&gt; 24) | 0xC0);
        bytes[1] = (byte)((uv &amp; 0x00FF0000) &gt;&gt; 16);
        bytes[2] = (byte)((uv &amp; 0x0000FF00) &gt;&gt; 8);
        bytes[3] = (byte)(uv &amp; 0x000000FF);
        return bytes;
    }
    else
        throw new NotSupportedException();
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;注意，只有在确定压缩值占用的字节数时用到了原整数的“准绝对值”，一旦字节数确定之后，实际进行压缩时，使用的还是原整数，只不过将其当做无符号整数对待。&lt;/p&gt;
&lt;h3&gt;带符号整数的解压缩算法&lt;/h3&gt;
&lt;p&gt;由于带符号整数的压缩值与无符号整数的压缩值具有相同的结构，所以带符号整数的解压缩算法可以建立在无符号整数的解压缩算法基础之上。&lt;/p&gt;
&lt;p&gt;首先，按照无符号整数的解压缩算法对压缩值进行解压缩，得到一个32位无符号整数，根据最低位（符号位）确定原整数的符号。&lt;/p&gt;
&lt;p&gt;如果原整数为正数（最低位，即符号位为0），则将解压得到的无符号整数右移1位，再强制转换为带符号整数，即可得到原整数值。&lt;/p&gt;
&lt;p&gt;如果原整数为负数（最低位，即符号位为1），则需要将解压得到的无符号整数右移1位，再将负数最左侧那些没有意义的“1”位恢复回来：&lt;/p&gt;
&lt;ul class=&quot;dotul&quot;&gt;
&lt;li&gt;如果压缩值占用了1字节，则与FFFFFFC0h进行|（按位或）操作；&lt;/li&gt;
&lt;li&gt;如果压缩值占用了2字节，则与FFFFE000h进行|操作；&lt;/li&gt;
&lt;li&gt;如果压缩值占用了4字节，则与F0000000h进行|操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最后，将这个无符号整数强制转换为带符号整数，即可得到原整数值。&lt;/p&gt;
&lt;p&gt;代码4给出了带符号整数解压缩算法的参考实现。&lt;/p&gt;
&lt;div class=&quot;al-ins&quot;&gt;
&lt;p class=&quot;al-ins-title&quot;&gt;代码4 - 带符号整数解压缩算法的参考实现&lt;/p&gt;
&lt;pre class=&quot;al-code-para&quot;&gt;
public static int DecompressInt(byte[] data)
{
    var u = DecompressUInt(data);

    if ((u &amp; 0x00000001) == 0)
        return (int)(u &gt;&gt; 1);

    var nb = GetCompressedIntSize(data[0]);
    uint sm;
    switch (nb)
    {
        case 1: sm = 0xFFFFFFC0; break;
        case 2: sm = 0xFFFFE000; break;
        case 4: sm = 0xF0000000; break;
        default: throw new NotSupportedException();
    }

    return (int)((u &gt;&gt; 1) | sm);
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;这里调用了一个工具方法GetCompressedIntSize，用于根据压缩值的第一个字节判断采用几个字节存放该压缩值。该方法非常简单，如代码5所示。&lt;/p&gt;
&lt;div class=&quot;al-ins&quot;&gt;
&lt;p class=&quot;al-ins-title&quot;&gt;代码5 – 根据压缩值的第一个字节判断所需字节数&lt;/p&gt;
&lt;pre class=&quot;al-code-para&quot;&gt;
public static uint GetCompressedIntSize(byte firstByte)
{
  if ((firstByte &amp; 0x80) == 0)
    return 1;
  else if ((firstByte &amp; 0xC0) == 0x80)
    return 2;
  else if ((firstByte &amp; 0xE0) == 0xC0)
    return 4;
  else
      throw new NotSupportedException();
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;h2&gt;各种实现中的问题&lt;/h2&gt;
&lt;p&gt;压缩的带符号整数在.NET/CLI元数据中的使用场景非常少——据我所知，只有元数据签名中的数组下标值使用了压缩的带符号整数（这意味着原理上.NET/CLI的底层是支持下标为负数的数组的）。而在这方面，几乎所有现有的CLI实现都或多或少的出现了一些问题，同时，我所参考的文献中，关于带符号整数压缩算法的描述也都是含糊不清的。幸运的是，几乎所有高级语言都不允许开发者声明下标为负数的数组，CLS规范也要求数组的下标必须从0开始，所以这些问题并不会对实际项目造成重大影响。&lt;/p&gt;
&lt;p&gt;下面列举几个我所研究过的实现中的问题，下一节将列出参考文献中的问题。&lt;/p&gt;
&lt;h3&gt;ILASM/ILDASM&lt;/h3&gt;
&lt;p&gt;很显然，微软自己对带符号整数的压缩算法也不是很清晰。ILASM是我所接触过的编译器中唯一能接受负数下标数组的，也是我在研究这个课题时使用最多的编译器。对于正数数组下标，ILASM完全没有问题；但对于负数下标，当下标值在-8192（含）到-8129（含）之间时，得到的压缩值是错误的。&lt;/p&gt;
&lt;p&gt;另外，ILASM使用的带符号整数压缩算法实现，很明显与本文介绍的不同，因此并不能涵盖所有理论上支持的整数（[-268435456, 268435455]），当下标值小于或等于-268427265时，得到的压缩值也是错误的。&lt;/p&gt;
&lt;p&gt;由于ILASM存在错误，所以对ILDASM无法进行完全准确的测验。不过，即便是对ILASM产生的错误值进行解压缩，ILDASM得到的结果和本文中介绍的带符号整数解压缩算法得到的结果都是一致的，所有有理由相信ILDASM在解压缩算法上应该是正确的。但是，错误的压缩值会随机造成ILDASM的崩溃。&lt;/p&gt;
&lt;p&gt;以上问题存在于ILASM的2.0、3.0和3.5版本中，但在4.0 Beta版中已经得到改正，.NET Framework SDK 4.0 Beta携带的ILASM能够对所有理论上可接受的负数数组下标进行正确的压缩，而ILDASM也能对其进行正确的解压缩。&lt;/p&gt;
&lt;h3&gt;Mono Cecil&lt;/h3&gt;
&lt;p&gt;通过对Mono Cecil源代码的研究发现，Mono Cecil的实现非常忠诚于ECMA-335标准，而ECMA-335对数组下标的描述恰恰是错误的（参见后面“参考文献之修正”一节）——称数组下标值是压缩的无符号整数（而不是带符号整数）。&lt;/p&gt;
&lt;p&gt;因此，Mono Cecil只提供了针对无符号整数的压缩和解压缩实现（参见Mono.Cecil.dll中的Mono.Cecil.Metadata.Utilities.WriteCompressedInteger(BinaryWriter, Int32) : Int32方法和Mono.Cecil.Metadata.Utilities.ReadCompressedInteger(Byte[], Int32, Int32&amp;) : Int32方法）。而在写入和读取元数据签名时，也是将数组下标作为无符号整数处理的（参见Mono.Cecil.Signatures.SignatureWriter.Write(SigType) : Void方法和Mono.Cecil.Signatures.SignatureReader.ReadType(Byte[], Int32, Int32&amp;) : SigType方法）。&lt;/p&gt;
&lt;p&gt;在使用Mono Cecil库进行反射时，如果数组的下标为正数，则得到的结果是实际下标的2倍（因为缺少了解压缩带符号整数时的右移操作）；而如果数组的下表是负数，则得到的结果就是完全错误的了。&lt;/p&gt;
&lt;p&gt;我只对Mono Cecil 0.6版本的源代码做了调查，其他版本不详，读者可自行检查、分析。&lt;/p&gt;
&lt;h3&gt;CCI Metadata&lt;/h3&gt;
&lt;p&gt;CCI Metadata则确实将数组下标当作带符号整数对待了，但是它使用的压缩算法非常简单——将原整数的绝对值左移1位，再将符号位放置在最低位（参见Microsoft.Cci.PeWriter.dll中的Microsoft.Cci.BinaryWriter.WriteCompressedInt(Int32) : Void方法），然后按照无符号整数进行压缩；而解压缩算法是对应的——先按照无符号整数的解压算法得到一个无符号整数，然后根据最低位确定结果的符号，最后将整个无符号数右移1位，再根据符号位设置正负号（参见Microsoft.Cci.PeReader.dll中的Microsoft.Cci.UtilityDataStructures.MemoryReader.ReadCompressedInt32() : Int32方法）。&lt;/p&gt;
&lt;p&gt;CCI Metadata所采用的算法与《Expert .NET 2.0 IL Assembler》一书中提到的算法描述相符，但该书中的描述也是有误的（参见后面“参考文献之修正”一节）。&lt;/p&gt;
&lt;p&gt;我所调研的CCI Metadata版本是2.0.49.23471。&lt;/p&gt;
&lt;h3&gt;其他尚未研究的实现&lt;/h3&gt;
&lt;p&gt;还有一些.NET/CLI的实现尚未研究，例如：&lt;/p&gt;
&lt;ul class=&quot;dotul&quot;&gt;
&lt;li&gt;System.Reflection/System.Reflection.Emit&lt;/li&gt;
&lt;li&gt;Shared Source CLI (Rotor)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考文献之修正&lt;/h2&gt;
&lt;h3&gt;《Expert .NET 2.0 IL Assembler》&lt;/h3&gt;
&lt;p&gt;本书在第8章表8-4之后的一个自然段（P150第一段）描述了带符号整数的压缩算法，此处的描述有误，正确的描述请参见本文中“带符号整数的压缩算法”一节。&lt;/p&gt;
&lt;p&gt;不幸的是，本书的中文版《.NET探秘：MSIL权威指南》并没有对这个问题进行修正（同样是第8章表8-4之后的一个自然段，P132）。当初包建强在翻译这本书的时候，我也向他提到过这里的问题，不过那时候我还没有完全准确地推断出正确的压缩算法，因此他只好直译。&lt;/p&gt;
&lt;h3&gt;《ECMA-335——Common Language Infrastructure (CLI) 4th Edition》&lt;/h3&gt;
&lt;p&gt;在ECMA-335标准中，完全没有区分“压缩的无符号整数”和“压缩的带符号整数”这两个术语，统称之为“compressed integer”。&lt;/p&gt;
&lt;p&gt;ECMA-335 Partition II: Metadata Definition and Semantics中的23.2 Blobs and signatures一节中给出了“compressed integer”的压缩算法（P153），这实际上是无符号整数的压缩算法，该算法是正确的。&lt;/p&gt;
&lt;p&gt;ECMA-335 Partition II: Metadata Definition and Semantics中的23.2.13 ArrayShape一节中给出了元数据签名中的数组表示方法（P161），其中称Size和LoBound都是“compressed integer”，这是不准确的。&lt;/p&gt;
&lt;p&gt;修正方法是，引入术语“compressed unsigned integer”，用于描述其他地方的“compressed integer”；引入术语“compressed signed integer”，用于描述数组下标值（LoBound）。并按照本文“带符号整数的压缩算法”一节的描述，提供带符号整数的压缩算法。&lt;/p&gt;
&lt;p&gt;（完）&lt;/p&gt;
&lt;/div&gt;
&lt;img src=&quot;http://www.cnblogs.com/AndersLiu/aggbug/1666773.html?type=1&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;/&gt;&lt;p&gt;评论: 8　&lt;a href=&quot;http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html#pagedcomment&quot; target=&quot;_blank&quot;&gt;查看评论&lt;/a&gt;　&lt;a href=&quot;http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html#commentform&quot; target=&quot;_blank&quot;&gt;发表评论&lt;/a&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;最新新闻：&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56793/&quot; target=&quot;_blank&quot;&gt;知名扩展 Firebug 的简化版登陆 Chrome&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:59)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56792/&quot; target=&quot;_blank&quot;&gt;Google 悄悄地启用 1e100.net，打枪地不要&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:57)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56791/&quot; target=&quot;_blank&quot;&gt;从 Google 代码库找到的好东西&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:46)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56789/&quot; target=&quot;_blank&quot;&gt;苹果在线商店临时关闭 或将推新Macbook&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 22:39)&lt;/span&gt;&lt;br/&gt;· &lt;a href=&quot;http://news.cnblogs.com/n/56788/&quot; target=&quot;_blank&quot;&gt;豆瓣网推出豆瓣电台iPhone客户端&lt;/a&gt;&lt;span style=&quot;color:gray&quot;&gt;(2010-02-09 21:51)&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编辑推荐：&lt;a href=&quot;http://news.cnblogs.com/n/56782/&quot; target=&quot;_blank&quot;&gt;2010年2月编程语言排行榜&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;网站导航：&lt;a href=&quot;http://www.cnblogs.com&quot; target=&quot;_blank&quot;&gt;博客园首页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/&quot; target=&quot;_blank&quot;&gt;个人主页&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://news.cnblogs.com&quot; target=&quot;_blank&quot;&gt;新闻&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/ing/&quot; target=&quot;_blank&quot;&gt;闪存&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://home.cnblogs.com/group/&quot; target=&quot;_blank&quot;&gt;小组&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com/q/&quot; target=&quot;_blank&quot;&gt;博问&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://space.cnblogs.com&quot; target=&quot;_blank&quot;&gt;社区&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://kb.cnblogs.com&quot; target=&quot;_blank&quot;&gt;知识库&lt;/a&gt;&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/331402791/99de35fcd16b4037a7e06764af6fbdc2/feedsky/s.gif?r=http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331402791/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/99de35fcd16b4037a7e06764af6fbdc2/331402791/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 09 Feb 2010 19:20:00 +0800</pubDate><author>Anders Liu</author><guid isPermaLink="false">http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html</guid><dc:creator>Anders Liu</dc:creator><fs:srclink>http://www.cnblogs.com/AndersLiu/archive/2010/02/09/compressed-integer-in-metadata.html</fs:srclink><fs:srcfeed>http://www.cnblogs.com/rss.aspx?id=-1</fs:srcfeed><fs:itemid>feedsky/99de35fcd16b4037a7e06764af6fbdc2/~1216755/331402791/1221989</fs:itemid></item></channel></rss>