﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-深瞳</title><link>http://www.cnblogs.com/deepcast/</link><description>夜如深瞳，瞳深如夜</description><language>zh-cn</language><lastBuildDate>Sun, 23 Nov 2008 13:50:34 GMT</lastBuildDate><pubDate>Sun, 23 Nov 2008 13:50:34 GMT</pubDate><ttl>60</ttl><item><title>懒惰化、标准化、自动化——工具化--利用合适的工具构建流水线软件过程</title><link>http://www.cnblogs.com/deepcast/archive/2006/08/17/479226.html</link><dc:creator>深瞳</dc:creator><author>深瞳</author><pubDate>Thu, 17 Aug 2006 03:51:00 GMT</pubDate><guid>http://www.cnblogs.com/deepcast/archive/2006/08/17/479226.html</guid><wfw:comment>http://www.cnblogs.com/deepcast/comments/479226.html</wfw:comment><comments>http://www.cnblogs.com/deepcast/archive/2006/08/17/479226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/deepcast/comments/commentRss/479226.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/deepcast/services/trackbacks/479226.html</trackback:ping><description><![CDATA[<p style="text-align: center;" align="center">懒惰化、标准化、自动化——工具化</p>
<p style="text-align: center;" align="center">——利用合适的工具构建流水线软件过程<br>Eric Liu at 2005年5月</p>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Eric</span>是一家小公司的开发部经理，同样也是一名普通的开发人员。这是一家提供网站服务的公司，理所当然的，<span lang="EN-US">Eric</span>这个部分的主要工作是基于网站应用的开发，就如目前主流应用的推介的做法，所有的应用是分层设计的，理所当然的有数据访问层、业务逻辑层和表现层。<span lang="EN-US">Eric</span>所带的几个开发人员也没有任何与众不同之处：<span lang="EN-US">A</span><span class="GramE">君比较</span>熟悉数据库和业务逻辑层的编写，但是对于<span lang="EN-US">Web</span>表现层的了解太太有限；<span lang="EN-US">B</span><span class="GramE">君对于</span><span lang="EN-US">JavaScript</span>、<span lang="EN-US">HTML</span>、<span lang="EN-US">CSS</span>等等有比较多的了解，但是对于组件层的开发还略显生疏；<span lang="EN-US">C</span><span class="GramE">君非常</span>熟悉业务，但是对于具体实现技术的了解有限；<span lang="EN-US">D</span>君。。。。</p>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>这个一个普通得不能够再普通的团队，不论在技术还是在协作上都没有太多的出彩之处。而就是这样一个组建不久的团队，<span lang="EN-US">Eric</span>的任务是带领他们在三个月之内完整整个应用网站的开发，并且保证完工的东西能够适应未来发展的变化。</p>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>我想在大多数人看来，如果保证软件架构的向前扩展性和兼容性，这是一个软件<span class="GramE">架构师应用</span>考虑的问题，而不应该把他降解到普通开发人员的身上，道理是正确的，可是可行性是不高的，在国内的软件开发中，谁都明白很多时候软件过程的各个角色重叠和冲突的可能性是很大的，很少有团队能够不打折扣的分离出这些岗位。比方来说，应该将系统<span class="GramE">架构师</span>和系统分析员这两个角色分离，让架构师专注于技术和业务的可实现性规划，而系统分析员在<span class="GramE">架构师</span>工作的基础上，将技术和业务转化成面面俱全的应用。现实的说，没有多少公司可以在一个项目中同时建立这两个角色。</p>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>对于<span lang="EN-US">Eric</span>而言，一切困<span class="GramE">挠无法</span>幸免，在小型开发团队中，角色的相对模糊和对于结对协作的高要求是同时出现的，这个也就是矛盾本身。如果说<span lang="EN-US">RUP</span>或者其他软件过程最大的贡献是分离和定义角色，并且指明了各个角色的职责和如何互动，这个一切的基础是在于相对稳定的目标上的角色清晰化。那么<span lang="EN-US">XP</span>编程恰恰相反，他强调变化，并且拥抱变化，业务导向<span lang="EN-US">(Business Oriented)</span>的开发方式同样决定了无法严格界定岗位。</p>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>正是因为如此，<span lang="EN-US">Eric</span>的团队必须解决几个问题：</p>
<p><span style="font-family: Wingdings;" lang="EN-US">n</span><span style="font-size: 7pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>如何高效的编写出应用需要的代码？</p>
<p><span style="font-family: Wingdings;" lang="EN-US">n</span><span style="font-size: 7pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>如何保证不同开发人员的代码具有统一的规范性和<span class="GramE">可</span>阅读性？</p>
<p><span style="font-family: Wingdings;" lang="EN-US">n</span><span style="font-size: 7pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>如何在业务变动的情况下快速适应变化</p>
<p><span style="font-family: Wingdings;" lang="EN-US">n</span><span style="font-size: 7pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>如何保证代码质量？</p>
<p><span style="font-family: Wingdings;" lang="EN-US">n</span><span style="font-size: 7pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>是否需要版本控制？</p>
<p><span style="font-family: Wingdings;" lang="EN-US">n</span><span style="font-size: 7pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>如何进行错误跟踪和回馈</p>
<p><span style="font-family: Wingdings;" lang="EN-US">n</span><span style="font-size: 7pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>。。。。</p>
<p>一切正如本文题目所言的：懒惰化、标准化、自动化，方才可能构建出流水线的软件过程，这就是<span lang="EN-US">Eric</span>这个团队所要解决的问题，答案是简约有效的——工具化，<span class="GramE">让工具</span>替你完成一切可以完成的工作。</p>
<p>因为<span lang="EN-US">Eric</span>的开发团队采用了<span lang="EN-US">ASP.NET</span>作为网站应用的构建技术，因此下面提到的一些工具有些来自开源社区，有些是共享软件，当然也有一些商业软件。这里不是要求你使用所有的工具，也不是说必须使用那个工具，只是一一展示利用各种工具能够让你省却你曾经以为不可能缩减的工作。我不想<span class="GramE">去熬述软件开发</span>过程的各个环节，毕竟那样的课题不是这点文字可以解决的，我想讨论的是一个标准的网站应用开发的各个环节你可能使用的工具。而一个网站开发过程不外乎需求——数据库设计——建模——实现——测试——部署这样粗线条的东西。</p>
<h2><span class="GramE"><span lang="EN-US">Visio(</span></span><span lang="EN-US">for <city w:st="on">
<place w:st="on">Enterprise</place>
</city> Architect 2003)</span></h2>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>有很多种理由去推荐这个工具，如果你从事<span lang="EN-US">VS.NET</span>开发，这是最好的数据库工具，也是最容易使用的数据库建模工具，或许你已经习惯了<span lang="EN-US">Power Designer</span>或者<span class="SpellE"><span lang="EN-US">ERWin</span></span>这样的数据库建模工具，会觉得<span lang="EN-US">Visio</span>太多简单。可有些时候反过来想&#8220;<span class="SpellE"><span lang="EN-US">simpleness</span></span><span lang="EN-US"> is beautiful</span>&#8221;，如果你是一个数据库建模的初学者，那么请相信我的建议，如果你是一个资深的建模人员，也请认真考虑你们手头的工具是否太过复杂，特别是应用在团队中的沟通时。除了支持主流的数据库如<span lang="EN-US">Oracle</span>、<span lang="EN-US">SQL Server</span>、<span lang="EN-US">Access</span>，你完全可以通过安装自己的数据库驱动来实现<span lang="EN-US">Visio</span>对于其的支持，当然了，作为<span lang="EN-US">Office</span>家族的一员，<span lang="EN-US">Visio</span>的另外一大优势就是你可以通过宏或者<span lang="EN-US">VBA</span>自动化你的<span lang="EN-US">IDE</span>。</p>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>我这里推荐的是<span lang="EN-US">Vs.NET</span>自带的<span lang="EN-US">Visio</span>版本，相对于<span lang="EN-US">Office</span>系列，总体有一个版本号的延迟，如<span lang="EN-US">VS.NET 2003</span>自带的是<span lang="EN-US">Office XP</span>版本的<span lang="EN-US">Visio</span>，<span lang="EN-US">Office 2003</span>的<span lang="EN-US">Visio</span>版本集成在了<span lang="EN-US">Visual Studio 2005 Beta</span>版中，相对于专业版，企业版提供了强大的脚本生成功能。</p>
<p><span lang="EN-US"><img  src="http://eric.heiyou.com/Articles/dotNet%20Tools/image002.jpg" id="_x0000_i1025" u1:shapes="_x0000_i1025" alt="" border="0" height="415" width="554"></span></p>
<h2><span class="SpellE"><span lang="EN-US">CodeSmith</span></span></h2>
<p>在<span lang="EN-US">.NET</span>之下，如果说<span class="SpellE"><span lang="EN-US">CodeSmith</span></span>是最好的代码生成工具一点也不为过，而在<span lang="EN-US">Eric</span>的团队中，也对<span class="SpellE"><span lang="EN-US">CodeSmith</span></span>的威力推崇到极致。如果你做过基于数据库应用的开发，相信会对那些重复的数据库操作语句头疼不已，太多的属性字段，太多的更新、太多的插入，太多太多。。。。</p>
<p>我相信你不会陌生下面这样的代码</p>
<p><span lang="EN-US"><img  src="http://eric.heiyou.com/Articles/dotNet%20Tools/image004.jpg" id="_x0000_i1026" u1:shapes="_x0000_i1030" alt="" border="0" height="484" width="255"></span></p>
<p>这
是一个最普通的数据库操作封装，如果你在应对频繁的数据库操作，类似这样的代码将是无比琐碎。其实如果仔细想想，这样的代码是否在不同的类中都会出现，固
定化的属性访问，一成不变的数据库操作，相信你写过这样的代码，更加相信你不愿意写这样的代码。这个工具理所当然的成为了<span class="GramE">懒惰人</span>的工具。基于模板和<span lang="EN-US">ASP.NET</span>语法的特性一定会让大多<span lang="EN-US">.NET</span>开发人员喜欢。在<span lang="EN-US">Eric</span>的团队里头，大多的数据库访问类（也就是设计领域熟知的数据访问层（<span lang="EN-US">DAL</span>），也有人简单的称之为<span lang="EN-US">Business Object</span>）都是利用这个工具生成的，其中带来的好处是极大程度的减少不必要的开发工作量，同时因为模板生成的代码是统一规范的，能够维持代码风格的一致性。这个工具可以从<span lang="EN-US"><a  href="http://www.codesmithtools.com/">http://www.codesmithtools.com</a> </span>下载，有三十天的免费使用，样例文件中包含了大量的模板，包括集合、数据库和<span lang="EN-US">XML</span>等等各个方面，也包含了<span lang="EN-US">CSLA.NET</span>的完整模板。</p>
<p><span lang="EN-US"><img  src="http://eric.heiyou.com/Articles/dotNet%20Tools/image006.jpg" id="_x0000_i1027" u1:shapes="_x0000_i1026" alt="" border="0" height="415" width="554"></span></p>
<h2><span lang="EN-US">Rational XDE Plus for VS.NET</span></h2>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>其实在这里介绍一个这样的重量级软件不是那么合适，但是如果你用过<span lang="EN-US">Rose</span>，用过<span lang="EN-US">Together</span>，你绝对无法忍受没有他们的建模方式，虽然<span lang="EN-US">VS.NET</span>已经足够好用，但是我还是强烈推荐他作为你建模过程的首选工具（前提是你们的公司有能力去支付价格不菲的软件授权费），通过<span class="SpellE"><span lang="EN-US">CodeSmith</span></span>生成的代码并无法尽善尽美，在数据依赖的基础之上你还要去定义对象动作，定义关系，定义依赖，定义他们的活动时序图。或者你会告诉我没有必要将<span lang="EN-US">UML</span>搞得如此晦涩难懂，在小型团队的开发过程中没有必要使用这样的大家伙，<span lang="EN-US">XP</span>极限编程对于几个人的团队再适合不过，但是你依旧需要一个概括性的抽象视图：或者类图，或者部署图，或者你期望的其他视图，不管如何，这个时候你需要一个工具能够来做这些事情，<span lang="EN-US">Visio</span>可以导出<span lang="EN-US">UML</span>图，但是<span lang="EN-US">XDE</span>做的更好，最重要的是对于代码和模型，<span lang="EN-US">XDE</span>提供了无缝的双向工程。这个意味着你可以利用<span class="SpellE"><span lang="EN-US">CodeSmith</span></span>生成的代码转换成<span lang="EN-US">UML</span>图，然后根据你的业务需要修改<span lang="EN-US">UML</span>，然后再次生成代码，等到交付到开发人员手中需要实现的代码时，需要做的工作已经很少<span class="GramE">很少</span>，要做的事情已经很好。&#8220;卓越的本质就是每件事情做得都比其他人好一点点&#8221;，<span lang="EN-US">XDE</span>就是一个这样的工具。对于<span class="GramE">此如果</span>有兴趣的读者可以在<span lang="EN-US">IBM Rational</span>的网站上找到相关的下载，当然了，这是一个比较昂贵的软件。</p>
<h2><span class="SpellE"><span lang="EN-US">NDoc</span></span></h2>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Eric</span>的团队依旧很懒惰，很不愿意编写程序文档，<span class="GramE">很许多</span>人坚持的观点一样&#8220;代码就是文档&#8221;，但是从<span class="GramE">几千几万</span>行的代码中去阅读确实不是一件容易的事情。如果你熟悉<span lang="EN-US">C#</span>，应该知道<span lang="EN-US">VS.NET IDE</span>对于其提供了<span lang="EN-US">XML</span>注释的支持，对于使用<span lang="EN-US">VB.NET</span>的朋友，在<span class="SpellE"><span lang="EN-US">SourceForge</span></span>也可以找到相关的辅助工具。一个良好的设计一定会有良好的代码注释，那么怎样提取这些代码注释，然后用统一的文档来展现呢？</p>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>也许你熟悉了<span lang="EN-US">CHM</span>格式的文档，也许熟悉<span lang="EN-US">Java Doc</span>风格，也许熟悉<span lang="EN-US">MSDN</span>风格，如果专门花费时间来制作这些程序文档是耗时耗力的事情。<span class="SpellE"><span lang="EN-US">NDoc</span></span>，从<span lang="EN-US">Java Doc</span>借鉴过来的一个工具就是来解决这个问题的，它可以从<span lang="EN-US">C#</span>生成的<span lang="EN-US">XML</span>注释文档和程序集提取相关信息，然后根据你的需要生成指定格式的文档。如此一来，你还需要专门的文档人员来帮你写程序文档吗？</p>
<p><span lang="EN-US"><img  src="http://eric.heiyou.com/Articles/dotNet%20Tools/image008.jpg" id="_x0000_i1028" u1:shapes="_x0000_i1027" alt="" border="0" height="564" width="521"></span></p>
<h2><span class="SpellE"><span lang="EN-US">NUnit</span></span></h2>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>如果不知道如何测试自己的代码，那么你绝对不是合格的程序员，如果你不了解测试驱动开发，那么你也不是合格的程序员。这话或者太绝对和偏激，但是<span lang="EN-US">TDD</span>已经成为一种推荐的开发方式，&#8220;测试先行&#8221;也得到越来越多开发人员的接受。如果你以前对于一些业务代码的测试是利用控制台或者测试网页来完成的话，那么我建议你一定要先去看看这个工具——<span class="SpellE"><span lang="EN-US">NUnit</span></span>，创意依旧来自于软件过程更加成熟的<span lang="EN-US">Java</span>社区，相信你看看所有的绿灯亮起的时候，你会有一种无比的成就感。可以从<span lang="EN-US"><a  href="http://www.nunit.org/">http://www.nunit.org</a> </span>得到相关的软件。</p>
<p><span lang="EN-US"><img  src="http://eric.heiyou.com/Articles/dotNet%20Tools/image010.jpg" id="_x0000_i1029" u1:shapes="_x0000_i1028" alt="" border="0" height="375" width="553"></span></p>
<h2><span class="SpellE"><span lang="EN-US">SourceGear</span></span><span lang="EN-US"> Vault or VSS</span></h2>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>别告诉我你没有用过版本控制工具，假若如此，那么将给软件开发过程引入无尽的风险，没有版本比较，没有代码追朔，没有项目分支，团队的开发人员将陷入协作的灾难之中。作为老牌的版本控制工具<span lang="EN-US">Visual Source Safe</span>没有作为我的首选推荐，原因在于除了版本相对老化（<span lang="EN-US">6.0</span>以后没有大的更新），最主要的因素在<span lang="EN-US">Internet</span>时代居然只能够通过局域网共享访问的方式来实现代码库的访问。或者恰恰因为如此，也造就了版本控制工具的百花齐放，除了大名鼎鼎的<span lang="EN-US">CVS</span>，但是这个在<span lang="EN-US">Java</span>世界如日中天的家伙却不是那么适合<span lang="EN-US">.NET</span>开发，或者是因为和<span lang="EN-US">VS.NET IDE</span>集成不够的原因，或者是因为两个社区不同的问题。幸运的是，在<span lang="EN-US">.NET</span>下面除了<span lang="EN-US">VSS 6,</span>我们还有很多选择，如<span lang="EN-US">VSS <span class="SpellE">Remoting</span></span>或者<span class="SpellE"><span lang="EN-US">SourceGear</span></span>的<span lang="EN-US">Offsite</span>，他们都在<span lang="EN-US">VSS</span>的基础上提供了<span lang="EN-US">Internet</span>远程访问的能力。</p>
<p><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>在这里推荐<span lang="EN-US">Vault</span>的理由很多，因为它基于<span lang="EN-US">SQL Server</span>，因为它使用<span lang="EN-US">.NET</span>编写，因为它采用<span lang="EN-US">XML Web Services</span>作为通信协议，当然还有一点别忘记了，<span class="SpellE"><span lang="EN-US">SourceGear</span></span><span lang="EN-US"> Vault</span>提供了免费一个月<span lang="EN-US">10</span>用户的试用授权，如果不怕麻烦的话，您也可以每个月更新<span lang="EN-US">License</span>。在使用习惯方面和传统的<span lang="EN-US">VSS</span>区别不大，没有太多的学习代价，另外还提供了<span lang="EN-US">Web</span>访问代码库的功能。可以从<span lang="EN-US"><a  href="http://www.sourcegear.com/">http://www.sourcegear.com</a>/vault </span>的到相关的下载</p>
<h2><span class="SpellE"><span lang="EN-US">SourceGear</span></span><span lang="EN-US"> Dragnet</span></h2>
<p>这是最后一个工具，一个大多人忽视的环节。你是否在最后的测试阶段和需求还有测试人员牵扯不清，也没有一个定量的指标去衡量软件开发质量，这个时候缺陷管理也就是我们通常意义的<span class="SpellE"><span lang="EN-US">BugTrack</span></span>就显得至关重要，作为和<span lang="EN-US">Vault</span>同一个公司的产品，除了<span lang="EN-US">Dragnet</span>正是针对如此问题而提出的解决方案。除了基于<span lang="EN-US">Web</span>和<span lang="EN-US">.NET</span>之外，<span lang="EN-US">Dragnet</span>做到了和<span lang="EN-US">Vault</span>的无缝集成，开发人员可以在<span lang="EN-US">VS.NET</span>的环境中直接更新各个错误。</p>
<p><span lang="EN-US"><img  src="http://eric.heiyou.com/Articles/dotNet%20Tools/image012.jpg" id="_x0000_i1030" u1:shapes="_x0000_i1029" alt="" border="0" height="288" width="553"></span></p>
<p>工具为本？人为本？</p>
<p>不要期待工具可以解决你所有的问题，问题因人产生，工具因为问题创造，但是在开发过程中如果能够有效的利用一些工具减少不必要的重复或者提高团队协作，何乐而不为呢？随着<span lang="EN-US">Visual Studio 2005</span>的临近，我们看到了另外一种选择——<span lang="EN-US">Visual Studio Team System</span>，这个<span lang="EN-US">VS.NET</span>的第三个版本将前所未有的强调软件工具化和开发协作化，或者，再过几年，<span lang="EN-US">Eric</span>的团队不用那些组合工具，但是想法依旧没有变。</p>
<p>做你自己的软件，懒惰一点，规范一点，自动一点，只有你意识到使用工具多一点，才可能构建出流水线的软件过程。</p>
刘如鸿(Eric Liu)发表于
2005年06月21日 14:41:00<img src ="http://www.cnblogs.com/deepcast/aggbug/479226.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43630/" target="_blank">[新闻]Silverlight 2 SDK中文版发布</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>脚本语言的游戏开发</title><link>http://www.cnblogs.com/deepcast/archive/2006/08/14/475935.html</link><dc:creator>深瞳</dc:creator><author>深瞳</author><pubDate>Sun, 13 Aug 2006 16:11:00 GMT</pubDate><guid>http://www.cnblogs.com/deepcast/archive/2006/08/14/475935.html</guid><wfw:comment>http://www.cnblogs.com/deepcast/comments/475935.html</wfw:comment><comments>http://www.cnblogs.com/deepcast/archive/2006/08/14/475935.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/deepcast/comments/commentRss/475935.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/deepcast/services/trackbacks/475935.html</trackback:ping><description><![CDATA[本文章最新版请参见：<a  href="http://www.deepcast.net/wiki/ow.asp?PHP%D3%CE%CF%B7%BF%AA%B7%A2">http://www.deepcast.net/wiki/ow.asp?PHP游戏开发<br></a><br>这是一个挺有兴趣的研究问题，目前只是研究PHP,FLEX,FLASH,AMFPHP几者结合起来处理一些简单的在线游戏。专业性的python,ruby,lua只知概念。<br><a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=322273&amp;PageSize=25&amp;WhichPage=1" class="external" target="_blank"></a><br>我从小就是游戏的狂热爱好者啊，即使是明知道游戏的标的也许只是数据库里一段二进制代码，还是乐此不疲。：）<br><br>目前虽然用PHP进行游戏开发的人不多，但却都是经验丰富的老手。他们的动力是利润，是纯粹的享受，也是优雅的表现等。<br><br>国外有一些爱好者专门研究用PHP等开发游戏，大家有空可以去看下：&nbsp;<a name="h1"></a>
<h2>phpGameDev</h2>
<a href="http://phpgamedev.sourceforge.net/" class="external" target="_blank">phpGameDev</a>是PHP游戏开发的资源。
phpGameDev<a href="http://www.deepcast.net/wiki/ow.asp?p=GameDev&amp;a=edit" class="nonexistent" title="描述此页">?</a>计划作为现存php游戏开发者和初学者的开发资源。目前PHP游戏开发实例很少，即使是写了<strong>PHP Game Programming</strong> 的Matt Rutledget也并没很好地阐述这一流派的纲要，那本书几乎不能拿来作开发参考。当人们开始策划设计游戏项目的时候，创意通常不少，实例却乏善可陈。
phpGameDev<a href="http://www.deepcast.net/wiki/ow.asp?p=GameDev&amp;a=edit" class="nonexistent" title="描述此页">?</a>的目标是：
<pre class="code">A，帮助宣传PHP游戏开发的相关信息。<br>B，通过文章，教程和开发者BLOG来提供文本资源。<br>C，帮助建立PHP游戏开发的框架中间件的发布。<br>D，帮助发布PHP游戏。<br>E，提供开源PHP游戏的主机服务并召集相关文档。<br>F，提供PHP游戏开发者寻找问题帮助的集中论坛，或开放开发者的广告。<br>G，提供集成式的BLOG系统供PHP开发者使用。<br>H，提供PHP游戏开发者，版本发布和其它相关信息发布的新闻系统。<br>I，提供PHP游戏开发的内部资料，技术指导和实例应用。<br></pre>
这项工作需要多人参与并长期努力。其中第三点尤其重要。许多新PHP游戏都是在基础部份出错。幸运的是目前有两种framworks正在开发中，都是可以减少开发时间和耗费精力于通用后台功能的实施。
<a name="h2"></a>
<h2>Q-Site</h2>
一个是 <a href="http://sourceforge.net/projects/qsite/" class="external" target="_blank">Q-Site</a> (未成品暂定名), 是<a href="http://www.shadowsrising.com/" class="external" target="_blank">Shadows Rising RPG</a>和<a href="http://www.quantum-star.com/" class="external" target="_blank">Quantum Star SE (v3)</a>游戏的的轻便的后台。
<a name="h3"></a>
<h2>JOMPT</h2>
另一个是<a href="http://sourceforge.net/projects/jompt/" class="external" target="_blank">JOMPT</a>，由<a href="http://www.kabal-invasion.com/bugjuice/" class="external" target="_blank">iamsure</a>开发管理，
他是正在和<a href="http://www.blacknova.net/" class="external" target="_blank">Blacknova Traders</a>合并的<a href="http://forums.kabal-invasion.com/" class="external" target="_blank">The Kabal Invasion</a>公司的领头开发者。
这两个的目的都是成为任何一款PHP游戏的通用组件，所以尤其对那些可能陷入通用后台功能创建
之中不可自拨的新启动游戏项目特别有用。实际上它们也可用于非游戏项目。
虽然有一段时期的基础工作要作，但我们期待着在数月后看见上述项目的成果。这些针对PHP游戏开发的资源是很有用处的。
<a name="h4"></a><br><br>本文章最新版请参见：<a  href="http://www.deepcast.net/wiki/ow.asp?PHP%D3%CE%CF%B7%BF%AA%B7%A2">http://www.deepcast.net/wiki/ow.asp?PHP游戏开发</a><a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=322273&amp;PageSize=25&amp;WhichPage=1" class="external" target="_blank"></a>  <img src ="http://www.cnblogs.com/deepcast/aggbug/475935.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43629/" target="_blank">[新闻][译稿]微软将 jQuery IntelliSense整合到Visual Studio</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>准妈妈必听的十首乐曲完全版</title><link>http://www.cnblogs.com/deepcast/archive/2006/08/12/475148.html</link><dc:creator>深瞳</dc:creator><author>深瞳</author><pubDate>Sat, 12 Aug 2006 08:21:00 GMT</pubDate><guid>http://www.cnblogs.com/deepcast/archive/2006/08/12/475148.html</guid><wfw:comment>http://www.cnblogs.com/deepcast/comments/475148.html</wfw:comment><comments>http://www.cnblogs.com/deepcast/archive/2006/08/12/475148.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/deepcast/comments/commentRss/475148.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/deepcast/services/trackbacks/475148.html</trackback:ping><description><![CDATA[本文章最新版请参见：<a  href="http://www.deepcast.net/wiki/ow.asp?%CC%A5%BD%CC%D2%F4%C0%D6">http://www.deepcast.net/wiki/ow.asp?胎教音乐</a><br><br>许多人认为准妈妈听的音乐应该以轻柔的为主，实际上，音乐应该更加多元化一些，因为，不同的旋律、不同的节奏带给胎儿的感受和影响是不一样的。以下列举准妈妈孕期必选的十首乐曲，准妈妈们，快去听听吧。<br><br>一、普罗科菲耶夫的经典名曲,交响童话《彼得与狼》——做个勇敢的宝宝<br><br>http://www.go17558.com/upload/forum/2006053011180472.mp3<br>&nbsp;<br>作曲家运用乐器来刻画人物和动物的性格、动作和神情，形式新颖活泼，旋律通俗易懂，富有艺术魅力。长笛的高音区表现小鸟的灵活好动；弦乐描绘了彼得的机智勇敢；双簧管生动地刻画出鸭子那蹒跚的步态；爷爷老态龙钟的神态由大管浑厚、粗犷的声音来表现；狼阴森可怕的嚎叫用三只圆号来体现。当然，最可宝贵的还是这部作品的思想内容：只要团结起来，勇敢而机智地进行斗争，任何貌似强大的敌人都是可以战胜的。整个乐曲生动活泼，犹如在面前展开一幅生动的画。<br><br>准妈妈们，去听听吧，让你的小宝宝跟小鸟、小猫、小鸭子玩玩，并与彼得一起战胜恶狼，做一个勇敢的宝宝。<br><img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/2006053011173598.jpg" alt=""><br>这首交响童话诗，是20世纪上半叶世界最杰出的作曲家普罗科菲耶夫专为儿童而创作的乐曲。虽然他平素总是态度严肃，但却非常喜爱孩子，经常与孩子们一起玩。因此，在这首交响童话里，普罗科菲耶夫能够用孩子们喜爱的浅显易见的音乐语言，平易近人地塑造了多个异常生动的音乐形象，表达了小朋友彼得与他的好朋友小鸟，机智勇敢地跟可恶的大灰狼作斗争，终于把大灰狼逮住了，体现了善良定能战胜邪恶的信念。<br>
<p class="MsoNormal"><span style="font-family: 宋体;">俄国作曲家浦罗高菲夫</span><span lang="EN-US">
(Prokofiev,&amp;nbspS. &amp;nbsp1891- 1953) </span><span style="font-family: 宋体;">在</span><span lang="EN-US">46</span><span style="font-family: 宋体;">岁时为儿童及青少年创作了这首童话音乐乐曲。故事里的每个人物，都由不同的乐器来代表。各位在欣赏影片时，请辨别出剧中每个角色各由何种乐器代表。</span><span lang="EN-US"> <o:p></o:p></span></p>
<span lang="EN-US"><!--[if !supportEmptyParas]--></span>
<span style="font-size: 10.5pt; font-family: 宋体;">彼德</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">(Peter): </span><span style="font-size: 10.5pt; font-family: 宋体;">鸟</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">(Bird): </span><span style="font-size: 10.5pt; font-family: 宋体;">猫</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">(Cat): </span><span style="font-size: 10.5pt; font-family: 宋体;">鸭子</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">(Duck): </span><span style="font-size: 10.5pt; font-family: 宋体;">老爷爷</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">(Grandpapa): </span><span style="font-size: 10.5pt; font-family: 宋体;">猎人的枪声</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">(Hunter</span><span style="font-size: 10.5pt; font-family: 宋体;">&#8217;</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">s&amp;nbspGun): </span><span style="font-size: 10.5pt; font-family: 宋体;">狼</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">(Wolf):</span><br><br>二、德沃夏克的e小调第九交响曲《自新大陆》第二乐章——淡淡的悲伤与思乡<br>http://www.tfmm.net/music/admin/uploadsong/Dvorak_Symphony_No9_2.mp3<br><br>这一乐章是整部交响曲中最为有名的乐章，其浓烈的乡愁之情，表达了德沃夏克对祖国无限眷恋之情。乐曲中那舒缓的旋律，表现出淡淡的相思，淡淡的哀愁。<br><br>准妈妈们，尽情的享受吧！让舒缓的旋律抚平焦躁的心情，随着旋律一起入睡。<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/2006053011173592.jpg" alt=""><br>卡拉扬-德沃夏克第九交响曲《E小调第九交响曲（自新大陆）》，维也纳爱乐乐团，卡拉扬，第二乐章&nbsp;<br>最缓板，降D大调，4/4拍子，复合三段体。这一乐章是整部交响曲中最为有名的乐章，经常被提出来单独演奏，其浓烈的乡愁之情，恰恰是
德沃夏克本人身处他乡时，对祖国无限眷恋之情的体现。整个乐队的木管部分在低音区合奏出充满哀伤气氛的几个和弦之后，由英国管独奏出充满奇异美感和神妙情
趣的慢板主题，弦乐以简单的和弦作为伴奏，这就是本乐章的第一主题,此部分被誉为所有交响曲中最为动人的慢板乐章。&nbsp;<br>事实上，也正因为有了这段旋
律，这首交响曲才博得全世界人民的由衷喜爱。这充满无限乡愁的美丽旋律，曾被后人填上歌词，而改编成为一首名叫《恋故乡》的歌曲，并在美国广泛流传、家喻
户晓。本乐章的第二主题由长笛和双簧管交替奏出，&nbsp;旋律优美绝伦，&nbsp;在忽高忽低的情绪中流露出了一种无言的凄凉，仍是作者思乡之情的反映。&nbsp;本乐章的第三
主题转为明快而活泼的旋律，具有一些捷克民间舞蹈音乐的风格。<br><br>三、约纳森的《杜鹃圆舞曲》 ——与鸟儿一起嬉戏<br>http://www.cssyzxx.com/yeqing/ftp/ls/huashoupa/杜鹃圆舞曲.mp3<br>http://bz.baizhao.com/new/bbs/loiter/classic/世界名曲-杜鹃圆舞曲.mp3<br>睡醒了该活动一下了，听听约纳森的《杜鹃圆舞曲》吧！整首乐曲欢快清新，特别适合在熟睡的早晨倾听。那跳跃的旋律犹如杜鹃在歌唱，它以轻快、活泼的节奏和清新、流畅的旋律，描绘了一幅生机盎然的景象。<br><br>听一听活泼、可爱、明朗的《杜鹃圆舞曲》，让肚子里的小宝宝做做运动吧。<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/2006053011173593.jpg" alt=""><br><br>&nbsp; 通过欣赏乐曲《杜鹃圆舞曲》，使大家感受3/4拍的节奏以及三拍子舞曲的特点。<br>&nbsp;<br>&nbsp; 《杜鹃圆舞曲》是根据挪威作曲家约纳森创作的一首同名钢琴曲移植的手风琴曲。<br>&nbsp;<br>&nbsp; 约纳森(1886～1956) 挪威作曲家。曾在德国学习音乐，他写过一些音乐作品，但以这首《杜鹃圆舞曲》流传最广，也使得约纳森名传于世。这首钢琴曲也常以管弦乐或其他器乐形式演奏。据说在1918～1930年间约纳森曾在斯德哥尔摩&#8220;金杜鹃电影院&#8221;专为无声影片的放映作钢琴配音，本曲即为当时影片即兴配音而作。<br><br>&nbsp; 《杜鹃圆舞曲》在曲调和节奏上，具有挪威民间舞曲的风格。全曲采用三拍子圆舞曲体裁，C大调，中板。由三个小圆舞曲组成。<br>在简短的弱拍开始的、节奏自由的4小节引子过后，出现下行三度模仿杜鹃鸣叫的音调，第一段以杜鹃鸣叫的下行三度所构成的动机为核心，运用重复、模进、变奏等手法发展而成。它以轻快、活泼的节奏和清新、流畅的旋律，描绘了一幅生机盎然的景象，婉转的鸟鸣和轻松的三拍子节奏，形成了温和、迷人的气氛。<br>&nbsp; 第二段以&#8220;la&#8221;的长颤音开始。主旋律应用了许多颤音，间杂着杜鹃的鸣叫声，好似杜鹃鸟灵活地在林中飞来飞去，一会儿在这个枝头跳跃，一会儿又在那个枝头高唱，杜鹃鸟的鸣叫声为林中增添了浓浓春意。<br><br>&nbsp; 第三段，旋律流畅而连贯，极富歌唱性，由于曲中出现了一系列变化半音，使得旋律更加新颖。<br>这一段音乐与前两段轻快、活泼的旋律形成鲜明的对比，加之手风琴特有的音色，使得音乐有一种迷人的色彩。在竖笛模仿杜鹃鸟鸣叫以后，第三段抒情的旋律又反复了一次，最后第一段音乐再现，并结束在杜鹃鸟的鸣叫声上，与乐曲的开始形成呼应。《杜鹃圆舞曲》由于曲调优美，音乐形象生动鲜明，深受人们的喜爱。<br><br>四、格里格的《培尔&#183;金特》组曲中《在山魔王的宫殿里》/《在山王的大厅》——感受力度与节奏<br>http://www.cdd.cn/upload/89906/F3DD7B4E-A8B6-427B-A53E-C26B32843B3E.mp3<br>培尔&#183;金特是一个非常讨厌的家伙，做了许多坏事，大家不喜欢他，他只好自己去流浪。有一天他来到山魔王的宫殿里，引来了许多小妖怪。乐曲描写了培尔&#183;金特吓得魂不附体的场景。听诙谐可爱的旋律，感受力度在乐曲中由弱到强直到极强的过渡，你也会看到许多小妖怪在乱舞的场景。<br><br>准妈妈们，带着你的小宝宝经历一下小妖怪的宫殿吧。感受不同的节奏、不同的力度、不同的音色，相同的旋律带给我们不同的体验——弱的声音的神秘，强的声音的紧张。<br><img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/2006053011173594.jpg" alt=""><br>《培尔&#183;金特》取材于挪威民间故事。除了格里格之外，没有人能够为可怜的培尔&#183;金特对山魔王的厅堂的访问写出这种富于表情的音乐，表现那里的那些好恶作剧的小侏儒扑在他身上掐他、咬他时的情景，或者那具耐心的索尔维格在那孤独的棚屋里等待着多年在世界上流浪的培尔&#183;金特时唱的那首温柔的歌曲。甚至当格里格描写培尔在埃及和东方奇异的国家里的冒险行为时，他的音乐听起来在某种程度上几乎总是有&#8220;挪威风味&#8221;的。<br><br>五、罗伯特&#183;舒曼的《梦幻曲》——梦幻的国度<br>http://grm.cdn.hinet.net/xuite/e/a/d/b/15126842/blog_344323/dv/6732645/6732645.mp3<br>《梦幻曲》举世皆知，充满了浪漫梦幻的旋律。它以娴熟的浪漫主义手法，把我们带进了温柔优美的梦幻境界。这首曲子主题非常简洁，具有动人的抒情风格和芬芳的幻想色彩，旋律线几经跌宕起伏，婉转流连，使人不觉中被引入轻盈飘渺的梦幻世界。<br><br>当你疲倦的时候听听《梦幻曲》，帮你安然入睡。<br><img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/2006053011173596.jpg" alt=""><br>在这首言简意赅的乐曲中，我们能够明显觉察到诗歌般层层递进但又有些微妙变化的律动感。原曲为F大调，4\4拍，较徐缓的行板。用单主题三部曲式写成。一般三部曲的第二段，在曲调、性格、节奏上都有所变化，以便前后形成对比。<br>&nbsp;<br>《梦幻曲》的第二段只是第一段主题的变化和发展。这个主题总共出现了八次，每一次都是用四度音程向上跳进起步，而每一次结尾都有些微妙的变化。例如，他把第一句旋律里的最后一个1音降低了一个大二度，变成了b7，这就有了G小调的因素；然而它并不稳定，刚一出现就转换了，接着又转成降B大调，并推向乐曲的高潮，给人特别清新的感觉，后来又出现了小调的某些因素&#8230;&#8230;最后，第一段主题再现，只是最后两小节作了下行和渐慢处理的手法。细腻的音乐表情，丰富的和声语言，引人入胜的表现力，使这首短诗充满了诗情画意，令人百听不厌。<br>&nbsp;<br>作品音乐形象鲜明，音乐语言精炼。引人入胜的表现力，使它给人们以美好希望，犹如一首倾情如水的抒情诗而长久流传。让听者感受优美柔和的旋律，在不知觉中被引入轻盈飘渺的梦幻世间。西洋乐器大提琴独奏营造谧静甜美的表现力，感受乐曲跌宕起伏，婉转流连，探索、表现乐曲表现的情境。<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/2006053011173595.jpg" alt=""><br><span class="tpc_title">舒曼《梦幻曲》-四个特色版本欣赏:http://www.e0575.cn/read.php?tid=707814</span><br><br>六、约翰&#183;施特劳斯的《维也纳森林的故事》——穿越绿色的森林<br>http://music.jdyy.com/onlinemusic/wgzp/weiyenasenlingushi.mp3<br><br>春天的早晨，在美丽的蓝色的多瑙河畔，远处群山起伏，田野一望无际。晨曦的阳光透过大树茂密的叶子洒在挂满露珠的草地上，山边小溪波光粼粼。羊儿在草地上吃草，小鸟在林间婉转啼鸣，牧童吹着短笛，猎人吹响号角，马蹄&#8220;的的&#8221;，构成一幅大自然美丽的图画。一曲《维也纳森林的故事》，一切宛如人间天堂。准妈妈们，假日的清晨，迎接这美丽的森林吧！<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/2006053011173597.jpg" alt=""><br>小约翰&#183;施特劳斯，维也纳森林的故事圆舞曲<br><br>&nbsp;<br><br>　　是小约翰&#183;施特劳斯继圆舞曲《蓝色的多瑙河》之后的又一部杰作。完成于1868年，同年六月十九日初演于维也纳，并由作者亲自指挥。奥地利首都维也纳的郊区有一片美丽的森林，它离城市不远，历来吸引着千千万万的游人。这片森林也是许多居住在维也纳的大作曲家们经常光顾的地方，森林的美景常常激起他们的灵感。约翰&#183;施特劳斯是地道的维也纳人，《维也纳森林的故事》就是他献给故乡的赞歌。为了使乐曲具有浓厚的乡土气息，作者在管弦乐队里破例地加上了奥地利的民间乐器——齐特尔琴（原文为Zither，是一种拨奏弦乐器）。<br><br>　　这首乐曲由序奏、五个圆舞曲和尾声构成，其结构属于典型的维也纳圆舞曲式。乐曲的开始是一段很长的序奏。两支圆号的旋律描绘了优美动人的风景，双簧管和单簧管吹出抒情流畅的曲调，象是牧人的牧歌和角笛。钟声的响起，使音乐增加了很多光彩。然后，大提琴缓缓奏出第一圆舞曲的主题动机，作为全曲的引子。大提琴浑厚的音调、圆号美丽的牧歌和长笛玲珑的装饰音节，构成了一幅极美妙的且色彩斑斓的音画，十分优雅动人。齐特尔琴的加入更增添了浓厚的奥地利民族色彩，这种特色型乐器拨奏出这首圆舞曲中最主要的一段旋律（片段1 ），轻柔而华美,仿佛晨曦透过浓雾照进维也纳森林，还伴随着鸟儿们婉转的鸣叫。<br><br>　　第一圆舞曲为F大调，描绘出了森林清晨的美景，及人们轻歌曼舞的场面。 （片段2 ）<br><br>　　第二圆舞曲为降B大调，由大提琴呈示出来。 这段主旋律与前面序奏中基塔琴所演奏的主题几乎完全相同，但节奏要快得多，舞蹈性极强。<br><br>　　第三圆舞曲为降E大调，三部曲式。描绘的仍然是森林美景。（片段3 ）<br><br>　　第四圆舞曲在降B大调上,二部曲式。前半部分轻快、流畅，旋律充满跳跃性；后半部分活泼、优雅，伴奏部分引人入胜。（片段4 ）<br><br>　　第五圆舞曲为降E大调，这一部分不仅活泼，而且节奏性非常强，使得整个乐曲达了最高潮。（片段5 ）<br><br>　　乐曲的结尾部分很长，在这里依次出现了第四圆舞曲、第一圆舞曲和第二圆舞曲的主题；之后，序奏时的&#8220;齐特尔琴&#8221;动人的旋律重新出现；终止部分采用了乐队的合奏。这一切好似一个总结，引人再一次回顾维也纳森林的各种美丽景色。 <br><br>七、贝多芬的F大调 第六号交响曲 《田园》——到自然中呼吸新鲜空气<br><br>整部作品表达了对大自然的依恋之情，作品细腻动人，朴实无华，宁静而安逸，是贝多芬最受欢迎的交响曲之一。各个乐章分别表现了&#8220;初到乡村时的愉快感受&#8221;，&#8220;溪边小景&#8221;，&#8220;乡村欢乐的集会&#8221;，&#8220;暴风雨&#8221;等情景，最后的&#8220;牧歌&#8221;，主题恬静开阔，象牧人在田野中歌唱，表现了雨过天晴之后的美景。<br><br>好一幅自然的美景，感受一下吧，小宝宝。<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/2006053011173601.jpg" alt=""><br>贝多芬，F大调 第六号交响曲 《田园》<br><br>　　<br>　　F大调，第六号交响曲《田园》，本曲大约完成于1808年，是贝多芬的代表作之一，并由作曲者亲自命名为《田园交响曲》，是他少数的各乐章均有标题的作品之一，也是贝多芬九首交响乐作品中标题性最为明确的一部。此时的贝多芬双耳已经完全失聪，这部作品正表现了他在这种情况下对大自然的依恋之情，是一部体现回忆的作品。这部作品1808年在维也纳首演，由贝多芬亲自指挥，在首演节目单上，他写到："乡村生活的回忆，写情多于写景"。整部作品细腻动人，朴实无华，宁静而安逸，与贝多芬的第五号交响曲同为世界上最受欢迎的交响曲之一。<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp; <br>贝多芬《F大调第六交响曲》赏析-布鲁诺.瓦尔特指挥哥伦比亚交响乐团<br><br>第一乐章　Allegro ma non troppo<br>第二乐章　Andante molto moto<br>第三乐章　Allegro<br>第四乐章　Allegro<br>第五乐章　Allegretto<br><br>http://stunik.dns0755.net/mp3/classic/diliujiaoxiangqu/Beethoven_Symphony_No6_1.mp3<br>http://stunik.dns0755.net/mp3/classic/diliujiaoxiangqu/Beethoven_Symphony_No6_2.mp3<br>http://stunik.dns0755.net/mp3/classic/diliujiaoxiangqu/Beethoven_Symphony_No6_3.mp3<br>http://stunik.dns0755.net/mp3/classic/diliujiaoxiangqu/Beethoven_Symphony_No6_4.mp3<br>http://stunik.dns0755.net/mp3/classic/diliujiaoxiangqu/Beethoven_Symphony_No6_5.mp3<br><br><br>　　作品共分五个乐章，其中第三、四、五乐章连续演奏：<br><br>　　第一乐章，不太快的快板，表达了"初到乡村时的愉快感受"，F大调，2/4拍子，奏鸣曲式。由双簧管呈现出明亮的第一主题（片段1 ），充满着浓郁而清新的乡间气氛，使人们感受到贝多芬投身到大自然后的喜悦心情。<br><br>　　第二乐章，很快的行板，描写的是"溪边小景"，降B大调，12/8拍子，奏鸣曲式。 这是一个描写静观默想的乐章，在形如小溪潺潺流水的第二小提琴、中提琴与大提琴的伴奏下，第一小提琴所呈现的第一主题显得悠扬而且明亮、清澈（片段2 ）。<br><br>　　第三乐章，快板，"乡村欢乐的集会"，F大调，3/4拍子，诙谐曲。这个乐章的主题是如牧笛风格的旋律，单纯活泼，表现了欢笑的乡民来自四面八方，并跳起了快乐的舞蹈（片段3 ）。<br><br>　　第四乐章，快板，"暴风雨"，f小调，4/4拍子。在这一乐章中，雷雨由远而近，狂风骤起、雷电交加、大雨倾盆，整个大自然笼罩在恐怖的气氛中（片段4 ）。接着，暴风雨很快停息，直接进入下一乐章。<br><br>　　第五乐章，小快板，"牧歌，暴风雨过后欢乐和感激的心情"，F大调，6/8拍子，回旋的奏鸣曲式。乐章的主题恬静开阔，象牧人在田野中歌唱（片段5 ），表现了雨过天晴之后的美景。 <br><br>八、老约翰&#183;施特劳斯的《拉德斯基进行曲》——感受强烈的节奏与柔媚的线条之美<br>http://www.sjsedu.net.cn/xiaoxuejiaoyan/xuekedaohang/music/FILE-5/text2/nusic/V-10.mp3<br><br>乐曲以其脍炙人口的旋律和铿锵有力的节奏征服了广大听众，成为流传最为广泛的进行曲。强劲有力的引子之后是第一部分主题，让人们仿佛看到了一队步兵轻快地走过大街。随后是与前面主题相对比的轻柔主题，优美动听。听后让人感觉激情澎湃，活力无限。<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/2006053011173602.jpg" alt=""><br>《拉德斯基进行曲》作品228号，管弦乐曲，老约翰&#183;施特劳斯最著名的代表作，作于1848年，大概是世界上最为人们所熟悉的进行曲，经常作为通俗的管弦乐音乐会的最后一首曲目。每年著名的维也纳新年音乐会也总是以这首曲子作为结束曲，并已成为一种传统。但此曲有一个鲜为人知的背景：这首曲子本是老约翰&#183;施特劳斯题献给拉德斯基将军的，但实质上拉德斯基是一个铁腕人物，曾残酷镇压了邻国的人民起义，可以说是一个反动军阀。后来，就连施特劳斯本人及其子小约翰&#183;施特劳斯也不愿再演出这首进行曲。尽管如此，《拉德斯基进行曲》还是以其脍炙人口的旋律和铿锵有力的节奏征服了广大听众，成为流传最为广泛的进行曲。常见的版本还有为管乐队所作的改编曲。这里选用的是维也纳新年音乐会结束时《拉德斯基进行曲》的录音片段，为管弦乐曲。<br><br>这首曲子D大调，2/2拍，用复三部曲式写成，由对比鲜明的两部分构成。强劲有力的引子之后是第一部分主题，用带装饰音的八分音符写成，带有战马奔腾的节奏，描写拉德茨基骑在马上威武的形象。也仿佛让人们看到了一队步兵轻快的走过大街。反复一遍之后，音乐经过一个全乐队齐奏的过渡句，随后出现的是与前面主题相对比的轻柔主题，优美动听。音乐最后在反复第一部分的主题后结束。<br><br>九、勃拉姆斯的《摇篮曲》——妈妈无尽的爱<br><br>http://www.emama.cn/MusicFiles/%BE%AD%B5%E4%CC%A5%BD%CC%D2%F4%C0%D6/%B2%AA%C0%AD%C4%B7%CB%B9%D2%A1%C0%B6%C7%FA.mp3<br><br>安宁、亲切、温存、抚爱的《摇篮曲》表达妈妈对宝宝无尽的爱。曲调优美、抒情、静谧；旋律平稳，音律适中，音高起伏不大；表现了比较安宁的情绪。<br>准妈妈们，在这首乐曲声中跟你的小宝宝说说话吧。<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/2006053011173603.jpg" alt=""><br>　《摇篮曲》，这首常用于小提琴独奏的《摇篮曲》，原是一首通俗歌曲，作于1868年。相传作者为祝贺法柏夫人次子的出生，作了这首平易可亲、感情
真挚的摇篮曲送给她。法柏夫人是维也纳著名的歌唱家，1859年勃拉姆斯在汉堡时，曾听过她演唱的一首鲍曼的圆舞曲，当时勃拉姆斯深深地被她优美的歌声所
感动，后来就利用那首圆舞曲的曲调，加以切分音的变化，作为这首《摇篮曲》的伴奏，仿佛是母亲在轻拍着宝宝入睡。
原曲的歌词为&#8220;安睡安睡，乖乖在这里睡，小床满插玫瑰，香风吹入萝里，蚊蝇寂无声，宝宝睡得甜蜜，愿你舒舒服服睡到太阳升起。&#8221;那恬静、优美的旋律本身就是一首抒情诗（片段1<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=4,0,2,0" height="18" width="25">
<embed src="http://www.hongen.com/art/gdyy/amqbl/wav/ga20209a.swf" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" height="18" width="25">
    </object>）。后人曾将这首歌曲改编为轻音乐，在世界上广为流传，就像一首民谣那样深入人心。 <br><br>音乐史上有一件趣事，那就是两首脍炙人口的摇篮曲，都出自两位单身汉的手笔——舒伯特和勃拉姆斯。http://fengyin.cn/dispbbs.asp?boardID=11&amp;ID=3023&amp;page=9<br>Andrea Bocelli演绎舒伯特的摇篮曲：<br>http://kfdc008.baby.zaojiao.com.cn/57766/media/200604256287.mp3 <br><br>十、维瓦尔第的小提琴协奏曲《四季》——《春》<br>http://www.flotu.org/~zhangqiang/Music/The%20Four%20Seasons/1.Spring%20-%20I.%20Allegro.mp3<br><br>乐曲描绘了一幅春临大地，众鸟欢唱，和风吹拂，溪流低语的画面。当春临大地，仙女和牧羊人随着风笛愉悦的旋律，在草原上婆娑起舞，多么美丽的画面！是一首非常好听的小提琴曲。<br><br><img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/2006053011173604.jpg" alt=""><br>　　<br>　　维瓦尔第，小提琴协奏曲《四季》作品大约作于1725年，是维瓦尔第大约五十岁时出版的十二部协奏曲的第一号到第四号，合称《四季》。<br>　　这四部协奏曲是维瓦尔第最著名的作品，其中的旋律至今仍长盛不衰。四部作品均采用三乐章协奏曲形式的正宗标题音乐，不仅照给定的十四行诗配上音乐，而且还运用了不少描写手法。维瓦尔第在总奏与主奏交替形成的复奏形式上，巧妙地配以标题。在维瓦尔第之前，还没有人以标题音乐的方式谱写过协奏曲。<br>　　由于维瓦尔第的《四季》属于标题音乐，所以从形式上看，自然较其他协奏曲显得自由而且不平衡，但这样反而更能表现出巴洛克的特色及魅力。这四部作品画意盎然，激发出人们对巴洛克时代音乐的浓厚兴趣。<br>　　《四季》的标题分别为：《春》E大调、《夏》g小调、《秋》F大调、《冬》f小调。其中以《春》的第一乐章（快板）最为著名，音乐展开轻快愉悦的旋律，使人联想到春天的葱绿（片段1 ）；《夏》则出乎意料之外，表现出夏天的疲乏、恼人（片段2 ）；《秋》描写的是收获季节中，农民们饮酒作乐、庆祝丰收的快活景象，第一乐章欢快活泼（片段3 ）；《冬》描写人们走在冰上滑稽的姿态，以及由炉旁眺望窗外雨景等景象，其中第二乐章非常出名，曾被改编为轻音乐而广为流传（片段4 ）。<br><br><br>以上十首乐曲，每首的风格都是不一样的。准妈妈们在一天当中的每个时刻都可以来听。烦躁的时候就听一听《自新大陆》；慵懒的时候听一听《杜鹃圆舞曲》；悲伤的时候听一听《维也纳森林的故事》；发脾气的时候听一听《田园》；睡醒的时候听一听《维也纳森林的故事》；激情澎湃的时候听一听《拉德斯基进行曲》；跟小宝宝讲话的时候听一听《摇篮曲》；运动的时候听一听《拉德斯基进行曲》；春天来临的时候听一听《春》。<br>让您的小宝宝接触多元的艺术，接触不同演奏形式，不同艺术风格的乐曲，不管是欢快的、悲伤的、沉静的、梦幻的、激情的、淳朴的，让小宝宝在音乐的海洋中汲取营养，培养小宝宝的艺术潜能。<br>&nbsp;<br>本文章最新版请参见：<a  href="http://www.deepcast.net/wiki/ow.asp?%CC%A5%BD%CC%D2%F4%C0%D6">http://www.deepcast.net/wiki/ow.asp?胎教音乐</a>           <img src ="http://www.cnblogs.com/deepcast/aggbug/475148.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43628/" target="_blank">[新闻]微软：不裁员也不削减研发开支</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>[原创]Flex和PHP脚本的整合(2)--AMFPHP篇</title><link>http://www.cnblogs.com/deepcast/archive/2006/08/04/468059.html</link><dc:creator>深瞳</dc:creator><author>深瞳</author><pubDate>Fri, 04 Aug 2006 11:08:00 GMT</pubDate><guid>http://www.cnblogs.com/deepcast/archive/2006/08/04/468059.html</guid><wfw:comment>http://www.cnblogs.com/deepcast/comments/468059.html</wfw:comment><comments>http://www.cnblogs.com/deepcast/archive/2006/08/04/468059.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/deepcast/comments/commentRss/468059.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/deepcast/services/trackbacks/468059.html</trackback:ping><description><![CDATA[<font face="Verdana">
</font>
<p><font face="Verdana"><font face="Verdana">本文章最新版本请参见：<font face="Verdana"><a href="http://www.deepcast.net/wiki/ow.asp?Flash%E5%92%8CPHP%E7%9A%84%E6%95%B4%E5%90%88">http://www.deepcast.net/wiki/ow.asp?Flash和PHP的整合</a></font></font></font></p>
<p><font face="Verdana">在上一篇文章 Flash整合PHP脚本(1)--XML<font face="Verdana">篇</font>中，我们开发了一个小型的Adobe
Flex2应用程序连接了一个PHP后台程序。如果你曾看过上篇，你可能会问：它们之间是否可以不通过XML编码作中介，而直接传递变量?答案是可以。本文就会演示这方面的实例。<br><br>请注意，本文是用Flex2编写的。<br><br></font></p>
<h3><font face="Verdana">一，系统要求：</font></h3>
<h4><font face="Verdana">1, Flex Builder 2 (包括SDK)</font></h4>
<ul class="link-list compact"><font face="Verdana">
    <li class="icon download"><a href="http://www.adobe.com/go/devcenter_flex_try">Flex Builder2试用版下载</a>
    </li>
    <li class="icon buy"><a href="http://www.adobe.com/go/devcenter_flex_buy">购买</a></li>
    </font></ul>
    <h4><font face="Verdana">2, AMFPHP 1.25 :<br></font></h4>
    <ul class="link-list"><font face="Verdana">
        <li class="icon info"><a href="http://sourceforge.net/project/showfiles.php?group_id=72483" target="_blank">AMFPHP下载</a></li>
        </font></ul>
        <h4><font face="Verdana">3, PHP (installed on a local web server)</font></h4>
        <font face="Verdana"><br>
        </font>
        <h4><font face="Verdana">二，预备知识</font></h4>
        <p><font face="Verdana">PHP有关Intermediate知识</font></p>
        <!-- InstanceEndEditable --><font face="Verdana"><br>
        </font>
        <h3><font face="Verdana">三，MYSQL和PHP</font></h3>
        <p><font face="Verdana">如果想要创建一个中大型的企业应用，可以使用Adobe Flex Data Service
        2。它通过高效的数据传输，基于信息的发布和订阅等更多方式来简化数据的互动。AMFPHP只是它的一个小子集。如果你为大企业工作，你会更想见识一下它在数据互动层的表现。<br><br><br>完成这个任务的关键是
        <a href="http://amfphp.sourceforge.net/" target="_blank">AMFPHP</a>。该项目最早是由Wolfgang
        Hamann发起的，该团队成长壮大到目前的五六个开发者左右。正是多亏了他们的辛勤工作，整个Flex社区现在才有了一个基于Flex的使用PHP后台的前台。</font></p>
        <p><font face="Verdana">本例将演示如果从一个数据库中显示记录。只是显示，暂不能插入和更新。本文使用的MYSQL数据库名Sample，表名Users，和前一篇文章用到的数据库结构一致，只是需要先往里面填一些数据以供显示。<a href="http://www.deepcast.net/deepcast/UserFiles/2006-8/4/200684173319618.rar"><img src="/deepcast/editor/eweb_editor/sysimage/file/rar.gif" border="0">AMFPHP_Flex.rar</a>此为数据库结构和输入数据的SQL文件提供下载。<br><br></font></p>
        <p><font face="Verdana">如下为PHP脚本代码，其文件名为 <strong>sample.php</strong>，把它放到AMFPHP的services目录下。</font></p>
        <div class="preWrapper">
        <pre><font face="Verdana">&lt;?php<br>// Create new service for PHP Remoting as Class<br>class sample<br>{<br>    function sample () <br>    {<br>        // Define the methodTable for this class in the constructor<br>        $this-&gt;methodTable = array(<br>            "getUsers" =&gt; array(<br>                "description" =&gt; "Return a list of users",<br>                "access" =&gt; "remote"<br>            )<br>        );<br>    }<br><br>    function getUsers () {<br>        $mysql = mysql_connect(localhost, "username", "password");<br>        <br>        mysql_select_db( "sample" );<br>        <br>        //return a list of all the users<br>        $Query = "SELECT * from users";<br>        $Result = mysql_query( $Query );<br>        while ($row = mysql_fetch_object($Result)) {<br>               $ArrayOfUsers[] = $row;<br>        }<br>        return( $ArrayOfUsers );<br>    }<br>}<br>?&gt;<br></font></pre>
        </div>
        <p><font face="Verdana">&nbsp;如果你熟悉AMFPHP的话，上述你也应该很熟悉。</font></p>
        <p><font face="Verdana">类的名字和文件名要保持一致，如上文件名smaple.php，则类名为sample。因为类文件总是在载入时调用与其同名的类来初始化自己。上例中定义了对AMFPHP有效的方法，就是getUsers，该方法返回一个用户列表。在数据库里，取回所有用户，并以一个对象数组的方式返回。<br></font></p>
        <h3><font face="Verdana">四，应用的前台</font></h3>
        <p><font face="Verdana">现在开始创建前台的文件sample.mxml，它也只有短短五十行：<br><br></font></p>
        <p><font face="Verdana">&lt;!--第一行是最顶层的XML文档定义--&gt;<br>&lt;?xml version="1.0"
        encoding="utf-8"?&gt;</font></p>
        <p><font face="Verdana">&nbsp;&lt;!--第二行是Applicastion定义，并设置了在FLASH载入<code>creationComplete</code>时调用<code>initApplication()函数</code>--&gt;<br></font></p>
        <pre><font face="Verdana">&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" creationComplete="initApplication()"&gt;<br><br>&lt;!--用于显示用户数据的DataGrid组件，请注意列名元素必须和数据库的字段名一致。--&gt;<br>&lt;mx:DataGrid dataProvider="{dataProvider}"&gt;<br>    &lt;mx:columns&gt;<br>        &lt;mx:DataGridColumn headerText="Userid" dataField="userid"/&gt;<br>        &lt;mx:DataGridColumn headerText="User Name" dataField="username"/&gt;<br>        &lt;mx:DataGridColumn headerText="User Name" dataField="emailaddress"/&gt;<br>    &lt;/mx:columns&gt;<br>&lt;/mx:DataGrid&gt;<br><br>&lt;!--然后是一系列AS命令--&gt;<br>    &lt;mx:Script&gt;<br>        &lt;![CDATA[<br><br><br>&lt;!--本例中dataProvider被绑定到<code>&lt;mx:DataGrid&gt;，这意味着该DataGrid从该变量中(此处为PHP对象数组)取得数据。</code><br>上，--&gt;<br><br>            [Bindable]<br>            public var dataProvider:Array;<br><br>&lt;!--然后是AMFPHP在FLEX中工作的必须代码。首先导入用于远程的<br>flash.net.Responder包，其实当你声明你需要一个新的<br>Responder时FLEX会自动包含入那个包。此处只是特地演示。<br><br></font></pre>
        <pre><font face="Verdana">&lt;!--然后，创建一个变量，<code>gateway</code>, 它是 <code>RemotingConnection数据类型。你已经知道了</code><code>RemotingConnection</code>的相关事宜。你应该在FLEX的底部来加入一个文件，名为RemotingConnection.as，上面有许多代码。</font></pre>
        <pre><font face="Verdana">--&gt;</font></pre>
        <pre><font face="Verdana">            import flash.net.Responder;<br> <br>            public var gateway : RemotingConnection;<br><br></font></pre>
        <pre><font face="Verdana">&lt;!--当FLASH应用载入时调用<code>initApplication</code> ，设置gateway变量为到AMFPHP中的gateway.php的连接路径。这样就可以调用sample类中的getUsers方法了。然后根据是否出错相应地执行<code>onResulth或者</code><code>onFault</code>两个函数之一。--&gt;<br>            public function initApplication()<br>            {<br>                gateway = new RemotingConnection( "http://localhost/flex/php/gateway.php" );<br>                gateway.call( "sample.getUsers", new Responder(onResult, onFault));<br>            }<br><br>&lt;!--简单设置了dataProvider变量为结果变量，其通过AMFPHP传回ActionScript。这就是当你运行MYSQL查询($ArrayOfUsers)时会返回PHP对象的数组。AMFPHP已经自动把PHP对象数组翻译成了ActionScript数组，酷吧。 --&gt;<br>            public function onResult( result : Array ) : void<br>            {<br>            dataProvider = result;<br>            }<br><br>&lt;!--在出错情况下，就象给用户的错误信息提示一样，你可以追踪变量的值，在调试模式中特别有用--&gt;<br>            public function onFault( fault : String ) : void<br>            {<br>                trace( fault );<br>            }<br>        ]]&gt;<br>    &lt;/mx:Script&gt;<br>&lt;/mx:Application&gt;</font></pre>
        <p><font face="Verdana">上述实例稍显复杂，让我们再次明确一下文件的位置。有三个文件被创建，以及下载来的AMFPHP文件包。</font></p>
        <ul><font face="Verdana">
            <li>把Flex项目文件，sample.mxml 和 RemotingConnection.as放在同一个目录下
            </li>
            <li>把PHP文件和文件夹如services ,actions, adapters, app, browser等从AMFPHP文件压缩包中解压缩释放出来。
            </li>
            <li>把AMFPHP中的所有文件都放到web根目录下<br>
            </li>
            <li>把sample.php放到AMFPHP项目中的services 文件夹下</li>
            </font></ul>
            <p><font face="Verdana">那么，上述连接PHP后台和Flex所建前台的小应用程序实例就到此结束了。上述代码提供在此<img src="http://www.deepcast.net/deepcast/editor/eweb_editor/sysimage/file/rar.gif" border="0"><a href="http://www.deepcast.net/deepcast/UserFiles/2006-8/4/200684173319618.rar">AMFPHP_Flex.rar</a>打包下载。</font></p>
            <font face="Verdana">&nbsp;<br clear="all"><font face="Verdana">本文章最新版本请参见：<font face="Verdana"><a href="http://www.deepcast.net/wiki/ow.asp?Flash%E5%92%8CPHP%E7%9A%84%E6%95%B4%E5%90%88">http://www.deepcast.net/wiki/ow.asp?Flash和PHP的整合</a></font></font></font>  <img src ="http://www.cnblogs.com/deepcast/aggbug/468059.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43625/" target="_blank">[新闻]2008年11月22日科技博客精选</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>[原创]Flex和PHP脚本的整合(1)--XML篇</title><link>http://www.cnblogs.com/deepcast/archive/2006/08/04/468056.html</link><dc:creator>深瞳</dc:creator><author>深瞳</author><pubDate>Fri, 04 Aug 2006 11:06:00 GMT</pubDate><guid>http://www.cnblogs.com/deepcast/archive/2006/08/04/468056.html</guid><wfw:comment>http://www.cnblogs.com/deepcast/comments/468056.html</wfw:comment><comments>http://www.cnblogs.com/deepcast/archive/2006/08/04/468056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/deepcast/comments/commentRss/468056.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/deepcast/services/trackbacks/468056.html</trackback:ping><description><![CDATA[<p><font face="Verdana">本文章最新版本请参见：<font face="Verdana"><a href="http://www.deepcast.net/wiki/ow.asp?Flash%BA%CDPHP%B5%C4%D5%FB%BA%CF">http://www.deepcast.net/wiki/ow.asp?Flash和PHP的整合</a></font></font></p>
<p>本文将使用Adobe Flex
Builder2和PHP创建一个小型应用程序实例，从MYSQL数据库相应表中读出包括姓名和邮件地址等数据并显示给用户，用户还可以添加新的姓名和邮件地址进入数据库。</p>
<p>注意：<font face="Verdana"><a href="http://www.adobe.com/devnet/flex/articles/flex2_php.html">http://www.adobe.com/devnet/flex/articles/flex2_php.html</a>&nbsp;官网上有<font face="Verdana">Mike Potter提供的</font></font>Flex 2 Beta 3. I
的例子，但是其中有一些代码可能是抄漏抄错，所以我在学习完后，特地把自己验证过的代码贴出来，供大家参考使用。</p>
<h3>一，系统要求：</h3>
<p>1，请先安装Flex Builder 2 (包括了SDK)</p>
<p class="icon download">2, PHP</p>
<p class="icon download">3, MYSQL和APACHE（IIS也可）<br></p>
<h4>
</h4>
<h4>二，预备知识：</h4>
<p>对简单的PHP开发和XML基础比较熟悉即可。</p>
<h3>三，MYSQL的准备工作
</h3>
<h4>先在Mysql上创建数据库Sample，然后运行如下SQL代码<a href="http://www.deepcast.net/deepcast/UserFiles/2006-8/3/20068316245847.rar"><img src="http://www.deepcast.net/deepcast/editor/eweb_editor/sysimage/file/rar.gif" border="0">sample.rar</a>以创建表Users。</h4>
<p>四，PHP脚本</p>
<p>然后，你就要开始写添加用户和输出XML(给FLEX程序使用的)的PHP脚本了。该脚本比较简单，只有25行。请注意，其中，<code>quote_smart</code>
函数是符合<a href="http://php.net/" target="_blank">PHP.Net</a>
官网的规范来验证用户输入安全所用。function as a best practice to help verify user input,
according to the <a href="http://php.net/" target="_blank">PHP.Net</a> </p>
<div class="preWrapper">
<pre>
<p><font face="Verdana">以下是放在Apache根目录下的getuser.php文件：</font></p>
<p><font face="Verdana">&lt;?php<br>Define( "DATABASE_SERVER", "localhost" );//数据库服务器地址<br>Define( "DATABASE_USERNAME", "root" );//数据库登录名<br>Define( "DATABASE_PASSWORD", "123456" );//数据库登录密码<br>Define( "DATABASE_NAME", "sample" );//数据库名</font></p>
<p><font face="Verdana">//连接数据库</font></p>
<p><font face="Verdana">$mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);</font></p>
<p><font face="Verdana">mysql_select_db( DATABASE_NAME );</font></p>
<p><font face="Verdana">//验证用户输入的姓名和地址是否安全</font></p>
<p><font face="Verdana">function quote_smart($value)<br>{<br>&nbsp;&nbsp; // Stripslashes<br>&nbsp;&nbsp; if (get_magic_quotes_gpc()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $value = stripslashes($value);<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; // Quote if not integer<br>&nbsp;&nbsp; if (!is_numeric($value)) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $value = "'" . mysql_real_escape_string($value) . "'";<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; return $value;<br>}</font></p>
<p><font face="Verdana">if( $_POST["emailaddress"] AND $_POST["username"])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //add the user<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Query = sprintf("INSERT INTO users VALUES (NULL, %s, %s)", quote_smart($_POST["username"]), quote_smart($_POST["emailaddress"]));</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Result = mysql_query( $Query );<br>}</font></p>
<p><font face="Verdana">//return a list of all the users<br>$Query = "SELECT * from users";<br>$Result = mysql_query( $Query );</font></p>
<p><font face="Verdana">$Return = "&lt;users&gt;";</font></p>
<p><font face="Verdana">while ( $User = mysql_fetch_object( $Result ) )<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Return .= "&lt;user&gt;&lt;userid&gt;".$User-&gt;userid."&lt;/userid&gt;&lt;username&gt;".$User-&gt;username."&lt;/username&gt;&lt;emailaddress&gt;".$User-&gt;emailaddress."&lt;/emailaddress&gt;&lt;/user&gt;";&nbsp;<br>}<br>$Return .= "&lt;/users&gt;";<br>mysql_free_result( $Result );<br>print ($Return)<br>?&gt;</font></p>
</pre>
</div>
<p><code><font face="Verdana">请注意，</font>$_POST</code>&nbsp;["变量名"]形式用来表示从Flex程序中传递到PHP脚本中的变量。在上例中就是FLEX中传来的<code>emailaddress</code>&nbsp;和
<code>username。用户输入符合验证安全规范的上述<code>emailaddress</code>&nbsp;和
<code>username</code>之后，PHP就把它们添加入数据库以添加新用户，然后PHP会输出XML格式的用户列表。</code></p>
<p><code></code><strong>你是无法直接从PHP向FLEX传递变量的，你可以先把变量输出成XML，然后FLEX读取XML取得传回的数据，这样就最终改变了FLEX表现层中的数据。同样的，你也可以用上面同样的PHP脚本作为后台程序，把数据从PHP中输出到移动电话上，你只需要改写一下前端的显示就可以了。</strong></p>
<p>到此为止，涉及的PHP脚本和MYSQL数据库都是旧的内容。之后我们就要开始创建应用程序的界面了。</p>
<h3>五，使用FLEX创建用户界面</h3>
<p>Flex 应用程序把 ActionScript 3.0和MXML结合使用。ActionScript是基于ECMAScript
(类似于JavaScript)的,
因此它对于WEB开发者来说应该是很熟悉的。MXML是基于XML的FLEX应用程序的表现层。从本质上来看，就是用XML定义用户界面的布局，用ActionScript.来对用户界面进行脚本编程。本文所用到的MXML也仅有26行代码：</p>
<p><font face="Verdana">&lt;!-- 第一行是XML档声明。--&gt;<br></font>&lt;?xml version="1.0"
encoding="utf-8"?&gt;<br><br><font face="Verdana">&lt;!--
第二行是应用程序声明，提供MX组件的命名空间，布局方式是绝对定位，最后是声明调用id为userRequest的对象的send()函数--&gt;<br></font>&lt;mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" layout="absolute"
creationComplete="userRequest.send()"&gt;<br><br><font face="Verdana">&lt;!--
设置HTTPService和前例所创建的PHP脚本之间发送和接收数据。设置了HTTPService的id为userRequest，设置了PHP脚本文件所在的URL，设置了不使用代理服务器，设置了提交方式是POST，当然也可以用GET方式，不过相应要修改PHP脚本的变量名--&gt;<br></font>&nbsp;&nbsp;
&lt;mx:HTTPService id="userRequest" url="http://localhost/getuser.php"
useProxy="false" method="POST"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:request
xmlns=""&gt;<br><br><font face="Verdana">&lt;!--
设置了username的值为ID为username的元素的text属性的值(<code>username.text</code>)
，也设置了传递到PHP的变量&nbsp;<code>_POST["emailaddress"]</code>
的值为ID为emailaddress的元素的text属性的值(<code>emailaddress.text</code>)。大括号把变量绑定到了界面元素的值上，这就是说，如果把<code>&lt;username&gt;改成</code><code>&lt;user_name&gt;</code>,
那么相应地传递到PHP的变量就改为<code>_POST["user_name"]，而相反地，如果把(<code>username.text</code>)
改成<code>{user_name.text}</code>了，那么你就必须修改MXML中的<code><code>&lt;username&gt;改成</code><code>&lt;user_name&gt;。--&gt;</code></code></code></font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;username&gt;{username.text}&lt;/username&gt;&lt;emailaddress&gt;{emailaddress.text}&lt;/emailaddress&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/mx:request&gt;<br>&nbsp;&nbsp; &lt;/mx:HTTPService&gt;<br><br></p>
<p><font face="Verdana"><font face="Verdana">&lt;!--
然后创建一个简单的窗体，其中按钮点击则激发userRequest.send()调用。--&gt;<br>&nbsp;&nbsp; &lt;mx:Form x="22" y="10"
width="493"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:HBox&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Label
text="Username"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:TextInput id="username"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/mx:HBox&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:HBox&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Label text="Email
Address"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:TextInput id="emailaddress"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;/mx:HBox&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:Button label="Submit"
click="userRequest.send()"/&gt;<br>&nbsp;&nbsp; &lt;/mx:Form&gt;</font></font></p>
<p><font face="Verdana"><font face="Verdana">&lt;!-- 创建一个DataGrid组件来显示userRequest
HTTPService取回的数据。请注意必须绑定它到user元素而非其上层的users外包元素。而DataGrid组件自带有很方便的列排序和高亮当前行功能。<br>最后，是一个显示和当前用户相对应的邮件地址dgUserRequest.selectedItem.emailaddress的文本框。--&gt;<br>&nbsp;&nbsp;
&lt;mx:DataGrid id="dgUserRequest" x="22" y="128"
dataProvider="{userRequest.lastResult.users.user}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&lt;mx:columns&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:DataGridColumn headerText="User ID"
dataField="userid"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mx:DataGridColumn headerText="User Name"
dataField="username"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mx:columns&gt;<br>&nbsp;&nbsp;
&lt;/mx:DataGrid&gt;<br>&nbsp;&nbsp; &lt;mx:TextInput x="22" y="292"
id="selectedemailaddress"
text="{dgUserRequest.selectedItem.emailaddress}"/&gt;<br>&lt;/mx:Application&gt;</font></font></p>
<font face="Verdana"><font face="Verdana">
</font></font>
<p><font face="Verdana"><font face="Verdana">从PHP取回的XML内容如下:<br>&lt;users&gt;<br>&lt;user&gt;<br>&lt;userid&gt;1&lt;/userid&gt;<br>&lt;username&gt;Joe
Schmoe&lt;/username&gt;<br>&lt;emailaddress&gt;joe@schmoe.com&lt;/emailaddress&gt;<br>&lt;/user&gt;<br>&lt;user&gt;<br>&lt;userid&gt;2&lt;/userid&gt;<br>&lt;username&gt;Betty
Schmoe&lt;/username&gt;<br>&lt;emailaddress&gt;betty@schmoe.com&lt;/emailaddress&gt;<br>&lt;/user&gt;<br>&lt;/users&gt;</font></font></p>
<p><font face="Verdana"><font face="Verdana">整个使用PHP后台来添加和取回MYSQL数据的小FLASH应用程序就到处为止了。所有的代码文件<a href="http://www.deepcast.net/deepcast/UserFiles/2006-8/3/20068320198995.rar"><img src="/deepcast/editor/eweb_editor/sysimage/file/rar.gif" border="0">flexphp.rar</a>在此提供下载。</font></font></p>
<p><font face="Verdana"><font face="Verdana"><font face="Verdana">本文章最新版本请参见：<font face="Verdana"><a href="http://www.deepcast.net/wiki/ow.asp?Flash%BA%CDPHP%B5%C4%D5%FB%BA%CF">http://www.deepcast.net/wiki/ow.asp?Flash和PHP的整合</a></font></font></font></font></p><img src ="http://www.cnblogs.com/deepcast/aggbug/468056.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43625/" target="_blank">[新闻]2008年11月22日科技博客精选</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>夜如深瞳，瞳深如夜</title><link>http://www.cnblogs.com/deepcast/archive/2006/07/27/460566.html</link><dc:creator>深瞳</dc:creator><author>深瞳</author><pubDate>Wed, 26 Jul 2006 18:00:00 GMT</pubDate><guid>http://www.cnblogs.com/deepcast/archive/2006/07/27/460566.html</guid><wfw:comment>http://www.cnblogs.com/deepcast/comments/460566.html</wfw:comment><comments>http://www.cnblogs.com/deepcast/archive/2006/07/27/460566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/deepcast/comments/commentRss/460566.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/deepcast/services/trackbacks/460566.html</trackback:ping><description><![CDATA[流水表面看一成不变，实际上已过千山万壑。雨的方向是泉，泉的方向是溪，溪的方向是河，河的方向是江，江的方向是海，海的方向是什么？可是心随海动的少年郎？<br><br>钱包里面是一文不名，实际上已散千金万落。眼的方向是光，光的方向是夜，夜的方向是窗，窗的方向是手，手的方向是心，心的方向是什么？可是夜夜不眠的代码工？<br><br>代码工梦想完美的程式，少年郎追求完美的爱情。程序解析后，只剩下了零和一错落相对；伟大的爱情，散落到现实中也不过是哭与笑的纷纷扰扰。市场毫不客气地指挥着你不容你违逆；现实毫不留情地撞击着你不让你喘息。<br><br>代码的长河里，流淌的不是MS的铜臭，也不是Java的咖啡香，...是代码农民工们的血汗。我们用我们的血汗，浇铸着我们向往的城市。虽然城市并非乐土，让我们在干渴煎熬中痛苦，但是不时给我们的嘴唇涂上的水露，勾引着我们无休无驻。让我们回过头，仍然咬着牙喊：无悔无顾！<br><br>夜如深瞳，瞳深如夜。只愿那明日的光线，照穿今夜的望眼，<img src ="http://www.cnblogs.com/deepcast/aggbug/460566.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43624/" target="_blank">[新闻]诺基亚将支持Lotus Notes 和黑莓争夺市场</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>新一波VB.NET升级需求涌现 </title><link>http://www.cnblogs.com/deepcast/archive/2006/06/30/440005.html</link><dc:creator>深瞳</dc:creator><author>深瞳</author><pubDate>Fri, 30 Jun 2006 13:58:00 GMT</pubDate><guid>http://www.cnblogs.com/deepcast/archive/2006/06/30/440005.html</guid><wfw:comment>http://www.cnblogs.com/deepcast/comments/440005.html</wfw:comment><comments>http://www.cnblogs.com/deepcast/archive/2006/06/30/440005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/deepcast/comments/commentRss/440005.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/deepcast/services/trackbacks/440005.html</trackback:ping><description><![CDATA[<span style="color: #6f6f6f;" lang="EN-US"></span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">的发展已迈入第</span><span lang="EN-US">6</span><span style="font-family: 宋体;">个年头，随着</span><span lang="EN-US">Visual Studio 2005</span><span style="font-family: 宋体;">的推出，开发平台的稳定性与成熟度已经大幅提升，加上</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">的主流地位确立，开发工具升级的议题再度受到瞩目。</span><br>
<p class="MsoNormal"><span lang="EN-US">
.NET</span><span style="font-family: 宋体;">的发展迈入第</span><span lang="EN-US">6</span><span style="font-family: 宋体;">个年头，平台的成熟度与稳定性渐入佳境，各种质疑的声浪逐渐消失，</span><span lang="EN-US">Visual
Studio 2005</span><span style="font-family: 宋体;">／</span><span lang="EN-US">VB.NET 2005</span><span style="font-family: 宋体;">的推出，凸显了</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">与</span><span lang="EN-US">VB.NET</span><span style="font-family: 宋体;">的落差，已经是</span><span lang="EN-US">3</span><span style="font-family: 宋体;">个版本、</span><span lang="EN-US">2</span><span style="font-family: 宋体;">个</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">世代的间隔，这样的差距，引爆</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">用户新一波的升级需求。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">随着</span><span lang="EN-US">Visual
Studio 2005</span><span style="font-family: 宋体;">／</span><span lang="EN-US">VB.NET 2005</span><span style="font-family: 宋体;">的推出，开发工具升级的议题再度受到瞩目，然而，对于企业来说，任何一个工具或平台升级的决策，都不会只是为了升级而升级，背后的关键因素，往往</span>
<span style="font-family: 宋体;">与企业本身的商业运作紧密相连，因为如此，反应在开发工具平台的升级上，有的企业毫不考虑就决定在第一时间升级，有的企业则在竞争压力下被迫升级，有的企</span>
<span style="font-family: 宋体;">业则在迟疑、观望之后跟进，当然，对于有的企业来说现在并没有升级的必要。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">如果信息的架构，是为了落实企业的服务，那么，每一次技术升级的轨迹，应该都可以反映出企业所面临的商业环境变化。这几年，大部分的</span><span lang="EN-US">IT</span><span style="font-family: 宋体;">部门，都</span> <span style="font-family: 宋体;">在忙着摆脱主从式架构的环境，然而，走向开放、走向跨平台的同时，越来越多的专有名词纷至沓来，诸如</span><span lang="EN-US">Web Services</span><span style="font-family: 宋体;">、</span><span lang="EN-US">XML</span><span style="font-family: 宋体;">、</span><span lang="EN-US">SOA</span><span style="font-family: 宋体;">、</span><span lang="EN-US">CMMI</span><span style="font-family: 宋体;">等等，而这些名词所代表的意义，是更多系统与系统之间的整合，程序与程序之间的对话。</span>
<span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">这些改变使得开发工具必须不断提早蜕变。以微软的开发平台而言，</span><span lang="EN-US">2002</span><span style="font-family: 宋体;">年正式从</span><span lang="EN-US">Visual
Basic 6.0</span><span style="font-family: 宋体;">（简称</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">）进入</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">世代，而原本的</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">使用者，也开始逐渐转移到</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">平台，近来，随着</span><span lang="EN-US">Visual Studio 2005</span><span style="font-family: 宋体;">的推出，新一波的升级需求跟着浮现，然而，根据微软的调查结果显示，至今台湾仍有</span><span lang="EN-US">2</span><span style="font-family: 宋体;">万左右的</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">使用者，相当于整体程序开发人员的四分之</span> <span style="font-family: 宋体;">一。</span>
<span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">相较于</span><span lang="EN-US">Visual
Studio 2003</span><span style="font-family: 宋体;">所造成的升级效应，</span><span lang="EN-US">Visual
Studio 2005</span><span style="font-family: 宋体;">的发展后势值得期待，主要是因为</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">的发展，已经迈入第</span><span lang="EN-US">6</span><span style="font-family: 宋体;">个年头，随着</span><span lang="EN-US">Visual Studio 2005</span><span style="font-family: 宋体;">的推出，开发平台的稳定性与成熟度已经大幅提升，加上</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">的主流地位确立，都将促使</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">使用者的升级，另外，从程序开发人员的角度来</span> <span style="font-family: 宋体;">看，</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">与</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">之间的距离，已经是</span><span lang="EN-US">3</span><span style="font-family: 宋体;">个版本、</span><span lang="EN-US">2</span><span style="font-family: 宋体;">个</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">世代的落差，程序开发人员越晚跨入</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">，学习门槛就会越高。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">对于企业来说，升级与否，虽然各有不同考量与规画，但是长远看来，似乎也没有太多的选择，精业专业服务暨技术部资深顾问李智桦表示「</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">的</span> <span style="font-family: 宋体;">使用者势必是一定要跨进</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">」，因为以前的开发工具，是程序语言为主的概念，</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">演进到</span><span lang="EN-US">Visual Studio
2005</span><span style="font-family: 宋体;">，才首度把软件工程的概念带进来，对于程序开发人员来说，这是一个重要的里程碑，否则就不用谈什么</span><span lang="EN-US">Web Services</span><span style="font-family: 宋体;">或</span><span lang="EN-US">SOA</span><span style="font-family: 宋体;">了。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">然而，</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">的转移毕竟还在过程当中，因此，普遍可以看到</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">与</span><span lang="EN-US">VB.NET</span><span style="font-family: 宋体;">同时并存的现象，其中甚至包括多年前就已经跨入</span><span lang="EN-US"> VB.NET</span><span style="font-family: 宋体;">的厂商，诸如华航、好乐迪等，虽然都是在</span><span lang="EN-US">3</span><span style="font-family: 宋体;">、</span><span lang="EN-US">4</span><span style="font-family: 宋体;">年前就已经升级，但是目前的开发环境，仍旧是</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">与</span><span lang="EN-US">VB.NET</span><span style="font-family: 宋体;">并存的情况。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">以好乐迪来说，开发环境升级到</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">平台之后，至今仍有局部使用</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">，好乐迪研究开发部经理徐鸿志表示，</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">的使用，主要局限在早</span> <span style="font-family: 宋体;">期开发的项目，例如，后台播放程序就是其中一个最经典的例子，对于</span><span lang="EN-US">KTV</span><span style="font-family: 宋体;">事业经营的厂商来说，播放程序几乎就是命脉，但是因为没有与其它系统介接的必要，</span>
<span style="font-family: 宋体;">因此算是一个独立而且稳定的程序，截至目前为止，好乐迪依旧是用</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">持续进行维护与功能更新。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">对于好乐迪来说，开发平台虽然已经升级到</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">，但是，至今仍旧处于</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">与</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">并存的状态，徐鸿志表示，既有程序的转移策略，将会以</span>
<span style="font-family: 宋体;">产品的生命周期作为依据，一般来说，产品本身的发展如果已经失去未来性，好乐迪就不会进行任何的升级，例如，录像带管理程序等，当初虽然也是用</span><span lang="EN-US">VB6.0 </span><span style="font-family: 宋体;">来开发，但是，录像带在台湾市场已经逐渐式微，未来势必会走向终结的命运，在这样的情况下，好乐迪就不会对录像带管理程序进行升级。</span>
<span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">徐鸿志说，由于好乐迪计算机化的时间相当早，所以早期的开发环境什么都有，最后因为官方网站、网络订位以及会员系统的开发需求，决定用</span><span lang="EN-US">VB.NET</span><span style="font-family: 宋体;">作为开发平台，自此以后，</span><span lang="EN-US">VB.NET</span><span style="font-family: 宋体;">就成为好乐迪的主要开发平台。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">不过，升级到</span><span lang="EN-US">VB.NET</span><span style="font-family: 宋体;">的过程中，好乐迪的第一个开发项目是失败的，因为当初所开发的点歌程序，没有考虑到使用者端与服务器端资料往返频率过高所造成的负担。</span>
<span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">目前好乐迪的开发环境，虽然同时包括了</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">与</span><span lang="EN-US">VB.NET</span><span style="font-family: 宋体;">，但是，由于信息部门的人事流动率低，因此，不论是</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">或</span><span lang="EN-US">VB.NET</span><span style="font-family: 宋体;">的维</span> <span style="font-family: 宋体;">护都不成问题，事实上，透过</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">所开发的程序，近来的运作都相当稳定，甚至很久都没有什么问题了，徐鸿志表示，</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">的应用程序，如果会发生问</span> <span style="font-family: 宋体;">题，应该也是因为硬设备世代交替造成的问题。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">除此之外，甫于不久前决定升级到</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">的一家金控银行，虽然决定从</span><span lang="EN-US">2006</span><span style="font-family: 宋体;">年开始，所有新的项目开发都必须以</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">作为开发平台，但是对于旧</span> <span style="font-family: 宋体;">的系统，仍将透过</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">进行维护与功能更新，目前该金控银行的升级作业已经正式展开，而过去</span><span lang="EN-US">7</span><span style="font-family: 宋体;">、</span><span lang="EN-US">8</span><span style="font-family: 宋体;">年陆续开发出来的</span><span lang="EN-US">100</span><span style="font-family: 宋体;">多个系统，预计至少要用</span><span lang="EN-US">5</span><span style="font-family: 宋体;">年</span> <span style="font-family: 宋体;">的时间才能完成转移。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">为了谨慎评估开发平台的升级，该金控银行持续关注了</span><span lang="EN-US">2</span><span style="font-family: 宋体;">年的时间，目前因应升级到</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">的需求，又投入</span><span lang="EN-US">100</span><span style="font-family: 宋体;">万元的教育训练费用，事实上，这家金</span> <span style="font-family: 宋体;">控银行之所以决定升级，除了微软停止</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">支持的隐忧，以及顾及未来的人才取得方便性以外，既有程序的生命延续更是关键，因此，决定进一步升级到</span><span lang="EN-US">. NET</span><span style="font-family: 宋体;">平台。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">这家金控银行自行开发的程序之中，约有</span><span lang="EN-US">80</span><span style="font-family: 宋体;">％都是采用微软的开发工具，目前除了拥有不少的</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">程序以外，甚至还有</span><span lang="EN-US">VB3.0</span><span style="font-family: 宋体;">所开发的程序，</span> <span style="font-family: 宋体;">事实上，透过</span><span lang="EN-US">VB3.0</span><span style="font-family: 宋体;">开发的中央登录公债系统，虽然是</span><span lang="EN-US">10</span><span style="font-family: 宋体;">年前的开发项目，但是央行没有大幅变动游戏规则的情况下，也持续运作的很好。</span>
<span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">不过，随着</span><span lang="EN-US">VB3.0</span><span style="font-family: 宋体;">的程序开发人员越来越少，维护的过程中确实是心惊胆跳，因为整个开发团队现在只有一个人会使用</span><span lang="EN-US">VB3.0</span><span style="font-family: 宋体;">，深怕哪一天他请假</span> <span style="font-family: 宋体;">就遇到问题，而这样的现状，正是这家金控银行业者想要升级到</span><span lang="EN-US">.NET</span><span style="font-family: 宋体;">平台的原因之一，因为目前不仅仅是</span><span lang="EN-US">VB3.0</span><span style="font-family: 宋体;">的程序开发人员逐渐减少，就连</span><span lang="EN-US">VB6.0 </span><span style="font-family: 宋体;">都可能在不久后遇到这样的问题。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">试想，一个刚毕业的人，进入社会一定是想要学更酷、更炫的程序开发语言，如果知道进去这家公司之后，只能使用</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">或是更老旧的开发工具，应该不容易找到好的人才。事实上，目前部分大专院校已经没有在教授</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">，在这样的情况下，相关人才的供给将会持续减少。</span> <span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">目前该金控银行的升级作业，已经分别从两个不同的项目开始进行，一个是中央登录公债系统的重新开发，另一则是全新的银行保险箱管理系统开发，根据目前投入的</span><span lang="EN-US">10</span><span style="font-family: 宋体;">个人力规模推估，大概需要</span><span lang="EN-US">8</span><span style="font-family: 宋体;">～</span><span lang="EN-US">9</span><span style="font-family: 宋体;">个月的时间才能完成。</span>
<span lang="EN-US"><br>
<br>
</span><span style="font-family: 宋体;">而华航的开发平台，目前是以</span><span lang="EN-US">VB.NET</span><span style="font-family: 宋体;">与</span><span lang="EN-US">Java</span><span style="font-family: 宋体;">为主，一些早期开发的非核心系统，例如与主机资料转接程序等，在没有必要升级的情况下，至今仍</span>
<span style="font-family: 宋体;">以</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">持续维护与更新，华航信息管理处副处长庐世铭表示，该公司在完成</span><span lang="EN-US">VB.NET</span><span style="font-family: 宋体;">的升级之后，新的开发项目就不再使用</span><span lang="EN-US">VB6.0</span><span style="font-family: 宋体;">。</span> <span lang="EN-US"><br>
<br>
<strong>Windows</strong></span><strong><span style="font-family: 宋体;">平台发展大事纪</span></strong>
<span lang="EN-US"><br>
1985</span><span style="font-family: 宋体;">年</span><span lang="EN-US"> Windows 1.0</span><span style="font-family: 宋体;">正式推出</span> <span lang="EN-US"><br>
1987</span><span style="font-family: 宋体;">年</span><span lang="EN-US"> 10</span><span style="font-family: 宋体;">月</span><span lang="EN-US">Windows 2.0</span><span style="font-family: 宋体;">上市</span> <span lang="EN-US"><br>
1990</span><span style="font-family: 宋体;">年</span><span lang="EN-US"> 5</span><span style="font-family: 宋体;">月</span><span lang="EN-US">Windows 3.0</span><span style="font-family: 宋体;">版出现，并且逐渐占据个人计算机系统</span> <span lang="EN-US"><br>
1991</span><span style="font-family: 宋体;">年</span> <strong><span style="font-family: 宋体;">开发工具</span><span lang="EN-US">VBDOS</span></strong><strong><span style="font-family: 宋体;">＼</span><span lang="EN-US">VB1.0</span></strong><strong><span style="font-family: 宋体;">版现身</span></strong> <span lang="EN-US"><br>
1992</span><span style="font-family: 宋体;">年</span> <span style="font-family: 宋体;">随着</span><span lang="EN-US">Windows 3.1</span><span style="font-family: 宋体;">版发布，</span><span lang="EN-US">Windows</span><span style="font-family: 宋体;">系统开始慢慢流行</span> <span lang="EN-US"><br>
<strong>VB</strong></span><strong><span style="font-family: 宋体;">进展到</span><span lang="EN-US">2.0</span></strong><strong><span style="font-family: 宋体;">版</span></strong> <span lang="EN-US"><br>
1993</span><span style="font-family: 宋体;">年</span><span lang="EN-US"> 11</span><span style="font-family: 宋体;">月</span><span lang="EN-US">Windows 3.11</span><span style="font-family: 宋体;">发布，革命性地加入了网络功能与随插即</span> <span lang="EN-US"><br>
</span><span style="font-family: 宋体;">用技术</span> <span lang="EN-US"><br>
<strong>VB</strong></span><strong><span style="font-family: 宋体;">已经演进到</span><span lang="EN-US">3.0</span></strong><strong><span style="font-family: 宋体;">版</span></strong> <span lang="EN-US"><br>
1994</span><span style="font-family: 宋体;">年</span><span lang="EN-US"> Windows</span><span style="font-family: 宋体;">第一次有了中文版本</span><span lang="EN-US">--Windows 3.2</span><span style="font-family: 宋体;">版</span> <span lang="EN-US"><br>
1995</span><span style="font-family: 宋体;">年</span> <strong><span style="font-family: 宋体;">进入</span><span lang="EN-US">32</span></strong><strong><span style="font-family: 宋体;">位世代，</span><span lang="EN-US">DOS</span></strong><strong><span style="font-family: 宋体;">走下舞台，</span><span lang="EN-US">VB4.0</span></strong><strong><span style="font-family: 宋体;">推出</span><span lang="EN-US">16</span></strong><strong><span style="font-family: 宋体;">＼　　　　　</span><span lang="EN-US">32bit</span></strong><strong><span style="font-family: 宋体;">版本</span></strong> <span lang="EN-US"><br>
Windows</span><span style="font-family: 宋体;">操作系统上开始出现了一个「开始」的按钮，并且</span> <span lang="EN-US"><br>
</span><span style="font-family: 宋体;">持续沿用到后续推出的每个版本中。</span> <span lang="EN-US"><br>
1997</span><span style="font-family: 宋体;">年</span> <strong><span lang="EN-US">VB5.0</span></strong><strong><span style="font-family: 宋体;">版上市</span></strong> <span lang="EN-US"><br>
1998</span><span style="font-family: 宋体;">年</span> <strong><span lang="EN-US">VB6.0</span></strong><strong><span style="font-family: 宋体;">版发布之后，至今仍有许多使用者</span></strong> <span lang="EN-US"><br>
Windows 98</span><span style="font-family: 宋体;">操作系统正式推出</span> <span lang="EN-US"><br>
2000</span><span style="font-family: 宋体;">年</span><span lang="EN-US"> Windows Me</span><span style="font-family: 宋体;">集结了</span><span lang="EN-US">IE5.5</span><span style="font-family: 宋体;">以及</span><span lang="EN-US">Windows Media Player 7 <br>
2002</span><span style="font-family: 宋体;">年</span> <strong><span lang="EN-US">VB</span></strong><strong><span style="font-family: 宋体;">跨入</span><span lang="EN-US">.NET</span></strong><strong><span style="font-family: 宋体;">世代，随着</span><span lang="EN-US">VB.NET 2002</span></strong><strong><span style="font-family: 宋体;">与</span><span lang="EN-US">.NET </span></strong><strong><span style="font-family: 宋体;">　　　　　　　</span><span lang="EN-US">Framework 1.0 </span></strong><strong><span style="font-family: 宋体;">的推出，</span><span lang="EN-US">VB</span></strong><strong><span style="font-family: 宋体;">开始产生质的变化。</span></strong> <span lang="EN-US"><br>
2003</span><span style="font-family: 宋体;">年</span> <strong><span lang="EN-US">VB.NET
2003</span></strong><strong><span style="font-family: 宋体;">推出，</span><span lang="EN-US">.NET Framework</span></strong><strong><span style="font-family: 宋体;">进入</span><span lang="EN-US">1.1</span></strong><strong><span style="font-family: 宋体;">版。</span></strong> <span lang="EN-US"><br>
2005</span><span style="font-family: 宋体;">年</span> <strong><span lang="EN-US">VB.NET
2005</span></strong><strong><span style="font-family: 宋体;">上市，采用了</span><span lang="EN-US">.NET Framework 2.0</span></strong><strong><span style="font-family: 宋体;">开发框架。</span></strong>
<span lang="EN-US"><br>
</span><span style="font-family: 宋体;">资料来源：</span><span lang="EN-US">iThome</span><span style="font-family: 宋体;">计算机报整理/</span>文/杨惠芬 (记者) 2006-03-10  </p><img src ="http://www.cnblogs.com/deepcast/aggbug/440005.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/43623/" target="_blank">[新闻]Mozilla公布去年收入报告</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>使用VS2005的WEB部署工程</title><link>http://www.cnblogs.com/deepcast/archive/2006/01/31/324556.html</link><dc:creator>深瞳</dc:creator><author>深瞳</author><pubDate>Tue, 31 Jan 2006 13:39:00 GMT</pubDate><guid>http://www.cnblogs.com/deepcast/archive/2006/01/31/324556.html</guid><wfw:comment>http://www.cnblogs.com/deepcast/comments/324556.html</wfw:comment><comments>http://www.cnblogs.com/deepcast/archive/2006/01/31/324556.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/deepcast/comments/commentRss/324556.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/deepcast/services/trackbacks/324556.html</trackback:ping><description><![CDATA[

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<link rel="Edit-Time-Data" href="/images/cnblogs_com/deepcast/editdata.mso"><title>MSDN Authoring Template</title>



<h1><span lang="EN-US">Using Web Deployment Projects with Visual Studio 2005</span></h1>
<h2><br><span lang="EN-US"></span></h2><h2><br></h2><h2><span lang="EN-US">Abstract</span></h2>
<p><span lang="EN-US">Download URL:</span></p><p><span lang="EN-US">http://download.microsoft.com/download/c/c/b/ccb4877f-55f7-4478-8f16-e41886607a0e/WebDeploymentSetup.msi</span></p><p><br><span lang="EN-US"></span></p><p><span lang="EN-US"></span><span lang="EN-US">Visual Studio 2005 provides deployment support though its 
  Copy Web Site and Publish Web Site features. While these are ideal for many 
  scenarios, there are other, more advanced scenarios where developers need the 
  following capabilities:<br></span></p>
<p class="BulletedList1"><span lang="EN-US">More control over assembly naming and output.</span></p>
<p class="BulletedList1"><span lang="EN-US">Custom pre-processing and post-processing for the build.</span></p>
<p class="BulletedList1"><span lang="EN-US">The ability to exclude, add, and transform files and 
  directories during builds.</span></p>
<p class="BulletedList1"><span lang="EN-US">The ability to modify the Web.config file to change 
  database connection strings, application settings, or the URLs for Web references, 
  depending on the build configuration. (For example, it might be necessary to 
  use different values for development, test, staging, and release settings). 
  </span></p>
<p class="Text"><span lang="EN-US">This white paper describes a solution to these 
  advanced scenarios and introduces a new feature called Web Deployment Projects 
  for Visual Studio 2005. </span></p>
<h2><span lang="EN-US">Web Deployment Projects</span></h2>
<p class="Text"><span lang="EN-US">Web Deployment Projects is an add-in package to 
  Visual Studio 2005. It does not change the behavior of any feature in Visual 
  Studio 2005; it simply adds additional functionality specific to Web site deployment.</span></p>
<p class="Text"><span lang="EN-US">A Web Deployment project is an MSBuild project 
  file for a Web site. It fully integrates into the Visual Studio 2005 build configuration 
  manager and supports configuration options for compilation and deployment, such 
  as Debug and Release. A Web Deployment project is extensible, enabling you to 
  create pre-build and post-build actions.</span></p>
<p class="Text"><span lang="EN-US">Web Deployment projects do not change the way Visual 
  Studio 2005 Web site projects build. Instead, they take an existing Web site 
  project as input and generate a precompiled Web site as output. A Web Deployment 
  project does not change the files in the source Web site project in any way.</span></p>
<h3><span lang="EN-US">Feature Summary</span></h3>
<p class="Text"><span lang="EN-US">A Web Deployment project provides the following 
  features for building and deploying ASP.NET 2.0 Web sites:</span></p>
<p class="BulletedList1"><span lang="EN-US">ASP.NET 2.0 precompilation as part of the build process.</span></p>
<p class="BulletedList1"><span lang="EN-US">More flexible options for generating compiled assemblies 
  from a Web project, including these alternatives:</span></p>
<p class="BulletedList2"><span lang="EN-US">A single assembly for the entire Web site.</span></p>
<p class="BulletedList2"><span lang="EN-US">One assembly per content folder.</span></p>
<p class="BulletedList2"><span lang="EN-US">A single assembly for all UI components.</span></p>
<p class="BulletedList2"><span lang="EN-US">An assembly for each compiled file in the Web site.</span></p>
<p class="BulletedList1"><span lang="EN-US">Assembly signing options.</span></p>
<p class="BulletedList1"><span lang="EN-US">The ability to define custom pre-build and post-build 
  actions.</span></p>
<p class="BulletedList1"><span lang="EN-US">The ability to exclude folders from the build.</span></p>
<p class="BulletedList1"><span lang="EN-US">The ability to modify settings in the Web.config file, 
  such as the <span class="LanguageKeyword">&lt;connectionString&gt;</span> element, 
  based on the Visual Studio build configuration.</span></p>
<p class="BulletedList1"><span lang="EN-US">Support for creating .msi files with setup projects.</span></p>
<p class="Text"><span lang="EN-US">The extensibility of Web Deployment projects enables 
  you to tailor the build and deploy process to suit your needs. This is done 
  without sacrificing the optimized workflow improvements achieved with Visual 
  Studio 2005 Web site projects.</span></p>
<h2><span lang="EN-US">Installing Web Deployment Projects</span></h2>
<p class="Text"><span lang="EN-US">Installing Web Deployment projects installs both 
  a Visual Studio 2005 add-in package and the new ASP.NET merge utility (aspnet_merge.exe).</span></p>
<p class="Text"><span lang="EN-US">By default, the installation process installs files 
  into the locations listed in the following table.</span></p>
<table border="1" cellpadding="0" cellspacing="0">
  <tbody><tr> 
    <td class="Normal" valign="top" width="323"> 
      <p class="Text"><span lang="EN-US">Location</span></p>
    </td>
    <td class="Normal" valign="top" width="292"> 
      <p class="Text"><span lang="EN-US">Files</span></p>
    </td>
  </tr>
  <tr> 
    <td class="Normal" valign="top" width="323"> 
      <p class="Text"><span lang="EN-US">C:\Program Files\MSBuild\Microsoft\WebDeployment\v8.0</span></p>
    </td>
    <td class="Normal" valign="top" width="292"> 
      <p class="Text"><span lang="EN-US">aspnet_merge.exe</span></p>
      <p class="Text"><span lang="EN-US">Microsoft.WebDeployment.targets</span></p>
      <p class="Text"><span lang="EN-US">Microsoft.WebDeployment.Tasks.dll</span></p>
    </td>
  </tr>
  <tr> 
    <td class="Normal" valign="top" width="323"> 
      <p class="Text"><span lang="EN-US">C:\Program Files\Microsoft Visual Studio 
        8\Common7\Packages</span></p>
    </td>
    <td class="Normal" valign="top" width="292"> 
      <p class="Text"><span lang="EN-US">MsWebDeployProj.dll</span></p>
      <p class="Text"><span lang="EN-US">WebDeploy.wdproj</span></p>
    </td>
  </tr>
  <tr> 
    <td class="Normal" valign="top" width="323"> 
      <p class="Text"><span lang="EN-US">C:\Program Files\Microsoft Visual Studio 
        8\Common7\Packages\1033</span></p>
    </td>
    <td class="Normal" valign="top" width="292"> 
      <p class="Text"><span lang="EN-US">MsWebDeployProjUi.dll</span></p>
    </td>
  </tr>
</tbody></table>
<p class="Text"><span lang="EN-US">You can install Web Deployment projects on a computer 
  that does not have Visual Studio 2005 installed. This is useful if you want 
  to use MSBuild features on a dedicated build computer. MSBuild is part of the 
  Microsoft .NET Framework version 2.0 and does not require installation of Visual 
  Studio 2005.</span></p>
<h2><span lang="EN-US">New Menu Commands</span></h2>
<p class="Text"><span lang="EN-US">Installing Web Deployment Projects adds the <span class="UIChar">Add Web Deployment Project</span> command to the <span class="UIChar">Build</span> menu and to the shortcut menu for the selected Web project 
  in Solution Explorer. The new command is supported only for local IIS Web sites 
  and for file system Web sites. Web Deployment Projects do not support remote 
  FrontPage or FTP Web sites.</span></p>
<p class="AlertText"><span class="LabelEmbedded"><span lang="EN-US">Note</span></span><span lang="EN-US">&nbsp;&nbsp;&nbsp;The <span class="UIChar">Add Web Deployment Project 
  </span>command is the only way to add a Web Deployment project to the solution. 
  This new project type is not available in the <span class="UIChar">New Project</span> 
  dialog box.</span></p>
<p class="Text"><span lang="EN-US">When you create a Web Deployment project, the new 
  Web Deployment project is associated with the Web site you created it for. Generally 
  there is a one-to-one relationship between the Web site and the Web Deployment 
  project. Each Web site in a solution can have its own Web Deployment project. 
  You can also optionally create multiple Web Deployment projects for the same 
  site.</span></p>
<p class="Text"><span lang="EN-US">Advanced scenarios merging multiple Web sites into 
  a single Web site can be achieved through custom build actions as described 
  in the section <a href="#_Customizing_Web_Deployment_Projects">Customizing Web 
  Deployment Projects</a> later in this paper.</span></p>
<h2><span lang="EN-US">Adding a Web Deployment Project</span></h2>
<p class="Text"><span lang="EN-US">To add a Web Deployment project to a Web site, 
  follow these steps.</span></p>
<p class="NumberedList1"> <span lang="EN-US">1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span> 
  <span lang="EN-US">In Solution Explorer, select the name of the Web site to work with.</span></p>
<p class="NumberedList1"> <span lang="EN-US">2.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span> 
  <span lang="EN-US">In the <span class="LanguageKeyword">Build</span> menu, choose <span class="UIChar">Add Web Deployment Project</span>.</span></p>
<p class="TextinList1"><span lang="EN-US">The <span class="UIChar">Add Web Deployment 
  Project</span> dialog box is displayed:</span></p>
<p class="FigureinList1"><span lang="EN-US"> <img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/image001.jpg" v:shapes="_x0000_i1026" border="0" height="190" width="450"> 
  </span></p>
<p class="NumberedList1"> <span lang="EN-US">3.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span> 
  <span lang="EN-US">Specify a name and location for the project. </span></p>
<p class="TextinList1"><span lang="EN-US">By default, the project name is the same 
  as the Web site with </span><span class="CodeEmbedded"><span style="font-family: &quot;Courier New&quot;;" lang="EN-US">_deploy</span></span><span lang="EN-US"> appended to the name. The default location is in the same folder as 
  the solution. </span></p>
<p class="TextinList1"><span lang="EN-US">In the example shown here, the Web site 
  path is C:\MyProjects\MyWeb. The project file will be named MyWeb_deploy.webdeployproj, 
  and the project folder path will be C:\MyProjects\MyWeb_deploy\.</span></p>
<p class="NumberedList1"> <span lang="EN-US">4.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span> 
  <span lang="EN-US">Click <span class="UIChar">OK</span>.</span></p>
<p class="TextinList1"><span lang="EN-US">A new project is added to the solution and 
  automatically associated with the Web site. The new Web Deployment project is 
  now part of the build process.</span></p>
<p class="AlertTextinList1"><span class="LabelEmbedded"><span lang="EN-US">Tip</span></span><span lang="EN-US">&nbsp;&nbsp;&nbsp;When creating a new Web site project that you will 
  add other projects to (such as a class library project or a Web Deployment project), 
  start by creating an empty solution in the location of your choice. Then add 
  the new Web site to that solution. This ensures that Visual Studio puts all 
  of the project files in the same set of directories and subdirectories.</span></p>
<p class="TextinList1"><span lang="EN-US">The new Web Deployment project does not 
  contain any files or child nodes in the solution hierarchy. Instead, it is an 
  MSBuild project file that enables you to customize the build rules for the associated 
  Web site. </span></p>
<p class="TextinList1"><span lang="EN-US">You can view properties for the current 
  Web Deployment project in the <span class="UIChar">Properties</span> window. (These 
  properties are distinct from the settings for build configurations, which you 
  edit using the <span class="UIChar">Property Pages</span> dialog box, as discussed 
  in the next section.)</span></p>
<p class="FigureinList1"><span lang="EN-US"> <img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/image002.jpg" v:shapes="_x0000_i1029" border="0" height="244" width="332"> 
  </span></p>
<h2><span lang="EN-US">Web Deployment Project Property Pages</span></h2>
<p class="Text"><span lang="EN-US">You can create and edit individual configurations 
  for the current Web Deployment project using the <span class="UIChar">Property Pages</span> dialog box. (This dialog box is available by 
  right-clicking the project in Solution Explorer and then selecting <span class="UIChar">Property Pages</span>). The <span class="UIChar">Property Pages</span> 
  dialog box for a Web Deployment project displays four property pages:</span></p>
<p class="BulletedList1"><span lang="EN-US">Compilation</span></p>
<p class="BulletedList1"><span lang="EN-US">Output Assemblies</span></p>
<p class="BulletedList1"><span lang="EN-US">Signing</span></p>
<p class="BulletedList1"><span lang="EN-US">Deployment</span></p>
<p class="Text"><span lang="EN-US">The properties on each of these property pages 
  can have unique values for each build configuration. Visual Studio 2005 provides 
  two default configurations: Debug and Release. You can use these predefined 
  configurations or define new configurations (such as Staging or Production), 
  depending on your needs. All the settings you make in the <span class="UIChar">Property 
  Pages</span> dialog box apply to the selected configuration. </span></p>
<h3><span lang="EN-US">Compilation Page</span></h3>
<p class="Text"><span lang="EN-US">The <span class="UIChar">Compilation</span> page 
  of the Web Deployment project抯 property pages dialog box looks like the following:</span></p>
<p class="Figure"><span lang="EN-US"> <img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/image004.jpg" v:shapes="_x0000_i1030" border="0" height="354" width="600"> 
  </span></p>
<p class="Text"><span lang="EN-US">The following table describes the properties you 
  can set in the <span class="UIChar">Compilation</span> page.</span></p>
<table border="1" cellpadding="0" cellspacing="0">
  <tbody><tr> 
    <td class="Normal" bgcolor="navy" valign="top" width="288"> 
      <p class="Text"><span lang="EN-US">Setting</span></p>
    </td>
    <td class="Normal" bgcolor="navy" valign="top" width="290"> 
      <p class="Text"><span lang="EN-US">Description</span></p>
    </td>
  </tr>
  <tr> 
    <td class="Normal" valign="top" width="288"> 
      <p class="UI"><span lang="EN-US">Output folder</span></p>
    </td>
    <td class="Normal" valign="top" width="290"> 
      <p class="Text"><span lang="EN-US">Specifies the folder to contain the precompiled 
        image of the Web site. The default is to create a subfolder with the same 
        name as the configuration in the folder where the Web Deployment project 
        file is stored.</span></p>
    </td>
  </tr>
  <tr> 
    <td class="Normal" valign="top" width="288"> 
      <p class="UI"><span lang="EN-US">Generate debug information</span></p>
    </td>
    <td class="Normal" valign="top" width="290"> 
      <p class="Text"><span lang="EN-US">Generates .pdb files when compiling. This 
        setting will also update the value of the <b>&lt;compilation&nbsp;debug="true"/&gt;</b></span><span style="font-family: &quot;Courier New&quot;; color: blue;" lang="EN-US"> </span><span lang="EN-US">element in the configuration file of the precompiled Web site.</span></p>
    </td>
  </tr>
  <tr> 
    <td class="Normal" valign="top" width="288"> 
      <p class="UI"><span lang="EN-US">Use IIS Metabase path for source input</span></p>
    </td>
    <td class="Normal" valign="top" width="290"> 
      <p class="Text"><span lang="EN-US">Specifies the full IIS metabase path of the 
        source Web site application. This setting corresponds to the <span class="LanguageKeyword">杕</span> option of the aspnet_compiler.exe command. </span></p>
      <p class="Text"><span lang="EN-US">For example, a metabase path might be /LM/W3SVC/1/ROOT/<i>MyWeb</i>/, 
        where <i>MyWeb</i> is the virtual directory.</span></p>
      <p class="Text"><span lang="EN-US">This setting is useful if your Web site contains 
        one or more sub-Web sites. During compilation, the compiler processes 
        all the files in a directory tree. If there are sub-Web sites, this will 
        result in build errors. To avoid these errors, you can specify the IIS 
        metabase path of the Web site you are compiling, which causes the ASP.NET 
        compiler to skip any sub-Web sites defined in the IIS metabase.</span></p>
      <p class="Text"><span lang="EN-US">To compile the sub-Web sites, you must add 
        a separate Web Deployment project for each of the sub-Web sites.</span></p>
    </td>
  </tr>
  <tr> 
    <td class="Normal" valign="top" width="288"> 
      <p class="UI"><span lang="EN-US">Allow this precompiled site to be updatable</span></p>
    </td>
    <td class="Normal" valign="top" width="290"> 
      <p class="Text"><span lang="EN-US">Enables ASP.NET Web pages and user controls 
        (.aspx and .ascx files) to be updated after compilation; only the code-behind 
        files are compiled. If this option is not checked, the HTML markup for 
        pages and controls is removed and compiled into the assembly output.</span></p>
    </td>
  </tr>
</tbody></table>
<h3><span lang="EN-US">Output Assemblies Page</span></h3>
<p class="Text"><span lang="EN-US">The <span class="UIChar">Output Assemblies</span> 
  page of the Web Deployment project抯 property pages dialog box looks like the 
  following:</span></p>
<p class="Figure"><span lang="EN-US"> <img src="http://www.cnblogs.com/images/cnblogs_com/deepcast/image006.jpg" v:shapes="_x0000_i1025" border="0" height="354" width="600"> 
  </span></p>
<p class="Text"><span lang="EN-US">The following table describes the properties you 
  can set in the <span class="UIChar">Output Assemblies</span> page.</span></p>
<table border="1" cellpadding="0" cellspacing="0">
  <tbody><tr> 
    <td class="Normal" bgcolor="navy" valign="top" width="248"> 
      <p class="Text"><span lang="EN-US">Setting</span></p>
    </td>
    <td class="Normal" bgcolor="navy" valign="top" width="330"> 
      <p class="Text"><span lang="EN-US">Description</span></p>
    </td>
  </tr>
  <tr> 
    <td class="Normal" valign="top" width="248"> 
      <p class="UI"><span lang="EN-US">Merge all outputs to a single assembly</span></p>
    </td>
    <td class="Normal" valign="top" width="330"> 
      <p class="Text"><span lang="EN-US">Merges all the output assemblies from the 
        compiler into a single assembly. This setting is equivalent to the <span class="LanguageKeyword">-o&nbsp;<i>assemblyname</i></span> option of the aspnet_merge.exe 
        command. This results in the same behavior that Visual Studio .NET 2003 
        supports , where one assembly is generated for each Web project.</span></p>
    </td>
  </tr>
  <tr> 
    <td class="Normal" valign="top" width="248"> 
      <p class="UI"><span lang="EN-US">Treat as library component</span></p>
    </td>
    <td class="Normal" valign="top" width="330"> 
      <p class="Text"><span lang="EN-US">Removes the App_code.compiled file. This 
        enables the project's App_Code.dll assembly to be added to the Bin folder 
        of another Web site without conflicting with the App_Code.dll assembly 
        in the other Web site. This setting is equivalent to the <span class="LanguageKeyword">-r</span> 
        option of the aspnet_merge.exe command.</span></p>
      <p class="Text"><span lang="EN-US">This option is useful for building a library 
        of .ascx controls.</span></p>
    </td>
  </tr>
  <tr> 
    <td class="Normal" valign="top" width="248"> 
      <p class="UI"><span lang="EN-US">Merge each folder output to its own assembly</span></p>
    </td>
    <td class="Normal" valign="top" width="330"> 
      <p class="Text"><span lang="EN-US">Creates a separate output assembly for each 
        folder. This e