2005年9月26日星期一

服饰的悲哀

他日,当我得知公司要求必须穿有领子的衣服时,我内心咯噔了一下,回忆起中学的片断:
校长、教导主任、体育老师,班主任近似疯狂的告知我们一定要穿校服,因为有XX人要来学校...
体育课上没有穿校服的人,被逼着罚站,讽刺的是他们穿的是运动服...
校长在校会议上庄严的宣布XX学校因为所有的女生都留了MM头(就是李胡兰同志留得那种),男生全是小平头。获得了省教育部的表扬,号召大家都来学习...
大冬天的为了参加所谓的健身运动,要求男女生身穿白衬衣蓝裤子白球鞋做课间操,好多男生都只穿了一件衬衣...
大夏天听校领导关于如何建设素质教育,所有的人被要求穿上校服(棉质的运动服)在烈日下听校长的报告...
没有戴校牌的同学(上面有姓名和所谓的ID)不让进学校...
没有老师的同意学生不得出校门(所谓的封闭管理)...
......
无语,
因为习惯的沉默,
因为追随的无奈。

很久以来我都觉得学校的悲哀教育,好几次我都想大声地问这些规定的制定者?
什么人最像当代中国的学生?他们被要求统一的服装,他们被要求统一发式,他们还有统一的编号,他们被要求在规定的场所活动,他们的劳动不需要付费,他们的权利不需要重视,“教育”是学校的目的。稍微的发挥一下自己的联想吧,是的,囚犯也是以同样的方式生活的。
悲哀,
因为未来的迷茫,
因为无力的言语。

偶尔看韩片中有人这么说:“为什么不愿穿校服,因为他是日本殖民时代留下的...”,惊诧于那一瞬间。终于明白的我们的教育是以日本为模式的,虽然我是个抵制日货的强烈支持者,可我从来信奉“是夷长技以制夷”然而在我了解到日本校服的片面的点点内容后,再次的沉默:
日本的校服旧服可以回收给没钱的学生穿
校服一般含有多套,可以在不同的天气穿
.....

现在当我大学毕业几年后再次听到熟悉的要求,我有些习惯的排斥,人真的要想蚂蚁一样么?没有个体,拥有的只是类别?

附我同家姐聊天记录:

(*)雨: 不是,公司要求要有领子的衣服。。。
Owl—再见萤火虫: 哦
(*)雨: 无聊的要求
Owl—再见萤火虫: 那怎么办?
Owl—再见萤火虫: 告诉他们:圆领子也是领子!嘻嘻
(*)雨: 草说,剪一个领子,要求带时,挂上去
Owl—再见萤火虫: 哈哈~~这办法也不错~~
Owl—再见萤火虫: 向我们小时候流行的那种假领子,记得不?
(*)雨: 唉~上学要穿校服,但是呢,一人只有一套。上班了又有要求,但是呢又没有服装费,要不发个服装也行啊,也没有。
(*)雨: 都他妈的是学小日本的,学又不好好学
Owl—再见萤火虫: 哈哈~~~有道理
(*)雨: 学校更变态,还要求发型。。。
(*)雨: 更他妈囚犯一样
Owl—再见萤火虫: 这叫取其糟粕,弃其精华的新拿来主义!
(*)雨: 我记得中学有个学校叫女生全部剪成mm头,男生全是平头,竟然受到教育部的表扬。。。。无语。。。
Owl—再见萤火虫: 是这样啊
Owl—再见萤火虫: 别说你们了
Owl—再见萤火虫: 我2000年出来当老师的时候,那还是私立学校
Owl—再见萤火虫: 都是这样的要求阿
Owl—再见萤火虫: 你问东东就知道了
(*)雨: 唉,教育的悲哀啊
Owl—再见萤火虫: 治标不治本
Owl—再见萤火虫: 勤劳节俭朴素踏实,,,这些搞的是在发型和衣服上来完成似的
(*)雨: 都是些脑子有病的人想出来的
Owl—再见萤火虫: 不是说不好,但南辕北辙,越弄越糟!
(*)雨: 唉。。。
Owl—再见萤火虫: 呵呵~~~因为这些大人自己就是这样子的吧,是心态有病!
Owl—再见萤火虫: 自己外表道貌岸然就觉得够了,
(*)雨: 说得好
Owl—再见萤火虫: 当然会这样要求下一代
Owl—再见萤火虫: 把外表搞得正正经经
Owl—再见萤火虫: 至于心理如何,不去管他!
Owl—再见萤火虫: 所以,做了一年老师,我是死都作不下去了:)
(*)雨: :-)
Owl—再见萤火虫: 感觉自己就象一个伪君子
Owl—再见萤火虫: 课上教的是一套态度,课下又被迫按另一种态度来生活,稍微认真一些的人,都会的精神分裂症~呵呵~~~

2005年9月22日星期四

Java 路径解析

路径设置

首先我们看看java学习的最为基础的工作:路径设置。

JDK安装好后会要求设置以下路径:“JAVA_HOME”、“classpath”、“path”。
Windows操作方法:

在Windows下java这些路径设置主要是在系统属性里改变(控制面板->系统->高级->环境变量)

如:

JAVA_HOME D:\j2sdk1.4.2_06\

classpath

.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\htmlconverter.jar;%JAVA_HOME%\lib\dt.jar;d:\Tomcat_4.1\common\lib\servlet.jar

path:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;D:\j2sdk1.4.2_06\bin\;D:\j2sdk1.4.2_06\jre\bin\

注意:分隔符是分号“;”
Linux操作方法:

增加可执行权限: chmod 755 j2sdk-1_4_2_04-linux-i586-rpm.bin

执行命令运行 ./ j2sdk-1_4_2_04-linux-i586-rpm.bin

执行成功后生成rpm文件:j2sdk-1_4_2_04-linux-i586-rpm

执行rpm –ivh j2sdk-1_4_2_04-linux-i586-rpm安装jdk

在linux下修改文件 /etc/profile中的信息来添加JAVA_HOME,classpath,和修改PATH。在此文件末尾加入以下内容:

JAVA_HOME=/opt/jdk1.4.2_04

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar

PATH=$JAVA_HOME/bin:$PATH

Export JAVA_HOME,CLASSPATH,PATH

注意:分隔符是冒号“:”
配制说明

前面我们做了路径的设置,现在我们说明一下他们到底是什么东西,为什么要做这些设置。(Java作为跨平台的语言不能像一般程序一样通过写windows注册表的形式添加其它程序访问的路径。)其中“path”一般系统本身就有,主要是确定系统在运行程序时默认查找的路径,添加%JAVA_HOME%/bin就是方便操作系统找到JDK运行程序的目录;“JAVA_HOME”为JDK安装的路径主要提供其他应用程序访问使用,譬如:Tomcat;“classpath”是最易混淆的设置,我们常常都听说要设置此值中要包含如下内容:“.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\htmlconverter.jar;%JAVA_HOME%\lib\dt.jar”其中“.”常常被强调不可遗漏,但是为什么呢?

首先我们要从java的类(class)说起,java开发中所有一切均为对象,而对象的实现全通过类(class)实现,每个class在操作系统中表现为一个文件(*.class),而包(package)则做为类管理的一种方式。将功能相近,相关的类统一部署在一个包(package)内。这种方式在操作系统里则表现为一个目录。

“.”在操作系统里表示为当前目录当你在Windows操作系统里输入dir时便可以看到两个奇怪的目录“.”“..”,分别代表着当前目录,和上一级目录,这也就是当你想在命令控制附里切换到上一级目录输入“cd ..”的原因。

%JAVA_HOME%代表着设置的“JAVA_HOME”的值,可以使用echo %JAVA_HOME%显示此值。

*.jar文件为java的一种特殊的包文件,若你用winrar工具打开它,就会发现里面也是一级一级的目录最后保存着*.class,和操作系统未打包前的文件格式完全一致。

所以常常设置的java路径“.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\htmlconverter.jar;%JAVA_HOME%\lib\dt.jar”代表的意思为:当java程序编译或运行时,若是需要调用其它的类文件将从以上路径中查询,这个路径首先是当前运行路径然后是其次的几个JDK默认所带的jar包中。
编译示例

现在还是让我们从HelloWord开始了解路径的意义

创建一个java文件E:\HelloWord.java

public class HelloWord {

public static void main(String[] args) {

System.out.println("HelloWord");

}

}

在命令控制附种切换HelloWord.java的路径下,此处为E:\输入javac HelloWord.java编译HelloWord.java将其转化为二进制文件:HelloWord.class,然后使用java HelloWord来运行。

我们再做一个实验同样是此文件,我们在第一行加上:

package A;

删除以前生成的二进制文件:HelloWord.class。现在我们再次编译此文件,会发现编译正常而且同样会在当前目录下生成HelloWord.class。再次用java HelloWord运行他,却抛出NoClassDefFoundError,意思为找不到class文件,也就是说HelloWord类无法找到。但是HelloWord.class文件明明存在的啊?

第一次java在运行时要查找的是classpath中提供路径中的HelloWord.class,它在当前目录下找到了(“.”),所以可以很好的运行。第二次当他再次查找HelloWord.class时现存的HelloWord.class在操作系统文件名称上没用任何变化,但是它是属于A这个package的决定了它实际为A.HelloWord类而不是HelloWord类。所以当前目录下没有HelloWord这个类。那么java A.HelloWord可以运行这个.class文件么?依然不行!为什么呢?因为java的类要和操作系统得文件目录相对应,现在虽然有了A.HelloWord的类,但是却无法找到A这个package对应的目录,所以无法运行。正确的方法为在当前目录下建名为A的目录,将HelloWord.class移入其中,然后再运行java A.HelloWord。
javac参数

让我们通过javac /?来查看javac的参数

我们从了解以下参数来进一步理解java路径:

-classpath,-sourcepath,-d

-classpath为java编译时查找的路径和在操作系统里制定的意义相同。但是当在javac中制定-classpath时,操作系统里指定的classpath将会在此javac运行期间无效。

-sourcepath,当javac编译若是查找不到所需要的class文件,默认情况下它会在当前目录查找class所对应的java文件,若是存在,则自动编译好后再次定位class文件。但是若是源文件没有放在当前目录下(注意class文件要和操作系统文件格式相对应,也就是说A.b class 对应的应该是A目录下的b.java文件。)则可以通过-soucepath来指定源文件可能所在的目录。

-d,javac编译默认情况是在*.java所在的目录生成二进制文件*.class,当源文件不在同一个classpath下时,就会造成程序发布或者运行很困难。-d的意义在于自动在制定路径下按照将程序编译出来的二进制文件按照类所对应的操作系统目录文件形式存放。

下面我们写两个程序介绍下这几个参数的意义。

HelloWord.java

package A;

import B.HelloName;

public class HelloWord {

public static void main(String[] args) {

HelloName peple = new HelloName();

System.out.println("Hello Word " +peple.name);

}

}HelloName.java

package B;

public class HelloName {

public String name = "Tom";

}

简单的解释下代码意义:HelloWord和HelloName分别为A,B两个包内的类在运行A.HelloWord时需要调用B.HelloName类(实际是生成HelloName的实例)。

我们先将这两个文件保存在E:\下,当我们使用javac编译时:javac HelloWord.java马上会发现无法编译,原因是查找不到B.HelloName的类。根据前面讲述的classpath我们很容易知道该怎么解决这个问题:将他们分别放置到各自相对应的目录中去。

然后我们再来编译:javac A\HelloWord.java。ok,一切都正常,在用java A.HelloWord 运行一遍,显示出“Hello Word Tom”说明编译成功且可以运行。

现在我们删除所有的class文件将B目录(包括里面的HelloName.java)文件移入到F:\下,如此一来,当我们再次编译javac HelloWord.java时依然无法查找到B.HelloName类,这时我们可以试试-sourcepath这个参数了,在E:\下编译:javac –soucepath f:\ A\HelloWord.java。编译将正常进行且无任何错误抛出。而且可以查看到,每个java源文件相同的目录下都生成了其对应的class文件。

最后当我们想运行和发布时会发现,凌乱的class和java源文件的不同目录造成运行和发布的操作困难,此时我们应当再次了解javac 的-d参数。再次在E:\目录下(先建立classes目录)使用一下命令编译:javac –soucepath f:\ -d e:\classes A\HelloWord.java。这时E:\classes下会按照java类路径需求自动生成相应的目录。此例中你会看到classes下有两个目录A和B,而A,B目录下则存放着所需要的class文件。

2005年9月16日星期五

祭中秋

千年文明百年灾,
一朝羞辱万代忆,
明月抬头献中秋,
热血心中祭国耻!

2005年9月2日星期五

Cygwin使用方法(转)

根据cygwin user guide翻译整理,希望对大家有所帮助。有错误清指出。

1 引言
cygwin是一个在 windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对cygwin产生了兴趣。本文将对其作一介绍。

根据cygwin user guide翻译整理,希望对大家有所帮助。有错误清指出。

1 引言
cygwin是一个在 windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对cygwin产生了兴趣。本文将对其作一介绍。

2 机理
cygnus 当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法——他们写了一个共享库(就是cygwin dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于 win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在 windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。
关于cygwin实现的更详细描述,请参考http://cygwin.com/cygwin-ug-net/highlights.html.

3 安装设置cygwin
3.1 安装
要安装网络版的cygwin,可以到http://cygwin.com,点击"Install Cygwin Now!"。这样会先下载一个叫做setup.exe的GUI安装程序,用它能下载一个完整的cygwin。按照每一屏的指示可以方便的进行安装。
3.2 环境变量
开始运行bash之前,应该设置一些环境变量。cygwin提供了一个.bat文件,里面已经设置好了最重要的环境变量。通过它来启动bash是最安全的办法。这个.bat文件安装在cygwin所在的根目录下。 可以随意编辑该文件。
CYGWIN变量用来针对cygwin运行时系统进行多种全局设置。开始时,可以不设置CYGWIN或者在执行bash前用类似下面的格式在dos框下把它设为tty
C:\> set CYGWIN=tty notitle glob

PATH 变量被cygwin应用程序作为搜索可知性文件的路径列表。当一个cygwin进程启动时,该变量被从windows格式(e.g. C:\WinNT\system32;C:\WinNT)转换成unix格式(e.g., /WinNT/system32:/WinNT)。如果想在不运行bash的时候也能够使用cygwin工具集,PATH起码应该包含x:\cygwin \bin,其中x:\cygwin 是你的系统中的cygwin目录。
HOME变量用来指定主目录,推荐在执行bash前定义该变量。当 cygwin进程启动时,该变量也被从windows格式转换成unix格式,例如,作者的机器上HOME的值为C:\(dos命令set HOME就可以看到他的值,set HOME=XXX可以进行设置),在bash中用echo $HOME看,其值为/cygdrive/c.
TERM变量指定终端型态。如果美对它进行设置,它将自动设为cygwin。
LD_LIBRARY_PATH被cygwin函数dlopen()作为搜索.dll文件的路径列表,该变量也被从windows格式转换成unix格式。多数Cygwin应用程序不使用dlopen,因而不需要该变量。
3.3 改变cygwin的最大存储容量
Cygwin 程序缺省可以分配的内存不超过384 MB(program+data)。多数情况下不需要修改这个限制。然而,如果需要更多实际或虚拟内存,应该修改注册表的 HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER区段。田家一个DWORD键heap_chunk_in_mb并把它的值设为需要的内存限制,单位是十进制MB。也可以用cygwin中的regtool完成该设置。例子如下:
regtool -i set /HKLM/Software/Cygnus\ Solutions/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygnus\ Solutions/Cygwin

4 使用cygwin
这一段讲一下cygwin和传统unix系统的不同之处。
4.1 映射路径名
4.1.1 引言
cygwin 同时支持win32和posix风格的路径,路径分隔符可以是正斜杠也可以是反斜杠。还支持UNC路径名。(在网络中,UNC是一种确定文件位置的方法,使用这种方法用户可以不关心存储设备的物理位置,方便了用户使用。在Windows操作系统,Novell Netware和其它操作系统中,都已经使用了这种规范以取代本地命名系统。在UNC中,我们不用关心文件在什么盘(或卷)上,不用关心这个盘(或卷)所在服务器在什么地方。我们只要以下面格式就可以访问文件:
\\服务器名\共享名\路径\文件名
共享名有时也被称为文件所在卷或存储设备的逻辑标识,但使用它的目的是让用户不必关心这些卷或存储设备所在的物理位置。)
符合posix标准的操作系统(如linux)没有盘符的概念。所有的绝对路径都以一个斜杠开始,而不是盘符(如c:)。所有的文件系统都是其中的子目录。例如,两个硬盘,其中之一为根,另一个可能是在/disk2路径下。
因为许多unix系统上的程序假定存在单一的posix文件系统结构,所以cygwin专门维护了一个针对win32文件系统的内部posix视图,使这些程序可以在windows下正确运行。在某些必要的情况下,cygwin会使用这种映射来进行win32和posix路径之间的转换。
4.1.2 cygwin mount表
cygwin 中的mount程序用来把win32盘符和网络共享路径映射到cygwin的内部posix目录树。这是与典型unix mount程序相似的概念。对于那些对unix不熟悉而具有windows背景的的人来说,mount程序和早期的dos命令join非常相似,就是把一个盘符作为其他路径的子目录。
路径映射信息存放在当前用户的cygwin mount表中,这个mount table 又在windows的注册表中。这样,当该用户下一次登录进来时,这些信息又从注册表中取出。mount 表分为两种,除了每个用户特定的表,还有系统范围的mount表,每个cygwin用户的安装表都继承自系统表。系统表只能由拥有合适权限的用户(windows nt的管理员)修改。
当前用户的mount表可以在注册表"HKEY_CURRENT_USER/Software/Red Hat, Inc./Cygwin/mounts v" 下看到。系统表
存在HKEY_LOCAL_MACHINE下。
posix 根路径/缺省指向系统分区,但是可以使用mount命令重新指向到windows文件系统中的任何路径。cygwin从win32路径生成posix路径时,总是使用mount表中最长的前缀。例如如果c:被同时安装在/c和/,cygwin将把C:/foo/bar转换成/c/foo/bar.
如果不加任何参数地调用mount命令,会把Cygwin当前安装点集合全部列出。在下面的例子中,c盘是POSIX根,而d盘被映射到/d。本例中,根是一个系统范围的安装点,它对所有用户都是可见的,而/d仅对当前用户可见。
c:\> mount
f:\cygwin\bin on /usr/bin type system (binmode)
f:\cygwin\lib on /usr/lib type system (binmode)
f:\cygwin on / type system (binmode)
e:\src on /usr/src type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
e: on /cygdrive/e type user (binmode,noumount)
还可以使用mount命令增加新的安装点,用umount删除安装点。
当Cygwin 不能根据已有的安装点把某个win32路径转化为posix路径时,cygwin会自动把它转化到一个处于缺省posix路径/cygdrive下的的一个安装点. 例如,如果Cygwin 访问Z:\foo,而Z盘当前不在安装表内,那么Z:\将被自动转化成/cygdrive/Z.
可以给每个安装点赋予特殊的属性。自动安装的分区显示为“auto”安装。安装点还可以选择是"textmode"还是 "binmode",这个属性决定了文本文件和二进制文件是否按同样的方式处理。
4.1.3 其他路径相关信息
cygpath工具提供了在shell脚本中进行win32-posix路径格式转换的能力。
HOME, PATH,和LD_LIBRARY_PATH环境变量会在cygwin进程启动时自动被从Win32格式转换成了POSIX格式(例如,如果存在从该win32路径到posix路径的安装,会把c:\cygwin\bin转为/bin)。
更多...

本文来自http://down.licheng.net/info/153.htm

http://w.yi.org/weblog/63_0_1_0.html