2005年02月23日

ibm网站上的这个叶面已经删掉了,好不容易才找到一个有图的copy。但是没有找到[2]….

原作:Roy Miller   翻译:Robinh00d[CSTC]

翻译本文的目的仅仅是为了练习,本教程版权归IBM所有,本人不对其拥有版权

第一章:学习提示

我适合学习这份教程吗

    Socket提供了两台计算机之间进行通讯的机制,在James Gosling注意Java语言之前就已经很闻名了。Java语言使你更简单有效的使用Socket开发而无需了解操作系统的底层机制。大部分讨论Java编码的书籍都没有涉及这一主题,或者是只是“点到为止”,留给读者大量的想象空间。这份教程就是让你了解在你的Java代码中如何更有效的使用Socket所需的知识。包含以下内容:
•什么是Socket
•它位于你的应用程序的哪些地方
•能正常运行的最简单的Socket例程――帮助你理解Java Socket的基础知识
•详细剖析另外两个探讨如何在多线程和具有连接池环境中使用套接字的示例
•简要讨论在现实世界中的一个Socket应用程序

    如果你能够描述如何使用java.net这个包里的类,这份教程对你来说也许基础了一点。尽管它是一份提高技术的好资料,但是如果你已经在PC或者其他平台上有过长期Socket的开发经历,这部分提示也许会让你产生厌烦,但是如果你并不是很理解Socket,并且只想知道“什么是Socket”以及“怎么将Socket应用在自己的Java代码中”的话,这份教程则是一个很好的开始。

第二章:Socket基础

介绍

大多程序员,无论是否使用Java语言编程,都不希望知道太多关于不同的计算机之间相互通信的底层知识。程序员希望处理更容桌斫獾母卟愠橄蟆3绦蛟备M盟鞘煜さ膉ava的构造,通过直观接口与对象交互。
Socket存在于两个领域--我们宁愿处理抽象层而避免涉及底层细节,这一章所讲解的底层细节仅用于你理解抽象应用所必须的知识。

计算机组网
计算机之间用一种非常简单的方式来进行操作和通信。电脑芯片是一种开关,用1和0来储存和传输数据。当计算机希望共享数据时,它们需要所作的全部就是以相同的速度,相同的顺序,相同的时间等来回传输上百万的数据流。当你想在两个应用程序之间通信时,你怎么想考虑这些细节呢?
为了避免上面提到的事情,我们每次需要一组包协议用同样的方法来完成工作。这将使我们能够处理应用程序级的工作而不需要担心底层网络技术的细节。这样设置的包协议被称作“栈”。TCP/IP是最常见的协议栈。大部分协议栈(包括TCP/IP)都大致遵循ISO国际标准化组织的开放系统互连参考模型(Open Systems Interconnect Reference Model,OSIRM)。OSIRM把计算机网络定义为7个逻辑层
(见下图)很多公司对于这个模型的某些层的构造有过贡献。从产生电子信号()到给应用程序提供数据。TCP/IP映射到OSI模型的两层,如图所示。

我们不必过多的深入这些层的细节,但我们应该知道socket位于模型的什么位置。


Socket存在于哪些地方?
Socket大致位于OSI模型的会话层(下图),会话层夹在面向应用的高层(上)的层和实时数据通信层(下)之间。会话层在两台计算机之间为管理和控制数据流提供服务。作为这一层的一部分,socket提供一个隐藏从传输线上获取bytes和bits的复杂性的抽象。换言之,socket允许我们让应用程序表示它想发送bytes。
socket隐藏了完成该工作的具体细节。
  


当你拿起电话说话时,电话把你的声音转换电信号。电话机是人和电信网络之间的接口。你不必知道你的声音是如何转换的细节,只需知道要你想和谁联系。同样的道理,socket隐藏了复杂的传输二进制数据而扮演高层接口的角色。

向一个应用程序曝光socket

当你在使用socket编写代码时,你的代码工作在表示层。表示层提供一个能让应用层使用的公共信息表示(representation of information)。假如你想把你的应用程序连接到CC银行系统而仅能使用EBCDIC。你的域对象(domain objects)用ASCII格式储存信息。既然这样,你得负责在表示层编写代码把EBCDIC的数据转换成ASCII格式,然后(比如)向应用层提供一个域对象(domain objects)。应用层可以用域对象(domain objects)做它想做的任何事情。
  



你编写的socket处理代码仅存在于表示层。应用层并不需要知道socket如何工作。
什么是socket?

现在我们知道了socket扮演的角色,那么剩下的问题就是:什么是socket?Bruce Eckel在他的《Java编程思想》一书中是这样描述socket的:

socket是一种用于表达两台机器之间连接“终端”的软件抽象。对于一个给定的连接,在每台机器上都有一个socket,你可以想象一个虚拟的”电缆”工作在两台机器之间,“电缆”插在两台机器的socket上。当然,物理硬件和两台机器之间的“电缆”这些连接装置都是未知的,抽象的所有目的就是为了让我们不必了解更多的细节。

简单的说,一台计算机上的socket同另一台计算机通话创建一个通信信道,程序员可以用这个信道在两台机器之间发送数据。当你发送数据时,TCP/IP协议栈的每一层都给你的数据里添加适当的报头。有个好消息是java语言隐藏了所有这些细节,这也是为什么他们有时被叫做“流socket”。
思考一下socket像电话听筒一样在电话的任意一端--你和我通过一个专门的信道来进行通话和接听。会话将一直进行下去直到我们决定挂断电话(除非我们使用蜂窝电话),除非我们挂断电话,否则我们各自的电话线路都会占线。
如果你需要在两台机器之间进行通讯而不使用高级机制像ORBs(以及CORBA, RMI, IIOP等等),socket比较适合你。Socket的底层机制则相当棘手。幸运的是,java平台给我们一些虽然简单但是相当强大的高层抽象以至于我们创建和使用socket更加容易一些。

socket的类型

一般而言,java socket有下面两种类型:

•TCP socket(由Socket类实现,下面的章节我们将对其讨论)
•UDP socket(由DatagramSocket类实现)

TCP和UDP扮演同样的角色,但是实现是不同的。两者都接收传输协议数据包并把它们传递到表示层。TCP把信息分解成数据包(datagrams)并在接收端重新组装起来。它还对丢失的数据包进行重新传输的请求。TCP减少了上层的担忧。UDP没有组装和重传请求的功能。它只是传输数据包。更高层的层必须确保信息的完整性以及组合顺序的正确性。

一般而言,UDP使你的应用程序更有效率,但只在你的应用程序并不是立即交流大量数据并且不需要组装大量的数据报而完成一条消息的时候。否则TCP才是最简单和最有效的选择。

因为大部分读者相对于UDP来说更喜欢用TCP一些,我们将我们的讨论限定在java语言中面向TCP类。

2005年02月22日

1.下载Tomcat

在下面的地址下载Tomcat的二进制版

    http://mirrors.ccs.neu.edu/Apache/dist/jakarta/tomcat-4/binaries/

即下载文件

    tomcat-4.1.18.tar.gz

2. 安装

首先解压缩

    gunzip tomcat-4.1.18.tar.gz
    tar -zxvf tomcat-4.1.18.tar

得到Tomcat的所有文件.然后把它拷贝到你要安装的位置,如

    /opt/tomcat-4.1.18/

然后为了方便,你可以把目录名tomcat-4.1.18改为tomcat.

3.设置

  • 设置路经

    在/etc/profile文件中加入如下两行

        export JAVA_HOME=/opt/jdk1.4
        export TOMCAT_HOME=/opt/tomcat

    在此我们假设Java JDK安装在/opt/jdk1.4目录下.
     
  • 激活ROOT

    ROOT的缺省设置是没有激活(disabled).为了激活ROOT,打开文件

        tomcat/conf/server.xml

    然后把

        <!–
        <Context path=”" docBase=”ROOT” debug=”0″/>
        –>

    的注释去掉,即去掉<!––>.
     
  • 激活Invoker Servlet

    即把tomcat/conf/web.xml中的下列字段的注释去掉

        <servlet-mapping>
            <servlet-name>invoker</servlet-name>
            <url-pattern>/servlet/*</url-pattern>
        </servlet-mapping>
     
  • 设置Port
    Tomcat缺省的Port number是8080.由于Tomcat是一个独立的(Standalone) Web Server,它可以不用Apache而独立工作,所以你可以不安装Apache,这样你可以把Tomcat设置在Port 80.这样你就可以在URL中省略:8080. 打开文件tomcat/conf/server.xml,找到如下的字段:

        <Connector className=”org.apache.coyote.tomcat4.CoyoteConnector”
        port=”8080″
        … />

    然后把8080改成80即可.
     
  • 创建temp子目录
    在/opt/tomcat/目录下建立一个temp子目录
        mkdir temp

4.启动Tomcat

安装完后,重新启动计算机,以使JAVA_HOME和TOMCAT_HOME的设置生效.然后到

    /opt/tomcat/bin

下,运行命令:

    ./startup.sh

正常情况下可以见到如下的信息:

    Using CATALINA_BASE:   /opt/tomcat
    Using CATALINA_HOME:   /opt/tomcat
    Using CATALINA_TEMDIR: /opt/tomcat/temp
    Using JAVA_HOME:       /opt/jdk1.4

然后用浏览器打开如下的网页

    http://localhost/

或者

    http://localhost:8080/     (如果没有把Port number改为80)

如果你见到Tomcat的网页(index.jsp),证明Tomcat安装成功,并已经启动.

如要关闭Tomcat,在/opt/tomcat/bin下运行下面的命令即可

    ./shutdown.sh

5. 注册你自己的项目(Project)

假设你有一个自己的JSP项目,他应该安装在下面的目录下:

    /opt/tomcat/webapps/myproject

你必须在tomcat/conf/server.xml中加入一行

    <Context path=”/myproject” docBase=”myproject” debug=”0″/>

在浏览器中对应的地址为:

    http://localhost/myproject

1.1  获取 JDK

    Java 的官方站点是 java.sun.com,所以要获取最新版的 JDK (Java Developer Kit) 就应该到 java.sun.com 去找。

    JDK 就是 Java 的 SDK (Software Development Kit),有标准版 (Standard Edition) 和企业版 (Enterprise Edition) 之分。标准版可以免费使用、编写软件并发行;而企业版,虽然也可以免费使用、编写软件,但如果你想发行用企业版编写的软件,你就得支付一定的费用。

    为了学习和编写 Java 程序,我们通常需要下载两个包:Java 2 SDK 和 Java 2 SDK 文档 (Documentation)。Java 2 SDK 包含了 Java 开发工具 (Developer Kit) 和 Java 运行环境 (Runtime Environment),以及 Java API 源码等,可以根据需要选择 Windows 版或者 Linux 版。而 Java 2 SDK 文档是一个压缩包,以网页的形式提供了 Java API 的非常详尽的开发文档,是 Java 程序开发的最佳参考资料。

    目前 Java SDK 的最新版是 1.4 预发行版 (1.4.0 Release Candidate),可以在 http://java.sun.com/j2se/1.4/ 下载。如果需要稳定的最高版本,Java 2 SDK 1.3.0 Release,可以在 http://java.sun.com/j2se/1.3/ 下载。对于初学者,建议直接从 1.4 开始,虽然目前还只是预发行版,但它已经很稳定了。


1.2  安装 JDK

    安装 JDK 将以预发行版的 JDK 1.4 (Java 2 SDK, v 1.4.0 Release Candidate) 为例。

1.2.1  系统需求

    在 Windows 下安装 JDK 的系统需求:

        操作系统:Windows 95/98/ME
                  Windows NT 4.0 (需要安装 Service Pack 5 以上)
                  Windows 2000 专业版 (Professional) / 服务器版 (Server)
                  Windows XP 家庭版(Home)/专业版(Professional)
        内存:基本图形界面应用程序需要 32M
              Applet 需要 48M
              较复杂的图形界面应用程序需要更大的内存
        CUP:奔腾 (Pentium) 166 及更快的 CPU
        硬盘空间:70M 以上

    在 Linux 下安装 JDK 的系统需求:

        Linux 核心 (Kernel) 2.2.12 版本及以上
        glibc 2.2.2-11 版本及以上
        16 位 (bit) 真彩 KDE 或者 Gnome
        最少 32M 内存,推荐使用 48M 内存
        至少 75M 硬盘空间

1.2.2  在 Windows 下安装 JDK

    下载的 Windows 版本的 JDK 安装程序是一个以 -win.exe 结尾的可执行文件,如 JDK 1.4 预发行版的 Windows 安装程序就是 j2sdk-1_4_0-rc-win.exe。直接运行该安装程序,并根据向导的提示就可以非常简单的安装好 JDK 1.4 RC for Windows。需要注意的是,如果是在 Windows 2000/XP 下安装,需要先取得管理员 (Administrator) 权限。在安装过程中需要设置安装的位置,请记住这个位置,因为下一节,设置 PATH 和 CLASSPATH 需要用到这个路径。

1.2.3  在 Linux 下安装 JDK

    Linux 版的 JDK 安装程序有两种格式:GNUZIP Tar 格式 (j2sdk-1_4_0-rc-linux-i386.bin) 和 RedHat RPM 格式 (j2sdk-1_4_0-rc-linux-i386-rpm.bin)。下面分别对使用这两个安装文件的安装步骤进行说明。

    1. 安装 GNUZIP Tar 格式的安装程序

    j2sdk-1_4_0-rc-linux-i386.bin 是一个自解压文件,可直接运行 (命令:./j2sdk-1_4_0-rc-linux-i386.bin)。运行它之后会显示一个许可信息 (License),同意之后,安装程序会将 JDK 解压在当前路径下的一个名为 j2sdk1.4.0 的目录中。所以,如果你想把 JDK 安装个某个位置,就可以把该安装程序文件拷贝到那个位置,再运行安装程序;或者运行安装程序后,将解压出来的 j2sdk1.4.0 目录移动到你想要的位置。

    使用这种格式的安装程序,优点是安装位置可自定。

    2. 安装 RedHat RPM 格式安装程序

    相对于安装 GNUZIP Tar 格式的安装程序,安装 RedHat RPM 格式的安装程序更麻烦一些。

    j2sdk-1_4_0-rc-linux-i386-rpm.bin 也是一个自解压文件,同样会首先显示许可协议。不过它解压出来的不是一个目录,而是一个 .rpm 文件 (j2sdk-1_4_0-rc-linux-i386.rpm)。稍后,我们将使用 rpm 命令进行安装,在此之前,你需要获得 root 权限。

    如果你安装过 JDK 1.4 的测试 (Beta) 版本 (beta, beta2, bate3),你应该先御载它们。如果你不知道是否安装过,可以使用 rpm 命令再 -qa 参数来检查,如

        rpm -qa | grep j2sdk-1.4.0

    如果 Linux 中安装有 JDK 1.4 测试版,它就会被列出来。那么,我们接下来就应该使用 rpm 命令带 -e 参数来删除它,如

        rpm -e j2sdk-1.4.0-beta
        rpm -e j2sdk-1.4.0-beta2
        rpm -e j2sdk-1.4.0-beta3

    直到现在,我们才能安装最新下载的 JDK 1.4 预发行版,使用 rpm 命令带 -ivh 参数,如

        rpm -ivh j2sdk-1_4_0-rc-linux-i386.rpm


1.3  设置 Java 需要的环境变量

    通常,我们需要设置三个环境变量:JAVA_HOME、PATH 和 CLASSPATH。

    JAVA_HOME:该环境变量的值就是 Java 所在的目录,一些 Java 版的软件和一些 Java 的工具需要用到该变量,设置 PATH 和 CLASSPATH 的时候,也可以使用该变量以方便设置。

    PATH:指定一个路径列表,用于搜索可执行文件的。执行一个可执行文件时,如果该文件不能在当前路径下找到,则依次寻找 PATH 中的每一个路径,直至找到。或者找完 PATH 中的路径也不能找到,则报错。Java 的编译命令 (javac),执行命令 (java) 和一些工具命令 (javadoc, jdb 等) 都在其安装路径下的 bin 目录中。因此我们应该将该路径添加到 PATH 变量中。

    CLASSPATH:也指定一个路径列表,是用于搜索 Java 编译或者运行时需要用到的类。在 CLASSPATH 列表中除了可以包含路径外,还可以包含 .jar 文件。Java 查找类时会把这个 .jar 文件当作一个目录来进行查找。通常,我们需要把 JDK 安装路径下的 jre\lib\rt.jar (Linux: jre/lib/rt.jar) 包含在 CLASSPATH 中。

    PATH 和 CLASSPATH 都指定路径列表,列表中的各项 (即各个路径) 之间使用分隔符分隔。在 Windows 下,分隔符是分号 (;),而在 Linux 下,分隔符是冒号 (:)。

    下面分别说明三个环境变量在 Windows 和 Linux 下如何设置,不过在此之前,我们需要做个假设。假设 JDK 在 Windows 下的安装路径是 C:\jdk\,在 Linux 下的安装路径是 /usr/local/jdk/。那么,安装后的 JDK 至少会包括如下内容:

        C:\jdk (/usr/local/jdk)
          |– bin
          |– demo
          |– include
          |– jre
          |   |– bin
          |   `– lib
          `– lib

1.3.1  在 Windows 下设置

    Windows 下使用 set 命令设置环境变量,为了使每一次启动计算机都设置这些环境变量,应该在系统盘根目录下的 autoexec.bat 文件中进行设置,如:

        set JAVA_HOME=C:\jdk
        set PATH=%JAVA_HOME%\bin;C:\Windows;C:\Windows\Command
        set CLASSPATH=%JAVA_HOME%\jre\lib\rt.jar;.

    有些版本的 Windows 不能用 %变量名% 来替换环境变量的内容,那么就只好直接写 C:\jdk 而不是 %JAVA_HOME% 了。另外,C:\Windows 和 C:\Windows\Command 是 Windows 会自动加入路径的,所以可以从设置中去掉。如果在 autoexec.bat 中已经设置了 PATH,那只需要将 %JAVA_HOME%\bin 加到原来设置 PATH 的那条语句中就行了。

    CLASSPATH 也可以根据需要设置或者加入其它的路径,比如你想把自己写的一些类放在 C:\java 中,就可以把 C:\java 也添加到 CLASSPATH 中去,set CLASSPATH=%JAVA_HOME%\jre\lib\rt.jar;C:\java;.。

    注意,在 CLASSPATH 中包含了一个“当前目录 (.)”。包含了该目录后,就可以到任意目录下去执行需要用到该目录下某个类的 Java 程序,即使该路径并未包含在 CLASSPATH 中也可以。原因很简单:虽然没有明确的把该路径包含在 CLASSPATH 中,但 CLASSPATH 中的 “.” 在此时就代表了该路径,如:

    假设在 C:\java 目录下有可运行的类 HelloJava.class,那么

        C:\>set CLASSPATH=C:\jdk\jre\lib\rt.jar;.   // 设置 CLASSPATH 环境变量,注意最后有一个 “.”
        C:\>cd java                                 // 转到 C:\java 目录
        C:\java>java HelloJava                      // 运行 HelloJava
        Hello, Java.                                // 运行结果
        C:\java>_

    该例将在 1.3.3 节中分析。

1.3.2  在 Linux 下设置

    Linux 下使用“变量名=变量值”设置变量,并使用 export 命令将其导出为环境变量。为了使每一次登录都自动设置好这些变量,你需要在 ~/.bash_profile 里或者 ~./bashrc 里进行设置,如

        export JAVA_HOME=/usr/local/jdk
        export PATH=$JAVA_HOME/bin:$PATH
        export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:.

    设置 PATH 时用的 $JAVA_HOME 是指替换变量 JAVA_HOME 的值到 $JAVA_HOME 所在位置。如上句实际就是 export PATH=/usr/local/jdk/bin:$PATH。这句中 $PATH 也是同样的作用,不过这里的 PATH 是指以前设置的 PATH 变量的值,而非本次设置 PATH 变量的值。

    注意,在 CLASSPATH 中包含了一个“当前目录 (.)”。包含了该目录后,就可以到任意目录下去执行需要用到该目录下某个类的 Java 程序,即使该路径并未包含在 CLASSPATH 中也可以。原因很简单:虽然没有明确的把该路径包含在 CLASSPATH 中,但 CLASSPATH 中的 “.” 在此时就代表了该路径,例如

    假设在 /home/fancy/java 目录下有可运行的类 HelloJava.class,那么

        [fancy@matrix fancy]$ export CLASSPATH=/usr/local/jdk/jre/lib/rt.jar:.  // 设置 CLASSPATH,注意最后的“.”
        [fancy@matrix fancy]$ cd ~/java                                         // 转到 /home/fancy/java
        [fancy@matrix java]$ pwd                                                // 显示当前目录
        /home/fancy/java                                                        // 当前目录是 /home/fancy/java
        [fancy@matrix java]$ java HelloJava                                     // 运行 HelloJava
        Hello, Java                                                             // 运行结果
        [fancy@matrix java]$ _

    该例将在 1.3.3 节中分析

1.3.3  实例分析

    1.3.1 节和 1.3.2 节中的用到的实际上是一样的例子,只是操作系统不同,略有差别。

    两个例子都提到一个“可运行的类”,它是指包含了 public static void main(String[] args) 方法的类,这将在下一章 HelloJava 一节中详述。例中的 CLASSPATH 均未包含 HelloJava.class 所在的目录(C:\java, /home/fancy/java),但是均包含了当前目录 (.)。因此转到包含 HelloJava.class 的目录下去执行 java HelloJava,在 Java 寻找到 CLASSPATH 中的“. (当前目录,C:\java, /home/fancy/java)”时,找到了 HelloJava.class,运行成功。

Java 实例教程基础篇 第一章 准备 (第 1 次修订)

边城狂人

http://www3.ccw.com.cn/club/essence/200202/8135.htm

2005年02月21日

    新华网华盛顿2月19日电(记者王振华)在美国网上购物已经是非常普遍的事情。如同商店购物总会出现不满意而去退货,网上购物自然也会遇上同样情况。记者从亲身经历中体验到,美国网上退货也简便易行。

    记者曾在美国最大网上销售商亚马逊公司订购了一个数码相机,新相机试拍后将图片传到电脑上一看,发现有的照片非常清晰,有的照片却画面粗
糙,后来才知道原因是这种相机只有数码变焦功能,没有光学变焦,因此利用数码变焦将远处景物拉近拍摄时画面质量就不好。这可是一个比较大的缺陷,购买时没
有注意到这一点。考虑再三,决定退货。

    以前就听说网上购物最麻烦的是退货不方便,不像一般商店把东西拿回去,说退就退了。虽然同样是购物,但记者连亚马逊公司具体在什么地方都不知道,能顺利退货吗?但是,亚马逊公司的货单上明明白白地写着:退货很容易。真的很容易吗?

    关于网上退货,美国不同的网站有不同的规定,听说有的要收手续费。到亚马逊网站上找到退货处,根据提示,得知所购货物可以经过邮局或者
UPS(美国联合包裹公司)退回该公司。从该公司网站上打印一份带有条形码的退货单,到附近邮局或UPS服务点投递即可。我的相机是UPS送来的,所以决
定还是通过它来退货。

    首先到UPS网站上查阅附近的服务网点,发现空运服务点距离住处数百米外就有,地面运输服务点要稍微远一些。根据网上提示的地址,记者找到
最近的设有UPS空运服务点的一座办公楼,但进去后却找不到UPS的服务柜台。一打听才知道,原来这里是无人服务点,像退货这种情况,只要把要托运的物品
包装好,把退货单贴在包装盒上,然后将包裹放到UPS设在楼内的货物箱里就行了,到时UPS就有人来把包裹取走。真是没想到,美国寄运包裹有时也可以像寄
普通信件那样简单方便。

    记者又来到UPS地面运输服务点,服务人员热情接待。看看我的相机包装盒,说要再加个包装盒以保证运输安全。工作人员将相机包装好后,贴上
我从网上打印下来的退货单,收了我1.5美元的包装盒费,就告诉我说:“行了。”
经打听,原来从亚马逊网站打出的单子是自动退货单,把退货单贴在包裹上,UPS就会将物品自动送回亚马逊公司,然后由亚马逊和UPS结算运输费用,根本不
需顾客当场付费。

    根据亚马逊公司的规定,如果退货是由于产品质量问题,或所交货物不符合顾客的最初要求,运费由亚马逊公司支付。如果是由于顾客本身的原因,
运费则由顾客承担。没过几天,记者就收到亚马逊公司发来的邮件,内容大致为:退货已经收到,扣除运费后退还的货款将打入客户的银行账户。又过了几天,记者
从银行网络查询获悉,退款已如数进入银行账户。至此,这次退货圆满结束。

    这次网上购物和退货给人最深的感受是,美国诚信的网上销售系统、方便快捷的运输服务和先进的银行电子系统之间现实了有机高效的结合。这或许就是当代电子商务的精髓吧。(完)

2005年02月19日

一本书+一张光盘
感觉不错,一年的dev2dev.bea.com.cn的精华都在手上了。
突然觉得有些压力,bea给自己的fans提供这么好的条件,似乎我没有好好珍惜,很多名词还都是第一次听说。
这两天好好看看吧。
也希望认识更多的搞java的朋友

2005年02月16日

昨天,还在北方老家

今天,7点起床,皑皑白雪,8点出家门,到了火车站,居然到北京的火车都没有票卖,好不容易找到一辆愿意走国道的大巴,我是最后一个上去的,只剩下一个木凳子(注意,不是马扎,还算专业)。大巴行驶在国道上,差不多每隔1kg就能看已经发生的和正在发生的交通事故,想想不管是搞运输的还是乘客大家出来赚钱真不容易,日子月子都是难过地。

还好,战战兢兢的时候,看到手机上有个未接电话,small打的,回过去,说人已经到了上海,我说我们这里大雪封山了,有点艰苦,但同志们的心还是火热地!而且我定了张350的机票,把small鼻子气歪了,他说从他家乡坐大巴到上海还要350,哇哈哈哈哈,好平衡!心里想着,今天怎么也要赶上飞机,就算下雪在机场吃盒饭、睡免费饭店也行!

11点,路上都是雾,20米外看不到东西……

12点,到达首都北京,风和日丽,我考,有没有高错?难道是党考验我们?

1点,在西单楼下见到了帮我订票的老班长——大友,我手捧礼品迎上去(家里下雪,没有东西买,在西单图书大厦买了本《育儿大全》给他)。

2:30,草草吃饭,交割完机票,互道珍重之词,上了民航楼下的机场巴士。

3:30:到达首都机场。

5:05,飞机起飞。

7点,飞机降落。

8点,到达杭州寓所,看看没丢东西,去small家喝了碗粥,不错,舒服多了。

明天,小拇指说过来,但是刚才small好像reboot那个redrat没成功,没准儿明天要跑嘉兴,哇哈哈哈哈哈~~~~动感超人

我突然发现我有点牛B!

2月12日Google公司准备向维基百科捐助服务器带宽

昨天无意中上了维基百科,发现头条上写着这段话,不知道google又想做什么了。

Wikipedia:关于

维基百科,自由的百科全书


维基百科是一个自由、免费、内容开放的百科全书协作计划,参与者来自世界各地。这个站点使用Wiki,这意味着任何人都可以编辑维基百科中的任何文章及条目。

Wikipedia维基媒体基金会的商标。

新闻采访可以直接致电Terry Foote,电话:(美国)310-474-3223。他会转达给维基媒体基金会的会长Jimmy Wales。您也可以通过电子邮件jwales@bomis.com来采访。

维基百科开始于2001年1月15日,创始人是Jimmy Wales, Larry Sanger,以及几个热情的英语的参与者。大约3年后,在2004年的3月,已经大约有6000名活跃的参与者编写了50种语言 (http://www.wikipedia.org/wikistats/EN/TablesArticlesTotal.htm)的600000篇条目。每天都有来自世界各地的许多参与者进行数千次的编辑和创建新条目。 中文维基百科正式开始于2002年10月,目前已经有20696条条目。

维基百科中的所有文本以及大多数的图像和其他内容都是在GNU自由文档许可证下发布的,以确保内容的自由度及开放度。所有人在这里所写的文章都将遵循copyleft协议,所有内容都可以自由的分发和复制。我们殷切盼望您的加盟,并希望您能够喜欢使用及编辑维基百科的自由文档。详细信息请参看版权信息wikipedia:内容声明

请注意,维基百科上的一些内容对某些用户来说可能是讨厌的、粗俗的甚至是亵渎的,请参看免责声明了解更多的内容。

http://zh.wikipedia.org/wiki/%E9%A6%96%E9%A1%B5 这是中文网址

2005年02月13日

4号到家之后,没有一天是清醒的,早上从宿醉中醒来,喝了点水,舒服多了.

一年一次,每办法.

2005年02月02日

早上走上阳台,摸了一下晾在外面的毛衣,哇哈哈——冻冰了,不过没有北方冻得厉害,不够硬。
杭州这个冬天很冷,杭州这地方居然下了三次雪,算是几十年不遇了。

马上过年了,希望春天早点到来!
希望我们的事业早点成功——这个春天太让人期望了!
这个杭州最冷的冬天留给我们更多的等待、憧憬也许是怀念……

2005年02月01日

http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=6739462231#ebayphotohosting

硬盘拆了,内存也拆了并且成了小猫的新玩具, 附赠一个女式的鞋子,这件艺术品的名字叫”RE-Boot #6 PLEASE

IBM Think Pad Laptop or Reboot

Current bid:  US $50.00
   
 
Time left:  4 days 10 hours
10-day listing, Ends Feb-05-05 15:18:49 PST
Start time: Jan-26-05 15:18:49 PST
History: 1 bid   (US $50.00 starting bid)
High bidder: bluebore007 ( 0 )
 
 
Item location:  Portsmouth, NH
United States
 
Ships to: Worldwide
Shipping costs: Calculate shipping costs
 Shipping, payment details and return policy

Description    
 
 Item Specifics – PC Laptops 
 Brand:  IBM    Hard Drive Capacity:  0 GB  
 Chip Type:  Intel Pentium III    Screen Size:  14 inches  
 Model:  –    Operating System Included:  –  
 Processor Speed:  466 MHz    Primary Drive:  CD-ROM  
 Memory (RAM):  –    Condition:  – 


This IBM Stinkpad -oops I mean Think pad is a 466 mhz laptop that I guarentee will never work. In fact the  100 gig hard drive was removed and reimaged with a sledge hammer. (Hard Drive not included) The 256 RAM have been removed and is my cats new favorite toy. The 14 LCD panel is toast and dont even think of trying to use it.

The womans Leather boot comes free with the laptop.

This laptop is now ART. This pice is called RE-Boot #6 PLEASE use caution when displaying this art. It has sharp edges, the broken LCD is glass.