<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>午夜咖啡</title>
    <description></description>
    <link>http://jolestar.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>给辽宁女辩护一下</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/195913" style="color:red;">http://jolestar.javaeye.com/blog/195913</a>&nbsp;
          发表时间: 2008年05月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>虽然对辽宁女的行为非常不齿，但我看见众多网友简直恨不能食其肉，寝其皮，我觉得过了。 
<br />
<br />
先讲个故事：一个人在一个严肃的地方发现了一坨屎，他不相信这地方还有屎，好奇，所以尝了一下。结果发现真是屎。他非常愤怒，立刻给他的一个朋友
说，xxx地方有坨屎。他朋友看了一下，也不相信那么严肃的地方竟然有屎，于是也尝了一下。结果还真是屎，于是又给别的朋友传。结果一传十，十传百，所有
的人都来并且尝了一下屎。于是大家很愤怒，怎么办？找那个拉屎的人啊。通过DNA监测啊，等等的高级技术，终于找到了这拉屎的人，大家很愤怒，有人要求把
这个人砍了，有人要剥皮，有人说... <br />
讲这个故事啥意思呢？这个辽宁女胡说的视频，相当于她在不适当的时候不适当的地方拉了坨屎，结果有人发现了呢，你不去看它，不去传它不就行
了，偏要一传十十传百，传得全中国人都去尝一下那坨屎有多臭才行。比喻可能粗俗了点，但估计大家看到那个视频的恶性程度比吃屎还难受。所以我只知道有这么
个事情，没看。大家现在说一下，这事情炒这么热，传播者是不是有点关系呢？要是最初的那几个人别传，让其屎自灭，不就没事了么。 <br />
<br />
<br />
下面我从法律上分析一下。 
<br />
<br />
大家只是觉得这个人可恶，应该抓了。但抓了怎么弄？你是否要判刑？应该判什么刑？总不能不判刑就把人家关起来吧？也总不能由于其触犯众怒就判刑吧。所以现探讨一下有啥罪可判。 
<br />
<br />
1.有人说侮辱罪。说那个辽宁女的言论伤害了受灾人民的感情，侮辱了受灾人民的人格，这个确实，但在法律上，你需要有个具体的受害人。当然你说每
个受灾人民都是受害者，每个中国人民都是受害者，但这样你就泛化受害者了。侮辱罪案件属于自诉案件，也就是必须有人告，法院才能受理。谁去告？受灾人民选
举个代表去告？另外，这个罪的客体，也就是受害者必须是个人。不能是法人，团体，或者组织。受灾人民或者中国人民这样的概念更是一种范围概念。就好比网上
老有人说河南人怎么怎么了，广州人怎么怎么了，上海人怎么怎么了，其中也不乏恶毒的言论，难道你要组织当地人民起诉那些人？ <br />
<br />
2。危害国家安全罪啥的。好歹没到这么严重的程度吧？辽宁女也没号召人们推翻政府啥的，即便号召了，没有实现能力，基本不会对实际造成影响的，也
不会触犯刑法。另外，反面来说如果一个辽宁女的这么弱智的视频就危害国家安全了，那我们的国家也太脆弱了吧？如果说她的言论会降低大家的救灾的积极性，那
你也太高估她的能力和太低估我们的救灾热情了吧？ <br />
<br />
总结一下，这个辽宁女大家最好当其脑残，大可不理她的言论。你越理她，反倒助长她的脑残程度。你越正经的对待，反倒把大家拉到和她一个层次上了。
所以这个事情最多按治安管理处罚一下。当然，这是按照法律的情况下。中国很多事情不按法律行事的，我也更不希望看到一个生命就仅仅因为触犯了众怒就被判刑
或者剥夺生命，即便是她那样藐视灾区人民的生命，因为如果这样做，我们跟她的区别在哪儿？ <br />
再想想我们文革时候多少人仅仅因为触犯众怒就被处死，有人仅仅说了句&ldquo;毛主席也会犯错&rdquo;，就被处死。当然，你可以说这两件事情有区别，但当时的人就认为批评毛主席就是在侮辱全国人民。 
<br />
<br />
另附一个美国的案例： 
<br />
一个美国人不知道怎么的，把美国国旗缝在屁股上了。还有一个美国人脑子潮，在大庭广众之下焚烧了美国国旗。这两人都被起诉，官司都打到最高法院。
起诉方的理由是烧国旗，和把国旗缝在屁股上是对美国人民的侮辱。但这里遇到一个问题就是如果说他们侮辱了美国人民，那就说明他们是在表达一种意思,你限制
意思表达就是限制言论自由，而言论自由在美国是最根本的权利，对言论自由的限制被控制在非常严格的范围内。最后最高法院判了无罪。肯特大法官在判决书中
说：&ldquo;本案最能显示运用司法权力所经常遇到的困难&hellip;&hellip;国旗历来表达着美国共享的信念&mdash;&mdash;对法律、和平及维系人类精神的自由的信念。本案的决定迫使我们承认
坚持这些信念所要付出的代价。一项痛苦而又基本的事实是：国旗保护那些蔑视它的人。&rdquo;每每读到这段话我都能深深感到一种理性的精神。还有一个布伦南大法官
说：&ldquo;没有人会认定，这样一个无名之辈的这一姿态会改变我们民族对其国旗的看法&rdquo;。 <br />
<br />
所以最后我要说一句：&ldquo;没有人会认为这样一个无民之辈的这一姿态会改变我们国家对抗灾难的信心,大家大可不必理她。&rdquo;。 
<br />
在中国来说，争取言论自由比处置这么一个脑残更重要，如果为了处置她，导致我们的言论自由被限制，我们就得不偿失了。 
<br />
<br />
ps:本人的法律属于半调子，抛砖引玉，希望达人给意见。</p>
<p>&nbsp;</p>
<p>讨论在这里：</p>
<p><a href="http://earthquake.group.javaeye.com/group/topic/5620">http://earthquake.group.javaeye.com/group/topic/5620</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/195913#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</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, 23 May 2008 10:16:39 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/195913</link>
        <guid>http://jolestar.javaeye.com/blog/195913</guid>
      </item>
      <item>
        <title>拔一毛而利天下，为不为？谁说了算?－－“强盗捐款”可以休矣
</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/195911" style="color:red;">http://jolestar.javaeye.com/blog/195911</a>&nbsp;
          发表时间: 2008年05月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近因为灾区捐款的事情，天涯杂谈直接就成了骂人专区。众多人批评某某人吝啬，一毛不拔，或者拔的毛太少。他们排出捐款排行榜，再排出名人名企排行榜，一
一对照，还要从各方面搜集信息，计算人家的年收入，再按照某种道德标准，计算出这些人或者企业应该捐多少。没捐的，捐少的，则指名道姓骂其没有良心，问其
为什么不做榜样，乃至怀疑其是否为中国人，更有甚者打算和人家的祖宗发生性关系。
<br />
　　
<br />
　　 本来我这些天对这个问题我一般只看不说，灾难面前，大家心急如焚，说些过激的话情有可原。但眼看这个势头越来越火，qq上，论坛上，各大门户的评论上，到处都是，我忍不住想说一点看法。
<br />
　　
<br />
　　 这些人，在国家遭受如此灾难之际，在没有直接的利益动机的情况下，耗神费时，想为国家，为灾区人民，谋求更多捐款，其心可嘉，但这种行为太恶劣，不但无助于捐款，反倒帮倒忙（如果想骂我，先把下面的内容看完）。
<br />
　　
<br />
　　
<br />
　　
<br />
　　
<br />
　　 试问：拔一毛而利天下，为不为？谁说了算？
<br />
　　
<br />
　　
<br />
　　
<br />
　　
<br />
　　 拔一毛而利天下之说是杨朱的理论。后来演化成一毛不拔的成语，形容人吝啬。我们的教科书上也说杨是自私的个人主义代表。于是乎，杨先生蒙冤几千年。我们这里探讨一下，杨先生说的有没有道理。
<br />
　　
<br />
　　
<br />
　　
<br />
　　
<br />
　　 下面的话出自《列子》
<br />
　　
<br />
　　
<br />
　　
<br />
　　禽子问杨朱曰：&ldquo;去子体之一毛以济一世，汝为之乎？&rdquo;杨子曰：&ldquo;世固非一毛之所济。&rdquo;禽子曰：&ldquo;假济，为之乎？&rdquo;杨子弗应。禽子出语孟孙阳。
孟孙阳曰：
&ldquo;子不达夫子之心，吾请言之。有侵苦肌肤获万金者，若为之乎？&rdquo;曰：&ldquo;为之。&rdquo;孟孙阳曰：&ldquo;有断若一节得一国。子为之乎？&rdquo;禽子默然有间。孟孙阳曰：&ldquo;一
毛微于肌肤，肌肤微于一节，省矣。然则积一毛以成肌肤，积肌肤以成一节。一毛固一体万分中之一物，奈何轻之乎？&rdquo;禽子曰：&ldquo;吾不能所以答子。然则以子之言
问老聃、关尹，则子言当矣；以吾言问大禹、墨翟，则吾言当矣。&rdquo;孟孙阳因顾与其徒说他事。
<br />
　　
<br />
　　
<br />
　　
<br />
　　
<br />
　　拔一毛而利天下，为不为？这个好像很容易回答，一般人都会答&ldquo;为&rdquo;。那拔两毛乃至所有的毛呢？损一块皮肤呢？折一手足呢？砍一头呢？这就不是
所有的人都会回答&ldquo;为&rdquo;了。如果你问墨翟，墨翟一定会回答&ldquo;为&rdquo;。如果你问老聃，他肯定回答&ldquo;不为&rdquo;。如果问孔子呢？孔子说要&ldquo;中庸&rdquo;，不能极端，给至亲
可以拔的多一点，关系越远，拔的越少。至此，好像孔子的解决方案最适合，但其实我们的先哲们好像没有注意到一个问题：这个毛拔不拔，拔多少，谁说了算？如
果别人说了算，哪怕这个别人是民主的大多数，拔一毛，为，两毛，为，乃至砍一头，为，两头，为，最后的结果就是51%的人把49%的人的头砍掉，然后再从
原来的
51%中分离出49%，继续砍。这样恶劣的结果可能是大家都不希望的，然而问题在哪儿呢？怎么防止呢？倒推回去，最后发现问题就在刚开始拔那一毛的时候。
也就是说，当天下的人一起民主表决，大家都让你拔一毛而利天下，问你为不为？你要响亮的回答：不为。这根毛是我的基本权利，拔不拔是我的事情，即便是大多
数，也不能侵犯我基本权利。这不仅仅是为了维护我个人的基本权利，而且是为了维护所有人的基本权利。
<br />
　　
<br />
　　
<br />
　　
<br />
　　道德一般可以分为利人同时利己，损己利人这样两种道德。如果用&ldquo;道德暴力&rdquo;或者&ldquo;制度暴力&rdquo;强迫实现的道德，本身就是不道德的，不仅有损于道
德，并且造成很恶劣的结果。举个例子。大家看爱情故事，遇到因为自己的爱人逝去，而怀念一辈子甚至自杀殉情的，很感动，感觉那是爱的一种很高境界。但如果
把这个很高的境地强制应用到一般人上，遇到爱人逝去的，你就去追问人家，&ldquo;你怎么还不殉情？&rdquo;，你说道德么？如果这个形成了&ldquo;道德暴力&rdquo;，这个人怎么办？
如果这个最后形成了一个制度，不就成了灭绝人性的古代的贞洁烈妇制度了么？这两件事情虽然没有什么关联，但事不同而理同。
<br />
　　
<br />
　　一个人为什么要做善事？大家为什么要给灾区捐款？不就是为了援助灾区并且自己也获得一种欣慰的感觉，从而在心灵上达到升华么，可以说这是人的
一种自我实现的需求。但是你们这种人横空出世，指责这个，指责那个，你用&ldquo;道德暴力&rdquo;剥夺了别人对善的感觉，而抬高了你自己的道德制高点，仿佛他们的捐款
你这样的人促进产生的，你说你道德么？打个比方，如果一个强盗，抢劫了别人的钱，然后捐献给灾区，你觉得这强盗怎么样？你们正在扮演这种强盗的角色你知道
么？只不过你用的工具是&ldquo;道德暴力&rdquo;，你抢劫的是别人的善果。
<br />
　　
<br />
　　
<br />
　　
<br />
　　
<br />
　　说到这里，可能有人会骂我扯远了。不是在说捐款的事情么，乱扯啥。好，我们就用捐款来做例子。刚有个朋友好像指责周星驰，说他自己都捐了100块，是自己月生活费的1/3.而周星驰为什么还不表示？还有个朋友问：刘德华怎么才捐了10万？我都捐了我1/2月工资。
<br />
　　
<br />
　　这样的朋友不妨思考一下，假如你周围的同学或者同事，捐了自己整个一个月的生活费，或者一个月的月工资，然后跑到你面前，站在道德的制高点上
指责你：&ldquo;你怎么捐了这么点？你的良心哪儿去了？&rdquo;这时候，你作何感想？那些只捐10多块的人做何感想？你怎么办？再加钱？要是再出来个捐了1年生活费的
呢？以后要是再遇到捐款，你还敢捐么？最后会有什么结果？最后的结果就是只有那个捐的最多的人敢捐款。捐款这种事情，本来就是汇细流而成江河，恰恰是你们
这种人，把细流截断，哪来江河？可以说你们不仅没有促进捐款，并且是帮了倒忙，并且把捐款带入一个恶性循环。你们反省反省吧。
<br />
　　
<br />
　　
<br />
　　好了。先写这么多。总结一下：无论从权利角度，道德角度，还是捐款赈灾角度，这种&ldquo;强盗捐款&rdquo;的事情可以休矣。 
<br />
<br />
<a href="http://cache.tianya.cn/publicforum/content/free/1/1248917.shtml" rel="nofollow" target="_blank">http://cache.tianya.cn/publicforum/content/free/1/1248917.shtml</a>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/195911#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 23 May 2008 10:14:57 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/195911</link>
        <guid>http://jolestar.javaeye.com/blog/195911</guid>
      </item>
      <item>
        <title>Dspace架设经验</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/180666" style="color:red;">http://jolestar.javaeye.com/blog/180666</a>&nbsp;
          发表时间: 2008年04月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.Dspace是什么?<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://dspace.org/">dspace.org</a><br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The DSpace digital repository system captures, stores, indexes, preserves, and distributes digital research material.<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单一点,Dspace是一个数字图书馆系统,一般用于研究机构储存和发布研究资源.<br /><br /> 2.Dspace的安装:<br /> &nbsp;&nbsp; windows <br /> &nbsp;&nbsp;&nbsp; <a href="http://wiki.dspace.org/index.php/DSpaceOnWindows">wiki.dspace.org/index.php/DSpaceOnWindows</a><br /> &nbsp;&nbsp;&nbsp; linux:<br /> &nbsp;&nbsp;&nbsp; <a href="http://wiki.dspace.org/index.php/Installing_DSpace_on_Ubuntu_6.06_%28LTS%29">wiki.dspace.org/index.php/Installing_DSpace_on_Ubuntu_6.06_%28LTS%29</a><br /><br /> 3.Dspace架设的一些经验<br /> &nbsp;&nbsp;&nbsp;&nbsp; 我当时使用的版本是dspace3.2<br /> &nbsp;&nbsp;&nbsp; 中文问题<br /> &nbsp;&nbsp;&nbsp;&nbsp; Dspace会把每个item的标题和作者的首字母截取下来,做为按字母索引.但这对中文就不起作用了.所以我用pinyin4j这个开源项目,把标题和作者转换为拼音,然后截取首字母.<br /> &nbsp;&nbsp;&nbsp;&nbsp; 邮件验证问题<br /> &nbsp;&nbsp;&nbsp;&nbsp; Dspace中只让用户设置邮件服务器,但并没让设置用户和密码,所以你必须用自己的邮件服务器.这个可以修改一下org.dspace.core.Email类的源码,加入验证.在代码Transport.send(message)处,加入以下代码:<br /><div class="code_title">java 代码</div><div class="dp-highlighter"><div class="bar">&nbsp;</div><ol class="dp-j"><li class="alt"><span><span class="comment">//jolestar&nbsp;add&nbsp;for&nbsp;mail&nbsp;auth</span><span>&nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;user&nbsp;=&nbsp;ConfigurationManager.getProperty(<span class="string">&quot;mail.user&quot;</span><span>);&nbsp;&nbsp;</span></span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;password&nbsp;=&nbsp;ConfigurationManager.getProperty(<span class="string">&quot;mail.password&quot;</span><span>);&nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transport&nbsp;transport=session.getTransport(<span class="string">&quot;smtp&quot;</span><span>);&nbsp;&nbsp;</span></span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(user==</span><span class="keyword">null</span><span>||password==</span><span class="keyword">null</span><span>)&nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user&nbsp;=&nbsp;<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password=<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transport.connect(server,user,password);&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transport.sendMessage(message,message.getAllRecipients());&nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transport.close();&nbsp;&nbsp;</span> </li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> </li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//Transport.send(message);</span><span>&nbsp;&nbsp;</span></span> </li></ol></div> 并将上面那行代码注释了.在配置文件中就可以用<span><span class="string">mail.user和</span></span><span><span class="string">mail.password配置邮件用户了.不过这个问题在最新版的dspace中已经不存在了.<br /><br /><br /><br /></span></span>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/180666#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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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, 09 Apr 2008 00:56:47 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/180666</link>
        <guid>http://jolestar.javaeye.com/blog/180666</guid>
      </item>
      <item>
        <title>Shell(Bash)学习笔记(一)</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/179900" style="color:red;">http://jolestar.javaeye.com/blog/179900</a>&nbsp;
          发表时间: 2008年04月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>以前只是简单看过一些文章，了解一些。平时也就是写个简单的命令组合啥的，没写过复杂的脚本。最近一次为了恢复数据，写了一下脚本，发现这东西光学不练确实不行。顺便记一下学习笔记备用。</p><p>约定：本文中的shell特指bash.</p><p>由于javaeye博客编辑器没有提供shell代码格式，就只好勉强用javascript脚本格式插入代码。</p><p><strong>一.变量</strong></p><p>变量直接赋值，不用提前声明。</p><pre name="code" class="js">var=&quot;Hello&quot;
var=Hello
var='Hello'
</pre>&nbsp;<p>注意几点：</p><p>1.变量和值之间不能有空格，否则解释器会认为是几个命令。很多程序员的习惯是在＝号两边留空格为了好看，但这点在shell中行不通。</p><p>2.字符串不必用&quot;号或者'，上面的几种赋值方式是等价的。除非字符串之间有空格的时候。</p><p>如:</p><pre name="code" class="js">var=&quot;Hello World&quot;</pre>&nbsp;<p>这时候就需要用引号。</p><p>3.</p><pre name="code" class="js">var=</pre>&nbsp;这样的语句也是合法的，表示var的值为空。<p>&nbsp;</p><p>4.使用变量的时候需要在变量前面加上$符号。这一点php程序员比较熟悉。 </p><p>如:</p><pre name="code" class="js">echo $var</pre>&nbsp;<p>这也就是为什么shell中的字符串不必用引号的原因。你如果直接运行</p><pre name="code" class="js">echo var</pre>&nbsp;<p>系统会将var当作字符串，而不是变量处理。在变量前加上$号还有个好处就是在字符串中输出变量的时候，直接在字符串里面用变量就行。</p><p>如：</p><br /><pre name="code" class="js">var=World
var2=&quot;$var World&quot;
echo $var2</pre>&nbsp;<p>&nbsp;</p><p>但与php不同的是变量赋值的时候不用加$符号。因为shell中没有==这个符号，判断相等也是用＝号。如果赋值的时候加上$号，会产生混淆。</p><p>还有一点要注意的就是单引号（'）字符串 中的变量不会被替换。</p><p>&nbsp;</p><pre name="code" class="js">var=World
var2='$var World'
echo $var2</pre><p>上面的语句输出结果：$var World</p><p>这个可以用来输出$等特殊符号，而不用担心字符被当作变量替换。</p><p><strong>二.语句</strong></p><p>1.shell的语句不必用;号结束，除非是同一行写几个语句的时候。</p><p>2.shell中的语句块不用{}号扩起来。if语句一般就用fi表示结束。当然这个也有特例，后面会提到。</p>3.if语句<pre name="code" class="js">if [ condition ]
then 
    action
elif [ condition2 ]
then 
    action2
.
.
.
elif [ condition3 ]
then 
else
    actionx
fi</pre><p>需要注意的是shell中没有elseif，而是elif(这个缩写也太变态了吧，有必要么？).</p><p>每个或者elif后跟着then，并且要换行或者用;分开。then可以和后面的action在一行。</p><p>&nbsp;</p><p>3.for循环</p><pre name="code" class="js">var=&quot;one two three four&quot;
for x in $var
do
     echo $x
done</pre><p>&nbsp;for循环用do&nbsp; 和 done表示开始结束，不要举一反三，认为是用 rof结束。</p><p>4.while和util循环</p><p>&nbsp;</p><pre name="code" class="js">while [ condition ]
 do
     statements
 done</pre>&nbsp;<pre name="code" class="js">until [ condition ]
 do
     statements
 done</pre>&nbsp;<p>&nbsp;</p><p>&nbsp;</p><p>5.条件语句</p><p> shell中的条件语句用[]号括起来，用于if,while,until等结构。</p><p>&nbsp;条件判断用=号，而不是==号。条件语句与[] 号之间要有空格分开。</p><p>如:</p><p>&nbsp;</p><pre name="code" class="js">gender=&quot;boy&quot;
if [ &quot;$gender&quot; = &quot;girl&quot; ]
then
      echo 'Welcome!'
else
      echo 'We only welcome girl.'
fi</pre><p>还有要注意的是条件语句中=号两旁要有空格分开，否则shell会将条件语句整个作为一个字符串处理，条件永远为真。条件语句中的变量最好用&quot;号引起来，否则如果该变量中有空格，shell就会报too many arguments错误。如果变量正好为空，则会报 =: unary
operator expected.错误。因为变量为空的话，条件语句少了一边，当然会出错。所以，<strong>将字符串</strong><strong>变量用双引号括起来是shell编程的好习惯,尤其在条件语句中。</strong></p><p>&nbsp;</p><p>其他的比较符号,如 &gt;,&lt;，不能直接在条件语句中使用，因为&gt;号在shell中有特殊含义。下面是shell的比较运算符号表示方法:</p><p>&nbsp;</p><pre name="code" class="xml">算术比较运算符

num1-eq num2 	等于	[ 3 -eq $mynum ]
num1-ne num2 	不等于	[ 3 -ne $mynum ]
num1-lt num2 	小于	[ 3 -lt $mynum ]
num1-le num2 	小于或等于	[ 3 -le $mynum ]
num1-gt num2 	大于	[ 3 -gt $mynum ]
num1-ge num2 	大于或等于	[ 3 -ge $mynum ]</pre>&nbsp;<pre name="code" class="xml">字符串比较运算符 

-z string 	如果 string长度为零，则为真 	[ -z &quot;$myvar&quot; ]
-n string 	如果 string长度非零，则为真 	[ -n &quot;$myvar&quot; ]
string1= string2 	如果 string1与 string2相同，则为真 	[ &quot;$myvar&quot; = &quot;one two three&quot; ]
string1!= string2 	如果 string1与 string2不同，则为真 	[ &quot;$myvar&quot; != &quot;one two three&quot; ]</pre><p>6.case 语句</p><p>&nbsp;</p><pre name="code" class="js">gender=&quot;boy&quot; 
case &quot;$gender&quot; in
      boy)
            echo &quot;We only welcome girl.&quot;
            ;;
      girl)
            echo 'Welcome !'
            ;;
      *)
            echo &quot;unknow.&quot;
            ;;
 esac  </pre><p>case语句的语法比较怪，乍一看比较别扭。每个pattern用 半括号括起来,用;;结束。</p><p><strong>三.算术</strong></p><p>shell 默认是用来处理字符串的，所以如果你直接运行:</p><pre name="code" class="js">echo 1+1</pre><p>&nbsp;它会直接输出1+1，而不会输出2。 如果需要计算表达式的值，则只需用&quot;$((&quot; 和 &quot;))&quot;将表达式
括起。</p><pre name="code" class="js">echo $((1+1))</pre>&nbsp;<p><strong>四.函数</strong></p><pre name="code" class="js">add(){
    result=0
    for n in $*
    do
        result=$(($result+$n))
    done
    return $result
}</pre><p>&nbsp;执行:</p><p>&nbsp;</p><pre name="code" class="java">add 1 2 3
echo $?
echo $result</pre><p>两个输出结果都是:6.</p><p>这里需要几点说明.shell中是不能直接获得函数的返回值的，如果你要用函数返回值，只能用全局变量传输。shell中的变量默认都是全局的，除非你在前面加了local修饰符。如上面的例子，在函数外面，result变量也是可见的。如果你在result前加local修饰，result变量在函数外就不可见了。但shell会把函数返回值放在$?全局变量中，你可以用$? 来取得前个函数调用的返回值。$*可以获得函数的所有输入参数，$1表示第一个参数，以此类推。 </p><p>&nbsp;</p><p><strong>五.其他</strong></p><p>shell内置的一些特征，可以很容易的处理文件,以及和其他程序交互。</p><pre name="code" class="xml">文件比较运算符

-e filename 	如果 filename存在，则为真 	[ -e /var/log/syslog ]
-d filename 	如果 filename为目录，则为真 	[ -d /tmp/mydir ]
-f filename 	如果 filename为常规文件，则为真 	[ -f /usr/bin/grep ]
-L filename 	如果 filename为符号链接，则为真 	[ -L /usr/bin/grep ]
-r filename 	如果 filename可读，则为真 	[ -r /var/log/syslog ]
-w filename 	如果 filename可写，则为真 	[ -w /var/mytmp.txt ]
-x filename 	如果 filename可执行，则为真 	[ -L /usr/bin/grep ]
filename1-nt filename2 	如果 filename1比 filename2新，则为真 	[ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2 	如果 filename1比 filename2旧，则为真 	[ /boot/bzImage -ot arch/i386/boot/bzImage ]
</pre>&nbsp;<br /><p>for 循环中很容易遍历文件</p><pre name="code" class="js">for file in /home/*
do
   if [ -d &quot;$file&quot; ] 
   then
      echo $file is a directory
    fi
done</pre><p>很容易调用其他程序的输出结果：</p><p>&nbsp;</p><pre name="code" class="js">for user in `awk -F&quot;:&quot; '{ print $1 }' /etc/passwd`
do
    echo find user $user
done</pre><p>&nbsp;shell脚步中要使用其他命令的输出结果，只需用`符号把命令包含起来。注意：这个符号不是单引号，在键盘左上角那个位置。</p><p>&nbsp;</p><p><strong>六. 后记</strong><br />  </p><p>基本的shell语法就学了这些，高级的还没弄通。这篇笔记也差不多长了，别的再边学边写。shell是基础，要配合awk，grep，sed这些工具才能发挥出效果。最近在看《unix编程艺术》,上面谈到了*nix系统的几个哲学基础原则，其中有个原则就是：</p><p><em>组合原则：设计时考虑拼接组合</em></p><p>*nix系统程序的的输入和输出一般都是简单，文本化，面向流的格式。这样便于程序和程序之间的交互和拼接。*nix系统下的程序一般都只完成单一功能，如果你需要要一个复杂的功能，那就需要把小程序拼接在一起。这一特征也决定了shell在*uix系统中的重要性。 </p><p>&nbsp;</p><p><strong>七.shell学习资料</strong></p><p>1.<a href="http://www.ibm.com/developerworks/cn/linux/shell/" target="_blank">IBM Shell编程系列&nbsp; </a></p><p> 本文中的许多例子以及资料就是来自该系列教程</p><p>2.<a href="http://www.gnu.org/software/bash/manual/bash.html" target="_blank">Bash 参考手册</a></p><p>Gnu的bash官方参考手册</p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/179900#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 06 Apr 2008 21:44:22 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/179900</link>
        <guid>http://jolestar.javaeye.com/blog/179900</guid>
      </item>
      <item>
        <title>一次linux服务器管理的惨痛教训</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/179865" style="color:red;">http://jolestar.javaeye.com/blog/179865</a>&nbsp;
          发表时间: 2008年04月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>系统用的是fedroa8,机房给装系统的时候，分区按默认方式，用lvm管理。</p><p>后来一次机房给拔了一下电，估计文件系统哪儿出问题了，磁盘全部变成只读。然后我想检查一下磁盘，运行了一下fsck，结果检查失败，而文件系统又被卸载掉了，所有命令都用不了。只好让机房给重启一下，然后系统就起不来了。怀疑机房重启系统的时候发现系统没反应，多起了几下，导致系统检查硬盘的过程被中断。</p><p>为了保存数据，我只好重新加了块硬盘，把系统装在新硬盘上，挂上旧硬盘，我慢慢恢复数据。</p><p>先是遇到lvm的分区挂载问题，这东西不能像别的分区一样直接挂在。网上查了一下：</p><p>先用vgscan，找到虚拟卷，然后用 vgchange -ay 激活虚拟卷，/dev下就有了虚拟卷设备。&nbsp; 默认是/dev/VolGroup00/LogVol00 /dev/VolGroup00/LogVol01这样的。</p><p>用 
mount&nbsp;&nbsp;/dev/VolGroup00/LogVol00 /root/vg0 挂载，结果报错：mount: you must specify the filesystem type</p><p>用fdisk查看 了一下，发现虚拟卷识别出来了，但就是分区表被破坏了，系统识别不出分区格式。只好再用fsck修复。不停提示，开始还看，后来烦了，加了个&nbsp;&nbsp;&nbsp; fsck -y。好，一路顺利，检查完了。mount上虚拟卷，进入目录，傻眼了，分区下只剩下一个lost+found文件夹，别的啥都没了。进到lost+found下面，ls了一下，等了半天才显示出来结果。原来所有文件都被移到这个文件下了，并且都重命名为以#开头，一串数字结尾的文件，好几万文件。欲哭无泪啊。</p><p>无奈间，试着grep了一下，发现还好，有的文件夹名字变了但结构还在。赶忙写了个shell脚本恢复数据。幸运的是，主要数据基本上都恢复了。</p><p>总结了一下教训：</p><p>1。fsck不能乱用。先要把文件系统umount掉，然后检查。最好启动到单用户模式下fsck。 </p><p>2。不必要的时候不要用lvm。真不知道fedora为什么默认用lvm，为了实验技术？这个鬼东西把硬盘弄成一块，要坏全坏，还影响磁盘io性能。网上看到还有把boot文件夹也放到lvm下的，这样系统起不来的时候，你想手动加载一下内核地址，你都不知道内核地址应该怎么表示。</p><p>3。分区和备份太重要了。数据库的datadir要手动指定到放数据的分区下，这样重装系统的时候，数据不会丢失。etc目录下的配置文件要备份，不然系统重装后，重新配置一边也够受的。</p><p>&nbsp;</p><p>平时自己本地用linux，服务器管理经验不多，让老鸟看了笑话。吃一堑长一智，我这也算长了一智。 </p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/179865#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 06 Apr 2008 17:08:54 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/179865</link>
        <guid>http://jolestar.javaeye.com/blog/179865</guid>
      </item>
      <item>
        <title>一个纯java的H.264播放器--Onavia Video Player</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/177522" style="color:red;">http://jolestar.javaeye.com/blog/177522</a>&nbsp;
          发表时间: 2008年03月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在网上闲逛，遇到一个纯java的H.264播放器，看了它的官方网站上的applet，效果确实不错。</p><p>&nbsp;</p><p>支持以下几种格式：</p><ul style="list-style-type: none"><li><strong>.mp4</strong>		standard H.264 file format</li><li><strong>.mpeg</strong>		standard H.264 file format</li><li><strong>.h264</strong>		standard H.264 file format</li><li><strong>.avi</strong>		generic video file extension</li></ul><p>有以下特征：</p><p>&nbsp;</p><p>&nbsp;</p><ul><li><strong>High definition video.</strong> The Onavia H.264 Java Video
Player plays the standard resolution and high definition video files
that conform to the latest H.264 video compression standard.</li><li><strong>End-user controls.</strong> The player has all end-user
functions including: play, pause, rewind, fast forward, video duration,
elapsed time, clickable progress bar.</li><li><strong>Open APIs.</strong> Video publishers and web developers can
customize the entire player (e.g. look &amp; feel, colors, borders,
window size, video resolution, streaming bandwidth, end-user controls).
The player is fully customizable, and allows a publisher not only to
control the end user experience, but also gives flexibility to rapidly
change the end user experience to keep their website and video viewing
experience fresh. It also allows a publisher to create different end
user viewing experiences for different websites or within different
sections of the same website.</li><li><strong>Cost-effective delivery of high quality video.</strong>
Enables publishers and web developers to implement H.264 quality video
into a website without the need to implement costly Flash servers.</li><li>Can pull a video file from multiple domains/servers 
</li><li><strong>Platform independence.</strong> It works on PCs, Macs, and all popular browser (Internet Explorer, Mozzilla, Firefox)</li><li><strong>Device independence.</strong> Onavia H.264 Java Video
Player can be easily ported to a variety of mobile devices and
environments. The only requirement is that a device supports Java.</li><li><strong>Automatic Bandwidth detection.</strong> The player
automatically senses the available bandwidth at the end user device and
adjusts the buffering and streaming to deliver the best possible
viewing experience.</li></ul><p>&nbsp;</p><p>官方网站： </p><p><a href="http://www.onavia.com/" target="_blank">http://www.onavia.com/</a></p><p>&nbsp;</p><p>java在多媒体方面很让人失望，那个JMF框架架构不错，但就是功能太弱。这个播放器的出现，至少说明了java在这方面还是有能力的，只是没发挥出来。可惜的是这个播放器不是开放的。java&nbsp; applet和flash相比，还差许多。如果想用这个播放器做youtube这样的视频发布网站，估计玄。一个浏览器打开多个flash没啥问题，但要是打开多个applet，浏览器即使不崩溃，也很容易僵死。 </p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/177522#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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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, 29 Mar 2008 03:32:10 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/177522</link>
        <guid>http://jolestar.javaeye.com/blog/177522</guid>
      </item>
      <item>
        <title>struts2的时间格式转换问题</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/174444" style="color:red;">http://jolestar.javaeye.com/blog/174444</a>&nbsp;
          发表时间: 2008年03月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; struts2提供了一个时间标签:</p><pre name="code" class="xml">&lt;s:date name=&quot;todayDate&quot; format=&quot;yyyy-MM-dd&quot; /&gt;</pre><p>&nbsp;&nbsp; 但这个标签很只能在显示的时候用，但如果我想在输入框里显示时间，让用户直接修改时间，怎么弄？datepicker？选择太麻烦，我想让用户输入，并且兼容多种日期格式。还有，如果用时间标签的话，每个地方都需要指定format，如果我想修改一下格式，所有的时间显示都变，怎么弄？</p><p>&nbsp;</p><p>翻了一下struts2的源码，和文档，找到一个办法。&nbsp; com.opensymphony.xwork2.util.XWorkConverter</p><pre name="code" class="java"> * &lt;p/&gt; In some situations you may wish to apply a type converter globally. 
 *  This can be done by editing the file
 * &lt;b&gt;xwork-conversion.properties&lt;/b&gt; in the root of your class path 
 * (typically WEB-INF/classes) and providing a
 * property in the form of the class name of the object you wish to convert 
 * on the left hand side and the class name of
 * the type converter on the right hand side. For example, providing 
 * a type converter for all Point objects would mean
 * adding the following entry:
 *
 * &lt;p/&gt;&lt;b&gt;com.acme.Point = com.acme.PointConverter&lt;/b&gt;</pre><p>&nbsp;</p><p>XWorkConverter，先在classpath root下找xwork-conversion.properties文件，这个文件定义了全局转换。然后每遇到新的类需要转换，便查找是否有特殊的自定义转换配置。特殊自定义转换配置文件的路径是:</p><pre name="code" class="java">className.replace('.', '/') + &quot;-conversion.properties&quot;;</pre><p>&nbsp;比方com.acme.Point的转换配置就是classpath 下的/com/acme/Point-coversion.properties文件。</p><p>&nbsp;</p><p>ok，这个问题好解决了。</p><p>&nbsp;</p><p>我的xwork-coversion.properties文件:</p><pre name="code" class="xml">java.util.Date=cn.jolstar.struts.type.DateTypeConverter</pre><p>&nbsp;我的DateTypeConverter代码:</p><pre name="code" class="java">/**
 * 
 */
package cn.jolestar.struts.type;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import org.apache.log4j.Logger;
import org.apache.struts2.util.StrutsTypeConverter;


/**
 * @author jolestar
 * 
 */
public class DateTypeConverter extends StrutsTypeConverter {

	private static final Logger log = Logger.getLogger(DateTypeConverter.class);
	public static final String DEFAULT_DATE_FORMAT = &quot;yyyy-MM-dd&quot;;
	
	//暂时只考虑这几种日期格式
	public static final DateFormat[] ACCEPT_DATE_FORMATS = {
			new SimpleDateFormat(DEFAULT_DATE_FROMAT),
			new SimpleDateFormat(&quot;yyyy年MM月dd日&quot;),
			new SimpleDateFormat(&quot;yyyy/MM/dd&quot;) };

	/**
	 * 
	 */
	public DateTypeConverter() {
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.apache.struts2.util.StrutsTypeConverter#convertFromString(java.util.Map,
	 *      java.lang.String[], java.lang.Class)
	 */
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		if (values[0] == null || values[0].trim().equals(&quot;&quot;))
			return null;
		for (DateFormat format : ACCEPT_DATE_FORMATS) {
			try {
				return format.parse(values[0]);
			} catch (ParseException e) {
				continue;
			} catch (RuntimeException e) {
				continue;
			}
		}
		log.debug(&quot;can not format date string:&quot; + values[0]);
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.apache.struts2.util.StrutsTypeConverter#convertToString(java.util.Map,
	 *      java.lang.Object)
	 */
	@Override
	public String convertToString(Map context, Object o) {
		if (o instanceof Date) {
			SimpleDateFormat format = new SimpleDateFormat(
					DEFAULT_DATE_FORMAT);
			try {
				return format.format((Date) o);
			} catch (RuntimeException e) {
				return &quot;&quot;;
			}
		}
		return &quot;&quot;;
	}

}
</pre>&nbsp;<p>&nbsp;</p><p>&nbsp;</p><p>这样，从字符串转换为日期对象的时候，会尝试上面列出的多种日期格式，但输出的时候，则会统一按照DEFAULT&mdash;DATE&mdash;FORMAT转换。 需要修改格式，只需要修改DEFAULT&mdash;DATE&mdash;FORMAT。当然，你也可以把它方在配置文件里，便于修改。</p><p>&nbsp;</p><p>了解了这一点，其实也就 明白了struts的类型转换模式。然后，无论是字符串id到持久化对象的转换，还是自定义的字符串到对象之间的转换，都容易了。 </p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/174444#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 21 Mar 2008 11:50:07 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/174444</link>
        <guid>http://jolestar.javaeye.com/blog/174444</guid>
      </item>
      <item>
        <title>龙芯产品要上市了，想尝鲜的朋友可以试一试</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/173921" style="color:red;">http://jolestar.javaeye.com/blog/173921</a>&nbsp;
          发表时间: 2008年03月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div align="center"><strong><span style="font-size: medium; font-family: 宋体">福珑2F迷你电脑</span></strong></div><div align="center"><img src="http://www.lemote.com/Files/fuloong2f080312.jpg" height="300" alt="" width="400" /></div><div align="center"><img src="http://www.lemote.com/Files/fuloong2f003-2.jpg" height="300" align="middle" alt="" width="400" /></div><div>&nbsp;<span style="font-size: small"><strong>主要技术指标</strong>： <br />处理器：Loongson 2F CPU，主频1GHz①，集成DDR II内存控制器； <br />内存插槽：SO&mdash;DIMM DDR II内存插槽，配置标准512MB DDR II RAM； <br />南桥：AMD CS5536； <br />显示：XGI V2图形处理器，32MB显存，VGA显示输出； <br />网络：板载双网卡，Realtek RTL 8110SC 1000Mbps网络控制芯片②； <br />声音：南桥AC&prime;97，Realtek ALC 655； <br />IDE接口：内置80G Ultra ATA 2.5英寸硬盘<span style="font-size: 10.5pt; letter-spacing: 1pt; font-family: 宋体">③</span>； <br />COM口：三线串口，提供DB9转接口； <br />USB口：4个USB2.0高速接口； <br />红外接口：红外遥控接收器接口； <br />按钮：开关按钮、复位按钮； <br />指示灯：电源指示灯、IDE指示灯； <br />主板尺寸：14cm&times;18cm； <br />电源适配器：输入85~265V, 47~63Hz输出12V，3.5A； <br />操作系统：新华华镭Rays 2.0</span></div><div>&nbsp;</div><div><strong>上市时间</strong> <strong>2008</strong>年<strong>4</strong>月<strong>15</strong>日   </div><div><strong>市场指导售价</strong> <strong>1800</strong>元<strong>/</strong>台</div><div>&nbsp;</div><div>官方网站：</div><div><a href="http://www.lemote.com/index.asp" target="_blank">http://www.lemote.com/index.asp</a></div><div>&nbsp;</div><div> 今天跟一个朋友聊天，他说他正在用这个电脑，就要上市了。他发了个地址，我也了解了一下。第一款国产cpu市场产品，要支持一下。</div>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/173921#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</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, 19 Mar 2008 22:52:34 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/173921</link>
        <guid>http://jolestar.javaeye.com/blog/173921</guid>
      </item>
      <item>
        <title>Java Web实时会议解决方案</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/165971" style="color:red;">http://jolestar.javaeye.com/blog/165971</a>&nbsp;
          发表时间: 2008年02月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp; Java solutions profile: Java Web conferencing<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; －－Java is first choice for these developers of real-time Web conferencing software&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; 原文地址：&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; <a href="http://www.javaworld.com/javaworld/jw-02-2008/jw-02-javawebconferencing_profile.html" title="http://www.javaworld.com/javaworld/jw-02-2008/jw-02-javawebconferencing_profile.html" target="_blank">http://www.javaworld.com/javaworld/jw-02-2008/jw-02-javawebconferencing_profile.html</a><br />&nbsp;&nbsp;&nbsp; 注：本文不是对原文的翻译，只是做了个摘要，并且加了些自己对这几个产品的认识。<br /><br />&nbsp;&nbsp;&nbsp; 一向认为web音频视频实时会议是flash的强项，但下面介绍几个用java做的web实时会议产品。<br />&nbsp;&nbsp;&nbsp; <strong>Glance</strong><br />&nbsp;&nbsp;&nbsp; <a href="http://www.glannce.net" title="http://www.glannce.net" target="_blank">http://www.glannce.net</a><br />&nbsp;&nbsp;&nbsp; 这个名字很好听，也说明了它的用途。可以通过web让别人看到你的桌面演示。不过演示端只支持Windows,因为需要安装一个exe软件。客户端则只需要浏览器。客户端是用java applet实现的。<br />&nbsp;&nbsp;&nbsp; <strong>The Switchboard</strong><br />&nbsp;&nbsp;&nbsp; <a href="http://theswitchboard.ca/" title="http://theswitchboard.ca/" target="_blank">http://theswitchboard.ca/</a><br />&nbsp;&nbsp;&nbsp; 这是一个浏览器到浏览器（browser-to-browser）的网络电话，两端都不用安装任何软件，通过web即可以通话。通过内嵌的java applet实现。使用技术： Java Sound，Speex codec。<br />&nbsp;&nbsp;&nbsp; <strong>WebHuddle</strong><br />&nbsp;&nbsp;&nbsp; <a href="https://www.webhuddle.com/" title="https://www.webhuddle.com/" target="_blank">https://www.webhuddle.com/</a><br />&nbsp;&nbsp;&nbsp; 这是一个Web实时会议产品，支持音频，但不支持视频。包括网站程序在内，都用java实现。客户端用java applet，支持桌面共享，电子白板。不过界面不是很好看。完全免费。<br />&nbsp;&nbsp;&nbsp; <strong>Vyew</strong><br />&nbsp;&nbsp;&nbsp; <a href="http://vyew.com/content/" title="http://vyew.com/content/" target="_blank">http://vyew.com/content/</a><br />&nbsp;&nbsp;&nbsp; 这是一个真正的音视频Web实时会议产品。界面用flash实现，但通过和java applet交互来和服务端通信。服务端用了Red5 Server，一个开源的flv流媒体服务器，用java实现。这个产品界面美观，功能强大，支持音频，视频，桌面共享，电子白板，等等。20人以下的会议免费，如果要求更高级的服务就要付费了。<br /><br />&nbsp;&nbsp;&nbsp; 从以上产品我们可以看到以下几点：一是java applet在做web应用的界面方面还是不如flash。二是java在媒体方面的JMF还不够完善，并且JMF不在jre中，如果要在applet中使用jmf作视频会议功能，必须让用户安装额外的东西。三是软件行业正在逐渐从买产品到买服务过渡。<br /><br />&nbsp;&nbsp;&nbsp; 该文还提到了用java做web实时会议的几个难点。<br />&nbsp;&nbsp;&nbsp; 一.java版本很多，开发applet要适应客户端的众多版本，比较麻烦。<br />&nbsp;&nbsp;&nbsp; 二.音频的网络延迟问题。以上程序都是通过服务器端和客户端交互，不是点对点的，所以要真正做到&ldquo;实时&rdquo;，是比较困难的。<br />&nbsp;&nbsp;&nbsp; 三.java吞噬内存的问题。这个自古以来就是java令人头痛的一个问题。<br /><br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; java的优势在于开放，而Adobe的所有东西则过于封闭。至今我没找到一款在linux下制作flash的工具，很令人失望。flash如此流行，web开发很难避开它，因为没有开源的替代品。<br />&nbsp;&nbsp;&nbsp; 希望java的javafx在web客户端界面方面能做到和flash一样成功。在媒体处理方面能正真成长起来。<br />&nbsp;&nbsp;&nbsp; 
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/165971#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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 28 Feb 2008 22:48:42 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/165971</link>
        <guid>http://jolestar.javaeye.com/blog/165971</guid>
      </item>
      <item>
        <title>介绍两款java的p2p文件共享工具</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/165942" style="color:red;">http://jolestar.javaeye.com/blog/165942</a>&nbsp;
          发表时间: 2008年02月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>Azureus</strong><br />&nbsp;&nbsp;&nbsp;&nbsp; 这款工具实现了BitTorrent协议，界面非常华丽，功能上也不逊色于任何一款流行的p2p工具。截图如下：<br /><p>&nbsp;&nbsp;&nbsp; <img src="http://www.vuze.com/img/sc/3_0/H.png" height="622" alt="" width="750" /></p><p>&nbsp;&nbsp;&nbsp; 官方主页：<a href="http://azureus.sourceforge.net/" class="quote_div" title="http://azureus.sourceforge.net/" target="_blank">http://azureus.sourceforge.net/</a></p><p><strong>LimeWire</strong></p><p> &nbsp;&nbsp; 这款工具是收费软件，1年30多美金。本来有个免费的版本，但好像下载不了了。同时它也开了一部分源码，但到底开放了多少，没有具体了解。不过既然能做到收费，功能上应该也不会差到哪儿去。</p><p> &nbsp;&nbsp;&nbsp;&nbsp; 官方主页： <a href="http://www.limewire.com/" class="quote_div" title="http://www.limewire.com/" target="_blank">http://www.limewire.com/</a><br />&nbsp;&nbsp;&nbsp;&nbsp; 开源主页：<a href="http://wiki.limewire.org" title="http://wiki.limewire.org" target="_blank">http://wiki.limewire.org</a></p><p>&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 从这两款工具看来，java网络方面的性能已经很不错了。 </p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/165942#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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 28 Feb 2008 18:45:20 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/165942</link>
        <guid>http://jolestar.javaeye.com/blog/165942</guid>
      </item>
      <item>
        <title>读《万历十五年》随想</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/165314" style="color:red;">http://jolestar.javaeye.com/blog/165314</a>&nbsp;
          发表时间: 2008年02月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; 过年回家，来去都坐了个临客，30多个小时，于是把这本书翻了两边遍。</p><p>&nbsp;&nbsp;&nbsp; 这本史书有点特别，虽然是从当时几个历史人物入手，展开叙述，但又不完全是传记体的史书，而是用人物提纲，以事件为线，几个章节互相联系，遥相呼应，一层一层，拨开历史迷雾，将那个时代展现在读者眼前。用语平淡，但发人深思。</p><p>&nbsp; 以前读史书，像史记这样的，都喜欢看人物传记，对于礼仪，税收，兵役等制度方面的，了解甚少，因为这方面的东西比较枯燥，不如传记那样有那么多的曲折故事，动魄事件。但这本书通过几个人物在明末短短的几十年间的 命运历程，或者说失败的命运，让我们了解了整个明朝的礼仪，税收，兵役等等制度，同时对中国几千年的帝王制度也能窥得一斑。 </p><p>&nbsp;&nbsp;&nbsp; 掩卷遐思，思维感觉好像被一张网罩住了，怎么也突破不出去。我仿佛体会到那个时代人物的痛苦。无论是万人之上的万历皇帝，还是权倾朝野的张居正，以及温和谦让的申时行，廉洁正直的海瑞，战功卓著的戚继光，乃至反抗权威的哲学家李贽，都仿佛被一张大网罩着，把他们都束缚起来，不能自由发挥，并且无法摆脱，只能眼看着庞大一个帝国逐渐倾颓。但这张大网到底是什么？他们仿佛感觉到，但也说不清楚，也挣脱不出来。或者说他们也明白了，但不知道没了这个大网，该怎么办？还有别的路让他们选择么？</p><p>&nbsp;&nbsp;&nbsp; 有人说&ldquo;明亡，亡于万历&rdquo;。但我怎么感觉明朝在朱元璋奠定基础的那的时候，就已经注定了它的命运。做一个不合理的假设，如果把朱元璋换到万历时候，他能做什么？这位精力旺盛的皇帝，费尽心机，除功臣，废丞相，杀贪官，重文臣，抑武将，设特务，监百官，几乎以前朝代的弊端他都借鉴了，防功臣叛乱，他杀完了功臣，防丞相专权，他废了丞相，防贪官舞弊，他用重典酷刑，防藩镇割据，他让文臣指挥武将，为了减少运输耗费，他让地方把军饷直接供给军队，而不用经过中央调配。这些措施都不可不谓用心良苦，但正是他的这些制度，在二百多年后的万历时期，已经弊端百出。而这种制度本生又无法从内部孕育出改革的力量，就如张居正这样的人物，也只能凭一己之权势，稍对制度作点修补，即便如此，这样的修补也导致了他死后的悲惨结果。</p><p>&nbsp;&nbsp; 从秦始皇开始，每朝开国皇帝，都无不想着如何让自己的朝代延续直百世，千世，乃至万世，无不想借鉴前世经验制定出完善的制度来。但往往越是完善的制度，它的禁锢性越强，内部改革越困难。另外历朝一直把&ldquo;不患贫而患不均&rdquo;作为政府的主要职责，此在明朝尤胜，施政方针从不着眼于提倡先进的技术发展经济，而只是保护落后经济，以力求平衡。然而，每一朝代的开创者一般都是社会中未占据优势经济资源的阶层，所以通过政治优势打击占有经济优势的阶层，能在开始维持这样一种平衡，但到后期，社会资源逐渐都兼并到拥有政治资源的阶层手中，再进行改革，想恢复这样一种平衡，受到的阻力可想而知。 所以等制度的弊端百出，后世人已经无力回天，只能等待再一次的洗牌，再一次的恢复平衡。但生产力在这种洗牌中并没有本质的发展，历史于是就进入了一个死循环。</p><p>&nbsp;&nbsp; <a name="64657076" title="64657076"></a>黄炎培在延安问毛泽东怎么跳出历史的这种&ldquo;其兴也勃焉，其亡也忽焉&rdquo;的周期律，毛泽东说：&ldquo;我们已经找到了新路，我们能跳出这周期律。这条新路，就是民主。只有让人民来监督政府，政府才能不敢松懈。只有人人起来负责，才不会人亡政息。&rdquo;&nbsp; 话容易说，做起来难。这话说了已经有几十年了，但实施的结果呢？</p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/165314#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</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 00:39:31 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/165314</link>
        <guid>http://jolestar.javaeye.com/blog/165314</guid>
      </item>
      <item>
        <title>收藏一篇关于grub启动菜单的文章</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/164352" style="color:red;">http://jolestar.javaeye.com/blog/164352</a>&nbsp;
          发表时间: 2008年02月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://forum.ubuntu.org.cn/about17047.html" class="quote_div" title="http://forum.ubuntu.org.cn/about17047.html" target="_blank">http://forum.ubuntu.org.cn/about17047.html</a><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/164352#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><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, 22 Feb 2008 20:22:56 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/164352</link>
        <guid>http://jolestar.javaeye.com/blog/164352</guid>
      </item>
      <item>
        <title>struts2 checkboxlist 的一个问题</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/160360" style="color:red;">http://jolestar.javaeye.com/blog/160360</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p> 用struts2的checkboxlist遇到一个问题。</p><p>&nbsp;</p><p>&nbsp;&nbsp; 下面是java对象。</p><pre name="code" class="java">package cn.jolestar.struts;

/**
 * @author jolestar
 * 
 */
public class Language {

	private Long id;
	private String name;

	/**
	 * 
	 */
	public Language() {
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Language other = (Language) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

}
</pre><p>&nbsp;&nbsp;&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp; </p><pre name="code" class="java">package cn.jolestar.struts;

import java.util.List;

/**
 * @author jolestar
 *
 */
public class Album {

	private Long id;
	private String name;
	private List&lt;Language&gt; languages;
	/**
	 * 
	 */
	public Album() {
	}
	public List&lt;Language&gt; getLanguages() {
		return languages;
	}
	public void setLanguages(List&lt;Language&gt; languages) {
		this.languages = languages;
	}
	
}</pre><p>&nbsp;</p><p>&nbsp;</p><p>下面是jsp标签：</p><p>&nbsp;</p><pre name="code" class="xml">&lt;s:checkboxlist  name=&quot;album.languages&quot; list=&quot;languages&quot; listValue=&quot;name&quot; listKey=&quot;id&quot; &gt;
&lt;/s:checkboxlist&gt;</pre>&nbsp;<p>&nbsp;</p><p>action中有个getLanguages()方法，返回数据库中的所有语言。按道理我编辑Album的时候，checkboxlist中Album的已经拥有的语言会自动选中。但怎么弄，它就是不选中。没办法，看了一下struts2的相关源码，才明白了。</p><p>&nbsp;</p><p>struts2 checkboxlist 的freemarker模板：</p><pre name="code" class="xml">&lt;#assign itemCount = 0/&gt;
&lt;#if parameters.list?exists&gt;
    &lt;@s.iterator value=&quot;parameters.list&quot;&gt;
        &lt;#assign itemCount = itemCount + 1/&gt;
        &lt;#if parameters.listKey?exists&gt;
            &lt;#assign itemKey = stack.findValue(parameters.listKey)/&gt;
        &lt;#else&gt;
            &lt;#assign itemKey = stack.findValue('top')/&gt;
        &lt;/#if&gt;
        &lt;#if parameters.listValue?exists&gt;
            &lt;#assign itemValue = stack.findString(parameters.listValue)/&gt;
        &lt;#else&gt;
            &lt;#assign itemValue = stack.findString('top')/&gt;
        &lt;/#if&gt;
&lt;#assign itemKeyStr=itemKey.toString() /&gt;
&lt;input type=&quot;checkbox&quot; name=&quot;${parameters.name?html}&quot; value=&quot;${itemKeyStr?html}&quot; id=&quot;${parameters.name?html}-${itemCount}&quot;&lt;#rt/&gt;
        &lt;#if tag.contains(parameters.nameValue, itemKey)&gt;
 checked=&quot;checked&quot;&lt;#rt/&gt;
        &lt;/#if&gt;
        &lt;#if parameters.disabled?default(false)&gt;
 disabled=&quot;disabled&quot;&lt;#rt/&gt;
        &lt;/#if&gt;
        &lt;#if parameters.title?exists&gt;
 title=&quot;${parameters.title?html}&quot;&lt;#rt/&gt;
        &lt;/#if&gt;
        &lt;#include &quot;/${parameters.templateDir}/simple/scripting-events.ftl&quot; /&gt;
        &lt;#include &quot;/${parameters.templateDir}/simple/common-attributes.ftl&quot; /&gt;
/&gt;
&lt;label for=&quot;${parameters.name?html}-${itemCount}&quot; class=&quot;checkboxLabel&quot;&gt;${itemValue?html}&lt;/label&gt;
    &lt;/@s.iterator&gt;
&lt;#else&gt;
  &nbsp;
&lt;/#if&gt;
</pre>&nbsp;<p>&nbsp;</p><p>if tag.contains(parameters.nameValue, itemKey)这个if语句决定该checkbox是否选中。tag.contains()最终调用的是org.apache.struts2.util.ContainUtil中的这个方法：</p><p>&nbsp;</p><p>&nbsp;</p><pre name="code" class="java">   public static boolean contains(Object obj1, Object obj2) {
        if ((obj1 == null) || (obj2 == null)) {
            //log.debug(&quot;obj1 or obj2 are null.&quot;);
            return false;
        }

        if (obj1 instanceof Map) {
            if (((Map) obj1).containsKey(obj2)) {
                //log.debug(&quot;obj1 is a map and contains obj2&quot;);
                return true;
            }
        } else if (obj1 instanceof Collection) {
            if (((Collection) obj1).contains(obj2) || ((Collection) obj1).contains(obj2.toString())) {
                //log.debug(&quot;obj1 is a collection and contains obj2&quot;);
                return true;
            }
        } else if (obj1.getClass().isArray()) {
            for (int i = 0; i &lt; Array.getLength(obj1); i++) {
                Object value = null;
                value = Array.get(obj1, i);

                if (value.equals(obj2)) {
                    //log.debug(&quot;obj1 is an array and contains obj2&quot;);
                    return true;
                }
            }
        } else if (obj1.toString().equals(obj2.toString())) {
            //log.debug(&quot;obj1 is an object and it's String representation equals obj2's String representation.&quot;);
            return true;
        } else if (obj1.equals(obj2)) {
            //log.debug(&quot;obj1 is an object and equals obj2&quot;);
            return true;
        }

        //log.debug(&quot;obj1 does not contain obj2: &quot; + obj1 + &quot;, &quot; + obj2);
        return false;
    }</pre><p>&nbsp;</p><p>tag.contains(parameters.nameValue, itemKey)的参数parameters.nameValue是該标签的值，在这里就是album.languages, parameters.list 是languages，itemKey是循环中的当前language的id。album.languages包含的是Language对象，而struts2却在其中查找itemKey--就是Language的id,当然就无法查找到，所以不能自动选中。</p><p>&nbsp;</p><p>我把checkboxlist的模板改了一下。</p><p>&nbsp;</p><pre name="code" class="xml">&lt;#assign itemCount = 0/&gt;
&lt;#if parameters.list?exists&gt;
   &lt;@s.iterator value=&quot;parameters.list&quot; id=&quot;it&quot;&gt;
        &lt;#assign itemCount = itemCount + 1/&gt;
        &lt;#if parameters.listKey?exists&gt;
            &lt;#assign itemKey = stack.findValue(parameters.listKey)/&gt;
        &lt;#else&gt;
            &lt;#assign itemKey = stack.findValue('top')/&gt;
        &lt;/#if&gt;
        &lt;#if parameters.listValue?exists&gt;
            &lt;#assign itemValue = stack.findString(parameters.listValue)/&gt;
        &lt;#else&gt;
            &lt;#assign itemValue = stack.findString('top')/&gt;
        &lt;/#if&gt;
&lt;#assign itemKeyStr=itemKey.toString() /&gt;
&lt;input type=&quot;checkbox&quot; name=&quot;${parameters.name?html}&quot; value=&quot;${itemKeyStr?html}&quot; id=&quot;${parameters.name?html}-${itemCount}&quot;&lt;#rt/&gt;
        &lt;#if tag.contains(parameters.nameValue,it)&gt;
 checked=&quot;checked&quot;&lt;#rt/&gt;
        &lt;/#if&gt;
        &lt;#if parameters.disabled?default(false)&gt;
 disabled=&quot;disabled&quot;&lt;#rt/&gt;
        &lt;/#if&gt;
        &lt;#if parameters.title?exists&gt;
 title=&quot;${parameters.title?html}&quot;&lt;#rt/&gt;
        &lt;/#if&gt;
        &lt;#include &quot;/${parameters.templateDir}/simple/scripting-events.ftl&quot; /&gt;
        &lt;#include &quot;/${parameters.templateDir}/simple/common-attributes.ftl&quot; /&gt;
/&gt;
&lt;label for=&quot;${parameters.name?html}-${itemCount}&quot; class=&quot;checkboxLabel&quot;&gt;${itemValue?html}&lt;/label&gt;
	&lt;/@s.iterator&gt;
&lt;#else&gt;
  &nbsp;
&lt;/#if&gt;
</pre><p>&nbsp;就是将tag.contains(parameters.nameValue, itemKey)改成了tag.contains(parameters.nameValue,it),it就是当前循环的Language对象,在struts2的iterator 标签里设置</p><p>&lt;@s.iterator value=&quot;parameters.list&quot; id=&quot;it&quot;&gt;.(注意：如果是最新版的struts2，应该用var 而不是id).</p><p>&nbsp;</p><p>这样就好了。需要注意的是language必须正确overwrite&nbsp; equals和hashCode方法。 </p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/160360#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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, 30 Jan 2008 13:07:38 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/160360</link>
        <guid>http://jolestar.javaeye.com/blog/160360</guid>
      </item>
      <item>
        <title>SUSE10.3的桌面</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/156766" style="color:red;">http://jolestar.javaeye.com/blog/156766</a>&nbsp;
          发表时间: 2008年01月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <br /><p>&nbsp;&nbsp;&nbsp; 虽然认识linux也有三年多了，但这三年多里，从windows到linux，不习惯，再换到windows，兴趣来了，再换过来。翻来覆去，折腾了好多遍。终于在半年前完全抛弃了windows，转移到linux下来。linux和windows是两种不同的思维方式，思维方式换了，别的就都习惯了。最近把我的笔记本的系统升级到suse10.3，贴几张桌面截图。</p><p>我的笔记本是联想F40A，装上suse之后，除了声卡需要特别配置，别的都完全正常使用，包括无线网卡以及蓝牙。因为声卡用了一个微软的啥UAA技术，windows下安装声卡驱动都要先装那个UAA驱动。<br />当然，那些鸡肋似的按钮是没办法用了。所以建议打算买本装linux的朋友们优先考虑预装linux的笔记本。</p><p>&nbsp;<img src="../../../upload/attachment/12734/84288ddb-64ec-3b9d-885a-a0418adcb20d.jpg" alt="" /><img src="../../../upload/attachment/12730/0a5925c0-cfd6-3f5e-b4b6-595394990acb.jpg" alt="" /></p><p><img src="../../../upload/attachment/12728/6d5b7416-6e22-3b1a-9893-bae059987f46.jpg" height="800" alt="" width="1280" /> </p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/156766#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Jan 2008 23:58:38 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/156766</link>
        <guid>http://jolestar.javaeye.com/blog/156766</guid>
      </item>
      <item>
        <title>高唐事件，不得不说</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/149830" style="color:red;">http://jolestar.javaeye.com/blog/149830</a>&nbsp;
          发表时间: 2007年12月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <br />2007年初，随着董伟、王子峰、扈东臣等人因在&ldquo;百度贴吧&mdash;&mdash;高唐吧&rdquo;发帖子被刑事拘留。董伟，高唐县民政局地名办主任。王子峰，高唐县医院主治医师。扈东臣，高唐县一中体育教师。他们被拘留的原因是涉嫌&ldquo;侮辱&rdquo;、&ldquo;诽谤&rdquo;现任高唐县委书记孙兰雨。<br /><br /><div class="dp-highlighter"><ol class="dp-xml"><li class="alt"><span><span>在高唐电视台&ldquo;警方在线&rdquo;节目中，他们看到了自己戴着手铐走进看守所、在拘留手续上签字、被审讯的画面。为此，县公安局副局长还发表了讲话。在电视解说词里，他们的名字变成了董某、王某、扈某，并说破获了&ldquo;攻击县委、县政府&rdquo;的&ldquo;重大网络刑事犯罪团伙&rdquo;。由于没有任何遮盖处理，他们3人&ldquo;出事&rdquo;的消息在整个高唐县广为流传。此后，高唐新闻、警方节目<strong>连续5天在高唐电视台播出这些内容</strong>。&nbsp;&nbsp;</span></span></li></ol></div><br /><br />先抓人，再动用舆论，搞臭他们。然后再雇人垄断贴吧管理权，到贴吧（高唐吧）删帖，封锁言论。幸亏高唐的网络技术应该不发达，否则就可能设置防火墙，过滤关键词了。 <br /><br /><div class="code_title"><br /></div><div class="dp-highlighter"><ol class="dp-css"><li class="alt"><span><span>在看守所里，他们还看到了高唐县公安局以&ldquo;案情复杂&rdquo;为由作出的&ldquo;延长拘留&rdquo;的决定。形势变得越来越微妙。1月14日，高唐县人民检察院以&ldquo;事实不清，证据不足&rdquo;为由将案卷退回公安机关，不准逮捕。1月15日，案卷又被重新送到检察院，检察院作出了对3人批准逮捕的决定。&nbsp;&nbsp;</span></span></li></ol></div><p><br /><br />&nbsp;&nbsp;&nbsp; 在这里我基本没有勇气说出法律这两个字来，它太苍白无力了。本来检察院，法院，党政，公安机关是独立的，互相制约，互相监督，其实还应该加上舆论这一力量。但我们看到的事实是，检察院，法院，舆论都成了县委书记手里的工具，他想怎么拿捏就怎么拿捏。由小看大，放眼中国，怎么让人不心凉呢？</p><p>&nbsp;</p><p>这个事情刚报道出来没几天，又出来西丰事件和绥德事件。</p><p>&nbsp;</p><p>因为一篇报道涉及辽宁省铁岭市西丰县县委书记张志国，西丰县公安局以&ldquo;涉嫌诽谤罪&rdquo;为由对采写报道的《法制日报》记者朱文娜进行立案调查。1月4日，西丰县公安局多名干警赶到法制日报社对该记者进行拘传，未果。</p><p>&nbsp;</p><p><a href="http://news.qq.com/a/20080107/000152.htm">http://news.qq.com/a/20080107/000152.htm</a></p><p>&nbsp;</p><p>&nbsp;</p><p>国家财政部、教育部明文规定，职中学生的助学金&ldquo;应于学生入学一个月内&rdquo;发放到受助学生手中，然而陕西省绥德县职中校长为了让这笔资金在年前下发到学生手中，去找县长签字。而县长要去参加一个会议，心急的校长追着县长并打开车门，希望县长签完字再走，没料此举给自己带来麻烦。当日绥德县教育局作出处理决定，责令校长停职，向县长赔礼道歉，并被要求做检查。公安部门随后也以妨害公务为由将该校长行政拘留。 </p><p>&nbsp;</p><p><a href="http://view.news.qq.com/a/20080102/000037.htm">http://view.news.qq.com/a/20080102/000037.htm</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/149830#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 21 Dec 2007 01:16:08 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/149830</link>
        <guid>http://jolestar.javaeye.com/blog/149830</guid>
      </item>
      <item>
        <title>【转贴】从银行ATM的技术角度看许霆案－银行是故意的吗？</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/149825" style="color:red;">http://jolestar.javaeye.com/blog/149825</a>&nbsp;
          发表时间: 2007年12月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <br />
<br />
&nbsp;&nbsp; 作者：erase 提交日期：2007-12-20 14:58:00&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 原始地址：&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.tianya.cn/New/PublicForum/Content.asp?idWriter=5696620&amp;Key=531752475&amp;strItem=free&amp;idArticle=1076923&amp;flag=1">http://www.tianya.cn/New/PublicForum/Content.asp?<br />
idWriter=5696620&amp;Key=531752475&amp;strItem=free&amp;idArticle=1076923&amp;flag=1</a><br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从银行ATM的技术角度看许霆案－银行是故意的吗？<br />
<br />
刚看到这案子的时候除了觉得许霆很冤外，同时觉得很蹊跷，至少【公开的报道的事实】有很多经不起推敲的地方。<br />
<br />
本人以前做过MIS系统个开发和测试，也做过软件硬件的系统集成，不过那是很久前的事情了，也没有涉及到金融系统，所以如果本文有什么问题，请达人指正。<br />
<br />
<br />
废话少说：<br />
先描述一下我对ATM提款所涉及到的系统硬件、软件的理解：<br />
<br />
登陆过程：<br />
ATM接收提款人的身份验证信息（卡+ 密码）－》身份验证信息提交银联网络－》身份验证信息数据提交卡所在银行数据服务器－》卡所在银行数据服务器验证身份信息－》验证结果提交银联网络－》验证结果提交ATM机<br />
登陆成功后ATM机进入操作菜单界面<br />
<br />
取款过程：<br />
ATM机 银联网络 卡所在银行数据服务器<br />
输入取款金额<br />
|<br />
验证金额数据合法性(注1)<br />
|<br />
【金额数据】 －》 【金额数据】 －》 【金额数据】<br />
|<br />
验证金额数据合法性（注2）<br />
|<br />
【准予操作】 《－ 【准予操作】 《－ 如验证数据合法，则【准予操作】<br />
|<br />
吐出纸币<br />
|<br />
生成【操作记录】 －》【操作记录】 －》 【操作记录】<br />
保存操作记录,并从卡中扣除金额<br />
<br />
(注1)是否为50或100倍数，是否超过每次提款上限<br />
(注2)是否超过卡中余额，是否超过每次提款上限，是否超过日提款上限，是否超过日提款次数<br />
<br />
需要说明的是，ATM机所在的银行并不一定是卡所属的银行，本人目前不知道ATM机所在银行和和卡所属银行究竟是哪些银行。<br />
<br />
问题：究竟在什么时候1000变成了1？<br />
推测1：卡所在银行的服务器在保存交易记录时1000变成了1<br />
推测2：ATM将输入的1000变为1然后将1提交给了卡所在银行数据服务器，并且生成的【操作记录】也将吐出的1000记录成1并提交到卡所在银行服务器<br />
推测3：银联网络进行数据处理时将1000变为1<br />
<br />
一个小问题需要说明一下，本人认为许霆不可能是输入了1，但ATM吐出了1000，本人没用过广州商业银行的提款机，以在其他银行提款机上的使用经验，许霆如果输入的数字少于50元，应该能够得到类似提示【本提款机只能提供面值50元和100元的人民币，请输入50或100的倍数。。。】，所以许霆输入的不是1元，而应该是1000元。<br />
<br />
如果以上的3总推测有1个是正确的，那么本人可以肯定的是，不是ATM机的质量原因或者网络的质量或者是服务器及软件的质量问题引起的，而是人为导致的结果，不管这个人为行为是不是故意的。<br />
相信编过软件和测试过软件的人都清楚，一个隐藏很深的BUG（无论是硬或软的，通常是内存溢出），不可能将1000变为1，因为计算机是2进制的。为什么说是隐藏的很深的BUG呢，那是因为我相信银行的软件及硬件都是经过长时间大负荷地测试联调后才正式上线使用的。那么可能出现的BUG我觉得只是在非常特殊的情况下才出现，象这样连续几个小时都存在的BUG，不能不说非常不可思议。<br />
<br />
推测1的解释：<br />
卡所在银行的服务器在保存交易记录时1000变成了1<br />
如果人为地将1000变成1，只需要在程序（一个存储过程）上做小小的改动。可能有人问，为什么卡所在银行的服务器上软件的改动只影响了这一台ATM机呢，那是因为这个ATM向服务器提交数据时同时会告知服务器本ATM机的ID号，在改动程序的时候只需要判断ID号就可以只在这台ATM上实现了。<br />
本人比较相信这种推测：因为实施起来难度较小，至于为什么要这么做，那各位可以去联想。<br />
<br />
推测2的解释：<br />
ATM将输入的1000变为1然后将1提交给了卡所在银行数据服务器，并且生成的【操作记录】也将吐出的1000记录成1并提交到卡所在银行服务器。<br />
本人因为没有参与过ATM的开发，所以不知道ATM软件更新的流程是什么。如果仅仅从软件代码的难度上考虑，将ATM机加上一段实现此功能的代码是容易。但是可能碰到的问题是如果卡所在银行限制了每天取款的次数，那么本推测将不成立，因为取款次数高达171次。<br />
<br />
推测3的解释<br />
同上，如果卡所在银行限制了每天取款的次数，那么本推测将不成立。银联网络实际上是各银行间进行数据交换的接口，这个接口会将各银行接收到的数据进行格式转换然后转发给其他银行。从技术上讲，修改进行格式转换的代码也有可能达到此目的。<br />
<br />
匆匆写就，达人指正。<br />
<br />
<br />
=================================================================<br />
jolestar 注： &nbsp;&nbsp;&nbsp;&nbsp; 觉得这个分析很有意思，本人没有开发过类似程序，所以不好评论。这里有没有达人能给解释一下？
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/149825#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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, 20 Dec 2007 23:48:12 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/149825</link>
        <guid>http://jolestar.javaeye.com/blog/149825</guid>
      </item>
      <item>
        <title>关于许霆ATM机案的一些看法</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/149824" style="color:red;">http://jolestar.javaeye.com/blog/149824</a>&nbsp;
          发表时间: 2007年12月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 广州《新快报》前天的报道引起了轩然大波&mdash;&mdash;去年4月，在广州工作的许霆在一台ATM上取款时发现，取了1000元人民币后，ATM却只在卡里扣划了1元。许霆趁此机会，取款17.5万元。近日，广州市中级法院以盗窃罪判其无期徒刑。&nbsp; <br />
&nbsp;&nbsp; &nbsp; 法院的判罚依据是：按照中国刑法的相关规定，盗窃金融机构，数额特别巨大（3万元到10万元以上属于数额特别巨大）的，可判处无期徒刑或死刑。&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网上的争论很多，很多网民拿这个案子的结果和贪污受贿挪用公款等案件比较，觉得不公，还有的人说如果少判几年，争议<br />
<br />
就没这么大了。但问题不在这里，如果许霆真的是盗窃金融机构，被判无期也是合法的。至于是否公平，那就是立法上的问题了，怪不到法官头上。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 在这里讨论的是许霆的行为真的构成盗窃罪么？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先，刑法的一个基本原则法无明文规定不为罪。这样是防止法官随意类推适用法律，造成公民无法预知自己的行为是否合<br />
法。这个原则如果被破坏了，人民就成了法官手下任凭宰割的羔羊了。很多人的思维是许霆的行为是恶意的，并且给他人造成重大损失了，所以应该是犯罪。然后在刑法里找个罪名给按上。这种思维明显违背罪行法定原则。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 然后来分析一下许霆的行为是否符合盗窃罪的基本构成要件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 盗窃罪指以非法占有为目的，秘密窃取数额较大的公私财物或者多次盗窃公私财物的行为。这儿有个关键概念是秘密窃取<br />
。 &ldquo;窃取&rdquo;顾名思义，就是未经财产所有人或持有人同意或交付，但取款机吐钱的过程就是一个交付的过程，可以认为是银行<br />
在履行其对客户的义务行为，何来秘密之说？何来窃取之说。至于交付的结果出错，那就是银行方面的失误，与客户何干？所以窃取不成立。<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 有人说这个应该算诈骗罪或者合同诈骗罪，但这两种罪的犯罪行为模式一般如下：<br />
&nbsp;&nbsp;&nbsp; 欺诈行为&rarr;被害人产生错误认识&rarr;被害人基于错误认识而处分财产&rarr;行为人或第三人获得财产&rarr;被害人的财产损失。<br />
<br />
&nbsp;&nbsp;&nbsp; 其要点是欺诈行为，也就是必须是由于行为人的欺诈行为而导致被害人产生错误认识。这两者之间必须有因果关系。现在的问题是被害人（以ATM机为代表的银行）产生了错误认识，但是由于行为人引起的么？不是，是它自己的问题。所以诈骗罪也不成立。<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; 综上所属，被告人应该无罪。这个最多算个民事的不当得利，银行最多动用民事方法，追回财产，至于能否追回还应该看银行方面举出的证据是否有说服力。<br />
<br />
&nbsp;&nbsp;&nbsp; 但分析案件的背后，是什么力量推动法官对这个案件做出这样有明显漏洞的判决？银行系统有这样严重的问题，为什么银行<br />
还敢毫不忌讳，大动干戈？<br />
&nbsp;&nbsp;&nbsp; 我们一向宣传的一个概念就是银行是国有银行，代表的是国家利益，代表的是人们利益。但事实上导致的结果就是我们的银<br />
行没有一点服务意识，而我们的老百姓还一直要为银行的坏账死帐买单。因为国家是不会让国有银行倒闭的，国有银行有恃无恐，根本不把储户放在眼里。要不然这么严重的系统漏洞，银行敢这样大动干戈？用户把钱放到银行的首要原因就是安全，但如果银行的系统有这样的漏洞，ATM机器能多取出钱来，谁能保证不会少取出钱？要是我取1000，只给了我1块，你的系统记录的是1000，我找谁去要？谁敢把钱存在这样的银行？但我们的银行不怕这个，这次就是要抓个典型，杀鸡给猴看，看看以后如果我的取款机再坏了，谁还敢取钱？哪怕我的系统烂透了，天天给你免费送钞票，你敢收？
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/149824#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><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, 20 Dec 2007 23:37:13 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/149824</link>
        <guid>http://jolestar.javaeye.com/blog/149824</guid>
      </item>
      <item>
        <title>javascript获取网页元素的最终样式</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/114963" style="color:red;">http://jolestar.javaeye.com/blog/114963</a>&nbsp;
          发表时间: 2007年08月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天遇到个问题，用js获取网页元素的样式，如果直接用 document.getElementById(&quot;idname&quot;).style 获取的话，只能获取该元素的专有样式，即在该元素上直接用style=&ldquo;&rdquo;指定的样式，而无法获取由class设置的和从上级元素继承来的样式，也就是浏览器生成dom后最终的样式，所以很头痛。网上搜索了一下，找到一个办法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>　　<span class="tag">&lt;</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>　　<span class="tag">&lt;</span><span class="tag-name">style</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;text/css&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>　　div.special{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　&nbsp;background-color:red;&nbsp;&nbsp;</span></li>
    <li class=""><span>　　&nbsp;height:50px;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　&nbsp;width:50px;&nbsp;&nbsp;</span></li>
    <li class=""><span>　　&nbsp;margin:10px;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　}&nbsp;&nbsp;</span></li>
    <li class=""><span>　　<span class="tag">&lt;/</span><span class="tag-name">style</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>　　<span class="tag">&lt;</span><span class="tag-name">script</span><span>&nbsp;</span><span class="attribute">language</span><span>=</span><span class="attribute-value">&quot;JavaScript&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>　　function&nbsp;getBackgroundColor()&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　{&nbsp;&nbsp;</span></li>
    <li class=""><span>　　&nbsp;var&nbsp;<span class="attribute">oDiv</span><span>=</span><span class="attribute-value">document</span><span>.getElementById(&quot;div1&quot;);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>　　&nbsp;alert(oDiv.currentStyle.backgroundColor||document.defaultView.getComputedStyle(oDiv,null).backgroundColor);&nbsp;&nbsp;</span></li>
    <li class=""><span>　　}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　<span class="tag">&lt;/</span><span class="tag-name">script</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>　　<span class="tag">&lt;/</span><span class="tag-name">head</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>　　<span class="tag">&lt;</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>　　<span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;div1&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;special&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>　　<span class="tag">&lt;</span><span class="tag-name">input</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;button&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;Get&nbsp;Background&nbsp;Color&quot;</span><span>&nbsp;</span><span class="attribute">onclick</span><span>=</span><span class="attribute-value">&quot;getBackgroundColor()&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">input</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>　　<span class="tag">&lt;/</span><span class="tag-name">body</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>　　<span class="tag">&lt;/</span><span class="tag-name">html</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：oDiv.currentStyle.backgroundColor是IE使用的方法，document.defaultView.getComputedStyle(oDiv,null).backgroundColor是DOM使用的方法。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 内容来源：http://blog.tianya.cn/blogger/post_show.asp?BlogID=666817&amp;PostID=7224874&amp;idWriter=0&amp;Key=0
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/114963#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 21 Aug 2007 18:28:11 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/114963</link>
        <guid>http://jolestar.javaeye.com/blog/114963</guid>
      </item>
      <item>
        <title>介绍一个突破GFW的软件</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/113425" style="color:red;">http://jolestar.javaeye.com/blog/113425</a>&nbsp;
          发表时间: 2007年08月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前一段时间sourceforge.net访问不了，郁闷之极，估计是封锁哪个ip段时给株连了。无奈之下寻找突破GFW(Great FireWall)的软件，发现一个不错的，Tor，介绍给大家。<br />
<br />
下载地址:http://tor.eff.org/download.html.en<br />
安装说明:http://tor.eff.org/docs/tor-doc-win32.html.en<br />
<br />
程序安装后安装目录下有一个firefox的插件，启动firefox，安装该插件，然后在互联网上漫游时，如果遇到被封锁的网站，启动那个插件就可以了。<br />
<br />
终于可以访问wikipedia.org了，终于可以在google.com上随心所欲的搜索，而不必担心自己的ip被封，不能上google.com了。<br />
<br />
估计过段时间，这个软件也就被封了，所以大家抓紧下。  <br />
不过也别担心，道高一尺，魔高一丈。<br />
何为道？谁是魔？
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/113425#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 17 Aug 2007 10:35:49 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/113425</link>
        <guid>http://jolestar.javaeye.com/blog/113425</guid>
      </item>
      <item>
        <title>读巴别塔之犬</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/113093" style="color:red;">http://jolestar.javaeye.com/blog/113093</a>&nbsp;
          发表时间: 2007年08月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 去书店逛，本来是要找本计算机方面的书的，但出来后瞄了一眼热门书榜，一本薄薄的书吸引了我，主要是封面上那短短的几十字介绍:</p>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>一个女人从苹果树上坠地身亡。&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>是意外还是自杀？无人知晓。&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>唯一的目击者，就是她心爱的狗。&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>女人的丈夫是一位语言学家，&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>哀伤又困惑的他，&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>思念妻子却无从得知她真正的死因。&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>他决定以自己毕生的研究，&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>教这只狗开口说话，&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>让它道出事情的真相.....&nbsp; &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 于是买了本回来。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基本是一口气读完的，开始的时候还想着女人的死因和这只狗到底会说话了么？但到后来这些都不重要了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作者并没有直接描写那个女人---露西，而是通过女人的丈夫，那个语言学家,也就是保罗的回忆，慢慢一点一点在大家的想象中勾勒出了这个女人，一个精灵般的女人，一个很难用语言形容的女人，一个不属于这个现实世界的女人。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有人说这本小说是本爱情小说，我不同意，你不能因为小说描写了爱情就是爱情小说，这都是人们的帖标签习惯带来的。好的小说或者作品就是一个鲜活的生命，有很多种可能，有很多种表现，能给你带来无限的思考空间，很难用一个简单的标签来区分的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &ldquo;其实书里想要表达的东西并不是这个，巴别塔象征了人和人之间难以融通的隔阂，主人公保罗所要面对的不是如何让他家的狗开口说话的难题，而是他和妻子间幸福生活下潜藏着的观念鸿沟。他们彼此相爱，但并不能彼此理解，对于生活习惯和爱好的争端从未停止。保罗深爱妻子露西，因为她带给他惊喜和快乐，但他忽略了在快乐表面下露西那颗伤痕累累的心。在断断续续讲述自己过去的时候，露西渴望抚慰，然而保罗没有给。在冲着像自己孩子一样的面具发火时，露西渴望理解，但保罗没有给。 &rdquo;-------摘自豆瓣(<font face="Arial"><a href="http://www.douban.com/review/1181813/">http://www.douban.com/review/1181813/</a></font>)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但我觉得并非保罗不理解露西，而是保罗不善于表达，虽然他是个语言学家，甚至想让狗说话。当保罗看到露西做的第一个面具时，那个面具带给保罗内心的震动，我想他理解了露西在用面具阐释的生命和死亡的关系，但当表述为语言时，两个人的理解就发生歧义了。当露西认为保罗不理解她，冲着面具发火并把面具扎碎时，我竟然能体会到保罗的那种心碎的感觉。我想他当时一定非常恨上帝，恨上帝造人的时候为什么只能让人用语言交流？而相对于人的内心，语言本身又是如此的苍白无力。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个人都是孤独的。</p>
          <br/>
          <span style="color:red;">
            <a href="http://jolestar.javaeye.com/blog/113093#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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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, 16 Aug 2007 18:27:11 +0800</pubDate>
        <link>http://jolestar.javaeye.com/blog/113093</link>
        <guid>http://jolestar.javaeye.com/blog/113093</guid>
      </item>
      <item>
        <title>JavaFX尝鲜</title>
        <author>jolestar</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jolestar.javaeye.com">jolestar</a>&nbsp;
          链接：<a href="http://jolestar.javaeye.com/blog/107017" style="color:red;">http://jolestar.javaeye.com/blog/107017</a>&nbsp;
          发表时间: 2007年07月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java6出来以后，其一大特色就是对脚本语言的支持。以前只是粗略看了一下，没感觉到有什么具体的用处。最近又对java的特有脚本语言javaFX了解一下，感觉挺有意思。<br />
<br />
<strong>一.以下是几个相关网址: </strong><br />
&nbsp;&nbsp; 1.sun javafx 官方网站:.<a href="http://www.sun.com/software/javafx/script/">www.sun.com/software/javafx/script/</a><br />
&nbsp;&nbsp; 2.openjfx 网站:&nbsp; <a href="https://openjfx.dev.java.net/">openjfx.dev.java.net/</a><br />
&nbsp;&nbsp; 3.JavaFX: First Steps - &quot;Hello OnJava&quot; App&nbsp; <a href="http://www.oreillynet.com/onjava/blog/2007/05/javafx_first_steps_hello_onjav_1.html">www.oreillynet.com/onjava/blog/2007/05/javafx_first_steps_hello_onjav_1.html</a><br />
&nbsp;&nbsp; 4.<a href="https://openjfx.dev.java.net/JavaFX_Programming_Language.html">The JavaFX Script Programming Language Reference</a> (<a href="https://openjfx.dev.java.net/JavaFX_Programming_Language_CN.html">Chinese version</a>)<br />
<br />
hello world 式的程序，很简单，稍看一下文档就明白了。<br />
<strong>二.我比较喜欢这个语言的下面几个特征:</strong><br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 这个语言融合了javascript，php,actionscript,sql 等许多脚本语言的特征。<br />
<br />
&nbsp;&nbsp;&nbsp; 1.<strong>数组操作很有特色</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var nums = [0..3];<br />
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; ..&nbsp; 是范围表达式，上面的语句相当于&nbsp; var nums == [0,1,2,3];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数组支持类似于sql语句一样的查询表达式。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var nums = select n*n from n in [1..100];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 结果便是从1到100每个数字的平方组成的数组。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 2.<strong>字符串</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; javaFX中的字符串支持嵌入表达式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;name&nbsp;=&nbsp;'Joe';&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">var</span><span>&nbsp;s&nbsp;=&nbsp;</span><span class="string">&quot;Hello&nbsp;{name}&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>System.out.println(s);&nbsp;&nbsp;</span></li>
</ol>
</div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序在输出结果的时候会自动把字符串中的表达式 {} 算出来，替换成结果 。这段程序的输出结果是 : Hello Joe<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个特点和php很相似。用在来做结果输出模板时很有用，不必用自己创造标签语法，输出的时候又得用正则分析，替换。<br />
<br />
&nbsp;&nbsp;&nbsp; 3.<strong>类与对象</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对象声明可以用一种类似于json的语法进行。<br />
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">class</span><span>&nbsp;Person&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attribute&nbsp;name:&nbsp;String;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attribute&nbsp;parent:&nbsp;Person&nbsp;inverse&nbsp;Person.children;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attribute&nbsp;children:&nbsp;Person*&nbsp;inverse&nbsp;Person.parent;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;getFamilyIncome():&nbsp;Number;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;getNumberOfChildren():&nbsp;Number;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;operation&nbsp;marry(spouse:&nbsp;Person);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>var&nbsp;chris&nbsp;=&nbsp;Person&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;<span class="string">&quot;Chris&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;children:&nbsp;&nbsp;</span></l