<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>郎寰福地</title>
    <description></description>
    <link>http://javajiao.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>基于Eclipse CVS 引入OpenCms的源代码</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/221625" style="color:red;">http://javajiao.javaeye.com/blog/221625</a>&nbsp;
          发表时间: 2008年07月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          很多OpenCms陆续发布的Module，其代码在下载的源代码包内不包含，想来想去还是通过CVS把最新的OpenCms的代码引入到Eclipse中吧。<br />具体步骤如下：<br />1  File-->new-->other-->CVS-->Projects for CVS<br />2  Next-->select "create a new repository local"-->Next<br />3  弹出的界面输入链接CVS仓库的链接参数<br />   将":pserver:anon@cvs.opencms.org:/usr/local/cvs"粘贴到"Host"内<br />   添入密码"anon"<br />4  其他选择默认,一路next<br />5  弹出的新建项目窗口,和正常建立项目类似,选择项目类型并添加项目名称,点击Finish.<br />6  接下来就会陆续把资源下载到本地了,根据网速不同,等待的时间不同<br />7  泡杯茶等一下吧……
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/221625#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/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, 30 Jul 2008 17:19:21 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/221625</link>
        <guid>http://javajiao.javaeye.com/blog/221625</guid>
      </item>
      <item>
        <title>eclipse 中删除文件的恢复</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/212932" style="color:red;">http://javajiao.javaeye.com/blog/212932</a>&nbsp;
          发表时间: 2008年07月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          eclipse 中删除文件的恢复<br /><br />在Eclipse内可以恢复项目内被删除的文件，或者类似SVN那样来具体恢复一个java文件内<br />被删除的内容。<br />如果项目内的文件被删除，恢复步骤：<br />1  选中项目，右键；<br />2  选择Restore from Local history；<br />3  在“Check files to restore from local history:”选择对应的要恢复的文件。<br />如果恢复文件内被删除的内容，恢复步骤：<br />1  打开要恢复的java文件；<br />2  选中要恢复的部分，右键；<br />3  Local History--〉Replace with；<br />4  在弹出的对话框内选择要恢复到的时间点。
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/212932#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Jul 2008 09:07:18 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/212932</link>
        <guid>http://javajiao.javaeye.com/blog/212932</guid>
      </item>
      <item>
        <title>解决postgres SQL 1068 1069启动错误</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/212174" style="color:red;">http://javajiao.javaeye.com/blog/212174</a>&nbsp;
          发表时间: 2008年07月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前约一个月在Win系统的机器上安装了PostgresSQL8.3数据库，使用后自动产生一个系统用户，默认数据库的操作是和这个用户关联的。一直使用一切安好，在上周突然无法启动数据库了，在启动的时候就提示1068 和 1069错误，仔细检查了系统，和好用的时候没有什么变动；在网络上查了很多资料，没有什么明确的解决方法。<br />    因为没有其他的变动，所以不应该是人为的原因弄坏了哪个软件，仔细想了想，因为这个数据库在登陆的时候是和自动产生的用户相关联的，开始怀疑是否用户有问题呢？<br />    于是重新启动机器，用另外一个用户来登陆，结果提示用户密码过期了，需要重新设定。<br />    设定了新的密码后，一切又正常了。<br />    如果你的数据库遇到了这样的问题，也可以尝试来检查是不是用户的问题。很有可能是密码过期了！
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/212174#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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 07 Jul 2008 09:07:05 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/212174</link>
        <guid>http://javajiao.javaeye.com/blog/212174</guid>
      </item>
      <item>
        <title>Tomcat Native library was not found</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/208710" style="color:red;">http://javajiao.javaeye.com/blog/208710</a>&nbsp;
          发表时间: 2008年06月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: 
/usr/local/jdk/jdk1.5.0_15/jre/lib/i386/client:
/usr/local/jdk/jdk1.5.0_15/jre/lib/i386:
/usr/local/jdk/jdk1.5.0_15/jre/../lib/i386</pre><br />解决这个问题的方法<br />方法一<br />1  在网上下一个tcnative-1.dll文件<br />   下载   http://tomcat.heanet.ie/native/1.1.2/binaries/win32/tcnative-1.dll  <br />   <br />2  然后复制到C:\windows\system32下面或者放在tomcat\bin里  <br />   <br />3  重起tomcat。<br /><br />  <br />方法二<br /><br />Tomcat启动的时候出现下面这样的提示：<br /><br /><pre name="code" class="java">2006-1-26 19:44:11 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: The Apache Tomcat Native library which allows optimal performance in production 
environments was not found on the java.library.path: D:\Java\jdk1.5.0_05\bin;
.;C:\WINDOWS\system32;C:\WINDOWS;d:\ruby\bin;.;..;D:\Java\jrockit-R26.0.0-jdk</pre><br /><br />这是建议使用apache的apr。<br />详情见 http://tomcat.apache.org/tomcat-5.5-doc/apr.html<br /><br />问题搜索页面：http://www.google.com/search?hl=zh-CN&newwindow=1&q=The+Apache+Tomcat+Native+library+which+allows+optimal+performance&btnG=%E6%90%9C%E7%B4%A2&lr=
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/208710#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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 27 Jun 2008 15:30:39 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/208710</link>
        <guid>http://javajiao.javaeye.com/blog/208710</guid>
      </item>
      <item>
        <title>gmake与make的区别</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/208703" style="color:red;">http://javajiao.javaeye.com/blog/208703</a>&nbsp;
          发表时间: 2008年06月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一种说法：<br />gmake是GNU Make的缩写。<br />Linux系统环境下的make就是GNU Make，之所以有gmake，是因为在别的平台上，make一般被占用，GNU make只好叫gmake了。<br />比如在安装二进制文件进行编译时要使用make命令,但如果在Solaris或其他非GNU系统中运行，必须使用GNU make，而不是使用系统自带的make版本，<br />这时要用gmake代替make进行编译。<br />另一种说法：<br />gmake和BSD自带的make是不同的，他们的Makefile有些不兼容，比如说一些变量的写法和含义。<br />在编译出的程序如果有不同，也只是因为Makefile里指定的命令不同。<br />也因为内核的makefile语法有些特殊，gmake似乎不能用来编译bsd的内核，看来，只适用于bsd自带的那个make。<br /><br />我也一直没有找到权威的解释，有谁路过知道详情，留个言。
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/208703#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 27 Jun 2008 15:16:04 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/208703</link>
        <guid>http://javajiao.javaeye.com/blog/208703</guid>
      </item>
      <item>
        <title>清除系统垃圾文件的脚本文件</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/208109" style="color:red;">http://javajiao.javaeye.com/blog/208109</a>&nbsp;
          发表时间: 2008年06月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          自动清理电脑里的垃圾<br />新建一个记事本并输入以下的内容：<br /><br /><br />@echo off<br />echo 正在清除系统垃圾文件，请稍等......<br />del /f /s /q %systemdrive%\*.tmp<br />del /f /s /q %systemdrive%\*._mp<br />del /f /s /q %systemdrive%\*.log<br />del /f /s /q %systemdrive%\*.gid<br />del /f /s /q %systemdrive%\*.chk<br />del /f /s /q %systemdrive%\*.old<br />del /f /s /q %systemdrive%\recycled\*.*<br />del /f /s /q %windir%\*.bak<br />del /f /s /q %windir%\prefetch\*.*<br />rd /s /q %windir%\temp & md %windir%\temp<br />del /f /q %userprofile%\cookies\*.*<br />del /f /q %userprofile%\recent\*.*<br />del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"<br />del /f /s /q "%userprofile%\Local Settings\Temp\*.*"<br />del /f /s /q "%userprofile%\recent\*.*"<br />echo 清除系统LJ完成！<br />echo. & pause <br /><br />最后将它保存为批文件“*.bat”<br />以后只要双击运行该文件，清理完成后屏幕会提示“清除系统LJ完成！”
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/208109#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jun 2008 09:50:19 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/208109</link>
        <guid>http://javajiao.javaeye.com/blog/208109</guid>
      </item>
      <item>
        <title>CentOS5.0成功安装gcc</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/205104" style="color:red;">http://javajiao.javaeye.com/blog/205104</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          需要架设网络环境，在编译Apache的时候，提示检测不到gcc，进而无法完成安装。<br />故将gcc的安装过程记录下来。<br />复制以下RPM包到CentOS系统内，或者通过FileZilla上传到CentOS内：<br /><br />compat-gcc-34-3.4.6-4.i386.rpm<br />compat-gcc-34-c++-3.4.6-4.i386.rpm<br />cpp-4.1.1-52.el5.i386.rpm<br />gcc-4.1.1-52.el5.i386.rpm<br />gcc-c++-4.1.1-52.el5.i386.rpm<br />gcc-gnat-4.1.1-52.el5.i386.rpm<br />gcc-java-4.1.1-52.el5.i386.rpm<br />gcc-objc-4.1.1-52.el5.i386.rpm<br />glibc-devel-2.5-12.i386.rpm<br />glibc-headers-2.5-12.i386.rpm<br />libgcc-4.1.1-52.el5.i386.rpm<br />libgomp-4.1.1-52.el5.i386.rpm<br /><br />以上文件可以在CentOS安装盘的CentOS目录内找到<br />需要注意的是不同版本对应的这些rpm包是不同的。<br /><br />安装顺序<br />rpm -ivh cpp-4.1.1-52.el5.i386.rpm<br /><br />rpm -ivh glibc-headers-2.5-12.i386.rpm<br /><br />rpm -ivh glibc-devel-2.5-12.i386.rpm<br /><br />rpm -ivh gcc-4.1.1-52.el5.i386.rpm<br /><br /><br />我安装尝试了多次才成功，最后不确定具体的操作过程，大概的rpm包和安装顺序是这样的。<br />如果有人参考我的安装过程，遇到了什么异常，可以给我留言，我再核实一下。
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/205104#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/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jun 2008 13:31:30 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/205104</link>
        <guid>http://javajiao.javaeye.com/blog/205104</guid>
      </item>
      <item>
        <title>网站必做的30条优化</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/201630" style="color:red;">http://javajiao.javaeye.com/blog/201630</a>&nbsp;
          发表时间: 2008年06月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          30条优化措施，几乎等于放之四海皆准的标准，也是我对一个网站进行评估时的标准。 <br />你也可以把这30条作为一个设计或者优化网站时的一个样板来看。 <br /><br />把所选定的关键词放在： <br />1）META keywords，这个部分对于Google不重要，但是对于其他的搜索引擎还是有用的，所以放上。记住，不要超过12个。 <br />2）META description，这个部分同样要把关键词放在句子里面，最好放在靠前面的地方。 <br />3）在title里面，也是靠前的原则，但是不要放在第一个出现。 <br />4）在网页正文的第一段，不要用黑体，斜体，或者其他的样式。 <br />5）用在H3或者H2，H1的标签里面。 <br />6）在正文第二段里，可以加黑出现。 <br />7）用斜体来显示，但是不要在第一段就这样。 <br />8）也可以用在上标或者下标里。 <br />9）URL里，这里的URL包括目录名，文件名，甚至是域名。但是记住不要重复。 <br />10）在相关的图片文件名。 <br />11）ALT标签，主要是图片的注释。 <br />12）图片的title属性里也要用到。 <br />13）在链接到其他网站的链接文字中。 <br />14）在内部链接的链接文字中。 <br />15）在所有的链接的title属性里，都可以用。 <br />16）在外部CSS文件名，或者JS文件名。 <br />17）内部链接，特别是从自己网站的首页。 <br />18）从其他的网站过来的链接中。 <br />19）在一个链接到其他高PageRank的网站时候。 <br />20）在你的Gmail的签名里。 <br /><br />还有其他的一些措施不同关键词相关，但是对于搜索引擎来说非常重要的： <br /><br />21）如果可能的话，在http头部添加 “last modified”属性 <br />22）校验网页文件，最好是标准的HTML或者XHTML。 <br />23）在站点中使用模版文件，Google能够很好的把模版部分给过滤掉，从这个角度来看，Google可以相当好的找到重复内容。 <br />24）尽量使用.html或者htm，使用动态页面，始终存在收录的风险。 <br />25）每个HTML文件最好保持在20K以下，15K最好。 <br />26）在整个HTML文件里，文本要占多数，就是说搜索引擎偏好文本。 <br />27）在不同的浏览器里看网页的不同，至少要保证显示正确，略有不同倒是关系不大。包括Netscape，Opera，IE，如果有Lynx的话，最好也看看。 <br />28）在使用链接的时候，最好只用，href，不要用Javascript。 <br />29）10个页面，每个都有一次referral好过有1个页面有10次referrals。 <br />30）关键词不要孤零零的放在网页上，自然的融合在语句中是最好的优化方法。 <br /><br />上面的30条优化措施，有些操作简单，容易实现，有些并不容易，甚至还要花上许多时间。在一开始规划网站时就进行这方面的考虑，尽可能早的进行优化，效果会更好。如果一个网站能够实现里面的15条，假以时日，网站在搜索中会有一定的起色的。
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/201630#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/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, 10 Jun 2008 09:08:16 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/201630</link>
        <guid>http://javajiao.javaeye.com/blog/201630</guid>
      </item>
      <item>
        <title>一百本名著，一百句箴言</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/201628" style="color:red;">http://javajiao.javaeye.com/blog/201628</a>&nbsp;
          发表时间: 2008年06月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1．神要是公然去跟人作对，那是任何人都难以对付的。（《荷马史诗》） <br /><br />　　2．生存还是毁灭，这是一个值得思考的问题。（《哈姆霄特》） <br /><br />　　3．善良人在追求中纵然迷惘，却终将意识到有一条正途。（《浮士德》） <br /><br />　　4．认识自己的无知是认识世界的最可靠的方法。（《随笔集》） <br /><br />　　5．你以为我贫穷、相貌平平就没有感情吗?我向你发誓，如果上帝赋予我财富和美貌，我会让你无法离开我，就像我现在无法离开你一样。虽然上帝没有这么做，可我们在精神上依然是平等的。（《简·爱》） <br /><br />　　6．大人都学坏了，上帝正考验他们呢，你还没有受考验，你应当照着孩子的想法生活。（《童年》） <br /><br />　　7，你越没有心肝，就越高升得快，你毫不留情地打击人家，人家就怕你。只能把男男女女当作驿马，把它们骑得筋疲力尽，到了站上丢下来，这样你就能达到欲望的最高峰。（《高老头》） <br /><br />　　8．我只想证明一件事，就是，那时魔鬼引诱我，后来又告诉我，说我没有权利走那条路，因为我不过是个虱子，和所有其余的人一样。（《罪与罚》） <br /><br />　　9．你瞧，桑丘·潘沙朋友，那边出现了三十多个大得出奇的巨人。（《堂·吉诃德》） <br /><br />　　10．我并不愿意你受的苦比我受的还大，希斯克利夫。我只愿我们永远不分离：如果我有一句话使你今后难过，想想我在地下也感到一样的难过，看在我自己的份上，饶恕我吧! （《呼啸山庄》） <br /><br />　　11．幸福的家庭是相同的，不幸的家庭各有各的不同。（《安娜·卡列尼娜》） <br /><br />　　12．唉，奴隶般的意大利，你哀痛之逆旅，你这暴风雨中没有舵手的孤舟，你不再是各省的主妇，而是妓院! （《神曲》） <br /><br />　　13．将感情埋藏得太深有时是件坏事。如果一个女人掩饰了对自己所爱的男子的感情，她也许就失去了得到他的机会。（《傲慢与偏见》） <br /><br />　　14．钟声又鸣响了……一声又一声，静谧而安详，即使在女人做新娘的那个好月份里，钟声里也总带有秋天的味道。（《喧嚣与骚动》） <br /><br />　　15．一个人并不是生来要被打败的，你尽可以把他消灭掉，可就是打不败他。（《老人与海》） <br /><br />　　16．当然，行是行的，这固然很好，可是千万别闹出什么乱子来啊。（《套中人》） <br /><br />　　17．面包!面包!我们要面包! （（《萌芽》） <br /><br />　　18．我从没有爱过这世界，它对我也一样。（（《拜伦诗选》） <br /><br />　　19．爱情应该给人一种自由感，而不是囚禁感。（（《儿子与情人》） <br /><br />　　20．暴风雨将要在那一天，甚至把一些槲树吹倒，一些教堂的高塔要倒塌，一些宫殿也将要动摇! （《海涅诗选》） <br /><br />　　21．自己的行为最惹人耻笑的人，却永远是最先去说别人坏话的人。（《伪君子》） <br /><br />　　22．这时一种精神上的感慨油然而生，认为人生是由啜泣、抽噎和微笑组成的，而抽噎占了其中绝大部分。（《欧·亨利短篇小说选》） <br /><br />　　23．历史喜爱英勇豪迈的事迹，同时也谴责这种事迹所造成的后果。（《神秘岛》） <br /><br />　　24．整个下半天，人都听凭羊脂球去思索。不过本来一直称呼她作“夫人”，现在却简单地称呼她作“小姐”了，谁也不很知道这是为着什么，仿佛她 从前在评价当中爬到了某种地位，现在呢，人都想把她从那种地位拉下一级似的，使她明白自己的地位是可羞的。（《莫泊桑短篇小说选》） <br /><br />　　25．如果冬天来了，春天还会远吗? （《雪莱诗选》） <br /><br />　　26．我明白了，我已经找到了存在的答案，我恶心的答案，我整个生命的答案。其实，我所理解的一切事物都可以归结为荒诞这个根本的东西。（《恶心》） <br /><br />　　27．世界上有这样一些幸福的人，他们把自己的痛苦化作他人的幸福，他们挥泪埋葬了自己在尘世间的希望，它却变成了种子，长出鲜花和香膏，为孤苦伶仃的苦命人医治创伤。（《汤姆叔叔的小屋》） <br /><br />　　28．当格里高·萨姆莎从烦躁不安的梦中醒来时，发现他在床上变成了一个巨大的跳蚤。（《变形记》） <br /><br />　　29．当现实折过来严丝合缝地贴在我们长期的梦想上时，它盖住了梦想，与它混为一体，如同两个同样的图形重叠起来合而为一一样。（《追忆似水年华》） <br /><br />　　30．人与人之间，最可痛心的事莫过于在你认为理应获得善意和友谊的地方，却遭受了烦扰和损害。（《巨人传》） <br /><br />　　31．现在我说的您要特别注意听：在别人心中存在的人，就是这个人的灵魂。这才是您本身，才是您的意识在一生当中赖以呼吸、营养以至陶醉的东西，这也就是您的灵魂、您的不朽和存在于别人身上的您的生命。（《日瓦戈医生》） <br /><br />　　32．美德犹如名香，经燃烧或压榨而其香愈烈，盖幸运最能显露恶德而厄运最能显露美德。（《培根论说文集》） <br /><br />　　33．亲爱的艾妮斯，我出国，为了爱你，我留在国外，为了爱你，我回国，也是为了爱你!（《大卫·科波菲尔》） <br /><br />　　34．强迫经常使热恋的人更加铁心，而从来不能叫他们回心转意。（《阴谋与爱情》） <br /><br />　　35．在各种事物的常理中，爱情是无法改变和阻挡的，因为就本性而言，爱只会自行消亡，任何计谋都难以使它逆转。（《十日谈》） <br /><br />　　36．只要你是天鹅蛋，就是生在养鸡场里也没有什么关系。（《安徒生童话》） <br /><br />　　37．就投机钻营来说，世故的价值永远是无可比拟的。（《死魂灵》） <br /><br />　　38. 谁都可能出个错儿，你在一件事情上越琢磨得多就越容易出错。（《好兵帅克历险记》） <br /><br />　　39．我们经历着生活中突然降临的一切，毫无防备，就像演员进入初排。如果生活中的第一次彩排便是生活本身，那生活有什么价值呢?（《生命中不能承受之轻》） <br /><br />40．他发现了人类行为的一da法则，自己还不知道——那就是，为了要使一个大人或小孩极想干某样事情，只需要设法把那件事情弄得不易到手就行了。（《汤姆·索亚历险记》） <br /><br />　　41．对有信仰的人，死是永生之门。（《失乐园》） <br /><br />　　42．有一个传说，说的是有那么一只鸟儿，它一生只唱一次，那歌声比世上所有一切生灵的歌声都更加优美动听。（《荆棘鸟》） <br /><br />　　43．离开一辈子后，他又回到了自己出生的那片土地上。从小到大，他一直是那个地方的目击者。（《尤利西斯》） <br /><br />　　44．同上帝保持联系是一码事，他们都赞同这一点，但让上帝一天二十四小时都待在身边就是另一码事了。（《第二十二条军规》） <br /><br />　　45．在甜蜜的梦乡里，人人都是平等的，但是当太阳升起，生存的斗争重新开始时，人与人之间又是多么的不平等。（《总统先生》） <br /><br />　　46．开发人类智力的矿藏是少不了要由患难来促成的。（《基度山伯爵》） <br /><br />　　47．离你越近的地方，路途越远；最简单的音调，需要最艰苦的练习。（《泰戈尔诗选》） <br /><br />　　48．悲伤使人格外敏锐。（《约翰·克里斯朵夫》<br /><br />　　49．我在女人跟前经常失败，就是由于我太爱她们了。（《忏悔录》） <br /><br />　　50．她睁大一双绝望的眼睛，观看她生活的寂寞。她像沉了船的水手一样，在雾蒙蒙的天边，遥遥寻找白帆的踪影。（《包法利夫人》） <br /><br />　　51．我听见美洲在歌唱，我听见各种不同的颂歌。（《草叶集》） <br /><br />　　52．倘若你能使你的心时常赞叹日常生活的神妙，你的苦痛的神妙必不减少于你的欢乐，你要承受你心天的季候，如同你常常承受从田野上度过的四时。（《先知》） <br /><br />　　53．现在我住在波勒兹别墅，这里找不到一点儿灰尘，也没有一件东西摆得不是地方，除了我们，这里再没有别人，我们死了。（《北回归线》） <br /><br />　　54．艳阳高升，原野上的朝露很快便了无痕迹。源氏痛感人生如梦，像朝露一般，愈加万念俱灰。（《源氏物语》） <br /><br />　　55．那些普普通通而毫无特色的罪行才真正令人迷惑，就像—个相貌平凡的人最难以让人辨认—样。（《福尔摩斯探案集》） <br /><br />　　56．你有一处建在房子里面的小池塘吗?在那个小池塘里，你可以随时观察水中生物生活的每一个片断。（《昆虫记》） <br /><br />　　57．不要向井里吐痰，也许你还会来喝井里的水。（《静静的顿河》） <br /><br />　　58．我看到了各个民族彼此敌视，而且默默地，无知地、愚蠢地、甘心地、无辜地在互相残杀。我看到了世界上最聪明的头脑还在发明武器和撰写文章，使这种种敌视和残杀更为巧妙，更为经久。（《西线无战事》） <br /><br />　　59．这张脸同早晨雪天映在镜子中的那张脸一样，红扑扑的。在岛村看来，这又是介于梦幻同现实之间的另一种颜色。（《雪国》） <br /><br />60．一个人只要有意志力，就能超越他的环境。（《马丁·伊登》） <br /><br />　　61．站在痛苦之外规劝受苦的人，是件很容易的事。（《被缚的普罗米修斯》） <br /><br />　　62．感情有理智根本无法理解的理由。（《月亮和六便士》） <br /><br />　　63．世界上一切好东西对于我们，除了加以使用外，实在没有别的好处。（《鲁滨逊漂流记》） <br /><br />　　64．每当太阳西沉，我坐在河边破旧的码头上，遥望新泽西上方辽阔的天空，我感到似乎有未经开垦的土地，所有的道路，所有的人都在不可思议地走向西部海岸。直到现在我才知道，在衣阿华，小伙子们总是不停地骚动喧闹，因为是那片土地使他们如此无法平静。（《在路上》） <br /><br />　　65。在与法律之前，合乎“自然的”只有狮子的力量，或者动物饥寒时的需要，更简单地用一个字表示，便是“欲”。（《红与黑》） <br /><br />　　66．上天让我们习惯各种事物，就是用它来代替幸福。（《叶甫盖尼·奥涅金》） <br /><br />　　67．一个人哪怕只生活过一天，也可以毫无困难地在监狱里过上一百年。（《局外人》） <br /><br />　　68．往上爬吧，多捞钱吧，进入上层社会，那里准备好了一切。（《美国的悲剧》） <br /><br />　　69．念书不能增添智慧。（《痛症楼》） <br /><br />　　70．不管我活着，还是我死去，我都是一只牛虻，快乐地飞来飞去。（《牛虻》） <br /><br />　　71．一个人把他整个的一生都押在“女人的爱”那一张牌上头赌博，那张牌输了，他就那样地灰心丧气，弄得自己什么事都不能做，这种人不算一个男人，不过是一个雄性生物。（《父与于》） <br /><br />　　72．这个家庭的历史是一架周而复始无法停息的机器，是一个转动着的轮子，这只齿轮，要不是轴会逐渐不可避免地磨损的话，会永远旋转下去。（《百年孤独》） <br /><br />　　73．现在我只信，首先我是一个人，跟你一样的一个——至少我要学做一个人。（《玩偶之家》） <br /><br />　　74．天才和我们相距仅仅一步。同时代者往往不理解这一步就是千里，后代又盲目相信这千里就是一步。同时代为此而杀了天才，后代又为此而在天才面前焚香。（《侏儒的话》） <br /><br />　　75．遭受苦难的人在承受痛楚时并不能觉察到其剧烈的程度，反倒是过后延绵的折磨最能使其撕心裂肺。（《红字》） <br /><br />　　76．人最宝贵的是生命，生命属于人只有一次。人的一生应当这样度过：当他回首往事时，不会因虚度年华而悔恨，也不会因碌碌无为而羞耻。这样， 临终前他就可以自豪地说：“我已经把自己整个生命和全部精力都献给了世界上最壮丽的事业——为人类的解放而奋斗。”（《钢铁是怎样炼成的》） <br /><br />　　77．凡是有甜美的鸟歌唱的地方，也都有毒蛇嘶嘶地叫。（《德伯家的苔丝》） <br /><br />　　78．凡是想依正路达到这深密境界的人应从幼年起，就倾心向往美的形体。（《文艺对话录》） <br /><br />　　79．友谊就是一切。友谊比才能更重要，比政府更重要，它和家庭几乎是可划等号的。千万别忘记这一点。（《教父》） <br /><br />　　80．已经活了七十二岁，依然像是昨天的事：居民点的林阴小路，在歇晌的时间，白人居住区，道旁开满金风花的大街，阗无行人。（《物质生活》） <br /><br />　　81．我明天回塔拉再去想吧。巳那时我就经受得住一切了。明天，我会想出一个办法把他弄回来。毕竟，明天又是另外的一天呢。（《飘》） <br /><br />　　82．盲目可以增加你的勇气，因为你无法看到危险．（《格列佛游记》） <br /><br />　　83．本人系疗养与护理院的居住者。我的护理员在观察我，他几乎每时每刻都监视着我：因为门上有个窥视孔，我的护理员的眼睛是那种棕色的，它不可能看透蓝眼睛的我。（《铁皮鼓》） <br /><br />　　84．每当我追溯自己的青春年华时，那些日子就像是暴风雪之晨的白色雪花一样，被疾风吹得离我而去。（《洛莉塔》） <br /><br />　　85．宽宏大量，是惟一能够照亮伟大灵魂的光芒。（《巴黎圣母院》） <br /><br />　　86．很多年以前，那时我的钱包瘪瘪的，陆地上看来没什么好混的了，干脆下海吧，去在我们这个世界上占绝对面积的大海里逛逛吧! （《白鲸》） <br /><br />　　87．我一贯追求的是：在人的热爱祖国与幻想允许的范围内，获得最大限度的真诚和信任，以及对所有的一切尽可能长久的保证。（《镜中微瑕》） <br /><br />　　88．这里有一种无处投诉的罪行。这里有一种眼泪不足以象征的悲哀。这里有一种绝大的失败，足以使我们的一切成功都垮台。（《愤怒的葡萄》） <br /><br />　　89．起来，饥寒交迫的奴隶!起来，全世界受苦的人! （《国际歌》） <br /><br />　　90．我是说孩子们都在狂奔，也不知道自己是在往哪儿跑，我得从什么地方出来，把他们捉住。我整天就干这样的事。我只想当个麦田的守望者。我知道这有点异想天开，可我真正喜欢干的就是这个。（《麦田的守望者》） <br /><br />　　91．获取一颗没有被人进攻的经验的心，也就像夺取一座没有守卫的城池一样。（《茶花女》） <br /><br />　　92．他不知道那个梦已经丢在他背后了，丢在这个城市那边那一片无垠的混沌之中不知什么地方了，那里合众国的黑黝黝的田野在夜色中向前伸展。（《了不起的盖茨比》） <br /><br />　　93．四月最残忍，从死了的土地滋生丁香，混杂着回忆和欲望，让春雨挑动着呆钝的根。（《荒原》） <br /><br />　　94．世间的一切虚伪，正像过眼云烟，只有真理才是处世接物的根据。虚伪的黑暗，必为真理的光辉所消灭。（《一千零一夜》） <br /><br />　　95．下面玩什么花样呢?（《发条橙》） <br /><br />　　96．昨晚，我梦见自己又回到了曼陀丽庄园。（《蝴蝶梦》） <br /><br />　　97．我不能想像这样一个人，他认为开棋的时候先走马而不是先走卒对他来说是英勇的壮举，而在象棋指南的某个犄角里占上一席可怜的位置就意味着 声名不朽，我不能想像，一个聪明人竟然能够在10年、20年、30年、40年之中一而再、再而三地把他全部的思维能力都献给一种荒诞的事情——想尽一切办 法把木头棋子王赶到木板棋盘的角落里，而自己却没有发狂成为疯子。（《象棋的故事》） <br /><br />　　98．咱家是猫。名字嘛……还没有。（《我是猫》） <br /><br />　　99．挺起英勇的胸脯前进！看，无数的旗帜满天飞舞！谁在那里向右转？ 向左！ 向左！向左！（《马雅可夫斯基诗选》） <br /><br />　　100．水里照出的是自己的脸，内心反映的是自己的为人。（《圣经·旧约》）
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/201628#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 10 Jun 2008 09:04:47 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/201628</link>
        <guid>http://javajiao.javaeye.com/blog/201628</guid>
      </item>
      <item>
        <title>解决windows2003安装PostgreSQLerror code = 601; message</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/201519" style="color:red;">http://javajiao.javaeye.com/blog/201519</a>&nbsp;
          发表时间: 2008年06月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在windows2003系统中安装postgreSQL8遇到错误，几次尝试都无法完成安装，错误日志如下：<br />1.log.txt<br /><pre name="code" class="java">
(2008-6-9 16:26:34), Install, com.enterprisedb.isaction.InitDBFailAction, err, ProductException: (error code = 601; message="Initdb Failed"; additional data = [Contents of data folder [E:\Program\Install\PostgresSQL\PostgresPlus\8.3AS\data] are invalid.])
STACK_TRACE: 12
ProductException: (error code = 601; message="Initdb Failed"; additional data = [Contents of data folder [E:\Program\Install\PostgresSQL\PostgresPlus\8.3AS\data] are invalid.])
	at com.enterprisedb.isaction.InitDBFailAction.install(InitDBFailAction.java:75)
	at com.installshield.product.service.product.PureJavaProductServiceImpl.installProductAction(Unknown Source)
	at com.installshield.product.service.product.PureJavaProductServiceImpl$InstallProduct.getResultForProductAction(Unknown Source)
	at com.installshield.product.service.product.InstallableObjectVisitor.visitComponent(Unknown Source)
	at com.installshield.product.service.product.InstallableObjectVisitor.visitInstallableComponents(Unknown Source)
	at com.installshield.product.service.product.InstallableObjectVisitor.visitProductBeans(Unknown Source)
	at com.installshield.product.service.product.PureJavaProductServiceImpl$InstallProduct.install(Unknown Source)
	at com.installshield.product.service.product.PureJavaProductServiceImpl$Installer.execute(Unknown Source)
	at com.installshield.wizard.service.AsynchronousOperation.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:595)
</pre><br />2. install_logs/inidb_stderr.txt<br /><pre name="code" class="java">
initdb: 无法改变目录 "E:/Program/Install/PostgresSQL/PostgresPlus/8.3AS/data" 的权限: Permission denied
</pre><br />3. install_logs/inidb_stdout.txt<br /><pre name="code" class="java">
属于此数据库系统的文件宿主为用户 "Administrator".
此用户也必须为服务器进程的宿主.
数据库簇将带有 locale Chinese_People's Republic of China.936 初始化.

修复已存在目录 E:/Program/Install/PostgresSQL/PostgresPlus/8.3AS/data 的权限 ... 
</pre><br />4. install_logs/initerr.txt<br /><pre name="code" class="java">
CPAU V01.10.00cpp Joe Richards (joe@joeware.net) October 2004
</pre><br />5. install_logs/initout.txt<br /><pre name="code" class="java">
Adjusting rights for current user to impersonate(required for Windows 2000 based systems)...
 Granting SeTcbPrivilege to WWW-64C854AFFB8\Administrator   ... successful
Calling initdb as user enterprisedb...
Process Created...

The command completed successfully.

Done!
</pre><br /><br />后来到论坛上去查了一下<br />查到这个页面<br />http://forums.enterprisedb.com/posts/list/1135.page<br />他是这样解决的：<br /><pre name="code" class="java">
Please ensure that secondary logon service is running in your services console. Once it’s started, please try running the installer again and hopefully your issue would be resolved. 

In case it fails again, then run the installer from the command prompt as given below: 

edb-installation_file.exe -use_local_logon 
</pre><br /><br />大概的意思就是<br />确保服务进程“secondary logon”运行的情况下，进行安装，如果出现了安装错误无法完成的情况，<br />尝试在命令行进行安装<br />我如法尝试了一下，最终完成了安装。<br />运行的命令<br /><pre name="code" class="java">
edb-installation_file.exe -use_local_logon 
</pre><br />附：edb-installation_file.exe对应为安装原文件，文件名称可能不同，用时需要注意。
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/201519#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 09 Jun 2008 16:51:27 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/201519</link>
        <guid>http://javajiao.javaeye.com/blog/201519</guid>
      </item>
      <item>
        <title>笔记本网络IP切换</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/201504" style="color:red;">http://javajiao.javaeye.com/blog/201504</a>&nbsp;
          发表时间: 2008年06月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          笔记本电脑的移动性使其在开发中很便捷，也是因此使其在不同网络环境中网卡IP地址、网关、DNS等设置很麻烦。到公司上班时，对TCP/IP属性进行设置，下班回家后又要对设置更改，有的时候到客户做实施，更需要更改，这样一天反反复复改几次，相当烦人。<br />在网上搜索一下，大概两种方式，记下以备参考：<br /><br />一、命令法切换网络配置 <br /><br />首先进行网络配置的备份。家里和公司所使用的网络配置是不同的，需要分别对其进行备份。<br />网络配置操作，要在DOS窗口中输入“netsh -C interface dump>d:\home.txt”，其中d:\home.txt为配置文件保存到的位置。<br />同样可以将公司的网络配置备份为“netsh -C interface dump>d:\work.txt”文件。 <br />进行网络配置切换。若你需要设置成为家里的网络配置，在DOS窗口中输入“netsh -f d:\home.txt”，即可完成家里网络的配置；<br />若需要设置为公司网络配置，将命令行中的配置文件改为“netsh -f d:\work.txt”即可。  <br /><br />注意：备份工作需要在DOS窗口中完成，直接在“运行”对话框的命令行中输入命令是没有效果的，但是恢复工作可以直接在“运行”对话框中输入。<br />同时，这个命令切换方法只在Windows 2000和Windows XP系统中有效。 <br /><br />二、软件法切换网络配置 <br /><br />网络上有很多相应的切换网络配置软件，更简单地完成切换工作。 <br /><br />IP Changer（下载地址：http://www.onlinedown.net/soft/4990.htm）<br />笔记本网络IP切换器<br />网络配置切换器<br />IP管家(IPManager) <br />命令法和软件法都可以让你轻松完成网络配置切换的工作，这<br />google一下有很多。
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/201504#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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 09 Jun 2008 15:23:18 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/201504</link>
        <guid>http://javajiao.javaeye.com/blog/201504</guid>
      </item>
      <item>
        <title>There is no DAO implementation found for class问题的解</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/194247" style="color:red;">http://javajiao.javaeye.com/blog/194247</a>&nbsp;
          发表时间: 2008年05月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          用iBATIS的DAO写了个东西<br />新增一个表的CRUD实现后，出现了以下的问题：<br /><pre name="code" class="java">
Exception in thread "main" com.ibatis.dao.client.DaoException: There is no DAO implementation found for class com.ccutsesms.mis.dao.impl.BDM in any context. If you've registered multiple implementations of this DAO, you must specify the Context ID for the DAO implementationyou're looking for using the getDao(Class iface, String contextId) method.
	at com.ibatis.dao.engine.impl.StandardDaoManager.getDao(StandardDaoManager.java:64)
	at com.ccutsesms.mis.service.BDMService.getBDM(BDMService.java:20)
	at com.ccutsesms.mis.util.BDMTag.getTags(BDMTag.java:21)
	at test.com.ccutsesms.mis.util.TestTags.main(TestTags.java:19)
</pre><br /><br />我的实现如下：<br />DAO Interface: <br /><pre name="code" class="java">com.ccutsesms.mis.dao.IBDM;</pre><br />DAO implement:<br /><pre name="code" class="java">com.ccutsesms.mis.dao.impl.BDM;</pre><br />DAO configure file:<br /><pre name="code" class="java">&lt;daoConfig>
    &lt;context>
        &lt;transactionManager type="SQLMAP">
            &lt;property name="SqlMapConfigResource"
                     value="com/ccutsesms/mis/maps/SqlMapConfig.xml"/>
        &lt;/transactionManager>
        ... ...
        &lt;dao interface="com.ccutsesms.mis.dao.IBDM"  
        	implementation="com.ccutsesms.mis.dao.impl.BDM"/>
        ... ...
    &lt;/context>
&lt;/daoConfig></pre><br />DAO service:<br />	<br /><pre name="code" class="java">
public class BDMService {
    static DaoManager daoManager = DaoConfig.getDaoManager();
	public List&lt;BDMDto> getBDM(String bdm_type) {
	IBDM bdm = (IBDM) daoManager.getDao(BDM.class);
         ... ...
</pre><br />后来发现是这里写错了<br /><pre name="code" class="java">IBDM bdm = (IBDM) daoManager.getDao(BDM.class);</pre><br />应为<br /><pre name="code" class="java">IBDM bdm = (IBDM) daoManager.getDao(IBDM.class);</pre><br />真是一不小心疏忽了，可能其他人做的时候一样容易疏忽吧。写出来，警记！！！
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/194247#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/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>Mon, 19 May 2008 09:50:44 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/194247</link>
        <guid>http://javajiao.javaeye.com/blog/194247</guid>
      </item>
      <item>
        <title>总结win2003系统无法玩游戏的情况[转]</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/188445" style="color:red;">http://javajiao.javaeye.com/blog/188445</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          为了编程，系统改成了03，可是发现很多XP下的游戏都无法继续了。<br />在网上查询了很多，发现这篇文章不错，粘出来以备以后之需。<br /><br />如果你现在用的是WIN2003 系统(以下简称03系统),那么恭喜你,你的选择是明智的.虽然03系统出来很多年了,但大部分人还是喜欢XP.其实XP存在很多问题.XP只有一个优点:非常漂亮的操作界面.紧此而已.其它功能和性能一塌糊涂.03系统改进了很多.只是这个系统不适合普通用户.<br />硬件加速     默认情况下,03系统没有或者没完全打开显卡的硬件加速,这是导致很多游戏不能运行的关键之一.可以按照以下方法打开硬件加速:桌面上点右键--属性--设置--高级--疑难解答--硬件加速,把滑动拉到最大(左小右大),然后点确定--确定退出.这样硬件加速便打开.说明一点,有些可能硬件加速不在疑难解答选项卡上,你可以到其他几个选项卡找找.<br />驱动程序   注意的是你必须安装最新的显卡驱动.不推荐安装主板光盘自带的驱动.这些都是老的或者垃圾驱动,有些反而会降低性能(我的就是这样).可以去mydrivers.com下载最新的驱动.<br />数据执行保护   另外一个很重要的情况就是:03系统默认情况下打开了数据执行保护.这个也是关键之一.最起码我是知道,打开了这个,卡丁车,CS,魔兽都是没发玩的,一开游戏就自动退出,甚至闪都不闪一下.可以这样关闭数据执行保护.在"我的电脑"上点右键--属性--高级--在"性能"那里点"设置"--选择数据执行保护--选择"只为关键WINDOWS程序和服务提供数据执行保护"--点确定--确定退出.系统提示需要重新启动.这样,你重新启动后这些原本"闪都不闪一下"的游戏便正常了.<br />扣肉平台   如果你是扣肉系统,而且是GMA3000或者同类的显示芯片.这里跟大家说明一点.因为GMA3000的驱动INTEL到现在都还没有发布很适用的驱动,而且有一个版本的驱动有很大的BUG,这会导致在玩CS使用OPENGL渲染的时候,FPS值只有5到15左右.(暂时我只发现这个情况,也是我最关心的).你可以去下载这个驱动.http://drivers.mydrivers.com/download/dir159/d63601.shtml.我目前也是使用的这个。目前我玩CS,用OPENGL模式的FPS值都是100. 需要说明的是:和GF,ATI的垂直同步不一样,在这里,INTEL不将他叫垂直同步,在显卡设置里,你需要设置"翻转策略",翻转策略默认的是"翻转",这个就类似垂直同步了,你需要将翻转策略更改为"位块移动".这样你玩CS的时候,FPS就会跑到100了,尽管你的CRT显示器刷新率是85,尽管你的LCD显示器刷新率是60,都可以跑100的FPS.另外你玩CS的时候,你可能发现FPS值会在40-100之间跳动.人多枪多的时候FPS就低了.这个问题我也困扰了很久,但我想还是跟驱动和显卡的3D设置有关.后来我另外下载安装了OPENGL1.21的驱动,大家可以到这里下载:http://drivers.mydrivers.com/download/dir159/d63601.shtml,好象挺有效果,无论多少人和多少枪都可以稳跑85以上.等INTEL发布更好的GMA3000驱动效果就更好了. 说实在的,GMA3000玩魔兽那才叫一个决绝.毕竟是集成显卡,跟CS不一样的是,你会感觉非常流畅,设置成中高画质,在很多怪和大型场面都不会卡.至少我还没感觉卡过.<br />好象也差不多了.主要就这几个了.如果玩游戏还有问题,那就不是系统问题了.你的检查你的网络情况,游戏自身方面的情况了.
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/188445#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Apr 2008 15:44:54 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/188445</link>
        <guid>http://javajiao.javaeye.com/blog/188445</guid>
      </item>
      <item>
        <title>总结JDBC连接SQLServer的错误Error establishing socket</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/185957" style="color:red;">http://javajiao.javaeye.com/blog/185957</a>&nbsp;
          发表时间: 2008年04月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在用MSSQL连接数据库的过程中，经常会遇见“Error establishing socket.”的错误，大概得错误日志信息如下：<br /><br /><pre name="code" class="sql">
java.sql.SQLException : [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket. 
	at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source) 
	at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source) 
	at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source) 
	at com.microsoft.jdbc.sqlserver.tds.TDSConnection.&lt;init>(Unknown Source) 
	at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source) 
	at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source) 
	at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source) 
	at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source) 
	at java.sql.DriverManager.getConnection( DriverManager.java:523 ) 
	at java.sql.DriverManager.getConnection( DriverManager.java:171 ) 
	at test.SqlServerTest.main( SqlServerTest.java:29 ) 
</pre><br />我在网上查询到问题解决的方式有大概如下　种：<br />一　配置错误<br />    jdbc配置语句为: jdbc:microsoft:sqlserver://server_name:1433<br />其中的sqlserver、server_name和端口号都要看仔细了。<br />二　1433端口问题<br />    可以通过命令“netstat -an”，来查看是否开了１４３３端口，如果列表中没有，要增开端口。<br />    要保持jdbc配置语句（ jdbc:microsoft:sqlserver://server_name:1433）中的端口与数据库传输协议默认的端口相同。<br />MSSQL设置端口号步骤如下： <br />1．  打开企业管理器，依次在控制台根目录 ->Microsoft SQL Servers->SQL Server 组，列出一部分数据库服务器。 <br />2．  右击我们要连接的数据库服务器，选择属性，在常规选项卡点击网络配置弹出新窗口。 <br />3．  在启用的协议区域我们选择 TCP/IP ，点击属性按钮，弹出新窗口。在这个窗口有网络协议默认值设置，一般默认端口是：1433。 如果你在ｕｒｌ中用的端口号与这个不同，就会出现错误。应保持二者相同。<br />三 没打补丁<br />   可以用如下的方式查看MSSQL的版本：<br />打开企业管理器-〉工具-〉SQL查询分析器-〉帮助-〉关于<br />查看MSSQL的详细版本号<br />如果 是  8.00.194  就是还没打补丁<br />       	8.00.760  就是SP3<br />        	8.00.2039 就是SP4<br /> <br />1、下载MSSQL　2000  Service  Pack  3a并安装，SQL请选用混和安装模式！！！  <br />http://www.microsoft.com/downloads/details.aspx?FamilyId=90DCD52C-0488-4E46-AFBF-ACACE5369FA3&displaylang=zh-cn  <br />   解压缩sp3的升级包后,还要点击setup安装.才能成功升级到sp3。   <br />2、下载SQL  Server  2000  Driver  for  JDBC  Service  Pack  3  <br />http://www.microsoft.com/downloads/details.aspx?FamilyId=07287B11-0502-461A-B138-2AA54BFDC03A&displaylang=en <br />四　系统防火墙或者杀毒软件<br />    如果系统开防火墙或者杀毒软件，在有些情况下也可以出现类似的问题。<br />没有遇见过，有人这么说。<br /><br />可能我查询的未必全面,如果你的解决方式不同,可以给我留言,一起完善其解决方法.<br /><br /><br />参考文献：<br />1 http://dev.csdn.net/article/70/70360.shtm<br />2 http://blog.chinaunix.net/u/20532/showart_289640.html<br />3 http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=29250&messageID=175704
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/185957#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/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, 23 Apr 2008 16:42:34 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/185957</link>
        <guid>http://javajiao.javaeye.com/blog/185957</guid>
      </item>
      <item>
        <title>教你怎么做到千杯不醉(男士必看)</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/184411" style="color:red;">http://javajiao.javaeye.com/blog/184411</a>&nbsp;
          发表时间: 2008年04月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          中国酒文化源源流长，什么无酒不成席，酒逢知己千杯少等等，办事更是离不开酒，如果客人没有喝醉，主人会认为没有尽到地主之谊。其实客人累，主人也累，陪酒的人更累。“这酒啊，看起来像水，喝到嘴里辣嘴，喝到肚里闹鬼，走起路来绊腿，半夜起来找水，早上醒来后悔！”但是，这酒又不能不喝，后悔也要喝下去，那么怎么能做到千杯不醉，或者喝完酒能及时醒酒，而不受醉酒之苦呢？ <br /><br />            酒前的准备 <br />    酒能伤肝，这是人人皆知道的，为了尽量减少酒精对胃和肝脏的伤害，减少脂肪肝的发生。酒前的准备工作很重要，这是能保证你在酒桌上千杯不醉的关键因素。在去赴宴之前，在家先吃点东西，让胃里有点东西垫着。那具体吃点什么好呢？一般吃点高蛋白的比较好，例如吃两个鸡蛋，喝点牛奶，豆浆等，因为这些高蛋白的食品在胃中可以和酒精结合，发生反应，减少对酒精的吸收。另外，吃点饼干，糕点等也可以，让胃里有点东西，因为空腹喝酒，酒精在胃内很容易被吸收，从而导致容易醉酒。注意，切忌用咸鱼、香肠、腊肉下酒，因为此类熏腊食品含有大量色素与亚硝胺，与酒精发生反应，不仅伤肝，而且损害口腔与食道粘膜，甚至诱发癌症。 <br />另外，对于经常喝酒或者经常陪酒的人士，可以一试一些古书上记载的方法。如清代无名氏在《调鼎集》载：“<br />饮酒欲不醉者，服硼砂末少许，其饮葛汤，葛丸者效迟”。《千金方》：“七夕日采石菖蒲，末服之，饮酒不醉。” <br /><br />喝酒中的保护 <br />“酒过三循、菜过五味”，这是古代留下来的酒场谚语，这也从另外一方面说明了，喝酒时吃菜的重要性。在喝酒前，尽量先吃点菜，然后再喝酒，其原理和前面说的一样。严禁空腹喝酒，既容易醉，又容易伤胃。 <br /><br />酒后的醒酒措施 <br />喝酒后，头晕，头疼，呕吐，甚至人事不醒，醉酒者要经受很大的痛苦，这个时候需要尽快醒酒，以减少醉酒带来的痛苦，并防止有可能出现的更大的伤害。在这里教你几招醒酒的方法，简单易行，饮酒者可以根据自己的情况，选择适合自己的方法，不妨一试。 <br />	饮服白萝卜汁：生白萝卜,洗净榨汁,稍加热服下,每次一茶杯,10分钟一次,三次可解去酒气。 <br />	吃大白菜心：取出大白菜心切丝,一个不够取两,加少量白糖和白醋拌匀后腌渍三五分钟服下,此法很快解酒。 <br />	服芹菜汁：鲜芹菜洗净切碎榨汁,当茶喝,连续喝三次(隔5分钟),此对酒后头痛脑胀脸红有特效。 <br />	饮鲜桔皮水：2两鲜桔皮加1斤水煮沸，再加入少量食盐摇匀后当茶喝，一次一茶杯，5分钟再饮，三次见效。 <br />	喝绿豆汁：绿豆2两，加水煮熟后饮，连汤带豆.如将绿豆捣碎用开水冲服有解酒效果。 <br />另外怎么来减少醉酒后引起的头疼，头晕，反胃等症状呢？下面也介绍几种食物，这是美国国家头痛研究基金会的研究人员发现，大家不妨做一个参考： <br />	蜂蜜水治酒后头痛：蜂蜜中含有一种特殊的果糖，可以促进酒精的分解吸收，减轻头痛症状，尤其是红酒引起的头痛。另外，蜂蜜还有催眠作用，能使人很快入睡，第二天起床后也不会头痛。 <br />	西红柿汁治酒后头晕。西红柿汁也富含特殊果糖，能帮助促进酒精分解，一次饮用300毫升以上，能使酒后头晕感逐渐消失。饮用前若加入少量食盐，还有助于稳定情绪。 <br />	新鲜葡萄治酒后反胃、恶心。如果在饮酒前吃，还能有效预防醉酒。 <br />	西瓜汁治酒后全身发热。西瓜具可以清热去火，能加速酒精从尿液中排出。 <br />	柚子消除口中酒气。柚肉蘸白糖吃，对消除酒后口腔中的酒气有很大帮助。 <br />	芹菜汁治酒后胃肠不适、颜面发红。这是因为芹菜中含有丰富的B族维生素，能分解酒精。 <br />	酸奶治酒后烦躁。酸奶能保护胃黏膜、延缓酒精吸收，其中钙含量丰富，对缓解酒后烦躁尤其有效。 <br />	香蕉治酒后心悸、胸闷。酒后吃1—3根香蕉，能增加血糖浓度，降低酒精在血液中的比例，达到解酒目的。同时，它还能减轻心悸症状、消除胸口郁闷。 <br />	橄榄治酒后厌食。橄榄自古以来就是醒酒、清胃热、促食欲的“良药”，既可直接食用，也可加冰糖炖服。 <br />醒酒的药物<br />目前市场上面出现不少醒酒的药物,例如海王金樽,“客格博”胶囊,陪酒师”解酒茶，还有一种美国进口的ZEO等等，那么这些药物真的有效吗?说到底,所谓的醒酒药物无非都是通过以下两个途径来达到醒酒的目的的:一是能迅速分解究竟,使酒精失去功效，或者阻断酒精在胃肠中的吸收,减少酒精进入血液的量,这样自然也可以达到醒酒的目的。但是,不管什么醒酒药物,也不管其功效如何神奇,都是有一定副作用的,不能常吃,尤其对那些经常陪酒或者经常需要应酬的人,更是如此。一般情况下不要吃，因为即使你吃药了，酒精还是进入了体内，对肝脏造成伤害，最好的是不喝，必须要喝的时候，也先用别的方法来醒酒。 <br /><br />醉酒后的照顾 <br />醉酒者自己往往不知道自己的行为，无法来自己照顾自己，那么作为亲人或者朋友就必须照顾好，要注意一下几个方面： <br />1.	醉酒者如行走不稳，应该注意不要让其跌倒，防止跌打损伤，或者磕碰头部等重要部位。 <br />2.	注意保暖，因为醉酒者身体机能下降，这个时候容易受凉。让醉酒者的头歪向一侧，防止其呕吐，如果有呕吐，要清除其口腔内的呕吐物，防止进入气管，导致窒息或者肺部感染。 <br />3.	醉酒较严重者，并且无法服用醒酒品的，则应该使其将胃内容物吐出来，可以用手指，棉棒等插入其咽喉部位来使其呕吐。必要时还可以用温水或2%碳酸氢钠液洗胃。更严重者则赶紧拨打120或者马上送医院急救。
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/184411#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 19 Apr 2008 14:06:59 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/184411</link>
        <guid>http://javajiao.javaeye.com/blog/184411</guid>
      </item>
      <item>
        <title>日历控件jscalendar-1.0中文解决方法</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/184014" style="color:red;">http://javajiao.javaeye.com/blog/184014</a>&nbsp;
          发表时间: 2008年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          默认情况下jscalendar-1.0包中所附的中文语言文件（calendar-cn_utf8.js）不支持中文是由于没有设置每周的开始日期<br />修改方法是在语言文件calendar-cn_utf8.js 开始部分加上<br /><pre name="code" class="js">Calendar._FD = 0;</pre><br />修改后的文件如下：<br /><pre name="code" class="js">
Calendar._FD = 0;
// full day names exp:星期日
Calendar._DN = new Array
("\u5468\u65e5",//\u5468\u65e5
 "\u5468\u4e00",//\u5468\u4e00
 "\u5468\u4e8c",//\u5468\u4e8c
 "\u5468\u4e09",//\u5468\u4e09
 "\u5468\u56db",//\u5468\u56db
 "\u5468\u4e94",//\u5468\u4e94
 "\u5468\u516d",//\u5468\u516d
 "\u5468\u65e5");//\u5468\u65e5
// short day names　exp:日
Calendar._SDN = new Array
("\u5468\u65e5",
 "\u5468\u4e00",
 "\u5468\u4e8c",
 "\u5468\u4e09",
 "\u5468\u56db",
 "\u5468\u4e94",
 "\u5468\u516d",
 "\u5468\u65e5");
// full month names
Calendar._MN = new Array
("\u4e00\u6708",
 "\u4e8c\u6708",
 "\u4e09\u6708",
 "\u56db\u6708",
 "\u4e94\u6708",
 "\u516d\u6708",
 "\u4e03\u6708",
 "\u516b\u6708",
 "\u4e5d\u6708",
 "\u5341\u6708",
 "\u5341\u4e00\u6708",
 "\u5341\u4e8c\u6708");
// short month names
Calendar._SMN = new Array
("\u4e00\u6708",
 "\u4e8c\u6708",
 "\u4e09\u6708",
 "\u56db\u6708",
 "\u4e94\u6708",
 "\u516d\u6708",
 "\u4e03\u6708",
 "\u516b\u6708",
 "\u4e5d\u6708",
 "\u5341\u6708",
 "\u5341\u4e00\u6708",
 "\u5341\u4e8c\u6708");
// tooltips
Calendar._TT = {};
Calendar._TT["INFO"] = "\u5173\u4e8e";
Calendar._TT["ABOUT"] =
"   DHTML \u65e5\u8d77/\u65f6\u95f4\u9009\u62e9\u63a7\u4ef6\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
"For latest version visit: \u6700\u65b0\u7248\u672c\u8bf7\u767b\u9646http://www.dynarch.com/projects/calendar/\u5bdf\u770b\n" +
"\u9075\u5faaGNU LGPL.  \u7ec6\u8282\u53c2\u9605 http://gnu.org/licenses/lgpl.html" +
"\n\n" +
"\u65e5\u671f\u9009\u62e9:\n" +
"- \u70b9\u51fb\xab(\xbb)\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e00\u5e74\u5ea6.\n" +
"- \u70b9\u51fb" + String.fromCharCode(0x2039) + "(" + String.fromCharCode(0x203a) + ")\u6309\u94ae\u9009\u62e9\u4e0a(\u4e0b)\u4e2a\u6708\u4efd.\n" +
"- \u957f\u65f6\u95f4\u6309\u7740\u6309\u94ae\u5c06\u51fa\u73b0\u66f4\u591a\u9009\u62e9\u9879.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"\u65f6\u95f4\u9009\u62e9:\n" +
"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u589e\u52a0\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\n" +
"-\u5728\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2)\u4e0a\u6309\u4f4fShift\u952e\u540e\u5355\u51fb\u9f20\u6807\u5de6\u952e\u6765\u51cf\u5c11\u5f53\u524d\u65f6\u95f4\u90e8\u5206(\u5206\u6216\u8005\u79d2).";
Calendar._TT["PREV_YEAR"] = "\u4e0a\u4e00\u5e74";
Calendar._TT["PREV_MONTH"] = "\u4e0a\u4e2a\u6708";
Calendar._TT["GO_TODAY"] = "\u5230\u4eca\u5929";
Calendar._TT["NEXT_MONTH"] = "\u4e0b\u4e2a\u6708";
Calendar._TT["NEXT_YEAR"] = "\u4e0b\u4e00\u5e74";
Calendar._TT["SEL_DATE"] = "\u9009\u62e9\u65e5\u671f";
Calendar._TT["DRAG_TO_MOVE"] = "\u62d6\u52a8";
Calendar._TT["PART_TODAY"] = " (\u4eca\u5929)";
// the following is to inform that "%s" is to be the first day of week
// %s will be replaced with the day name.
Calendar._TT["DAY_FIRST"] = "%s\u4e3a\u8fd9\u5468\u7684\u7b2c\u4e00\u5929";
// This may be locale-dependent.  It specifies the week-end days, as an array
// of comma-separated numbers.  The numbers are from 0 to 6: 0 means Sunday, 1
// means Monday, etc.
Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "\u5173\u95ed";
Calendar._TT["TODAY"] = "\u4eca\u5929";
Calendar._TT["TIME_PART"] = "(\u6309\u7740Shift\u952e)\u5355\u51fb\u6216\u62d6\u52a8\u6539\u53d8\u503c";
// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e\u65e5";
Calendar._TT["WK"] = "\u5468";
Calendar._TT["TIME"] = "\u65f6\u95f4:";
</pre><br /><br />同时在用到该控件的页面必须加上<br /><pre name="code" class="js">
&lt;link href="css文件" type="text/css" rel="stylesheet" />
</pre><br /><br />附：今天在另外一个JSP页面用到的时候，出现了弹出的面板不显示任何日期的情况，检查了N遍，发现与好用的页面代码相同，但是尝试了多种方法后问题依然存在。<br />最后将日期js文件在页面调用的路径更改了一下，这样当然找不到了，报错；然后再改回来，这下竟然好用了。<br />具体什么原因我也不知道。经常变动JSP页面内容的时候有时我们会发现，其实页面的语句是正确的，但是在Ecpipse中仍然显示有问题，没有办法你必须将这个语句改错误，然后保存，之后再改回来，再保存，语句没有问题多数情况问题会解决。<br />好多人都遇见过这样的问题，为甚么这么解决它们也不知道具体原因，大概JSP页面被编译后驻留在内存中，和这个有关吧。
          <br/>
          <span style="color:red;">
            <a href="http://javajiao.javaeye.com/blog/184014#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><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Apr 2008 10:23:58 +0800</pubDate>
        <link>http://javajiao.javaeye.com/blog/184014</link>
        <guid>http://javajiao.javaeye.com/blog/184014</guid>
      </item>
      <item>
        <title>教堂与集市（转载）魔法大熔炉</title>
        <author>javajiao</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javajiao.javaeye.com">javajiao</a>&nbsp;
          链接：<a href="http://javajiao.javaeye.com/blog/182456" style="color:red;">http://javajiao.javaeye.com/blog/182456</a>&nbsp;
          发表时间: 2008年04月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          第四章 魔法大锅炉 <br /><br /><br />前言 ———————————————— <br /><br />　　本文分析了正在不断发展的开放源代码现象的经济基础。我们首先推翻了一些流行的关于软件开发中投资和软件价格结构的神话，给出了一个关于开放源代码协作稳定性的游戏规则分析。我们给出了九种开放源代码开发的可发展模型，其中两种是不盈利的，七种是盈利的。接着我们发展了一种定性的理论，说明什么时候封闭代码在经济上是合理的。然后我们考察了当前市场上发明的几种新颖的开放源代码开发的盈利方法学，包括赞助系统和任务市场的引入。我们最后做出了结论，试着对将来做了一些预测。 <br /><br /><br />目录 <br /><br />[编辑] ==============<br />1. 近乎魔法 2. 超越高手的天赋 3. 制造业的错觉 4. “信息需要免费”的神话 5. 驳斥公用悲剧说 6. 封闭源码的原因 7. 使用价值集资模型 7.1 Apache案例：成本分担 7.2 Cisco案例：风险分散 8. 为何销售价值存在问题 9. 间接的销售价值模型 9.1 失败的领导者/市场定位者 9.2 糖霜策略 9.3 奉送食谱，开办饭店 9.4 衍生物 9.5 现在收费，未来免费 9.6 软件免费，卖标准 9.7 软件免费，卖内容 10. 何时开放，何时封闭 10.1 靠什么盈利？ 10.2 他们如何互相作用？ 10.3 Doom：一个学习的案例 10.4 知道何时该放手 11. 开放原代码的商业运作 12. 成功的复制 13. 开放研发和二次开发 14. 由此及彼 15. 结论：自由软件变革之后 16. 参考文献和致谢 17. 附录：为何封闭驱动程序损失卖主金钱 18. 本文档修订记录 <br /><br /><br />1. 近乎魔法 <br /><br />　　在威尔士的神话中，Ceridwen女神有一口巨大的锅，当女神念动只有她自己知道的咒语时，那口锅就变出奇妙的食物。在现代科学中， Buckminster Fuller提出了一种“短暂化”的概念，认为在早期的物理资源投资越来越多的被信息内容所代替的情况下，技术会变得越来越有效和廉价。Arthur C. Clarke指出“任何足够高级的技术都与魔法别无二致”，从而把二者联系起来。对很多人来说，开放源代码社区的成功看来就象难以置信的魔法。高质量的软件变得免费，在充满竞争而且资源稀缺的现实世界，这似乎不能继续下去，但是它进行的还不错。要点在哪？Ceridwen的大锅只是一个小诡计吗？如果不是，在这种情况下，“短暂化”是怎么工作的——女神究竟念动了什么咒语？ <br /><br /><br />2. 超越高手的才能 <br /><br />　　开放源代码文化的经验肯定使许多学习过软件开发的人们感到困惑。“大教堂和市集”一文描述了分散协作软件开发是怎样有效的推翻了Brooks 的定律，产生了使一个独立的工程具有空前可靠性和质量的开发方式。“开拓智域”一文揭示了市集模式开发风格中的社会动力学，这应该用人类学家所谓的“赠与文化”的术语而不是常规的交换经济术语来理解，在这种文化中，成员在做出贡献大小方面竞争。本文中我们将开始推翻一些流行的关于软件生产经济学的神话；然后对“大教堂和市集”和“开拓智域”两篇文章进行经济学、搏弈论和商业模型领域的分析，发展一种新的概念工具，来理解开放源代码开发者的赠与文化在交换经济里也可以继续下去的理由。 <br /><br />　　先不岔开话题，沿着上面的线索分析，我们需要抛弃（至少要暂时忽略）在“赠于文化”层次上的分析。“开拓智域”中赠于文化的存在是基于生存所需要的物质资料极大的丰富，以至于社会交换已经不很重要的环境里；这种分析虽然在纯粹的精神世界中非常有说服力，但针对现实生活中大多数开放源码开发者实际所处的综合经济环境来说，这种解释则显得有些无力。对许多人来说，社会交换仍然是他们努力工作的驱动力，但是已经渐渐失去了吸引力。必须在资源匮乏的经济学中为他们的行为找到足够的理由，才能使这些行为在物质资料丰富的赠于文化中得以立足。 <br /><br />　　因此，我们现在将（从整个资源匮乏经济学领域）思考维持开放源码开发的协作和交换模式。在分析的过程中，通过深入剖析和列举实例，我们同时也就回答了那个非常实际的问题：“我如何通过开放源码来赚钱？”。不过，这个问题是根据与软件开发本质相悖的普遍软件开发经济模型而提出的，首先我们需要展示一下隐藏在这个问题之后的许多思维误区。 <br /><br />　　（在展开分析之前还有最后一个需要说明的是：本文中对开放源码开发模式的讨论和提倡，不能被理解为对封闭源码模式的彻底否定，也没有反对现有的软件知识产权体系，更不是对“共享”的无私呼吁。虽然开发源码开发团体中的一些人仍然热衷于这些讨论，但从“大教堂和市集”发表以来，经验已经清楚的表明这些争论没有必要的。重要的是开放源码的开发模式和经济效益能够制造出质量更好、可靠性更高、成本更低、可以选择的方案更多的好产品来。） <br /><br /><br />3. 制造业的错觉 <br /><br />　　我们需要注意的是计算机程序和其他类型的工具和资本货物一样，都有两种经济价值：使用价值和销售价值。 <br /><br />　　程序的使用价值就是它作为工具的经济价值；销售价值是它作为作为商品的价值。（用经济学的专业说法，销售价值是产品最终价值，使用价值是产品中间价值） <br /><br />　　当大多数人说到软件产业时，总是按照拥有下列特性的“工厂模式”经济来分析： <br /><br />　　1. 大多数开发者的劳动由销售价值的收入来支付　　2. 软件的销售价值与开发成本（例如，功能复制所需的资源花费）和使用价值成一定比例 <br /><br />　　换句话说，人们有很强的思维惯性去假定软件具有标准工业品的特性。但是这两个假设都错了。 <br /><br />　　首先，编写用于出售的代码只是编程行业的冰山一角。在微机世界前期，大家普遍认为世界上90%的代码在银行和保险公司内部编写。这虽然已经不再是事实——现在其他行业也越来越加大了软件开发的力度，金融行业所占的比例从而下降——但是短期内我们仍将会看到大约95%的代码是公司内部编写。 <br /><br />　　这些代码包括大多数为中等或大规模公司所定制的MIS，金融和数据库软件。包括象设备驱动这样的专业技术代码（几乎没有人靠卖设备驱动赚钱，这一点我们将会在后面讨论）；包括日益增长的数控机器的各种嵌入式代码——从机械工具和喷气客机、汽车、微波炉甚至烤面包炉。 <br /><br />　　大多数这种内部代码与其环境集成在一起，复制和再利用十分困难（不论环境是商业办公室的程序套件还是联合收割机的加油系统）。因而一旦环境变化，需要做许多工作使软件与之同步。 <br /><br />　　这种工作称为“维护”。任何软件工程师或系统分析员都会告诉你这就是程序员的大部分工资的来源（超过75%）。因此，大多数程序员工时花费在编写和维护更本不能卖的内部代码上（当然大多数程序员以此为生）——读者们也许乐意去查查报纸上的“诚聘信息”部分的编程工作列表检验一下。 <br /><br />　　我强烈的希望读者试试浏览本地报纸的招聘信息，看看编程，数据处理，和包含软件开发工作的软件工程项目等等。将这些工作按照其目的是使用还是销售进行分类，你将深受启发。 <br /><br />　　很明显，即使为“销售”定义了最大范围，20人中还是至少有19个由使用价值资助（作为产品中间价值）。这就是为什么我们认为软件工业中以销售价值驱动的部分只占5%原因。注意，本文中其他部分的分析并非完全倚赖于这个数；即使这个数字达到15%甚至20%，在经济上的推论结果仍然八九不离十。 <br /><br />　　（当我在技术讨论会上演讲时，我经常由讨论两个问题开始：听众为写软件付多少钱，和有多少薪水是依赖于软件的销售价值的。第一个问题应者甚众，而第二个问题则寥寥无几，大而且量的听众对这个问题十分诧异） <br /><br />　　其次，经过对实际客户行为的调查，软件销售价值与其开发和升级成本相关的理论很容易被推翻。开发和升级成本相关的商品（对打折之前来说）占很大比例——食品，汽车，机械工具，甚至有许多无形的产品——例如，音乐、地图或数据库资料的复制权，这产品在生产者倒闭后仍然能保持甚至增加其销售价值。 <br /><br />　　与上述形成鲜明对比的是。当一个软件产品生产者歇业时（或者如果产品开发被终止），几乎没有客户愿意为其花钱，而不管它理论上的使用价值或同样功能产品的开发费用有多高。（要检验这个说法，去你附近的软件商店打折柜台看看吧：-）） <br /><br />　　在生产者失败时，零售商的行为很有启示。他们知道一些生产者不知道的东东。他们深知：客户愿意花费的价格在很大程度上由卖主未来可以提供的服务决定。（这里的“服务”被广义的理解为完善，升级和后续产品） <br /><br />　　换句话说，软件主要是一个稳定的服务性行业，认为它是制造性行业是没有理由的错觉。 <br /><br />　　另外，检查一下我们为什么会有这些惯性思维也很有益处。它们也许来自于软件生产者大力宣传的销售类产品，这些是的软件业一小部分，也是宣传的唯一的一部分，大多数明显和重头的广告宣传的产品是昙花一现的短期产品，就像游戏，他们几乎不需要提供后续服务（合同规定的除外）。 <br /><br />　　另外，值得注意的是，制造业错觉所倡导的价格体系事实上会越过保持开发预算不崩溃的底线。既然（像一般认为地）超过典型软件产品周期花费的75%在维护，调试和扩展上，那么通常的那种只采用高额售价，极低相关服务费用的定价策略，只会导致各方面都差的服务。 <br /><br />　　用户的损失在于，即使软件是服务性行业，工厂模式促使生产者减低服务质量。如果生产者靠出卖比特挣钱，大量的努力是制造比特并将它们推销出门；帮助服务部分，因为不是利润的中心，将会成为只付出的一点点努力和资源，为了避免激怒用户所设的垃圾站。 <br /><br />　　另一方面是大多数生产者使用这种工厂模式会导致长远的失败。为满足无限的售后服务和技术支持需要的固定价格产品提供资金，只有在那些膨胀足够迅速的市场里——其过去的销售和未来的收入能够满足支持和生存周期的花费——才能存活。一旦市场成熟和销量下降，维持生计，大多数生产者除了消减单独产品的开支之外没有别的选择。 <br /><br />　　不管是直接（废止产品）还是间接（支持很差），都会把客户推给竞争对手（因为这些行为损害了依附于服务产品的期望值）。短期来看，可以通过将修正过bug的版本发布为新产品避免这个陷阱。而长远来看，避免陷阱的唯一可能是对行业进行有效的市场垄断。最终，只有唯一的幸存者。 <br /><br />　　事实上，我们一再的看到这种缺乏支持的模式害死一些市场环境中很强大的竞争者（这种模式对那些那些经历过计算机发展史幸存下来的人尤其深刻，包括个人操作系统，字处理，通用财务程序或商业软件）。这种不正确的动机来自于工厂模式导致的赢家通吃的态势，而且最后即使你是赢家的客户也会遭殃。 <br /><br />　　如果不是工厂模式，那又是什么？为了有效的控制软件生存周期真实的花费体系（同时在经济学和非正式场合的意义上的“有效”），我们需要一个建立于服务合同，合约，和买卖双方持续交易基础上的价格体系。所以，在以效益为目的的自由市场条件下，我们能管窥大多数成熟的软件工业最终遵循的价格体系。 <br /><br />　　为什么说开放源码软件的地位日益增长，不仅仅是技术，也是经济上对主流秩序的挑战？上述内容给我们一些启示。软件开发的“free”，会将我们推向以服务支配的世界，同时暴露出一直依赖销售封闭源码产品的方式有多脆弱。 <br /><br />　　“free”的概念很容易被误解为其他含义。降低产品花费会导致支撑软件业的整个基础投入增长，而不是降低。只有汽车的价格降低时，汽车的需求才会上升——这也是为什么在开放源码世界中，另外那5%的根据销售价值付酬的程序员不好受的原因。在free的变革中，有损失的不是程序员而是那些没看清形势而将赌注押在封闭源码策略上的投资者。 <br /><br /><br />4. “信息应该免费”的神话 <br /><br />　　与工厂模式错觉相呼应的是，思考开放源码经济的人们还常常被另外一个神话搞糊涂。那就是“信息应该免费”。这常常以数字信息产品的复制边际成本几乎为零来解释，这个解释暗示了其价格似乎就应该为零。 <br /><br />　　其实你只要考虑一下诸如藏宝图，瑞士银行的账号口令，或计算机服务的确认口令，等等信息的价值，就很容易看破这个神话。即使这些确认信息可以不用任何花费的复制，但是被其确认的对象无法复制。也就是说，非零的边缘成本由被那些确认信息继承下来。 <br /><br />　　提到这个神话的主要目的是声明它与开放源码的经济价值的讨论无关；就象我们在后面将会看到的，即使假设软件是符合制造业产品（非零）价值结构，仍是如此。所以我们没必要钻软件是否应该免费的牛角尖。 <br /><br /><br />5. 驳斥公用悲剧说 <br /><br />　　质疑主流模式，看看我们是否能建立另一种模式——对是支撑起开放源码协作的原 因作出有力的经济学解释。 <br /><br />　　这个问题需要从两个不同的方面考查。一个方面是我们要解释那些为开放源码作出贡献的人士的个体行为；另一方面，我们需要理解那种支撑象Linux和Apache这样的开放源码项目的经济力量。 <br /><br />　　Hardin的著名寓言告诉我们：设想一个乡村农夫们拥有一片公用绿地。他们在那里放牧牲畜。但是放牧使公用性退化，撕裂草皮，留下泥泞，很难恢复。如果没有对分配放牧的权利达成协议（或约定）以防止过度放牧；所有牧主都还会赞成尽可能快的增加牲畜数量，以便在公共绿地变成泥潭之前榨取最大的利润。 <br /><br />　　大多数人使用象这样的直觉的合作模式。这事实上并不是对开放源码——他们是（供不应求的）自由骑士，而不是（被过度使用的）过剩的公共货物——经济问题的正确判断，不过，我在大多数未充分考虑的反对声后面都听到过类似的看法。 <br /><br />　　公共拥有的悲剧预言只会出现三种结果。一种是泥潭；一种是为了村民的利益，强制性的使用某种分配协定（共产主义的解决方案）；第三种是公用被打破，村民各筑藩篱，保护自己的一小块草地（私有制的解决方案）。 <br /><br />　　当人们本能的的将这种模式应用于开放源码合作时，因此预计它只有很不稳定的短暂的半衰期。因为没有明显的方法去强制在互联网上工作的程序员执行工作时间分配策略，这种模式就断言公用将会打破，结果是出现各种各样的封闭代码软件和反馈给公用的工作量迅速减少。 <br /><br />　　事实上，经验清楚的显示出了与之相反的趋势。开放源码开发的广度和深度（由Matalab和freshmeat.net的每日宣布的数据统计）在稳定增加。很明显，这些都得出“公用悲剧”模式无法描述事态的发展。 <br /><br />　　答案的一部分正是建立在软件使用并不降低其价值的事实基础之上。实际上，对开放源码软件来说，当用户被其修正和特性（代码补丁）把握之后，软件的广泛使用还会增加其价值。公用悲剧被颠覆了，越放牧，草长得越高。 <br /><br />　　答案的另一部分是基于很难收取那些为公用源码基础所作的小补丁的市场价值。假设我为一个恼人的bug写了个修正，而且有人认为这个修正值钱；我如何才能从那些人手里拿到钱？对于这种小额的，通常也是适当的付款，常规的付费体系如此昂贵竟成为真正的问题。 <br /><br />　　比起价钱不仅仅很难收取，也许如何定价还要难得多。让我们想一想，假设互联网上已经拥有理论上完美的小额付费系统——即安全，方便，又不需要更多手续费。而你写了个补丁叫做“Linux内核的某某修正”。你该要价多少？在潜在购买者还没看到补丁时，他们又该如何判断值不值得为它付费呢？ <br /><br />　　我们的问题就像F.A.Hayek的“计算问题”在哈哈镜中的变形——它就象个超市，即要估价补丁的功能值多少，又要相信定价是合理的以促进交易。 <br /><br />　　不幸的是，超市方式有一系列的不足，所以补丁的作者——打补丁的黑客有两种选择：躺在补丁上收钱，或免费扔出去。第一种选择将一无所获。第二种也可能如此，不过或者它会促使其他人提供互惠的给予，以解决上面那位黑客所头疼的问题。第二种明显无私的选择，在这种游戏情况中，竞然事实上是自私的。 <br /><br />　　在分析这种合作时，自由软件的开发所面临的问题会很重要（他们可能会工作在清贫，或没有足够的回报的情况下），这并不是由最终用户的数量决定的。开放源码项目的复杂性和沟通所带来的成本几乎完全和参与的开发者的数量成函数关系；拥有更多的几乎从不看源码的最终用户对此似乎没有任何益处。这只会增加在项目邮件列表中无聊问题出现频率，但是建立一个相关的常用问题列表，不理睬那些显然不读FAQ的人（事实上这已经是通用做法），可以很容易解决这个问题。 <br /><br />　　开放源码软件的真正最重要的自由软件开发问题是提交补丁功能时的磨合成本。可能的贡献者在声望上小有收获（见《开拓智域》一文），而没有金钱上的补偿，想着“根本不值得提交这个修订，因为我不得不打补丁，写修改记录，在FSF任务文件上署名...”。因为这个原因，拥有大量贡献者（其次才是成功）的项目很强壮。与之相反的是，每个有许多相互有制约关系的项目都需要有从始到终的贡献者。这种磨合成本就像政治一样呆板。总之，自由软件项目本身可以向你解释为何松散，无组织的Linux文化，比紧密组织且集中管理的BSD项目的努力，更能吸引合作能量的意向；以及为何自由软件基金会，也在Linux 崛起时重要性相对的减弱。 <br /><br />　　这条路不管走多远都是好的。但是，这只是在黑客写了补丁并公布了这个补丁后的事后诸葛式解释。我们需要的另一半答案是对为何JRH最初会写这个补丁，而不是为拥有销售回报的封闭源码程序工作。作出经济解释。到底什么商业模式创造了开放源码开发繁荣发展的环境呢？ <br /><br /><br />6. 封闭源码的原因 <br /><br />　　在给开放源码经营模式分类之前，我们应该先大致地考虑一下封闭的代价。当我们封闭源码时，我们究竟在保护什么？ <br /><br />　　比方说你雇了某人来编写和组织一个（不妨说）为你的生意专用的结算软件，那么和开放源码比起来，封闭源码一点也不会有助于解决问题。如果你想封闭源码，唯一合理的理由就是你想把这个软件卖给别人，或者不让你的竞争者使用它。 <br /><br />　　比较明显的原因是你在保护销售价值，但是对95%的供内部使用的软件来说这没意义。那么封闭还有别的什么好处吗？ <br /><br />　　第二个原因（保持竞争优势）还有待检验。假如说你把那个结算软件开放源码了，它流行起来，并且从社会上得到了改进。现在，你的竞争者也开始使用它了，他没有花开发费用就得到了好处，而且影响了你的生意。这是不是一种反对开放源码的理由呢？ <br /><br />　　可能是——也可能不是。真正的问题在于你从分散开发负担中得到的好处是否多于由那些不劳而获的人带来的竞争损失。许多人倾向于为这类交易作苍白的辩解，方法是：（a）避而不谈从额外的开发帮助中得到的功能上的改进。（b）不认为开发费用是降低了，而是假定你无论如何也是要承担这些开发费用的，所以把它们作为开放源码（如果你这么选择的话）的代价是错误的。 <br /><br />　　还有别的许多封闭源码的根本就是荒谬的理由。举例说，你可能误以为封闭源码可以使你的商用系统更加安全，不容易被破解或闯入。如果是这样，我建议你立刻找一个密码专家来诊断一下你的系统。真正的猜疑心很重的人都知道不能相信封闭源码程序的安全性，因为这是他们是从惨痛的教训中学到的。安全性是可靠性的一个方面；只有那些被彻底检查过的算法和代码实现才可能被相信是安全的。 <br /><br /><br />7.使用价值集资模型 <br /><br />　　使用价值与销售价值之间的差别让我们注意到的一个基本事实是只有销售价值本身受到了来自从封闭原码到开放原码这个转变的威胁；使用价值并没有。 <br /><br />　　如果使用价值，而不是交换价值，的确是软件发展的根本驱动力；而且开放原代码的发展的确是比原代码封闭要更加有影响力和更加有效率，那么我们应该期待着去寻找一种环境，在这种环境中光是使用价值已能够完全地促使开放原代码向前发展。 <br /><br />　　实际上，这样的几个环境模型并不难以找到。在这样的模型中，开放原代码的全职开发者的生存完全可以由（开放原代码的）使用价值来实现。 <br /><br />　　7.1 Aapache的个案：（价值分享） <br /><br />　　假如你在为一个拥有高效性高可靠性网络服务器的商业公司服务。也许这个服务器是用来为电子商务服务的，也许是作为一个出售广告的高可视性的媒体输出装置，也许只是用来构建一个门户站点。你需要一天7小时的在线时间，你需要速度，还有规范性。 <br /><br />　　那么你该如何做呢？这里有些基本的策略可以供你参考： <br /><br />　　购买一个私有的网络服务器，这样，你是在冒险相信卖方的宣传与你的需求是一致的，你在冒险相信卖方的技术竞争力能给提供完善的保障。即使假设这两个方面是有保障的，网络服务器本身也会由于缺乏规范的服务而出现问题。你只能通过卖方的经过挑选提供的几种工具来维护的你的服务器。这种购买私有的服务器的路子并非一个很大众化的方法！ <br /><br />　　自己做一个！做一个自己的网络服务器在目前还是不可忽略的一种调剂办法；网络服务器并不太复杂，当然比浏览器要简单。一个专门用途的网络服务器可以做得功能专一但很好用。走这条路的话，你能得到你所需要的各种特性和自己的规范，尽管在其升级的过程中你要付出很多。或许你的公司在你离开或退休后，还会发现这个服务器有了这样或那样的问题。 <br /><br />　　参加Apache小组！Apache服务器是有一个通过Internet交流的小组写出来的——小组成员都是系统管理员，他们相信比较明智的做法是将他们的能力集合起来去写，并提高一个单一方向的代码集而不是去花费时间各自同时写完全不相关的代码。这样做的结果是他们能够同时发挥“自己做一个”和大范围大规模测试代码的优势。 <br /><br />　　选择Apache小组的优势很明显。到底有多明显，可以根据Netcraft的每周回顾来判断一下。Netcraft上说Apache服务器从其诞生起一直在稳定地夺取其他私有服务器的市场份额。1999年6月，Apache的各种版本占有了61%的市场份额&lt;http: //www.netcraft.com/survey>；——没有合法的拥有者，没有组织机构，也根本没有合同制约的组织形式在背后操纵。 <br /><br />　　总的说起来，Apache的故事提供了一个模式：软件使用者通过支持开放原代码计划而发现了这个模式，他们发现这样做能以最小的代价给他们带来越来越好的软件，比其他任何方法都要有效。 <br /><br />　　7.2 Cisco的个案：风险均摊 <br /><br />　　一些年以前，两个Cisco（网络产品制造厂家）的程序员被分配来写一个分布式的打印系统的程式代码用做Cisco的合作网络的应用。这个项目的挑战性很大。这个系统要使任意一个用户能在这个网络上的任意一台打印机上打印东西（而用户和打印机可能只是隔壁或者相隔几千公里），当打印机没有纸了或其他紧急情况系统要能够将任务导向另一台附近的打印机。系统还要能够将这一个突发时间报告给打印机管理员。 <br /><br />　　他们两个对Unix上的打印软件做了一些很不错的修改，加上一些包的原语言，就做成了那项工作，但接着问题就来了。 <br /><br />　　问题是两个程序员都不愿意在Cisco永远呆下去。结果两名程序员都将离开，而软件也会无人维护而“腐烂”（就是无法满足实际应用中不断变化的要求而失去其应用）。没有任何一个人愿意看到这样的情况在他自己或工作上发生，那两个程序员也认为他们已经做了Cisco公司要求他们做的事情，其他的问题已经不是他们的工作范围了。 <br /><br />　　于是他们跑到他们的经理那里要求将这个打印软件的源代码开放。他们认为这样的话Cisco不仅不会失去什么反而会得到更多。通过协作鼓励用户和软件开发合作者的组织的发展，Cisco能够弥补因为软件原创人员的离开所带来的损失。 <br /><br />　　Cisco的故事引出另一个模式：源代码开放使开发一个软件的风险被众多协作者分摊了而且投资分花费很小。所有的团体都发现原代码的开放，以及一个成员各自独立却互相协作的社区的存在将提供一个无风险的开发环境，而且这个环境是有商业价值的——它能够自己赚钱养活自己！ <br /><br /><br />8. 为何销售价值存在问题 <br /><br />　　开放源码使得直接获取软件销售利润非常困难。困难并不是来自技术方面的，因为源代码和可执行代码一样易于拷贝，并且版权法和许可证法的约束不同使得通过开放源码软件来获取销售利润比封闭源码软件难。 <br /><br />　　真正的困难来自维护开放源码发展的许可证本身。因为三个相互推动的原因，大多数的开放源码许可证禁止对用户使用、分发、修改软件的权利进行限制，以此避免有人利用开放源码软件牟取直接利润。为了更好的理解这些原因，我们有必要对这些许可证所涉及的社会背景——黑客文化（可以访问以下网址： http://www.tuxedo.org/~esr/faqs/hacker-howto.html>）做一番探讨。 <br /><br />　　原因与对市场的敌视无关，虽然这样的误解在黑客圈外至今广为流传。不排除有小部分的黑客确实一直对商业动机抱有敌意，但大部分的黑客还是愿意与一些以盈利为目的Linux集成商（如REDHAT、SUSE、Caldera）合作的。这也表明只要符合他们的意愿，大多数的黑客会乐意和商家合作的。如此看来，黑客们敌视以获取直接利润为目的的许可证的真正原因非常微妙也非常有趣。 <br /><br />　　原因之一，对等原则。大多数开放源码的开发者允许别人利用他们的成果来获取利益，还有许多开放源码的开发者同时还规定不允许某一方（有时源码的开发者除外）出于特权地位来牟取利润。只要黑客们自己潜意识里打算从他们开发的软件或补丁中赢利，他们一般也愿意别人来与他合作，共同赢利。 <br /><br />　　原因之二，意想不到的后果。黑客们发现在许可证中对软件的商业应用与销售进行限制和收费（为获得销售利润而通常采用的做法）会使得人际关系变得淡漠。其中一个特例就是所谓的“盗版光盘”，这本来应该鼓励的，但现在却被认为是违法和不道德的。总的来说，对用户使用、销售、修改、分发软件的权力（以及版权协议中其他复杂权利）进行限制会导致人们循规蹈矩，时时刻刻担心自己会犯法（这种担心会随着人们使用的软件包的增加而愈演愈烈）。这无疑是非常不妙的，因此简化许可证，解除许可证中的各项限制已成为大势所趋。 <br /><br />　　原因之三，也是最关键的一个原因，就是代码共享。这种赠与文化在《开拓智域》一文中有生动的描述。某些许可证体系中用来保护知识产权或者限制直接获取销售利润的各项规定使得人们不能合法的实现代码共享，（如Sun公司的Jini Java“社区资源”许可证）。然而代码共享却被认为是最后一根救命“稻草”（《开拓智域》一文中大段大段的解释了这个问题），当软件维护者无力承担或者放弃对代码的维护时（比方说是一个非常封闭的许可证），代码共享就非常关键了。 <br /><br />　　黑客群体对于对等原则还是有所妥协的，所以他们能够容忍一些象Netscape的NPL（NPL明确规定不允许非公开源码的产品使用开放源码的Mozilla代码）一样给予源码创作者一些特权的许可证。对于第二条原因，妥协的就少一些。而对第三条原因极少会作出让步（这也是Sun公司的 JAVA and Jini Community License计划遭到黑客们广泛反对的原因）。 <br /><br />　　上述原因解释了开放源码定义中的各项条款。这些条款从一些典型的自由软件版权协议（如GPL协议，BSD协议，MIT协议以及Artistic协议）的细微特征中表达了黑客群体的思想，它们（虽然不是有意的，但客观上）使得获取直接利润极为困难。 <br /><br /><br />9. 间接销售价值模式 <br /><br />　　然而，还是有办法来开拓与软件服务相关的市场，从而获得间接销售价值。有五种已知的和两种正在探索的模式（未来可能会发展出更多的新发展模式）。 <br /><br />　　9.1 失败的领导者/市场定位者 <br /><br />　　在这种模式中，利用开放源代码软件为直接产生收入的专有软件来创造或维持一种市场位置。在大多数普遍的情形中，开放源代码的客户端软件带动了服务器软件的销售，或者可增加了门户网站的访问量/广告收入。 <br /><br />　　网景公司（Netscape）在1998年开放了Mozilla浏览器的源代码时，就是使用了这种策略。他们浏览器端的商业收入只占总收入的 13%，而且在Microsoft开始发布Internet Explorer后市场份额还在下降。IE强大的市场营销（及其捆绑策略后来成为反托拉斯案的核心问题）迅速的吞噬了Netscape浏览器的市场份额，造成了Microsoft试图垄断浏览器市场，并利用微软强加给用户的HTML的“标准”，形成逐步把Netscape赶出服务器市场的态势。 <br /><br />　　通过开放仍然流行的Netscape浏览器的源代码，Netscape有效的阻止了Microsoft垄断浏览器的可能性。他们期望开放源代码协作会加速浏览器的开发和测试，并希望能降低Microsoft的IE的发展速度，阻止它独自定义HTML标准。 <br /><br />　　这个策略生效了。在1998年11月，Netscape实际上开始从IE那里夺回市场份额。在1999年初Netscape被AOL收购时，保持Mozilla所取得的竞争优势是很明显的，这一点可以从AOL的行动中显而易见，AOL首先对外的承诺的就是继续支持Mozilla计划，虽然她还处在alpha测试阶段。 <br /><br />　　9.2 糖霜策略 <br /><br />　　这种模式是针对硬件制造商的（这里的硬件包括从以太网或其他外部设备直到计算机系统的所有东西）。市场压力迫使硬件公司书写和维护软件（从设备驱动程序、配置工具直到整个操作系统的级别），但是软件本身并不是利润中心。它是一项开支——通常是一项重要开支。 <br /><br />　　在这种情况下，开放源代码是一种很好的策略。由于没有赢利上的损失，所以没有负面影响。销售商获得的是奇迹般膨胀的开发人员队伍，对用户需求获得更加快速、灵活的反应能力，并且通过同行检查而获得的更好的可靠性。而且可以免费得到了其他系统的移植。这种做法还可在很大程度上提高客户对公司的信任度，因为客户的技术人员可以花费了更多的时间根据自己的需要定制代码。 <br /><br />　　有一些经常被销售商提出的反对开放硬件驱动程序源代码的理由。为了不把它们和这里的更加一般的问题搅在一起，我在附录里专门讨论了这个问题。 <br /><br />　　开放源代码的“将来获益”的效果在糖霜策略中体现的尤其强烈。硬件产品有一个有限的制造和支持的生命周期，在那以后，用户就自己照顾自己了。但如果他们可以获得驱动程序的源代码，并可根据需要加以修改的话，他们就更可能高高兴兴的成为同一公司的回头客。 <br /><br />　　糖霜模式的一个非常戏剧性的例子是苹果公司在1999年三月中旬决定开放它们的Mac OS X服务器的操作系统“Darwin”的代码。 <br /><br />　　9.3 奉送食谱，开办饭店 <br /><br />　　在这种模式中，开放源代码软件建立了一种市场定位，并不是为了象在失败的领导者/市场定位者模式中一样针对封闭源代码软件，而是针对服务。 <br /><br />　　（我曾经把这种模式称为“奉送剃刀，销售刀片”，但是软件和服务二者的关联并不如剃刀/刀片所类比的那么紧密。） <br /><br />　　这是红帽和其他Linux发行商所采用的模式。他们卖的其实并不是软件代码本身，而是通过组合和测试一个能转的操作系统产生的附加价值，这个操作系统被担保有销路并与同一品牌的操作系统兼容。构成他们的价值的其他元素包括免费安装和提供可选的持续技术支持合同。 <br /><br />　　开放源代码的创造市场的能力极为强大，尤其是对那些天生就作服务的公司来说更是如此。进来一个非常有教育意义的例子是Digital Creations公司，它是一个创建于1998年的web站点设计机构，专长于复杂的数据库和事务站点的开发。他们的主要工具，公司的知识财产——皇冠上的明珠，是一个对象发布系统，它曾经有过几个名字，现在被称为Zope。 <br /><br />　　当Digital Creations的人寻找风险投资时，风险投资商仔细的估计了他们的预期市场份额，他们的人力资源和那套工具后，就建议Digital Creations开放Zope的源代码。 <br /><br />　　从传统的软件工业标准来看，这看起来绝对是一个疯狂的举动。常规的商业学校认为象Zope这种核心知识财富是一个公司的掌上明珠，是在任何情况下也不能放弃的。但是那位风险投资商从两个相互关联的角度来考虑问题，一个是Zope的真实核心资产实际上是它的人员的大脑和技术；第二个是Zope作为一个创造新市场的标准而不仅仅是一个秘密武器会产生更多的价值。 <br /><br />　　为了看清这一点，请比较两种情况。在通常情况下，Zope保留为Digital Creations的秘密武器。让我们假定它是一个很有效的武器。结果，公司可以在很短的时间内交付高质量的软件——但是没人知道这个秘密武器。满足客户是容易的，但是建造一个客户群体是困难的。 <br /><br />　　然而那个风险投资商看到了对Zope系统开放源码可以为Digital Creations的真正财富——它的技术员工产生巨大的广告效应。他期望使用Zope的客户会认为雇用象Digital Creations这样的专家会比自己开发自己的Zope技术更加高效。 <br /><br />　　Zope的一个负责人曾经非常公开的确认了他们的开放源代码策略“开启了许多其它方式无法开启的门”。潜在的客户确实反应了这种情况——所以Digital Creations公司迅速发展起来。 <br /><br />　　另一个很近的例子是e-smith公司&lt;http://www.e-smith.net>。这个公司出售定制的开放源代码的 Linux的Internet安全服务器。他们的一个负责人描述了e-smith迅速扩展的免费下载服务，他说“大多数公司都要考虑软件盗版问题，而我们把它看作一个自由市场。”&lt;http: //www.globetechnology.com/gam/News/19990625/BAND.html> <br /><br />　　9.4 附加产品 <br /><br />　　在这种模式中，我们出售开放源代码的附加产品。在低端市场，出售杯子和T恤衫；在高端市场上，出售专门编辑并出版的文档和书籍。 <br /><br />　　O'Reilly集团是一个附加产品公司的很好的例子，他出版了很多优秀的开放源代码软件的参考资料。O'Reilly实际上雇用和支持了一些著名的开放源代码黑客（例如Larry Wall和Brain Behlendorf），并以次提高它在市场上的声望。 <br /><br />　　9.5 未来免费，出售现在 <br /><br />　　在这种模式下，我们以封闭的许可证发布软件的可执行文件和源代码，但是包含一个有关封闭条款的期限。比如，我们可以写一个许可证，允许免费的散发软件，禁止不付报酬的商业应用，并保证发布一年以后或开发商终止开发后软件将在GPL保护之下。 <br /><br />　　在这种模式下，客户可以保证产品能够根据他们的需要定制，因为他们可以得到源代码。产品的将来也是得到保证的——许可证保证了如果始创公司失败后，开放源代码社区仍能够接管该产品。 <br /><br />　　因为销售价格和数量是依赖于客户对产品的期望值，始创公司可以享受到比以封闭源代码许可证发行的软件更优厚的收入。而且，因为老的代码是在GPL保护下的，所以它可以得到同行认真的检查、排错和添加其他小功能，这样可以为原创者减轻75%的维护负担。 <br /><br />　　这种模式被Aladdin公司成功的采用了，它创造了流行的Ghostscript程序（一个PostScript解释器，它可以把PostScript翻译成许多打印机的内部语言）。 <br /><br />　　这种模式的主要缺点是那些封闭的条款倾向于抑制产品开发早期的同行检查和参与，而那时是最需要的大家的参与的时候。 <br /><br />　　9.6 软件免费，销售品牌 <br /><br />　　这还是一个试探性的商业模式。我们开放一项软件技术，保留测试包或一套兼容性标准，然后卖给用户一个品牌认证，保证他们对这种技术的实现和其他具有这种品牌的产品相互兼容。　　（这是Sun公司应该对待Java和Jini的方式。） <br /><br />　　9.7 软件免费，销售内容 <br /><br />　　这时另一种试探性的商业模式。想象一些象股票信息订阅的服务。价值既不在客户端软件也不再服务器商，而在于提供客观的的可靠的信息。因此我们开放所有的软件，出售内容订阅。当黑客们把客户端移植到新的平台上或者以不同方式扩展它时，我们的市场自动扩展了。　　（这是为什么AOL应该开放它的客户端软件。） <br /><br /><br />10. 何时开放，何时封闭 <br /><br />　　在考察了支持开放源代码软件开发的几种商业模型之后，我们可以来讨论一下何时开放源代码、何时封闭源代码才有经济意义这样的一般性问题了。首先，我们必须弄清楚每种策略如何盈利。 <br /><br />　　10.1 靠什么盈利？ <br /><br />　　封闭源代码的方式让你可以从秘密的比特中收取利润；另一方面，它阻止了其他同行对代码进行检验的可能性。开放源代码方式为其他同行检验创造了条件，而且你也不能从秘密的比特中获得利润。 <br /><br />　　从秘密的比特中盈利很好理解；传统的软件商业模型就是围绕着它建立的。但是直到近来，其他同行检验代码的价值还未被很好的理解。然而， Linux操作系统使得我们对问题的认识更加清晰，这些认识我们本应在几年前从Internet核心软件和其他软件工程分支的发展历史中就应该学到——开放源代码的同行检验是得到高可靠性和高质量的软件的唯一可伸缩的方法。 <br /><br />　　因此，在一个竞争的市场上，寻找高可靠性和高质量软件的客户会给那些开放源代码软件开发人员以回报，是他们探索出怎样在服务、附加值和与软件相关的辅助市场中维持一个稳定的收支循环。这种现象正是Linux令人惊讶的成功背后的原因，Linux在1996年的一片空白发展到1998年末的商业服务器市场的17%，而且似乎会在两年之内占领这个市场（1999年初，IDC预测Linux将在2003年成长的比所有其它操作系统的总和还要快）。 <br /><br />　　开放源代码的一个几乎同样重要的作用是作为一种传播开放标准，围绕它建立市场的手段作用。Internet的戏剧性增长得益于没人拥有TCP/IP；没人有权封锁Internet的核心协议。 <br /><br />　　TCP/IP和Linux成功的所造就的互连网络对世界的影响是显而易见的，开放的系统最终减少了信任和平等的问题——如果大家都能够看到底层结构是怎样工作的话，他们就会理所当然的更加信任它；人们更加喜欢一个所有人都是平等的底层结构，而不是一个某一方具有获利的特权并可以施加控制的底层结构。 <br /><br />　　然而，其实为了向软件用户说明平等的重要性时，我们不必非要强调网络的影响力。没有哪个软件用户在质量和功能类似的开放源代码软件存在的条件下放弃开放源码软件，而去选择封闭源代码软件，非要让自己被某个供应商垄断控制才高兴。软件对消费者的事务越重要，这个问题就越突出——它越重要，消费者就越不能容忍自己被另外一方控制。 <br /><br />　　最后，和信任问题相关的开放源代码的重要优势就是它的光明前景。如果源代码是开放的，即使发行者垮掉了，客户还是能掌握一些资源。这对于糖霜策略尤其重要，因为硬件趋向于较短的生命周期，但是作用更加普遍，并转换成开放源代码的增长价值。 <br /><br />　　10.2 它们怎样相互作用？ <br /><br />　　当从秘密比特得到的回报比从开放源码高的时候，从经济意义上说应该封闭源代码。当从开放源代码得到的收益比从秘密比特高的时候，那么无疑开放源代码更有意义。 <br /><br />　　从表面上看，这是一个很普通的想法。但是当我们注意到开放源代码的回报比秘密比特更加难以度量和预计时，就是说回报常常被低估而不是被高估，这一点就不那么平淡无奇了。实际上，直到1998年初业界主流开始重新考虑遵从Mozilla发行源代码的前提时，开放源代码的回报一直被普遍错误的认为是零。 <br /><br />　　那么我们怎样评价开放源代码的回报呢？一般的说这是一个困难的问题，但是我们可以象处理其他任何一个预言性问题一样来处理它。我们可以从观察开放源代码成功和失败的案例开始。试着抽象出一个模型，至少给出一个定性的感觉，在什么情况下开放源代码对投资者或追求最大回报的商业操能产生净收益。然后我们再用数据来细化这个模型。 <br /><br />　　从《大教堂和市集》一文的分析中，我们可以得到开放源代码在（a）可靠性/稳定性/可扩展性至关重要时，和（b）设计和实现的正确性除了采用其他同行检验的办法外难以验证时具有高的投资回报。（在实践中多数重要程序都符合第二个标准。） <br /><br />　　当软件对一个消费者至关重要时，消费者为避免被一个垄断的供应商所控制的愿望提升了他对开放源代码的兴趣（也因此提升了开放源代码厂商的市场竞争力）。因此，另一个标准（c）当软件是一项非常重要的资产时（例如，很多企业中的MIS部门），封闭源码会把用户推向开放源代码一方。 <br /><br />　　在应用程序领域，我们看到开放源代码底层软件创造了信任和平等的结果，随着时间的推移，一定会吸引到更多的客户，从而胜