﻿<?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>语源科技BlogJava-死亡骑士</title><link>http://www.blogjava.net/deathknight/</link><description>
         ---&gt;时间的守护者</description><language>zh-cn</language><lastBuildDate>Thu, 30 Apr 2026 09:58:42 GMT</lastBuildDate><pubDate>Thu, 30 Apr 2026 09:58:42 GMT</pubDate><ttl>60</ttl><item><title>How to use eclipse</title><link>http://www.blogjava.net/deathknight/archive/2008/07/11/214192.html</link><dc:creator>死亡骑士</dc:creator><author>死亡骑士</author><pubDate>Fri, 11 Jul 2008 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/deathknight/archive/2008/07/11/214192.html</guid><wfw:comment>http://www.blogjava.net/deathknight/comments/214192.html</wfw:comment><comments>http://www.blogjava.net/deathknight/archive/2008/07/11/214192.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/deathknight/comments/commentRss/214192.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/deathknight/services/trackbacks/214192.html</trackback:ping><description><![CDATA[<p><br />
下载、安装Eclipse&nbsp; </p>
<p>进入Eclipse项目的主页http://www.eclipse.org，点击Downloads，进入下载页。</p>
<p>Eclipse最新的版本是3.4版。</p>
<p>点击3.4进入其下载页，这个页面有很多下载连接，包括Eclipse SDK在很多平台上的版本；</p>
<p>这里我们只需要下载eclipse-SDK-3.4-win32.zip将这个文件解压缩到磁盘的目录，如D:\eclipse。 </p>
<p>在运行Eclipse之前首先应该安装好JDK，设置好环境变量JAVA_HOME、CLASSPATH和PATH。</p>
<p>&nbsp; <br />
==========================================================================================================</p>
<p>设置JRE:</p>
<p>1.选择Window-&gt;Preferences,然后选择Java-&gt;Installed JREs,然后选择jre1.5.0_07,单击Edit按钮.</p>
<p>2.单击Browse按钮,选择JDK的安装路径,然后单击OK确定.这样Eclipse下的JDK就已经设置完成了.<br />
&nbsp;<br />
==========================================================================================================</p>
<p>第一个Eclipse工程：下面我们编写一个简单的HellWorld程序，步骤如下：</p>
<p>1．选择File-&gt;New-&gt;Project<br />
&nbsp;<br />
2．项目列表选Java Project</p>
<p>3．点击&#8220;下一步&#8221;</p>
<p>4．输入项目名称，例如：Java；选择相应的JRE(默认即可); 然后选择字解码文件和源文件分离<br />
&nbsp;<br />
5．点击Finish</p>
<p>6. 鼠标移动到src目录下单击鼠标右键,New-&gt;Package,新建一个包,然后输入包名<br />
&nbsp;<br />
7．在工具条里点击&#8220;创建Java类&#8221;的按钮（带有一个C标记）<br />
&nbsp;<br />
8．在名称域输入HelloWorld<br />
&nbsp;<br />
9．点击public static void main(String[] args) 的复选框，让Eclipse创建main方法<br />
&nbsp;<br />
10．点击Finish</p>
<p>11．一个Java编辑窗口将打开，在main方法中输入System.out.println(&#8220;Hello World&#8221;)行</p>
<p>12．使用Ctrl-s保存，这将自动编译 HelloWorld.java<br />
&nbsp; <br />
13．点击工具条里的Run As按钮；然后选择Java Application项运行程序</p>
<p>14．这时候，将会打开一个控制台窗口，一句&#8220;Hello World&#8221;将会显示在里面。</p>
<p>==========================================================================================================</p>
<p>eclipse常见问题：</p>
<p>1.如何将建立eclipse的快捷方式?</p>
<p>答:在桌面单击右键选择新建启动器,填上名字和命令的路径(即/opt/eclipse/eclipse).</p>
<p><br />
2.如何显示行号?</p>
<p>答:选择Window-&gt;Preferences,然后选择General-&gt;Editors-&gt;Text Editors,把show line numbers选项勾上.<br />
&nbsp;</p>
<p>3.如何改变java源文件字体大小?</p>
<p>答:选择Window-&gt;Preferences,然后选择General-&gt;Appearance-&gt;Colors and Fonts-&gt;Java-&gt;Java Editor Text Font</p>
<p>&nbsp;&nbsp; 然后选择Change按钮就可以改变字体大小了.<br />
&nbsp;</p>
<p>4.如何去掉自动生成注释?</p>
<p>答: 选择Window-&gt;Preferences,然后选择Java-&gt;Code &#115;tyle-&gt;Code Templates,选择Comments和Code选项中的内<br />
<br />
容单击Edit按钮,把默认的注释删掉就可以了.<br />
&nbsp;</p>
<p>5.为何刚刚拷贝过来的文件不能立即显示?</p>
<p>答:需要在你刚刚做过更新的目录上点击右键,然后选择Refresh,刷新该目录即可显示.<br />
&nbsp;</p>
<p>6.Eclipse常用快捷键:<br />
Ctrl+Enter:跳到下一行行首<br />
Alt+Shift+X+J:运行当前程序<br />
Ctrl+F11:运行上次编译过的程序<br />
Shift+Ctrl+F:格式化代码<br />
Shift+Ctrl+X:将所选字符转为大写 <br />
Shift+Ctrl+Y:将所选字符转为小写 <br />
Ctrl+1:迅速定位错误处理<br />
Ctrl+M:快速对当前视图最大化 <br />
Alt+Shift+S:快速显示Source选项<br />
Alt+/:代码注释<br />
Ctrl+/:代码注释/取消注释 <br />
Ctrl+D:删除光标所在行&nbsp; <br />
Ctrl+鼠标停留:可以显示类和方法的源码 <br />
Ctrl+Shift+S:保存全部 </p>
<img src ="http://www.blogjava.net/deathknight/aggbug/214192.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/deathknight/" target="_blank">死亡骑士</a> 2008-07-11 10:40 <a href="http://www.blogjava.net/deathknight/archive/2008/07/11/214192.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RUP</title><link>http://www.blogjava.net/deathknight/archive/2008/07/10/214021.html</link><dc:creator>死亡骑士</dc:creator><author>死亡骑士</author><pubDate>Thu, 10 Jul 2008 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/deathknight/archive/2008/07/10/214021.html</guid><wfw:comment>http://www.blogjava.net/deathknight/comments/214021.html</wfw:comment><comments>http://www.blogjava.net/deathknight/archive/2008/07/10/214021.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/deathknight/comments/commentRss/214021.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/deathknight/services/trackbacks/214021.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RUP（Rational Unified Process，统一软件开发过程，统一软件过程)是一个面向对象且基于网络的程序开发方法论。根据Rational(Rational Rose和统一建模语言的开发者)的说法，好像一个在线的指导者，它可以为所有方面和层次的程序开发提供指导方针，模版以及事例支持。 RUP和类似的产品--例如面向对象的软件过程（OOSP），以及OPEN Process都是理解性的软件工程工具--把开发中面向过程的方面（例如定义的阶段，技术和实践）和其他开发的组件（例如文档，模型，手册以及代码等等）整合在一个统一的框架内。</p>
<p>一、六大经验</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、迭代式开发。在软件开发的早期阶段就想完全、准确的捕获用户的需求几乎是不可能的。实际上，我们经常遇到的问题是需求在整个软件开发工程中经常会改变。迭代式开发允许在每次迭代过程中需求可能有变化，通过不断细化来加深对问题的理解。迭代式开发不仅可以降低项目的风险，而且每个迭代过程都可以执行版本结束，可以鼓舞开发人员。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、管理需求。确定系统的需求是一个连续的过程，开发人员在开发系统之前不可能完全详细的说明一个系统的真正需求。RUP描述了如何提取、组织系统的功能和约束条件并将其文档化，用例和脚本的使用以被证明是捕获功能性需求的有效方法。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、基于组件的体系结构。组件使重用成为可能，系统可以由组件组成。基于独立的、可替换的、模块化组件的体系结构有助于管理复杂性，提高重用率。RUP描述了如何设计一个有弹性的、能适应变化的、易于理解的、有助于重用的软件体系结构。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、可视化建模。RUP往往和UML联系在一起，对软件系统建立可视化模型帮助人们提供管理软件复杂性的能力。RUP告诉我们如何可视化的对软件系统建模，获取有关体系结构于组件的结构和行为信息。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、验证软件质量。在RUP中软件质量评估不再是事后进行或单独小组进行的分离活动，而是内建于过程中的所有活动，这样可以及早发现软件中的缺陷。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6、控制软件变更。迭代式开发中如果没有严格的控制和协调，整个软件开发过程很快就陷入混乱之中，RUP描述了如何控制、跟踪、监控、修改以确保成功的迭代开发。RUP通过软件开发过程中的制品，隔离来自其他工作空间的变更，以此为每个开发人员建立安全的工作空间。</p>
<p><br />
二、统一软件开发过程RUP的二维开发模型 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RUP软件开发生命周期是一个二维的软件开发模型。横轴通过时间组织，是过程展开的生命周期特征，体现开发过程的动态结构，用来描述它的术语主要包括周期(Cycle)、阶段(Phase)、迭代(Iteration)和里程碑(Milestone)；纵轴以内容来组织为自然的逻辑活动，体现开发过程的静态结构，用来描述它的术语主要包括活动(Activity)、产物(Artifact)、工作者(Worker)和工作流(Workflow)。如图1： </p>
<p><br />
三、统一软件开发过程RUP核心概念</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RUP中定义了一些核心概念，如下图：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 角色：描述某个人或者一个小组的行为与职责。RUP预先定义了很多角色。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 活动：是一个有明确目的的独立工作单元。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 工件：是活动生成、创建或修改的一段信息。</p>
<p>四、统一软件开发过程RUP裁剪</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RUP是一个通用的过程模板，包含了很多开发指南、制品、开发过程所涉及到的角色说明，由于它非常庞大所以对具体的开发机构和项目，用RUP时还要做裁剪，也就是要对RUP进行配置。RUP就像一个元过程，通过对RUP进行裁剪可以得到很多不同的开发过程，这些软件开发过程可以看作RUP的具体实例。RUP裁剪可以分为以下几步：</p>
<p>1) 确定本项目需要哪些工作流。RUP的9个核心工作流并不总是需要的，可以取舍。</p>
<p>2) 确定每个工作流需要哪些制品。</p>
<p>3) 确定4个阶段之间如何演进。确定阶段间演进要以风险控制为原则，决定每个阶段要那些工作流，每个工作流执行到什么程度，制品有那些，每个制品完成到什么程度。</p>
<p>4) 确定每个阶段内的迭代计划。规划RUP的4个阶段中每次迭代开发的内容。</p>
<p>5) 规划工作流内部结构。工作流涉及角色、活动及制品，他的复杂程度与项目规模即角色多少有关。最后规划工作流的内部结构，通常用活动图的形式给出。</p>
<p>五、开发过程中的各个阶段和里程碑</p>
<p>　　RUP中的软件生命周期在时间上被分解为四个顺序的阶段，分别是：初始阶段(Inception)、细化阶段(Elaboration)、构造阶段(Construction)和交付阶段(Transition)。每个阶段结束于一个主要的里程碑(Major Milestones)；每个阶段本质上是两个里程碑之间的时间跨度。在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。如果评估结果令人满意的话，可以允许项目进入下一个阶段。 </p>
<p>1． 初始阶段</p>
<p>　　初始阶段的目标是为系统建立商业案例并确定项目的边界。为了达到该目的必须识别所有与系统交互的外部实体，在较高层次上定义交互的特性。本阶段具有非常重要的意义，在这个阶段中所关注的是整个项目进行中的业务和需求方面的主要风险。对于建立在原有系统基础上的开发项目来讲，初始阶段可能很短。 初始阶段结束时是第一个重要的里程碑：生命周期目标(Lifecycle Objective)里程碑。生命周期目标里程碑评价项目基本的生存能力。</p>
<p>2． 细化阶段 </p>
<p>　　细化阶段的目标是分析问题领域，建立健全的体系结构基础，编制项目计划，淘汰项目中最高风险的元素。为了达到该目的，必须在理解整个系统的基础上，对体系结构作出决策，包括其范围、主要功能和诸如性能等非功能需求。同时为项目建立支持环境，包括创建开发案例，创建模板、准则并准备工具。 细化阶段结束时第二个重要的里程碑：生命周期结构(Lifecycle Architecture)里程碑。生命周期结构里程碑为系统的结构建立了管理基准并使项目小组能够在构建阶段中进行衡量。此刻，要检验详细的系统目标和范围、结构的选择以及主要风险的解决方案。</p>
<p>3． 构造阶段 </p>
<p>　　在构建阶段，所有剩余的构件和应用程序功能被开发并集成为产品，所有的功能被详细测试。从某种意义上说，构建阶段是一个制造过程，其重点放在管理资源及控制运作以优化成本、进度和质量。 构建阶段结束时是第三个重要的里程碑：初始功能(Initial Operational)里程碑。初始功能里程碑决定了产品是否可以在测试环境中进行部署。此刻，要确定软件、环境、用户是否可以开始系统的运作。此时的产品版本也常被称为&#8220;beta&#8221;版。</p>
<p>4． 交付阶段 </p>
<p>　　交付阶段的重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代，包括为发布做准备的产品测试，基于用户反馈的少量的调整。在生命周期的这一点上，用户反馈应主要集中在产品调整，设置、安装和可用性问题，所有主要的结构问题应该已经在项目生命周期的早期阶段解决了。 在交付阶段的终点是第四个里程碑：产品发布(Product Release)里程碑。此时，要确定目标是否实现，是否应该开始另一个开发周期。在一些情况下这个里程碑可能与下一个周期的初始阶段的结束重合。</p>
<p>六、统一软件开发过程RUP的核心工作流(Core Workflows) </p>
<p>　　RUP中有9个核心工作流，分为6个核心过程工作流(Core Process Workflows)和3个核心支持工作流(Core Supporting Workflows)。尽管6个核心过程工作流可能使人想起传统瀑布模型中的几个阶段，但应注意迭代过程中的阶段是完全不同的，这些工作流在整个生命周期中一次又一次被访问。9个核心工作流在项目中轮流被使用，在每一次迭代中以不同的重点和强度重复。</p>
<p>1． 商业建模(Business Modeling) </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 商业建模工作流描述了如何为新的目标组织开发一个构想，并基于这个构想在商业用例模型和商业对象模型中定义组织的过程，角色和责任。 </p>
<p>2． 需求(Requirements)</p>
<p>　　需求工作流的目标是描述系统应该做什么，并使开发人员和用户就这一描述达成共识。为了达到该目标，要对需要的功能和约束进行提取、组织、文档化；最重要的是理解系统所解决问题的定义和范围。</p>
<p>3． 分析和设计(Analysis &amp; Design) </p>
<p>　　分析和设计工作流将需求转化成未来系统的设计，为系统开发一个健壮的结构并调整设计使其与实现环境相匹配，优化其性能。分析设计的结果是一个设计模型和一个可选的分析模型。设计模型是源代码的抽象，由设计类和一些描述组成。设计类被组织成具有良好接口的设计包(Package)和设计子系统(Subsystem)，而描述则体现了类的对象如何协同工作实现用例的功能。 设计活动以体系结构设计为中心，体系结构由若干结构视图来表达，结构视图是整个设计的抽象和简化，该视图中省略了一些细节，使重要的特点体现得更加清晰。体系结构不仅仅是良好设计模型的承载媒介，而且在系统的开发中能提高被创建模型的质量。 </p>
<p>4． 实现(Implementation)</p>
<p>　　实现工作流的目的包括以层次化的子系统形式定义代码的组织结构；以组件的形式(源文件、二进制文件、可执行文件)实现类和对象；将开发出的组件作为单元进行测试以及集成由单个开发者（或小组）所产生的结果，使其成为可执行的系统。 </p>
<p>5． 测试(Test) </p>
<p>测试工作流要验证对象间的交互作用，验证软件中所有组件的正确集成，检验所有的需求已被正确的实现, 识别并确　　认缺陷在软件部署之前被提出并处理。RUP提出了迭代的方法，意味着在整个项目中进行测试，从而尽可能早地发现缺陷，从根本上降低了修改缺陷的成本。测试类似于三维模型，分别从可靠性、功能性和系统性能来进行。</p>
<p>6． 部署(Deployment) </p>
<p>　　部署工作流的目的是成功的生成版本并将软件分发给最终用户。部署工作流描述了那些与确保软件产品对最终用户具有可用性相关的活动，包括：软件打包、生成软件本身以外的产品、安装软件、为用户提供帮助。在有些情况下，还可能包括计划和进行beta测试版、移植现有的软件和数据以及正式验收。</p>
<p>7． 配置和变更管理(Configuration &amp; Change Management) </p>
<p>　　配置和变更管理工作流描绘了如何在多个成员组成的项目中控制大量的产物。配置和变更管理工作流提供了准则来管理演化系统中的多个变体，跟踪软件创建过程中的版本。工作流描述了如何管理并行开发、分布式开发、如何自动化创建工程。同时也阐述了对产品修改原因、时间、人员保持审计记录。</p>
<p>8． 项目管理(Project Management) </p>
<p>　　软件项目管理平衡各种可能产生冲突的目标，管理风险，克服各种约束并成功交付使用户满意的产品。其目标包括：为项目的管理提供框架，为计划、人员配备、执行和监控项目提供实用的准则，为管理风险提供框架等。</p>
<p>9． 环境(Environment) </p>
<p>　　环境工作流的目的是向软件开发组织提供软件开发环境，包括过程和工具。环境工作流集中于配置项目过程中所需要的活动，同样也支持开发项目规范的活动，提供了逐步的指导手册并介绍了如何在组织中实现过程。</p>
<p>七、RUP的迭代开发模式 </p>
<p>　　RUP中的每个阶段可以进一步分解为迭代。一个迭代是一个完整的开发循环，产生一个可执行的产品版本，是最终产品的一个子集，它增量式地发展，从一个迭代过程到另一个迭代过程到成为最终的系统。 传统上的项目组织是顺序通过每个工作流，每个工作流只有一次，也就是我们熟悉的瀑布生命周期（见图2）。这样做的结果是到实现末期产品完成并开始测试，在分析、设计和实现阶段所遗留的隐藏问题会大量出现，项目可能要停止并开始一个漫长的错误修正周期。 </p>
<p>　　一种更灵活，风险更小的方法是多次通过不同的开发工作流，这样可以更好的理解需求，构造一个健壮的体系结构，并最终交付一系列逐步完成的版本。这叫做一个迭代生命周期。在工作流中的每一次顺序的通过称为一次迭代。软件生命周期是迭代的连续，通过它，软件是增量的开发。一次迭代包括了生成一个可执行版本的开发活动，还有使用这个版本所必需的其他辅助成分，如版本描述、用户文档等。因此一个开发迭代在某种意义上是在所有工作流中的一次完整的经过，这些工作流至少包括：需求工作流、分析和设计工作流、实现工作流、测试工作流。其本身就像一个小型的瀑布项目（见图3）。 </p>
<p>&nbsp;</p>
<p>图3 RUP的迭代模型 </p>
<p>　　与传统的瀑布模型相比较，迭代过程具有以下优点：</p>
<p>　　降低了在一个增量上的开支风险。如果开发人员重复某个迭代，那么损失只是这一个开发有误的迭代的花费。</p>
<p>　　降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险，可以尽早来解决而不至于在开发后期匆匆忙忙。 </p>
<p>　　加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在，他们的工作会更有效率。</p>
<p>　　由于用户的需求并不能在一开始就作出完全的界定，它们通常是在后续阶段中不断细化的。因此，迭代过程这种模式使适应需求的变化会更容易些。 </p>
<p>八、统一软件开发过程RUP的十大要素</p>
<p>1. 开发前景 <br />
2. 达成计划 <br />
3. 标识和减小风险 <br />
4. 分配和跟踪任务。。 <br />
5. 检查商业理由 <br />
6. 设计组件构架 <br />
7. 对产品进行增量式的构建和测试 <br />
8. 验证和评价结果 <br />
9. 管理和控制变化 <br />
10. 提供用户支持 </p>
<p>让我们逐一的审视这些要素，看一看它们什么地方适合ＲＵＰ，找出它们能够成为十大要素的理由。</p>
<p>1. 开发一个前景 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有一个清晰的前景是开发一个满足涉众真正需求的产品的关键。 前景抓住了ＲＵＰ需求流程的要点：分析问题，理解涉众需求，定义系统，当需求变化时管理需求。 前景给更详细的技术需求提供了一个高层的、有时候是合同式的基础。正像这个术语隐含的那样，它是软件项目的一个清晰的、通常是高层的视图，能被过程中任何决策者或者实施者借用。它捕获了非常高层的需求和设计约束，让前景的读者能理解将要开发的系统。它还提供了项目审批流程的输入，因此就与商业理由密切相关。最后，由于前景构成了&#8220;项目是什么？&#8221;和&#8220;为什么要进行这个项目？&#8221;，所以可以把前景作为验证将来决策的方式之一。 对前景的陈述应该能回答以下问题，需要的话这些问题还可以分成更小、更详细的问题： ? 关键术语是什么？（词汇表） ? 我们尝试解决的问题是什么？（问题陈述） ? 涉众是谁？用户是谁？他们各自的需求是什么？ ? 产品的特性是什么？ ? 功能性需求是什么？（Ｕｓｅ Ｃａｓｅｓ） ? 非功能性需求是什么？ ? 设计约束是什么？ </p>
<p>2. 达成计划 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8220;产品的质量只会和产品的计划一样好。&#8221; (2) 在ＲＵＰ中，软件开发计划（ＳＤＰ）综合了管理项目所需的各种信息，也许会包括一些在先启阶段开发的单独的内容。SDP必须在整个项目中被维护和更新。 ＳＤＰ定义了项目时间表（包括项目计划和迭代计划）和资源需求（资源和工具），可以根据项目进度表来跟踪项目进展。同时也指导了其他过程内容（原文：process components）的计划：项目组织、需求管理计划、配置管理计划、问题解决计划、QA计划、测试计划、评估计划以及产品验收计划。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在较简单的项目中，对这些计划的陈述可能只有一两句话。比如，配置管理计划可以简单的这样陈述：每天结束时，项目目录的内容将会被压缩成ZIP包，拷贝到一个ZIP磁盘中，加上日期和版本标签，放到中央档案柜中。 软件开发计划的格式远远没有计划活动本身以及驱动这些活动的思想重要。正如Dwight D.Eisenhower所说：&#8220;plan什么也不是，planning才是一切。&#8221; &#8220;达成计划&#8221;—和列表中第3、4、5、8条一起—抓住了RUP中项目管理流程的要点。项目管理流程包括以下活动：构思项目、评估项目规模和风险、监测与控制项目、计划和评估每个迭代和阶段。 </p>
<p>3. 标识和减小风险 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RUP的要点之一是在项目早期就标识并处理最大的风险。项目组标识的每一个风险都应该有一个相应的缓解或解决计划。风险列表应该既作为项目活动的计划工具，又作为确定迭代的基础。 </p>
<p>4. 分配和跟踪任务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有一点在任何项目中都是重要的，即连续的分析来源于正在进行的活动和进化的产品的客观数据。在RUP中，定期的项目状态评估提供了讲述、交流和解决管理问题、技术问题以及项目风险的机制。团队一旦发现了这些障碍物（篱笆），他们就把所有这些问题都指定一个负责人，并指定解决日期。进度应该定期跟踪，如有必要，更新应该被发布。（原文：updates should be issued as necessary。） 这些项目&#8220;快照&#8221;突出了需要引起管理注意的问题。随着时间的变化/虽然周期可能会变化（原文：While the period may vary。），定期的评估使经理能捕获项目的历史，并且消除任何限制进度的障碍或瓶颈。 </p>
<p>5. 检查商业理由 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 商业理由从商业的角度提供了必要的信息，以决定一个项目是否值得投资。商业理由还可以帮助开发一个实现项目前景所需的经济计划。它提供了进行项目的理由，并建立经济约束。当项目继续时，分析人员用商业理由来正确的估算投资回报率(ROI，即return on investment)。 商业理由应该给项目创建一个简短但是引人注目的理由，而不是深入研究问题的细节，以使所有项目成员容易理解和记住它。在关键里程碑处，经理应该回顾商业理由，计算实际的花费、预计的回报，决定项目是否继续进行。 </p>
<p>6. 设计组件构架 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在RUP中，件系统的构架是指一个系统关键部件的组织或结构，部件之间通过接口交互，而部件是由一些更小的部件和接口组成的。即主要的部分是什么？他们又是怎样结合在一起的？ RUP提供了一种设计、开发、验证构架的很系统的方法。在分析和设计流程中包括以下步骤：定义候选构架、精化构架、分析行为（用例分析）、设计组件。 要陈述和讨论软件构架，你必须先创建一个构架表示方式，以便描述构架的重要方面。在RUP中，构架表示由软件构架文档捕获，它给构架提供了多个视图。每个视图都描述了某一组涉众所关心的正在进行的系统的某个方面。涉众有最终用户、设计人员、经理、系统工程师、系统管理员，等等。这个文档使系统构架师和其他项目组成员能就与构架相关的重大决策进行有效的交流。 </p>
<p>7. 对产品进行增量式的构建和测试 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在RUP中实现和测试流程的要点是在整个项目生命周期中增量的编码、构建、测试系统组件，在先启之后每个迭代结束时生成可执行版本。在精化阶段后期，已经有了一个可用于评估的构架原型；如有必 要，它可以包括一个用户界面原型。然后，在构建阶段的每次迭代中，组件不断的被集成到可执行、经过测试的版本中，不断地向最终产品进化。动态及时的配置管理和复审活动也是这个基本过程元素（原文：essential process element）的关键。 </p>
<p>8. 验证和评价结果 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 顾名思义，RUP的迭代评估捕获了迭代的结果。评估决定了迭代满足评价标准的程度，还包括学到的教训和实施的过程改进。 根据项目的规模和风险以及迭代的特点，评估可以是对演示及其结果的一条简单的纪录，也可能是一个完整的、正式的测试复审记录。 这儿的关键是既关注过程问题又关注产品问题。越早发现问题，就越没有问题。（原文：The sooner you fall behind, the more time you will have to catch up.） </p>
<p>9. 管理和控制变化 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RUP的配置和变更管理流程的要点是当变化发生时管理和控制项目的规模，并且贯穿整个生命周期。其目的是考虑所有的涉众需求，尽可能的满足，同时仍能及时的交付合格的产品。 用户拿到产品的第一个原型后（往往在这之前就会要求变更），他们会要求变更。重要的是，变更的提出和管理过程始终保持一致。 在RUP中，变更请求通常用于记录和跟踪缺陷和增强功能的要求，或者对产品提出的任何其他类型的变更请求。变更请求提供了相应的手段来评估一个变更的潜在影响，同时记录就这些变更所作出的决策。他们也帮助确保所有的项目组成员都能理解变更的潜在影响。 </p>
<p align="justify">10. 提供用户支持 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在RUP中，部署流程的要点是包装和交付产品，同时交付有助于最终用户学习、使用和维护产品的任何必要的材料。 项目组至少要给用户提供一个用户指南（也许是通过联机帮助的方式提供），可能还有一个安装指南和版本发布说明。 根据产品的复杂度，用户也许还需要相应的培训材料。最后，通过一个材料清单（BOM表，即Bill of Materials）清楚地记录应该和产品一起交付哪些材料。 关于需求 有人看了我的要素清单后，可能会非常不同意我的选择。例如，他会问，需求在哪儿呢？他们不重要吗？我会告诉他我为什么没有把它们包括进来。有时，我会问一个项目组（特别是内部项目的项目组）：&#8220;你们的需求是什么？&#8221;，而得到的回答却是：&#8220;我们的确没有什么需求。&#8221; 刚开始我对此非常惊讶（我有军方的宇航开发背景）。他们怎么会没有需求呢？当我进一步询问时，我发现，对他们来说，需求意味着一套外部提出的强制性的陈述，要求他们必须怎么样，否则项目验收就不能通过。但是他们的确没有得到这样的陈述。尤其是当项目组陷入了边研究边开发的境地时，产品需求从头到尾都在演化。 因此，我接着问他们另外一个问题：&#8220;好的，那么你们的产品的前景是什么呢？&#8221;。这时他们的眼睛亮了起来。然后，我们非常顺利的就第一个要素（&#8220;开发一个前景&#8221;）中列出的问题进行了沟通，需求也自然而然的流动着（原文：and the requirements just flow naturally.）。 也许只有对于按照有明确需求的合同工作的项目组，在要素列表中加入&#8220;满足需求&#8221;才是有用的。请记住，我的清单仅仅意味着进行进一步讨论的一个起点。 </p>
<p>九、总结 </p>
<p>　　RUP具有很多长处：提高了团队生产力，在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面，针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导，并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构，为开发过程提供较大的通用性。但同时它也存在一些不足： RUP只是一个开发过程，并没有涵盖软件过程的全部内容，例如它缺少关于软件运行和支持等方面的内容；此外，它没有支持多项目的开发结构，这在一定程度上降低了在开发组织内大范围实现重用的可能性。可以说RUP是一个非常好的开端，但并不完美，在实际的应用中可以根据需要对其进行改进并可以用OPEN和OOSP等其他软件过程的相关内容对RUP进行补充和完善。</p>
<img src ="http://www.blogjava.net/deathknight/aggbug/214021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/deathknight/" target="_blank">死亡骑士</a> 2008-07-10 17:00 <a href="http://www.blogjava.net/deathknight/archive/2008/07/10/214021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB</title><link>http://www.blogjava.net/deathknight/archive/2008/07/10/214016.html</link><dc:creator>死亡骑士</dc:creator><author>死亡骑士</author><pubDate>Thu, 10 Jul 2008 08:53:00 GMT</pubDate><guid>http://www.blogjava.net/deathknight/archive/2008/07/10/214016.html</guid><wfw:comment>http://www.blogjava.net/deathknight/comments/214016.html</wfw:comment><comments>http://www.blogjava.net/deathknight/archive/2008/07/10/214016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/deathknight/comments/commentRss/214016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/deathknight/services/trackbacks/214016.html</trackback:ping><description><![CDATA[<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EJB (Enterprise JavaBean)是J2EE的一部分，定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。 </p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在J2EE里，Enterprise Java Beans(EJB)称为Java 企业Bean，是Java的核心代码，分别是会话Bean（Session Bean），实体Bean（Entity Bean）和消息驱动Bean（MessageDriven Bean）。&nbsp; </p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.Session Bean用于实现业务逻辑，它可以是有状态的，也可以是无状态的。每当客户端请求时，容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库，但更多时候，它会通过Entity Bean实现数据访问。 </p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.Entity Bean是域模型对象，用于实现O/R映射，负责将数据库中的表记录映射为内存中的Entity对象，事实上，创建一个Entity Bean对象相当于新建一条记录，删除一个Entity Bean会同时从数据库中删除对应记录，修改一个Entity Bean时，容器会自动将Entity Bean的状态和数据库同步。 </p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.MessageDriven Bean是EJB2.0中引入的新的企业Bean，它基于JMS消息，只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态Session Bean，客户端调用MDB后无需等待，立刻返回，MDB将异步处理客户请求。这适合于需要异步处理请求的场合，比如订单处理，这样就能避免客户端长时间的等待一个方法调用直到返回结果。 </p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EJB实际上是SUN的J2EE中的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品.EJB是BEANS,BEANS是什么概念,那就是得有一个容纳她,让她可劲造腾的地方,就是得有容器.EJB必须生存在EJB容器中.这个容器可是功能强大之极!她首先要包装你BEAN,EJB的客户程序实际上从来就不和你编写的EJB直接打交道,他们之间是通过HOME/REMOTE接口来发生关系的.它负责你的BEAN的所有的吃喝拉萨睡,比如BEAN的持续化,安全性,事务管理... </p>
<p align="justify">一.什么是 EJB?</p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个技术规范：EJB 从技术上而言不是一种"产品"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EJB 是一种标准描述了构建应用组件要解决的:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可扩展 (Scalable)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 分布式 (Distributed)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 事务处理 (Transactional)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据存储 (Persistent)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安全性 (Secure)</p>
<p align="justify">二.Sun 对 EJB 的期望</p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供一个标准的分布的、基于 OO 的组件架构<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 屏蔽复杂的系统级功能需求<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write once, run anywhere<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 与非 Java 应用之间的互操作能力<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 兼容 CORBA 标准</p>
<p align="justify">三.为什么选择 EJB?</p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EJB 服务器完成"繁杂"的工作：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 应用开发人员关注于业务逻辑的实现而不是底层的实现机制(类似于4GL 语言设计的目标)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持事务处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 多个业务操作同时成功，或全部失败<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以通过在代码外的描述来定义事务处理级别<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可扩展性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EJB 可以根据您应用的增长而扩展<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EJB 服务器往往还提供了负载均衡和<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安全性：由 EJB 服务器提供资源的访问权限控制</p>
<p align="justify">四.EJB 架构</p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了满足架构的目标，规范中描述了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 服务器 (Server)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 容器 (Container)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类 (Class) 和实例 (Instance)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Home 和 Remote 接口<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 客户端 (Client)</p>
<p align="justify">五. 简化的编程模型</p>
<p align="justify">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关注于业务逻辑实现：EJB 负责生命周期 (lifecycle), 数据存储 (persistence), 事务处理语义 (transactional semantic), 安全(security), ...<br />
通用的编程模型：各种服务的高层 API<br />
Java 是其编程语言</p>
<p align="justify"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EJB(业务逻辑代码)表示了与特定商业领域(例如银行、零售等行业)相适应的逻辑。它由运行在业务逻辑层的 enterprise bean 处理。一个 enterprise bean 可以从客户端接受数据，对它进行处理，并将其发送到企业信息系统层以作存储；同时它也可以从存储器获取数据，处理后将其发送到客户端应用程序。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有三种类型的 enterprise beans：session beans、entity beans 和 message-driven beans。Session bean 描述了与客户端的一个短暂的会话。当客户端的执行完成后，session bean和它的数据都将消失；与之相对应的是一个entity bean描述了存储在数据库表中的一行持久稳固的数据，如果客户端终止或者服务结束，底层的服务会负责 entity bean 数据的存储。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Message-driven bean 结合了 session bean 和 Java 信息服务（JMS）信息监听者的功能，它允许一个商业组件异步地接受 JMS 消息。</p>
<img src ="http://www.blogjava.net/deathknight/aggbug/214016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/deathknight/" target="_blank">死亡骑士</a> 2008-07-10 16:53 <a href="http://www.blogjava.net/deathknight/archive/2008/07/10/214016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ant工具</title><link>http://www.blogjava.net/deathknight/archive/2008/07/09/213732.html</link><dc:creator>死亡骑士</dc:creator><author>死亡骑士</author><pubDate>Wed, 09 Jul 2008 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/deathknight/archive/2008/07/09/213732.html</guid><wfw:comment>http://www.blogjava.net/deathknight/comments/213732.html</wfw:comment><comments>http://www.blogjava.net/deathknight/archive/2008/07/09/213732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/deathknight/comments/commentRss/213732.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/deathknight/services/trackbacks/213732.html</trackback:ping><description><![CDATA[<p>&nbsp; </p>
<p style="line-height: 125%; text-align: left" align="left"><strong><span style="font-size: 18pt; line-height: 125%; font-family: 宋体">Ant</span></strong><strong><span style="font-size: 18pt; line-height: 125%; font-family: 宋体">工具</span></strong></p>
<p style="text-indent: 24pt; line-height: 125%"><span style="font-size: 12pt; line-height: 125%; font-family: 宋体">Ant</span><span style="font-size: 12pt; line-height: 125%; font-family: 宋体">是一种基于Java的build工具。理论上来说，它有些类似于（Unix）C中的make ，但没有make的缺陷。<br />
<br />
&nbsp;&nbsp;&nbsp; 既然我们已经有了make, gnumake, nmake, jam以及其他的build工具为什么还要要一种新的build工具呢？因为Ant的原作者在多种(硬件)平台上开发软件时，无法忍受这些工具的限制和不 便。类似于make的工具本质上是基于shell（语言）的：他们计算依赖关系，然后执行命令（这些命令与你在命令行敲的命令没太大区别）。这就意味着你可以很容易地通过使用OS特有的或编写新的（命令）程序扩展该工具；然而，这也意味着你将自己限制在了特定的OS，或特定的OS类型上，如Unix。<br />
<br />
&nbsp;&nbsp;&nbsp; Makefile也很可恶。任何使用过他们的人都碰到过可恶的tab问题。Ant的原作者经常这样问自己：&#8220;是否我的命令不执行只是因为在我的tab前有一个空格？！！&#8221;。类似于jam的工具很好地处理了这类问题，但是（用户）必须记住和使用一种新的格式。<br />
<br />
&nbsp;&nbsp;&nbsp; Ant就不同了。与基于shell命令的扩展模式不同，Ant用Java的类来扩展。（用户）不必编写shell命令，配置文件是基于XML的，通过调用 target树，就可执行各种task。每个task由实现了一个实现了特定Task接口的对象来运行。（如果你对Ant一点概念都没有的话，可能看不懂 这一节，没有关系，后面会对target,task做详细的介绍。你如果没有太多的时间甚至可以略过这一节，然后再回来浏览一下这里的介绍，那时你就会看懂了。同样，如果你对make之类的工具不熟悉也没关系，下面的介绍根本不会用到make中的概念。）<br />
<br />
&nbsp;&nbsp;&nbsp; 必须承认，这样做，在构造shell命令时会失去一些特有的表达能力。如`find . -name foo -exec rm {}`，但却给了你跨平台的能力－你可以在任何地方工作。如果你真的需要执行一些shell命令，Ant有一个&lt;exec&gt; task，这个task允许执行特定OS上的命令。<br />
<br />
<strong>Ant</strong><strong>的概念</strong><br />
&nbsp;&nbsp;&nbsp; 可能有些读者并不理解什么是Ant以及入可使用它，但只要使用通过Linux系统得读者，应该知道make这个命令。当编译Linux内核及一些软件的源 程序时，经常要用这个命令。Make命令其实就是一个项目管理工具，而Ant所实现功能与此类似。像make，gnumake和nmake这些编译工具都 有一定的缺陷，但是Ant却克服了这些工具的缺陷。最初Ant开发者在开发跨平台的应用时，用样也是基于这些缺陷对Ant做了更好的设计。<br />
<br />
<strong>Ant </strong><strong>与 makefile</strong><br />
&nbsp;&nbsp;&nbsp; Makefile有一些不足之处，比如很多人都会碰到的烦人的Tab问题。最初的Ant开发者多次强调&#8221;只是我在Tab前面加了一个空格，所以我的命令就 不能执行&#8221;。有一些工具在一定程度上解决了这个问题，但还是有很多其他的问题。Ant则与一般基于命令的工具有所不同，它是Java类的扩展。Ant运行 需要的XML格式的文件不是Shell命令文件。它是由一个Project组成的，而一个Project又可分成可多target，target再细分又 分成很多task，每一个task都是通过一个实现特定接口的java类来完成的。<br />
<br />
<strong>Ant</strong><strong>的优点</strong><br />
&nbsp;&nbsp;&nbsp; Ant是Apache软件基金会JAKARTA目录中的一个子项目，它有以下的优点。<br />
跨平台性。Ant是存Java语言编写的，所示具有很好的跨平台性。<br />
操作简单。Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。<br />
Ant通过调用target树，就可以执行各种task。每个task实现了特定接口对象。由于Ant构建文件是XML格式的文件，所以和容易维护和书写，而且结构很清晰。<br />
Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点，它很容易集成到一些开发环境中去。<br />
<br />
<strong>Ant </strong><strong>开发</strong><br />
&nbsp;&nbsp;&nbsp; Ant的构建文件<br />
&nbsp;&nbsp;&nbsp; 当开始一个新的项目时，首先应该编写Ant构建文件。构建文件定义了构建过程，并被团队开发中每个人使用。Ant构建文件默认命名为build.xml， 也可以取其他的名字。只不过在运行的时候把这个命名当作参数传给Ant。构建文件可以放在任何的位置。一般做法是放在项目顶层目录中，这样可以保持项目的简洁和清晰。下面是一个典型的项目层次结构。<br />
(1) src存放文件。<br />
(2) class存放编译后的文件。<br />
(3) lib存放第三方JAR包。<br />
(4) dist存放打包，发布以后的代码。<br />
Ant构建文件是XML文件。每个构建文件定义一个唯一的项目(Project元素)。每个项目下可以定义很多目标(target元素)，这些目标之间可以有依赖关系。当执行这类目标时，需要执行他们所依赖的目标。<br />
每个目标中可以定义多个任务，目标中还定义了所要执行的任务序列。Ant在构建目标时必须调用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务可以为3类。<br />
（1） 核心任务。核心任务是Ant自带的任务。<br />
（2） 可选任务。可选任务实来自第三方的任务，因此需要一个附加的JAR文件。<br />
（3） 用户自定义的任务。用户自定义的任务实用户自己开发的任务。<br />
<br />
1.&lt;project&gt;标签<br />
&nbsp;&nbsp;&nbsp; 每个构建文件对应一个项目。&lt;project&gt;标签时构建文件的根标签。它可以有多个内在属性，就如代码中所示，其各个属性的含义分别如下。<br />
(1) default表示默认的运行目标，这个属性是必须的。<br />
(2) basedir表示项目的基准目录。<br />
(3) name表示项目名。<br />
(4) description表示项目的描述。<br />
每个构建文件都对应于一个项目，但是大型项目经常包含大量的子项目，每一个子项目都可以有自己的构建文件。<br />
<br />
2.&lt;target&gt;标签<br />
&nbsp;&nbsp;&nbsp; 一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。<br />
&nbsp;&nbsp;&nbsp; 例如，有一个target用于编译程序，另一个target用于声称可执行文件。在生成可执行文件之前必须先编译该文件，因策可执行文件的target依赖于编译程序的target。Target的所有属性如下。<br />
(1).name表示标明，这个属性是必须的。<br />
(2).depends表示依赖的目标。<br />
(3)if表示仅当属性设置时才执行。<br />
(4)unless表示当属性没有设置时才执行。<br />
(5)description表示项目的描述。<br />
&nbsp;&nbsp;&nbsp; Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行每个target。在执行之 前，首先需要执行它所依赖的target。程序中的名为run的target的depends属性compile，而名为compile的target的 depends属性是prepare，所以这几个target执行的顺序是prepare-&gt;compile-&gt;run。<br />
一个target只能被执行一次，即使有多个target依赖于它。如果没有if或unless属性，target总会被执行。<br />
<br />
3.&lt;mkdir&gt;标签<br />
&nbsp;&nbsp;&nbsp; 该标签用于创建一个目录，它有一个属性dir用来指定所创建的目录名，其代码如下：<br />
&lt;mkdir dir=&#8221;＄{class.root}&#8221;/&gt;<br />
通过以上代码就创建了一个目录，这个目录已经被前面的property标签所指定。<br />
<br />
4&lt;jar&gt;标签<br />
&nbsp;&nbsp;&nbsp; 该标签用来生成一个JAR文件，其属性如下。<br />
(1) destfile表示JAR文件名。<br />
(2) basedir表示被归档的文件名。<br />
(3) includes表示别归档的文件模式。<br />
(4) exchudes表示被排除的文件模式。<br />
<br />
5．&lt;javac标签&gt;<br />
&nbsp;&nbsp;&nbsp; 该标签用于编译一个或一组java文件，其属性如下。<br />
(1).srcdir表示源程序的目录。<br />
(2).destdir表示class文件的输出目录。<br />
(3).include表示被编译的文件的模式。<br />
(4).excludes表示被排除的文件的模式。<br />
(5).classpath表示所使用的类路径。<br />
(6).debug表示包含的调试信息。<br />
(7).optimize表示是否使用优化。<br />
(8).verbose 表示提供详细的输出信息。<br />
(9).fileonerror表示当碰到错误就自动停止。<br />
<br />
6．&lt;java&gt;标签<br />
&nbsp;&nbsp;&nbsp; 该标签用来执行编译生成的.class文件，其属性如下。<br />
(1).classname 表示将执行的类名。<br />
(2).jar表示包含该类的JAR文件名。<br />
(3).classpath所表示用到的类路径。<br />
(4).fork表示在一个新的虚拟机中运行该类。<br />
(5).failonerror表示当出现错误时自动停止。<br />
(6).output 表示输出文件。<br />
(7).append表示追加或者覆盖默认文件。<br />
<br />
7.&lt;delete&gt;标签<br />
&nbsp;&nbsp;&nbsp; 该标签用于删除一个文件或一组文件，其属性如下。<br />
(1)/file表示要删除的文件。<br />
(2).dir表示要删除的目录。<br />
(3).includeEmptyDirs 表示指定是否要删除空目录，默认值是删除。<br />
(4).failonerror 表示指定当碰到错误是否停止，默认值是自动停止。<br />
(5).verbose表示指定是否列出所删除的文件，默认值为不列出。<br />
<br />
8.&lt;copy&gt;标签<br />
&nbsp;&nbsp;&nbsp; 该标签用于文件或文件集的拷贝，其属性如下。<br />
(1).file 表示源文件。<br />
(2).tofile 表示目标文件。<br />
(3).todir 表示目标目录。<br />
(4).overwrite 表示指定是否覆盖目标文件，默认值是不覆盖。<br />
(5).includeEmptyDirs 表示制定是否拷贝空目录，默认值为拷贝。<br />
(6).failonerror 表示指定如目标没有发现是否自动停止，默认值是停止。<br />
(7).verbose 表示制定是否显示详细信息，默认值不显示。<br />
<br />
<strong>Ant</strong><strong>的数据类型</strong><br />
&nbsp;&nbsp;&nbsp; 在构建文件中为了标识文件或文件组，经常需要使用数据类型。数据类型包含在org.apache.tool.ant.types包中。下面镜简单介绍构建文件中一些常用的数据类型。<br />
<br />
1. argument 类型<br />
&nbsp;&nbsp;&nbsp; 由Ant构建文件调用的程序，可以通过&lt;arg&gt;元素向其传递命令行参数，如apply,exec和java任<br />
<br />
务均可接受嵌套&lt;arg&gt;元素，可以为各自的过程调用指定参数。以下是&lt;arg&gt;的所有属性。<br />
(1).values 是一个命令参数。如果参数中有空格，但又想将它作为单独一个值，则使用此属性。<br />
(2).file表示一个参数的文件名。在构建文件中，此文件名相对于当前的工作目录。<br />
(3).line表示用空格分隔的多个参数列表。<br />
(4).path表示路径。<br />
<br />
2.ervironment 类型<br />
&nbsp;&nbsp;&nbsp;由Ant构建文件调用的外部命令或程序，&lt;env&gt;元素制定了哪些环境变量要传递给正在执行的系统命令，&lt;env&gt;元素可以接受以下属性。<br />
(1).file表示环境变量值的文件名。此文件名要被转换位一个绝对路径。<br />
(2).path表示环境变量的路径。Ant会将它转换为一个本地约定。<br />
(3).value 表示环境变量的一个直接变量。<br />
(4).key 表示环境变量名。<br />
注意&nbsp;&nbsp;file path 或 value只能取一个。<br />
<br />
3.filelist类型<br />
&nbsp;&nbsp;&nbsp; Filelist 是一个支持命名的文件列表的数据类型，包含在一个filelist类型中的文件不一定是存在的文件。以下是其所有的属性。<br />
(1).dir是用于计算绝对文件名的目录。<br />
(2).files 是用逗号分隔的文件名列表。<br />
(3).refid 是对某处定义的一个&lt;filelist&gt;的引用。<br />
注意&nbsp;&nbsp;dir 和 files 都是必要的，除非指定了refid(这种情况下，dir和files都不允许使用)。<br />
<br />
4.fileset类型<br />
&nbsp;&nbsp;&nbsp; Fileset 数据类型定义了一组文件，并通常表示为&lt;fileset&gt;元素。不过，许多ant任务构建成了隐式的fileset,这说明他们支持所有的fileset属性和嵌套元素。以下为fileset 的属性列表。<br />
(1).dir表示fileset 的基目录。<br />
(2).casesensitive的值如果为false，那么匹配文件名时，fileset不是区分大小写的，其默认值为true.<br />
(3).defaultexcludes 用来确定是否使用默认的排除模式，默认为true。<br />
(4).excludes 是用逗号分隔的需要派出的文件模式列表。<br />
(5).excludesfile 表示每行包含一个排除模式的文件的文件名。<br />
(6).includes 是用逗号分隔的，需要包含的文件模式列表。<br />
(7).includesfile 表示每行包括一个包含模式的文件名。<br />
<br />
5.patternset 类型<br />
&nbsp;&nbsp;&nbsp; Fileset 是对文件的分组，而patternset是对模式的分组，他们是紧密相关的概念。&lt;patternset&gt;支持4个属性：includes excludex includexfile 和 excludesfile,与fileset相同。Patternset 还允许以下嵌套元素：include,exclude,includefile 和 excludesfile.<br />
<br />
6.filterset 类型<br />
&nbsp;&nbsp;&nbsp; Filterset定义了一组过滤器，这些过滤器将在文件移动或复制时完成文件的文本替换。<br />
主要属性如下：<br />
(1).begintoken 表示嵌套过滤器所搜索的记号，这是标识其开始的字符串。<br />
(2).endtoken表示嵌套过滤器所搜索的记号这是标识其结束的字符串。<br />
(3).id是过滤器的唯一标志符。<br />
(4).refid是对构建文件中某处定义一个过滤器的引用。<br />
<br />
7.Path类型<br />
&nbsp;&nbsp;&nbsp; Path元素用来表示一个类路径，不过它还可以用于表示其他的路径。在用作几个属性时，路经中的各项用分号或冒号隔开。在构建的时候，此分隔符将代替当前平台中所有的路径分隔符，其拥有的属性如下。<br />
(1).location 表示一个文件或目录。Ant在内部将此扩展为一个绝对路径。<br />
(2).refid 是对当前构建文件中某处定义的一个path的引用。<br />
(3).path表示一个文件或路径名列表。<br />
<br />
8.mapper类型<br />
&nbsp;&nbsp;&nbsp; Mapper类型定义了一组输入文件和一组输出文件间的关系，其属性如下。<br />
(1).classname 表示实现mapper类的类名。当内置mapper不满足要求时，用于创建定制mapper.<br />
(2).classpath表示查找一个定制mapper时所用的类型路径。<br />
(3).classpathref是对某处定义的一个类路径的引用。<br />
(4).from属性的含义取决于所用的mapper.<br />
(5).to属性的含义取决于所用的mapper.<br />
(6).type属性的取值为identity，flatten glob merge&nbsp;&nbsp;regexp&nbsp;&nbsp;其中之一，它定义了要是用的内置mapper的类型。<br />
<br />
<strong>Ant </strong><strong>的运行</strong><br />
&nbsp;&nbsp;&nbsp; 安装好Ant并且配置好路径之后，在命令行中切换到构建文件的目录，输入Ant命令就可以运行Ant.若没有指定任何参数，Ant会在当前目录下查询 build.xml文件。如果找到了就用该文件作为构建文件。如果使用了 &#8211;find 选项，Ant 就会在上级目录中找构建文件，直至到达文件系统的根目录。如果构建文件的名字不是build.xml ，则Ant运行的时候就可以使用 &#8211;buildfile file,这里file 指定了要使用的构建文件的名称，示例如下：<br />
Ant如下说明了表示当前目录的构建文件为build.xml 运行 ant 执行默认的目标。<br />
Ant &#8211;buildfile&nbsp;&nbsp;test.xml<br />
使用当前目录下的test.xml 文件运行Ant ,执行默认的目标</span></p>
<img src ="http://www.blogjava.net/deathknight/aggbug/213732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/deathknight/" target="_blank">死亡骑士</a> 2008-07-09 17:34 <a href="http://www.blogjava.net/deathknight/archive/2008/07/09/213732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>李开复：21 世纪最需要的 7 种人才</title><link>http://www.blogjava.net/deathknight/articles/213514.html</link><dc:creator>死亡骑士</dc:creator><author>死亡骑士</author><pubDate>Wed, 09 Jul 2008 01:40:00 GMT</pubDate><guid>http://www.blogjava.net/deathknight/articles/213514.html</guid><wfw:comment>http://www.blogjava.net/deathknight/comments/213514.html</wfw:comment><comments>http://www.blogjava.net/deathknight/articles/213514.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/deathknight/comments/commentRss/213514.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/deathknight/services/trackbacks/213514.html</trackback:ping><description><![CDATA[<p align="justify"><font size="3">&nbsp;&nbsp;&nbsp; 我们都知道21世纪最有价值的是人才，是什么人才呢，就是我今天要演讲的题目。我想我这个演讲有一个很大的假设就是21世纪需要的人才与20世纪、19世纪有着很大的差别，因为21世纪有几个很重大的革命发。在21世纪我们更多的工作是靠我们脑力的创造，是靠平等的竞争，已经没有国界的差别，世界被铲为平地，任何一个国家的人都可以和另外一个国家的人合作或者竞争，而他们都可以接触到、使用到、共享到同样的信息。不像过去，谁能独占信息他就能对另一个人或者对那个公司发挥相当大的价值。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;今天的信息是因为共享才能发挥它真正的潜力。所以在这样的情况下，每个人都可以自由地选择，平等地竞争，他们会积极地去获取自己的信息，追求自己的兴趣。他们期望自己工作的公司采取的不再是控制式的管理，而是放权式的管理。因为在21世纪，一个人他是靠自己的脑力创造财富，他很聪明很有创意，他跟全世界每一个人平等地竞争，然后每一个人都有同样的信息，没有一个人会愿意在一个不公平的控制下做一个公司的齿轮。每个人都会希望发挥自己的潜能，他希望自己到一个公司工作，这个公司能够放权地让每一个员工做自己的事情。还有呢，21世纪什么都改变得非常快。你才认为说某某一个技术或者某某一个公司是很火热的，忽然一个新的技术或者一个新的公司已经出来了。这都是因为互联网，每个国家，每个领域之间的边界因此在不断地消除，世界各地的人们可以一起工作，竞争和合作。所以在这样的一个环境之下，21世纪需要的不再是19、20世纪听话，没有自己意见，努力有毅力的所谓的蓝领或者白领工人，更需要的是我的演讲要谈到的7种人。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>创新实践者——What matters is not innovation , but useful innovation。</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;这7种人中的第1种是创新实践者。在今天谈到的所有人时，我都会引用一句我认为很好的话。那么第一句话是谁说得呢，是我说的。这句话跟创新有关，待会还会谈到。我想说的是在21世纪真正有价值的人是能够创新的人。他不是一个只会使用别人的方法做事情的人，他不是那种只会听话做事情的一颗棋子，一个齿轮。因为，在如今的竞争之下，一个公司唯一可以延续的竞争优势就是它的创新。任何东西都可以很容易地被模仿，只有创新很难被模仿。而创新一旦被模仿，你唯一的办法就是继续地创新。所以一批有生命力的能够持续创新的员工是唯一能够带给企业持续竞争力的财富。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;你们可能会说，李开复是不是要讲Google，讲其他科技公司要学计算机科学，要做最高深的研究这才是创新呢？其实不是的。在每一个领域都可以创新，也就是这些每一个不同领域的创新，让每一个工作变得多彩多姿。我可以举个例子。如果你在美国加州101公路硅谷段上开车，你可能会看到一个广告牌。整个广告牌上面没有公司名也没有任何广告词，只简简单单刷着&#8220;(在&#8216;e&#8217;的数列中所能找到的第一个十位数质数).com&#8221;。很多在硅谷工作的聪明人开车看到了这个广告，他们回家就会去算，有些用计算机来算，有些用数学方法来推算，算出来答案以后登陆这个网站一看，发现另外有一个更难的题目。然后他们再做了这道题目，又会到达另外一个网站，就着样做了一个题目又一个题目，最后他们发现自己到了一个很特殊的网站，这个网站就是Google的招聘网站。我们可以从这个例子看到，在Google这样一个创新的公司，它的创新其实远远不止在于一个工程部门。你可以看到招聘，市场都是充满了创意的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;关于创新还有一点要注意的，21世纪的创新必须实时、实践。因为我们有了互联网的存在，每个公司的步伐都非常快。如果你花很多的时候去做一些验证，一些用户调查，再花一两年的时间才把一个东西编出来再做测试，一个产品四五年做出来以后很可能已经过时了。所以在这21世纪，光做一个创新者是不够的，要做一个创新实践者。这就回答了我上面那句话：What matters is not innovation, but useful innovation。只是为了创新而创新是没有意义的，要做有用的创新才是有意义的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;记得我在SCI公司的时候，曾经犯过的一个最大的错误就是只想到创新，没有想到实践。我们做了一个非常酷的三维浏览器，今天可能都还没有人在使用。当时，我们每次演示的时候，观众的下巴都会掉下来，说：哇，怎么会做这么酷的一个东西！但是我们忘记了这么酷的东西却是没有市场的。最后结果是相当的失败，让我也有了一个很惨痛的经验，尤其是当我看到一百多名员工失去他们工作的时候，让我下了一个决心，就是上面这句话。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;我们虽然要创新，但是不是为了创新而创新，而是为了做有用的事情而创新。我们如果回顾历史，可以看到许多成功的人才，他们有些创新，有些实践，有些左脑发达，有些右脑发达。但是那些真正对世界有重大贡献的人，我想他们不仅是创新者，也是实践者，比如说爱迪生，比尔盖茨，Larry 和Sergey，都是很好的例子。一个真正的创新实践者每一次在创新的时候都忘不了实践，在实践的时候也忘不了创新，这样的人，我想是21世纪不可缺少的人才。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>跨领域合成者——What matters is not analysis but synthesis。</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;第2点呢，我想非常需要的是跨领域合成者。刚才听到了竺可桢学院，它本身是多学科的，强化班也是由来自不同专业的同学组成的。这点确实也是非常符合了所谓的合成者。相信在中国的未来，在全世界的未来，我们更需要的人才不只是那些把一个学科学得非常非常深的，而是那些把自己学科学好，同时能够与其他领域做一个跨领域结合的人才。原因其实非常简单，如果是世界上有1000种知识，这个知识本身你可以学得很深，但是两个人的知识通过交叉碰撞又可以产生新的知识，三个人的碰撞就能产生十亿个组合。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;以计算机为例，如果你是学计算机的，又对心理学感兴趣，这样一个跨学科的合成，你可能对用户界面或者可用度测试会有一些贡献。所以，很多新的领域的产生，都是靠过去的两种学科所交叉碰撞出来的，这是一个很好的机会。如果把一门学科学得太深了，可能会去钻牛角尖，反而失去创新实践的机会。真正重要的不是analysis，不是要分析得很深，而是synthesis，怎么样有合成的机会。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;所以，对各位同学我的建议就是，当然读好你的专业是有必要的，但是同时要考虑下是否还有别的什么专业是你有兴趣的。这两个专业最新的思想能不能结合起来，做一些即有创意又可以实践的东西，这可能是最有成长空间的一些机会。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>高情商合作者——EQ is 9 times more important than IQ。</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;第3种最需要的人是高情商合作者。EQ is 9 times more important than IQ，这句话来自Daniel Goleman的《EQ》这本书。《EQ》这本书谈到情商和智商的一些差别，还有哪个比较重要。他做了一个研究，找了几千个企业的领导者。他研究是什么因素让这些非常优秀的领导者和普通的领导者有所区别。他研究的结论最重要的差别不在于IQ，而是比IQ要更重要9倍的EQ，即情商。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;情商包括了怎样与人合作，包括了对自己的一种自觉，包括了对自己的一种管理，也包括了和别人团结合作以及社交的一些能力。EQ的重要性在21世纪是非常显著的，因为在21世纪，我们需要全球的合作，需要跨领域的合成。比如说你学的是心理学，你要跟学计算机的人合作才能做得出用户界面。跨领域的合作，跨国度的合作，跨语言的合作，这些都是必须要的。所以，过去也许在很多的环境里面，你作为一个孤僻自傲的天才会得到很大的重视，但是这个情况现在已经在大大地改变了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;过去，我曾在我的人才观里提到，在这个信息社会里，与过去的工业社会很大的一个差别就是信息社会最好的一个人才，一个程序员、一个科学家，可能比普通人生产力好个3倍、5倍、10倍或者20倍甚至更多。但是我想在这里补充的一句话就是说，即使他在技术方面好个多少倍，如果他是一个孤僻自傲、不能合作，甚至引起团队无法工作的人，那么他对这个团队，反而是一个负面的效果。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;当我们做管理的时候，我们也必须考虑到，如果你要建立一个非常健康的团队，不管是在Google工作还是未来的Google Camp，一定要在每个人很客观高情商地愿意与他人合作，尊敬别人的前提之下，才可能有很好的结果，尤其是在21世纪这样一个情商和合作是那么重要的世纪里面。所以，我对各位同学的建议是，在你可以抓住的每一个机会里，多参与社团工作，多建立一些与人合作的基础，无论是在上课，还是参与社团项目，或是暑期工作的机会。让自己除了读书之外，多做一个能够与人团结、合作、客观、尊敬别人、聆听别人的一个高情商的学生。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>高效能沟通者——The man who can think and does not know how to express what he thinks is at the level of him who cannot think。</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;第4种人是高效能的沟通者。一个人如果有思想但是不能表达自己，他其实就是一个没有思想的人，这句话其实相当的有道理。我想在座很多理工科的同学以前可能认为只要有思想就够了，不过这句话告诉我们你只有思想不能沟通，其实你是没有思想的。这句话其实并没有夸张，在21世纪全世界都是信息的前提下，很好的信息传播渠道还是经过人。人怎么传播信息的，靠沟通。一个人他的沟通能力很好，他可以把一个很难懂的信息很好地传播给别人。一个人沟通能力很差，他就无法传播信息，因此别人可能看不起他，认为他没有思想。所以沟通能力是非常需要学习的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;这种沟通的能力怎么得到呢，我可以给同学们几个很好的建议。你沟通的时候一定要理解你的听众，你要知道你的听众在想什么，听众从你的讲话中能得到什么好处，即What&#8217;s in it for you。还有要注意说话的方式，不要用说教，而应该采取引导的方式。当你与别人沟通的时候，你要先想好你主要要传达的Message是什么，用听众能够接受的方式表达出来。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>热爱工作者——If you find a job you love , you will never work a day in your life。</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;第5种非常需要的人才是热爱工作者。因为在全球被铲平之后，每一个人都是平等的。如果你能够做一个工作是你非常热爱的，那么你可能在睡觉、洗澡、吃饭时都在想你的工作。你可能就会更有热情去做你的工作。你不认为你的工作是一个枯燥的事情，而是可以享受的事情。所有就有这么一句话，有一天有个美国朋友到我的办公室来说你们的孔夫子实在是太聪明了。我说怎么回事呢。他说你看他讲的这句话多有道理啊：If you find a job you love， you will never work a day in your life。我就跟他说谢谢你夸奖我们的孔夫子，不过我实在想不起来孔夫子说了这句话。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;后来当天开车回家的时候我才想到可能是&#8220;知之者不如好之者，好之者不如乐之者&#8221;这句话。但是今天看起来，我认为可能这句英文的翻译还更贴切一些，在21世纪更能够被更多的人理解。因为如果你真的很爱你的工作，你就不是在工作了，你是在享受了。如果你是在享受的话，你一定会有更多的热情投入，更多的时间投入，更乐意去做更多的工作。到了星期五可能不想回家，到了星期天可能就想来上班了。那么你想比别人做得差可能都很困难。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;我们能看到的是，如果你能找到你的最爱，你的一生都会过得比较快乐。所以各位同学，如果你们还没找到你们的最爱，我的建议是保持一颗好奇的心，多去尝试不同的事情。然后要理解你的专业和你的工作不见得是完全一样的。要多做咨询，了解有什么样的公司，什么样的环境，什么样的工作你毕业后可以从中选择。如果你在一个你喜欢的专业里面呢，珍惜它，好好地去找一份未来相应的工作。如果是在一个可以选择的十字路口，比如说考研，出国等等，这个时候你要好好地去选一个你真正喜欢的专业，而且也许把刚才谈到的跨领域合作的概念借鉴过来。并不是说我过去学的是一个不喜欢的专业，我就要从文科转到理科。也许你可以找到一个更好的跨越的台阶。如果你不喜欢你的专业呢，你也可以在这个专业里面尽量找一个大专业里面的小专业，也许是你比较喜欢的；或者你可以在一个你认为你比较喜欢的专业和你现在不喜欢的专业之间的交叉学科找一些机会。所以不管怎么样，最后能够找到你爱的事情，你就能发挥你的潜力，成为21世纪需要的热爱工作者。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;积极主动者——In a few hundred years , the most important event those historians will see is that for the first time , people will have a choice. They will have to manage themselves。</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;第6种是积极主动者。这句话是Peter Drucker所说的。他说几百年之后，历史学家回顾今天，他们会说这个世纪里最重要的事情，不是互联网，而是人有了选择。有了选择就要积极主动，然后需要管理自己。这是最重要的一点，这也就是我们从工业社会转变到现在的信息社会所发生的最重要的事情。一个积极主动者他对自己的一切一定要负责，因为如果你自己不在乎，没有别人会比你更在乎，没有人会比你更知道你想做什么。在来到大学之前，一切都是消极，由父母来决定的。进入大学之后，要开始对自己的一切负责。不去解决也是一种解决，不做决定其实也是一种决定，这个决定就是让自己走入一个消极而不是积极的方向。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;在我出书的时候许多人喜欢让我把他们的座右铭写在书上，当我有时间的时候我也会尽量配合，但是有一句话我绝对是不写的，这句话就是沉默是金。因为在今天的环境里面，每个人需要合适地推销自己，让别人知道你的成果。因为如果你不表达，那其实别人就会认为你没有思想。当然，在适当的环境里，你才能做适当的表达，并不是要你抢别人的机会，也不是要你过分地做一个出头鸟。但是，如果你有一些想法有一些思想一定要表达出来。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;在这个21世纪里，每个人都有想法，都有信息。那些最有信息或者最有想法的人可能会得到很多或者更多的注意。比如说在这次成立Google Camp的时候，工作人员有一天来找我说我们这个Google Camp有一些想法你觉得怎么样？当时我记得非常清楚的就是我在全国20多个高校做巡回演讲的时候在那些学校见到了一些非常积极主动的同学。我就跟他说，你去下面四个学校见见曾经主持我办的活动的同学吧，因为我认为他们是积极主动的，是符合Google Camp的精神的。我认为他们会给你很多想法，也许他们会成为我们的Google Camp的骨干。所以，如果你们在想，怎么挑到这四个学校的呢，很大的原因就是当时我做巡回演讲的时候这是四个让我感触最深最积极主动的学校，最优秀的同学。所以这是一个活生生的今天在Google Camp成立的时候发生的例子。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;我们可以看到正是因为当时有这么一批积极主动的同学让我们今天有机会在浙大成立这个Google Camp。积极主动者，他并不只是积极地等待机会，他还需要积极地把握机会，为自己创造机会。这点可能是中国的学生，中国的员工最需要常常提醒自己的地方。前一阵我们在中国差不多招了三十多个员工，工作了三四个月。有一天我们在聚会，他们就问我说：开复，你对我们这三十个刚开始的关门弟子有什么建议没有。我的回答是：从技术方面，从对公司的理想、价值观认同以及努力方面，我都非常非常的满意。但是，如果要讲一点我希望你们未来可以做的更好的，我希望你们未来能够更加积极主动，要提出你们的想法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>乐观向上者——The glass is half full or half empty depending on whether you&#8217;re pouring in or out</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;最后我想讲的是乐观向上者。这句话来自美国的一个喜剧演员Bill Cosby，他是这么说的，我们常说一杯水是一半满的还是一半空的，其实要看你是继续把水注进杯子里，还是把水从杯子里面倒出去。如果你在继续注水的话，你会期望着水位上升；如果你在倒水的话，你会想到很快杯子就会空掉了。其实这告诉我们的是一个人的思想，是一个乐观的人，还是一个悲观的人。如果你是一个乐观向上的人，你会总告诉自己未来会更好。台湾有位企业家叫做张忠谋，他是台基电的董事长，他最近写了一篇文章，我觉得里面有些很有哲理的话。他有个朋友请他提几个字挂在墙上。然后张忠谋就跟他说，我的字写得不好，但是我随便帮你写几个字，然后他就写了&#8220;常想一二&#8221;这四个字。他朋友说什么叫&#8220;常想一二&#8221; 呢。然后张忠谋就告诉他说，你没有听过吗？我们都说人生不如意之事十有八九，我要告诉你常想那剩下那一二比较如意的事情。他说他从小就看了很多大人物的传记，他发现了一个规律，凡是成功者都是受苦受难的。然后他们的生命几乎就是人生不如意事十有八九的真实写照。但是他发现这些人之所以能够成功，就是因为他们保持了正面的思考，通过&#8220;常想一二&#8221;，他们能够超越苦难。苦难对他们来说反而成了生命中最好的养料，为他们未来的成功做了良好的铺垫。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;所以这些成功者在面对苦难时的坚持、乐观和勇气是最重要的。人生的如意或不如意，更重要的不是取决于人生的际遇而是思想的瞬间。所以，人生的真正品质取决于你有没有&#8220;常想一二&#8221;这种乐观的思维方式，观点反而比这个事实更重要。这是他很有哲理的一篇文章，我想你用Google可以搜索得到。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;其实在21世纪，还有很多其他的理由要做一个乐观向上的人。因为21世纪是一个更实时善变的环境，我们尝试的事情会碰到很多很多的失败。我们都听到说Google很酷，有一个20％的Project，每一个人都有20％的时间做自己想做的事情。但是，如果我们做一个统计，我想一定会发现，这个 20％自己想做的Project绝大多数一定是失败的。如果你没有一个良好的心态，不能客观地说我学到了一个Lesson有助于我做下一个项目时，那你很快就会处于一个非常沮丧的心态。所以Google公司不但不惩罚失败，还鼓励每个人客观地从失败中爬起来。我们要有一种心态，要认为挫折不是一种惩罚，而是一个学习的机会。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;当我回顾我一生的职业生涯，我想我学到最多的绝对不是来源于我的成功。反而是我在读博士的时候被评为最坏的老师，在一个公司做了一个很酷的技术却没有用，导致公司被卖掉、员工失业等等失败的经历让我学到了很多，超过了我在语音识别或者其他领域所取得的成就。所以一定要把握每一个失败的时候，让自己过渡好每一个痛苦的时期。然后要能有正面的思想，要站起来，要正视自己的错误，能够从错误中学习。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;最后我做一个总结：在21世纪里面，我们需要认真读书的同学，但是我们更需要创新实践的人才。我们需要每一科的专才，但是我们更需要跨领域合成者。我们需要高智商的人，但是更需要高情商的人。我们需要每一个学生能够高效能地理解，但是未来你们更需要高效能地沟通。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;毕业后，当然要找一个热门的工作，但是更重要的是你要热爱你的工作。不要再继续做一个只会被动听话的学生，而要做一个积极主动的学生。不要只是做一个小心翼翼的人，而要做一个乐观向上的人。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; (</font><font size="3">2006年6月5日在浙江大学Google Camp开营仪式上的演讲</font><font size="3">)<br />
</p>
</font>
<img src ="http://www.blogjava.net/deathknight/aggbug/213514.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/deathknight/" target="_blank">死亡骑士</a> 2008-07-09 09:40 <a href="http://www.blogjava.net/deathknight/articles/213514.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rational Software Architect 7.0</title><link>http://www.blogjava.net/deathknight/articles/213003.html</link><dc:creator>死亡骑士</dc:creator><author>死亡骑士</author><pubDate>Mon, 07 Jul 2008 04:37:00 GMT</pubDate><guid>http://www.blogjava.net/deathknight/articles/213003.html</guid><wfw:comment>http://www.blogjava.net/deathknight/comments/213003.html</wfw:comment><comments>http://www.blogjava.net/deathknight/articles/213003.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/deathknight/comments/commentRss/213003.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/deathknight/services/trackbacks/213003.html</trackback:ping><description><![CDATA[<p>因为 Rational Software Architect 是 Rational Application Developer，Rational Web Developer和 Rational Software Modeler 的父集 ,所以当你下载 Rational Software Architect，你就获得了所有这些工具。<br />
<br />
RSA V7包含的功能组件如下：</p>
<table id="wq18" rules="all" width="100%" border="1" frame="border">
    <thead valign="bottom">
        <tr>
            <th id="wq19" align="left">功能部件</th>
            <th id="wq20" align="left">描述</th>
        </tr>
        <tr>
            <td headers="wq19">统一建模语言（UML）建模</td>
            <td headers="wq20">使用户能够创建 UML 2.0 模型。通过使用独立安装的变换，可以将这些模型变换为代码或其他模型。</td>
        </tr>
        <tr>
            <td headers="wq19">UML 至 UML 变换和模式</td>
            <td headers="wq20">根据现有的模型内容，自动生成新的模型内容。</td>
        </tr>
        <tr>
            <td headers="wq19">C++ 建模与变换</td>
            <td headers="wq20">根据 UML 设计模型，自动生成 C++ 代码。</td>
        </tr>
        <tr>
            <td headers="wq19">Java<sup>(TM)</sup> 建模与变换</td>
            <td headers="wq20">根据 UML 设计模型，自动生成 Java 代码。</td>
        </tr>
        <tr>
            <td headers="wq19">EJB 建模与变换</td>
            <td headers="wq20">根据 UML 设计模型，自动生成 EJB 代码。</td>
        </tr>
        <tr>
            <td headers="wq19">WSDL 和 XSD 建模与变换</td>
            <td headers="wq20">根据 UML 模型，自动生成使用 Web 服务描述语言（WSDL）和 XML 模式定义（XSD）语言表述的 Web Service 合同。</td>
        </tr>
        <tr>
            <td headers="wq19">美国国防部体系结构框架（DoDAF）支持</td>
            <td headers="wq20">用于根据 DoDAF 描述复杂系统的体系结构。此功能部件根据 UML 以可视、文本和表格格式阐述系统结构。</td>
        </tr>
        <tr>
            <td headers="wq19">UML 至 CORBA 变换</td>
            <td headers="wq20">根据 UML 模型，自动生成通过 CORBA IDL 表示的组件接口规范。</td>
        </tr>
        <tr>
            <td headers="wq19">WebSphere<sup>(R)</sup> Business Modeler</td>
            <td headers="wq20">将 IBM WebSphere Business Modeler 中的业务流程模型显示为 UML 2.0 活动模型。</td>
        </tr>
        <tr>
            <td headers="wq19">Rational Rose<sup>(R)</sup> 模型导入</td>
            <td headers="wq20">迁移 IBM Rational Rose 模型，包括那些可能已在模型中定义的任何定制属性。</td>
        </tr>
        <tr>
            <td headers="wq19">Rational XDE<sup>(TM)</sup> 模型导入（仅适用于 Windows）</td>
            <td headers="wq20">迁移 IBM Rational XDE 模型，包括任何可能已应用于那些模型的定制 UML 概要文件。</td>
        </tr>
        <tr>
            <td headers="wq19">Rational SoDA<sup>(R)</sup> 集成（仅限于 Windows）</td>
            <td headers="wq20">与 IBM Rational SoDA 产品集成。使用建模产品提供的信息来生成报告和文档，包括 Microsoft Word 文档。</td>
        </tr>
        <tr>
            <td headers="wq19">C 和 C++ 开发工具（CDT）</td>
            <td headers="wq20">提供用于构建和运行经过优化的 C 或 C++ 程序的工具。可以在 C 或 C++ 集成开发环境（IDE）中使用 CDT 来编辑代码、生成 makefile 以及调试和启动应用程序。</td>
        </tr>
        <tr>
            <td headers="wq19">J2EE 和 Web Service 开发工具</td>
            <td headers="wq20">提供用于开发 J2EE 应用程序和 Web Service 的工具。</td>
        </tr>
        <tr>
            <td headers="wq19">Java 客户机应用程序编辑器</td>
            <td headers="wq20">提供用于通过 SWT、AWT 或 Swing UI 库构建和测试图形用户界面 Java 客户机应用程序的工具。</td>
        </tr>
        <tr>
            <td headers="wq19">Web 开发工具</td>
            <td headers="wq20">提供用于通过 JavaServer Faces、JavaServer Pages、Servlet 和 HTML 构建 J2EE Web 应用程序的工具。</td>
        </tr>
        <tr>
            <td headers="wq19">Struts 工具</td>
            <td headers="wq20">提供用于通过 Apache Struts 框架开发 J2EE Web 应用程序的工具。</td>
        </tr>
        <tr>
            <td headers="wq19">Crystal Reports 工具</td>
            <td headers="wq20">提供了一些可视工具，这些可视工具用于开发需要使用 Crystal Reports 所提供的报告功能的应用程序。</td>
        </tr>
        <tr>
            <td headers="wq19">门户网站工具</td>
            <td headers="wq20">提供用于创建、定制、测试、调试和部署门户网站应用程序的工具。门户网站开发工具支持 IBM WebSphere Portal V5.1 和 V6.0。</td>
        </tr>
        <tr>
            <td headers="wq19">J2EE 连接器（J2C）工具</td>
            <td headers="wq20">提供一组健壮的工具，以帮助您创建适用于 CICS<sup>(R)</sup> 和 IMS<sup>(TM)</sup> 系统的 J2C 客户机应用程序。可以使用数据绑定向导来创建使用 COBOL、PL/I 和 C 语言的 Java 数据编组代码。</td>
        </tr>
        <tr>
            <td headers="wq19">代码复审</td>
            <td headers="wq20">检查代码是否符合规则和最佳实践原则。&#8221;代码复审&#8221;突出显示潜在的问题并提供代码更改建议，从而帮助您提高代码质量。在某些情况下，&#8221;代码复审&#8221;还会自动应用修订以确保一致性。</td>
        </tr>
        <tr>
            <td headers="wq19">Test and Performance Tools Platform（TPTP）</td>
            <td headers="wq20">提供用于测试应用程序的 Eclipse 工具。此工具的功能包括概要分析、监视、日志记录、组件测试（Junit）以及静态分析或代码复审。</td>
        </tr>
        <tr>
            <td headers="wq19"><span id="dqx1arch_rule_feature">体系结构规则</span></td>
            <td headers="wq20"><span id="dqx1arch_rule_about">提供一些工具，用于自动检测结构模式和反模式以及创建依赖关系的可视图形，以确保 Java 应用程序在体系结构方面的完整性。</span></td>
        </tr>
        <tr>
            <td headers="wq19">Rational ClearCase<sup>(R)</sup> SCM 适配器</td>
            <td headers="wq20">提供 IBM Rational ClearCase SCM 和 ClearCase MVFS 插件，这些插件使您能够创建 ClearCase 版本对象库（VOB）中软件工件的受管版本。如果还安装了 ClearCase VOB 和视图服务器，则这些插件将使用快照视图和动态视图。</td>
        </tr>
        <tr>
            <td headers="wq19">Rational RequisitePro<sup>(R)</sup> 集成（仅限于 Windows）</td>
            <td headers="wq20">提供紧密集成的需求管理工具。如果还安装了 IBM Rational RequisitePro，则在需求与软件工件之间提供跟踪功能。</td>
        </tr>
        <tr>
            <td headers="wq19">Rational Unified Process<sup>(R)</sup>（RUP<sup>(R)</sup>）流程顾问程序和流程浏览器</td>
            <td headers="wq20">提供流程顾问程序以便在您开发软件时提供区分上下文的指导，并使用 IBM Rational Software Development Platform 和流程浏览器来提供与当前任务、工件和工具相关的帮助。</td>
        </tr>
        <tr>
            <td headers="wq19">可复用资产规范（RAS）支持</td>
            <td headers="wq20">提供标准的方法来对一组相关文件进行打包和解压缩，以便在小组成员之间高效地共享这些文件。</td>
        </tr>
        <tr>
            <td headers="wq19">创建变换</td>
            <td headers="wq20">提供用于创建定制变换以及定制现有变换的工具。变换用于自动生成模型内容和实现代码。</td>
        </tr>
        <tr>
            <td headers="wq19">API 迁移</td>
            <td headers="wq20">帮助您将用户编写的插件和 pluglet 从 Rational UML V6 建模产品中提供的可扩展性 API 迁移至 V7.0 中提供的 API。</td>
        </tr>
        <tr>
            <td headers="wq19">Pluglet</td>
            <td headers="wq20">提供一个环境，用于创建可用来对工作台进行扩展的小型 Java 应用程序。Pluglet 比完整的 Eclipse 插件更易于开发和测试。它们提供了一种很好的方法来使您了解某些可扩展性 API。</td>
        </tr>
        <tr>
            <td headers="wq19">插件开发环境（PDE）</td>
            <td headers="wq20">提供用于创建、开发、测试、调试和部署 Eclipse 插件的工具，这些插件可用于对 Eclipse 环境进行扩展。</td>
        </tr>
        <tr>
            <td headers="wq19">Eclipse 技术可扩展性</td>
            <td headers="wq20">使您能够扩展基于 Eclipse 工作台的环境的功能。可扩展性是通过对应用程序编程接口（API）、扩展点和实用程序进行组合实现的。</td>
        </tr>
        <tr>
            <td headers="wq19">建模可扩展性</td>
            <td headers="wq20">使您能够对应用程序编程接口（API）、扩展点和实用程序进行组合，从而对基于 Eclipse 工作台的环境的建模和开发功能进行扩展。</td>
        </tr>
        <tr>
            <td headers="wq19">数据工具</td>
            <td headers="wq20">提供用于定义和处理数据库的关系数据库工具。您可以定义并处理表以及视图和过滤器、创建并处理 SQL 语句或 SQLJ 文件以及创建并处理 DB2<sup>(R)</sup> 例程。还可以使用这些工具来生成 SQL DDL 文件、DADX 文件和 XML 文件。</td>
        </tr>
        <tr>
            <td headers="wq19">WebSphere Application Server 开发工具</td>
            <td headers="wq20">提供用于开发 WebSphere Application Server 工具。</td>
        </tr>
        <tr>
            <td headers="wq19">WebSphere Application Server 编译时依赖项</td>
            <td headers="wq20">提供为 IBM WebSphere Application Server 构建、编译、调试和部署应用程序时所必需的组件。</td>
        </tr>
        <tr>
            <td headers="wq19">IBM WebSphere Application Server Express V5.1</td>
            <td headers="wq20">提供 IBM WebSphere Application Server Express V5.1 作为目标运行时环境。</td>
        </tr>
        <tr>
            <td headers="wq19">IBM WebSphere Application Server V5.1</td>
            <td headers="wq20">提供 IBM WebSphere Application Server V5.1 作为目标运行时环境。</td>
        </tr>
        <tr>
            <td headers="wq19">IBM WebSphere Application Server V6.0</td>
            <td headers="wq20">提供 IBM WebSphere Application Server V6.0 作为目标运行时环境。</td>
        </tr>
        <tr>
            <td headers="wq19">IBM WebSphere Application Server V6.1</td>
            <td headers="wq20">提供 IBM WebSphere Application Server V6.1 作为目标运行时环境。</td>
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>
<img src ="http://www.blogjava.net/deathknight/aggbug/213003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/deathknight/" target="_blank">死亡骑士</a> 2008-07-07 12:37 <a href="http://www.blogjava.net/deathknight/articles/213003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>