Archive

Archive for August, 2004

linux初体验(二)——ftp(vsftp)安装及配置

August 20th, 2004

终于想真正用下linux了,并没有想象中的麻烦,只是~~靠,不会~~
由于某些原因,又只能用redhat7.3,明显没9.0来的方便。

二、ftp(vsftp)安装及配置

没用装7.3带的wu-ftp,从网上下载了vsftpd-2.0.1.tar.gz

1,建立默认用户,文件按夹,设置权限等

useradd nobody
root@mkdir /usr/share/empty/
root@mkdir /var/ftp/
root@usadd -d /var/ftp ftp
root@chown root.root /var/ftp
root@chmod og-w /var/ftp

以上用户和路径可能已经存在,如果提示已经存在,不用管它。

2,安装
把vsftpd-2.0.1.tar.gz复制到 /usr/local/src
root@cp vsftpd-2.0.1.tar.gz /usr/local/src
root@tar zxvf vsftpd-2.0.1.tar.gz
解压得文件夹 vsftpd-2.0.1
root@cd vsftpd-2.0.1

执行make install
root@make install
这将执行一些文件复制。

e g:
root@cp vsftpd /usr/local/sbin/vsftpd
root@cp vsftpd.conf.5 /usr/local/man/man5
root@cp vsftpd.8 /usr/local/man/man8

如果安装失败,可以检查这些是否复制成功。
需要手工复制下面的文件
root@cp vsftpd.conf /etc

3,调试
修改/etc/vsftpd.conf,在最后以行增加
listen=YES
root@vi /etc/vsftpd.conf

这样vsftpd就不会随inetd一起启动,确定21端口可以用。
下面手工启动vsftpd
root@/usr/local/sbin/vsftpd&

现在可以试着连接。
root@ftp localhost
Connected to localhost(127.0.0.1)
…………
…………
有可能登陆不成功,没关系,只要证明启动了就可以。

如果要以本地用户登录,还需要复制一个文件,否则会提示密码错误。
root@cp RedHat/vsftpd.pam /etc/pam.d/ftp

4,配置
如果要随xinetd一起启动,要做如下修改
修改/etc/vsftpd.conf,将刚才增加的
listen=YES
去掉。并对各配置项作修改,各项的意义如下

anonymous_enable=YES 是否允许匿名ftp,如否则选择NO
local_enable=YES 是否允许本地用户登录
local_umask=022 默认的umask码
anon_upload_enable=YES 是否允许匿名ftp用户访问
anon_upload_enable=YES 是否允许匿名上传文件
anon_mkdir_write_enable=YES 是否允许匿名用户有创建目录的权利
dirmessage_enable=YES 否显示目录说明文件,默认是YES但需要收工创建.message

文件
xferlog_enable=YES 是否记录ftp传输过程
connect_from_port_20=YES 是否确信端口传输来自20(ftp-data)
chown_upload=YES chown_username=username 是否改变上传文件的属主,如果是需

要输入一个系统用户名,你可以把上传的文件都改成root属主
xferlog_file=/var/log/vsftpd.log

ftp传输日志的路径和名字默认是/var/log/vsftpd.log
xferlog_std_format=YES 是否使用标准的ftp xferlog模式
idle_session_timeout=600 设置默认的断开不活跃session的时间
data_connection_timeout=120 设置数据传输超时时间
nopriv_user=ftpsecure 运行vsftpd需要的非特权系统用户默认是nobody
async_abor_enable=YES 是否允许运行特殊的ftp命令

修改/etc/xinetd.d/vsftpd
root@vi /etc/xinetd.d/vsftpd

将里面的
disable = YES
改为
disable = no

执行
root@service xinetd reload。
如果还不行则重起机器
root@reboot

现在vsftpd应该可以正常工作了。

另外还有些命令

service xinetd restart
/etc/rc.d/init.d/vsftpd start|stop|restart

我就是未分类

linux 初体验(一)——语言环境和输入法

August 19th, 2004

终于想真正用下linux了,并没有想象中的麻烦,只是~~靠,不会~~
由于某些原因,又只能用redhat7.3,明显没9.0来的方便。

 语言环境和输入法

一、由于oracle安装时对中文的支持有问题,所以需要将语言环境设置为en_US(原来是中文zh_CN.GB18030)

修改默认字符集的方式有两种:
1,修改 /etc/sysconfig/i18n
按如下方式修改,其中“en_US\”为所要使用的字符集。
偶用中文的时,将其改为
LANG=\”en_US\”
SUPPORTED=\”en_US:en\”

2,在x环境下打开命令窗口,输入

locale_config
会提示输入root密码,输入后就可以在列表中选择语言。

修改完成后需要重新启动x环境。

二、发现无法使用中文输入法,顺便配置一下。
其实较新的linux版本,只要装了中文package 和 fonts,就有chinput,一个不错的中文输入法(打which chinput可以看到它的位置)。只需要对其进行简单的配置就可以使用了。
1,在.bashrc文件里加上下面两行:

export LC_ALL=zh_CN.GBK18030
export
XMODIFIERS=@im=Chinput

2,从目录/usr/lib/Chinput/im/cce下copy文件
sysphrase.tab 和 usrphrase.tab 到 ~/.pyinput. (~是你的home
directory, 如果下面没有.pyinput文件夹,则创建)

重新进入x界面,就可以用ctrl+space来切换中英文输入法。

关于chinput,可以在
http://www.opencjk.org/~yumj/project-chinput-e.html
找到详细的说明

我就是未分类

还好赢了——姚明的反击

August 18th, 2004

还好赢了——姚明的反击

如果说第一场姚明缺少支援而没打好的话,那么这一场,他毅然缺少支援,但为了让别人闭嘴,他还是做了。

一个人包揽近60%的得分,这正常吗?如果是埃弗逊,大家一定会说他独,队友一定会怪他不传球,但在中国,这是好事,大家都在说打的好,,这是姚明的悲哀还是幸福?

一场比赛成就了姚明,却成就不了中国队,打新西兰,靠姚明一个可以,打意大利呢?塞黑呢?……一个人的球队赢不了球,大家知道,姚明也知道。所以他传球, 甚至传的有点多,可他为的是什么?他希望能带动所有人一起打球。只有他自己,对方很容易就冻结,传球路线一封,几个人一夹,神仙都没办法。所以他希望队友 也能进几个人,让对手不敢把全部精力放在自己身上,那样自己才能更多的得分。可是结果呢?还是要靠姚明硬打。好在对方攻击力并不时太强,中国的防守还是可 以的,所以靠姚明一个人的得分,虽然艰难,还是赢了。如果换支队伍呢?别忘了新西兰是本组最弱的,换个队呢?

上半场中国队出手5次三分,没有一个投中,下半场出手6次三分,只有杜锋命中一个。整场比赛除去被犯规的罚球,中国队总共出手60次,姚明占了20次;姚 明投中15个,命中率75%,其他9个上场的队员总共命中10个,命中率25%。如果再仔细算,除了姚明、莫科和杜锋,其他人26投三中~~~神仙难比。 这样的球队太好防了,看住姚明,中国队就什么都没有了。姚明知道,所以他想传球。可是传给谁呢?这种情况下,明知不能改变别人,那就只好改变自己了。把自 己该承担的做好,别再想整个球队,别再想引导别人,没用的,输就输吧,问心无愧就是了。

这场比赛,与其说是球队的胜利,不如说是姚明的失望——不是说我表现的不好吗?我就表现好给你看看,让你看看我不管其他人时,他们的表现是什么样子,让你看看到底这是一个什么样的球队。

一场比赛赢了,一个球队却输了。一个球队成了这个样子,中国男篮没戏了。

我就是未分类

偷来的一些关于中文乱码问题的解决方案和经验

August 18th, 2004

1.字节和unicode
java 内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。因此java要对这些字节流经行转化。char 是unicode的,而byte是字节。java中byte/char互转的函数在sun.io的包中间有。其中ByteToCharConverter 类是中调度,可以用来告诉你,你用的convertor。其中两个很常用的静态函数是
public static ByteToCharConverter getDefault();
public static ByteToCharConverter getConverter(String encoding);
如果你不指定converter,则系统会自动使用当前的encoding,gb平台上用gbk,en平台上用8859_1。
byte ——〉char:
“你”的gb码是:0xc4e3 ,unicode是0x4f60
String encoding = “gb2312”;
byte b[] = {(byte)’\u00c4′,(byte)’\u00e3′};
ByteToCharConverter converter = ByteToCharConverter.getConverter(encoding);
char c[] = converter.convertAll(b);
for (int i = 0; i < c.length; i++) {
System.out.println(Integer.toHexString(c[i]));
}
结果是什么?0x4f60
如果encoding =”8859_1″,结果又是什么?0x00c4,0x00e3
如果代码改为
byte b[] = {(byte)’\u00c4′,(byte)’\u00e3′};
ByteToCharConverter converter = ByteToCharConverter. getDefault();
char c[] = converter.convertAll(b);
for (int i = 0; i < c.length; i++) {
System.out.println(Integer.toHexString(c[i]));
}
结果将又是什么?根据平台的编码而定。

char ——〉byte:
String encoding = “gb2312”;
char c[] = {‘\u4f60’};
CharToByteConverter converter = CharToByteConverter.getConverter(encoding);
byte b[] = converter.convertAll(c);
for (int i = 0; i < b.length; i++) {
System.out.println(Integer.toHexString(b[i]));
}
结果是什么?0x00c4,0x00e3
如果encoding =”8859_1″,结果又是什么?0x3f
如果代码改为
String encoding = “gb2312”;
char c[] = {‘\u4f60’};
CharToByteConverter converter = CharToByteConverter.getDefault();
byte b[] = converter.convertAll(c);
for (int i = 0; i < b.length; i++) {
System.out.println(Integer.toHexString(b[i]));
}
结果将又是什么?根据平台的编码而定。
很多中文问题就是从这两个最简单的类派生出来的。而却有很多类不直接支持把encoding输入,这给我们带来诸多不便。很多程序难得用encoding了,直接用default的encoding,这就给我们移植带来了很多困难。

2.utf-8
utf-8是和unicode一一对应的,其实现很简单
7位的unicode: 0 _ _ _ _ _ _ _
11 位的unicode: 1 1 0 _ _ _ _ _  1 0 _ _ _ _ _ _
16位的unicode:  1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _
21 位的unicode: 1 1 1 1 0 _ _ _  1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _
大多数情况是只使用到16位以下的unicode:
“你”的gb码是:0xc4e3 ,unicode是0x4f60
0xc4e3的二进制:
1100 ,0100 ,1110 ,0011
由于只有两位我们按照两位的编码来排,但是我们发现这行不通,因为第7位不是0因此,返回”?”
0x4f60的二进制:
0100 ,1111 ,0110 ,0000
我们用utf-8补齐,变成:
1110 ,0100 ,1011 ,1101 ,1010 ,0000
e4–bd– a0
于是返回:0xe4,0xbd,0xa0。

3.string和byte[]
string其实核心是char[],然而要把byte转化成string,必须经过编码。string.length()其实就是char数组的长度,如果使用不同的编码,很可能会错分,造成散字和乱码。
例如:
String encoding = “”;
byte [] b={(byte)’\u00c4′,(byte)’\u00e3′};
String str=new String(b,encoding);
如果encoding=8859_1,会有两个字,但是encoding=gb2312只有一个字这个问题在处理分页是经常发生 。

4.Reader,Writer / InputStream,OutputStream
Reader和Writer核心是char,InputStream和OutputStream核心是byte。但是Reader和Writer的主要目的是要把char读/写InputStream/OutputStream。
例如:
文件test.txt只有一个”你”字,0xc4,0xe3
String encoding = “gb2312”;
InputStreamReader reader = new InputStreamReader(new FileInputStream(
“text.txt”), encoding);
char c[] = new char[10];
int length = reader.read(c);
for (int i = 0; i < length; i++) {
System.out.println(c[i]);
}
结果是什么?你
如果encoding =”8859_1″,结果是什么???两个字符,表示不认识。
反过来的例子自己做。

5.我们要对java的编译器有所了解
javac ?encoding
我们常常没有用到encoding这个参数。其实encoding这个参数对于跨平台的操作是很重要的。如果没有指定encoding,则按照系统的默认encoding,gb平台上是gb2312,英文平台上是iso8859_1。
java 的编译器实际上是调用sun.tools.javac.main的类,对文件进行编译,这个类有compile函数中间有一个encoding的变量,- encoding的参数其实直接传给encoding变量。编译器就是根据这个变量来读取java文件的,然后把用utf-8形式编译成class文件。
例子代码:
String str = “你”;
FileWriter writer = new FileWriter(“text.txt”);
write.write(str);
writer.close();

如果用gb2312编译,你会找到e4 bd a0的字段 ;
如果用8859_1编译, 00c4 00e3的二进制:
0000,0000 ,1100,0100 ,0000,0000 ,1110,0011
因为每个字符都大于7位,因此用11位编码:
1100,0001,1000,0100,1100,0011,1010,0011
c1– 84– c3–  a3
你会找到c1 84 c3 a3 。

但是我们往往忽略掉这个参数,因此这样往往会有跨平台的问题:
样例代码在中文平台上编译,生成zhclass
样例代码在英文平台上编译,输出enclass
(1).  zhclass在中文平台上执行ok,但是在英文平台上不行
(2).    enclass在英文平台上执行ok,但是在中文平台上不行
原因:
(1).    在中文平台上编译后,其实str在运行态的char[]是0x4f60, 在中文平台上运行,filewriter的缺省编码是 gb2312,因此 chartobyteconverter会自动用调用gb2312的converter,把str转化成byte输入到 fileoutputstream中,于是0xc4,0xe3放进了文件。
但是如果是在英文平台下,chartobyteconverter的缺省值是8859_1, filewriter会自动调用8859_1去转化str,但是他无法解释,因此他会输出”?”
(2).    在英文平台上编译后,其实str在运行态的char[]是0x00c4 0x00e3, 在中文平台上运行,中文无法识别,因此会出现??;
在英文平台上,0x00c4–>0xc4,0x00e3->0xe3,因此0xc4,0xe3被放进了文件。

6.    其它原因:<%@?page?contentType=”text/html;?charset=GBK”?%>
设置浏览器的显示编码,如果response的数据是utf8编码,显示将是乱码,但是乱码和上述原因还不一样。

7.    发生编码的地方
?    从数据库到java程序 byte——〉char
?    从java程序到数据库 char——〉byte
?    从文件到java程序 byte——〉char
?    从java程序到文件 char——〉byte
?    从java程序到页面显示 char——〉byte
?    从页面form提交数据到java程序byte——〉char
?    从流到java程序byte——〉char
?    从java程序到流char——〉byte

谢志钢的解决方法:
我是使用配置过滤器的方法解决中文乱码的:

RequestFilter
net.golden.uirs.util.RequestFilter

charset
gb2312

RequestFilter
*.jsp

public void doFilter(ServletRequest req, ServletResponse res,
FilterChain fChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
String userId = (String) session.getAttribute(“userid”);
req.setCharacterEncoding(this.filterConfig.getInitParameter(“charset”)); // 设置字符集?
实际上是设置了byte ——〉char的encoding
try {
if (userId == null || userId.equals(“”)) {
if (!request.getRequestURL().toString().matches(
“.*/uirs/logon/logon(Controller){0,1}\\x2Ejsp$”)) {
session.invalidate();
response.sendRedirect(request.getContextPath() +
“/uirs/logon/logon.jsp”);
}
}
else { // 看看是否具有信息上报系统的权限
if (!net.golden.uirs.util.UirsChecker.check(userId, “信息上报系统”,
net.golden.uirs.util.UirsChecker.ACTION_DO)) {
if (!request.getRequestURL().toString().matches(
“.*/uirs/logon/logon(Controller){0,1}\\x2Ejsp$”)) {
response.sendRedirect(request.getContextPath() +
“/uirs/logon/logonController.jsp”);
}
}
}
}
catch (Exception ex) {
response.sendRedirect(request.getContextPath() +
“/uirs/logon/logon.jsp”);
}
fChain.doFilter(req, res);
}

我就是未分类

最全的HTML特殊字符列表

August 18th, 2004

jsp中,使用js生成动态的数据库相关的二级联动下拉框

August 17th, 2004
<html>
<head>
<title>后台产品添加</title>
<meta http-equiv=”Content-Type” content=”text/HTML; charset=gb2312″>
<link href=”../INC/Style.Css” rel=”stylesheet” type=”text/css”>
<script language = “JavaScript”>
var onecount;
onecount=0;
subcat = new Array();
<%
int count = 0;
rs = Conn.executeQuery(“select * from ego_smallsort order by Sid”);//读取数据
while(rs.next())
{
String sname=new String(rs.getString(“Sname”).getBytes(“GBK”),”ISO8859_1″);//转换字符类型
%>
subcat[<%=count%>] = new Array(“<%=sname%>”,”<%=rs.getInt(“Bid”)%>”,”<%=rs.getInt(“Sid”)%>”);//产生数组
<%
count = count + 1;
}
%>
onecount=<%=count%>;
function changelocation(id)
{
document.form1.smallsortselect.length = 0;
var id=id;
var i;
document.form1.smallsortselect.options[0] = new Option(‘选择二级分类’,”);
for (i=0;i < onecount; i++)
{
if (subcat[i][1] == id)
{
document.form1.smallsortselect.options[document.form1.smallsortselect.length] = new Option(subcat[i][0], subcat[i][2]);
}
}

}

</script>
</head>
<body bgcolor=”#FFFFFF”>

<form name=”form1″ method=”post” action=””>
<table width=”500″  border=”0″ cellspacing=”0″ cellpadding=”0″ align=”center”>
<tr>
<td width=”180″ height=”20″ align=”right”>选择一级分类:</td>
<td width=”320″>
<select name=”bigsortselect” onChange=”changelocation(document.form1.bigsortselect.options[document.form1.bigsortselect.selectedIndex].value)” size=”1″>
<option value=”2″>请选择一级分类</option>
<%
rs = Conn.executeQuery(“select * from ego_bigsort order by Bid”);
while(rs.next())
{
String Bname = new String(rs.getString(“Bname”).getBytes(“GBK”),”ISO8859_1″);
System.out.println(Bname);
%>
<option value=”<%=rs.getInt(“Bid”)%>”><%=Bname%></option>
<%
}
%>
</select><br>
</td>
</tr>
<br>
<tr>
<td height=”20″ align=”right”>选择二级分类:</td>
<td>
<select name=”smallsortselect”>
<option value=”” selected>请选择二级分类</option>
</select>
</td>
</tr>
<tr>
<td height=”20″ colspan=”2″ align=”center”><input type=”submit” name=”Submit” value=”提交”></td>
</tr>
<script LANGUAGE=”JavaScript”>
changelocation(document.form1.bigsortselect.options[document.form1.bigsortselect.selectedIndex].value); //将一级分类的value传给changelocation()函数,生成二级分类的列表
</script>
</table>
</form>
</body>
</html>

我就是未分类

篮协不除,篮球不成

August 17th, 2004

姚明,走吧,这不是你待的地方

August 17th, 2004

姚明,走吧,这不是你待的地方

王治郅是对的,有些人,跟他们玩只会降低自己的水平。

许多年了,王治郅带着他们,打出了点成绩,也毁了自己。本该是一名优秀的中锋,变成了三分神准的远投高手,却从来不在篮板下待着,为了什么?还不是为了弥 补中国队外线的不足,可惜了自己的身高。他是一个好球员,本可以成为一个好中锋,可是为了中国队,他变成了一个二流前锋和二流中锋加二流后卫的合体。当姚 明接班后,本以为自己可以好好的变会一个一流中锋,下场大家都看到了。

现在是姚明了。靠他撑不起中国队,甚至,还没王治郅作的好。1vs5的篮球,永远都赢不了,不管你是姚明,还是乔丹。

其实中国的篮球,或者说整个亚洲的篮球,还在一个很低的技战术水平上,球员对比赛的理解能力很差。但中国队凭借着人多,总能找出个身体条件好的。女篮曾经 有郑海霞,所以打到了亚军。男篮看到了甜头,也跟着学,找到了王治郅,找到了姚明。但他们没郑海霞命好,郑海霞至少有群二流的队友,而王治郅姚明巴特尔 们,却只有三流的队友——其实,中国队曾经是二流,但为了寻找这个高中锋,忽视了其他的,结果二流的球员都没了,剩下堆三流的。

王治郅是聪明的,他知道一直陪着这堆三流的人没机会,所以想到了到更好的地方发展,一波三折,还是成了。为了能更多的根更好的人一起,他试着绝对一次不重要的比赛,在粪清云集的中国,被判了死罪。

姚明来了,带着大家的希望,被粪青们当成批判王治郅的典范,回来了。这位绝对世界一流的球员,被大家寄希望能带着一帮三流四流的人,打进世界前八。其实说 起来,如果不是每个洲都有球队进奥运会的原则,中国连前50斗进不了。姚明在场上就像一只困兽。他身边的队友,甚至不如当年王治郅身边的那些。他怒了,他 不理解,足球是需要跑动的,这么浅显的道理,似乎只有他一个人明白。当对方4个人围在他身边时,他竭尽全力把球扔给站哪里看戏的队友,没错,是看戏的,那 看戏的十分友好的又把球扔回来,然后继续占在那里看。

他真的怒了,一向和蔼的姚明,终于说出了自己想说的。王治郅笑了:别傻了,如果有用,当年我就说了。王治郅是聪明的,其实姚明也知道“他们有自己的想法”,可是还是说出来了。说了也没用,只会得罪人。不知道会不会重演当年慈禧丽立宪袁世凯的下场。

走吧,姚明,学大致,别回来了。我们知道,你尽力了,努力的想让中国的篮球成长。可是只有一个有什么用?十年前,说我们缺中锋,所以,有了三大中锋,也只 有了三大中锋。如果说这是个人能力问题,那么,一团和气的中国篮球,压榨球员的中国篮协反映的就是人品问题了。他们想的,是自己的政绩,是篮协的效益,他 才不管男篮有什么发展。

走吧,没人会怪呢,给中国的球迷一个念想,让人相信,中国也有好球员。真正代表中国人篮球实力的,不是篮协,而是那些敢为自己的篮球梦努力的人。

我就是未分类