<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>bbiao</title>
    <description></description>
    <link>http://bbiao.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>YUI的一些不足</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/153335" style="color:red;">http://bbiao.javaeye.com/blog/153335</a>&nbsp;
          发表时间: 2008年01月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          称赞别人总是一件容易的事情，但是如果去批评别人，就要拿出十足的勇气和底气了，因为至今都没有把YUI的所有源代码都看一遍，所以不敢说那些是YUI的缺点，只能说是不足吧。通常别人在指正别人时，都会先夸奖别人一番，就是那些所谓的溢美之词，YUI的优点很多，是个很优秀的AJAX框架，在这里我就不客套了，直入主题。<br /><br />第一，命名规则不统一。这一点主要体现在一些Widget的Configuration Attribute和一些CSS样式名上。举一个简单的例子，在YAHOO.widget.Panel的配置属性中，close表示一个Panel是否可以被关闭，是否可以有关闭按钮，draggable代表这个Panel是否能被拖动，同样是Boolean的属性值，但是一个用了动词一个用了形容词，我不知道老外是否也把close和draggable的词性看的一致，反正在我看来，觉得不是很好。还有就是有些属性值使用了“骆驼”的命名方式，即非第一个单词的首字母大写，如Panel中的dragOnly属性，但是另一些属性却没有，如fixtoviewport、fixedcenter。CSS样式中也存在着同样的问题，你可以看到yui-panel和yuimenu这两种不同的命名方式。<br />带来的危害：程序员总是希望有着统一的命名方式，不想在记住属性名称记住相应的命名规则。<br /><br />第二，继承体系不唯一。这一点主要体现在所有的Widget没有实现单根继承上。像TabView和TreeView就没有一个共同的祖先，TabView继承YAHOO.util.Element，而TreeView没有父类，只是用一些像EventProvider来丰富了自己。而Container中的一些组件又继承自YAHOO.widget.Overlay。这其中的混乱还体现在一些类只是用另一些类来“丰富”自己，通过YAHOO.lang.augment方法，而一些类却是继承了别的类，通过YAHOO.lang.extend方法。<br />带来的危害：不同的继承体系使得YUI中不同的组件构造的过程变得不一样，有些是通过YAHOO.util.Config的方式，有些是通过YAHOO.util.AttributeProvider的方式，这样去扩展YUI的组件变得相当的不方便，你需要去了解许多种不同的组件配置和初始化的方式。<br /><br />当然，如果你只是把YUI集成到自己的应用当中，第二点对于你来说也许没有多大关系，但是你如果潜心想去扩展YUI，我想第二点是一个很另人头痛的事情。这里不得不夸一夸EXT，单根继承，Component模式，使得EXT中的widget的设计十分成功。真的很希望YUI不要再把不同的widget看成不一样的组件来对待，应该把这些子项目看成一个统一的子项目，重新去设计和实现，毕竟对于一个Ajax框架，UI部分的优劣很容易影响一个人对他的选择。<br /><br />不过，我还是很喜欢YUI，我会做出自己的努力~！为他尽一点自己的力量。
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/153335#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 05 Jan 2008 14:15:31 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/153335</link>
        <guid>http://bbiao.javaeye.com/blog/153335</guid>
      </item>
      <item>
        <title>applyTo和renderTo配置项</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/149881" style="color:red;">http://bbiao.javaeye.com/blog/149881</a>&nbsp;
          发表时间: 2007年12月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          对于applyTo和renderTo，我们在Ext 2.0的官方文档上可以看到， <br /><br /><div class="quote_title">引用</div><div class="quote_div">applyTo : Mixed <br />The id of the node, a DOM node or an existing Element corresponding to a DIV that is already present in the document that specifies some structural markup for this component. When applyTo is used, constituent parts of the component can also be specified by id or CSS class name within the main element, and the component being created may attempt to create its subcomponents from that markup if applicable. Using this config, a call to render() is not required. If applyTo is specified, any value passed for renderTo will be ignored and the target element's parent node will automatically be used as the component's container.<br /><br />即applyTo代表一个在页面上已经存在的元素或该元素的id，该元素通过markup的方式来表示欲生成的组件的某些结构化信息，Ext在创建一个组件时，会首先考虑使用applyTo元素中的存在的元素，你可以认为applyTo是组件在页面上的模板，与YUI中的markup模式很相似。当你在config中配置了applyTo属性后，renderTo属性将会被忽略。并且生成的组件将会被自动置去applyTo元素的父元素中。</div><br /><br /><div class="quote_title">引用</div><div class="quote_div">renderTo : Mixed <br />The id of the node, a DOM node or an existing Element that will be the container to render this component into. Using this config, a call to render() is not required. <br /><br />renderTo主要用来表示新生成的组件在页面上的container</div><br /><br />让我们来看看Component.js中的相应代码： <br /><br /><pre name="code" class="java">if(this.applyTo){   
    this.applyToMarkup(this.applyTo);   
    delete this.applyTo;   
}else if(this.renderTo){   
    this.render(this.renderTo);   
    delete this.renderTo;   
}   
  
applyToMarkup : function(el){   
    this.allowDomMove = false;   
    this.el = Ext.get(el);   
    this.render(this.el.dom.parentNode);   
}</pre>  <br /><br /><br />可见applyTo在Component级别是取得applyTo的parentNode来调用render()，各种继承自Component的组件会在各自的onRender方法中来构建组件，使用CSS选择器来选择相应的元素而不是新生成相应的元素。 <br />例如Panel.js中 <br /><br /><pre name="code" class="java">if(this.el){ // existing markup   
    this.el.addClass(this.baseCls);   
    this.header = this.el.down('.'+this.headerCls);   
    this.bwrap = this.el.down('.'+this.bwrapCls);   
    var cp = this.bwrap ? this.bwrap : this.el;   
    this.tbar = cp.down('.'+this.tbarCls);   
    this.body = cp.down('.'+this.bodyCls);   
    this.bbar = cp.down('.'+this.bbarCls);   
    this.footer = cp.down('.'+this.footerCls);   
    this.fromMarkup = true;   
}else{   
    this.el = ct.createChild({   
        id: this.id,   
        cls: this.baseCls   
    }, position);   
}</pre>
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/149881#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 21 Dec 2007 10:35:07 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/149881</link>
        <guid>http://bbiao.javaeye.com/blog/149881</guid>
      </item>
      <item>
        <title>YUI的一点优点</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/149771" style="color:red;">http://bbiao.javaeye.com/blog/149771</a>&nbsp;
          发表时间: 2007年12月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用YUI在页面生成Widget时，我们可以使用markup的模式，在这种模式下，生成的widget是从已有的HTML Element中读取一定的信息，并适当的复用一些已有的HTML Element，例如，你可以用以下的HTML元素来生成一个Panel：<br /><br /><pre name="code" class="java">&lt;div id="panel1">  
    &lt;div class="hd">Panel #1 from Markup&lt;/div>  
    &lt;div class="bd">This is a Panel that was marked up in the document.&lt;/div>  
    &lt;div class="ft">End of Panel #1&lt;/div>  
&lt;/div>  </pre><br /><br />使用如下的JS：<br /><pre name="code" class="java">var panel = new YAHOO.widget.Panel("panel1", {
    /* other properies */
});</pre><br /><br />那么，这种特点的好处是什么？有一种WEB开发的理论叫做Progressive Enhancement，意在在保证WEB程序对用户提供基本的体验后，再逐步加强应用的用户体验，这样，即使用户的浏览器不支持JS，你的页面他也可以查看的到基本的信息，并且，对于SEO非常有效。并且，YUI使用的markup是完全符合w3c标准的。（想到DOJO的dojoType了嘛？），YUI中的这种例子很多，例如Menu可以从ul li标签生成，DataTable可以从页面的Table元素读取数据……<br /><br />嗯，因为之前用EXT，整个页面就几个空空的DIV，所以才想找一种有利于在浏览器不支持JS的情况下也能给用户呈现基本视图的方法，于是重新拾起了YUI。
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/149771#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 20 Dec 2007 17:38:59 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/149771</link>
        <guid>http://bbiao.javaeye.com/blog/149771</guid>
      </item>
      <item>
        <title>Ubuntu 7.10 英文环境下使用SCIM的方法</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160398" style="color:red;">http://bbiao.javaeye.com/blog/160398</a>&nbsp;
          发表时间: 2007年11月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这是用了Ubuntu 7.10之后才发现的方法，以前一直都是修改.bashrc的方法，我感觉现在的方法比较好，首先要让SCIM在英文的Locale下可以使用，我们编辑文件：<br />/usr/lib/gtk-2.0/2.10.0/immodule-files.d/libgtk2.0-0.immodules<br />把最后一行<br />&quot;/usr/lib/gtk-2.0/2.10.0/immodules/im-xim.so&quot; <br />&quot;xim&quot; &quot;X Input Method&quot; &quot;gtk20&quot; &quot;/usr/share/locale&quot; &quot;ko:ja:th:zh&quot;<br />改为：<br />&quot;/usr/lib/gtk-2.0/2.10.0/immodules/im-xim.so&quot; <br />&quot;xim&quot; &quot;X Input Method&quot; &quot;gtk20&quot; &quot;/usr/share/locale&quot; &quot;en:ko:ja:th:zh&quot;<br />显然我们的意图很简单，使xim在英文的Locale下也可以使用，然后，使用im-switch这个输入法切换工具来设定我们的输入法，记住，不要加sudo<br />im-switch -s scim -z default<br />具体的命令格式，可以使用man im-switch来查看。<br />重启系统，可爱的SCIM出现在你的状态栏里了<br /><br />我想，这个方法也一定同样适用于Debian，Fedora里它自己的输入法切换工具，不需要文件，直接就可以切换&nbsp;
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160398#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 06 Nov 2007 19:56:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160398</link>
        <guid>http://bbiao.javaeye.com/blog/160398</guid>
      </item>
      <item>
        <title>Ext学习笔记（一）</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160399" style="color:red;">http://bbiao.javaeye.com/blog/160399</a>&nbsp;
          发表时间: 2007年08月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>不怎么敢用&ldquo;学习笔记&rdquo;，这种字眼的，害怕自己写得不好，被骂。不过，这次也就认真写次学习笔记吧，Share是一种和平主义的精神，呵呵。</div><div>&nbsp;</div><div>Ext，在最开始的时候，是作为YUI的一个扩展存在的，所以那个时候它的名称是YUI.Ext，后来，Ext作为一个独立的项目进行开发，并不再依赖于YUI，在使用Ext的过程当中，你可以使用Ext-base, Prototype+script.aculo.us，jQuey和YUI四种中的一种，我因为比较习惯使用prototype，所以会选择Prototype+script.aculo.us的组合。jQuery也是一个写得很优美的框架，没有用过，以后抽空看看代码，应该获益匪浅。</div><div>&nbsp;</div><div>Ext官方网站：<a href="http://www.extjs.com/"><font color="#0066a7">http://www.extjs.com</font></a></div><div>JSEclipse：<a href="http://www.adobe.com/cfusion/entitlement/index.cfm?e=labs_jseclipse"><font color="#0066a7">http://www.adobe.com/cfusion/entitlement/index.cfm?e=labs_jseclipse</font></a></div><div>Firebug：<a href="http://www.getfirebug.com/"><font color="#0066a7">http://www.getfirebug.com</font></a></div><div>&nbsp;</div><div>从Ext的站点上下载最新版本的文件，解压什么的我就不说，我想说一下这个文档的结构：</div><div>├─adapter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存放所有adapter的文件夹<br />├─build&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 经过压缩（build）过的文件<br />├─docs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文档<br />├─examples&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DEMO<br />├─package&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按包分类的文件<br />├─resources&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 资源文件，包括CSS和一些图片<br />└─source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 源代码</div><div>使用过程当中，除非你特别介意JS文件的加载是否影响速度，大可只引入ext-all.js和ext-all.css两个文件，Ext在包管理方面，我觉得应该向Dojo学习下。</div><div>&nbsp;</div><div>JS和CSS引入的顺序：</div><div>&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;js/ext/resources/css/ext-all.css&quot; /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 必须引入<br />&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;js/ext/resources/css/xtheme-aero.css&quot; /&gt; 可选，用来控制主题，并且有其他两个可选值，xtheme-gray.css、xtheme-vista.css。</div><div>&nbsp;</div><div>引入JS：按照底层依赖的不同：</div><p><strong>Ext Stand-alone：<br /></strong>ext-base.js<br />ext-all.js (or your choice of files) </p><p><strong>Yahoo! UI (.12+)：</strong><br />yui-utilities.js<br />ext-yui-adapter.js<br />ext-all.js (or your choice of files) </p><p><strong>jQuery (1.1+)：</strong><br />jquery.js<br />jquery-plugins.js // required jQuery plugins<br />ext-jquery-adapter.js<br />ext-all.js (or your choice of files) </p><p><strong>Prototype (1.5+) / Scriptaculous (1.7+)：<br /></strong>prototype.js<br />scriptaculous.js?load=effects&nbsp; (or whatever you want to load)<br />ext-prototype-adapter.js<br />ext-all.js (or your choice of files) </p><div>把相应的文件引入到HTML的head里后，你就可以写你自己的第一Ext的Demo了。</div><div>&lt;script type=&quot;text/javascript&quot;&gt;</div><div>function InitDialog() {<br />&nbsp;&nbsp;var dialog = new Ext.BasicDialog(&quot;hello-dlg&quot;, { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>id: &quot;hello-dialog&quot;,</strong></div><div><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong>title: &quot;Hello&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoTabs:true,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:500,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:300,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shadow:true,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minWidth:300,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minHeight:250,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxyDrag: true<br />&nbsp;&nbsp;});<br />&nbsp;&nbsp;dialog.addKeyListener(27, dialog.hide, dialog);<br />&nbsp;&nbsp;dialog.addButton('Submit', dialog.hide, dialog).disable();<br />&nbsp;&nbsp;dialog.addButton('Close', dialog.hide, dialog);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<strong>Ext.ComponentMgr.register(dialog);</strong></div><div>}</div><div>function OnButtonClick() {<br />&nbsp;&nbsp;<strong>var dialog = Ext.getCmp(&quot;hello-dialog&quot;);<br /></strong>&nbsp;&nbsp;dialog.show();<br />}</div><div><strong>Ext.onReady(InitDialog);</strong></div><div>&lt;/script&gt;</div><div>&nbsp;</div><div>&lt;button onClick=&quot;OnButtonClick();&quot;&gt;Show&lt;/button&gt;</div><div>这里有四处要注意一下：</div><div><strong>id: &quot;hello-dialog&quot;, </strong>Compoent的ID，有了这个ID才能用ComponentMgr.register来在全局进行注册<br /><strong>Ext.ComponentMgr.register(dialog); </strong>注册组件</div><div><strong>var dialog = Ext.getCmp(&quot;hello-dialog&quot;); </strong>根据ID来得到组件<br /><strong>Ext.onReady(InitDialog); </strong>Ext.onRead是注册一个在整个页面的DOM构建完成会被执行的函数</div><p>呵呵，第一个例子就出来了，试试看吧~ </p>&nbsp;
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160399#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 21 Aug 2007 19:24:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160399</link>
        <guid>http://bbiao.javaeye.com/blog/160399</guid>
      </item>
      <item>
        <title>第一篇</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/93384" style="color:red;">http://bbiao.javaeye.com/blog/93384</a>&nbsp;
          发表时间: 2007年06月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在JavaEye的论坛受益匪浅，但是却没在这写过博客，听许多人说在这里也是个不错的选择，所以想尝试一下。最近一段时间一直在找实习，所碰到的壁比自己想像的要多得多，也许自己并没有自己觉得的那么强，也许自己在面试的时候有一些没有注意到的地方，不过自己也劝自己，这一点挫折没关系的。加油就好。</p>
<p>最近有个项目计划，想做一个圆角DIV的库，项目名称已经想好了，叫RoundFX，在Google Code上也申请了SVN，<br />
<font face="Arial"><a href="http://code.google.com/p/roundfx/">http://code.google.com/p/roundfx/</a><br />
不过现在没有时间，等考完试了就着手做起来。对于这个项目，自己要有个选择，<br />
第一，基于Prototype做，但并不整合进Prototype。<br />
第二，基于Prototype做，但整合进Prototype。<br />
第三，不基于其它库做。。。</font></p>
<p>不知道大家会更喜欢哪一种。。。</p>
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/93384#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 23 Jun 2007 10:46:51 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/93384</link>
        <guid>http://bbiao.javaeye.com/blog/93384</guid>
      </item>
      <item>
        <title>Fedora 7中使用Eclipse和WTP遇到的问题</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160400" style="color:red;">http://bbiao.javaeye.com/blog/160400</a>&nbsp;
          发表时间: 2007年06月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我使用的Eclipse的版本是3.3RC2，WTP的版本也是3.3RC2，在Windows下用没出现过问题，但是换到Fedora 7下后不但内存占用量猛增，而且还不断的有异常抛出，根本没有办法正常使用。<br />我是装了JDK1.6U1的，怎么还会有问题呢？想来想去，自己没有设JAVA_HOME变量，不过出于种种原因，我不想把机器里所有用到JVM的地方都换成Sun的JRE，那么怎么办呢？<br />料想Eclipse的配置文件eclipse.ini里应该可以改，呵呵，只要在第一行加上<br />-vm<br />/usr/java/jdk1.6.0_01/jre/bin/java<br />就OK了。<br />重启Eclipse后一切正常，内存使用也降下来了。
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160400#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 07 Jun 2007 22:29:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160400</link>
        <guid>http://bbiao.javaeye.com/blog/160400</guid>
      </item>
      <item>
        <title>Apache的中配置Directory配置问题</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160401" style="color:red;">http://bbiao.javaeye.com/blog/160401</a>&nbsp;
          发表时间: 2007年05月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天被这个小小的配置问题搞了近两个小时，如果不写下来经历，是有点可惜了。<br />首先说一下问题，我想把我的一个用PHP写的应用布署到Apache服务器上的/blog目录下，应该采用什么方法？<br />问题解决的方法，首先，要修改http.conf中的内容，添加配置如下：<br />Alias /blog &quot;/home/talent/workspace/AlphaBlog/WebContent&quot;<br /><br />&lt;Directory &quot;/home/talent/workspace/AlphaBlog/WebContent&quot;&gt;<br />&nbsp;&nbsp;&nbsp; Options Indexes MultiViews<br />&nbsp;&nbsp;&nbsp; AllowOverride None<br />&nbsp;&nbsp;&nbsp; Order allow,deny<br />&nbsp;&nbsp;&nbsp; Allow from all<br />&lt;/Directory&gt;<br />而且要把添加的目录/home/talent/workspace/AlphaBlog/WebContent从里到外都要是Apache这个用户可读可执行的。这个时候重启服务器，但是依旧提示没有权限访问。想来想去都不知道该怎么办了。于是去强奸GOOGLE，最近终于知道是跟SELinux有关，防火墙的原因。这个时候，只要更改WebContent的相应规则就可以了。如下<br />chcon -R -t httpd_user_content_t WebContent<br />重启服务器。一切OK。
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160401#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 May 2007 18:37:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160401</link>
        <guid>http://bbiao.javaeye.com/blog/160401</guid>
      </item>
      <item>
        <title>使用Vista引导Linux</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160402" style="color:red;">http://bbiao.javaeye.com/blog/160402</a>&nbsp;
          发表时间: 2006年12月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Vista引导系统的方式已经不同于之前的ntldr，本文中没有深入研究该引导方式，但是给出了一个可行的使用Vista引导Linux的方式。</p><p>不过我们首先来简单地说一下Vista中的引导方式。在Vista当中，所有的引导信息都被存储在称为BCD（启动配置数据、Boot Configuration Data），而并非之前的boot.ini文件当中，如果想要更改引导信息就必须更改BCD当中的内容。下面是一些关于BCD的参考资料。<br /><a href="http://technet2.microsoft.com/WindowsVista/en/library/85cd5efe-c349-427c-b035-c2719d4af7781033.mspx?mfr=true">Boot Configuration Data Editor Frequently Asked Questions</a><br /><a href="http://www.microsoft.com/whdc/system/platform/firmware/bcd.mspx">Boot Configuration Data in Windows Vista</a><br /><a href="http://msdn2.microsoft.com/en-us/library/aa362692.aspx">Boot Configuration Data on MSDN</a><br />好，下面言归正传，我们来讲述如何通过更改BCD来达到使且Vista引导Linux的目的。首先，想要通过Vista引导Linux，我们必须获得Linux的引导程序，因为之前是使用Grub引导Linux，并且Grub是写到MBR当中去的，所经我们首先在Linux中使用工具dd将引导信息拷贝出来，具体的方法是：<br />dd if=/dev/sda of=/home/talent/fedora.lnx bs=512 count=1<br />其中/dev/sda是你安装启动信息的硬盘的设备名称，/home/talent/fedora.lnx是备份文件的名称。这个时候将fedora.lnx拷到移动设备上方便之后转移到Windows 当中使用。</p><p>接下来便可以安装Vista，安装完成之后将fedora.lnx拷贝到C:\目录下，接着便可以更改BCD的内容了。Vista内置的BCDEDIT可以完成这些工作。请经管理员权限运行该程序，并执行经下命令。</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><span style="COLOR: #000000">bcdedit&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">create&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">d&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">Linux</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">application&nbsp;bootsector<br />命令结果应该会返回一个GUID，后面的命令用到这个GUID<br />运行以下命令设置Linux引导扇区备份所在的分区：<br />bcdedit&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&nbsp;{GUID}&nbsp;device&nbsp;partition</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">C:<br />然后指定引导扇区备份的路径：<br />bcdedit&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #0000ff">set</span><span style="COLOR: #000000">&nbsp;{GUID}&nbsp;path&nbsp;linux.bs<br />最后设置Linux菜单项在启动菜单的位置：<br />bcdedit&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">displayorder&nbsp;{GUID}&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">addlast</span></div></div><p>命令完成之后，重启，此时应该可以看到启动选项里多了Linux。</p>
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160402#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 17 Dec 2006 20:33:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160402</link>
        <guid>http://bbiao.javaeye.com/blog/160402</guid>
      </item>
      <item>
        <title>JavaScripte中的Prototype机制（一）</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160403" style="color:red;">http://bbiao.javaeye.com/blog/160403</a>&nbsp;
          发表时间: 2006年12月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>JavaScript不是一个真正的OO语言，但是通过提供prototype对象实现了一些OO的特性。本文是作者在使用JS中OO特性的一些心得体会。</p><p>下面我们首先来看一下如何在JavaScript中定义一个类（不使用prototype）：</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">function&nbsp;Base()<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_16_132_Open_Image" onclick="this.style.display='none'; document.getElementById('_16_132_Open_Text').style.display='none'; document.getElementById('_16_132_Closed_Image').style.display='inline'; document.getElementById('_16_132_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_16_132_Closed_Image" onclick="this.style.display='none'; document.getElementById('_16_132_Closed_Text').style.display='none'; document.getElementById('_16_132_Open_Image').style.display='inline'; document.getElementById('_16_132_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span id="_16_132_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_16_132_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.show&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_86_130_Open_Image" onclick="this.style.display='none'; document.getElementById('_86_130_Open_Text').style.display='none'; document.getElementById('_86_130_Closed_Image').style.display='inline'; document.getElementById('_86_130_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_86_130_Closed_Image" onclick="this.style.display='none'; document.getElementById('_86_130_Closed_Text').style.display='none'; document.getElementById('_86_130_Open_Image').style.display='inline'; document.getElementById('_86_130_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_86_130_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_86_130_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name);<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span></div></div><p>以上这段代码中，我们声明了一个类Base，并且为该类添加了一个成员变量name和一个成员函数show，通过经下代码就可以实现生成该类的一个实例：</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;base&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Base();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />base.show();</span></div></div><p>但是这种声明类的方法有一个明显的不足之处，每当新建该类的一个实例时，我们都会创建所有方法的一个副本，也就是说，所有类的show方法是在内存中的不同地址的，而且类的成员变量的声明与定义被放到了一起，比较容易产生混淆。下面，我们通过引入prototype机制来实现清晰的类定义。</p><div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"><div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">function&nbsp;Base()<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_15_47_Open_Image" onclick="this.style.display='none'; document.getElementById('_15_47_Open_Text').style.display='none'; document.getElementById('_15_47_Closed_Image').style.display='inline'; document.getElementById('_15_47_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_15_47_Closed_Image" onclick="this.style.display='none'; document.getElementById('_15_47_Closed_Text').style.display='none'; document.getElementById('_15_47_Open_Image').style.display='inline'; document.getElementById('_15_47_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span id="_15_47_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_15_47_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Constructor&nbsp;here.</span><span style="COLOR: #008000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;...</span><span style="COLOR: #008000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" /></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />Base.prototype&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_68_129_Open_Image" onclick="this.style.display='none'; document.getElementById('_68_129_Open_Text').style.display='none'; document.getElementById('_68_129_Closed_Image').style.display='inline'; document.getElementById('_68_129_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_68_129_Closed_Image" onclick="this.style.display='none'; document.getElementById('_68_129_Closed_Text').style.display='none'; document.getElementById('_68_129_Open_Image').style.display='inline'; document.getElementById('_68_129_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span id="_68_129_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_68_129_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;name:&nbsp;</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">base</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">,<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;show:&nbsp;</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_104_127_Open_Image" onclick="this.style.display='none'; document.getElementById('_104_127_Open_Text').style.display='none'; document.getElementById('_104_127_Closed_Image').style.display='inline'; document.getElementById('_104_127_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_104_127_Closed_Image" onclick="this.style.display='none'; document.getElementById('_104_127_Closed_Text').style.display='none'; document.getElementById('_104_127_Open_Image').style.display='inline'; document.getElementById('_104_127_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_104_127_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_104_127_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name);<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span></div></div><p>现在我们来看new的执行过程：<br />1、创建一个新的对象，并让this指针指向它；<br />2、将函数的prototype对象的所有成员都赋给这个新的对象；<br />3、执行函数体，对这个对象进行初始化操作；<br />4、返回（1）中创建的对象。<br />现在在new的执行过程当中，多了用prototype来初始化对象的过程，这也和prototype的字面意思相符，它是所对应类的实例的原形。这个初始化过程发生在函数体（constructor）执行之前，所以在函数体内部可以调用prototype中定义的属性和方法。</p>
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160403#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 15 Dec 2006 11:07:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160403</link>
        <guid>http://bbiao.javaeye.com/blog/160403</guid>
      </item>
      <item>
        <title>迷惘的时候</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160404" style="color:red;">http://bbiao.javaeye.com/blog/160404</a>&nbsp;
          发表时间: 2006年09月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>人总会在不同的时候遇到不同的烦恼，也许现在我正在经历着一种烦恼。简单的原因，简单的事情，但是却不觉得有简单的解决办法，在这样一个时候不知道该如何是好，不知道怎么才能很好的处理问题。也许应该多看看人月神话或是人件之类的书。参加一个团队，习惯了零散地与别人合作，但是当有一天我发现组织的重要性的时候，却觉得自己没有足够的魄力去挑起这样一个担子。理想与追求不同了，一个团队的目标发生了改变，最起码所有的成员失去了共同奋斗的目标，这就如同一个叫花子和一个富翁一同去赌博，他们对于结果的期望不同，他们对于结果的反应也不同。富翁不会在乎输掉一万块钱，也不会在乎赢到十万块钱，而叫花子却不得不对这一切都很在意。也许十万块可以改变他以后的生活，在这种情况下这他们两个合作，呵呵，希望奇迹会发生吧。</p><p>现在对于组织一个团队有了兴趣，对于创业也有了些自己的想法。现在大学生出去创业也未必是件很难的事情，像我们这种人缺乏的是一群志同道合的人，缺乏的是参加一只齐心合力的队伍。而且我们缺乏第一桶金。而在大学毕业如何拿到这样一桶金，最直接最有效的方法也许就是能够把自己手头的项目卖出去，或者干脆拿到十万二十万的风投，这是一条很好的路。但是在这个骂着大学生缺乏动手能力的社会里，能够说服一个风险投资商拿出钱给这些刚入道的小孩子去&ldquo;玩&rdquo;，这个挑战完全不逊于搞出一个卖得出去的项目。</p><p>我想，最主要的还是激情吧，一群有激情的人，一群有梦想的人，会沿着同一条路走下去，会将共同的梦实现。&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160404#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 06 Sep 2006 21:43:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160404</link>
        <guid>http://bbiao.javaeye.com/blog/160404</guid>
      </item>
      <item>
        <title>被遗忘的Windows快捷键</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160405" style="color:red;">http://bbiao.javaeye.com/blog/160405</a>&nbsp;
          发表时间: 2006年06月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          虽然很多用户使用Windows都有很长一段时间了，但是很多用户都不知道Windows中存在什么快捷键，包括笔者也是会使用几个比较普遍的快捷键。实际上很多快捷键都是非常有用的，让我们来看看：<br /><br />　　CTRL+A：选中活动窗口的所有内容<br /><br />　　CTRL+C：把选中的东西复制到粘贴板<br /><br />　　CTRL+F：显示&ldquo;查找和替换&rdquo;对话框<br /><br />　　CTRL+G：显示定位对话框<br /><br />　　CTRL+N：显示新建对话框<br /><br />　　CTRL+O：显示打开对话框<br /><br />　　CTRL+P：显示打印对话框<br /><br />　　CTRL+S：保存当前文档<br /><br />　　CTRL+V：粘贴<br /><br />　　CTRL+X：剪切<br /><br />　　CTRL+Z：撤销<br /><br />　　CTRL+F4：关闭当前活动窗口<br /><br />　　CTRL+拖放文件：复制拖放的文件<br /><br />　　CTRL+ESC：显示开始菜单<br /><br />　　CTRL+F6：打开活动应用程序的下一个文档窗口<br /><br />　　ALT+ENTER：显示选中对象的属性<br /><br />　　ALT+F4：关闭活动项目或者退出活动的程序<br /><br />　　ALT+空格：打开当前活动窗口的快捷菜单<br /><br />　　ALT+TAB：在打开窗口间切换<br /><br />　　ALT+ESC：以打开的顺序切换窗口<br /><br />　　F1：提供当前窗口或者选中项目的帮助文件<br /><br />　　F2：重命名选中的项目<br /><br />　　F3：搜索文件或文件夹<br /><br />　　F4：显示我的电脑或Windows Explorer中的地址栏<br /><br />　　F5：刷新活动窗口<br /><br />　　F6：在当前窗口中的元素间切换，与TAB键功能一样<br /><br />　　F10：激活当前窗口的菜单栏<br /><br />　　Win：显示或隐藏开始菜单<br /><br />　　Win+BREAK：显示系统属性对话框<br /><br />　　Win+D：显示桌面<br /><br />　　Win+M：最小化所有窗口<br /><br />　　Win+SHIFT+M：恢复最小化窗口<br /><br />　　Win+E：打开我的电脑<br /><br />　　Win+F：搜索文件或文件夹<br /><br />　　CTRL+Win+F：搜索计算机<br /><br />　　Win+F1：显示Windows帮助文件<br /><br />　　Win+L：锁住键盘<br /><br />　　Win+R：打开运行窗口<br /><br />　　Win+U：打开辅助工具管理器<br /><br />　　TAB：在选项间切换<br /><br />　　SHIFT+TAB：在选项间切换，顺序与TAB相反<br /><br />　　CTRL+TAB：在标签间进行切换<br /><br />　　CTRL+SHIFT+TAB：在标签间反向切换<br /><br />　　ALT+带下划线的字母：运行相应的命令或选择相应的选项<br /><br />　　空格键：如果焦点选中复选框，选择或反选复选框<br /><br />　　以下的快捷键用于与Windows资源管理器类型的程序：<br /><br />　　NUM LOCK+星号（*）：显示选中文件夹的所有子文件夹<br /><br />　　NUM LOCK+加号（+）：显示选中文件夹的内容<br /><br />　　NUM LOCK+减号（&mdash;）：折叠选中文件夹
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160405#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 11 Jun 2006 21:25:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160405</link>
        <guid>http://bbiao.javaeye.com/blog/160405</guid>
      </item>
      <item>
        <title>Eclipse 插件</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160406" style="color:red;">http://bbiao.javaeye.com/blog/160406</a>&nbsp;
          发表时间: 2006年05月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>1.MyEclipse J2EE开发插件，支持SERVLET/JSP/EJB/数据库操纵等<br /><a href="http://www.myeclipseide.com/"><font color="#993366">www.myeclipseide.com</font></a></div><div>&nbsp;</div><div>2.Properties Editor 编辑java的属性文件，并可以自动存盘为Unicode格式<br /><a href="http://propedit.sourceforge.jp/index_en.html"><font color="#993366">http://propedit.sourceforge.jp/index_en.html</font></a></div><div>&nbsp;</div><div>3.Colorer Take 为上百种类型的文件按语法着色<br /><a href="http://colorer.sourceforge.net/"><font color="#993366">http://colorer.sourceforge.net/</font></a></div><div>&nbsp;</div><div>4.XMLBuddy 编辑xml文件<br /><a href="http://www.xmlbuddy.com/"><font color="#993366">www.xmlbuddy.com</font></a></div><div>&nbsp;</div><div>5.Code Folding 加入多种代码折叠功能（比eclipse自带的更多）<br /><a href="http://www.coffee-bytes.com/servlet/PlatformSupport"><font color="#993366">http://www.coffee-bytes.com/servlet/PlatformSupport</font></a></div><div>&nbsp;</div><div>6.Easy Explorer 从eclipse中访问选定文件、目录所在的文件夹<br /><a href="http://easystruts.sourceforge.net/"><font color="#993366">http://easystruts.sourceforge.net/</font></a></div><div>&nbsp;</div><div>7.Fat Jar 打包插件，可以方便的完成各种打包任务，可以包含外部的包等<br /><a href="http://fjep.sourceforge.net/"><font color="#993366">http://fjep.sourceforge.net/</font></a></div><div>&nbsp;</div><div>8.RegEx Test 测试正则表达式<br /><a href="http://brosinski.com/stephan/archives/000028.php"><font color="#993366">http://brosinski.com/stephan/archives/000028.php</font></a></div><div>&nbsp;</div><div>9.JasperAssistant 报表插件（强，要钱的）<br /><a href="http://www.jasperassistant.com/"><font color="#993366">http://www.jasperassistant.com/</font></a></div><div>&nbsp;</div><div>10.Jigloo GUI Builder ＪＡＶＡ的ＧＵＩ编辑插件<br /><a href="http://cloudgarden.com/jigloo/"><font color="#993366">http://cloudgarden.com/jigloo/</font></a></div><div>&nbsp;</div><div>11.Profiler 性能跟踪、测量工具，能跟踪、测量ＢＳ程序<br /><a href="http://sourceforge.net/projects/eclipsecolorer/"><font color="#993366">http://sourceforge.net/projects/eclipsecolorer/</font></a></div><div>&nbsp;</div><div>12.AdvanQas 提供对if/else等条件语句的提示和快捷帮助（自动更改结构等）<br /><a href="http://eclipsecolorer.sourceforge.net/advanqas/index.html"><font color="#993366">http://eclipsecolorer.sourceforge.net/advanqas/index.html</font></a></div><div>&nbsp;</div><div>13.Log4E Log4j插件，提供各种和Log4j相关的任务，如为方法、类添加一个logger等<br /><a href="http://log4e.jayefem.de/index.php/Main_Page"><font color="#993366">http://log4e.jayefem.de/index.php/Main_Page</font></a></div><div>&nbsp;</div><div>14.VSSPlugin VSS插件<br /><a href="http://sourceforge.net/projects/vssplugin"><font color="#993366">http://sourceforge.net/projects/vssplugin</font></a></div><div>&nbsp;</div><div>15.Implementors 提供跳转到一个方法的实现类，而不是接中的功能（实用!）<br /><a href="http://eclipse-tools.sourceforge.net/implementors/"><font color="#993366">http://eclipse-tools.sourceforge.net/implementors/</font></a></div><div>&nbsp;</div><div>16.Call Hierarchy 显示一个方法的调用层次（被哪些方法调，调了哪些方法）<br /><a href="http://eclipse-tools.sourceforge.net/call-hierarchy/index.html"><font color="#993366">http://eclipse-tools.sourceforge.net/call-hierarchy/index.html</font></a></div><div>&nbsp;</div><div>17.EclipseTidy 检查和格式化HTML/XML文件<br /><a href="http://eclipsetidy.sourceforge.net/"><font color="#993366">http://eclipsetidy.sourceforge.net/</font></a></div><div>&nbsp;</div><div>18.Checkclipse 检查代码的风格、写法是否符合规范<br /><a href="http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm"><font color="#993366">http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm</font></a></div><div>&nbsp;</div><div>19.Hibernate Synchronizer Hibernate插件，自动映射等<br /><a href="http://www.binamics.com/hibernatesync/"><font color="#993366">http://www.binamics.com/hibernatesync/</font></a></div><div>&nbsp;</div><div>20.VeloEclipse Velocity插件<br /><a href="http://propsorter.sourceforge.net/"><font color="#993366">http://propsorter.sourceforge.net/</font></a></div><div>&nbsp;</div><div>21.EditorList 方便的列出所有打开的Editor<br /><a href="http://editorlist.sourceforge.net/"><font color="#993366">http://editorlist.sourceforge.net/</font></a></div><div>&nbsp;</div><div>22.MemoryManager 内存占用率的监视<br /><a href="http://cloudgarden.com/memorymanager/"><font color="#993366">http://cloudgarden.com/memorymanager/</font></a><br /></div>
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160406#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 28 May 2006 12:13:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160406</link>
        <guid>http://bbiao.javaeye.com/blog/160406</guid>
      </item>
      <item>
        <title>通过windows引导Linux</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160407" style="color:red;">http://bbiao.javaeye.com/blog/160407</a>&nbsp;
          发表时间: 2006年03月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <table cellspacing="0" border="0" style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" width="48%" cellpadding="3">    <tbody>        <tr>            <td><font color="#bbbbbb">：〉 发表于 2005-8-31 17:04:00</font> </td>        </tr>        <tr>            <td>            <table cellspacing="0" border="0" width="100%" cellpadding="0">                <tbody>                    <tr>                        <td><span class="style1">                        <p>以前用的NT Loader来加载LILO启动Linux, 用得也挺好; 不过看到grub那么漂亮 <br />界面,就喜新厌旧了, <br /><br />系统安装有: Windows xp, Linux Redhat 7.2 <br />C:\ 对应于Linux中 /dev/hda <br />Linux ROOT 为Linux中 /dev/hda4 <br /><br />硬盘分区情况: <br />/dev/hda1 * 1 261 2096451 6 FAT32 (WINNT xp) <br />/dev/hda2 262 783 4192965 5 Extended <br />/dev/hda3 784 792 72292+ 82 Linux swap <br />/dev/hda4 793 1027 1887637+ 83 Linux (Redhat 7.2) <br />/dev/hda5 262 522 2096451 7 HPFS/NTFS <br />/dev/hda6 523 783 2096451 7 HPFS/NTFS <br /><br />1. 安装grub <br />我用的grub是Redhat7.2带的grub安装包: grub-0.90-11.i386.rpm <br />安装: rpm -ivh grub-0.90-11.i386.rpm <br /><br />其他安装方式也一样,只要你安装上grub就行了.RH7.2缺省用的grub, 1,2步骤可以 <br />省了. <br /><br />2. 建立grub的环境 <br />cp /usr/share/grub/i386-redhat/* /boot/grub <br /><br />3. 生成grub的配置文件/boot/grub/menu.conf <br />menu.conf的内容如下: <br />######### beginning of menu.conf #################### <br />default=1 <br />timeout=4 <br />#splashimage=(hd0,3)/boot/grub/splash.xpm.gz # 想要漂亮的启动画面,去掉行首&quot;#&quot; <br />title Red Hat Linux (2.4.12) <br />root (hd0,3) <br />kernel /boot/vmlinuz-2.4.12 ro root=/dev/hda4 <br />title Red Hat Linux (2.4.14) <br />root (hd0,3) <br />kernel /boot/vmlinuz-2.4.14 ro root=/dev/hda4 <br />######### end of menu.conf #################### <br /><br />系统有两个内核, 第一为稳定的内核, 以确保第二个内核(刚编译的)启动 <br />失败时,能引导进系统.另外, 这个menu.conf没有设password, 安全起见,最 <br />好加上,具体怎么加,看看手册了. <br />注意了, 我的linux在/dev/hda4,所以menu.conf那些分区位置为(hd0,3), <br />你的可能不一样了,不能完全照着&quot;画瓢&quot;噢! 下面第3步install的中的分区 <br />位置也应该和你的系统一致. <br /><br />3. 安装grub至Linux分区boot <br />将grub的stage1安装到/dev/hda4的boot扇区(hd0,3). 过程如下: <br /><br />/sbin/grub (运行grub) <br />grub&gt; install (hd0,3)/boot/grub/stage1 d (hd0,3) (hd0,3)/boot/grub/stage2 p <br />(hd0,3)/boot/grub/menu.conf <br /><br />(注意,上面&quot;grub&gt;&quot;为grub的提示符,其后内容写在一行上.) <br /><br />4. 取得grub的boot信息 <br />过程如下: <br />dd if=/dev/hda4 of=/grub.lnx bs=512 count=1 <br /><br />这样得到grub的引导信息,只要用NT Loader来加载它就行了. <br /><br />5. 将上面得到的grub.lnx弄到Windows的C盘根目录下 <br />可以先把grub.lnx弄得软盘上,然后启动windows,拷贝到C:\; 情况允许也可以直接 <br />在Linux下拷贝到C:了. 我的C盘(即设备/dev/hda1)为FAT32, 可以直接从Linux下弄 <br />过去了. 如下: <br /><br />mount -t vfat /dev/hda1 /mnt/c <br />cp /grub.lnx /mnt/c <br />umount /mnt/c <br /><br />6. 修改NT Loader的boot.ini <br />在其中加入一行: C:\grub.lnx=&quot;Redhat Linux - GRUB&quot; <br />加入后boot.ini的内容如下: <br /><br />[boot loader] <br />timeout=5 <br />default=C:\boot.lnx <br />[operating systems] <br />multi(0)disk(0)rdisk(0)partition(1)\PNT40W=&quot;Windows xp <br />.00&quot; <br />multi(0)disk(0)rdisk(0)partition(1)\PNT40W=&quot;Windows xp <br />.00 <br /><br />[VGA mode]&quot; /basevideo /sos <br />C:\grub.lnx=&quot;Redhat Linux - GRUB&quot; <br /><br />OK. 可以用NT Loader加载Linux了, 其实上面过程基本上和用NT Loader加载LILO <br />一样.其基本思想就是用NT Loader来加载LILO或grub的引导区(grub.lnx), 其中的关 <br />键就是LILO或grub的引导区的获取了,我喜欢把它们安装在Linux的ROOT分区上,然后用 <br />dd取得这个引导分区信息(即分区的第1个扇区), 存为一个文件,放到windows的C:\下, <br />在boot.ini中加入相应的引导指示行即可.</p>                        </span></td>                    </tr>                </tbody>            </table>            </td>        </tr>    </tbody></table>
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160407#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 23 Mar 2006 19:52:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160407</link>
        <guid>http://bbiao.javaeye.com/blog/160407</guid>
      </item>
      <item>
        <title>在C++中实现多线程类</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160408" style="color:red;">http://bbiao.javaeye.com/blog/160408</a>&nbsp;
          发表时间: 2006年03月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在JAVA中，实现多线程有两种方式，一种是继承自Thread类，一种是Runnable，在MFC中也有CWinThread类，但是我们如何利用已有的多线程的机制来实现一个多线程类呢？</p><p>在Windows中使用C语言做多线程编程，我们可以使用两个函数，一个是CreateThread()，该函数是一个Win32 API函数，另一个是_beginthread()，该函数是一个CRT(C Run-Time)函数，二者在使用上没有太大的区别。在本文当中，我将选择使用_beginthread()，需要包含<strong>process.h</strong>文件。先讲一下这个函数的原型是<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uintptr_t _beginthread(&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void( __cdecl *<em>start_address</em> )( void * ),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned <em>stack_size</em>,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void *<em>arglist</em> <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br />第一个参数指定线程的起始位置；第二个参数指定堆栈的大小，默认可以使用0；第三个参数指定传给start_address的参数列表。按照JAVA中对于多线程类的定义，对于我在C++中实现的多线程类，我将采用下面的声明：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class Thread<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void run();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />用户只要继承该类并重写void run()方法，启动start()方法就可以实现了多线程的想法；于是我是这样实现以上两个方法的：<br />void Thread::start()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_beginthread(run, o, NULL);<br />}<br />void Thread::run()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; &quot;Base Thread&quot; &lt;&lt; endl;<br />}<br />结果编译无法通过，并显示<strong>run</strong>和<strong>__cdecl *)( void * </strong>)类型不相符，于是自然而然地想到了要做强制类型转换，可是无论使用什么方法都没有成功，为什么呢？对于这一点，在类的成员函数中，每个函数都有一个默认的参数this，而且该参数是隐式传入的，所以我没有取得成功（对于这一点我还是有点不太清楚，望高手解答。）后来和同学一起讨论这个问题，他说起可以在类的内部定义一个静态方法来解决这个问题，这是个很好的主意；于是将该线程类的声明改写成：<br />class Thread<br />{<br />public:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void run();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HANDLE getThread();<br />private:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HANDLE hThread;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void agent(void *p);<br />};其中agent方法是一个这个类里最大的改进，它是一个静态方法，但是它是被声明为私有的方法，只有在内部才可以被调用，整个类从start启动，然后由它来通过创建一个新的线程执行run()；整个函数的具体实现如下：（完整代码，在Visual Studio 2005, WIndows XP SP2下测试通过），注意，请在Project -&gt; Properties里选择C/C++里选择Code Generation里选择Runtime Library里选择Multi-threaded Debug(/MTd)&nbsp;<br />/*<br />&nbsp;* Thread.h<br />&nbsp;*/<br />#ifndef THREAD_H<br />#define THREAD_H<br />#include &lt;process.h&gt;<br />#include &lt;iostream&gt;</p><p>using std::cin;<br />using std::cout;<br />using std::endl;</p><p>typedef void *HANDLE;<br />class Thread<br />{<br />public:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;void start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;virtual void run();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE getThread();<br />private:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE hThread;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void agent(void *p);<br />};</p><p>void Thread::start()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hThread =(HANDLE)_beginthread(agent, 0, (void *)this);<br />}<br />void Thread::run()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; &quot;Base Thread&quot; &lt;&lt; endl;<br />}<br />void Thread::agent(void *p)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread *agt = (Thread *)p;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;agt-&gt;run();<br />}<br />HANDLE Thread::getThread()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return hThread;<br />}<br />#endif //THREAD_H<br />测试文件<br />#include &quot;Thread.h&quot;<br />#include &lt;windows.h&gt;<br />#include &lt;iostream&gt;<br />using std::cin;<br />using std::cout;<br />using std::endl;</p><p>class DerivedThread: public Thread<br />{<br />public:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void run();<br />};<br />void DerivedThread::run()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;Derived Thread&quot; &lt;&lt; endl;<br />}<br />int main(int argc, char *argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DerivedThread *dt = new DerivedThread();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dt-&gt;start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WaitForSingleObject(dt-&gt;getThread(), INFINITE);<br />}<br />运行显示:<br />Derived&nbsp;Thread<br />成功！<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160408#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 17 Mar 2006 20:15:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160408</link>
        <guid>http://bbiao.javaeye.com/blog/160408</guid>
      </item>
      <item>
        <title>Eclipse的linux安装  </title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160409" style="color:red;">http://bbiao.javaeye.com/blog/160409</a>&nbsp;
          发表时间: 2006年03月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Eclipse是一由IBM，Borland等资助的开源开发环境；其功能可以通过插件方式进行扩展；本文在Linux下构建Java、C、C＋＋的IDE。</p><p>我用的环境是 Redhat Linux 9 （自编译Gnome2.4）</p><p>一.下载所需软件（所有下载的软件均放在/opt下） </p><p>先下载Eclipse，网址为<a href="http://www.eclipse.org/">http://www.eclipse.org</a>,目前，Eclipse的最新版本為2.1.1，3.0版也正在测试中。我使用eclipse2.1；下载其gtk版本：eclipse-SDK-2.1.1-linux-gtk.zip</p><p>执行 Eclipse是须用到JDK，但Eclipse的安装程序和Red Hat Linux 9 里没有包含JDK，Sun 最新版本的 JDK可到<a href="http://java.sun.com/">http://java.sun.com</a>下载，在此我们使用的是Sun jdk(J2SE) 1.4.2_01版（也可使用IBM的jdk）。</p><p>要 在Eclipse 上面开发C/C++程序，需要另外安装plug-ins，在此我们使用的是C/C++ Development Tools（CDT）。CDT 整合了gcc、make、gdb等GUN 工具，（CDT 与Eclipse 中内建的JDT（Java 开发环境）比起来，功能还差得远。例如，在JDT 中相当好用的Refactor、Refactoring、Organize Imports等在CDT中都没有。）CDT 可从<a href="http://www.eclipse.org/cdt/">http://www.eclipse.org/cdt/</a> 下载，目前最新版本为CDT 1.1 GA2 . </p><p>二.安装 </p><p>1.由于CDT需要gcc等工具，所以要先把Redhat9的软件开发包装上。</p><p>2.安装JDK（需以root身份安装）：</p><p>[root@redarmy] chmod ＋x j2sdk-1_4_2_01-linux-i586-rpm.bin<br />[root@redarmy] ./j2sdk-1_4_2_01-linux-i586-rpm.bin<br />[root@redarmy] rpm &ndash;ivh j2sdk-1_4_2_01-linux-i586-rpm.bin</p><p>安装好的JDK 会存在 /usr/java/j2sdk1.4.2_01 目录中。设定JAVA_HOME,CLASSPATH,PATH; 在/etc/profile文件最后加如下四行：</p><p>export JAVA_HOME = /usr/java/j2sdk1.4.2_01 <br />export PATH = $JAVA_HOME/bin:$PATH<br />CLASSPATH=.:/usr/java/j2sdk1.4.2_01/lib/tools.jar:$CLASSPATH<br />export CLASSPATH</p><p>3.安裝Eclipse<br />在此我把Eclipse安装在/opt下，安装Eclipse很简单，只要把下载回来的压缩包解压就可以了；解压后得到Eclipse目录；</p><p>[root@redarmy] unzip &ndash;d /opt eclipse-SDK-2.1.1-linux-gtk.zip </p><p>为让每一个帐号都可以执行Eclipse，我写了个小脚本（Eclipse.sh）： </p><p>#!/bin/bash<br />#<br /># 执行 eclipse 2.1.1 <br />#<br />export JAVA_HOME=/usr/java/j2sdk1.4.2_01<br />export CLASSPATH=/usr/java/j2sdk1.4.2_01/lib<br />/opt/eclipse/eclipse -vm /usr/java/j2sdk1.4.2_01/bin/java -data ~/workspace &amp;<br /># -vm 参数用以指定使用哪一个 jvm 来执行Eclipse，<br /># -date参数用以指定Eclipse的数据目录。在此指定其存在用户根目录(~)下的workspace目录中<br />&nbsp;</p><p><br />将eclipse.sh 复制到/usr/local/bin中，并为它加上权限755；现在执行 eclipse.sh 即可启动 Eclipse。 </p><p>[root@redarmy] cp eclipse.sh /usr/local/bin </p><p>[root@redarmy] chmod 755 /usr/local/bin/eclipse.sh </p><p>将Eclipse 添加到桌面。首先，在桌面上按下鼠标右键，在弹出菜单中选择&ldquo;新增启动&rdquo;，之后分別在&ldquo;名称&rdquo;中输入Eclipse、&ldquo;命令&rdquo;中填 /usr/local/bin/eclipse.sh，然后再为它随便找个喜欢的图标（我用的是/opt/eclipse/icon.xpm）;再后按 &ldquo;确定&rdquo;，桌面上就有eclipse的快捷方式了，以后可以直接双击这个图标启动Eclipse。 </p><p>Eclipse 安装好后，已经内建了java开发环境（JDT）就可以直接开发Java 程序。 </p><p>4.安装CDT，CDT 1.1 GA 目前只支持Eclipse 2.1 版。 </p><p>将下载的包解压，会得到features 和plugins 这两个目录 </p><p>[root@redarmy] unzip &ndash;d /opt org.eclipse.cdt-linux.gtk_1.1.0.bin.dist.zip </p><p>分别将这两个目录中的所有文件分别剪到/opt/eclipse下的对应目录里，即可。（Eclipse的插件安裝方法几乎都这样安装： 把文件下载后， 直接解到Eclipse所安装的目录中对应的features 和plugins 中即可。） </p><p>三.程序实例 </p><p>这没多少好说的，对C、C＋＋开发，都是先写源程序，再写个makefile。 </p><p>四：附 </p>要是不习惯，Eclipse英文环境，可以在Eclipse.org的主站上下，它的语言包；装了语言包后，不光菜单成中文了，它的帮助文档也成中文了。
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160409#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 03 Mar 2006 22:39:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160409</link>
        <guid>http://bbiao.javaeye.com/blog/160409</guid>
      </item>
      <item>
        <title>Linux下jdk1.5的安装及中文显示问题解决方案</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160410" style="color:red;">http://bbiao.javaeye.com/blog/160410</a>&nbsp;
          发表时间: 2006年03月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          作者：terry<br />个人主页：<a href="http://infected.533.net/">http://infected.533.net</a><br />文档版本：v1.0&nbsp;2004-10-30<br />图文版本：<a href="http://infected.html.533.net/download/linux.doc">http://infected.html.533.net/download/linux.doc</a><br />操作系统：Fedora&nbsp;Core&nbsp;2&nbsp;(Kernel&nbsp;2.6.7)<br />jdk版本：jdk&nbsp;1.5.0<br /><br />摘 要：随着Sun发布J2SE&nbsp;5.0，即jdk1.5，众多新特性的加入和JVM性能的改善让人心动。Windows下安装和环境设置以及中文显示自然没 什么好说的，简直可以说是傻瓜式的。但是Linux下就不会那么顺利了，尤其是中文字体的显示一直以来总是困扰着初级用户。Jdk&nbsp;1.5.0的中文显示 设置和j2sdk&nbsp;1.4.x时相比已经有了很大的改变。本文着重介绍jdk1.5在Linux操作系统下的安装、环境变量设置和中文显示问题的解决。<br /><br />1.&nbsp;&nbsp;&nbsp;&nbsp;首先，从sun下载jdk1.5的安装文件，一般有两种。<br />下载地址：<a href="http://java.sun.com/j2se/1.5.0/download.jsp">http://java.sun.com/j2se/1.5.0/download.jsp</a><br />Linux&nbsp;RPM&nbsp;in&nbsp;self-extracting&nbsp;file&nbsp;(jdk-1_5_0-linux-i586-rpm.bin,&nbsp;42.50&nbsp;MB)<br />Linux&nbsp;self-extracting&nbsp;file&nbsp;(jdk-1_5_0-linux-i586.bin,&nbsp;43.95&nbsp;MB)<br />简 单说一下两个安装文件的区别，Linux&nbsp;RPM&nbsp;in&nbsp;self-extracting&nbsp;file是一个把rpm安装包封装在压缩包内的二进制格式，在 linux操作系统的命令行下，给文件加上执行的权限chmod&nbsp;a+x&nbsp;jdk-1_5_0-linux-i586-rpm.bin，然后./jdk- 1_5_0-linux-i586-rpm.bin之后可以得到jdk-1_5_0-linux-i586.rpm这个rpm包，之后安装rpm包还用多 说么？rpm&nbsp;?ivh&nbsp;package-name。前者的好处是容易安装和维护，傻瓜式的。而后者则适合高级的用户，相当于一个zip版本的&ldquo;绿色&rdquo; jdk，没有安装程序，安装完之后可能需要做一些链接（具体可以参考jdk安装指南文档）。同样地给后者加上执行权限之后直接执行二进制文件即可得到 jdk&nbsp;1.5.0，一般用户的习惯都是将jdk放在/usr/java下，rpm安装后默认是在/usr/java下。<br />2.&nbsp;&nbsp;&nbsp;&nbsp;安装好之后要做的便是环境变量的设置，也可分为两种不同的情况。<br />第一种是对于单个用户的的环境变量设置。需要修改用户所对应的.bash_profile文件。我们可以通过vi&nbsp;~/.bash_profile来编辑当前用户的bash_profile文件，当然你也可以用你自己喜欢的编辑器。在开头或者适当的地方插入一下代码：<br />export&nbsp;JAVA_HOME=/usr/java/jdk1.5.0<br />export&nbsp;CLASSPATH=.<br />export&nbsp;PATH=$JAVA_HOME/bin:$PATH<br />然后保存文件，注销重新登陆之后在控制台下输入java&nbsp;?version，如果出现一下信息则说明安装设置已经成功。<br />注意：此代码是为了看起来简单，所以没有加上复杂的变量引用，熟悉shell的用户可以参&nbsp;&nbsp;照第二种方法的代码进行修改。<br />java&nbsp;version&nbsp;&quot;1.5.0&quot;<br />Java(TM)&nbsp;2&nbsp;Runtime&nbsp;Environment,&nbsp;Standard&nbsp;Edition&nbsp;(build&nbsp;1.5.0-b64)<br />Java&nbsp;HotSpot(TM)&nbsp;Client&nbsp;VM&nbsp;(build&nbsp;1.5.0-b64,&nbsp;mixed&nbsp;mode,&nbsp;sharing)<br /><br />第二种是设置Linux的全局环境变量（需要root权限），修改/etc/profile，在适当的地方加入以下代码：<br />JAVA_HOME=/usr/java/jdk1.5.0<br />PATH=$JAVA_HOME=$JAVA_HOME/bin:$PATH<br />CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar<br />export&nbsp;PATH&nbsp;JAVA_HOME&nbsp;CLASSPATH<br />修改完成后保存，注销当前用户重新登陆后按照第一种同样的方法进行测试查看是否成功。<br />至此，基本的安装和环境变量设置已经完成了。<br />至于正确显示applet的浏览器的插件安装请查看Sun的文档：<br /><a href="http://java.sun.com/j2se/1.5.0/install-linux.html#plugin">http://java.sun.com/j2se/1.5.0/install-linux.html#plugin</a><br /><a href="http://java.sun.com/j2se/1.5.0/manual_install_linux.html">http://java.sun.com/j2se/1.5.0/manual_install_linux.html</a><br />接下来要说如何修改配置来正确显示中文字体。<br />3.&nbsp;&nbsp;&nbsp;&nbsp;最后来解决一下中文字体的显示问题。Jdk1.5.0的字体配置和1.4.x的时候相比有了很大的差别。先来看一下不作任何修改的情况下ControlPanel中文字体的显示情况，如图：<br />&nbsp;<br />虽然能显示一下中文，但是有一大半是无法正常显示的方块，很不爽。下面我们就来解决这个问题。<br />先来看一下Sun公司对JRE1.5.0版的中文字体设置的官方说明中的一些资料：<br />介绍一下其字体配置文件的加载方案。其加载顺序为（JavaHome指JRE的根目录，下同）：JavaHome/lib/fontconfig.OS.Version.properties<br />JavaHome/lib/fontconfig.OS.Version.bfc<br />JavaHome/lib/fontconfig.OS.properties<br />JavaHome/lib/fontconfig.OS.bfc<br />JavaHome/lib/fontconfig.Version.properties<br />JavaHome/lib/fontconfig.Version.bfc<br />JavaHome/lib/fontconfig.properties<br />JavaHome/lib/fontconfig.bfc<br />其中，OS字段可以是：<br />Windows：&nbsp;&quot;98&quot;,&nbsp;&quot;2000&quot;,&nbsp;&quot;Me&quot;,&nbsp;&quot;XP&quot;,&nbsp;&quot;2003&quot;。<br />Solaris：空。<br />Linux：&nbsp;&quot;Sun&quot;,&nbsp;&quot;RedHat&quot;,&nbsp;&quot;Turbo&quot;,&nbsp;&quot;SuSE&quot;。<br />而Version字段指该OS的版本号。<br />在这些配置文件中，仅.properties文件是文本文件。其格式跟JRE1.4.2版的不同。文件分为几段，并在每段开始时标明。<br />我们需要关注的仅有两段：Component&nbsp;Font&nbsp;Mappings和Search&nbsp;Sequences。前者指定字体，后者指定要使用的properties的搜索顺序。<br />知道了这些，配置起来就简单了。<br />看了是不是有点晕，而且觉得没用？不要急下面会用到的。<br />先把字体文件Simsun.ttf（可以从windows下拷贝一份到linux下）拷贝到JRE的字体目录$JAVA_HOME/jre/lib/fonts下，接着编辑字体目录下的文件fonts.dir，把第一行的数字加1，然后在最后加一行加上：<br />simsun.ttf&nbsp;-SungtiL&nbsp;GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br />然后保存文件。<br />最 后把字体配置文件改名为fontconfig.RedHat.properties这种形式(Fedora&nbsp;Core&nbsp;x也是Redhat的衍生物)，把 $JAVA_HOME/jre/lib下多余的fontconfig开头的文件全部移到新建的bak目录下，当然你不备份也可以只是除了问题不要找我 ^_^<br />注意：如果你的Linux不是Redhat和Fedora&nbsp;Core系列，请按照自己的发行版本对字体配置文件做相应的修改，参照Sun公 司的资料，jds、Suse和Turbo应该没问题了，至于Debian和Mandrake我就不得而知了，如果大家按照自己的方式修改成功了请告诉我详 细情况以便于我完善这个文档。<br />然后再在控制台下执行ControlPanel看看，是不是很爽！如图：<br />&nbsp;<br />还有自己的程序也能完美的显示中文字体了！<br />&nbsp;<br />4.&nbsp;&nbsp;&nbsp;&nbsp;参考文献<br /><a href="http://addone.blogchina.com/blog/article_17203.216643.html">http://addone.blogchina.com/blog/article_17203.216643.html</a><br />Sun公司对JRE1.5.0版的中文字体设置的官方说明：<br /><a href="http://java.sun.com/j2se/1.5.0/docs/guide/intl/fontconfig.html">http://java.sun.com/j2se/1.5.0/docs/guide/intl/fontconfig.html</a><br /><br />本人能力有限，若有不当或者错误之处请大家不啬指教！<p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;">&nbsp;</p><p style="margin: 0px;"><font color="#ff0000">II. 安装 JDK ( Java Development Kits ) <br />依照下列步骤来完成 JDK 的完装： <br />[root@localhost root]# gunzip jdk1_2_2rc2-linux-i386.tar.gz <br />[root@localhost root]# tar zxvf jdk1_2_2rc2-linux-i386.tar <br />[root@localhost root]# mv jdk1.2.2 /usr/local/jdk122 <br />完成上述步骤后，还需要进行环境设定： <br />[root@localhost root]# vi .bash_profile <br />... <br />... <br />JAVA_HOME=/usr/local/jdk122 <br />PATH=$PATH:$JAVA_HOME/bin <br />CLASSPATH=/usr/local/jdk122/lib/tools.jar:. <br />export JAVA_HOME <br />export PATH CLASSPATH <br />★请注意：如果使用的是 JDK 1.1.x 版本，你的 CLASSPATH 必须设定如下： <br />CLASSPATH=/path/to/your/jdk/lib/classes.zip:. <br /><br />III. 安装 JSDK <br />★请注意：如果使用的是 Java Apache RPM 版本，请跳过此节。 <br />必 须先取得并安装 JSDK ( Java Servlet Development Kits )，才能使 Java Apache 进行运作。但事实上，我们所需要的，只是 JSDK 中的一小部份 ( 一个叫 jsdk.jar 或是 servlet.jar 的档案 )；现在所要做的，就是取得这个档案，并且将这个档案设定到 CLASSPATH 中： <br />CLASSPATH=/path/to/jsdk/lib/jsdk.jar:$CLASSPATH <br />export CLASSPATH </font><br /></p><br />（全文完）
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160410#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 03 Mar 2006 22:37:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160410</link>
        <guid>http://bbiao.javaeye.com/blog/160410</guid>
      </item>
      <item>
        <title>Visual C++ 1.0：C++编译器的终结者</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160411" style="color:red;">http://bbiao.javaeye.com/blog/160411</a>&nbsp;
          发表时间: 2006年02月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &ldquo;唯技术&rdquo;思想有时能使陷入一种困境，作为一种编程工具(也可以认为是一种技术)，Visual C++经历了许多风波和变革，但纵观目前几乎所以有书籍和文章，很少对这种技术进行&ldquo;跳出圈外&rdquo;的思考，这也使我写这篇文章感到无源的苦恼。细想之后，也颇为感慨，愿借此文以激众家之思！<p>　　Visual C++的发展与C/C++语言、Windows的历程是分不开的。</p><p>　　在C语言推出之前，<a href="http://tech.sina.com.cn/introduction/focus/pcos.shtml" class="akey" target="_blank">操作系统</a>等系统软件主要是用汇编语言编写的(如UNIX操作系统)。由于汇编语言依赖于计算机硬件，因此程序的可移植性和可读性就比较差。为了提高程序的可读性和可移植性，并能实现汇编语言的某些功能(如汇编语言可以直接对硬件进行操作、对内存地址进行操作和位操作等)。于是，C语言便应运而生了。</p><p>　　最初的C语言只是为描述和实现UNIX操作系统而提供的一种程序设计语言。1973年，贝尔实验室的K.Thompson和D.M.Ritchie两人合作把UNIX的90%以上的代码用C语言改写(即UNIX第五版)。后来C语言又作了多次改进，1978年以后，C语言已先后移植到大、中、小及微型机上，现在C语言已成为风靡全球的计算机程序设计语言。</p><p>　　到了80年代，美国AT&amp;T贝尔实验室的Bjarne Stroustrup在C语言的基础上推出了C++程序设计语言。由于C++提出了把数据和在数据之上的操作封装在一起的类、对象和方法的机制，并通过派生、继承、重载和多态性等特征，实现了人们期待已久的软件复用和自动生成。这使得软件，特别是大型复杂软件的构造和维护变得更加有效和容易，并使软件开发能更自然地反映事物的本质，从而大大提高了软件的开发效率和质量。</p><p>　　在C/C++发展过程中，C/C++的开发工具也是发展迅速。</p><p>　　早期的程序员仍然不会忘记Turbo Pascal的集成开发环境IDE的魅力，IDE能使编辑器和编译器共同工作，在编辑器中写下源代码，使用Compile(编译)命令来启动编译器，当编译器发现错误时，它将编辑光标定位到出错语句处，以便于改正。IDE为程序开发提供一个整体环境。</p><p>　　C语言产生后，Turbo Pascal发行了Turbo C，Microsoft相应地推出Quick C。虽然Quick C和Turbo C给C编程引进许多内容，但却没有对开发者产生永久性的影响(尽管Turbo C目前仍被用于现行教学中)，其主要原因是二者的编辑器都不怎么好(Quick C编辑器后来合并到Microsoft Quick Basic中，现在它作为DOS编辑器Edit.com仍存在于Microsoft Windows 95中)，其次，DOS下IDE占据大量内存，使程序运行空间变得很小。</p><p>　　编辑器之争</p><p>　　Visual C++在目前的C/C++编辑器占统治地位不是偶然的，这是由<a href="http://tech.sina.com.cn/focus/microsoft.shtml" class="akey" target="_blank">微软</a>的正确和对手的错误造成。</p><p>　　翻开C/C++编辑器历史，战火风云。当Microsoft Visual C++ 1.0 在C/C++开发工具市场获得了空前的成功之后，Borland的Philippe Kahn也许在和Microsoft的FoxPro For Window一役中被吓到了，因此急于在Visual C/C++ 1.0之后立刻推出新的Borland C/C++以扳回颜面。由于当时Borland失去了许多的人才，Borland C/C++ 4.0仓促推出后，由于没有在最后阶段修正许多的错误，加上加入太多的先进技术，造成了整个产品的不稳定，从而铸成大错，陷入窘境。</p><p>　　在Borland C/C++ 4.0失利之后，Borland为挽回局面，立刻着手开发Borland C/++ 4.0的Patch，当时是称为Service Pack。但是在4.01版中并没有完全的解决问题，一直要到4.02才稍为解决一些严重的问题，无奈市场已经起了巨大的变化。 </p><p>　　自Borland C/C++ 4.0一役大败之后，Visual C/C++虽取得了胜利，但此时在C/C++市场上也加入了另外两个坚强的对手，那就是Symantec C/C++和Watcom C/C++。</p><p>　　Symantec C/C++的Think C/C++在Macintosh上便是非常有名的编译器，因此早在C/C++领域便有深厚的基础。在Symantec<a href="http://tech.sina.com.cn/focus/merge.shtml" class="akey" target="_blank">并购</a>了PC上第一个C/C++编译器Zortech C/C++之后，Symantec决定进入了PC的开发工具市场。恰逢Borland C/C++ 3.1的幕后支柱Eugene Wang刚好和Philippe Kahn闹翻，离开了Borland。Symantec重金邀请Eugene Wang，1993年左右，Symantec推出了第一个Symantec C/C++版本，立刻便获得了市场的好评。Symantec C/C++不断完善，以最完美的、先进的集成开发环境获得市场的高度认同。</p><p>　　Watcom C/C++是以在DOS下能够产生最好的最优化程序代码而闻名的，再加入当时最有名的DOS Extender厂商PharLap公司也是使用Watcom C/C++，因此Watcom C/C++在专业的C/C++程序员以及系统程序员心中是第一品牌的C/C++开发工具。为了顺应DOS向Windows过度，也为了生存，大约也是在1993，1994年左右Watcom终于推出第一个基于Window平台的C/C++开发工具。虽然没有什么特色，但却以编译器的优点成为四大C/C++开发工具之一。</p><p>　　但是Symantec和Watcom由于自身的实力和发展方向，在1993年初选择了和Microsoft签约，使用MFC做为它们的开发工具的C/C++ Framework。而Borland选择了坚持开发自己的C/C++ Framework，这就是OWL。</p><p>　　1994年，Microsoft为了对抗Apple和IBM OS2，推出OLE(Object Linking And Embedding)技术，该技术由于可以让Window平台的文件能够内嵌在不同的应用程序中并且能在应用程序中进行编辑，因此&ldquo;深入人心&rdquo;。尽管该技术被后来证明是失败的技术，但却使Microsoft取得了C/C++开发工具的胜利。</p><p>　　由于OLE的复杂性使得Borland无法在OWL中实现此功能，因而就造成了市场的一些负面影响。Symantec和Watcom由于签约的是MFC 1.x的版本，而OLE是在MFC 2.0中的技术，Symantec和Watcom吃了大亏。不久以后，Symantec放弃PC的C/C++开发工具市场，转而开始研发<a href="http://tech.sina.com.cn/mobile/n/2004-06-26/1329380358.shtml" class="akey" target="_blank">Java</a>开发工具。而Watcom则被新兴而起的Sybase并购，从此消失。</p><p>　　为了迎合市场，支持OLE技术，Borland在Borland C/C++ 4.5的OWL 2.5中推出OCF，但由于没有MFC的OLE能力强大，也逐渐败下阵来。虽然后来Borland继续推出了Borland C/C++ 5.0，5.02，但终因品质和市场原因而结束。</p><p>　　随后，Windows 3.0出现了。Windows 3.0尤其是3.1，为个人计算机引进了真正的IDE时代。但是，Microsoft却把精力更多地集中在C编译器的内部支持上，而不是把它的界面升级到一个新的时代。尽管如此，Microsoft C/C++ 7.0却引入了对C++的支持，并引进了Microsoft Foundation Class库1.0版，完善了源代码。Microsoft C/C++ 8.0成为真正的Windows IDE，这就是Visual C++ 1.0。</p><p>　　Visual C++ 1.5之后，微软决定不再将花更多的努力去支持16位编程上。虽然，Visual C++ 2.0仍提供对16位的支持，但它仅用来创建32位程序。</p><p>　　Visual C++是没有3.0的，版本号直接从2.0跳到4.0，以使Visual C++和MFC同步，但这种同步是短暂的，后来，Visual C++和MFC又使用了不同的版本号。</p><p>　　Visual C++ 4.0引入了Internet的支持，并为Internet编程而设计的新类库。</p><p>　　Visual C++ 5.0还增加了一些新类，但主要是集中在界面的改善上，并提供一个更好的在线帮助系统、更高级的宏能力和对在开发者组内进行类和其它代码共享的支持。5.0中还合并了Active Template Library(ATL)，并显著地改善了编译器优化代码的能力。</p><p>　　1998年9月，Microsoft推出了Visual C++ 6.0，它除了保留5.0对ActiveX的支持外，还支持DHTML，更新了MFC及ATL的类库，并对模板也有扩充，用户可以方便地开发出类似Web浏览器界面的应用程序。</p><p>　　2000年7月，在PDC(Professional Developers Conference)会议上，Microsoft宣布启动.NET方案，推出了一个全新的开发平台Visual Studio.NET，这是Microsoft技术方向的重大转变。在这个平台上，包括了Visual C++、Visual Basic、Visual FoxPro和C#等开发工具。</p><p>　　2002年2月推出的Visual Studio.NET虽然有许多不近人意的地方，但是却让我们领略了它的强大之处。Visual C++ .NET除对Microsoft .NET Framework支持和界面及文档的语言本地化这两个最显著特点外，它与Visual C++ 6.0相比，还包含其他许多新的特性，如Web应用程序、C++托管扩展、ATL、DCOM、MFC等方面的增强以及ATL Server、的支持等。</p><p>　　2002年底推出Visual Studio .NET 2002，2003年4月，Visual Studio .NET 2003发布。Visual Studio .NET 2003 包含 Windows .NET Framework 的一个增强版本，并将移 动和嵌入式设备，如 Pocket PC 和其他采用 Microsoft Windows CE .NET 操作系统的设备，带入了 .NET。</p><p>　　Visual C++ .NET 2003对2002版本进行了许多更新和优化，除界面、库作了改进之外，还对在 C++托管扩展中创建的Windows 窗体应用程序提供设计器的支持以及提供对项目中生成自动化模型的支持等。</p><p>　　MFC和Visual C++</p><p>　　Visual C++的核心是Microsoft基础类库，即通常所说的MFC。MFC相当彻底的封装了Win32软件开发工具包(Software Development Kit，即通常所说的SDK)中的结构、功能，它为编程者提供了一个应用程序框架，这个应用程序框架为编程者完成了很多Windows编程中的例行性工作，如管理窗口、菜单和对话框，执行基本的输入和输出、使用集合类来保存数据对象等等，并且，MFC使得在程序中使用很多过去很专业、很复杂的编程课题，如ActiveX、OLE、本地数据库和开放式数据库互联(Open Database Connectivity，简写为ODBC)、Windows套接字和Internet应用程序设计等，以及其它的应用程序界面特性，如属性页(也叫标签对话框)、打印和打印预览、浮动的和可定制的工具条变得更加的容易。 </p><p>　　早在1989年，Microsoft的程序员们开始试图将C++和面向对象的编程概念应用于Windows编程中，以编写出一个可以使Windows编程更加简便的应用程序框架。他们把这个应用程序框架叫做AFX (AFX这个词来源于Application Framework，但奇怪的是这个词组中并没有包含&ldquo;X&rdquo;这个字母)。直到今天，AFX小组早已不存在了，AFX这个名称也于1994年初不再使用，但在Visual C++和MFC中，AFX的影子却随处可见，很多全局函数、结构和宏的标识符都被加上了AFX的前缀。 </p><p>　　最初的AFX版本在经过一年的艰苦之后诞生，却未能被大多数Windows程序员所接受。AFX的确是经过了精心的规划和编码，并且，它也提供了对Windows API的高度抽象，建立了全新的面向对象的AFX API，但最要命的是AFX API库根本不兼容于现有的Windows API。由此导致的最严重后果是大量的SDK代码无法移植，而程序员将学习两种完全不同的编程方法。 </p><p>　　AFX不得不重新做所有的一切，他们所创建的新的应用程序框架是一套扩展的C++类，它封装和映射了Windows API，这就是MFC的前身。过去的AFX小组也变成了MFC小组。最终，MFC的第一个公开版本于1992年3月随Microsoft C/C++ 7.0一起推出。那时距Windows 3.1发布尚有好几个月。在MFC 1.0中还没有文档/视结构，但有类CObject和CArchive。在12个月之后，MFC 2.0随Microsoft新的编程工具Visual C++ 1.0一道出炉。与MFC 1.0一样，MFC 2.0仍是16位的，因为32位的Windows NT 3.1直到1993年7月才问世。在MFC 2.0中，增加了对文档/视结构、OLE 1.0、Windows 3.1公用对话框的支持和消息映射等。在Windows NT 3.1面世一个月以后，Microsoft推出了32版本的Visual C++和MFC 2.1，它实际上是MFC 2.0的Win32接口。 </p><p>　　最后一个16位的Visual C++编译器是1993年12月推出的Visual C++ 1.5，直到今天，一些为Windows 3.1编写16位应用程序的程序员还在使用这个版本。1994年9月，32位的MFC 3.0伴随着Visual C++ 2.0的一道面市，在今天的计算机图书市场上，还有着大量的关于Visual C++ 2.0和MFC 3.0的图书出售，因此，可以想象得出Visual C++ 2.0所取得的成功和它所产生的影响。</p><p>　　但是，在Visual C++ 5.0中包括的MFC版本不是MFC 5.0，而是MFC 4.21。发展到今天，MFC已发展成一个稳定和涵盖极广的C++类库，为成千上万的Win32程序员所使用。MFC库是可扩展的，它和Windows技术的最新发展到目前为止始终是同步的。并且，MFC类库使用了标准的Windows命名约定和编码格式，所以有经验的Windows SDK程序员很容易过渡到MFC。MFC结合了Windows SDK编程概念和面向对象的程序设计技术，从而具有极大灵活性和易用性。</p>
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160411#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 16 Feb 2006 18:28:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160411</link>
        <guid>http://bbiao.javaeye.com/blog/160411</guid>
      </item>
      <item>
        <title>用户界面的今天和明天[转载]</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160412" style="color:red;">http://bbiao.javaeye.com/blog/160412</a>&nbsp;
          发表时间: 2006年02月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font color="#386490"><strong><span class="line">一、引言</span></strong><span class="line"> </span></font></p><p><span class="line"><font color="#386490">　　计算机用户界面是指计算机与其使用者之间的对话接口，是计算机系统的重要组成部分。计算机的发展史不仅是计算机本身处理速度和存储容量飞速提高的历史，而且是计算用户界面不断改进的历史。早期的计算机是通过面板上的指示灯来显示二进制数据和指令，人们则通过面板上的开关、扳键及穿孔纸带送入各种数据和命令。50年代中、后期，由于采用了作业控制语言(JCL)及控制台打字机等，使计算机可以批处理多个计算任务，从而代替了原来笨拙的手工扳键方式，提高了计算机的使用效率。</font></span></p><p><span class="line"><font color="#386490">　　1963年，美国麻省理工学院在709/7090计算机上成功地开发出第一个分时系统CTSS，该系统连接了多个分时终端，并最早使用了文本编辑程序。从此，以命令行形式对话的多用户分时终端成为70年代乃至80年代用户界面的主流。</font></span></p><p><span class="line"><font color="#386490">　　80年代初，由美国Xerox公司Alto计算机首先使用的Smalltalk－80程序设计开发环境，以及后来的Lisa、Macintosh等计算机，将用户界面推向图形用户界面的新阶段。随之而来的用户界面管理系统和智能界面的研究均推动了用户界面的发展。用户界面已经从过去的人去适应笨拙的计算机，发展到今天的计算机不断地适应人的需求。</font></span></p><p><span class="line"><font color="#386490">　　用户界面的重要性在于它极大地影响了最终用户的使用，影响了计算机的推广应用，甚至影响了人们的工作和生活。由于开发用户界面的工作量极大，加上不同用户对界面的要求也不尽相同，因此，用户界面已成为计算机软件研制中最困难的部分之一。当前，Internet的发展异常迅猛，虚拟现实、科学计算可视化及多媒体技术等对用户界面提出了更高的要求。面临新的挑战，用户界面将如何发展？</font></span></p><p><span class="line"><font color="#386490"><strong>二、用户界面的今天：图形用户界面</strong></font></span></p><p><span class="line"><font color="#386490">　　图形用户界面（GUI）的广泛流行是当今计算机技术的重大成就之一，它极大地方便了非专业用户的使用，人们不再需要死记硬背大量的命令，而可以通过窗口、菜单方便地进行操作。&ldquo;Visual&rdquo;已成为当前最流行的形容词，如Visual Basic、VisualC＋＋及Visual FoxPro等。为什么图形用户界面受到如此青睐？它的主要特征是什么？</font></span></p><p><span class="line"><font color="#386490"><strong>1.GUI的主要特征</strong></font></span></p><p><span class="line"><font color="#386490">(1)WIMP<br />其中：</font></span></p><p><span class="line"><font color="#386490">W(Windows)指窗口，是用户或系统的一个工作区域。一个屏幕上可以有多个窗口。<br />I(Icons)指图符，系形象化的图形标志，易于人们隐喻和理解。<br />M(Menu)指菜单，可供用户选择的功能提示。<br />P(PointingDevices)指鼠标器等，便于用户直接对屏幕对象进行操作<br />。</font></span></p><p><span class="line"><font color="#386490">(2)用户模型<br />　　GUI采用了不少Desktop桌面办公的隐喻，使应用者共享一个直观的界面框架。由于人们熟悉办公桌的情况，因而对计算机显示的图符的含义容易理解，诸如：文件夹、收件箱、画笔、工作簿、钥匙及时钟等。</font></span></p><p><span class="line"><font color="#386490">(3)直接操作<br />　　过去的界面不仅需要记忆大量命令，而且需要指定操作对象的位置，如行号、空格数、X及Y的坐标等。采用GUI后，用户可直接对屏幕上的对象进行操作，如拖动、删除、插入以至放大和旋转等。用户执行操作后，屏幕能立即给出反馈信息或结果，因而称为&ldquo;所见即所得&rdquo;(What You See Is What You Get)。用视、点(鼠标)代替了记、击(键盘)，给用户带来了方便。</font></span></p><p><span class="line"><font color="#386490"><strong>2.GUI的发展方向</strong></font></span></p><p><span class="line"><font color="#386490">　　当前，以Windows为代表的GUI已有了很大的发展，但还存在着操作较麻烦、响应较慢、对资源要求较高及剩余的工作区域较小等不足，这些还需进一步改进。今后的发展趋势主要有以下几方面：</font></span></p><p><span class="line"><font color="#386490">(1)与超文本技术结合，支持Internet浏览<br />　　采用超文本(Hypertext)技术，便于用户&quot;联想&quot;搜索有关内容。Navigate、Mosaic、Yahoo及Hotjava等许多浏览器的出现，极大地方便了Internet的使用。GUI与超文本技术相结合将进一步丰富用户界面的功能。Microsoft公司已宣布，Windows95(曾称Chicago)升级的新版本(曾称Nashville)将增加网上浏览功能。</font></span></p><p><span class="line"><font color="#386490">(2)支持三维及多媒体技术<br />　　人们的生活空间是三维的，而屏幕却是二维的。虽然GUI已提供了一些仿三维的按钮等界面元素，但界面仍难进行三维操作。要解决三维的问题，还需从三维交互设备着手。语音、图像和动画等多媒体的支持，也是当今的趋向。</font></span></p><p><span class="line"><font color="#386490">(3)应用对象的可视化<br />　　目前，GUI支持的是与应用无关的通用界面元素，如菜单、对话框等。对于应用来说，使处理的数据易于操作并直观显示是十分重要的问题。当前科学计算可视化、信息可视化和商业数据可视化已引起广泛重视，各种数据可以用直观形式显示，并可进行一、二、三维的操作，这将大大方便用户。</font></span></p><p><span class="line"><font color="#386490">(4)界面构造工具及语言<br />　　开发GUI的工作量及难度十分可观，普通用户已很难自行开发，必须依靠熟练的程序员或方便的工具。现在已有一些GUI开发工具，如Visual Basic、Visual C＋＋、XWindow Motif Widget、Power Builder及Visual FoxPro等。但这些开发工具要为广大用户所掌握或要适应不同的应用，还有待于改进。</font></span></p><p><span class="line"><font color="#386490">　　面向最终用户的语言也是一个重要的趋向。现在已有一些电子表格、数据库查询语言或超文本制作语言(如Hyper talk、Open Script)类似自然语言风格，但其中有的不支持汉字，有的则适应性差。<br /><br /><strong>三、用户界面的明天：GUI＋新人机交互技术</strong></font></span></p><p><span class="line"><font color="#386490">　　图形用户界面会被新的界面淘汰吗?新一代的用户界面将是什么样?这些是很多人感兴趣的问题。</font></span></p><p><span class="line"><font color="#386490">　　美国Brown大学原计算机系主任、著名的计算机图形学家A.Van Dam曾在 SIGGRAPH'95上称，&ldquo;虽然各种三维图形的应用发展得很快，如虚拟现实、科学计算可视化等，但GUI、3D Widget等都将长期存在&rdquo;。这是因为目前大量的应用已经采用成熟的GUI技术，因此，GUI不会被淘汰。随着虚拟现实、科学计算可视化及多媒体技术的飞速发展，新的人机交互技术不断出现，更加自然的交互方式将逐渐为人们所重视。</font></span></p><p><span class="line"><font color="#386490">　　目前，美国正在进行研究的有关人机交互技术的项目主要有：MIT媒体实验室的多通道自然对话项目，CMU交互系统实验室（ISL）的INTERACT项目，海军的Intelligent M4系统。在欧洲信息技术研究战略规划（ESPRITII）的Amodeus项目中，有大量关于多通道人机交互的理论和系统研究。在ESPRITIII中，正在进行MIAMI（Multimodal Integration for Advanced Multimedia Interfaces）项目的研究，其领域包括多媒体和高级多通道人机界面两部分，语言内容是通过视觉、听觉、触觉和手势来访问、表示和产生多媒体信息的多通道交互的各个方面。还有法国IMAG的Coutaz和Nigay设计的系统MATIS（Multimodal Airline Travel Information System)中，用户可以利用键盘、鼠标、话筒或者它们的组合方式查询航班信息，体现了多通道用户界面人机交互的自然性和高效性。语音、自然语言、手势、视线跟踪及头部跟踪等各种形式的输入技术正在研究中，沉浸式的头盔显示器已经开始使用，新的立体显示设备也正在研制。在GUI基础上，新的人机交互技术已逐渐开始应用。</font></span></p><p><span class="line"><font color="#386490"><strong>新一代界面的主要特征可描述如下：</strong></font></span></p><p><span class="line"><font color="#386490">(1)以用户为中心<br />　　以用户对界面的需求变化为出发点，使用户界面的外在形式和内部机制能符合不同用户的需要，这就是以用户为中心的设计思想。非特定人的连续语音识别技术将使计算机能理解人们的要求，是一种重要的输入界面和手段。鱼眼(Fisheye)技术使屏幕观察(或光标)位置附近的内容被放大，便于用户观察。在传统的人机系统中，人被认为是操作者，人去适应机器；在一般的人机系统中，人被称为用户，能与机器对话，但无主动控制能力；而在虚拟现实系统中，人才是主动的参与者，机器将对人的各种动作做出反应。</font></span></p><p><span class="line"><font color="#386490">(2)多通道(Multimodality)<br />　　多通道界面旨在充分利用一个以上的感觉和运动通道的互补特性来捕捉用户的意向，从而增进人机交互中的自然性。人的感觉通道有视觉、听觉、触觉、嗅觉和平衡等；人的运动通道有手、嘴、眼、头、足及身体等。现在，计算机操作时，人的眼和手十分累，效率也不高。若将听、说和手、眼等协同动作，采用多通道、以自然方式交互，可以实现高效人机通信，也可以由人或机器选择最佳反应通道，从而不会使某一通道负担过重。</font></span></p><p><span class="line"><font color="#386490">(3)非精确<br />　　精确交互技术是指能用一种技术来完全说明用户交互目的的交互方式，键盘和鼠标器均需用户精确输入。而人们的动作或思想往往并不很精确，计算机应该理解人的要求，甚至于纠正人的错误，智能化的界面是一个重要方向。</font></span></p><p><span class="line"><font color="#386490">(4)高带宽<br />现在计算机输出的内容已经可以快速、连续地显示彩色图像，其信息量非常大。而人们的输入却还是使用键盘一个又一个地敲击，因而，计算机的输入带宽是很低的。新一代的用户界面应该支持高的输入带宽，快速大批量地输入信息。语音、图像及姿势等的输入和理解是今后的发展方向。</font></span></p><p><span class="line"><font color="#386490">(5)不限制地点<br />　　目前,计算机主要是在办公室、实验室或家庭中使用，人们面对着计算机屏幕进行操作，这种操作方式限制了计算机的应用。虽然已可用遥控器代替部分动作，但用望远镜看屏幕似不方便，而采用语音输入输出或其它计算机视觉(摄像输入)技术，则可不受地点的限制。</font></span></p><p><span class="line"><font color="#386490">(6)图示编程<br />　　图形用户界面的编程是很费时的工作，而采用图示编程(Visual Programming)则比较简单和直观。现在有些多媒体制作工具，如Authorware Professional、IconAuthor等，采用图示方法设计多媒体文档脚本，以便于交互修改、控制时间关系。新一代的用户界面应尽可能提供图示化的开发工具。</font></span></p><p><span class="line"><font color="#386490"><strong>四、结语</strong></font></span></p><p><span class="line"><font color="#386490">　　北京大学计算机系图形研究室在窗口系统的开发和汉化、用户界面生成工具和超文本制作工具的研制等方面做了一些工作。近来，我们与杭州大学工业心理学国家点实验室、中国科学院软件研究所共同承担了国家自然科学基金重点项目&ldquo;多通道用户界面的研究&rdquo;。与Desktop隐喻相仿，我们提出了三维VIR(Virtual Information Room)隐喻，采用基于智能体(Agent－Based)的方法，探索了多通道界面的软件结构，并使用三维鼠标器、汉字手写体识别工具及语音输入软件等，研究了多通道界面的关键问题，即输入原语和通道综合，并正在开发多通道界面原型。针对Internet的飞速发展，目前正在研究虚拟现实建模语言(VRML)及基于PC的桌面虚拟现实开发平台。</font></span></p><p><span class="line"><font color="#386490">　　图形用户界面是当前计算机界面的主流，它仍需不断丰富和改进，如：增强超文本机制以支持Internet的浏览，增强三维和多媒体功能，支持应用数据的可视化，开发更好的界面构造工具与语言。新一代的用户界面将在图形用户界面的基础上，采用新的更加自然的人机交互技术，如语音、自然语言、手势、视线跟踪及头部跟踪等，以用户为中心，实现多通道、非精确、高带宽、高效及不限制地点的人机通信。</font></span></p>
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160412#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 16 Feb 2006 16:06:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160412</link>
        <guid>http://bbiao.javaeye.com/blog/160412</guid>
      </item>
      <item>
        <title>可以显示IP的代码</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160413" style="color:red;">http://bbiao.javaeye.com/blog/160413</a>&nbsp;
          发表时间: 2006年02月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><iframe scrolling="no" src="http://www.cz88.net/ip/viewip468.aspx" frameborder="0" height="50" width="468"></iframe></p><p>&lt;iframe width=&quot;468&quot; height=&quot;50&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;<a href="http://www.cz88.net/ip/viewip468.aspx&quot;&gt;&lt;/iframe">http://www.cz88.net/ip/viewip468.aspx&quot;&gt;&lt;/iframe</a>&gt;</p>
          <br/>
          <span style="color:red;">
            <a href="http://bbiao.javaeye.com/blog/160413#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 12 Feb 2006 16:37:00 +0800</pubDate>
        <link>http://bbiao.javaeye.com/blog/160413</link>
        <guid>http://bbiao.javaeye.com/blog/160413</guid>
      </item>
      <item>
        <title>How Microsoft Lost the API War</title>
        <author>bbiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bbiao.javaeye.com">bbiao</a>&nbsp;
          链接：<a href="http://bbiao.javaeye.com/blog/160414" style="color:red;">http://bbiao.javaeye.com/blog/160414</a>&nbsp;
          发表时间: 2006年02月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="slug"><h1>How Microsoft Lost the API War</h1><br /><h2>By Joel Spolsky<br />Sunday, June 13, 2004<br /><a href="http://www.joelonsoftware.com/printerFriendly/articles/APIWar.html" style="PADDING-LEFT: 0px">Printer Friendly Version</a> </h2></div><p>Here's a theory you hear a lot these days: &quot;Microsoft is finished. As soon as Linux makes some inroads on the desktop and web applications replace desktop applications, the mighty empire will topple.&quot;</p><p>Although there is some truth to the fact that Linux is a huge threat to Microsoft, predictions of the Redmond company's demise are, to say the least, premature. Microsoft has an incredible amount of cash money in the bank and is still incredibly profitable. It has a long way to fall. It could do everything wrong for a decade before it started to be in remote danger, and you never know... they could reinvent themselves as a shaved-ice company at the last minute. So don't be so quick to write them off. In the early 90s everyone thought IBM was completely over: mainframes were history! Back then, Robert X. Cringely predicted that the era of the mainframe would end on January 1, 2000 when all the applications written in COBOL would seize up, and rather than fix those applications, for which, allegedly, the source code had long since been lost, everybody would rewrite those applications for client-server platforms.</p><p>Well, guess what. Mainframes are still with us,&nbsp; nothing happened on January 1, 2000, and IBM reinvented itself as a big ol' technology consulting company that also happens to make <a href="http://www.google.com/froogle?q=ibm+cordless+telephone&amp;btnG=Search+Froogle">cheap plastic telephones</a>. So extrapolating from a few data points to the theory that Microsoft is finished is really quite a severe exaggeration.</p><p>However, there is a less understood phenomenon which is going largely unnoticed: Microsoft's crown strategic jewel, the Windows API, is lost. The cornerstone of Microsoft's monopoly power and incredibly profitable Windows and Office franchises, which account for virtually all of Microsoft's income and covers up a huge array of unprofitable or marginally profitable product lines, the Windows API&nbsp; is no longer of much interest to developers. The goose that lays the golden eggs is not quite dead, but it does have a terminal disease, one that nobody noticed yet.</p><p>Now that I've said that, allow me to apologize for the grandiloquence and pomposity of that preceding paragraph. I think I'm starting to sound like those editorial writers in the trade rags who go on and on about Microsoft's strategic asset, the Windows API. It's going to take me a few pages, here, to explain what I'm really talking about and justify my arguments. Please don't jump to any conclusions until I explain what I'm talking about. This will be a long article. I need to explain what the Windows API is; I need to demonstrate why it's the most important strategic asset to Microsoft; I need to explain how it was lost and what the implications of that are in the long term. And because I'm talking about big trends, I need to exaggerate and generalize.</p><h2>Developers, Developers, Developers, Developers</h2><p>Remember the definition of an operating system? It's the thing that manages a computer's resources so that application programs can run. People don't really care much about operating systems; they care about those application programs that the operating system makes possible. Word Processors. Instant Messaging. Email. Accounts Payable. Web sites with pictures of Paris Hilton. By itself, an operating system is not that useful. People buy operating systems because of the useful applications that run on it. And therefore the most useful operating system is the one that has the most useful applications.</p><p>The logical conclusion of this is that if you're trying to sell operating systems, the most important thing to do is make software developers want to develop software for your operating system. That's why Steve Ballmer <a href="http://www.ntk.net/ballmer/mirrors.html">was jumping around the stage</a> shouting &quot;Developers, developers, developers, developers.&quot; It's so important for Microsoft that the only reason they don't outright <em>give away </em>development tools for Windows is because they don't want to inadvertently cut off the oxygen to competitive development tools vendors (well, those that are left) because having a variety of development tools available for their platform makes it that much more attractive to developers. But t