<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>zjumty</title>
    <description></description>
    <link>http://zjumty.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>Scrum的世界: 我是一名开发人员</title>
        <author>zjumty</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zjumty.javaeye.com">zjumty</a>&nbsp;
          链接：<a href="http://zjumty.javaeye.com/blog/218579" style="color:red;">http://zjumty.javaeye.com/blog/218579</a>&nbsp;
          发表时间: 2008年07月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="postcontent">
<p>今天在Dzone上看到一篇blog: <a href="http://henneberke.wordpress.com/2008/07/22/scrum-world-i-am-a-developer/">Scrum World: I am a&nbsp;developer<br />
</a>
</p>
<p>以一个开发人员的视角写了scrum中的一次sprint中的一天做的事情. 挺有意思的, 翻译了一下给大家看看, 上面的原文链接有可能进不去, 我是通过国外代理进去的wordpress.com好像一直被挡在了长城外面啊.</p>
<h1>Scrum的世界: 我是一名开发人员<br />
</h1>
<ul>
<li>早上开始工作的第一件事情, 我检查了一下scrum看板, 看看&quot;进行中&quot;栏中有没有分配我的事项.</li>
<li>结果我发现我没有任务事项在进行中, 所以我需要挑选一个新的事项去做.</li>
<li>根据事项的重要度, 我在&quot;代办&quot;事项列表中挑选了重要度最高的事项,把它放到&quot;进行中&quot;的那栏.</li>
<li>我开始了我的任务, 遵照一些最佳实践, 写了单元测试,集成测试.</li>
<li>当我完成了这些事情, 我需要有人结对审查我做的东西, 所以把事项转移到了&quot;审查&quot;栏中.</li>
<li>我花了些时间来审查指定给我的事项, 这样我的同事们可以做继续他们的事项.</li>
<li>我刚刚做做完事项被从&quot;审查&quot;栏退回来了, 我需要做一些小的修改.</li>
<li>在做了一些改变以后, 我更新了&quot;审查&quot;栏中的文件, 然后很快结对审查的同事告诉我OK了.</li>
<li>我把这个事项移动到了&quot;测试&quot;栏中.</li>
<li>这一天工作结束之前, 我把做的内容部署到了开发环境中. 在这个环境中包括了当前所有的&quot;测试&quot;栏中的内容, 当然也包括了我做的内容.<br />
</li>
</ul>
<h2>第二天...</h2>
<ul>
<li>像往常一样, 我的工作并没有真正的完成, 因为昨天测试团队在我的事项中发现了一个bug.</li>
<li>我修正了这个bug, 并且确认了单体测试和集成测试都没有问题.</li>
<li>然后我把修正后的这个事项放到了&quot;审查&quot;栏中, 几个小时后, 审查通过了.</li>
<li>我把修正后的版本部署到开发环境中.</li>
<li>过了一会我得到通知, 测试团队已经把这个事项转移到了&quot;已完成&quot;栏中.</li>
<li>我认识到使用scrum是一件多么美好的事情, 我和团队中的每个成员合作, 来达到我们共同的目标.</li>
</ul>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://zjumty.javaeye.com/blog/218579#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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Jul 2008 14:32:39 +0800</pubDate>
        <link>http://zjumty.javaeye.com/blog/218579</link>
        <guid>http://zjumty.javaeye.com/blog/218579</guid>
      </item>
      <item>
        <title>用JakartaCommon的net组件来做ftp下载 </title>
        <author>zjumty</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zjumty.javaeye.com">zjumty</a>&nbsp;
          链接：<a href="http://zjumty.javaeye.com/blog/139300" style="color:red;">http://zjumty.javaeye.com/blog/139300</a>&nbsp;
          发表时间: 2007年11月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这几天一个同事要在项目里实现用ftp下载文件. 遇到了很多问题. 于是我推荐他用Jakarta-Commons项目中的net组件在实现. 其实之前我也没有实际用过, 稍稍看了一下文档,知道里面有个ftp包能完成相关的操作. 于是我的同事就兴致勃勃的拿去用了. 可用了以后才发现有很多问题, 搞得焦头烂额. 经过我们的努力, 终于把问题都解决了, 下面我把遇到的问题和解决方案写下来, 以备其他想要用common-net包的朋友参考. <br />
<br />
首先把代码贴出来:
<p> java 代码</p>
<div class="dp-highlighter">
<div class="bar"> </div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> ClientTest {   </span></span></li>
    <li class=""><span>    </span><span class="keyword">public</span><span> </span><span class="keyword">static</span><span> </span><span class="keyword">void</span><span> main(String[] args) {   </span></li>
    <li class="alt"><span>        String url = </span><span class="string">&quot;172.17.1.38&quot;</span><span>;   </span></li>
    <li class=""><span>        String user = </span><span class="string">&quot;test&quot;</span><span>;   </span></li>
    <li class="alt"><span>        String pwd = </span><span class="string">&quot;test&quot;</span><span>;   </span></li>
    <li class=""><span>  </span></li>
    <li class="alt"><span>        FTPClient ftp = </span><span class="keyword">new</span><span> FTPClient();   </span></li>
    <li class=""><span>        ftp.setControlEncoding(</span><span class="string">&quot;GBK&quot;</span><span>);   </span></li>
    <li class="alt"><span>        FTPClientConfig conf = </span><span class="keyword">new</span><span> FTPClientConfig(FTPClientConfig.SYST_NT);   </span></li>
    <li class=""><span>        conf.setServerLanguageCode(</span><span class="string">&quot;zh&quot;</span><span>);   </span></li>
    <li class="alt"><span>        ftp.configure(conf);   </span></li>
    <li class=""><span>  </span></li>
    <li class="alt"><span>        </span><span class="keyword">try</span><span> {   </span></li>
    <li class=""><span>            ftp.connect(url);   </span></li>
    <li class="alt"><span>            </span><span class="keyword">if</span><span> (ftp.login(user, pwd)) {   </span></li>
    <li class=""><span>                </span><span class="keyword">int</span><span> reply = ftp.getReplyCode();   </span></li>
    <li class="alt"><span>                </span><span class="keyword">if</span><span> (!FTPReply.isPositiveCompletion(reply)) {   </span></li>
    <li class=""><span>                    ftp.disconnect();   </span></li>
    <li class="alt"><span>                    System.out.println(</span><span class="string">&quot;disconnect&quot;</span><span>);   </span></li>
    <li class=""><span>                } </span><span class="keyword">else</span><span> {   </span></li>
    <li class="alt"><span>                    ftp.enterLocalPassiveMode();   </span></li>
    <li class=""><span>                    ftp.setFileType(FTP.BINARY_FILE_TYPE);   </span></li>
    <li class="alt"><span>  </span></li>
    <li class=""><span>                    File dir = </span><span class="keyword">new</span><span> File(</span><span class="string">&quot;down&quot;</span><span>);   </span></li>
    <li class="alt"><span>                    </span><span class="keyword">if</span><span> (!dir.exists()) {   </span></li>
    <li class=""><span>                        dir.mkdirs();   </span></li>
    <li class="alt"><span>                    }   </span></li>
    <li class=""><span>  </span></li>
    <li class="alt"><span>                    String[] names = ftp.listNames();   </span></li>
    <li class=""><span>                    </span><span class="keyword">for</span><span> (String name : names) {   </span></li>
    <li class="alt"><span>                        File file = </span><span class="keyword">new</span><span> File(dir.getPath() + File.separator + name);   </span></li>
    <li class=""><span>                        </span><span class="keyword">if</span><span> (!file.exists()) {   </span></li>
    <li class="alt"><span>                            file.createNewFile();   </span></li>
    <li class=""><span>                        }   </span></li>
    <li class="alt"><span>                        </span><span class="keyword">long</span><span> pos = file.length();   </span></li>
    <li class=""><span>                        RandomAccessFile raf = </span><span class="keyword">new</span><span> RandomAccessFile(file, </span><span class="string">&quot;rw&quot;</span><span>);   </span></li>
    <li class="alt"><span>                        raf.seek(pos);   </span></li>
    <li class=""><span>                        ftp.setRestartOffset(pos);   </span></li>
    <li class="alt"><span>  </span></li>
    <li class=""><span>                        InputStream is = ftp.retrieveFileStream(name);   </span></li>
    <li class="alt"><span>                        </span><span class="keyword">if</span><span> (is == </span><span class="keyword">null</span><span>) {   </span></li>
    <li class=""><span>                            System.out.println(</span><span class="string">&quot;no such file:&quot;</span><span> + name);   </span></li>
    <li class="alt"><span>                        } </span><span class="keyword">else</span><span> {   </span></li>
    <li class=""><span>                            System.out.println(</span><span class="string">&quot;start getting file:&quot;</span><span> + name);   </span></li>
    <li class="alt"><span>  </span></li>
    <li class=""><span>                            </span><span class="keyword">int</span><span> b;   </span></li>
    <li class="alt"><span>                            </span><span class="keyword">while</span><span> ((b = is.read()) != -</span><span class="number">1</span><span>) {   </span></li>
    <li class=""><span>                                raf.write(b);   </span></li>
    <li class="alt"><span>                            }   </span></li>
    <li class=""><span>                            </span><span class="keyword">if</span><span> (ftp.getReply() == FTPReply.CODE_226) {   </span></li>
    <li class="alt"><span>                                System.out.println(</span><span class="string">&quot;done!&quot;</span><span>);   </span></li>
    <li class=""><span>                            }   </span></li>
    <li class="alt"><span>                            is.close();   </span></li>
    <li class=""><span>                        }   </span></li>
    <li class="alt"><span>                        raf.close();   </span></li>
    <li class=""><span>                    }   </span></li>
    <li class="alt"><span>                }   </span></li>
    <li class=""><span>                ftp.logout();   </span></li>
    <li class="alt"><span>            }   </span></li>
    <li class=""><span>        } </span><span class="keyword">catch</span><span> (IOException e) {   </span></li>
    <li class="alt"><span>            e.printStackTrace();   </span></li>
    <li class=""><span>        }   </span></li>
    <li class="alt"><span>    }   </span></li>
    <li class=""><span>}  </span></li>
</ol>
</div>
<p><br />
<strong>一, 文件名中文乱码问题.<br />
</strong>开始知道能用FTPClient的listNames方法得到当前目录下所有文件的列表. 但是发现中文文件名是乱码. 默认情况下FTPClient使用UTF-8字符集作为和服务器通讯的编码集. 而我们的ftp服务器是在中文windowsXP上装的ServU. 所有使用GBK做为通讯编码集. 经过查找api文档, 我看到了setControlEncoding方法, 试了一下,果然好使. 于是这个问题就解决了:<br />
第8行: ftp.setControlEncoding(&quot;GBK&quot;)<br />
至于conf.setServerLanguageCode(&quot;zh&quot;)对这个有什么影响,我还没有验证. 但是只有这句是不行的.<br />
<br />
<strong>二, 传输binary文件</strong>, 由于FTPClient默认使用ASCII作为传输模式, 所有不能传输二进制文件. 通过<br />
ftp.setFileType(FTP.BINARY_FILE_TYPE)个可以解决这个问题, 但是要在login以后执行. 因为这个方法要向服务器发送&quot;TYPE I&quot;命令.<br />
开始的时候用的是<font face="Courier New">setFileTransferMode</font>, 不过不好使. 它会执行 MODE I命令, 服务器不接受.<br />
<br />
<strong>三, 用被动模式传输</strong>: enterLocalPassiveMode()这个到不用在login之后执行, 因为它只改变FTPClient实例的内部属性.<br />
<br />
<strong>四, 断点续传</strong>. 心想应该有支持吧, 于是查API结果找到了setRestartOffset()方法, 试了一下,果真好使. 用RandomAccessFile配合使用, 实现起来还是蛮简单的.</p>
<p><strong>五, 只能传一个文件!!</strong><br />
不知道大家有没有遇到这个问题, 传输第一个文件好使, 后面的的retrieveFileStream(name)都是返回null. 这个实在是令人头痛的问题, 难不成要传一个文件重新建立一次连接? 那样也太土了吧. 但是文档里也没有写, 来点狠的,debug它的源码, 看看它究竟做了什么事情. 首先看一下ftp服务器的日志, 发现日志没问题, 过来的命令和reply都是正确的, 但是发现第一个文件以后没有执行RETR命令. 于是跟踪PASV命令的reply代码,发现不是227,而服务器上的日志明明返回的是227. 难道是FTPClient解析Reply出问题了. 进一步跟踪发现了问题, 原来在一个文件传输过程中会产生两个Reply:<br />
150 Opening BINARY mode data connection for a.sql (19890 Bytes).<br />
226 Transfer complete.<br />
而FTPClient自动消费掉一个,于是解析Reply就发生了错位, 下一个命令的会解析266那条. 接下来的命令都不是解析自己的Reply而是前一次命令的. 所有在PASV命令的Reply码就不对了, FTPClient也就不会执行接下来本应该执行RETR命令.<br />
他不消费,我们来消费吧. 于是在文件传输完成以后, 主动调用一次getReply()把接下来的226消费掉. 这样做是可以解决这个暂时的问题, 但不知道在其他的ftp操作上会不会也有类似的情况. FTPClient这点可做的不大好. </p>
<p><strike>对于上面这个问题, 我本来想修改一下FTPClient这个类来彻底解决问题. 结果发现自己也想不出好办法. 最后还是放弃了.</strike></p>
今天才发现,原来FTPClient有个<strong>completePendingCommand</strong>()方法就是用来干这件事情的!
          <br/>
          <span style="color:red;">
            <a href="http://zjumty.javaeye.com/blog/139300#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</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, 08 Nov 2007 19:44:41 +0800</pubDate>
        <link>http://zjumty.javaeye.com/blog/139300</link>
        <guid>http://zjumty.javaeye.com/blog/139300</guid>
      </item>
      <item>
        <title>ubuntu7.04上配置proftpd手记</title>
        <author>zjumty</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zjumty.javaeye.com">zjumty</a>&nbsp;
          链接：<a href="http://zjumty.javaeye.com/blog/73200" style="color:red;">http://zjumty.javaeye.com/blog/73200</a>&nbsp;
          发表时间: 2007年04月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>proftpd是什么，看名字就知道它应该和ftp服务有关，具体内容可以到这里查看<a href="http://www.proftpd.org/">http://www.proftpd.org/</a><br />
<br />
首先看看自己的及其上有没有proftpd。在终端里输入<font color="#0000ff">proftpd</font>，如果没有ubuntu告诉你现在系统里没有proftpd，你需要用apt-get来安装。那好吧，就按他说的做。<br />
<br />
<font color="#0000ff">sudo apt-get install proftpd</font><br />
<br />
proftpd很小，几乎是瞬间装完。我用的cn99的源，速度非常快。<br />
<br />
然后查看文档得知proftpd有两种运行模式：Standalone 和 inetd<br />
<br />
standalone比较耗资源适合大访问量，inetd会为每一个请求启动一个进程，平时不用的时候不耗资源，我就是自己用用，所以选择inetd模式。<br />
<br />
<font color="#0000ff">cat /etc/inetd.conf<br />
</font><br />
结果什么都没有。<br />
<br />
进一步查看文档得知，现在的linux基本上用xinetd取代inetd了。但是我在系统里找不到xinetd。恩~，明白了：<br />
<br />
<font color="#0000ff">sudo apt-get install xinetd</font><br />
<br />
又是瞬间完成。<br />
<br />
进入/etc/xined.d目录，看见了几个配置好的项目。我们在加一个ftp吧。<br />
<br />
<font color="#0000ff">sudo vim ftp<br />
</font><br />
service ftp<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flags = REUSE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket_type = stream<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; instances = 50<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wait = no<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user = root<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server = /usr/sbin/proftpd<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_on_success = HOST PID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_on_failure = HOST ATTEMPT <br />
}<br />
<br />
具体是什么意思？ 其实我也是半懂不懂的，想去xinetd的主页上看看，结果找不到页面。<br />
<br />
然后就是配置proftpd本身了。<br />
<br />
proftpd的配置文件在<font color="#006400">/etc/proftpd/proftpd.conf<br />
<br />
</font>不愧&ldquo;pro&rdquo;这个名字，看上去非常&ldquo;专业&rdquo;。很复杂，官方主页上文档也非常复杂。<br />
<br />
我现把匿名用户登录那部分打开了。<br />
</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">Anonymous</span><span>&nbsp;~ftp</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>....&nbsp;&nbsp;</span></li>
    <li class="alt"><span>....&nbsp;&nbsp;</span></li>
    <li class=""><span>....&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">Anonymous</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
<p> 这段应该在proftpd.conf的最后面。<br />
<br />
对于这个配置文件，如果你用过apache httpd，应该看上去很眼熟。<br />
<br />
然后重启一下xinetd<br />
<br />
<font color="#0000ff">sudo service xinetd restart</font><br />
<br />
结果告诉我没有service这个命令。<br />
<br />
同样：<br />
<br />
<font color="#0000ff">sudo apt-get debian-helper-scripts<br />
</font><br />
重启完服务器后，看看ftp已经可以登录了。如果不能登录，你可以试试一下方法看看问题出在哪里。<br />
<br />
到/etc/init.d目录下直接调用xinetd start看看有什么信息出来，如果没有什么有用信息。<br />
<br />
修改一下xinetd在<br />
<br />
&nbsp;&nbsp; start)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; checkportmap<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo -n &quot;Starting internet superserver: xinetd&quot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start-stop-daemon --start --quiet --background --exec /usr/sbin/xinetd -- -pidfile /var/run/xinetd.pid -filelog /var/log/xinetd.log -f /etc/xinetd.conf $XINETD_OPTS<br />
<br />
这样再次启动xinetd，你就可以在/var/log目录下找到xinetd.log文件。看看启动xinetd过程中出现了什么问题。</p>
<h2 dir="ltr" style="margin-right: 0px;">接下来就是研究proftpd本身的配置了，几个经典命题需要考虑：</h2>
<ul>
    <li>虚拟目录  </li>
    <li>用户权限  </li>
    <li>流量限制</li>
</ul>
现在虽然能登录了，但是每次登录时间都特别长，开始还以为是用了inetd模式的问题，后来上网找了一下，原来是proftpd在每次都通过DNS查找登录者的网址是什么。<br />
<br />
所以要添加两个选项：<br />
IdentLookups&nbsp;&nbsp; off <br />
UseReverseDNS&nbsp; off
<h2>中文乱码问题</h2>
<p>FlashFxp登录，结果发现中文文件名都变成了乱码。因为我的ubuntu设定的字符集为utf-8。用FileZilla，可以在站点管理的高级设定中强制使用UTF-8，就能看到中文了。可以FlashFXP我没早到相关的设置。<br />
<br />
接下来就是让我的用户组terry可以访问/media下的文件，其实就是挂载的原来的NTFS分区。<br />
</p>
<p><directory></directory></p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">Directory</span><span>&nbsp;/media/*</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Limit</span><span>&nbsp;ALL</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;AllowGroup&nbsp;terry&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp; <span class="tag"><!--</span--><span class="tag-name"></span></span></span><span><span class="tag">&lt;/</span></span><span><span class="tag"><span class="tag-name">Limit</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span><span class="tag">&lt;/</span></span><span><span class="tag"><span class="tag-name">Directory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://zjumty.javaeye.com/blog/73200#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><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>Sun, 22 Apr 2007 15:48:46 +0800</pubDate>
        <link>http://zjumty.javaeye.com/blog/73200</link>
        <guid>http://zjumty.javaeye.com/blog/73200</guid>
      </item>
  </channel>
</rss>