<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>gohands</title>
    <description></description>
    <link>http://gohands.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>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/177972" style="color:red;">http://gohands.javaeye.com/blog/177972</a>&nbsp;
          发表时间: 2008年03月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原文标题：国内银行对CPI和中国经济的前景预测比我更悲哀<br />中国银行近日发布了《2008年第二期人民币市场分析》报告，该报告称， 3月CPI最高增至8.4%，货币政策仍须从紧。该行同时预测， 2008年第一季度CPI平均同比增幅为8.1%，第二季度CPI平均同比增幅为8.5%。全年不会低于7%！<br /><br />我们必须看到，当前我国的通货膨胀有极大的政治背景。如果从更广泛的视角看，很可能是缘于美国预谋中的，对中国的经济战争。谁都知道，美国在让美元主动贬值的过程中可能失去更多，或者说，他本来可以让美元更坚挺，但却什么也不做。原来，美元的大幅度贬值最终伤害的是中国，特别是中国的出口。由于人民币大幅度升值，肯定地使中国产品在美的售价屡创新高，从而减少了美对华的贸易逆差。这必然使中国更加地延缓人民币升值，从而使人民币升值预期更强。虽然人民币汇率没有调整到实际水平，可以保持对美国的贸易优势。但是，这使中国成为全世界热钱炒作的重点。这自然地加剧通货膨胀预期。<br /> <br />现在，由于全球一致地认定人民币严重低估，因此使美国人有了更多的盟友，而美国各界更是广泛不满，国会两党一致认同。中国更加孤立。虽然中国大量的美元储备可以随时发动一场对美国的反击战——中国官员已经不断地私下威胁要卖掉所有美元——致使美元大幅度贬值。而这两败俱伤的选择实在是太难。美国人已经看准，这不会成为中美贸易战或经济战的最后交火点。<br /><br /> 目前，中国为保持与美国的贸易水平，不得不维持所谓渐进式的币值升值。而全球的热钱进入中国将更加肆无忌惮。而且，中国的企业和老百姓也加入了炒作人民币低估的套利游戏。中国人民币国内贬值国外升值的格局会使经济面临许多新难题：进入中国的外来直接投资越来越多，由此可能进一步刺激中国的通胀。而人民币的实际贬值也将减少中国出口商品的利润。<br /> <br />可以这样认为，目前袭击全球的金融危机，表面上看似乎是一次正常的经济周期性衰退。但种种迹象表明，这场“危机”是由中美经济战所引发。而美国人已经悄悄地取得战略上的优势。美国的经济地位并未因为美元贬值而弱化，相反，它在危机中嫁祸于人的技巧已使其具有更长期的经济优势，尤其是对中国的战略优势。<br />----------------------------------------<br />个人观点：中国还是要保持适当的表面弱势！加强跟俄罗斯等国的合作！！在美国对付我们的时候俄罗斯将会得到发展，而以后反过来我们又得到发展！！！
          <br/>
          <span style="color:red;">
            <a href="http://gohands.javaeye.com/blog/177972#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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 31 Mar 2008 11:35:42 +0800</pubDate>
        <link>http://gohands.javaeye.com/blog/177972</link>
        <guid>http://gohands.javaeye.com/blog/177972</guid>
      </item>
      <item>
        <title>CTO专访:坚守还是追新,开发者如何应对新技术暗潮</title>
        <author>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/174000" style="color:red;">http://gohands.javaeye.com/blog/174000</a>&nbsp;
          发表时间: 2008年03月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          【CSDN 3月14日报道】在新技术新编程语言不段涌现的IT界，有人说：“原地不动就是倒退”，如果不能熟练掌握两门以上的主流编程语言或技术，被社会淘汰就是迟早的事。也有人认为“一招通吃遍天”，只要精通掌握一门语言技术，同样可以成为IT职场中的香饽饽。同样的，面对层出不穷的新编程语言，有的开发者放掉了自己已掌握的而改学新出现的语言，例如Ruby，Elang，Scala；而更多的开发人员选择了坚守，对正在使用的语言技术深度挖掘，积累更丰富的经验。<br /><br />如果你的目标是成为一名架构师，在面对业界眼花缭乱的技术/语言时该如何做出选择，CSDN本期“专家看台”专访了某企业管理软件开发公司CTO 吕建伟。吕建伟具有10年企业管理软件商业开发运营从业经历，曾任某中型软件公司首席架构师、微软Vendor商业咨询顾问、Borland特约顾问、CTO。多年致力于企业管理软件开发过程管理、产品框架、行业发展/技术发展/产品竞争的研究)。他将就有关话题与大家一起讨论，分享他的观点。<br /><br />吕建伟首先表示，自己是做架构师出身，虽然现在已经脱离了架构，身在CTO位置上，主要关注产品战略发展、开发过程管理、产品Framework、IT行业发展变化、新产品新应用新盈利模式、客户行业变化、竞争者变化。但自己对当前流行的热门技术还是一直在跟踪。虽然考虑到作为公司长期赖以生存的产品和竞争策略，很多最新的技术不能迅速应用到产品开发中。但对新技术成熟度和切入点的考察，一直是他关注和感兴趣的问题。<br /><br />记者：如果是想成为一名架构师，在面对业界眼花缭乱的技术/语言时该如何做出选择？<br /><br />吕建伟：我首先为大家画一张图，对当前IT业界主流技术做个架构分层。<br /><img src="http://images.csdn.net/20080314/20080314110847.jpg" /><br /><br />从这张图可以看到，每一个技术都是在各自的层次上做了适当发展，而且都是为了弥补本层现有产品和架构的问题。吕建伟首先提醒，对于未来想做架构师的朋友，不管是学习.Net，Windows，SQLSERVER，从现在开始一定要有架构的思路。要分层，从点到线，从线到面，从面到体系来横竖切分。<br /><br />而且一个产品架构，也往往是这么多层，而且在应用软件架构上，也就是：表现层、业务层、数据层。其他我们都是利用的中间件和VM和OS的现成技术，我们本身一般无须深入。而表现层、业务层、数据层，层与层之间都有接口层，而不是硬性接口，否则就成铁板一块了。一般架构经验不足的架构师，往往容易出现这样的毛病，层是分开了，自己沾沾自喜，以为这个架构是很有扩展性的。但具体一应用，就发现很硬，动不了。这就是缺乏接口层的原因。<br /><br />记者：通过你的讲解，大家对当前主流IT架构有了大概的了解，但是光有这样的图，大家好像还不解渴。对于一些刚出道新入门的朋友该如何从中选择，究竟是精通一门语言技术，还是掌握两门语言技术，哪个才更有钱途和前途，才能更好的找到工作。这是大家目前更关注的问题。想当架构师，那是遥远的梦。必须先把温饱问题解决了。<br /><br />吕建伟：对于这个问题，要看个人的具体情况，需要分开来回答：<br /><br />如果你的学历和能力，只能进入一般的软件公司或集成公司，那么选择微软的技术体系不错。因为微软体系，网上很多学习资料，而且大量的企业应用是用微软技术开发的，而且很多公司也用微软技术。所以公司多，你好找工作。微软的技术一般固定：C#+Asp.net+SQLSERVER+Visual Studio。<br /><br />如果你的学历和能力，能进入做大型企业应用的公司，那么你就选择JAVA的技术体系。因为现在大型企业，基本都用JAVA开发。你可以从eclipse、structs、hibernate、WebService、Tomcat、Apache、JBoss、POJO、Oracle开始学习，然后再学习WebLogic、WebSphere、Portal技术、工作流技术。<br /><br />如果你想进入互联网公司或web2.0创业公司。那么一般Php、Mysql、Apache、Ruby on Rails、Python是你的学习目标。<br /><br />如果你想进入手机开发，那么Symbian和C++（Nokia，市场份额最大）、J2ME（android产品，google发布，还未正式生产，但应该很有前途）、Windows Mobile(微软，好开发，从开发思路到工具到语言，都是你所熟悉的)。这三类短期内会三者鼎立，谁也不会把谁干掉 。至于5年之后，就不好说，至少5年内，是手机时代，是手机无线时代，每个厂商都在争抢这一块未来最有钱途的肉。<br /><br />如果你想进入目前炙手可热的网游公司。做服务器端，你得C++过硬、网络传输技术过硬、并发线程处理、了解Linux编程要和了解windows编程一样深入。如果你想做客户端，那么图形图像处理算法你得首先过关。当然，现在很多引擎、工具、AI包、材质库、脚本减少了不少客户端编程的难度。<br /><br />如果你想进入现在已经未来10年内一直很热的嵌入式编程，那么C++，而且你的单片机编程你得过关。中国是世界第一制造大国，而且这种局面在5-10年内也很难改变。制造，过去比谁的工人成本低。但是现在材料和人工的增长，使制造压力巨大。就只能提升自己的制造能力。 <br /><br />制造高尖端的产品，就需要高尖端的流水线。而且，中国的电子产品也越来越强大，日本产品从最初的独霸中国，渐渐变成了中国国货的天下。在手机上、数码相机上、家电、冰箱、DVD、空调、汽车、交通、医疗、数控，等等，很多领域需要嵌入式编程。就连咱们的嫦娥一号也是嵌入式编程的典范。华为、中兴这些通信设施也是嵌入式编程范围。<br /><br />当然，你也可以剑走偏锋。过去是Notes编程，随着国产OA的兴起，Notes编程渐渐衰退。但是，中国现在大型企业都在上线ERP，而且大多用的是Oracle或SAP的ERP。这些ERP产品，都提供了客户化定制编程开发环境，提供了完备的应用API。大型企业应用ERP，都需要定制化开发，大量缺乏这类人才。但是，市面上这些学习资料都非常少，这是个难题。<br /><br />另外，现在的外包也非常热，各地建立外包园，就跟当年建立软件园一样群起。想进入外包公司，首先日语或英语需要过关。咱们国家的外包，一般来自日本和欧美。在开发中，一般也是三种语言的主流：C++、C#、JAVA。<br /><br />总之，我们说了很多开发技术以及语言，其实是各个量级的语言是相类似的，学习了一种，其它几种都很类似。我看开发语言，一般分为：核心底层开发语言、业务运算层开发语言、脚本层开发语言。核心底层，一般C/C++使用最广泛，毕竟大量操作系统和硬件驱动都是由C/C++编写，从性能到控制深度和力度都有保证。在业务运算层面，C#和JAVA为主流，分别代表微软和非微软阵营的两大技术体系。Delphi、VB也是在业务运算层面工作，但毕竟现在不为这两大阵营厂商主流力挺（一项技术的广泛应用，不仅在于这项技术的革新性，也在于支持它的公司的业界推动。）。<br /><br />在脚本层面上，过去的ASP，现在的Perl、PHP、Ruby、Python、ASP.NET都是在脚本层面工作。每一层面上的开发语言都互相借鉴竞争发展，所以你现在会看到JAVA和C#越来越像，Ruby on Rails一出，立即在其它脚本语言上立即出了开源社团支持类Rails框架。<br /><br />所以，从以上分析来看，C++、C#、JAVA，都是当今的主流。都在各方面都应用很广。你选择哪一类都会有很多的机会和空间。但如果你学了C++，又怕以后碰不到C++的工作，还要学C#，还要学JAVA，那么你终将一事无成。<br /><br />记者：根据你的观点，开发者必须先在掌握一门语言技术的基础上再考虑学其他的新技术。但开发者有可能担心自己学到的是过时的技术，不被社会承认和接受，对自己未来发展不利。对于最新的技术，开发人员该如何适时跟进呢？<br /><br />吕建伟：其实，现在的技术都是在弥补和改进它所致力解决的问题域的现状，真正的技术革命并没有产生（语义Web会是一个革命，但什么时候发生，谁会领导下次革命未知）。不管是最近的当红炸子鸡：Ruby on Rails，还是Google带起的AJAX，还是现在的FLEX和Sliverlight的争霸，都是在现状的改良。<br /><br />不过，我们要看到的是，现在的互联网应用不管横插进许多3D互联网、3G手机终端新技术，但有个趋势是大势所趋，我们必须看到。<br /><br />从XML、RSS、XMLHttp、Json、Google个人定制、Google API、SAAS、虚拟化、云计算、WebService、REST、SOA、脚本语言、Mashup的兴起，其实都在往同一个方向前进。那就是：Open API。<br /><br />SUN总裁和Oracle总裁当年都曾布道：网络就是计算机。现在终于成真。<br /><br />我们传统在WINDOWS下编程，其实WINDOWS内核我们一般是无法调用和接触到的，我们一般工作在API层面。所以，WINDOWS在程序员的面前，就是WINDOWS API，这就是我们通常的WINDOWS 编程。但是，在互联网上我们如何编程？我们过去是在一个个的制造网站，当网站密布全球的时候，URL连接把整个互联网串在一起的时候，互联网变成了一个地球巨型计算机。如何在这个巨型计算机上编程，是现在微软、IBM、Google都在致力研究和竞争的事情。<br /><br />我们顺应大潮，踏准技术的脚步，就能参与到全球产业链中。<br /><br />所以，一项新技术出来，我们先看它和现有技术的关联，看现在这些关联的技术到底共同特性是什么，看领导这些技术潮流的大公司的研究重点和支持力度，我们就知道业界技术潮流都在往哪个主流方向走。当然，在这个主流中，各个公司都会根据自己所处的竞争优劣势推出自己的产品，唱的论调也各有重点。不过我们无须眼花缭乱，因为它们都是殊路同归。它们要解决的都是一个问题<br /><br /><br />------------------------------附（CSDN描述的简介！）<br />在新技术新编程语言不段涌现的IT界，有人说："原地不动就是倒退"，如果不能熟练掌握两门以上的主流编程语言或技术，被社会淘汰就是迟早的事。因为微软体系，网上很多学习资料，而且大量的企业应用是用微软技术开发的，而且很多公司也用微软技术。在业务运算层面，C#和JAVA为主流，分别代表微软和非微软阵营的两大技术体系。
          <br/>
          <span style="color:red;">
            <a href="http://gohands.javaeye.com/blog/174000#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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 20 Mar 2008 10:38:12 +0800</pubDate>
        <link>http://gohands.javaeye.com/blog/174000</link>
        <guid>http://gohands.javaeye.com/blog/174000</guid>
      </item>
      <item>
        <title>上海居住证办理 </title>
        <author>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/172379" style="color:red;">http://gohands.javaeye.com/blog/172379</a>&nbsp;
          发表时间: 2008年03月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在上海工作和生活的外地人基本上都会碰到居住证的问题<br />把一些内容做了一下汇总,希望能够对你有帮助!<br />此贴为上海市居住证的相关汇总<br /><br /><a href="http://gohands.5d6d.com/thread-35-1-1.html" target="_blank">上海居住证管理部门</a><br /><br /><strong>上海居住证申请操作<br /><br /></strong><a href="http://gohands.5d6d.com/thread-41-1-1.html" target="_blank">引进人才实行《上海市居住证》制度暂行规定</a><br /><a href="http://gohands.5d6d.com/thread-36-1-1.html" target="_blank">国内人才《上海市居住证》申领须知</a><br /><a href="http://gohands.5d6d.com/thread-37-1-1.html" target="_blank">国内人才申领《上海市居住证》审核试行办法</a><br /><a href="http://gohands.5d6d.com/thread-38-1-1.html" target="_blank">境外人才申领《上海市居住证》审核试行办法</a><br /><a href="http://gohands.5d6d.com/thread-39-1-1.html" target="_blank">申办《上海市居住证》（境外人员）须知</a></p><p>&nbsp;</p><p><span class="t_tag"><u><span style="color: #0000ff">下载</span></u></span></p><p><a href="http://gohands.5d6d.com/thread-44-1-1.html" target="_blank">[<span class="t_tag">下载</span>]国内人才《上海市居住证》申领表</a><br /><br /><strong>居住证相关</strong><br /><br /><a href="http://gohands.5d6d.com/thread-40-1-1.html" target="_blank">居住证的功能</a> </p>
          <br/>
          <span style="color:red;">
            <a href="http://gohands.javaeye.com/blog/172379#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/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>Sun, 16 Mar 2008 19:03:18 +0800</pubDate>
        <link>http://gohands.javaeye.com/blog/172379</link>
        <guid>http://gohands.javaeye.com/blog/172379</guid>
      </item>
      <item>
        <title>扫清欧盟障碍 谷歌宣布并购DoubleClick成功</title>
        <author>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/170486" style="color:red;">http://gohands.javaeye.com/blog/170486</a>&nbsp;
          发表时间: 2008年03月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          据外电报道称，当地时间本周二，在欧盟宣布“同意谷歌以31亿美元收购在线网络广告商DoubleClick”仅数小时后，谷歌宣布开始实施对DoubleClick的掌控。<br /><br />　　欧盟认为谷歌于11个月之前提出的“并购DoubleClick计划”不会削弱当前在线广告市场竞争格局。<br /><br />　　在美国反垄断机构于去年12月份通过了“谷歌-DoubleClick”并购案后，欧盟成为这一并购案的最后一道障碍。欧盟反垄断机构做出这一决定，认为该并购案不会对微软、雅虎等竞争对手构成影响，同时认为谷歌得到DoubleClick后，不会哄抬在线广告市场价格而伤及广告客户。<br /><br />　　当微软发现自身无法匹敌谷歌后，试图以446亿美元的赌注收购疲软的竞争对手雅虎公司，微软希望两家公司联合后共同成就互联网上新的搜索领袖，然而微软美好的愿望目前上演成了一出“鸟枪婚姻”（shotgun marriage）。<br /><br />　　谷歌公司首席执行官施密特称，谷歌与DoubleClick的结合，将确保谷歌面向市场更加迅速地推出先进技术和先进基础设施，大大地改善数字媒体和更有针对性提供广告服务。<br /><br />　　一个由数据隐私组织针对谷歌搜索引擎的隐私政策展开的单独调查，将在四月份之前公布调查结果。<br /><br />　　欧洲消费者组织(BEUC)则称“对欧盟所做的决断表示失望”，BEUC认为欧盟对谷歌收购DoubleClick可能造成隐私侵犯和限制消费者对互联网内容选择没有进行足够的考虑。但BEUC同时表示，它们希望谷歌和DoubleClick树立一个很好的榜样，并“严格遵守”欧盟相关条款。<br /><br />　　美国隐私组织数字民主中心(CDD：Center for Digital Democracy)表示，欧盟对谷歌-DoubleClick并购案所采取的纵容态度，“将助长目前已成为数码巨人的谷歌公司会占据未来在线广告领域的统治地位，并对全球互联网的未来造成不良影响。”<br /><br />　　欧盟委员会则称，它们在整个调查中没有发现谷歌收购DoubleClick将导致其它竞争对手出局的相关证据，因为微软、雅虎和AOL都提供有“可信”的广告产品或服务来替代谷歌。<br /><br />　　欧盟同时表示，谷歌和DoubleClick目前还不是竞争对手，因而谷歌并购DoubleClick这样的潜在竞争对手，不会削弱在线广告市场的竞争。
          <br/>
          <span style="color:red;">
            <a href="http://gohands.javaeye.com/blog/170486#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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</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, 12 Mar 2008 12:27:32 +0800</pubDate>
        <link>http://gohands.javaeye.com/blog/170486</link>
        <guid>http://gohands.javaeye.com/blog/170486</guid>
      </item>
      <item>
        <title>mysql 存储过程SAVEPOINT ROLLBACK to</title>
        <author>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/170507" style="color:red;">http://gohands.javaeye.com/blog/170507</a>&nbsp;
          发表时间: 2008年03月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          DELIMITER $$<br /><br />DROP PROCEDURE IF EXISTS `test`.`handlerdemo`$$<br /><br />CREATE DEFINER=`root`@`localhost` PROCEDURE `handlerdemo`()<br />BEGIN&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE X2 INT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE CONTINUE HANDLER FOR SQLWARNING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET X2= 1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE CONTINUE HANDLER FOR NOT FOUND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET X2 = 2;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE CONTINUE HANDLER FOR SQLSTATE '23000'&nbsp;&nbsp;&nbsp; SET X2= 3;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION&nbsp;&nbsp;&nbsp;&nbsp; SET X2 = 4;<br />&nbsp;&nbsp;&nbsp; START TRANSACTION;<br />&nbsp;&nbsp;&nbsp; SAVEPOINT savepoint_1;<br />&nbsp;&nbsp;&nbsp; BEGIN<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; INSERT INTO&nbsp; eugene&nbsp; VALUES (1);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; INSERT INTO&nbsp; eugene&nbsp; VALUES (2);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SELECT X2;<br />&nbsp;&nbsp;&nbsp; end;<br />&nbsp;&nbsp;&nbsp; ROLLBACK TO SAVEPOINT savepoint_1;<br />&nbsp;&nbsp;&nbsp; iNSERT INTO&nbsp; eugene&nbsp; VALUES (3);<br />END$$<br /><br />DELIMITER ;<br /><br />#测试表<br />CREATE TABLE `eugene` (&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `t1` int(4) default NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) <br />&nbsp;
          <br/>
          <span style="color:red;">
            <a href="http://gohands.javaeye.com/blog/170507#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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</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>Mon, 10 Mar 2008 16:18:59 +0800</pubDate>
        <link>http://gohands.javaeye.com/blog/170507</link>
        <guid>http://gohands.javaeye.com/blog/170507</guid>
      </item>
      <item>
        <title>答复: 重用管理和技术研究在软件公司的重要性</title>
        <author>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/163933" style="color:red;">http://gohands.javaeye.com/blog/163933</a>&nbsp;
          发表时间: 2008年02月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          lz说的都是自己在项目管理中的体会么？<br /><br />首先，我们公司前段时间刚刚通过CMMI3级认证考核，所以 我对组织的管理、技术的积累和维护有一些了解和想法，同时也有很多困惑。<br /><br />大家应该了解CMMI是非常重视企业的历史项目、历史数据的积累和应用的，它要求建立一个历史数据库/过程资产库（即LZ所说的资源库），积累典型项目的历史数据和技术及管理实践，并由EPG（LZ所说的研究中心）定期的维护。<br /><br />一个软件开发的企业没有上述东西，那么弊端是很明显的：<br />1、项目管理和开发不统一，技术参差不齐。<br />2、历史项目完成后，对以后的项目开发几乎没有提高。<br />3、项目的完成主要依靠几个技术骨干的发挥。<br />3、项目管理的和企业管理缺少数据支持。<br />.....<br /><br />从另一个角度讲：开发人员(公司员工)会感觉到不到东西，得不到提高。<br /><br />从模型的角度看，一个良好的开发管理过程应该是：<br />Plan(计划)==>Do(执行)==>Check(检查)==>Action(处理)<br />并且4个环节是循环的，呈螺旋状不断提高的。<br /><br />做个比喻：一个企业像是一个应用软件，资产库就是软件的数据库，上面的4个环节呢就是对数据库的查询/更新/插入/删除等操作，而EPG(工程过程组)和开发管理人员就是访问数据库的SQL语言和工具了。 <br /><br />	呵呵 乱说一通，不知道恰不恰当。<br /><br />要想使该软件达到需求，有效率的执行，那就得做分析、策划(企业规划)、设计(过程设计)、实现(定义过程)、测试(试运行项目)等过程是必不可少的，投入也是非常巨大的。<br /><br />为什么国内的软件公司几乎没有在这方面做的比较好的呢，比较明显的原因就是投入大，没有好的先例，短期效果不明显。<br /><br />成本投入大不是问题，只要效果够好，符合成本的投入就不成为问题。<br /><br />我认为主要问题还是改进的方法和方式，譬如如何能够有效的把个人能力和经验在项目中的体现积累到公司的过程资产库中。如果方法得当，我认为管理层还是能够认识到这种改进的重要性和必要性的。
          <br/>
          <span style="color:red;">
            <a href="http://gohands.javaeye.com/blog/163933#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, 21 Feb 2008 15:46:59 +0800</pubDate>
        <link>http://gohands.javaeye.com/blog/163933</link>
        <guid>http://gohands.javaeye.com/blog/163933</guid>
      </item>
      <item>
        <title>高房价与多核分布式计算</title>
        <author>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/162163" style="color:red;">http://gohands.javaeye.com/blog/162163</a>&nbsp;
          发表时间: 2008年02月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>－从多核分布式计算角度解释高房价对社会的影响主要内容列表高房价与多核分布式计算高房价问题概述高房价形成的多核分布式计算模型藏富于民的思想小政府的思想高房价的解决之道 </p><p>&nbsp;</p><div><strong><span style="font-size: large"><a name="_Toc187835325"></a>高房价问题概述</span></strong></div><div style="margin-bottom: 7.8pt; text-indent: 21pt">目前社会上的高房价问题困扰了大多数白领，可以说是有人欢喜有人忧。那些有多套房子的人希望房价继续涨上去；只有一套房子的人有人希望涨让自己的房子再升值，有人希望房价跌下去便于换一套大一点的房子住，无房阶层则希望房价跌下去以圆自己的住房梦。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">房价的高低对个人来说，对不同的群体影响各不相同，很难从这里判断出来房价高低的好坏。那么对整个社会的角度来看的话，房价高到底是好事还是坏事呢？本文准备从多核分布式计算角度来阐述一下高房价对社会的影响。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">可能许多人会有疑问，高房价和多核分布式计算这不是风牛马不及的两个东西吗？怎么把这两者扯到一起去了呢？我要说的是这两者还真的有很大的关系，要分析清楚高房价对社会的影响，还真得从多核分布式计算的角度来进行。先简单说一下高房价与多核分布式计算的关系：</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">首先，高房价本身是由于土地变成了共享资源而形成的，而共享资源计算属于多核分布式计算头等重要内容。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">第二，高房价使得财富集中到了发展商、炒家及政府手里，最终到了少数人手里，使得社会财富分配不均衡，无法实现藏富于民的战略，而藏富于民属于多核分布式计算的重要战略性思想。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">第三，高房价不利于建设高效的&ldquo;小政府&rdquo;，可能许多人知道，美国在里根政府时期进行了小政府改革，使得美国从90年代初开始快速发展，远远将80年代末快要赶上美国的日本等国甩在后面。而&ldquo;小政府&rdquo;思想也是多核分布式计算中的一个重要战略思想。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">从以上三点可以初步看出高房价与多核分布式计算有莫大的关系，下面就来详细谈谈高房价形成的多核分布式计算模型，多核分布式计算中藏富于民和小政府的基本思想及高房价之间的关系。</div><div><strong><span style="font-size: large"><a name="_Toc187835326"></a>高房价形成的多核分布式计算模型</span></strong></div><div style="margin-bottom: 7.8pt; text-indent: 21pt">房子象计算机内的内存或文件一样是一种资源，而购买房屋的人其实等于使用了相应的房子资源，这就像CPU核访问内存或文件资源一样。CPU核访问内存或文件资源花费的时间越多，就相当于购房人购买房屋花费了更多的金钱。这里购房者就可以比作是CPU核，由于有许多人要买房子，相当于有多个核要访问资源，因此房子问题本身就是一个多核计算问题，计算效率越高，那么访问资源花费的时间就越少，相当于房价就越便宜；计算效率越低，那么访问资源花费的时间就越多，相当于房价就越高。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">房价变高实际上相当于多核计算中效率降低了，那么在什么情况下多核计算的效率会降低呢？这得从多核计算模型谈起。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">在多核计算模型里，按照资源类型来划分的话，可以分为两种类型的计算，私有资源计算和共享资源计算。这两种类型计算那种更高效呢？相信搞软件的人都明白共享资源计算牵涉到数据保护问题，通常需要加锁解锁等处理，私有资源的访问效率远高于共享资源的访问效率。其实换到房子上也很容易明白，土地是政府所有，为取得这个共享资源，需要取得这个共享资源需要经过一大堆程序，还要交各种各样的税，访问成本同计算机里访问共享资源一样成本大大增加。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">由于私有资源的访问效率远高于共享资源的访问效率，那么私有资源计算效率是不是也远高于共享资源计算效率呢？答案是不一定的。因为不论私有资源计算还是共享资源计算都牵涉到分布式计算问题，而分布式计算的效率与负载平衡问题有非常大的关系，负载如果不够平衡，那么会降低计算效率，不平衡问题越严重，计算效率就越低。这里说的平衡并不是指平均，而是指按CPU核的能力将资源按比例进行分配。下面就来详细分析一下私有资源计算和共享资源计算的优劣。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">对于私有资源计算来说，可以把它看成是一种自然的分布式计算，资源分布在各个线程里，各个线程访问的都是私有资源，访问私有的效率非常高，如果负载是平衡的话，那么这是一种最高效也是最理想的计算模式。不幸的是，现实情况中不一定能做到负载平衡，某些情况下甚至会出现负载严重不平衡问题，如果私有资源分布式计算的负载平衡问题很严重，即资源只集中在少数人手里，相当于某些核得到了过多的资源，大多数核得到很少的资源，会导致大多数核发生饥饿甚至饿死现象，同样效率是很低下的。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">对于共享资源的计算，可以分为两种：共享资源集中式计算、共享资源分布式计算。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">共享资源集中式计算中，资源集中在一块，多个线程不能同时访问，必须通过加锁解锁方式进行排队访问，这是一种最低效的访问方式，比私有资源负载严重不平衡的情况下访问效率还要低。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">共享资源分布式计算模式中，共享资源被分成多个小块，每个小块有一把独立的锁，多个不同的小块可以并行访问，但是访问同一小块时必须排队访问。共享资源分布式计算的效率也和私有资源计算效率一样，要受到负载平衡的影响。负载平衡问题越严重，那么效率就越低，考虑一种极端情况，只分成了一块，这其实就退化成了集中式计算的模式。所以共享资源分布式计算在最坏情况下的效率和集中式计算效率一样，大多数情况下优于集中式计算的效率。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">共享资源分布式计算的效率和私有资源计算的效率比起来那个更好呢？其实在负载平衡情况完全相同的情况下，私有资源的计算效率是高于共享资源分布式计算的，但是如果私有资源的负载平衡情况比共享资源的负载平衡情况差很多，那么共享资源分布式计算效率可能会高于私有资源计算效率。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">之所以会形成高房价，主要是由于多核计算效率降低造成，通过上面的分析知道，多核计算效率降低的情况有三种：</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">1、私有资源计算出现严重负载平衡问题</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">2、共享资源集中式计算</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">3、共享资源分布式计算出现负载平衡问题</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">在第1种情况下，相当于房屋资源掌握在少数私人手里，从而产生严重的负载不平衡问题，使得计算效率降低了，房价自然也就变高了。西方私有制社会之所以也会出现高房价就是由这个原因造成。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">第2种情况下，共享资源集中式计算中，相当于房屋全部掌握在一级政府手里，这是一种最低效的计算模式，房价会变得非常高。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">第3种情况下，共享资源分布式计算出现负载平衡问题，相当于少数政府部门或发展商掌握了大量的房屋资源，计算效率变得很低，房价自然也变得很高。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">经过以上分析，可以看出房价高低与多核分布式计算有很大关系，并且与负载平衡问题有着莫大的关系，负载越均衡，那么计算效率就越高，反之则越低。那么房价高对整个社会来说是好事还是坏事呢？</div><div><strong><span style="font-size: large"><a name="_Toc187835327"></a>高房价违反藏富于民的思想</span></strong></div><div style="margin-bottom: 7.8pt; text-indent: 21pt">前面已经说过，高房价使得财富集中到了发展商、炒家及政府手里，最终到了少数人手里，使得社会财富分配不均衡，无法实现藏富于民的战略。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">为什么藏富于民是多核分布式计算中的重要战略呢？</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">先看看所谓的&ldquo;藏富于民&rdquo;，首先，所谓的&ldquo;富&rdquo;，可以理解成财富，更广义地可以理解成&ldquo;资源&rdquo;，所谓藏富于民或藏富于国，本质上就是将资源分布在民众手里还是集中在政府手里。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">民众手里的资源为私有资源；政府手里的资源为共享资源。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">如果采取藏富于民的策略，那么进行的是私有资源计算。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">如果采取藏富于国的策略，那么进行的是共享资源计算。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">&ldquo;藏富于民&rdquo;还是&ldquo;藏富于国&rdquo;问题就变成了私有资源计算和共享资源计算问题。其实&ldquo;藏富于民&rdquo;还包含了另外一层内容，民指广大的民众，而不是指少数人，&ldquo;藏富于民&rdquo;实际上相当于将资源均衡地分布到民众手里。 &ldquo;藏富于民&rdquo;可以认为是一种负载均衡的私有资源计算，前面说过，这是一种最高效的计算模式。因此在多核计算中，要采用&ldquo;藏富于民&rdquo;的战略。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">如何实现&ldquo;藏富于民&rdquo;是一个非常复杂的事情，这里可以谈一下&ldquo;藏富于民&rdquo;的一个必要条件：&ldquo;行业间的负载均衡&rdquo;。试想如果行业间没有取得负载均衡，某些行业取得了过多的资源，某些行业取得很少的资源甚至饿死，那么工作在那些取得很少资源的行业的人就无法取得足够的资源，最终将造成个体间的负载不均衡。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">高房价显然违反了&ldquo;藏富于民&rdquo;的思想，首先它使得社会上的财富（资源）流进了少数人的腰包，另外它还使得资源过多地流进了房地产行业，使得其他行业得不到足够的资源，使得行业间的负载变得不均衡。因此高房价最终使得整个社会的负载均衡状况恶化起来，从这个意义上说它起着降低社会效率的作用。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">顺便提一下，中国历代封建王朝中发生的农民大起义，本质上都是因为负载均衡问题造成。许多强盛的王朝在开国的时候，官僚机构都是新建立起来的，机构比较精简，都实行了&ldquo;轻徭役，薄税赋&rdquo;的政策，有些王朝甚至颁布了&ldquo;均田令&rdquo;，使得财富及资源均衡地留在百姓手中，没有集中到少数人手里，实现了很好的负载均衡。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">然而随着王朝的发展，受到&ldquo;帕金森定律&rdquo;的影响，官僚机构的权力不断扩张，加上缺乏有效的纠错机制，税赋又逐渐加重起来，如果再碰到一些外因，如外敌入侵等影响，税赋就变得更加严重了，负载均衡问题经过长时间的累积后，一天变得比一天严重，社会效率也就变得更加低了。降低到一定程度时，就很难将全部的人都养活，一旦发生饥饿甚至饿死的数量累积到达一个临界点，就爆发了农民大起义。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">明朝后期的李自成起义就是一个很好的例子，当时的崇祯皇帝虽然能力不是很强，但至少比他的前任好很多。然后明王朝没有终结在他的前任手里，却在他的手上结束了，为什么呢？因为在之前经历了严嵩当政几十时间，官场腐败导致负载平衡问题得到了很大的累积，后来又经过魏忠贤几十年的专权，负载平衡问题得到更大的累积，已经到达了临界点。崇祯上台后，满清的军事入侵威胁变得比以前更严重起来，需要大量的钱粮去满足山海关前线的军事要求。税赋变得更加重了，负载平衡问题已远超过了临界点，李自成起义刚开始失败了无数次，但每次失败后都可以死灰复燃，因为明王朝在取得对农民起义军的胜利后，并没有考虑解决负载平衡问题，相反由于镇压农民起义需要大量的开销，又需要加更多的税赋给老百姓，使得负载平衡问题一天比一天更严重，农民起义的基础一天比一天更好。明王朝就在这种不断恶化的负载平衡问题下最终被农民军推翻了。</div><div><strong><span style="font-size: large"><a name="_Toc187835328"></a>高房价违反小政府的思想</span></strong></div><div style="margin-bottom: 7.8pt; text-indent: 21pt">高房价不仅违反&ldquo;藏富于民&rdquo;的战略思想，还违反了&ldquo;小政府&rdquo;思想。&ldquo;小政府&rdquo;思想也是多核计算中的重要战略思想，为什么这样说呢？</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">首先政府管理着共享资源，小政府意味着管理着更少的共享资源，也就是说私有资源占据着更大的比重。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">由于私有资源计算在同等负载均衡情况下优于共享资源计算，因此私有资源占据着更大比重意味着计算效率的提高。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">当然小政府并不是越小越好，因为共享资源是客观存在的，并且有些资源是无法分割成私有资源的。举个简单例子，假设一个村里共用一台灌溉用的抽水机，如果要把它变成共享资源的话，是无法将一台抽水机割成一小块一小块的，唯一把它变成私有资源的方法就是每家都购买一台抽水机，不过这样每家都要一笔很大的开销，并且每家购买的抽水机大部分时间都是闲置，资源得不到有效利用。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">所以在实际情况中要实行100％的私有资源计算是不现实的，共享资源的最大好处就是资源可以得到有效利用，可以节约资源。那么那些资源应该作为私有资源计算，那些资源需要作为共享资源计算呢？</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">&ldquo;小政府&rdquo;思想就是用来解决那些资源作为共享资源，那些资源作为私有资源的，&ldquo;小政府&rdquo;思想的基本原则就是在有效利用资源的前提下尽可能的缩小共享资源，使得共享资源尽可能的少，这样才能建设小政府。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">在&ldquo;小政府&rdquo;思想指导下，对于那些能够分割成独立小块的资源，显然可以将独立小块资源作为各个执行核的私有资源来利用，如果无法分割的资源就作为共享资源。比如公路就不能作为私有资源，而必须作为共享资源，如果将公路分割分给个人的话，这些被分割的小块公路并不是独立的，无法做到每个人只用其中一小块，而必须用整条公路。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">其实大多数资源都是可以进行分割变成私有资源的，共享资源占的比重应该是远小于私有资源。即使共享资源占的比重再小，仍然需要采用分布式计算来提高效率，一般不能使用集中式计算。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">在现实情况中，经常会发生共享资源和私有资源划分不正确的情形。有些公共资源却由于种种原因被少数人占用了，实际上成了变相的私有资源，而有些可以私有化的资源却由于种种原因被当作了共享资源。私有化资源被当作共享资源处理会降低效率，特别是如果进行集中式计算模式时，效率将大大降低，世界上各个公有制国家的效率低下现象充分说明了这个问题。而共享资源被当成私有资源处理后，问题则变得更加严重，因为大家都无法访问那个资源了，将发生集体饿死现象，在私有制社会中经常会碰到这个问题，特别是早期的资本主义国家，国家公共资源被少数人掌握，变成了变相的私有资源，使得社会矛盾突出，经常发生革命。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">高房价的根源本身就是由于负载不平衡造成，而出现负载不平衡后，社会效率还会相应进行下降，自然会引起许多其他的社会问题（例如贫富差距扩大后，治安问题就变突出了），相应的为了管理这些社会问题，又会增加政府的负担，使得政府膨胀起来，增加了整个社会的公共资源，这显然背离了小政府的思想。因此高房价对建设小政府有不利影响。</div><div><strong><span style="font-size: large"><a name="_Toc187835329"></a>高房价的解决之道</span></strong></div><div style="margin-bottom: 7.8pt; text-indent: 21pt">从前面的分析可以看出，高房价对社会是有害的，会降低社会整体效率，那么如何如何来解决高房价问题，使房价降到合理的位置，并使得整个社会取得更好的负载均衡呢？</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">要解决高房价问题，其实还得从多核分布式计算入手，要使房价问题解决，首先就要取得房屋资源的计算负载均衡，而房屋资源的计算负载均衡实际上等价于土地资源的计算负载均衡，因此设计一个土地资源的负载均衡机制是一个最好的解决方法。（注：这里和下面说的土地都是指用于建私人住宅的土地）</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">提到土地的负载均衡，可能很多人想到了&ldquo;打土豪，均田地&rdquo;，是不是这种&ldquo;打土豪，均天地&rdquo;的方式能够让土地资源取得负载均衡呢？答案是否定的。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">首先&ldquo;打土豪，均田地&rdquo;只是对土地资源进行了一次负载均衡的初始化操作，只能保证暂时性的均衡，并不能保证均田地之后时间段内的均衡。当土地均分给个人后，如果土地允许买卖，那么收入高的富人每年都可以购买土地，而穷人则需要出卖土地，这样经过一段时间积累后，土地就会集中到少数富人手里，从而发生负载不平衡的情况，随着时间的增加，这种不平衡将变得越发严重。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">因此&ldquo;打土豪，分田地&rdquo;只是一种让负载重新初始化取得暂时性平衡的方法，而不是一种机制。对于一种负载平衡机制的要求应该是当一个系统重发生负载不平衡的条件下，这种机制会促使系统向均衡的方向发展，逐渐达到平衡。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">那么是不是可以通过禁止土地买卖来规避上面说的负载不平衡现象呢？答案也是否定的。考虑一下当一个个人由于各种原因要迁徙的时候，他不能将他原来的土地卖掉到新的地方去购买另外一块土地，当他到新的地方后又无法得到土地使用，实际上还是发生了变相的负载均衡问题。考虑一种极端情况，所有人都迁徙了一次，那么所有人都不能使用自己的土地。因此不允许土地买卖是不现实的，并不能规避计算负载平衡问题。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">现在需要考虑的是如何保证土地可以进行买卖的前提下，土地资源可以取得计算上的负载均衡，并且在出现负载不平衡的情况下，可以促使其向负载均衡的方向发展。一种方案就是控制个人拥有的土地数量，限制每个人的最大拥有量，并且当拥有量超过平均值后，征收高额的累进税赋，低于平均值时，不征收任何费用，甚至给予补贴。在这种方案下，没有多少人会愿意去购买更多的土地，除了那些特别富裕想过更优裕生活的除外，一些原本拥有大量土地的人也会将土地出让出来，土地资源会自动取得很好的均衡，土地资源的负载均衡意味着整体计算效率的提升，而效率提升意味着房价的下降（参见高房价形成的多核分布式计算模型）。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">既然通过对土地超出平均值以上部分征收高额累进税赋可以让土地资源取得负载平衡，那么这种方案对整个社会有什么影响呢？首先看看它是否符合&ldquo;藏富于民&rdquo;的思想，当富人购买更多的土地时，要向政府支付大量的税赋，当然政府就可以从其他地方少收税赋了，民众就可以少交一些税赋，使得社会资源向负载平衡方向发展了。另外房价下降后，财富将流向其他行业，促进其他行业的发展，使得各个行业间占有的资源取得均衡。所以它是非常符合&ldquo;藏富于民&rdquo;的思想的，有利于提高整个社会的效率。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">再来看看它是否符合&ldquo;小政府&rdquo;的思想，在不征累进税赋时，房产被当作投资对象，存在大量的炒家，交易自然频繁，而每次交易都需要到政府部门办理各种相关手续和缴纳税收，增加了政府的工作量。另外土地资源取得负载平衡后，实际上相当于房价下降到了合理的位置，有利于社会的稳定，减少其他社会问题，从而使得政府工作量大大减少。因此征累进税赋可以减少政府的工作量，利于建设小政府，同样利于整个社会效率的提升。</div><div style="margin-bottom: 7.8pt; text-indent: 21pt">综上所述，对个人拥有土地买卖权，并对拥有超过平均值部分的征收高额累进税是一种即可以使土地资源取得负载均衡，又对社会系统有着积极的影响，便于实现藏富于民并有利于建设小政府的机制。</div>
          <br/>
          <span style="color:red;">
            <a href="http://gohands.javaeye.com/blog/162163#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/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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 14 Feb 2008 08:40:12 +0800</pubDate>
        <link>http://gohands.javaeye.com/blog/162163</link>
        <guid>http://gohands.javaeye.com/blog/162163</guid>
      </item>
      <item>
        <title>答复: Jboss是免费的开源吗？</title>
        <author>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/160571" style="color:red;">http://gohands.javaeye.com/blog/160571</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          关于GNU许可证书可以阅读：<br />http://www.gnu.org/licenses/licenses.zh-cn.html<br /><br />LGPL中文翻译<br />http://www.thebigfly.com/gnu/lgpl/<br />以英文为准。<br /><br />LGPL （GNU Lesser General Public License）不是你说的那个意思。<br /><br />相关可以描述为：<br />如果你使用JBoss Portal源码开发了一个XPortal，那么，如果你的XPortal不是使用LGPL许可，即非开源项目，则不享受LGPL许可，即非免费。<br />而如果你不修改JBoss Portal，直接使用它，不受条款的限制。<br /><br /><br />From: http://www.javaeye.com/topic/160150
          <br/>
          <span style="color:red;">
            <a href="http://gohands.javaeye.com/blog/160571#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/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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Jan 2008 17:24:14 +0800</pubDate>
        <link>http://gohands.javaeye.com/blog/160571</link>
        <guid>http://gohands.javaeye.com/blog/160571</guid>
      </item>
      <item>
        <title>JAVA自学之路 一:学会选择</title>
        <author>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/160455" style="color:red;">http://gohands.javaeye.com/blog/160455</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>为了就业，不少同学参加各种各样的培训。<br />决心做软件的，大多数人选的是java，或是.net，也有一些选择了手机、嵌入式、游戏、3G、测试等。</p><p>那么究竟应该选择什么方向呢？<br />我的意见是，不要太过相信各种培训机构或是抢手文章的说法（包括我），当你要走向社会的时候，就不要再把自己当成学生，不要把自己的将来交给别人，学会运用自己的眼睛去观察，去了解这个世界吧。</p><p>每个培训机构都会宣传自己的好处，并不能说明大的趋势。<br />一些新闻文章很有可能是枪手写的，不必太过相信。<br />国外背景的教师和课程，未必适合你。</p><p>那么怎么才能确定自己将来的方向？如何才能从纷繁复杂、或真或假的数据世界中挖出一条路？<br />我讲一个通过招聘网站的观察方法。<br />可以到各种招聘的网站上查询信息（可以到google上查询招聘的网站），例如:<br /><a href="http://www.51job.com">http://www.51job.com</a><br /><a href="http://www.chinahr.com">http://www.chinahr.com</a><br /><a href="http://www.zhaopin.com">http://www.zhaopin.com</a><br />以及csdn的招聘频道等<br />还有一个网站也不错，<a href="http://www.jobui.com">http://www.jobui.com</a>，综合了各大招聘网站的数据。<br />这些数据都是最真实不掺假的原始数据，你可以每隔一段时间搜索一次，一些规律就会被总结出来了。<br />比如说我在<a href="http://www.jobui.com">http://www.jobui.com</a>中搜索java，全国大概提供了3万个职位。<br />然后要多翻几页，这样不仅能够看清楚大概有多少是有效的职位，而且还可以看清楚用人单位最关心的技能是什么，这个很重要，决定着你将来要花多少时间和精力在特定的知识点上，比如说swing，搜了一下，全国只有700个左右的职位，仔细读了一下，也并非全是有效的职位，花太多时间和精力在这个上面就不值得了，当然自己感兴趣或者为了研究的话另当别论。不过如果是为了快速的就业，把太多时间和精力花在很多职业生涯的前一、二年用不到的知识上就太可惜了。</p><p>同时，并非某一个行业的职位数目少，就不能当作一个方向进行选择，比如.NET，我搜索到的职位数是1.6万左右，比java 少，是不是就选java了呢？不一定，因为java职位虽然多，但是可能竞争者可能也多，有些方向虽然职位数不多，但是和你竞争这些职位的人数量也少，不见得就不能选择。</p><p>不过，如果某一个方向的职位数目过少，你可就要小心了，选择这样的方向风险会非常大，如J2ME。</p><p>我个人觉得java/J2EE、.net、嵌入式开发是不错的三个方向。</p><p>如果非要在java和.net中选择的话，我个人是推荐java的，原因：<br />1：Java能够开发linux、unix服务器上的程序<br />2：JavaEE和.NET在企业应用方面的关注点是差不多的，但是学习了java如果将来想转到.net上会比较简单，几天的学习然后上手开发应该是问题不大的，但是反之就不行了。 当然如果有了些经验之后，你就会发现语言或者平台不再是技术上的阻碍，一些原理性的东西学到手，然后再加上项目经验，使用什么平台，反而不是最重要的。不过如果非要用一种平台进入企业开发的领域，至少在目前，2007年9月，我推荐java。</p><p>完全可以不同意我的观点，但是无庸置疑，如果是为了就业，多到招聘网站阅读阅读职位的信息，对你将来的方向和学习是大有益处的。</p><p>选择是最痛苦的，看看《天生购物狂》中的刘青云就知道了，不过既然无法逃避，就作出自己的选择吧。</p><p>每个人都会受到别人的影响，在作出决定之前，要想尽各种办法让自己理性一些吧。这样，你的选择会离正确的方向更近一些。</p><p>Fom:http://www.bjsxt.com/zixue/zixuezhilu_1.html&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://gohands.javaeye.com/blog/160455#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/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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Jan 2008 14:11:26 +0800</pubDate>
        <link>http://gohands.javaeye.com/blog/160455</link>
        <guid>http://gohands.javaeye.com/blog/160455</guid>
      </item>
      <item>
        <title>网页制作 </title>
        <author>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/160456" style="color:red;">http://gohands.javaeye.com/blog/160456</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          网页制作 <br />网页实际是一个文件，他存放在世界某个角落的的某一台计算机中，而这台计算机必须是与互联网相连的。网页经由网址（ URL ）来识别与存取，当我们在浏览器输入网址后，经过一段复杂而又快速的程序，网页文件会被传送到你的计算机，然后再通过浏览器解释网页的内容，再展示到你的眼前。 <br /><br />要领一：确定网站主题 <br /><br />做网站，首先必须要解决的就是网站内容问题，即确定网站的主题。美国《个人电脑》杂志(PC Magazine)评出了99年度排名前100位的全美知名网站的十类题材：第1类：网上求职；第2类：网上聊天/即时信息/ICQ；第3类：网上社区/讨论/邮件列表；第4类：计算机技术；第5类：网页/网站开发；第6类：娱乐网站；第7类：旅行；第8类：参考/资讯；第9类：家庭/教育；第10类：生活/时尚。我们可以参看上面的分类，继续细分。如果自己在某些方面有兴趣，或掌握的资料较多，也可以做一个自己感兴趣的东西，一者，你可以有自己的见解，做出自己的特色；二者，在制作网站时不会觉得无聊或者力不从心。兴趣是制作网站的动力，没有创作热情，很难设计制作出优秀的作品。 <br /><br />对于内容主题的选择，要做到小而精，主题定位要小，内容要精。不要去试图制作一个包罗万象的站点，这往往会失去网站的特色，也会带来高强度的劳动，给网站的及时更新带来困难。记住：在互联网上只有第一，没有第二！ <br /><br />要领二：选择好域名 <br /><br />域名是网站在互联网上的名字。一个非产品推销的纯信息服务网站，其所有建设的价值，都凝结在其网站域名之上。失去这个域名，所有前期工作就将柯淇铡?br&gt; <br /><br />目前，做个人网站的很多都依赖免费个人空间，其域名也是依赖免费域名指向，如网易的虚拟域名服务，其实这对个人网站的推广与发展很为不利，不光是它&ldquo;适时&rdquo;开启的窗口妨碍了浏览者的视线和好感，让人一看就知道是个人网站，而且也妨碍了网页的传输速度。所以，就我个人观点来说，首先花点钱去注册一个域名，独立的域名就是个人网站的第一笔财富，要把域名起得形象、简单、易记。 <br /><br />要领三：掌握建网工具 <br /><br />网络技术的发展带动了软件业的发展，所以用于制作Web页面的工具软件也越来越丰富。从最基本的HTML编辑器到现在非常流行的Flash互动网页制作工具，各种各样的Web页面制作工具，下面是几款具有代表性的网页制作器： <br /><br />（1）HTML编辑器。虽然HTML代码复杂，编辑和调试要花费大量的时间，但因HTML的稳定性、广泛支持性及可创建复杂的页面效果，仍受高级网页制作人员的青睐。就目前来说，有众多的编辑器供选择，这些编辑器广泛支持复杂页面创建及高级HTML规范，使用较为普遍的有Hotdog等专业HTML编辑器。 <br /><br />（2）所见即所得的网页编辑器。其中以Microsoft Frontpage为代表，它具有如Word一样的操作界面，熟知Word功能的操作者，只要稍加培训就能轻松编制网页。而且，Frontpage还能解析网页的HTML源代码，并提供了预览支持。但Frontpage的一些特殊显示功能并不能在其它非IE浏览器下实现。所以Frontpage是一款非常适合初、中级网页制作人员使用的工具软件。 <br /><br />（3）现在非常流行的 Macromedia公司出品的Flash互动网页制作工具。这是是一款功能非常强大的交互式矢量多媒体网页制作工具。能够轻松输出各种各样的动画网页，它不需要特别繁杂的操作，也比JAVA小巧精悍！但它的动画效果、互动效果、多媒体效果十分出色。而且还可以在Flash动画中封装Mp3音乐、填写表单等；并且由于Flash编制的网页文件比普通网页文件要小得多，所以大大加快了浏览速度。这是一款十分适合动态Web制作的工具。 <br /><br />另外，个人网站制作者还需了解W3C的HTML4.0规范、CSS层叠样式表的基本知识、javascript、VBScript的基本知识。对于常用的一些脚本程序如ASP、CGI、PHP也要有适当了解，还要熟练使用图形处理工具和动画制作工具以及矢量绘图工具，并能部分了解多种图形图像动画工具的基本用法，熟练使用FTP工具以及拥有相应的软硬件和网络知识也是必备的。 <br /><br />当然，互联网还是一个免费的资料库。编制网页需要多种多样的按钮、背景还有各种各样图形、图片。如果这些都要靠自己完成，既浪费时间又浪费金钱，而且还需要强大的图形、图片制作技术。所以，为了省却这些麻烦，网站制作者完全可以从网上下载各种精美实用的图片、按钮、背景等网页素材。 <br /><br />要领四：确定网站界面 <br /><br />界面就是网站给浏览者的第一印象，往往决定着网站的可看性，在确定网站的界面时要注意以下三点： <br /><br />①栏目与板块编排 <br /><br />构建一个网站就好比写一篇论文，首先要列出提纲，才能主题明确、层次清晰。网站建设初学者，最容易犯的错误就是：确定题材后立刻开始制作，没有进行合理规划。从而导致网站结构不清晰，目录庞杂混乱，板块编排混乱等。结果不但浏览者看得糊里糊涂，制作者自己在扩充和维护网站也相当困难。所以，我们在动手制作网页前，一定要考虑好栏目和板块的编排问题。 <br /><br />网站的题材确定后，就要将收集到的资料内容作一个合理的编排。比如，将一些最吸引人的内容放在最突出的位置或者在版面分布上占优势地位。栏目的实质是一个网站的大纲索引，索引应该将网站的主体明确显示出来。在制定栏目的时候，要仔细考虑，合理安排。在栏目编排时需要注意的是： <br /><br />●尽可能删除那些与主题无关的栏目； <br /><br />●尽可能将网站内最有价值的内容列在栏目上； <br /><br />●尽可能从访问者角度来编排栏目以方便访问者的浏览和查询；辅助内容，如站点简介、版权信息、个人信息等大可不必放在主栏目里，以免冲淡主题。 <br /><br />另外，板块的编排设置也要合理安排与划分。板块比栏目的概念要大一些，每个板块都有自己的栏目。举个例子：ENET硅谷动力（<a href="http://www.enet.com.cn/" target="_blank">www.enet.com.cn</a>）的站点分新闻、产品、游戏、学院等板块，每个板块下面又各有自己的主栏目。一般来说，个人站点内容较少，只要分个栏目也就够了，不需要设置板块。如果有必要设置板块的，应该注意： <br /><br />●各板块要有相对独立性； <br /><br />●各板块要有相互关联； <br /><br />●各板块的内容要围绕站点主题； <br /><br />②目录结构与链接结构 <br /><br />网站的目录是指建立网站时创建的目录。例如：在用Frontpage建立网站时都默认建立了根目录和Images子目录。目录的结构是一个容易忽略的问题，大多数站长都是未经规划，随意创建子目录。目录结构的好坏，对浏览者来说并没有什么太大的感觉，但是对于站点本身的维护，以后内容的扩充和移植有着重要的影响。所以建立目录结构时也要仔细安排，比如： <br /><br />●不要将所有文件都存放在根目录下。有网站制作者为了方便，将所有文件都放在根目录下。这样就很容易造成：文件管理混乱，搞不清哪些文件需要编辑和更新，哪些无用的文件可以删除，哪些是相关联的文件，影响工作效率；上传速度变慢，服务器一般都会为根目录建立一个文件索引，如果将所有文件都放在根目录下，那么即使只上传更新一个文件，服务器也需要将所有文件再检索一遍，建立新的索引文件，很明显，文件量越大，等待的时间也将越长。 <br /><br />●按栏目内容建立子目录。子目录的建立，首先按主栏目建立。友情连接内容较多，需要经常更新的可以建立独立的子目录。而一些相关性强，不需要经常更新的栏目，例如：网站简介、站长情况等可以合并放在一个统一目录下。所有程序一般都存放在特定目录，例如：CGI程序放在cgi-bin目录，所有提供下载的内容也最好放在一个目录下，便于维护管理。 <br /><br />●在每个主目录下都建立独立的Images目录。一般来说，一个站点根目录下都有一个默认地Images目录。将所有图片都存放在这个目录里很是不方便，比如在栏目删除时，图片的管理相当麻烦。所以为每个主栏目建立一个独立的Images目录是方便管理的。原因很简单，就是方便维护与管理。 <br /><br />其它需要注意的还有：目录的层次不要太深，不要超过3层；不要使用中文目录，使用中文目录可能对网址的正确显示造成困难；不要使用过长的目录，太长的目录名不便于记忆；尽量使用意义明确的目录，以便于记忆和管理。 <br /><br />网站的链接结构是指页面之间相互链接的拓扑结构。它建立在目录结构基础之上，但可以跨越目录。形象的说：每个页面都是一个固定点，链接则是在两个固定点之间的连线。一个点可以和一个点连接，也可以和多个点连接。更重要的是，这些点并不是分布在一个平面上，而是存在于一个立体的空间中。一般的，建立网站的链接结构有两种基本方式： <br /><br />●树状链接结构（一对一），这类似DOS的目录结构，首页链接指向一级页面，一级页面链接指向二级页面。这样的链接结构浏览时，一级级进入，一级级退出，条理比较清晰，访问者明确知道自己在什么位置，不会&ldquo;不知身在何处&rdquo;，但是浏览效率低，一个栏目下的子页面到另一个栏目下的子页面，必须回到首页再进行。 <br /><br />●星状链接结构（一对多），类似网络服务器的链接，每个页面相互之间都建立有链接。这样浏览比较方便，随时可以到达自己喜欢的页面。但是由于链接太多，容易使浏览者迷路，搞不清自己在什么位置，看了多少内容。 <br /><br />因此，在实际的网站设计中，总是将这两种结构混合起来使用。网站希望浏览者既可以方便快速地达到自己需要的页面，又可以清晰地知道自己的位置。所以，最好的办法是：首页和一级页面之间用星状链接结构，一级和二级页面之间用树状链接结构。关于链接结构的设计，在实际的网页制作中是非常重要一环，采用什么样的链接结构直接影响到版面的布局。 <br /><br />③进行形象设计 <br /><br />网站的设计可以从以下几点出发： <br /><br />●设计网站标志(LOGO)。LOGO是指网站的标志，标志可以是中文、英文字母，也可以是符号、图案等。标志的设计创意应当来自网站的名称和内容。比如：网站内有代表性的人物、动物、植物，可以用它们作为设计的蓝本，加以卡通化或者艺术化；专业网站可以以本专业有代表的物品作为标志。最常用和最简单的方式是用自己网站的英文名称作标志，采用不同的字体、字母的变形、字母的组合可以很容易制作好自己的标志。 <br /><br />●设计网站色彩。网站给人的第一印象来自视觉冲击，不同的色彩搭配产生不同的效果，并可能影响到访问者的情绪。&ldquo;标准色彩&rdquo;是指能体现网站型象和延伸内涵的色彩，要用于网站的标志，标题，主菜单和主色块。给人以整体统一的感觉。至于其它色彩也可以使用，但应当只是作为点缀和衬托，绝不能喧宾夺主。一般来说，一个网站的标准色彩不超过3种，太多则让人眼花缭乱。适合于网页标准色的颜色有：蓝色，黄/橙色，黑/灰/白色三大系列色。 <br /><br />●设计网站字体。和标准色彩一样，标准字体是指用于标志，标题，主菜单的特有字体。一般网页默认的字体是宋体。为了体现站点的&ldquo;与众不同&rdquo;和特有风格，可以根据需要选择一些特别字体。制作者可以根据自己网站所表达的内涵，选择更贴切的字体。需要说明的是：使用非默认字体只能用图片的形式，因为很可能浏览者的计算机里没有安装特别字体，那么辛苦设计制作便可能付之东流了。 <br /><br />●设计网站宣传语。也可以说是网站的精神、主题与中心，或者是网站的目标，用一句话或者一个词来高度概括。用富有气势的话或词语来概括网站，进行对外宣传，可以收到比较好的结果。 <br /><br />要领五：确定网站风格 <br /><br />&ldquo;风格&rdquo;是抽象的，是指站点的整体形象给浏览者的综合感受。这个&ldquo;整体形象&rdquo;包括站点的CI（标志，色彩，字体，标语）、版面布局、浏览方式、交互性、文字、语气、内容价值等等诸多因素，网站可以是平易近人的、生动活泼的也可以是专业严肃的。不管是色彩、技术、文字、布局，还是交互方式，只要你能由此让浏览者明确分辨出这是你网站独有的，这就形成了网站的&ldquo;风格&rdquo;。 <br /><br />风格是有人性的，通过网站的色彩、技术、文字、布局、交互方式可以概括出一个站点的个性：是粗犷豪放的，还是清新秀丽的；是温文儒雅的，还是执著热情的；是活泼易变的，还是墨守成规的。 <br /><br />总之，有风格的网站与普通网站的区别在于：在普通网站上你看到的只是堆砌在一起的信息，你只能用理性的感受来描述，比如信息量多少，浏览速度快慢等；在有风格的网站上你可以获得除内容之外的更感性的认识，比如站点的品位，对浏览者的态度等。 <br /><br />在明确自己想给人以怎样的印象后，要找出网站中最有特色的东西，就是最能体现网站风格的东西。并以它作为网站的特色加以重点强化、宣传。总之，风格的形成不是一次定位的，你可以在实践中不断强化、调整、改进。 <br /><br />要领六：有创意的内容选择 <br /><br />好的内容选择需要有好的创意，作为网页设计制作者，最苦恼的就是没有好的内容创意。网络上的最多的创意即是来自于虚拟同现实的结合。创意的目的是为了更好的宣传与推广网站，如果创意很好，却对网站发展毫无意义，那么，网站设计制作者也应当放弃这个创意。另外，主页内容是网站的根本之所在，如果内容空洞，即使页面制作地再怎样精美，仍然不会有多少用户。从根本上说，网站内容仍然左右着网站流量，内容为王（Content Is King）依然是个人网站成功的关键。 <br /><br />要领七：推广自己的网站 <br /><br />网站的营销推广在个人网站的运行中也占着重要的地位，在推广个人网站之前，请确保已经做好了以下内容：网站信息内容丰富、准确、及时；网站技术具有一定专业水准，网站的交互性能良好。一般来说，网站的推广有以下几种方式： <br /><br />（1）搜索引擎注册与搜索目录登录技巧 <br /><br />注册著名的搜索引擎站点是在技术上推广网站的第一步。注册搜索引擎有一定的技巧，像AltaVista、搜索客这样的搜索引擎，它自动收录提交的网址。另外，注意Meta的使用，不要提交分栏Frame页面，大部分搜索引擎不识别Frame，所以一定要提交有内容的Main页面。 <br /><br />而像Yahoo、搜狐等搜索目录网站采用手工方式收录网址，以保证收录网站的质量，在分类查询时获得的信息相关性比搜索引擎站点（靠Spider自动搜索的）更强。由于搜索目录网站收录网站的人为因素相对较多，因此在提交网站时要注意遵守规则。如Yahoo要求注册站点描述不超过25个单词。在此要注意：将网址提交到最合适的目录下面，要认真详细的介绍网站，千万不要有虚假、夸张的成分。 <br /><br />（2）广告交换技巧 <br /><br />很多个人站点在相互广告交换时都提出了几个条件：第一，访问量相当；第二，首页交换。显而易见，这种做法是为了充分利用广告交换。以很多个人网站的经验，当与一个个人站点交换链接时，对方把网站的LOGO放到了友情连接一页，而不是首页时，很少有访客会来自那里。通常在首页，广告交换才会有很好的效果。 <br /><br />（3）目标电子邮件推广 <br /><br />使用电子邮件宣传网址时，主要有如下技巧：可以使用免费邮件列表来进行，只要你申请了免费邮件列表服务，你就可以利用邮件列表来推广你的网站；可以通过收集的特定邮件地址，来发送信息到特定的网络群体，在特定网络群体中推广自己的网站；发送HTML格式的邮件，即使其内容与接收者关系不大，也不会被被当作垃圾信件马上删掉，人们至少会留意一下发送者的地址。不过，在进行邮件推广的时候要注意网络道德。 <br /><br />要领八：支撑网站日常运行 <br /><br />当个人网站做到某一程度，就必须把赚钱提到议事日程上来，通常来说，个人网站获取资金通常有以下两个渠道： <br /><br />（1）销售网站的广告位 <br /><br />要销售网站的广告位，一般来说，每日的流量少于1万人次的网站在目前是不会吸引广告主的。网站的专业性及商用性，以往的广告经验，技术以及设计要求等也会影响到广告的销售。 <br /><br />一般来说，WEB广告的收费有三种方式： <br /><br />①CPM (Cost Per Million/Thousand) <br /><br />放一个广告，它按每1,000人次来访问站点收费。这方法对网站经营者最为合适，只要有人浏览该网页，就得钱，不管访问者对广告有无反应&mdash;&mdash;是否会看或点击该广告。 <br /><br />②点透（Click-through） <br /><br />通过Banner广告点到了广告商的站点，这才算数，广告商青睐这个，他只为对自己广告感兴趣的人&ldquo;套钱&ldquo;。网站经营者就不合适了，据一些调查资料表明，只有3%的访问者会去&ldquo;CLICK&rdquo;广告。 <br /><br />③提成 (Commission) <br /><br />根据访问者点击位于你站点上广告所带来的销售收入，从中跟做广告的厂商分成，这种方法对于网站的经营者来说，比上面两个都更加冒险。 <br /><br />通常的，个人网站的广告收费方法往往是第一、第二种方法的结合，站点和广告商都可少冒点险。 <br /><br />（2）与大型网站合作 <br /><br />另外，通过与大型网站合作，获取经费，也可以维持个人网站的日常运行。不过，个人网站很容易会成为商业网站的附属品。 <br /><br />有时间和充沛的体力，再加上对新技术和技巧的学习和应用，你就能为自己在网上建一个家了。&nbsp;
          <br/>
          <span style="color:red;">
            <a href="http://gohands.javaeye.com/blog/160456#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/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>Wed, 30 Jan 2008 14:02:54 +0800</pubDate>
        <link>http://gohands.javaeye.com/blog/160456</link>
        <guid>http://gohands.javaeye.com/blog/160456</guid>
      </item>
      <item>
        <title>介绍一些集成APACHE+MYSQL+PHP的软件</title>
        <author>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/160457" style="color:red;">http://gohands.javaeye.com/blog/160457</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>PHPHOME<br />集成: php,Apache,MySQL,phpadmin<br />轻松搭建Apache的PHP环境<br /><br />Appserv：<br />出的时间比较晚，功能很完善，单独控制服务是否启动<br />下载地址：<a href="http://www.appservnetwork.com">http://www.appservnetwork.com</a></p><p>WAMP：<br />通过名字就知道是APACHE+MYSQL+PHP的集成软件。德国人开发的,不错!<br /><a href="http://sourceforge.net/project/showfiles.php?group_id=116092">http://sourceforge.net/project/showfiles.php?group_id=116092</a></p><p><br />XAMPP：<br />下载地址：<a href="http://www.apachefriends.org/en">http://www.apachefriends.org/en</a><br />这个软件支持多个平台,Win\Linux\Solaris\Mac OS X，目前也有不少人使用。<br /><br /></p>
          <br/>
          <span style="color:red;">
            <a href="http://gohands.javaeye.com/blog/160457#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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Jan 2008 13:39:29 +0800</pubDate>
        <link>http://gohands.javaeye.com/blog/160457</link>
        <guid>http://gohands.javaeye.com/blog/160457</guid>
      </item>
      <item>
        <title>Html 解码的Java类</title>
        <author>gohands</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://gohands.javaeye.com">gohands</a>&nbsp;
          链接：<a href="http://gohands.javaeye.com/blog/160458" style="color:red;">http://gohands.javaeye.com/blog/160458</a>&nbsp;
          发表时间: 2008年01月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本类的主要作用，就是将那些HTML编码后的字符，转回本来对应的字符。尤其适合于一些特殊的符号。大部分以&amp;开头 <br /><br /><div class="blockcode"><h5>代码:</h5><code id="code102">import&nbsp;java.util.HashMap; <br /><br />public&nbsp;class&nbsp;HTMLDecoder&nbsp;{ <br /><br />&nbsp;&nbsp;public&nbsp;static&nbsp;final&nbsp;HashMap&nbsp;charTable; <br /><br />&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;decode(String&nbsp;s)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;t; <br />&nbsp;&nbsp;&nbsp;&nbsp;Character&nbsp;ch; <br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;tmpPos,&nbsp;i; <br /><br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;maxPos&nbsp;=&nbsp;s.length(); <br />&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuffer(maxPos); <br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;curPos&nbsp;=&nbsp;0; <br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(curPos&nbsp;&lt;&nbsp;maxPos)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;c&nbsp;=&nbsp;s.charAt(curPos++); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(c&nbsp;==&nbsp;'&amp;')&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpPos&nbsp;=&nbsp;curPos; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tmpPos&nbsp;&lt;&nbsp;maxPos)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;d&nbsp;=&nbsp;s.charAt(tmpPos++); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(d&nbsp;==&nbsp;'#')&nbsp;{&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tmpPos&nbsp;&lt;&nbsp;maxPos)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;s.charAt(tmpPos++); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((d&nbsp;==&nbsp;'x')&nbsp;||&nbsp;(d&nbsp;==&nbsp;'X'))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(tmpPos&nbsp;&lt;&nbsp;maxPos)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;s.charAt(tmpPos++); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isHexDigit(d))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(tmpPos&nbsp;&lt;&nbsp;maxPos)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;s.charAt(tmpPos++); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!isHexDigit(d))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(d&nbsp;==&nbsp;';')&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;= <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.substring( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curPos&nbsp;+&nbsp;2, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpPos&nbsp;-&nbsp;1); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;= <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer.parseInt( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((i&nbsp;&gt;=&nbsp;0) <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;(i&nbsp;&lt;&nbsp;65536))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;(char)&nbsp;i; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curPos&nbsp;=&nbsp;tmpPos; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(NumberFormatException&nbsp;e)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(isDigit(d))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(tmpPos&nbsp;&lt;&nbsp;maxPos)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;s.charAt(tmpPos++); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!isDigit(d))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(d&nbsp;==&nbsp;';')&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;= <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.substring( <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curPos&nbsp;+&nbsp;1, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpPos&nbsp;-&nbsp;1); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;Integer.parseInt(t); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((i&nbsp;&gt;=&nbsp;0)&nbsp;&amp;&amp;&nbsp;(i&nbsp;&lt;&nbsp;65536))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;(char)&nbsp;i; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curPos&nbsp;=&nbsp;tmpPos; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(NumberFormatException&nbsp;e)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(isLetter(d))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(tmpPos&nbsp;&lt;&nbsp;maxPos)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;s.charAt(tmpPos++); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!isLetterOrDigit(d))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(d&nbsp;==&nbsp;';')&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;s.substring(curPos,&nbsp;tmpPos&nbsp;-&nbsp;1); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch&nbsp;=&nbsp;(Character)&nbsp;charTable.get(t); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ch&nbsp;!=&nbsp;null)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;ch.charValue(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curPos&nbsp;=&nbsp;tmpPos; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(c); <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sb.toString(); <br />&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;private&nbsp;static&nbsp;boolean&nbsp;isLetterOrDigit(char&nbsp;c)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;isLetter(c)&nbsp;||&nbsp;isDigit(c); <br />&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;private&nbsp;static&nbsp;boolean&nbsp;isHexDigit(char&nbsp;c)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;isHexLetter(c)&nbsp;||&nbsp;isDigit(c); <br />&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;private&nbsp;static&nbsp;boolean&nbsp;isLetter(char&nbsp;c)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;((c&nbsp;&gt;=&nbsp;'a')&nbsp;&amp;&amp;&nbsp;(c&nbsp;&lt;=&nbsp;'z'))&nbsp;||&nbsp;((c&nbsp;&gt;=&nbsp;'A')&nbsp;&amp;&amp;&nbsp;(c&nbsp;&lt;=&nbsp;'Z')); <br />&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;private&nbsp;static&nbsp;boolean&nbsp;isHexLetter(char&nbsp;c)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;((c&nbsp;&gt;=&nbsp;'a')&nbsp;&amp;&amp;&nbsp;(c&nbsp;&lt;=&nbsp;'f'))&nbsp;||&nbsp;((c&nbsp;&gt;=&nbsp;'A')&nbsp;&amp;&amp;&nbsp;(c&nbsp;&lt;=&nbsp;'F')); <br />&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;private&nbsp;static&nbsp;boolean&nbsp;isDigit(char&nbsp;c)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(c&nbsp;&gt;=&nbsp;'0')&nbsp;&amp;&amp;&nbsp;(c&nbsp;&lt;=&nbsp;'9'); <br />&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;compact(String&nbsp;s)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;maxPos&nbsp;=&nbsp;s.length(); <br />&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuffer(maxPos); <br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;curPos&nbsp;=&nbsp;0; <br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(curPos&nbsp;&lt;&nbsp;maxPos)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;c&nbsp;=&nbsp;s.charAt(curPos++); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isWhitespace(c))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((curPos&nbsp;&lt;&nbsp;maxPos)&nbsp;&amp;&amp;&nbsp;isWhitespace(s.charAt(curPos)))&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curPos++; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;=&nbsp;'\u0020'; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(c); <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sb.toString(); <br />&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;//&nbsp;HTML&nbsp;is&nbsp;very&nbsp;particular&nbsp;about&nbsp;what&nbsp;constitutes&nbsp;white&nbsp;space. <br />&nbsp;&nbsp;public&nbsp;static&nbsp;boolean&nbsp;isWhitespace(char&nbsp;ch)&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(ch&nbsp;==&nbsp;'\u0020') <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;(ch&nbsp;==&nbsp;'\r') <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;(ch&nbsp;==&nbsp;'\n') <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;(ch&nbsp;==&nbsp;'\u0009') <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;(ch&nbsp;==&nbsp;'\u000c') <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;(ch&nbsp;==&nbsp;'\u200b'); <br />&nbsp;&nbsp;} <br /><br />&nbsp;&nbsp;static&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable&nbsp;=&nbsp;new&nbsp;HashMap(); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;quot&quot;,&nbsp;new&nbsp;Character((char)34)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;amp&quot;,&nbsp;new&nbsp;Character((char)38)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;apos&quot;,&nbsp;new&nbsp;Character((char)39)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;lt&quot;,&nbsp;new&nbsp;Character((char)60)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;gt&quot;,&nbsp;new&nbsp;Character((char)62)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;nbsp&quot;,&nbsp;new&nbsp;Character((char)160)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;iexcl&quot;,&nbsp;new&nbsp;Character((char)161)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;cent&quot;,&nbsp;new&nbsp;Character((char)162)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;pound&quot;,&nbsp;new&nbsp;Character((char)163)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;curren&quot;,&nbsp;new&nbsp;Character((char)164)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;yen&quot;,&nbsp;new&nbsp;Character((char)165)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;brvbar&quot;,&nbsp;new&nbsp;Character((char)166)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;sect&quot;,&nbsp;new&nbsp;Character((char)167)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;uml&quot;,&nbsp;new&nbsp;Character((char)168)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;copy&quot;,&nbsp;new&nbsp;Character((char)169)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ordf&quot;,&nbsp;new&nbsp;Character((char)170)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;laquo&quot;,&nbsp;new&nbsp;Character((char)171)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;not&quot;,&nbsp;new&nbsp;Character((char)172)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;shy&quot;,&nbsp;new&nbsp;Character((char)173)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;reg&quot;,&nbsp;new&nbsp;Character((char)174)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;macr&quot;,&nbsp;new&nbsp;Character((char)175)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;deg&quot;,&nbsp;new&nbsp;Character((char)176)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;plusmn&quot;,&nbsp;new&nbsp;Character((char)177)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;sup2&quot;,&nbsp;new&nbsp;Character((char)178)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;sup3&quot;,&nbsp;new&nbsp;Character((char)179)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;acute&quot;,&nbsp;new&nbsp;Character((char)180)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;micro&quot;,&nbsp;new&nbsp;Character((char)181)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;para&quot;,&nbsp;new&nbsp;Character((char)182)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;middot&quot;,&nbsp;new&nbsp;Character((char)183)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;cedil&quot;,&nbsp;new&nbsp;Character((char)184)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;sup1&quot;,&nbsp;new&nbsp;Character((char)185)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ordm&quot;,&nbsp;new&nbsp;Character((char)186)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;raquo&quot;,&nbsp;new&nbsp;Character((char)187)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;frac14&quot;,&nbsp;new&nbsp;Character((char)188)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;frac12&quot;,&nbsp;new&nbsp;Character((char)189)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;frac34&quot;,&nbsp;new&nbsp;Character((char)190)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;iquest&quot;,&nbsp;new&nbsp;Character((char)191)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Agrave&quot;,&nbsp;new&nbsp;Character((char)192)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Aacute&quot;,&nbsp;new&nbsp;Character((char)193)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Acirc&quot;,&nbsp;new&nbsp;Character((char)194)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Atilde&quot;,&nbsp;new&nbsp;Character((char)195)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Auml&quot;,&nbsp;new&nbsp;Character((char)196)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Aring&quot;,&nbsp;new&nbsp;Character((char)197)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;AElig&quot;,&nbsp;new&nbsp;Character((char)198)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Ccedil&quot;,&nbsp;new&nbsp;Character((char)199)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Egrave&quot;,&nbsp;new&nbsp;Character((char)200)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Eacute&quot;,&nbsp;new&nbsp;Character((char)201)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Ecirc&quot;,&nbsp;new&nbsp;Character((char)202)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Euml&quot;,&nbsp;new&nbsp;Character((char)203)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Igrave&quot;,&nbsp;new&nbsp;Character((char)204)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Iacute&quot;,&nbsp;new&nbsp;Character((char)205)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Icirc&quot;,&nbsp;new&nbsp;Character((char)206)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Iuml&quot;,&nbsp;new&nbsp;Character((char)207)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ETH&quot;,&nbsp;new&nbsp;Character((char)208)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Ntilde&quot;,&nbsp;new&nbsp;Character((char)209)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Ograve&quot;,&nbsp;new&nbsp;Character((char)210)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Oacute&quot;,&nbsp;new&nbsp;Character((char)211)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Ocirc&quot;,&nbsp;new&nbsp;Character((char)212)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Otilde&quot;,&nbsp;new&nbsp;Character((char)213)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Ouml&quot;,&nbsp;new&nbsp;Character((char)214)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;times&quot;,&nbsp;new&nbsp;Character((char)215)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Oslash&quot;,&nbsp;new&nbsp;Character((char)216)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Ugrave&quot;,&nbsp;new&nbsp;Character((char)217)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Uacute&quot;,&nbsp;new&nbsp;Character((char)218)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Ucirc&quot;,&nbsp;new&nbsp;Character((char)219)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Uuml&quot;,&nbsp;new&nbsp;Character((char)220)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Yacute&quot;,&nbsp;new&nbsp;Character((char)221)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;THORN&quot;,&nbsp;new&nbsp;Character((char)222)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;szlig&quot;,&nbsp;new&nbsp;Character((char)223)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;agrave&quot;,&nbsp;new&nbsp;Character((char)224)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;aacute&quot;,&nbsp;new&nbsp;Character((char)225)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;acirc&quot;,&nbsp;new&nbsp;Character((char)226)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;atilde&quot;,&nbsp;new&nbsp;Character((char)227)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;auml&quot;,&nbsp;new&nbsp;Character((char)228)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;aring&quot;,&nbsp;new&nbsp;Character((char)229)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;aelig&quot;,&nbsp;new&nbsp;Character((char)230)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ccedil&quot;,&nbsp;new&nbsp;Character((char)231)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;egrave&quot;,&nbsp;new&nbsp;Character((char)232)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;eacute&quot;,&nbsp;new&nbsp;Character((char)233)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ecirc&quot;,&nbsp;new&nbsp;Character((char)234)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;euml&quot;,&nbsp;new&nbsp;Character((char)235)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;igrave&quot;,&nbsp;new&nbsp;Character((char)236)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;iacute&quot;,&nbsp;new&nbsp;Character((char)237)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;icirc&quot;,&nbsp;new&nbsp;Character((char)238)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;iuml&quot;,&nbsp;new&nbsp;Character((char)239)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;eth&quot;,&nbsp;new&nbsp;Character((char)240)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ntilde&quot;,&nbsp;new&nbsp;Character((char)241)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ograve&quot;,&nbsp;new&nbsp;Character((char)242)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;oacute&quot;,&nbsp;new&nbsp;Character((char)243)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ocirc&quot;,&nbsp;new&nbsp;Character((char)244)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;otilde&quot;,&nbsp;new&nbsp;Character((char)245)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ouml&quot;,&nbsp;new&nbsp;Character((char)246)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;divide&quot;,&nbsp;new&nbsp;Character((char)247)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;oslash&quot;,&nbsp;new&nbsp;Character((char)248)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ugrave&quot;,&nbsp;new&nbsp;Character((char)249)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;uacute&quot;,&nbsp;new&nbsp;Character((char)250)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ucirc&quot;,&nbsp;new&nbsp;Character((char)251)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;uuml&quot;,&nbsp;new&nbsp;Character((char)252)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;yacute&quot;,&nbsp;new&nbsp;Character((char)253)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;thorn&quot;,&nbsp;new&nbsp;Character((char)254)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;yuml&quot;,&nbsp;new&nbsp;Character((char)255)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;OElig&quot;,&nbsp;new&nbsp;Character((char)338)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;oelig&quot;,&nbsp;new&nbsp;Character((char)339)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Scaron&quot;,&nbsp;new&nbsp;Character((char)352)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;scaron&quot;,&nbsp;new&nbsp;Character((char)353)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;fnof&quot;,&nbsp;new&nbsp;Character((char)402)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;circ&quot;,&nbsp;new&nbsp;Character((char)710)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;tilde&quot;,&nbsp;new&nbsp;Character((char)732)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Alpha&quot;,&nbsp;new&nbsp;Character((char)913)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Beta&quot;,&nbsp;new&nbsp;Character((char)914)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Gamma&quot;,&nbsp;new&nbsp;Character((char)915)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Delta&quot;,&nbsp;new&nbsp;Character((char)916)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Epsilon&quot;,&nbsp;new&nbsp;Character((char)917)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Zeta&quot;,&nbsp;new&nbsp;Character((char)918)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Eta&quot;,&nbsp;new&nbsp;Character((char)919)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Theta&quot;,&nbsp;new&nbsp;Character((char)920)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Iota&quot;,&nbsp;new&nbsp;Character((char)921)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Kappa&quot;,&nbsp;new&nbsp;Character((char)922)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Lambda&quot;,&nbsp;new&nbsp;Character((char)923)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Mu&quot;,&nbsp;new&nbsp;Character((char)924)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Nu&quot;,&nbsp;new&nbsp;Character((char)925)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Xi&quot;,&nbsp;new&nbsp;Character((char)926)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Omicron&quot;,&nbsp;new&nbsp;Character((char)927)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;i&quot;,&nbsp;new&nbsp;Character((char)928)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Rho&quot;,&nbsp;new&nbsp;Character((char)929)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Sigma&quot;,&nbsp;new&nbsp;Character((char)931)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Tau&quot;,&nbsp;new&nbsp;Character((char)932)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Upsilon&quot;,&nbsp;new&nbsp;Character((char)933)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;hi&quot;,&nbsp;new&nbsp;Character((char)934)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Chi&quot;,&nbsp;new&nbsp;Character((char)935)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;si&quot;,&nbsp;new&nbsp;Character((char)936)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Omega&quot;,&nbsp;new&nbsp;Character((char)937)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;alpha&quot;,&nbsp;new&nbsp;Character((char)945)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;beta&quot;,&nbsp;new&nbsp;Character((char)946)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;gamma&quot;,&nbsp;new&nbsp;Character((char)947)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;delta&quot;,&nbsp;new&nbsp;Character((char)948)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;epsilon&quot;,&nbsp;new&nbsp;Character((char)949)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;zeta&quot;,&nbsp;new&nbsp;Character((char)950)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;eta&quot;,&nbsp;new&nbsp;Character((char)951)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;theta&quot;,&nbsp;new&nbsp;Character((char)952)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;iota&quot;,&nbsp;new&nbsp;Character((char)953)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;kappa&quot;,&nbsp;new&nbsp;Character((char)954)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;lambda&quot;,&nbsp;new&nbsp;Character((char)955)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;mu&quot;,&nbsp;new&nbsp;Character((char)956)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;nu&quot;,&nbsp;new&nbsp;Character((char)957)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;xi&quot;,&nbsp;new&nbsp;Character((char)958)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;omicron&quot;,&nbsp;new&nbsp;Character((char)959)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;pi&quot;,&nbsp;new&nbsp;Character((char)960)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;rho&quot;,&nbsp;new&nbsp;Character((char)961)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;sigmaf&quot;,&nbsp;new&nbsp;Character((char)962)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;sigma&quot;,&nbsp;new&nbsp;Character((char)963)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;tau&quot;,&nbsp;new&nbsp;Character((char)964)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;upsilon&quot;,&nbsp;new&nbsp;Character((char)965)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;phi&quot;,&nbsp;new&nbsp;Character((char)966)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;chi&quot;,&nbsp;new&nbsp;Character((char)967)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;psi&quot;,&nbsp;new&nbsp;Character((char)968)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;omega&quot;,&nbsp;new&nbsp;Character((char)969)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;thetasym&quot;,&nbsp;new&nbsp;Character((char)977)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;upsih&quot;,&nbsp;new&nbsp;Character((char)978)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;piv&quot;,&nbsp;new&nbsp;Character((char)982)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ensp&quot;,&nbsp;new&nbsp;Character((char)8194)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;emsp&quot;,&nbsp;new&nbsp;Character((char)8195)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;thinsp&quot;,&nbsp;new&nbsp;Character((char)8201)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;zwnj&quot;,&nbsp;new&nbsp;Character((char)8204)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;zwj&quot;,&nbsp;new&nbsp;Character((char)8205)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;lrm&quot;,&nbsp;new&nbsp;Character((char)8206)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;rlm&quot;,&nbsp;new&nbsp;Character((char)8207)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ndash&quot;,&nbsp;new&nbsp;Character((char)8211)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;mdash&quot;,&nbsp;new&nbsp;Character((char)8212)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;lsquo&quot;,&nbsp;new&nbsp;Character((char)8216)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;rsquo&quot;,&nbsp;new&nbsp;Character((char)8217)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;sbquo&quot;,&nbsp;new&nbsp;Character((char)8218)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;ldquo&quot;,&nbsp;new&nbsp;Character((char)8220)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;rdquo&quot;,&nbsp;new&nbsp;Character((char)8221)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;bdquo&quot;,&nbsp;new&nbsp;Character((char)8222)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;dagger&quot;,&nbsp;new&nbsp;Character((char)8224)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;Dagger&quot;,&nbsp;new&nbsp;Character((char)8225)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;bull&quot;,&nbsp;new&nbsp;Character((char)8226)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;hellip&quot;,&nbsp;new&nbsp;Character((char)8230)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;permil&quot;,&nbsp;new&nbsp;Character((char)8240)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;prime&quot;,&nbsp;new&nbsp;Character((char)8242)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;rime&quot;,&nbsp;new&nbsp;Character((char)8243)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;lsaquo&quot;,&nbsp;new&nbsp;Character((char)8249)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;rsaquo&quot;,&nbsp;new&nbsp;Character((char)8250)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;oline&quot;,&nbsp;new&nbsp;Character((char)8254)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;frasl&quot;,&nbsp;new&nbsp;Character((char)8260)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;euro&quot;,&nbsp;new&nbsp;Character((char)8364)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;image&quot;,&nbsp;new&nbsp;Character((char)8465)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;weierp&quot;,&nbsp;new&nbsp;Character((char)8472)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;real&quot;,&nbsp;new&nbsp;Character((char)8476)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;trade&quot;,&nbsp;new&nbsp;Character((char)8482)); <br />&nbsp;&nbsp;&nbsp;&nbsp;charTable.put(&quot;alef