<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>草根笔记</title>
    <description>努力中......</description>
    <link>http://xiancoder.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>RAP再次放入令人振奋的Demo</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176797" style="color:red;">http://xiancoder.javaeye.com/blog/176797</a>&nbsp;
          发表时间: 2008年03月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&#160;&#160;&#160; 此次RAP放出了draw2d_in_RAP的Demo，主要展示的是draw2D在RAP框架上的应用，还没有下载真正的Demo试用，但是从视频上看，好像是融合了flex来做图形展示和拖拽，有兴趣的朋友可以看看Demo的代码，然后告诉我~</p>  <p>&#160;&#160;&#160; 上次e4放出的基于web的IDE就使用flash作为代码展示和编辑的编辑器，看来Eclipse社团也感觉到纯的js基本上不能完成任务了。</p>  <p>Demo下载地址：<a href="http://www.innoopract.com/fileadmin/user_upload/Bilder/Films/draw2d_640x480.mp4" title="http://www.innoopract.com/fileadmin/user_upload/Bilder/Films/draw2d_640x480.mp4">http://www.innoopract.com/fileadmin/user_upload/Bilder/Films/draw2d_640x480.mp4</a></p> 
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176797#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 Mar 2008 12:29:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176797</link>
        <guid>http://xiancoder.javaeye.com/blog/176797</guid>
      </item>
      <item>
        <title>微软真的来搅局吗？</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176798" style="color:red;">http://xiancoder.javaeye.com/blog/176798</a>&nbsp;
          发表时间: 2008年03月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp; 关注过上一篇文章的朋友，基本都对最后说到的微软要支持SWT的开发提出了不少自己的看法。<br />
&nbsp;&nbsp;&nbsp; 下面我们再来看看来自cnBate.com的新闻：<br />
<table cellspacing="2" border="0" width="1003" cellpadding="2" style="width: 1003px; height: 31px">
    <tbody>
        <tr>
            <td>
            <p>Java程序员们可能会经常遇到Windows下的UI问题,Java程序总是和Windows的外观统一不起来,特别是Vista,难度更高.<br />
            <span style="font-weight: bold">而现在,微软微软宣布它将为Eclipse基金会提供了标准的widget工具,这意味着Java将与Windows Presentation Foundation实现互通,允许应用程序原生采用Windows VIsta的外观.</span><br />
            <br />
            </p>
            <p>这也是微软未来开放计划的一部分,微软认为一个日益开放,透明的方式正在出现.之前,微软还成立了Linux的互操作性实验室,并与JBoss,Zend Technologies等公司实现了技术合作.<br />
            </p>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;&nbsp;&nbsp; 微软真的在开源，不但支持了Linux，而且还来关注SWT，而且还有微软最近在收购Yahoo!，它最近非常关注开源事业，也许他真的要搅局，也许他真的是想做些事情，也许几年之后微软摇身一变真的变成了一个开源斗士了！<br />
&nbsp;&nbsp; 微软更换了首席构架师，他的做事风格在改变，我想微软是在向开源界证明自己的实力，是想让人们相信自己，也许过几年微软还果真出了一个开源版本的windows了~<img src="/CuteSoft_Client/CuteEditor/images/emteeth.gif" border="0" align="absMiddle" alt="" />

          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176798#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 21 Mar 2008 12:34:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176798</link>
        <guid>http://xiancoder.javaeye.com/blog/176798</guid>
      </item>
      <item>
        <title>Eclipse4.0放出部分Demo</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176799" style="color:red;">http://xiancoder.javaeye.com/blog/176799</a>&nbsp;
          发表时间: 2008年03月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp; 早上，习惯性的打开GoogleReader，看看世界的变化。发现<a href="http://www.google.com/reader/view/feed/http%3A%2F%2Fplanet.eclipse.org%2Fplanet%2Frss20.xml" class="link" closure_hashcode_="60" id="sub-tree-item-14-link"><span title="Planet Eclipse" class="name name-d-2" id="sub-tree-item-14-name"><span class="name-text name-text-d-2">Planet Eclipse</span></span></a>上已经有参加EclipseCON2008的朋友把Eclipse4.0（简称e4）Demo地址以及一些截图放到Blog上了~我们就来欣赏一下Eclipse的巨大变化吧！<br />
<img src="/images/blogjava_net/leeguannan/e4-web.png" border="0" height="613" alt="" style="width: 824px; height: 613px" width="824" /><br />
&nbsp;&nbsp;&nbsp; 呵呵，是不是很可怕，一个基于web的开发工具？我在Eclipse的Wiki上已经看到这个截图的Demo了，但是还没有时间试用~<br />
&nbsp;&nbsp;&nbsp; 此次放出的e4的demo基本上都是swt的调整，比方说可以使用swt来做flex，使用swt来做DOJO~，从这些方面就可以看到Eclipse正在向基金会想想的那样为e4提供一个基于web应用的平台，我想这个平台应该就是RAP了~而且从Demo上看，e4将会大大的涉足到web应用领域中，期待他们为我们带来再一次的惊呼！！！<br />
&nbsp;&nbsp;&nbsp; <a href="http://wiki.eclipse.org/E4/Running_the_demos">http://wiki.eclipse.org/E4/Running_the_demos</a>&nbsp; （e4的demo）<br />
<br />
&nbsp;&nbsp;&nbsp; 还有一个令人振奋的消息，不知道是好事还是坏事-----微软已经决定进入Eclipse基金会，并打算开始资助SWT项目了。<br />
&nbsp;&nbsp;&nbsp; 

          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176799#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 20 Mar 2008 12:46:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176799</link>
        <guid>http://xiancoder.javaeye.com/blog/176799</guid>
      </item>
      <item>
        <title>Planning for Eclipse 4.0（来自InfoQ）</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176800" style="color:red;">http://xiancoder.javaeye.com/blog/176800</a>&nbsp;
          发表时间: 2008年03月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Earlier this week, the teams and developers working on the various projects of <a href="http://www.eclipse.org/" title="Eclipse" id="rpz2">Eclipse</a> began an intense debate regarding the next steps in the future of Eclipse, all triggered by the announcement of the incubation project titled 'e4' <a href="http://dev.eclipse.org/mhonarc/lists/eclipse.org-committers/msg00504.html" title="on the Eclipse committer mailing-list:" id="r-ij">on the Eclipse committer mailing-list:</a><br />
<blockquote>
<div>
<p>The <strong>Eclipse Project PMC</strong> is announcing a new component, called <strong>E4</strong>, as part of the Eclipse Project Incubator.</p>
</div>
<strong>Component Description:&nbsp;</strong><br />
<br />
During the Eclipse Project 3.4 release cycle, one of the important plan items was "Create the Eclipse 4.0 Plan". The intent of this work was to identify the most pressing issues that would impact the ongoing success of Eclipse, and come up with a plan to address them. &nbsp;The result was the design of a new platform "e4", which will be the basis for Eclipse 4.0.&nbsp;<br />
<br />
The goal of the e4 component is to provide a public venue for the initial explorations that were done, leading up to the e4 design. We expect to continue to work in this area until we have reached consensus on how the full e4 effort will be structured.<br />
</blockquote>The e4 moniker is a reference to Eclipse 4.0, which would be the next major release number for the classic Eclipse distribution and platform projects. The last three major Eclipse releases shared these version number relationships: <a href="http://www.eclipse.org/callisto/" title="Callisto" id="e7xp">Callisto</a> corresponded to the Eclipse platform v3.2, <a href="http://www.eclipse.org/europa/" title="Europa" id="w3as">Europa</a> corresponded to the Eclipse platform v3.3, and the upcoming <a href="http://wiki.eclipse.org/Ganymede" title="Ganymede" id="nycg">Ganymede</a> release corresponds to the Eclipse platform 3.4.<br />
<br />
Historically it has been common practice for these plan documents to outline the thematic goals for a given release of what is commonly called the <a href="http://www.eclipse.org/projects/project_summary.php?projectid=eclipse" title="Eclipse top-level project" id="ig-5">Eclipse top-level project</a>. Traditionally, the top-level project has encompassed the Eclipse platform, the Java development tools, the Plug-in development tools, and all other components of the commonly referred-to Eclipse 'classic' distribution (the Java and Eclipse Plug-in IDE). This plan format has been used since the 2.1 release of Eclipse, and each prior plan is available <a href="http://www.eclipse.org/eclipse/development/" title="on the Eclipse project site" id="iy_j">on the Eclipse top-level project site</a>. The e4 announcement is a somewhat different approach in that community involvement is being asked prior to the drafting of any plan.<br />
<br />
Initially, the e4 project is little more than a community gathering point; a place to track early changes and ideas in code. The goal of opening this project now has been described by many of those involved as an effort to get community input and ideas at <a href="http://www.eclipsecon.org/2008/" title="EclipseCon 2008" id="zdy:">EclipseCon 2008</a>, and to then begin drafting a plan based on the community input after that point. Kevin McGuire, an Eclipse committer who primarily works on the Platform UI team, described e4 in this way:<br />
<blockquote>
<p>We on the platform team care passionately about Eclipse. We know you do too. We want to see it live a long, healthy life. We want it to serve its community as best it can. When we can&#8217;t achieve that it makes us sad. It&#8217;s clear to us that for Eclipse as a platform to remain long lived, vibrant, and relevant, it must be able to change. But the weight of a zillion plug-ins, projects, and API means the path of least resistance is stagnation, and the effort to effect change given the current constraint system is becoming monumental.</p>
<p>Therefore, two things must happen:</p>
<ol>
    <li>A new space must be carved out in which experimentation can happen, leading to change.<br />
    <li>New people must get involved, bringing with them their energy, ideas, requirements, knowledge, passion. </li>
</li></ol>
<p>These two are intrinsically tied.</p>
<p>That is e4.</p>
</blockquote>While there was some heated discussion over the format and approach of the initial project announcement, the e4 project is likely to become a central test-bed for the various transformations that Eclipse will go through to reach its next major milestone. In the past, major version number increments for Eclipse have represented significant changes for the Eclipse project. The transition to Eclipse 3.0 encompassed the move of Eclipse to the OSGi platform, the announcement and creation of Eclipse rich-client platform, and both a look-and-feel and performance overhaul. The expectation is that Eclipse 4.0 will also represent such a major shift.<br />
<br />
InfoQ will continue to cover future Eclipse planning decisions as they become available. 
 
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176800#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 15 Mar 2008 18:38:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176800</link>
        <guid>http://xiancoder.javaeye.com/blog/176800</guid>
      </item>
      <item>
        <title>EclipseCON2008 only 1 week left!</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176801" style="color:red;">http://xiancoder.javaeye.com/blog/176801</a>&nbsp;
          发表时间: 2008年03月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp; EclipseCON2008 only 1 week left!<br />
&nbsp;&nbsp;&nbsp; 又一次开源界的盛会EclipseCON2008就要召开了~据我了解此次盛会将会吸引更多的开源厂商，领袖，开发者参与，其中就有来自微软的<a href="http://www.eclipsecon.org/2008/index.php?page=sub/&amp;id=538"><strong>Sam Ramji</strong></a>（微软开源的Labs），关于OSGi的讨论依然是重头戏。<br />
&nbsp;&nbsp;&nbsp; 虽然Eclipse的RAP的发布也有半年多了，也在开源界引起了不小的反响，但是RAP还是没有得到广泛的应用，来自RAP的主力开发商Innoopract Informationssysteme GmbH的消息，此次EclipseCON2008大会也会给RAP带来更多的利好消息，毕竟关于RAP的讨论被安排在第二场，仅次于第一场OSGi的议题。<br />
&nbsp;&nbsp;&nbsp; Eclipse4.0也被提上了讨论日程，在介绍中提到，Eclipse3.0主要在力推RCP平台，而Eclipse4.0将会将会带来一个全新的用户界面以及新的用户体验，将带领Eclipse进入到WEB应用中，我想在Eclipse4.0的时候RAP应用，将变成Eclipse的主推平台了。<br />
&nbsp;&nbsp;&nbsp; 还有很多关于其他项目的讨论，但是我一直关注的VE的消息，好像还是不被人们注意，可见VE基本上已经死亡，而且我认为可以算是Eclipse基金会中比较失败的一个项目了！<br />
&nbsp;&nbsp; 预祝此次大会硕果累累，祝Eclipse越走越好！

          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176801#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 08 Mar 2008 12:52:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176801</link>
        <guid>http://xiancoder.javaeye.com/blog/176801</guid>
      </item>
      <item>
        <title>使用JRuby为你的客户端助力</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176802" style="color:red;">http://xiancoder.javaeye.com/blog/176802</a>&nbsp;
          发表时间: 2008年03月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&#160;&#160;&#160; 预言了两天，终于决定在我们的RCP客户端中增加执行JRuby的功能。说是预言其实也没有什么好预言的，JRuby早有耳闻，Ruby也一直在学习。其实要解决的问题只有一个---解决Java实例如何给JRuby，然后有JRuby操作，其实不难，JRbuy官方的WIKI上有一个例子，但是那个例子有太多硬编码的问题，稍稍改造，将硬编码的内容抽取到JRuby中，就好了~</p>  <p>&#160;&#160;&#160; 我想说的其实是在RCP中加入JRuby的作用是：</p>  <p>&#160;&#160;&#160; 实施人员只需要写脚本就可以随意操作界面上的任意东西；</p>  <p>&#160;&#160;&#160; 使产品更进一步达到零二次开发的阶段；</p>  <p>&#160;&#160;&#160; 使用JRuby来开发SWT的界面，还是有比较复杂，在熟悉SWT开发和JRuby的情况下画一个比较复杂的界面时候就会非常复杂！这里还是建议使用类似于XSWT等XML界面描述语言，然后配合脚本完成功能。</p>  <p>下面给出一个可以在运行JRuby的SWTShell：</p>  <table cellspacing="0" border="0" width="545" cellpadding="2"><tbody>     <tr>       <td valign="top" width="543">         <p>package com.glnpu.jruby; </p>          <p>import java.util.ArrayList;           <br />import java.util.List; </p>          <p>import org.eclipse.swt.SWT;           <br />import org.eclipse.swt.events.SelectionAdapter;            <br />import org.eclipse.swt.events.SelectionEvent;            <br />import org.eclipse.swt.widgets.Button;            <br />import org.eclipse.swt.widgets.Display;            <br />import org.eclipse.swt.widgets.Shell;            <br />import org.eclipse.swt.widgets.Text;            <br />import org.jruby.Ruby;            <br />import org.jruby.javasupport.JavaEmbedUtils;            <br />import org.jruby.runtime.builtin.IRubyObject; </p>          <p>public class RunJRUBY extends Shell { </p>          <p>&#160;&#160;&#160; private RunJRUBY run;           <br />&#160;&#160;&#160; private Text text;            <br />&#160;&#160;&#160; /**            <br />&#160;&#160;&#160;&#160; * Launch the application            <br />&#160;&#160;&#160;&#160; * @param args            <br />&#160;&#160;&#160;&#160; */            <br />&#160;&#160;&#160; public static void main(String args[]) {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; try {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Display display = Display.getDefault();            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; RunJRUBY shell = new RunJRUBY(display, SWT.SHELL_TRIM);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; shell.open();            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; shell.layout();            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; while (!shell.isDisposed()) {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (!display.readAndDispatch())            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; display.sleep();            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; } catch (Exception e) {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.printStackTrace();            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160; } </p>          <p>&#160;&#160;&#160; /**           <br />&#160;&#160;&#160;&#160; * Create the shell            <br />&#160;&#160;&#160;&#160; * @param display            <br />&#160;&#160;&#160;&#160; * @param style            <br />&#160;&#160;&#160;&#160; */            <br />&#160;&#160;&#160; public RunJRUBY(Display display, int style) {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; super(display, style);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; run = this;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; createContents();            <br />&#160;&#160;&#160; } </p>          <p>&#160;&#160;&#160; /**           <br />&#160;&#160;&#160;&#160; * Create contents of the window            <br />&#160;&#160;&#160;&#160; */            <br />&#160;&#160;&#160; protected void createContents() {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; setText(&quot;SWT Application&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; setSize(500, 375); </p>          <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; text = new Text(this, SWT.V_SCROLL | SWT.BORDER | SWT.WRAP | SWT.H_SCROLL);           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; text.setBounds(0, 0, 492, 312); </p>          <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; final Button button = new Button(this, SWT.NONE);           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; button.addSelectionListener(new SelectionAdapter() {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public void widgetSelected(final SelectionEvent e) {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Ruby runtime = Ruby.getDefaultInstance();            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; try {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //允许传对象，作为参数给JRuby            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IRubyObject rootRubyObject = JavaEmbedUtils.newRuntimeAdapter().eval( runtime, text.getText() );            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; JavaEmbedUtils.invokeMethod( runtime, rootRubyObject, &quot;run&quot;, new Object[] {run}, null );            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //不传对象，直接运行JRbuy            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //runtime.evalScriptlet(text.getText());            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } catch (Exception e1) {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.err.println(e1.toString());            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e1.printStackTrace();            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; });            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; button.setText(&quot;button&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; button.setBounds(335, 326, 48, 22);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; //            <br />&#160;&#160;&#160; } </p>          <p>&#160;&#160;&#160; @Override           <br />&#160;&#160;&#160; protected void checkSubclass() {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; // Disable the check that prevents subclassing of SWT components            <br />&#160;&#160;&#160; } </p>          <p>}</p>       </td>     </tr>   </tbody></table>  <p>下面是可以执行的JRuby代码：</p>  <table cellspacing="0" border="0" width="549" cellpadding="2"><tbody>     <tr>       <td valign="top" width="547">         <p>require 'java'           <br />module SWTTest            <br />&#160; include_package 'org.eclipse.swt'            <br />&#160; include_package 'org.eclipse.swt.layout'            <br />&#160; include_package 'org.eclipse.swt.widgets'            <br />&#160; include_package 'org.eclipse.swt.events'            <br />end            <br />&#160;&#160;&#160; class TestDialog &lt; SWTTest::Dialog            <br />&#160;&#160;&#160;&#160;&#160; @shell            <br />&#160;&#160;&#160;&#160;&#160; @parentShell            <br />&#160;&#160;&#160;&#160;&#160; def initialize shell            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; super(shell, SWTTest::SWT::NONE)            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; @parentShell = shell            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; open            <br />&#160;&#160;&#160;&#160;&#160; end            <br />&#160;&#160;&#160;&#160;&#160; def open            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; createContents()            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; @shell.open();            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; @shell.layout();&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160; end            <br />&#160;&#160;&#160;&#160;&#160; def createContents            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; @shell = SWTTest::Shell.new(@parentShell, SWTTest::SWT::DIALOG_TRIM | SWTTest::SWT::APPLICATION_MODAL)            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; @shell.setSize(500, 375);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; @shell.setText(&quot;SWT Dialog&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; button = SWTTest::Button.new(@shell, SWTTest::SWT::PUSH)            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; button.setText(&quot;Test Button 1&quot;)&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; button.setBounds(147, 116, 48, 22);            <br />&#160;&#160;&#160;&#160;&#160; end            <br />&#160;&#160;&#160; end            <br />&#160; class TestMain            <br />&#160;&#160;&#160;&#160;&#160; def run shell            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; TestDialog.new shell            <br />&#160;&#160;&#160;&#160;&#160; end            <br />&#160; end            <br />&#160; TestMain.new</p>       </td>     </tr>   </tbody></table>  <p>在JRuby代码的最下面有一个TestMain的类，主要是用于调用的~这一点是和其他的写法不同的！</p>  <p>至于它有多强大，就看大家怎么用了~而且java和JRuby是运行在同一个JVM之上的，它可以使用此JVM下的所有对象！</p>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176802#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 07 Mar 2008 09:20:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176802</link>
        <guid>http://xiancoder.javaeye.com/blog/176802</guid>
      </item>
      <item>
        <title>微软研发：制胜策略(实用方法三)</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176803" style="color:red;">http://xiancoder.javaeye.com/blog/176803</a>&nbsp;
          发表时间: 2008年03月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&#160;&#160; <strong>不要用年终考评来订立学习目标，要利用年终考评来记录个人的成长。</strong></p>  <p><strong>&#160;&#160;&#160; 要让每一位程序设计师都明白，写出零错误程序是很不容易的，所以应该多花功夫用各种方法做最彻底的测试。</strong></p>  <p><strong>&#160;&#160;&#160; 纠正程序设计师以为加除错码会花太多时间的观念，应该训练程序设计师第一个反应是考虑加上除错码是否有道理，第二是考虑加除错码是否符合项目的目标与工作的优先级。</strong></p>  <p><strong>&#160;&#160; 不要让凡事不能的态度阻碍了创新。</strong></p>  <p><strong>&#160;&#160; 不要让程序设计师以为使用者并不在乎软件的质量。</strong></p>  <p><strong>&#160;&#160; 不要给使用者次品，宁愿延期交货，务必追求质量完美。</strong></p>  <p><strong>&#160;&#160; 程序设计师必须经常以使用者的观点来看自己写的程序，程序设计师必须能体会使用者的感受。</strong></p>  <p><strong>&#160;&#160; 在包装盒里的每一件东西，都是产品的一部分。</strong></p>  <p><strong>&#160;&#160; 将程序的可共享性当作优先考虑的目标之一，否则程序设计师将经常做重复的工作。</strong></p>  <p><strong>&#160;&#160; 从您的每件工作中创造最大的资源，不管是利用现有的杠杆，或是创造新的杠杆。</strong></p>  <p><strong>&#160;&#160; 如果进度发生落后，那表示有个地方出错了。您应该找出问题，并加以解决，不要一味要求组员加班，在问题没有解决之前，加班是没有用的。</strong></p>  <p><strong>&#160;&#160; 别误信加班等于增加生产能力，长期的加班只会伤害生产能力，对项目没有帮助。</strong></p>  <p><strong>&#160;&#160; 周末是属于组员私人的时间，不是公司的。公司不应该以打败竞争对手为理由，要求员工周末加班。</strong></p>  <p><strong>&#160;&#160; 强调思考的重要性，而不是长时间工作。</strong></p>  <p><strong>&#160;&#160; 训练开发小组懂得在正常工作时间内掌握好工作的效率，不要让他们超时工作，因为超时工作只是浪费时间的假面具。</strong></p>  <p><strong>&#160;&#160; 与程序设计师共同研拟出一份每日活动的时间表，把无法预期的临时公务变成固定时间处理的事情，并且把程序开发的工作放在最优先的地位，不要让其他次要的事情干扰到写程序。</strong></p>  <p><strong>&#160;&#160; 主管应该把自己视为团队中的一分子，与其他人平等，而不是高高在上。</strong></p>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176803#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 05 Mar 2008 12:54:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176803</link>
        <guid>http://xiancoder.javaeye.com/blog/176803</guid>
      </item>
      <item>
        <title>微软研发：制胜策略(实用方法二)</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176804" style="color:red;">http://xiancoder.javaeye.com/blog/176804</a>&nbsp;
          发表时间: 2008年03月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&#160;&#160;&#160; <strong>用看程序的方式找错，是既懒惰又无效率的方法；</strong></p>  <table cellspacing="0" border="0" width="532" cellpadding="2"><tbody>     <tr>       <td valign="top" width="530">         <p>随时睁大雪亮的眼睛，看看是不是有个悬而未决的问题，一定要有个人(或是由主管自己)来负责研究到底哪里出错，也许这种研究既花时间又无聊，但总比灾难发生之后再来花好几个星期收拾残局要好得多。</p>       </td>     </tr>   </tbody></table>  <p>&#160;&#160;&#160; <strong>问了错的问题，而导致错的答案，训练自己问出正确的问题！</strong></p>  <table cellspacing="0" border="0" width="531" cellpadding="2"><tbody>     <tr>       <td valign="top" width="529">         <p>如果您能很清楚告诉别人，您想要的究竟是什么，这样别人才能给您真正需要的帮助，而不是做一些似是而非的虚工。</p>       </td>     </tr>   </tbody></table>  <p>&#160;&#160;&#160; <strong>勉强自己接下不可能完成的任务，实在是以长痛代替短痛的做法，而且长痛的是整个团队，该拒绝的时候绝对不能含糊；</strong></p>  <p>&#160;&#160;&#160; <strong>不要为了讨好别人而伤害双方的工作进程，您永远要根据自己的目标，做适当的决策。</strong></p>  <p>&#160;&#160;&#160; <strong>必须保护项目不受外界的左右，尤其是当这种操控来自特权人物之手。</strong></p>  <p>&#160;&#160;&#160; <strong>副产品对公司或产品都没有策略上的价值，充其量只是一种消费者回馈。</strong></p>  <p>&#160;&#160;&#160; <strong>不值得开发的功能就不要做。</strong></p>  <p>&#160;&#160;&#160; <strong>软件产品的开发，不能只为了有趣、挑战性，或是够有个性够令人眩目。</strong></p>  <p>&#160;&#160;&#160; <strong>遵循标准重于一切，特别是关于使用者界面的部分。</strong></p>  <p>&#160;&#160;&#160; <strong>确定您所要求的报告真的值得属下暂停工作，花那么多时间去写。</strong></p>  <p>&#160;&#160;&#160; <strong>请注意定期会议的价值，确定它值得每个人放下手上的工作。</strong></p>  <p>&#160;&#160;&#160; <strong>召开任何会议之前，请确定本次会议的目的是什么，达成这个目的的条件是什么，然后，务必达到开会的目的。</strong></p>  <p>&#160;&#160;&#160; <strong>不要利用进程表来驱使项目的进行，这对小组的士气伤害太大了。</strong></p>  <p>&#160;&#160;&#160; <strong>让日程表维持适度的紧迫，但又是可以做到的，好让组员振奋、不松懈，专心致力于项目的推进。</strong></p>  <p><strong>&#160;&#160;&#160; 绝对不要草率定出不可能的期限，导致组员为了赶进度而损害产品的质量。</strong></p>  <p><strong>&#160;&#160;&#160; 把长期的大项目，分成几个完整而独立的小项目，各小项目必须有一个主题。</strong></p>  <p><strong>&#160;&#160;&#160; 为了保持创意的活力和团队士气，必须让每一个小项目都有令人兴奋的结果。</strong></p>  <p><strong>&#160;&#160;&#160; 不要让程序设计师的学习停滞不前，要让程序设计师有机会磨练不同领域的技术，培养十八般武艺样样精通的组员。</strong></p>  <p><strong>&#160;&#160;&#160; 训练新进程序设计师时，先培养他对整个公司所有项目都有价值的技术，然后才培养本项目独有的技术。</strong></p>  <p><strong>&#160;&#160;&#160; 不要舍不得放您最优秀的程序设计师到别的项目去。如果他在您的项目已经没有新的东西可学，为了公司和他个人的前途，您应该把他推荐到别的项目，让他的成长永不间断。</strong></p>  <p><strong>&#160;&#160;&#160; 确定每位组员、每两个月都有一项技术上进步。</strong></p>  <p><strong>&#160;&#160;&#160; 一发现某处需要改进，就立即采取更正的行动。</strong></p> 
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176804#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 04 Mar 2008 08:47:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176804</link>
        <guid>http://xiancoder.javaeye.com/blog/176804</guid>
      </item>
      <item>
        <title>微软研发：制胜策略(实用方法一)</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176805" style="color:red;">http://xiancoder.javaeye.com/blog/176805</a>&nbsp;
          发表时间: 2008年03月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>首先还是先看一下书评。</p>  <p>下面是来自china-pub的书评：</p>  <table cellspacing="0" border="0" width="541" cellpadding="2"><tbody>     <tr>       <td valign="top" width="539">作者详细描述了他在美国领导项目的各种实际的策略方法，教您如何开发高质量的软件，而且绝不延误。本书是为每一位从事研发工作的朋友而写，相信您在读过本书之后，一定急于推荐给您的主管、同事和您的朋友。</td>     </tr>   </tbody></table>  <p>&#160;&#160;&#160; 卓越的领导者从不同的角度看世界。若是公司被大火烧得精光，他非但不为丢饭碗惊慌，反而利用火焰来烧烤一顿大餐。当每个人都摇头离去，卓越的领导者仍有充分的信心保持乐观，对每件事都从正面角度来思考。就因为凡事都看光明面，卓越的领导者并不把失败当失败，反将其当作学习克服障碍的经验。正因如此，卓越的领导者乐意尝试各种稀奇古怪的想法，并从中获得重大的突破，即使不成功，他只把这次经验当成获得信息的方式之一。这种领导人不一定要有经验，而是需要强烈的进取心和明确的理想，能够将理想与他人沟通，鼓舞他人共同追寻理想的能力，再加上一点机会，这就是能将理想实现的卓越领导者。</p>  <p><strong>&#160;&#160;&#160; 每当有人完成了一项新的功能或特色，就发个e -mail 给大家。</strong></p>  <p><strong>例如：</strong></p>  <table cellspacing="0" border="0" width="532" cellpadding="2"><tbody>     <tr>       <td valign="top" width="530">         <p>&#8220;我已完成Faxmangler 的搜寻与取代功能。Frank&#8221;            <br />主管应该看一下结果，然后回一个：             <br />&#8220;我检查过F a x m a n g l e r的搜寻与取代，不太顺畅，请再修改。Hubie&#8221;             <br />或是：             <br />&#8220;很好，继续加油！Hubie&#8221;             <br />想想看，如果大家经常收送这类正面的e - m a i l，一定会觉得充满干劲，这和可恨的进度报告多么不同！程序设计师会很乐意看见这类的好消息，当自己送出完成工作的信息时，也会很有成就感；没有人会觉得这是很讨厌的报告。</p>       </td>     </tr>   </tbody></table>  <p><strong>&#160;&#160;&#160; 每当进度快要落后了，就到我的办公室私下讨论原因，我们一起开动脑筋寻求解决之道。</strong></p>  <p><strong>例如：</strong></p>  <table cellspacing="0" border="0" width="530" cellpadding="2"><tbody>     <tr>       <td valign="top" width="528">         <p>当某位程序设计师觉得自己可能要落后了，我会和他谈，研究将来如何避免这种事情。是我们在制定进程时疏漏了某一个重要环节吗？或是时间表定得太乐观了？是不是有个错虫( b u g )在作祟，害得程序很难写或无法测试？不论问题是什么，我们一定想办法解决掉，并且预防它将来再发生。</p>       </td>     </tr>   </tbody></table>  <p><strong>&#160;&#160;&#160; 尽可能减少项目中小组彼此间的依赖。</strong></p>  <p>&#160;&#160;&#160; <strong>目标越是明确，达成目标的过程就会越有效率。</strong></p>  <p>&#160;&#160;&#160; <strong>建立最适当的程序设计优先考虑顺序，并且让所有的程序设计师确实遵守。</strong></p>  <table cellspacing="0" border="0" width="530" cellpadding="2"><tbody>     <tr>       <td valign="top" width="528">         <p>排出一个优先级表：</p>          <ul>           <li>体积大小(size) </li>            <li>速度(speed) </li>            <li>坚固性(robustness) </li>            <li>安全性(safety) </li>            <li>可测试性(testability) </li>            <li>容易维护(maintainability) </li>            <li>简洁(simplicity) </li>            <li>再用性(reusability) </li>            <li>可移植性(portability) </li>         </ul>       </td>     </tr>   </tbody></table>  <p>&#160;&#160; <strong>一旦您掌握了这个概念，把它应用在项目上，您可以大声说自己确实是在聪明地工作，而不是辛苦地工。</strong></p>  <p><strong>&#160;&#160;&#160; 一发现Bug就立即清除掉，别拖延。</strong></p>  <p><strong>作者给出的提示：</strong></p>  <table cellspacing="0" border="0" width="532" cellpadding="2"><tbody>     <tr>       <td valign="top" width="530">错虫愈晚清除，时间花得愈多。          <br />          <p>在开发的过程就立即除虫，可以让您早些学到经验，然后就不会再犯同样的错误；相反地，如果到了项目后期才发现，您可能已经犯过多次同样的错误而不自知。</p>          <p>发现错虫而立即除错是一种缓冲器，提醒那些讲求快速而不够谨慎的程序设计师，以后多加小心。</p>          <p>若能保持没有任何错虫，您就能比较准确估出项目的完成时间。</p>          <p><strong>要求错虫随时发现随时改，等于是在开发过程中引进一个小小的质量管理机制，多方的防微杜渐，保护产品的正确性。</strong></p>       </td>     </tr>   </tbody></table>  <p>&#160;&#160;&#160; <strong>学习前人的经验；</strong></p>  <p>&#160;&#160;&#160; <strong>好方法要让大家分享；</strong></p>  <p><strong>&#160;&#160;&#160; 项目只要有偏差，就需要调整，绝对不可以放任自流！</strong></p>  <p>&#160;&#160;&#160; <strong>定期暂停手边的工作，然后往前思考，随时做必要的修正，以避免未来的大障碍。</strong></p>  <table cellspacing="0" border="0" width="532" cellpadding="2"><tbody>     <tr>       <td valign="top" width="530">         <p>有什么事情是我今天能做，而且可以帮助项目在未来几个月内顺利进行的？</p>       </td>     </tr>   </tbody></table>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176805#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 03 Mar 2008 08:34:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176805</link>
        <guid>http://xiancoder.javaeye.com/blog/176805</guid>
      </item>
      <item>
        <title>微软团队：成功秘诀(总结)</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176806" style="color:red;">http://xiancoder.javaeye.com/blog/176806</a>&nbsp;
          发表时间: 2008年03月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>总结本书中的54条法则得到：</p>  <ol>   <li>建议一只和谐的团队； </li>    <li>给团队一个明确的目标，让大家都知道这个目标并把它印入脑海； </li>    <li>让品保人员明白自己不仅仅是为了Bug而加入团队的； </li>    <li>建立合适的检查点和里程碑，并利用检查点和里程碑检验团队的健康度； </li>    <li>不要害怕延误，要不断的修正方法但不要过度的修正目标； </li>    <li>努力让团队中成员产生共鸣； </li> </ol>  <p>希望大家共勉！</p>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176806#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 02 Mar 2008 09:29:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176806</link>
        <guid>http://xiancoder.javaeye.com/blog/176806</guid>
      </item>
      <item>
        <title>微软团队：成功秘诀(4)</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176807" style="color:red;">http://xiancoder.javaeye.com/blog/176807</a>&nbsp;
          发表时间: 2008年02月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>法则二十七：</p>  <p>&#160;&#160; <strong>Be like the doctors&#160;&#160;&#160; 用医生的方法</strong></p>  <p>&#160;&#160;&#160; 当病人已经药石罔效时，医生通常会对病情有所保留，避免病人太过悲观或恐惧，并且尽量鼓励病人保持希望，最好能让病人有个期望完成的目标。</p>  <p>&#160;&#160;&#160; 医生绝对不会斩钉截铁地断言什么医疗行为一定会有什么样的结果，反而是以    <br />一种自在且充满信心的口吻说：&#8220;试试看吧，一切都还没有确定呢。</p>  <p>&#160;&#160;&#160; 另外一件应该向医生学习的事情是，即使是再小再简单的医疗行为，都带着几分风险，所以医生会说：&#8220;当然，任何情况都是有可能的，治愈率再高我都不能跟你说百分之百没问题。</p>  <p>法则二十八：</p>  <p>&#160;&#160;&#160; <strong>Remember the triangle:features, resources, times&#160;&#160;&#160; 软件开发金三角：特色、资源和时间</strong></p>  <p>&#160;&#160;&#160; 作为一位软件开发的领导人，你得集中注意力在三件事情：资源（人和钱）、特色（产品与其品质）和时间。这三件事是软件开发的核心，其他的都是外围。</p>  <p>&#160;&#160;&#160; 资源、特色和时间是三角形的三个边，任何一边的变化，都会影响到另外一边或两边。所以如果时间落后了，去看你的三角形，看看对特色和资源的影响；当有人谈到可以增加什么功能特色时，你得立刻谈起时间和资源，以显得你思虑周    <br />详反应敏捷。所以，管理者的第一要务是把这个三角形放在心里，随时利用这个模式来思考问题，你会发现答案都在这个三角形内。</p>  <p>法则二十九：</p>  <p>&#160;&#160;&#160; <strong>Don't know what you don't know&#160;&#160;&#160; 不懂别装懂</strong></p>  <p>法则三十：</p>  <p>&#160;&#160;&#160; <strong>Don't go dark&#160;&#160;&#160; 建立适当的检查点</strong></p>  <p>法则三十一：</p>  <p>&#160;&#160;&#160; <strong>Beware of a guy in a room&#160;&#160;&#160; 留心没有检查点的组员</strong></p>  <p>法则三十二：</p>  <p>&#160;&#160;&#160; <strong>If you build it, it will ship&#160;&#160;&#160; 软件要经常建构，就能顺利推出</strong></p>  <p>法则三十三：</p>  <p>&#160;&#160; <strong>Get a known state and stay there&#160;&#160;&#160; 掌握实际情况</strong></p>  <p>法则三十四：</p>  <p>&#160;&#160;&#160; <strong>Use ZD milestones&#160;&#160;&#160; 零缺点里程碑</strong></p>  <p>&#160;&#160;&#160; 零缺点不代表软件中没有错虫，也不表示没有遗漏的功能，而是指团队的成品达到了事先规划的品质水准，也经过测试验证，就是零缺点里程碑。</p>  <p>法则三十五：</p>  <p>&#160;&#160; <strong>Nobody reaches the ZD milestone until everybody does&#160;&#160;&#160; 所有组员一起到达零缺点里程碑</strong></p>  <p>法则三十六：</p>  <p>&#160;&#160;&#160; <strong>Every milestone deserves a no-blame postmortem&#160;&#160;&#160; 完成每个里程碑后，心平气和地检讨</strong></p>  <p>法则三十七：</p>  <p>&#160;&#160;&#160; <strong>Stick to both the letter and the spirit of the milestones&#160;&#160;&#160; 把握里程碑的实质意义与精神</strong></p>  <p>法则三十八：</p>  <p>&#160;&#160;&#160; <strong>Get a handle on &quot;normal&quot;&#160;&#160;&#160; 培养正常的团队运作</strong></p>  <p>法则三十九：</p>  <p>&#160;&#160;&#160; <strong>A handful of milestones is a handful&#160;&#160;&#160; 里程碑不宜太多，才好掌握</strong></p>  <p>法则四十：</p>  <p>&#160;&#160;&#160; <strong>Every little milestone has a meaning (story) all its own&#160;&#160;&#160; 每一个里程碑应有专属的宗旨</strong></p>  <p>法则四十一：</p>  <p>&#160;&#160;&#160; <strong>Look for the natural milestones&#160;&#160;&#160; 寻找自然出现的里程碑</strong></p>  <blockquote>   <p>以下是六种自然出现的里程碑：      <br />1. 产品设计趋于稳定。       <br />2. 中间产品被明确定义。       <br />3. 团队真正了解要花多少时间和努力才能完成目标（通常这会发生很多次，而且多半是进度落后的时候）。       <br />4. 产品设计被删减，或是资源增加，或是进度延误，       <br />或是三者同时发生。       <br />5. 开发活动停止。       <br />6. 产品进入除错或稳定阶段。</p> </blockquote>  <p>法则四十二：</p>  <p>&#160;&#160;&#160; <strong>When you slip, don't fall&#160;&#160;&#160; 如果滑了一跤，别就此倒地不起</strong></p>  <ol>   <li>&#160;&#160;&#160; 进度落后与道德无关，请切记！ </li>    <li>&#160;&#160;&#160; 不要隐瞒事实。 </li>    <li>&#160;&#160;&#160; 化阻力为助力，利用进度落后来激发效率。 </li> </ol>  <p>&#160;&#160;&#160; 进度落后不是问题，被进度落后吓倒才是问题。进度落后并不代表产品的难度太高而无法开发。但是如果进度已经落后却未被察觉，那表示组员们不思考、不观察、不讨论，此时组织可说是濒临瓦解了。</p>  <p>&#160;&#160;&#160; 善用你的迟延，这是最能看出你领导能力的时候，此时也是组员最脆弱也最需要你的时候，在这个时候组员最能把你的话听进去，此时组员的学习能力最强。如果你在办公室内激动得大喊大叫，指天骂地，那就错失了赢得组员的心的大好机会。你必须说：&#8220;O K，进度落后了，让我们来看看问题出在那里？⋯⋯今天下午五点在会议室，我们要检讨每一个细节，问题一定要设法解决！&#8221;当组员了解到你不是企图卸责或算帐，而是真诚地想解决问题，就会乐意把一切开诚布公地摊开来谈，大家一起研究问题，从各种角度去设法克服问题。&#8220;进度落后&#8221;反而变成大家宝贵的成长经验。</p>  <p>法则四十三：</p>  <p>&#160;&#160;&#160; <strong>Don't trade a bad date for an equally bad date&#160;&#160;&#160; 不要因为进度落后而更改最后期限</strong></p>  <p>&#160;&#160;&#160; 进度落后的程度是与计划的不确定性成正比。</p>  <p>法则四十四：</p>  <p>&#160;&#160;&#160; <strong>After a slip, hit the next milestone, no matter what延误了这个里程碑，就一定要如期到达下一个里程碑</strong></p>  <p>&#160;&#160;&#160; 我们必须明白，每一次的延误，就是你和团队信心的一次受挫，所以，延误这个里程碑时，最好的补救办法就是无论如何绝不延误下一个里程碑。团队必须挽回对自己的信心和对理想的承诺；因此，下一个任务必须准时完成的意义更重大，团队需要重建信心。</p>  <p>法则四十五：</p>  <p>&#160;&#160; <strong>A good slip is a net positive&#160;&#160; 把延误当作宝贵的学习机会</strong></p>  <p>法则四十六：</p>  <p>&#160;&#160;&#160; <strong>See the forest&#160;&#160;&#160; 见树亦见林</strong></p>  <p>&#160;&#160;&#160; 如果本项目有六个模块，各有9 0 %的部分已经完成，那么你已经完成了5 4 %。每个模块完成了九成，听起来是个挺不错的成绩，但不能当成整个项目完成了百分之九十，它们之间不是相加的关系。你必须&#8220;见树亦见林&#8221;。如果任何一个模块完成比率是零，那么整个项目的完成率也是零。</p>  <p>法则四十七：</p>  <p>&#160;&#160;&#160; <strong>The world changes, so should you&#160;&#160;&#160; 世界在变，所以你也得跟着改变</strong></p>  <p>&#160;&#160;&#160; 虽然你想做些改变，你未必有勇气实行。</p>  <p>&#160;&#160;&#160; 伟大的软件必定只有一个中心思想，至于品质能够实现到什么程度，依赖领导者能否带领团队融合无数个小而重要的改变。如果你能在混乱中辨识出对项目最有意义的改变，并且引导团队去适应它，将它融入团队的精神中，将来就会在产品中表现出这项改变，呈现在顾客眼前。</p>  <p>法则四十八：</p>  <p>&#160;&#160;&#160; <strong>Violate at least one sacred cow&#160;&#160;&#160; 关怀多于要求</strong></p>  <p>法则四十九：</p>  <p>&#160;&#160; <strong>Beta is not the time to change&#160;&#160;&#160; Beta测试版不是修改功能的时候</strong></p>  <p>法则五十：</p>  <p>&#160;&#160;&#160; <strong>The Beta is for spin development&#160;&#160;&#160; Beta测试是暖身活动</strong></p>  <p>法则五十一：</p>  <p>&#160;&#160;&#160; <strong>Triage ruthlessly&#160;&#160;&#160; 急救术</strong></p>  <p>法则五十二：</p>  <p>&#160;&#160; <strong>Don't shake the Jell-0&#160;&#160;&#160; 小心保持软件的稳定</strong></p>  <p>法则五十三：</p>  <p>&#160;&#160;&#160; <strong>Compete with the superior story&#160;&#160;&#160; 伟大的软件应该有一个伟大的故事</strong></p>  <p>法则五十四：</p>  <p>&#160;&#160; <strong>Create a winning image&#160;&#160;&#160; 建立赢家形象</strong></p>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176807#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Feb 2008 18:00:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176807</link>
        <guid>http://xiancoder.javaeye.com/blog/176807</guid>
      </item>
      <item>
        <title>JFace进度条使用经验一则</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176808" style="color:red;">http://xiancoder.javaeye.com/blog/176808</a>&nbsp;
          发表时间: 2008年02月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&#160;&#160;&#160; 我讨论的进度条主要是JFace的进度条，RCP已经提供了完善的Job组件，为什么还要用JFace的进度条呢？原因是我要在登陆界面上做进度处理，也就是使用Eclipse3.3提供的AbstractSplashHandler特性，可以将原有的启动画面替换成为一个登陆界面，启动这个登陆界面时，Eclipse的Platform此时还没有启动，所以不能使用RCP本身的Job组件了。</p>  <p>&#160;&#160;&#160; 由于是一个检测服务器是否联通的测试，所以并不知道测试的真实时间，所以就是要使用&#8220;傻瓜进度条&#8221;了，也就是反复走的进度条陈刚的代码如下：</p>  <table cellspacing="0" border="0" width="525" cellpadding="2"><tbody>     <tr>       <td valign="top" width="523">         <p>button.addSelectionListener(new SelectionAdapter() {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; private boolean stopFlag;// 停止标志 </p>          <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; private void go() {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; for (int i = 0; i &lt; 10; i++) {// 循环10次，每次间隔一秒            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(&quot;第&quot; + (i + 1) + &quot;个任务执行完毕&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (stopFlag) {// 监控是否要让停止后台任务            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(&quot;被中断了&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; try {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Thread.sleep(1000);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } catch (Throwable t) {}            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; stopFlag = true;// 执行完毕后把标志位设为停止，好通知给进度框            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(&quot;全部任务执行完毕&quot;);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>          <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public void widgetSelected(SelectionEvent e) {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; stopFlag = false;// 每次都设初值为false            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new Thread() {// 把后台任务放到一个新开线程里执行            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public void run() {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; go();            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }.start();            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; showProgressDialog();// 打开一个进度框            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>          <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; private void showProgressDialog() {           <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IRunnableWithProgress runnable = new IRunnableWithProgress() {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public void run(IProgressMonitor monitor) {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; monitor.beginTask(&quot;正在执行中......&quot;, 30);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int i = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; while (true) {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 监听是否单击了进度框的&#8220;取消&#8221;按钮，stopFlag则是监听后台任务是否停止            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (monitor.isCanceled() || stopFlag) {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; stopFlag = true; // 单击了&#8220;取消&#8221;按钮要设标志位为停止，好通知后台任务中断执行            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;// 中断处理            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // i到30后清零。并将进度条重新来过            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if ((++i) == 30) {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; i = 0;            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; monitor.beginTask(&quot;正在执行中......&quot;, 30);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; // 进度条每前进一步体息一会，不用太长或太短，时间可任意设。            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; try {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Thread.sleep(99);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } catch (Throwable t) {}            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; monitor.worked(1);// 进度条前进一步            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; monitor.done();// 进度条前进到完成            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; };            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; try {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new ProgressMonitorDialog(s).run(true, true, runnable);            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } catch (Exception e) {            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.printStackTrace();            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }            <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; });</p>       </td>     </tr>   </tbody></table>  <p>&#160;</p>  <p>&#160;&#160;&#160; 主要是使用两个线程交替使用，第一个线程处理业务，第二个线程监控第一个线程查看它是否结束，如果结束或者被点击cancele则停止进度条的进程，如果一直没有关闭的指令，则反复开始---累加---结束---开始---累加---结束。</p>  <p>&#160;&#160;&#160; 我们几乎是把陈刚的代码原原本本的抄袭了一下，仅仅是替换了go()中的内容，但是发现一个问题</p>  <p><strong>new ProgressMonitorDialog(s).run(true, true, runnable);</strong>    <br />使用此句的话，JFace的线程永远不会启动；</p>  <p>替换为</p>  <p><strong>new ProgressMonitorDialog(s).run(false, true, runnable);</strong>    <br />使用此句的话，JFace的线程可以启动，运行正常，但是cancele不能响应，UI界面完全卡死！</p>  <p>&#160;&#160;&#160; 第一个参数的名字fork~乍看去，什么意思都没有，但是看看API才发现内藏很大的玄机，如果为true则此线程为一个非UI线程，大家知道非UI线程是不会阻塞UI的；如果为false则此线程为一个UI线程，大家也知道UI线程如果使用不当很容易阻塞UI的。</p>  <p>&#160;&#160;&#160; 关键的问题是我们和陈刚的代码几乎一摸一样他的进度条就启动，我的进度条就不启动！为什么？（这点至今不明白!）</p>  <p>&#160;&#160;&#160; 详查API发现如果fork为false的时候还是另有洞天的：</p>  <table cellspacing="0" border="0" width="521" cellpadding="2"><tbody>     <tr>       <td valign="top" width="519">         <p>This implementation of IRunnableContext#run(boolean, boolean, IRunnableWithProgress) runs the given <code>IRunnableWithProgress</code> using the progress monitor for this progress dialog and blocks until the runnable has been run, regardless of the value of <code>fork</code>. The dialog is opened before the runnable is run, and closed after it completes. It is recommended that <code>fork</code> is set to true in most cases. <strong>If <code>fork</code> is set to <code>false</code>, the runnable will run in the UI thread and it is the runnable's responsibility to call <code>Display.readAndDispatch()</code> to ensure UI responsiveness.</strong> </p>       </td>     </tr>   </tbody></table>  <p>API中说的很明白，如果fork为false时需要在线程中调用Display.readAndDispatch()方法，以避免UI被阻塞！</p>  <p>大家如果在JFace的开发中如果使用了进度条，发现UI被阻塞的话，就想想我哦！！！呵呵只用在进程中调用一下Display.readAndDispatch()就解决了！</p>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176808#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Feb 2008 08:47:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176808</link>
        <guid>http://xiancoder.javaeye.com/blog/176808</guid>
      </item>
      <item>
        <title>微软团队：成功秘诀(3)</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176809" style="color:red;">http://xiancoder.javaeye.com/blog/176809</a>&nbsp;
          发表时间: 2008年02月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>设计</p>  <p>&#160;&#160; <strong>软件的设计─每一位团队成员都必须参与─这表示团队整体对功能需求的了解程度。</strong></p>  <p>&#160;&#160;&#160; 软件设计的第一要诀是：将全团队中最好的想法组织起来，去满足顾客内心最深处的需要。（带领团队做案例研讨，带领大家思考如何解决一切的疑难，让每一件事都在该做的时候做好。）</p>  <p>法则十九：</p>  <p>&#160;&#160;&#160; <strong>Go for greatness&#160;&#160;&#160; 追求卓越</strong></p>  <p>法则二十：</p>  <p>&#160;&#160;&#160; <strong>State your theme&#160;&#160;&#160; 设定主题</strong></p>  <p>&#160;&#160;&#160; 重点是产品的功能特色不能像是一袋子随便抓过来的东西，应该把与主题无关的东西都删掉，而且你的目标也必须符合统一性（unity of purpose）才行，这一点是与主题互为一体的两面。将资金投注在这个目标上，让所有的人都完全明白这个目标，并且为这个目标努力，做得到这些的话，你的产品就会完全包含这个目标。</p>  <p>法则二十一：</p>  <p>&#160;&#160;&#160; <strong>Minimize dependencies&#160;&#160;&#160; 不要倚赖不确定的事</strong></p>  <p>法则二十二：</p>  <p>&#160;&#160;&#160; <strong>Propitiate the gods&#160;&#160;&#160; 平息顾客的愠怒</strong></p>  <p>法则二十三：</p>  <p>&#160;&#160; <strong>Portability is for canoes.&#160;&#160;&#160; 软件的可移植性</strong></p>  <p>法则二十四：</p>  <p>&#160;&#160; <strong>Design time at design time&#160;&#160;&#160; 在设计时将时间因素考虑在内</strong></p>  <p>开发</p>  <p>法则二十五：</p>  <p>&#160;&#160;&#160; <strong>Don't accept dictation&#160;&#160;&#160; 拒绝不合理的命令</strong></p>  <p>&#160;&#160;&#160; 千万不要一味的唯命是从，在必要的时候拒绝！敢于拒绝！</p>  <p>&#160;&#160;&#160; 如果在上位者不让真正执行任务的人来估计所需的进度，那就是专制。</p>  <p>&#160;&#160;&#160; 开发进度表应该由下而上来拟定，每一个人负责自己的工作，也负责设定它的时间表，负责准时完成工作。责任和充分授权是一体的两面，二者兼备才能拟出合理的开发计划。一种非常有趣的进度估算方法！</p>  <p>法则二十六：</p>  <p>&#160;&#160;&#160; <strong>Now go play&#160;&#160;&#160; 把工作当作游戏吧</strong></p>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176809#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Feb 2008 08:28:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176809</link>
        <guid>http://xiancoder.javaeye.com/blog/176809</guid>
      </item>
      <item>
        <title>微软团队：成功秘诀(2)</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176810" style="color:red;">http://xiancoder.javaeye.com/blog/176810</a>&nbsp;
          发表时间: 2008年02月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>法则六：</p>  <p>&#160;&#160;&#160; <strong>Watch the ratio&#160;&#160;&#160; 注意人员的组成比例</strong></p>  <p>&#160;&#160;&#160; &#8220;基本原则是开发人员和品保人员的比例不超过2:1&#8221;这个是作者为我们提出的建议，而在SUN这个比例被修改为1:1，甚至是1:2，可见在项目中品保人员比开发人员更加重要！</p>  <p>&#160;&#160; &#8220;其实真正负责软件如期完成的是品保人员。当进度落后时，我们第一个要看的是品保人员：人数够不够？有没有充分授权？有没有确实参与设计？进度上能不能跟开发人员配合良好？能不能一有问题出现就立刻提出警告？品保人员和开发人员的理念一致吗？是不是跟开发人员过度亲密而放水？&#8221;</p>  <p>&#160;&#160;&#160; &#8220;一个健全的软件开发团队一定要符合上述的人数比例原则，平均每一位品保人员所支援的开发人员不超过两位。&#8221;能做到吗？至少在我们公司这个，基本上，很难！</p>  <p>法则七：</p>  <p>&#160;&#160;&#160; <strong>Use feature teams&#160;&#160;&#160; 运用特色监督小组</strong></p>  <p>&#160;&#160;&#160;&#160; 融入任务（I d e n t i t y） 充分的授权和责任感，使人具有控制权和影响力，愈能使自己与任务融为一体。</p>  <p>&#160;&#160;&#160; 建立共识（C o n s e n s u s） 共识是特色监督小组的气氛。</p>  <p>&#160;&#160;&#160; 地位平等（B a l a n c e） 由于特色监督小组的每一位成员都是不同的背景、专长，不同的工作角色和不同的观念，没有谁比谁优越的情形，所以每个人的地位都是平等的。</p>  <p>&#160;&#160;&#160; <strong>权威是来自学识，而非职位。</strong></p>  <p>&#160;&#160;&#160; 在一个理想的项目中，基本上有两种角色存在：创造者（c r e a t o r）和推动者（f ac i l i t a t o r）。创造者是一些专业人员，例如开发程序、行销、软件品保和文件撰写；而推动者则负责凝聚团队共识和维持最佳的开发环境。</p>  <p>法则八：</p>  <p>&#160;&#160;&#160; <strong>Use program managers&#160;&#160;&#160; 项目经理的职责</strong></p>  <p>&#160;&#160;&#160; 项目经理是软件开发团队的一份子，他的职责是：    <br />&#160;&#160;&#160;&#160;&#160; &#8226; 领导大家定义出一个成功的产品。     <br />&#160;&#160;&#160;&#160;&#160; &#8226; 引导大家对产品注入深切的期望和信念。     <br />&#160;&#160;&#160;&#160;&#160; &#8226; 带领团队将理想实现，变成可预见的产品诞生。</p>  <p>&#160;&#160;&#160; 项目经理应该要有技术的背景，而且必须在两种层面非常专精：一是对开发产品所使用的技术很熟悉，二是拥有建构软件的技术领导能力。项目经理必须精于哄骗、驱策、鼓励、要求他的团队做出最好的软件和表现出最好的工作效能，他清楚知道软件制作过程中每一项的投入和产出细节，他必须懂得用最好的方式定义产品和维持健全的技术。最后，项目经理还必须是团队的发言人，面对媒体、客户、以及整个组织。</p>  <p><strong>&#160;&#160;&#160; 项目经理是软件开发的核心人物。</strong></p>  <p>&#160;&#160;&#160; 你想了解这个团队？看看他们的软件就知道了，反之亦然。</p>  <p>团队精神：</p>  <blockquote>   <p>1. 一群人同心协力，集合大家的脑力，共同创造一项智能财产。</p>    <p>2. 个人的创造力是一种神奇的东西，源自于潜在的人类心智潜能，它被情感丰富，而被技术束缚。</p>    <p>3. 一群人全心全意地贡献自己的创造力，结合成巨大的力量。结合的创造力由于这一群人的互动关系、彼此激荡，而更加复杂。</p>    <p>4. 这种复杂的情况之下，领导变成像是人际互动的交响乐指挥，辅助并疏导各种微妙的人际沟通。</p>    <p>5. 在团体中的沟通和互动是正确而健康时，能够使这一群人的力量完全结合，会产生相加相乘的效果，抵销互斥。沟通顺畅能使思想在团队中充分交流传达。</p>    <p>6. 团队工作的品质比时程更重要，而作品的伟大是需要对&#8220;团队精神&#8221;特别加强，才能达成。&#8220;团队精神&#8221;可视为个别成员精神的平均值，而个人的精神（ p s y c h e）则是使他能感觉、能思考、能推论的内在力量。</p>    <p>7. 倘若忽视了&#8220;团队精神&#8221;，则只会有平庸的成果。</p> </blockquote>  <p>法则九：</p>  <p>&#160;&#160;&#160; <strong>Be an authority ， not an authority figure&#160;&#160;&#160; 要权威，不要霸权</strong></p>  <p>&#160;&#160;&#160; 权威的目的是让每一位团队成员都有自己的专业权威，和团队的专业自信，这才是管理者真正的权威。</p>  <p><u>竞争</u></p>  <p><strong>&#160;&#160;&#160; 创新无处不在，绝对不可以停滞不前！</strong></p>  <p>&#160;&#160;&#160; 如果你无法时时掌握时代的脉搏，如果你怠于响应周围迅速而剧烈的变化，特别是竞争者的行动，如果你不能持续地创新原有的技术，永远保持领先，那么别人马上就会趁虚而入，取代你而成为市场上的优胜者，掳获顾客的心和他们的荷包。</p>  <p>&#160;&#160;&#160; <strong>确定了你的情况之后，应该先考虑采取标准步法。</strong></p>  <p><strong>标准步法：</strong></p>  <p>法则十：</p>  <p>&#160;&#160; <strong>Alone? A market without a competitor ain't&#160;&#160;&#160;&#160; 没有竞争对手？未必是好事</strong></p>  <p><strong>（注：任何人都有敌人！）</strong></p>  <p>法则十一：</p>  <p>&#160;&#160;&#160; <strong>Dead beat? Break out of a feature shoot-out&#160;&#160;&#160; 竞争者紧追不舍？推出创新的功能特色（注：想法设法的压制你的敌人！）</strong></p>  <p>法则十二：</p>  <p>&#160;&#160;&#160; <strong>Behind? Ship more often with new stuffs&#160;&#160;&#160; 落后竞争对手？加大投入，更快推出新版本（注：沉下心来，夺回领地！）</strong></p>  <p>法则十三：</p>  <p>&#160;&#160;&#160; <strong>Ahead? Don't ever look back&#160;&#160;&#160; 领先竞争对手？不要回头（注：挑战自己，战胜自己！）</strong></p>  <p>&#160;&#160;&#160; <strong>准时地、经常地推出新产品是软件开发产业中最大的金科玉律。</strong></p>  <p>法则十四:</p>  <p>&#160; <strong>&#160; Take the Oxygen along&#160;&#160;&#160; 保持新鲜</strong></p>  <p>&#160;&#160;&#160; 快速变迁的节奏是信息社会的常态，你必须快速前进，否则就落伍了。</p>  <p><u>顾客</u></p>  <p>&#160;&#160;&#160; 想方设法的让顾客迷恋上你的产品！</p>  <p>法则十五：</p>  <p><strong>&#160;&#160;&#160; Enrapture the customer&#160;&#160;&#160; 给顾客惊喜</strong></p>  <p>&#160;&#160;&#160; 顾客最低的希望是你能够理解他所感受到的痛苦经验。</p>  <p>法则十六：</p>  <p>&#160;&#160;&#160; <strong>Find the sweet spot&#160;&#160;&#160; 寻找靶心</strong></p>  <p>法则十七：</p>  <p>&#160;&#160;&#160; <strong>It's a relationship, not a sale&#160;&#160;&#160; 与顾客建立关系，而不是卖产品</strong></p>  <p>法则十八：</p>  <p>&#160;&#160;&#160; <strong>Cycle rapidly&#160;&#160;&#160; 加速产品推出的周期</strong></p>   
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176810#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 28 Feb 2008 08:31:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176810</link>
        <guid>http://xiancoder.javaeye.com/blog/176810</guid>
      </item>
      <item>
        <title>微软团队：成功秘诀(1)</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176811" style="color:red;">http://xiancoder.javaeye.com/blog/176811</a>&nbsp;
          发表时间: 2008年02月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; 带过项目的朋友一定都看过或者听说过这本书吧，其实这本书是来自&#8220;微软管理经典著作&#8221;之中的一本，其他两本是《微软项目：求生法则》、《微软研发：制胜策略》这三本书我会精读细读的（虽然我不带项目~），从中取其精华写成笔记与大家分享。</p>
<p>&nbsp;&nbsp;&nbsp; 首先看一下《微软团队：成功秘诀》分别在china-pub和豆瓣上的书评把：</p>
<p>china-pub</p>
<table cellspacing="0" border="0" width="523" cellpadding="2" style="width: 523px; height: 118px">
    <tbody>
        <tr>
            <td valign="top" width="522">本书叙述了吉姆.麦卡锡带领微软Visual C++开发团队的故事，告诉读者如何构建一个优秀的软件开发团队，如何在一段时间内成功地开发一个软件，而且此后不断地完成新版，并一直受到市场的肯定。他将自己思考的结晶和种种惨痛的教训归纳出<strong>54条</strong>言简意赅的法则，从产品设计、程序开发到成功的营销，无所不包，在微软，本书是每一位项目经理的必读圣经。</td>
        </tr>
    </tbody>
</table>
<p>豆瓣</p>
<table cellspacing="0" border="0" width="524" cellpadding="2">
    <tbody>
        <tr>
            <td valign="top" width="522">
            <p>作为一位经验丰富的老手，作者将自己思考的结晶和种种惨痛的教训归纳出<strong>54条</strong>言简意赅的法则，从产品设计、程序开发与构建、准时推出产品，到成功的营销，无所不包。您将会发现本书就像软件开发本身一样迷人有趣。本书是为软件设计者、开发人员、营销人员、技术主管，以及所有亟欲一窥软件开发奥秘的人士所写的。</p>
            </td>
        </tr>
    </tbody>
</table>
<p>法则一：</p>
<p><strong>&nbsp;&nbsp;&nbsp; Establish a shared vision&nbsp;&nbsp;&nbsp; 建立一个共同的目标</strong></p>
<p>&nbsp;&nbsp;&nbsp; 在团队总建立共同的目标是非常重要的，团队中的成员只有当有了共同的目标之后才能有归属感，才能对憧憬中的产品产生荣誉感，才能在管理中更好的调动各个成员的积极性，从而将团队推向正轨，让产品如期发布！</p>
<p>&nbsp;&nbsp; &#8220;团队中每一位成员都必须非常清楚我们要做什么、成品会是什么模样、基本的产品策略是什么、什么时候必须完成。凡是与共同目标相冲突的看法都必须转化成一致，而不是把它消音。和谐的共识是绝对必要的，否则软件不可能做得好，很多事会复杂化而难以收拾。&#8221;</p>
<p>&nbsp;&nbsp;&nbsp; 所谓目标是共同的希望，对未来的事情所描绘出来的景象，比方说作者在给VC++项目组开会时候的描述&#8220;Visual C++是最伟大、最值得骄傲的产品，你们难道不这么认为吗？我知道我们可以如期完成它，而且用它来给对手一个迎头痛击，不只我一个人这么想吧？我们将创造微软的明日世界，我们会大有作为的，不是吗？&#8221;其实他已经给VC++了一个很好的目标，他让成员们觉得，我们都是在伟大事情，一但在团队中形成了荣誉感，你会发现你的团队将会空前的团结！</p>
<p>法则二：</p>
<p><strong>&nbsp;&nbsp;&nbsp; Get their heads into the game&nbsp;&nbsp;&nbsp; 使大家主动投入</strong></p>
<p>&nbsp;&nbsp;&nbsp; &#8220;如果每个人都在认真思考如何使团队更有效率，这个团队自然就比较容易表现出高效率，反之亦然。&#8221;让每一个人都参与进来，需要管理者能够调动每一个人的积极性~让大家都主动的去思考问题，为产品主动的出谋划策。</p>
<p>&nbsp;&nbsp;&nbsp; 需要管理者去倾听每一个愿意说的成员的言论或者主意，需要判断的这些言论或者主意的能力，面对好的想法，也许它不切实际，但是也不要一棒子打死，而是要进行诱导，让他下次可以提出更好的更切实际的想法来。</p>
<p>&nbsp;&nbsp;&nbsp; 鼓励创新而非抹杀它！</p>
<p>为什么组员会怠于思考或是不敢说出想法？ <br />
&nbsp;&nbsp;&nbsp; &#8226; 因为他们认为没有人会重视他的想法。 <br />
&nbsp;&nbsp;&nbsp; &#8226; 因为他们认为该由别人告诉他该做什么事。 <br />
&nbsp;&nbsp;&nbsp; &#8226; 因为他们认为这样做没有什么好处，只会使老板皱眉头罢了。 <br />
&nbsp;&nbsp;&nbsp; &#8226; 管理者只管发号施令而已。</p>
<p>法则三：</p>
<p><strong>&nbsp;&nbsp;&nbsp; Create a multi-release technologyplan&nbsp;&nbsp;&nbsp; 建立开发多版本的技术规划</strong></p>
<p>&nbsp;&nbsp;&nbsp; 授权共决，其实就是全民参与，无论是对待成员的新想法还是对待项目的技术规范时都使用全民参与。（这样好吗？安全吗？）</p>
<p>法则四：</p>
<p>&nbsp;&nbsp;&nbsp; <strong>Don't flip the bozo bit&nbsp;&nbsp;&nbsp; 别做笨蛋</strong></p>
<p>&nbsp;&nbsp;&nbsp; 软件产业中最重要的事情是&#8220;让大家思考！&#8221;。</p>
<p>&nbsp;&nbsp;&nbsp; &#8220;在微软我们把这种人叫作b o z o，意思是笨蛋。永远没有人会注意笨蛋的所作所为，即使他真的有贡献，他也不会有任何份量。笨蛋当然是不可信任的，你对笨蛋惟一的期望是但愿他不要搞砸事情。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 在我的部门里，这种德行是不允许的。我要每一个人都全心全力地投入，每个人都得有贡献，每一个人都可以侃侃而谈我们的产品─如何在市场上竞争、何时出新版本等等，而且每个人对产品的看法都一致，不会众说纷云。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 将自己的意见强行加诸于他人者，其实是笨蛋。&#8221;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 需要随时防范组员出现&#8220;江郎才尽&#8221;病！</p>
<p>法则五：</p>
<p>&nbsp;<strong>&nbsp;&nbsp; Use scouts&nbsp;&nbsp;&nbsp; 刺探敌情</strong></p>
<p>&nbsp;&nbsp;&nbsp; 必须有一个人或者有一些人去观察未来的发展趋势，预言新技术。这个角色是非常重要的！</p>
<p>&nbsp;&nbsp;&nbsp; &#8220;这次他们学乖了，事先派了两位最优秀的组员担任&#8220;侦察员&#8221;，做了一次彻底的技术调查和完善的规划，终于在危机爆发之前将之化解。&#8221;</p>
<p>&nbsp;&nbsp;&nbsp; &#8220;&#8220;侦察员&#8221;就是为科技的改变而准备的，如果你决定永远停着不动，那你不需要&#8220;侦察员&#8221;。&#8221;软件公司中如果没有这个角色还叫软件公司吗？</p>

          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176811#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 27 Feb 2008 09:20:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176811</link>
        <guid>http://xiancoder.javaeye.com/blog/176811</guid>
      </item>
      <item>
        <title>VE终于复活了！</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176812" style="color:red;">http://xiancoder.javaeye.com/blog/176812</a>&nbsp;
          发表时间: 2008年01月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>VE在Eclipse的众多项目中沉寂了一年的时间，现在终于有动作了！至少是计划已经放出了~真是让人欣慰啊！</p>  <p>我每天都要看Eclipse的各大新闻组，VE虽然说是沉寂了一年，但是新闻组里面还是比较热闹的，每天都有一两篇问题更新。</p>  <h4>Visual Editor Project 2007-2008 Roadmap</h4> <a name="Project_focus"></a>  <h3>Project focus </h3>  <p>In general, the main theme is to get the project back on track and in good shape. </p>  <p>From a goals perspective, we have the following alternatives: </p> <dl><dd>     <ol>       <li>focus exclusively on Swing, SWT and RCP and do it extremely well; deprecate everything else. </li>        <li>continue to provide a more generic editing framework, and supporting visual editing of non-java target such as GWT, HTML, Groovy, XForms, Web pages, EXSWT, etc. </li>     </ol>   </dd></dl>  <p>My head tells me to go with (1) and my heart with (2). </p>  <p><a name="Release_Timeline"></a></p>  <h3>Release Timeline </h3>  <ul>   <li>VE 1.3.0 Milestone 1:      <ul>       <li>Q1 2008, have a stable working VE based on Europa </li>     </ul>   </li> </ul>  <ul>   <li>VE 1.3.0 Milestone 2: Q2 2008      <ul>       <li>Investigate performance enhancements (single VM) </li>        <li>Fix major bugs </li>        <li>Add support for non Java visual target (Groovy contribution, XForms) </li>     </ul>   </li> </ul>  <ul>   <li>VE 1.3.0 Release: Q2 2008 </li> </ul>  <ul>   <li>VE 1.3.1 : maintenance for 1.3.0 Q3 2008 </li> </ul>  <ul>   <li>VE 1.3.2 : maintenance for 1.3.0 Q4 2008 </li> </ul>  <ul>   <li>VE 1.4.0 Milestone 1: Q2 2008      <ul>       <li>Work on Ganymede compatibility </li>     </ul>   </li> </ul>  <ul>   <li>VE 1.4.0 Milestone 2: Q3 2008 </li> </ul>  <ul>   <li>VE 1.4.0 Milestone 3: Q3 2008 </li> </ul>  <ul>   <li>VE 1.4.0 Release: Q4 2008 </li> </ul>  <p>Retrieved from &quot;<a href="http://wiki.eclipse.org/VE/Roadmap">http://wiki.eclipse.org/VE/Roadmap</a>&quot;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>我最期待的还是VE对于生成XML文件的扩展~加油啊~VE！</p>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176812#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jan 2008 09:37:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176812</link>
        <guid>http://xiancoder.javaeye.com/blog/176812</guid>
      </item>
      <item>
        <title>RAP官方老窝</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176813" style="color:red;">http://xiancoder.javaeye.com/blog/176813</a>&nbsp;
          发表时间: 2008年01月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>有朋友在blog中给我留言，说找到RAP的官方地址，现在我就在此公布一下，有兴趣的朋友可以去看看Demo。</p> <p>官方首页</p> <p><a href="http://www.eclipse.org/rap/" title="http://www.eclipse.org/rap/">http://www.eclipse.org/rap/</a></p> <p>Demo地址</p> <p><a href="http://www.eclipse.org/rap/demos.php" title="http://www.eclipse.org/rap/demos.php">http://www.eclipse.org/rap/demos.php</a>&nbsp;&nbsp; 此页面提供3个Demo，其中的SWT的官方Demo的RAP实现在RAP的发行包中，自己下载下来，自己RUN起来就能看到了；</p> <p>&nbsp;</p> <p>RAP开发领头公司</p> <li><a href="http://innoopract.com">Innoopract</a>&nbsp;&nbsp; 从开发人员列表和官方网站的支持力度上，此公司最强！（好像是家德国公司！） <li><a href="http://oneandone.com">1&amp;1</a> <li><a href="http://www.cas.de/English/Home.asp">CAS</a></li></li></li>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176813#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 13 Jan 2008 18:11:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176813</link>
        <guid>http://xiancoder.javaeye.com/blog/176813</guid>
      </item>
      <item>
        <title>一段来自ews.eclipse.technology.rap的关于Upload a file的代码</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176814" style="color:red;">http://xiancoder.javaeye.com/blog/176814</a>&nbsp;
          发表时间: 2008年01月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><tt>I impleted my File upload/download system with rap internal Browser + servlet.     <br />upload dialog&amp;#65306;</tt></p>  <pre>public class FileUploadDialog extends TitleAreaDialog {
	private Browser browser;</pre>

<pre>	public FileUploadDialog(Shell parentShell) {
		super(parentShell);
	}</pre>

<pre>	/**
	 * Create contents of the dialog
	 * @param parent
	 */
	@Override
	protected Control createDialogArea(Composite parent) {
		Composite area = (Composite) super.createDialogArea(parent);
		Composite container = new Composite(area, SWT.NONE);
		container.setLayout(new FillLayout());
		container.setLayoutData(new GridData(GridData.FILL_BOTH));</pre>

<br /><tt>browser = new Browser(container, SWT.NONE);
  <br />String url = &quot;<a href="http://"+rwt.getrequest/">http://&quot;+RWT.getRequest().getServerName()+&quot;:&quot;+RWT.getRequest().getServerPort()+&quot;/web/fileupload.jsp&quot;;

  <br />String html = &quot;&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;utf-8\&quot; ?&gt;&lt;html&gt;&lt;head&gt;&lt;title&gt;upload file&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&quot;+

  <br />&quot;&lt;form action=\&quot;&quot;+url+&quot;\&quot; enctype=\&quot;MULTIPART/FORM-DATA\&quot; method=\&quot;post\&quot;&gt;&lt;br /&gt;File Name:&lt;/br&gt;&lt;input type=\&quot;file\&quot;&quot;+

  <br />&quot; name=\&quot;filename\&quot;/&gt;&lt;br&gt;&lt;input type=\&quot;submit\&quot; value=\&quot;upload\&quot;/&gt;&lt;/form&gt;&lt;/body&gt;&lt;/html&gt; &quot;;

  <br />browser.setText(html);

  <br />setMessage(&quot;select a local file&quot;);

  <br />return area;

  <br />}</tt>

<pre>	/**
	 * Return the initial size of the dialog
	 */
	@Override
	protected Point getInitialSize() {
		return new Point(382, 280);
	}</pre>

<pre>	protected void configureShell(Shell newShell) {
		super.configureShell(newShell);
		newShell.setText(&quot;upload file&quot;);
	}</pre>

<pre>}</pre>

<pre><br />file upload sevlet:</pre>

<pre>public class FileUploadServlet extends HttpServlet {
	private static final long serialVersionUID = -7245361228773015964L;
	private String uploadPath = &quot;/upload/&quot;; // server file repository
	private String tempPath = &quot;/upload/tmp/&quot;; //temp file folder</pre>

<br /><tt>public void doPost(HttpServletRequest request, HttpServletResponse response)
  <br />throws IOException, ServletException {

  <br />try {

  <br />DiskFileUpload fu = new DiskFileUpload();

  <br />// max file size fu.setSizeMax(-1);

  <br />// buffer size

  <br />fu.setSizeThreshold(4096);

  <br />// temp path

  <br />fu.setRepositoryPath(tempPath);</tt>

<pre>			// get all uploa file
			List fileItems = fu.parseRequest(request);
			Iterator i = fileItems.iterator();
			while (i.hasNext()) {
				FileItem fi = (FileItem) i.next();
				// get the upload file name
				String fileName = fi.getName();
				String sep = System.getProperty(&quot;file.separator&quot;);
				int index = fileName.lastIndexOf(sep);
				if(index &gt;-1){
					fileName = fileName.substring(fileName.lastIndexOf(sep));
				}
				fi.write(new File(uploadPath + fileName));
				response.getWriter().println(fileName+&quot;upload success&quot;);
			}
		} catch (Exception e) {
		 //do something?
			e.printStackTrace();
		}
	}
	public void init() throws ServletException {
		if (!new File(uploadPath).isDirectory())
			new File(uploadPath).mkdirs();
		if (!new File(tempPath).isDirectory())
			new File(tempPath).mkdirs();
	}
}</pre>

<pre>registe servlet:</pre>

<pre><br />   public class HttpServiceTracker extends ServiceTracker {</pre>

<pre>       public HttpServiceTracker(BundleContext context) {
           super(context, HttpService.class.getName(), null);
       }</pre>

<br /><tt>public Object addingService(ServiceReference reference) {
  <br />final HttpService httpService = (HttpService) context

  <br />.getService(reference);

  <br />try {

  <br />//regist file upload servlet

  <br />HttpContext commonContext = new BundleEntryHttpContext(context

  <br />.getBundle(), fileFolder);

  <br />httpService.registerResources(fileContext, &quot;/&quot;, commonContext);</tt>

<br /><tt>Servlet adaptedJspServlet = new ContextPathServletAdaptor(
  <br />new FileUploadServlet(),

  <br />fileContext);

  <br />httpService.registerServlet(fileContext + &quot;/fileupload.file&quot;,

  <br />adaptedJspServlet, null, commonContext);</tt>

<pre>           } catch (Exception e) {
               e.printStackTrace();
           }
           return httpService;
       }</pre>

<br /><tt>public void removedService(ServiceReference reference, Object service) {
  <br />final HttpService httpService = (HttpService) service;

  <br />httpService.unregister(fileContext);

  <br />httpService.unregister(fileContext + &quot;/fileupload.jsp&quot;);

  <br />super.removedService(reference, service);

  <br />}

  <br />}</tt>

<pre>start servlet:</pre>

<pre>  add these code to the bundle start up method.
 	public void start(BundleContext context) throws Exception {
		super.start(context);
		plugin = this;
       httpServiceTracker = new HttpServiceTracker(context);
       httpServiceTracker.open();
       System.out.println(&quot;IM resource servlet started...&quot;);
	}</pre>

<p>&#160;</p>

<p>这个实现是在RAP中使用Browser+servlet实现的文件上传功能；</p>

<p>其实在RAP的cvs上已经放出了org.eclipse.rwt.widgets.upload，专用于上传的组件，测试了一下，效果还不错，有进度条提示；不过在IE6下，有点难看了，在FF3下不能使用；</p>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176814#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Jan 2008 13:17:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176814</link>
        <guid>http://xiancoder.javaeye.com/blog/176814</guid>
      </item>
      <item>
        <title>Eclipse-RCP开发者的福音</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176815" style="color:red;">http://xiancoder.javaeye.com/blog/176815</a>&nbsp;
          发表时间: 2008年01月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; Eclipse-RAP项目真的可以算是Eclipse-RCP开发者的福音，一套软件的开发成本，两套软件的特性~对于正在寻求C/S向B/S转移的公司来说，可以算是一个福音了。</p> <p>&nbsp;&nbsp;&nbsp; 公司最近正在做调整，打算将原有7大软件产品，在B/S上重新打造一番~前景很不错，市场价值非常大~我们所关心的并不是市场价值究竟有多大（有上面的大领导撑着，我们不用担心），我们关心的是，如何打破原有的B/S开发模式，让程序员们能高速的开发出需要系统，而且这些系统又能遵守共同的特点，原有的B/S开发模式只可能让程序员原来越不OO了，很有可能陷入JS的陷阱中。</p> <p>&nbsp;&nbsp;&nbsp; 我们把目光转移到了GWT上，他确实可以让JAVA开发人员只专注的写JAVA就可以了，一切都是它的事情了~但是最麻烦的事情，就是速度问题，编译的时候很慢，而且还提出了模块的概念，不好理解，放弃它的另一个最重要的原因是它并不是一个框架，只是一个工具集而已。</p> <p>&nbsp;&nbsp;&nbsp; 然后，我们发现了RAP-Rich Ajax Platform，从它的首页上并看不出什么特别，但是深入Demo，才真的发现别有洞天啊~原来一切来的都是那么简单~~~~它其实就是依照与Eclipse-RCP的基础运行时做了一套自己的基础运行时RAP，换句话说就是原本开发好的RCP项目，可以在仅增加一个扩展点的基础上，平滑的过度到RAP上，立即从一个C/S程序变成了一个B/S程序~真的很令人震惊！今天早上和同事配合，将我们几个月前做的4个插件，用了一早上的时间迁移到RAP上，几乎原有功能完全保留！</p> <p>&nbsp;&nbsp;&nbsp; 如果你也是用RCP做开发的话，建议你可以试试RAP，它会给你一想不到的体验！</p> <p>&nbsp;&nbsp;&nbsp; 需要注意的是，RAP是去年10月份才正式发布的1.0版本，所以还是有很多东西是没有，还是需要一段时间的等待，特别是在1.1发布后，几乎支持所有SWT的特性了~</p> <p>&nbsp;&nbsp;&nbsp; 为了深入的讨论RAP，我已经开放了Eclipse-RAP分类，慢慢会有更多的关于RAP的文章出现，努力丰富一下RAP的中文文档！</p>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176815#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Jan 2008 21:13:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176815</link>
        <guid>http://xiancoder.javaeye.com/blog/176815</guid>
      </item>
      <item>
        <title>惊叹吧！RAP！</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176816" style="color:red;">http://xiancoder.javaeye.com/blog/176816</a>&nbsp;
          发表时间: 2008年01月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>2007年10月份eclipse放出RAP-Rich Ajax Platform，这么长的时间过去，它的影响力还是不够~为什么，因为它的文档太少，资源太少，知道的人更少~</p>  <p>昨天，把玩了一下RAP，被它的思想震惊了~它是把Eclipse-RCP的思想带入了B/S的开发，它提供的不仅仅是Ajax的内容，更多的是提供了一个框架，一个可以同Eclipse-RCP框架互换的框架~</p>  <p>中规中矩开发好的RCP程序，可以在几乎不用改动任何代码的基础上增加2项配置，一个类以及一个底层框架，就可以完全过度到B/S上~</p>  <p><a href="http://www.blogjava.net/images/blogjava_net/leeguannan/WindowsLiveWriter/RAP_99FC/snap_4.gif"><img src="http://www.blogjava.net/images/blogjava_net/leeguannan/WindowsLiveWriter/RAP_99FC/snap_thumb_1.gif" height="189" alt="snap" width="409" /></a> </p>  <p>&#160;</p>  <p>我们的项目，用了半个小时改造完成的~</p>  <p>&#160;</p>  <p>RCP+RAP也许是一个新的方向~</p>
          <br/>
          <span style="color:red;">
            <a href="http://xiancoder.javaeye.com/blog/176816#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Jan 2008 10:57:00 +0800</pubDate>
        <link>http://xiancoder.javaeye.com/blog/176816</link>
        <guid>http://xiancoder.javaeye.com/blog/176816</guid>
      </item>
      <item>
        <title>打造仿淘宝注册的Text（二）</title>
        <author>soleegn</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiancoder.javaeye.com">soleegn</a>&nbsp;
          链接：<a href="http://xiancoder.javaeye.com/blog/176817" style="color:red;">http://xiancoder.javaeye.com/blog/176817</a>&nbsp;
          发表时间: 2008年01月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          上次贴了几张图片出来显摆，这次彻底公布代码~大家看看原理就好，有兴趣的朋友可以和我联系，把SWT里面的控件都封装一下，做一套验证框架出来~<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;&nbsp;1</span><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.glnpu.dmp.controls;<br />
</span><span style="color: #008080">&nbsp;&nbsp;2</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
</span><span style="color: #008080">&nbsp;&nbsp;3</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.SWT;<br />
</span><span style="color: #008080">&nbsp;&nbsp;4</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.events.ControlEvent;<br />
</span><span style="color: #008080">&nbsp;&nbsp;5</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.events.ControlListener;<br />
</span><span style="color: #008080">&nbsp;&nbsp;6</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.events.ModifyEvent;<br />
</span><span style="color: #008080">&nbsp;&nbsp;7</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.events.ModifyListener;<br />
</span><span style="color: #008080">&nbsp;&nbsp;8</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.events.PaintEvent;<br />
</span><span style="color: #008080">&nbsp;&nbsp;9</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.events.PaintListener;<br />
</span><span style="color: #008080">&nbsp;10</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.graphics.GC;<br />
</span><span style="color: #008080">&nbsp;11</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.graphics.Image;<br />
</span><span style="color: #008080">&nbsp;12</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.widgets.Composite;<br />
</span><span style="color: #008080">&nbsp;13</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.widgets.Display;<br />
</span><span style="color: #008080">&nbsp;14</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.swt.widgets.Text;<br />
</span><span style="color: #008080">&nbsp;15</span><span style="color: #000000"><img src="/Images/OutliningIndicators/None.gif" align="top" alt="" /><br />
</span><span style="color: #008080">&nbsp;16</span><span style="color: #000000"><img src="/Images/OutliningIndicators/ExpandedBlockStart.gif" id="Codehighlighter1_605_3354_Open_Image" onclick="this.style.display='none'; Codehighlighter1_605_3354_Open_Text.style.display='none'; Codehighlighter1_605_3354_Closed_Image.style.display='inline'; Codehighlighter1_605_3354_Closed_Text.style.display='inline';" align="top" alt="" /><img src="/Images/OutliningIndicators/ContractedBlock.gif" id="Codehighlighter1_605_3354_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_605_3354_Closed_Text.style.display='none'; Codehighlighter1_605_3354_Open_Image.style.display='inline'; Codehighlighter1_605_3354_Open_Text.style.display='inline';" align="top" alt="" style="display: none" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SuperText&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Composite&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;PaintListener,&nbsp;ControlListener</span><span id="Codehighlighter1_605_3354_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_605_3354_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;17</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" /><br />
</span><span style="color: #008080">&nbsp;18</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Text&nbsp;text;<br />
</span><span style="color: #008080">&nbsp;19</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;20</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Image&nbsp;tempCorner;<br />
</span><span style="color: #008080">&nbsp;21</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;22</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Image&nbsp;tempMsg;<br />
</span><span style="color: #008080">&nbsp;23</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;24</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Image&nbsp;warning_corner;<br />
</span><span style="color: #008080">&nbsp;25</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;26</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Image&nbsp;ok_corner;<br />
</span><span style="color: #008080">&nbsp;27</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;28</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Image&nbsp;error_corner;<br />
</span><span style="color: #008080">&nbsp;29</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;30</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Image&nbsp;msg_warning;<br />
</span><span style="color: #008080">&nbsp;31</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;32</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Image&nbsp;msg_ok;<br />
</span><span style="color: #008080">&nbsp;33</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;34</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Image&nbsp;msg_error;<br />
</span><span style="color: #008080">&nbsp;35</span><span style="color: #000000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;36</span><span style="color: #000000"><img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_861_928_Open_Image" onclick="this.style.display='none'; Codehighlighter1_861_928_Open_Text.style.display='none'; Codehighlighter1_861_928_Closed_Image.style.display='inline'; Codehighlighter1_861_928_Closed_Text.style.display='inline';" align="top" alt="" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_861_928_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_861_928_Closed_Text.style.display='none'; Codehighlighter1_861_928_Open_Image.style.display='inline'; Codehighlighter1_861_928_Open_Text.style.display='inline';" align="top" alt="" style="display: none" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_861_928_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_861_928_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;37</span><span style="color: #008000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Create&nbsp;the&nbsp;composite<br />
</span><span style="color: #008080">&nbsp;38</span><span style="color: #008000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;parent<br />
</span><span style="color: #008080">&nbsp;39</span><span style="color: #008000"><img src="/Images/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;style<br />
</span><span style="color: #008080">&nbsp;40</span><span style="color: #008000"><img src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;41</span><span style="color: #000000"><img src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" id="Codehighlighter1_977_1112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_977_1112_Open_Text.style.display='none'; Codehighlighter1_977_1112_Closed_Image.style.display='inline'; Codehighlighter1_977_1112_Closed_Text.style.display='inline';" align="top" alt="" /><img src="/Images/OutliningIndicators/ContractedSubBlock.gif" id="Codehighlighter1_977_1112_Closed_Image