2010年9月19日星期日

java/OutputTest

/*

* OutputTest.java

*

* Created on June 1, 2004, 12:31 PM

*/

//comment the package line out to run in the default package.

import java.math.BigInteger;

import java.util.Calendar;

import java.util.Date;

/**

*

* @author cpresser

*/

public class OutputTest {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

// Set up some variables with different types of data.

String word = "Information";

int integer = 24;

double real = 12*Math.PI;

BigInteger bigInt = new BigInteger("123456789012345678901234567890123456789012345678901234567890");

Date today = Calendar.getInstance().getTime();

//a series of output statements to show some of the functionality of the printf method.

//The comments below indicate the output from each section:

System.out.printf("String output tests:\n");

System.out.printf("A string-------------------------------|%s|\n", word);

System.out.printf("An upper-case string-------------------|%^s|\n", word);

System.out.printf("A string in 15 spaces------------------|%15s|\n", word);

System.out.printf("A string left justified in 15 spaces---|%-15s|\n", word);

System.out.printf("A string within 5 characters-----------|%.5s|\n", word);

System.out.printf("A string in a space of 5 to 7 chars----|%5.7s|\n", word);

System.out.printf("\n");

/* OUTPUT:

String output tests:

A string-------------------------------|Information|

An upper-case string-------------------|INFORMATION|

A string in 15 spaces------------------| Information|

A string left justified in 15 spaces---|Information |

A string within 5 characters-----------|Infor|

A string in a space of 5 to 7 chars----|Informa|

*/

System.out.printf("Integer output tests:\n");

System.out.printf("An integer-----------------------------|%d|\n", integer);

System.out.printf("An integer as an octal-----------------|%o|\n", integer);

System.out.printf("An integer as hex----------------------|%x|\n", integer);

System.out.printf("\n");

/* OUTPUT:

Integer output tests:

An integer-----------------------------|24|

An integer as an octal-----------------|30|

An integer as hex----------------------|18|

*/

System.out.printf("Double output tests:\n");

System.out.printf("A double-------------------------------|%f|\n", real);

System.out.printf("A double in scientific notation--------|%e|\n", real);

System.out.printf("A double with precision of 2-----------|%.2f|\n", real);

System.out.printf("A double with precision of 10----------|%.10f|\n", real);

System.out.printf("A double as a hex number---------------|%a|\n", real);

System.out.printf("\n");

/* OUTPUT:

Double output tests:

A double-------------------------------|37.699112|

A double in scientific notation--------|3.769911e+01|

A double with precision of 2-----------|37.70|

A double with precision of 10----------|37.6991118431|

A double as a hex number---------------|0x1.2d97c7f3321d2p5|

*/

System.out.printf("BigInteger output test:\n");

System.out.printf("A BigInteger---------------------------|%d|\n", bigInt);

System.out.printf("\n");

/* OUTPUT:

BigInteger output test:

A BigInteger---------------------------|123456789012345678901234567890123456789012345678901234567890|

*

*/

System.out.printf("Date output tests:\n"); //see multiple arguments section for others

System.out.printf("A Date object as a string--------------|%s|\n", today);

System.out.printf("A formatted Date object----------------|%tc|\n", today);

System.out.printf("An ISO8602 format Date object----------|%tF|\n", today);

System.out.printf("Time in 12 hour format ----------------|%tr|\n", today);

System.out.printf("Time in 24 hour format-----------------|%tR|\n", today);

System.out.printf("Time in 24 hour format w/ seconds -----|%tT|\n", today);

System.out.printf("Date-----------------------------------|%tD|\n", today);

System.out.printf("\n");

/* OUTPUT:

Date output tests:

A Date object as a string--------------|Tue Jun 01 15:25:41 EDT 2004|

A formatted Date object----------------|Tue Jun 01 15:25:41 EDT 2004|

An ISO8602 format Date object----------|2004-06-01|

Time in 12 hour format ----------------|03:25:41 PM|

Time in 24 hour format-----------------|15:25|

Time in 24 hour format w/ seconds -----|15:25:41|

Date-----------------------------------|06/01/04|

*

*/

System.out.printf("Multiple Argument tests:\n");

System.out.printf("%1$s %2$d, %1$s %3$d, %1$s %4$d\n", "label", 1, 2, 3);

System.out.printf("Date mmddyyyy--------------------------|%1$tm%1$td%1$tY|\n", today);

/* OUTPUT:

Multiple Argument tests:

label 1, label 2, label 3

Date mmddyyyy--------------------------|06012004|

*

*/

//There are many other formats/conversions see java.util.Formatter for details

}

}

2010年7月29日星期四

Apache无法解析PHP代码的问题-转载

一天安装Apache 和PHP, Apache的版本是httpd-2.0.55.tar.gz,PHP的版本是php-5.2.6.tar.gz,
首先安装APACHE,
./configure --prefix=/usr/local/apache2 --enable-so --enable-module=so
make
make install

安装PHP
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/lib --with-sybase=/opt/sybase/OCS-15_0/ --with-mysql --enable-dbase --enable-zip
make
install
安装完PHP后将安装源文件中的 cp php.ini-dist /usr/local/lib/php.ini

写个测试文件test.php ,文件的内容为 ,在IE中运行提示下载test.php,出现这种情况说明APACHE无法解析PHP, 在APACHE中的配置文件httpd.conf中添加AddType application/x-httpd-php .php,重启APACHE,还是出现同样的错误。而且APACHE的配置文件已经加载了PHP的模块LoadModule php5_module modules/libphp5.so。最后发现是由于APACHE的配置文件缺少如下的配置:

AddType application/x-httpd-php .php
AddType application/x-httpd-php .php .phtml .php3
AddType application/x-httpd-php-source .phps


因为我之前的 AddType application/x-httpd-php .php 在加在 中间,有问题,必须加在 中间,重启APACHE后可以正常解析PHP


原帖发表在:http://blog.chinaunix.net/u/24215/showart_2000512.html

2010年7月19日星期一

Putty

Putty

随着Linux在服务器端应用的普及,Linux系统管理越来越依 赖于远程。在各种远程登录工具中,Putty是

出色的工具之一。

Putty是一个免费的、Windows 32平台下的telnet、rlogin和ssh客户端,但是功能丝毫不逊色于商业的

telnet类工具。用它来远程管理Linux十分 好用,其主要优点如下:

◆ 完全免费;

◆ 在Windows 9x/NT/2000下运行的都非常好;

◆ 全面支持ssh1和ssh2;

◆ 绿色软件,无需安装,下载后在桌面建个快捷方式即可使用;

◆ 体积很小,仅364KB (0.54 beta版本);

◆ 操作简单,所有的操作都在一个控制面板中实现。

使用简介:

把 Putty下载到机器上,双击putty.exe,就出现如图1的配置界面。选择“Session”,在“Host Name

(or IP address)”输入框中输入欲访问的主机名或IP,比如server1或192.168.9.4。端口号(Port)根

据使用 的协议有所区别,ssh默认使用22,telnet默认使用23,rlogin默认使用513。在“Protocol”单

选栏中选择使用 的协议,一般是telnet或ssh,这取决于服务器提供的服务。在“Saved Session”输入

栏中输入任务的名字,单击 “Save”按钮,就可以把任务配置保存起来了。

配置完成后单击“Open”按钮,出现如图2的登录界面,就可以使用Putty连接 Linux主机了。

关于putty的一些使用中常见的问题

一、在Windows中使用putty登录FreeBsd系统 时,能够输入用户名,但是输入密码后按回车键半天无反应
。

答:设置过程如下:

1. 在/etc/ssh/sshd_config中添加如下内容,使普通用户可以通过SSH登录:

AllowUsers 普通用户帐号

UseDNS no

2. 将希望使用su命令的用户加入到wheel组中,在/etc/group中作如下修改

wheel:*:0:root, 普通用户帐号

二、在login as: 后输入用户名,J04222035@cs8.xmu.edu.cn's password: 光标不动。即使输入正确的

密码也是没有反应?

答:这是因为putty不像telent那样会直接显示密码,而是不显示密 码,只要你输入的密码是正确的,

即使不显示只要输完密码后直接回车即可进入,不用在乎光标不动。

终于轮到 Pagent 出场了,双击一下 Pagent.exe,嗯,没反应?再双击一下,咦?出来个提示,说已经运行了。
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" title="Pagent is already running" style="width: 246px; height: 150px;" src="http://docs.google.com/File?id=ajbgz6fp3pjh_62f2tqn3">
看看右下角吧,在这 里呢
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" title="Pagent" style="width: 212px; height: 54px;" src="http://docs.google.com/File?id=ajbgz6fp3pjh_63fgtwg5">
双击一下 Pagent 的图标,出来这样一个界面。很简洁的,Add Key 是添加私钥,Remove Key 是把选中的私钥从 Pagent 中卸载了。
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" title="Pagent GUI" style="width: 524px; height: 375px;" src="http://docs.google.com/File?id=ajbgz6fp3pjh_64f8qrq8">
好,现在单击 Add Key 按钮添加私钥,我把这个演示用的私钥保存到 C:\ 了
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" title="选择私钥" style="width: 586px; height: 434px;" src="http://docs.google.com/File?id=ajbgz6fp3pjh_65dc39fw">
然后会出现输入密钥 口令的对话框,输入正确的密钥后,单击 OK
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" title="输入私钥的口令" style="width: 239px; height: 148px;" src="http://docs.google.com/File?id=ajbgz6fp3pjh_66cwj3cc">
这时,在 Pagent 的窗口中就能看到我们的私钥已经装载上去了。
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" title="察看已经装载的私钥" style="width: 524px; height: 375px;" src="http://docs.google.com/File?id=ajbgz6fp3pjh_67hf58c5">
现在打开 PuTTY,选择先前保存的 Session,双击一下。只要自动登录用户名设置上,主机上改帐户的 authorized_keys 文件里也有匹配的公钥。哈哈,发现没有?完全不需要口令,我们已经登录到系统了。
在 Pagent 的图标上点右键,也可以快捷的选择已经保存的会话。
0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" title="Pagent 的快捷菜单" style="width: 318px; height: 506px;" src="http://docs.google.com/File?id=ajbgz6fp3pjh_68g5fstk">
建议大家把 Pagent 放到启动组里面,这样每次一开机,Pagent 自动运行,然后我们只需要把私钥装载一下,然后我们就可以一直享受自动登录系统的乐趣了。再配合上以后会讲到的 Plink、PSCP 这些,我们可以实现很多工作的自动化进行。完全不需要每次输入用户名、口令、输入又长又多的命令,再做一些烦躁的文件备份,最后还得记得注销系统,难道不 觉得麻烦么?这一切烦恼很快就会远离我们了,继续往下看吧。

用 SSH 来传输文件

PuTTY 提供了两个文件传输工具

  • PSCP (PuTTY Secure Copy client)
  • PSFTP (PuTTY SFTP client)

PSCP 通过 SSH 连接,在两台机器之间安全的传输文件,可以用于任何 SSH(包括 SSH v1、SSH v2) 服务器。
PSFTP 则是 SSH-2 中新增的特性,使用的是新的 SFTP 协议,使用上与传统的 FTP 类似。事实上 PSCP 如果发现 SFTP 可用,PSCP就会使用 SFTP 协议来传输文件,否则还是 SCP 协议。PSFTP 与 PSCP 相比,PSFTP 的优点是可以与服务器进行交互,遍历服务器上的文件系统,在一个会话中上传或下载多个文件。而 PSCP 只能一次传输一个文件,传输完毕后立刻终止会话。

PSCP 的使用

在控制台直接执行 pscp 可以看到帮助

C:\>pscp
PuTTY Secure Copy client
Release 0.58
Usage: pscp [options] [user@]host:source target
pscp [options] source [source...] [user@]host:target
pscp [options] -ls [user@]host:filespec
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-p preserve file attributes
-q quiet, don't show statistics
-r copy directories recursively
-v show verbose messages
-load sessname Load settings from saved session
-P port connect to specified port
-l user connect with specified username
-pw passw login with specified password
-1 -2 force use of particular SSH protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-batch disable all interactive prompts
-unsafe allow server-side wildcards (DANGEROUS)
-sftp force use of SFTP protocol
-scp force use of SCP protocol

C:\>

可以看出 PSCP 的使用是很简单的,把常用的几个选项说一下:

  • -q 安静模式,传输文件时什么也不显示,否则会显示出文件的传输进度,默认是关闭的
  • -P port 指定服务器的 SSH 端口,注意这个是大写字母 P,默认是 -P 22,如果主机的 SSH 端口就是 22,就不用指定了
  • -l user 指定以哪个用户的身份登录主机,如果没有指定,则 PSCP 会在 PuTTY 保存的同名 Session 中获得默认的用户名称。用户名称也可以和主机名称写在一起,用 @ 分割开,比如:username@server
  • -pw passwd 指定登录时所用的口令为 passwd
  • -i keyfile 就是指定登录时所用的密钥文件
  • 最后面指定的主机名也可以是 PuTTY 中保存的 Session 名称。比如我们在 PuTTY 中保存了一个名为 foobarserver 的会话,而我们所在的网络又的确没有名为 foobarserver 的主机名称。而在这个 foobarserver 会话中保存的主机名称是 demo-server,保存的自动登录的用户是 taylor。那么用命令
    pscp c:\autoexec.bat foobarserver:backup/
    就把 本地的 c:\autoexec.bat 复制到了主机 demo-server 上的用户 taylor 所在的主目录下的 backup 子目录中(这个路径可能是 /home/taylor/backup


所以 PSCP 大致用法的例子就是:
pscp -P 22 -i c:\path\your-private-key.ppk -C username@server:/remote/path/
下面还是用一些实例来说明会比较简单一些:
把本地的 C:\path\foo.txt 复制到远程主机 192.168.6.200 的 /tmp 目录下

pscp c:\path\foo.txt 192.168.6.200:/tmp

把本地的 C:\path\foo.txt 复制到主机 192.168.6.200 的 /tmp 目录下,但是以主机上的用户 taylor 的权限执行

pscp c:\path\foo.txt taylor@192.168.6.200:/tmp

或者是

pscp -l taylor c:\path\foo.txt 192.168.6.200:/tmp

把本地的 C:\path\foo.txt 传送到主机 192.168.6.200 的 /tmp 目录下,但是主机的 SSH 端口是 3122

pscp -P 3122 c:\path\foo.txt 192.168.6.200:/tmp

把本地的 C:\path\foo.txt 复制到主机 192.168.6.200 的用户 taylor 的主目录下

pscp c:\path\foo.txt taylor@192.168.6.200:.

把主机 192.168.6.200 上的用户 taylor 主目录下的所有 *.tgz 文件拷贝到本地的 c:\backup 目录中,如果 SSH 版本是 SSH v1,那这个命令就会出错。

pscp taylor@192.168.6.200:*.tgz c:\backup

再来看看 PSFTP

在控制台执行命令 psftp -h,可以得到 psftp 的帮助

C:\>psftp -h
PuTTY Secure File Transfer (SFTP) client
Release 0.58
Usage: psftp [options] [user@]host
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-b file use specified batchfile
-bc output batchfile commands
-be don't stop batchfile processing if errors
-v show verbose messages
-load sessname Load settings from saved session
-l user connect with specified username
-P port connect to specified port
-pw passw login with specified password
-1 -2 force use of particular SSH protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-batch disable all interactive prompts

C:\>

用法与 PSCP 大同小异,虽然有个 -load 选项,其实这个没啥用,后面用主机名的时候,与 PSCP 一样直接用上会话名称就可以了。
用 PSFTP 登录到服务器上以后,操作与 FTP 差不多,这里简单的说一下吧:

  • open 登录主机
    open [username@] [port]
    比 如:
    • open taylor@demo-server 3022
      就是以用户 taylor 的身份,登陆到主机 demo-server 上,SSH 端口是 3022
    • open demo-server
      登陆 demo-server,这里的 demo-server 可以是PuTTY 中已经保存的会话名称,也可以是主机的名称,如果主机名称与会话名称相同,以会话名称为准。
  • close 关闭 SFTP 连接
    这个没啥说的,close 就关闭了 SFTP 连接
  • quit 结束本次的 SFTP 会话
    也没啥用法,就是关闭了 PSFTP 这个程序
  • help [command] 帮助
    直接打 help 就可以看到帮助指令,后面指定上 一个命令就可以查看该命令的帮助,比如: help open
  • cd [directory] 改变当前目录
  • pwd 察看当前目录
  • lcd [directory] 改变本地目录
  • lpwd 察看本地当前目录
  • get [-r] 从服务器下载一个文件/目录,这个命令不能用通配符,参数 -r 可以递归下载整个目录
  • put [-r] [dest] 把文件/目录上传到服务器,这个命令不能用通配符,参数 -r 可以递归上传整个目录
  • mget [-r] 从服务器下载一批文件/目录,可以用通配符,-r 的含义与 get 一样
  • mget [-r] [dest] 把一批文件/目录上传到服务器,可以用通配符,-r 的含义与 put 一样
  • reget [-r] 从服务器续传下载一个文件/目录,这个命令不能用通配符,-r 的含义与 get 一样
  • reput [-r] [dest] 把一批文件/目录续传上传到服务器,这个命令不能用通配符,-r 的含义与 put 一样
  • dir [directory] 列目录
  • ls 和 dir 一样
  • chmod [file|directory] 改变文件的权限,与 Unix 的 chmod 命令类似
  • del 删除文件,要注意的是 del 只能删除文件
  • rm 与 del 一样
  • mkdir 创建一个目录
  • rmdir 删除一个空目录,只有空目录才可以被删除
  • mv 改名/移动。如果源和目的都是文件或目录,则是改名。如果目的是目录的话,则是移动。
  • ! 在本地命令前加一个感叹号,就可以直接执行

其他可选的 SFTP 客户端

FileZilla : http://filezilla.sf.net
WinSCP : http://www.winscp.net

用 Plink 更方便快捷的执行远程主机上的命令

Plink 是 PuTTY 的命令行连接工具,主要用于自动化工作的处理。
直接在控制台执行 plink,可以看到 Plink 的帮助

C:\>plink
PuTTY Link: command-line connection utility
Release 0.58
Usage: plink [options] [user@]host [command]
("host" can also be a PuTTY saved session name)
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-v show verbose messages
-load sessname Load settings from saved session
-ssh -telnet -rlogin -raw
force use of a particular protocol
-P port connect to specified port
-l user connect with specified username
-batch disable all interactive prompts
The following options only apply to SSH connections:
-pw passw login with specified password
-D [listen-IP:]listen-port
Dynamic SOCKS-based port forwarding
-L [listen-IP:]listen-port:host:port
Forward local port to remote address
-R [listen-IP:]listen-port:host:port
Forward remote port to local address
-X -x enable / disable X11 forwarding
-A -a enable / disable agent forwarding
-t -T enable / disable pty allocation
-1 -2 force use of particular protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-m file read remote command(s) from file
-s remote command is an SSH subsystem (SSH-2 only)
-N don't start a shell/command (SSH-2 only)

C:\>

看上去 Plink 的使用方法、参数与PSCP、PSFTP都很类似。

  • -P port 指定服务器的 SSH 端口,注意这个是大写字母 P,默认是 -P 22,如果主机的 SSH 端口就是 22,就不用指定了
  • -l user 指定以哪个用户的身份登录主机,如果没有指定,则 PSCP 会在 PuTTY 保存的同名 Session 中获得默认的用户名称。用户名称也可以和主机名称写在一起,用 @ 分割开,比如:username@server
  • -pw passwd 指定登录时所用的口令为 passwd
  • -i keyfile 就是指定登录时所用的密钥文件
  • -m file 如果执行的命令很多的话,可以把命令写到文件中,然后用这个参数来指定

还是用一些实际的例子来说明一下 Plink 吧
还记得前面说到 PuTTY 的自动执行命令那个配置么?在说到那个配置的时候,我们演示了一个简单的 Tomcat 重新启动的命令,这个命令是要写在 PuTTY 的 Remote command 里面去。现在我们用 Plink 来实现同样的功能:
假设连接的主机是 192.168.6.200,SSH 的端口是 3022,用户是 taylor:

plink -P 3022 taylor@192.168.6.200 export CATALINA_HOME="~/apache-tomcat-5.5.17";export JAVA_HOME="~/jdk1.5.0_07";export PATH=$JAVA_HOME/bin;$PATH ; cd $CATALINA_HOME/bin;./shutdown.sh;./startup.sh;tail -f $CATALINA_HOME/logs/catalina.out

如果在 PuTTY 中保存了一个名为 192.168.6.200 的会话,注意,这个会话的名称与主机 IP 一样,在会话中已经正确保存了端口 3022,指定了默认的用户是 taylor,现在这个命令就可以简化为:

plink 192.168.6.200 export CATALINA_HOME="~/apache-tomcat-5.5.17";export JAVA_HOME="~/jdk1.5.0_07";export PATH=$JAVA_HOME/bin;$PATH ; cd $CATALINA_HOME/bin;./shutdown.sh;./startup.sh;tail -f $CATALINA_HOME/logs/catalina.out

用 date 命令查看一下主机上的时间,并且格式化输出:

plink 192.168.6.200 date "+%F %T"

大家实际执行一下命令看看,会发现,这个命令并没有返回我们期望的结果,而是返回了一个错误:

C:\>plink 192.168.6.200 date "+%F %T"
date: too many non-option arguments: %T
Try `date --help' for more information.

可是在服务器上直接执行命令 date "+%F %T",的确是正确无误的,哪里出了问题呢?这是因为Windows的控制台会把两个双引号之间的字符串作为一个参数传递给被执行的程序,而不会把双引号 也传递给程序。我们做这样一个小小的实验来说明一下这个问题:
比如在 c:\tmp 文件夹里建立三个文件夹,名称分别为:"foo"、"bar"、"foo bar"。然后在 foo 这个文件夹里面建立一个名为“foo.log”的空文件,在“bar”这个文件夹里建立一个名为“bar.log”的空文件,在“foo bar”这个文件夹里建立一个名为“foo-bar.log”的空文件。
然后在控制台下进入 c:\tmp 这个文件夹,执行如下命令:

dir foo bar

结果是列出“foo bar”这个文件夹里的内容,还是分别列出“foo”和“bar”文件夹里的东西呢?正确答案是后者。
要想正确列出 “foo bar”文件夹里的东西,就需要用双引号把"foo bar"引起来

C:\tmp>dir foo bar
Volume in drive C is System
Volume Serial Number is 9C51-A51C

Directory of C:\tmp\foo

2006-11-22 09:48 .
2006-11-22 09:48 ..
2006-11-16 11:58 0 foo.log
1 File(s) 0 bytes

Directory of C:\tmp\bar

2006-11-22 09:48 .
2006-11-22 09:48 ..
2006-11-16 11:58 0 bar.log
1 File(s) 0 bytes
2 Dir(s) 1,107,345,408 bytes free

C:\tmp>dir "foo bar"
Volume in drive C is System
Volume Serial Number is 9C51-A51C

Directory of C:\tmp\foo bar

2006-11-22 09:48 .
2006-11-22 09:48 ..
2006-11-16 11:58 0 foo-bar.log
1 File(s) 0 bytes
2 Dir(s) 1,107,345,408 bytes free

C:\tmp>

说到这里,就会明白上面的那个命令 plink 192.168.6.200 date "+%F %T" 其实在主机上执行的真实命令是 date +%F %T,而不是命令行中指定的 date "+%F %T"。不过还好,Windows 的控制台可不认得单引号,所以上面那个命令的正确用法应该是:

c:\>plink 192.168.6.200 date '+%F %T'
2006-11-22 09:39:57

我经常需要登录到服务器上把 ADSL 重新拨号,可以把下面的命令写到一个文本文件中,比如保存到了 C:\adsl-restart.command.txt

echo "stoping..."
/sbin/adsl-stop
echo "starting..."
/sbin/adsl-start
echo "done."
/sbin/adsl-status

然后执行如下命令:

plink -m c:\adsl-restart.command.txt root@192.168.6.251

我经常要查看 Tomcat 的运行日志

plink taylor@192.168.6.200 tail -f ~/apache-tomcat-5.5.17/logs/catalina.out

每天都要看服务器上的剩余空间,就用这个命令:

plink taylor@192.168.6.200 df -k

假设 www.chaifeng.com 连接着另外一个网段 10.204.26.0,有台内网IP 为 10.204.26.21 的 Solaris 8主机只能用 telnet 登录,为了防止被监听,我们可以用 Plink 建立一个隧道,隧道开放 120 秒钟,如果隧道没有被使用,就自动断开连接,然后我们在本地就可以用命令 telnet localhost 2623 的安全登录那台 Solaris 8 主机了。

plink -L 2623:10.204.26.21:23 www.chaifeng.com sleep 120

在主机 www.chaifeng.com 上正在运行着 tor,默认的监听地址是 127.0.0.1:9050,用 Plink 建立一个隧道,然后浏览器上配置代理服务器为 127.0.0.1,端口是 9050,这样就能够安全的使用 tor 代理了,不用担心从我们的机器到主机 www.chaifeng.com 有被监听的可能了。

plink -C -N -L 9050:127.0.0.1:9050 taylor@www.chaifeng.com

结合上 PSCP 我们还可以完成文件的每天备份

plink taylor@192.168.6.200 tar jcf $(date '+documents.%F.tar.bz2') ~/documents
pscp taylor@192.168.6.200:$(date '+documents.%F.tar.bz2') c:\backup\
plink taylor@192.168.6.200 rm -f $(date '+documents.%F.tar.bz2')

如果把这些常用的操作写成批处理文件,到时候要重启一下 Tomcat,或者马上察看一下 Tomcat 日志,再或者只是要把 ADLS 重新拨号以下,只需要用鼠标一双击这个批处理文件,稍等一下就自动完成了。不比你打开 PuTTY,登录到服务器上,然后再一个一个的执行命令,最后还得注销来的方便快捷么?再

2009年5月11日星期一

聚合物锂离子电池

聚合物锂离子电池的特点概述
  根据锂离子电池所用电解质材料不同,锂离子电池可以分为液态锂离子电池(lithium ion battery, 简称为LIB)和聚合物锂离子电池(polymer lithium ion battery, 简称为LIP)两大类。聚合物锂离子电池所用的正负极材料与液态锂离子都是相同的,电池的工作原理也基本一致。它们的主要区别在于电解质的不同, 锂离子电池使用的是液体电解质, 而聚合物锂离子电池则以固体聚合物电解质来代替, 这种聚合物可以是“干态”的,也可以是“胶态”的,目前大部分采用聚合物胶体电解质。聚合物锂离子电池可分为三类:
  (1)固体聚合物电解质锂离子电池。电解质为聚合物与盐的混合物,这种电池在常温下的离子电导率低,适于高温使用。
  (2)凝胶聚合物电解质锂离子电池。即在固体聚合物电解质中加入增塑剂等添加剂,从而提高离子电导率,使电池可在常温下使用。
  (3)聚合物正极材料的锂离子电池。采用导电聚合物作为正极材料,其比能量是现有锂离子电池的3倍,是最新一代的锂离子电池。由于用固体电解质代替了液体电解质,与液态锂离子电池相比,聚合物锂离子电池具有可薄形化、任意面积化与任意形状化等优点,也不会产生漏液与燃烧爆炸等安全上的问题,因此可以用铝塑复合薄膜制造电池外壳,从而可以提高整个电池的比容量;聚合物锂离子电池还可以采用高分子作正极材料,其质量比能量将会比目前的液态锂离子电池提高50%以上。此外,聚合物锂离子电池在工作电压、充放电循环寿命等方面都比锂离子电池有所提高。基于以上优点,聚合物锂离子电池被誉为下一代锂离子电池。 聚合物锂离子(Lithium ion polymer)电池,具有更高能量密度、小型化、薄型化、轻量化、高安全性、长循环寿命与低成本的新型电池。因此,在未来2~3年内,聚合物锂电池取代锂离子电池市场的份额将达50%。
  第一 原理篇
  锂离子电池目前有液态锂离子电池(LIB)和聚合物锂离子电池(PLIB)两类。其中,液态锂离子电池是指Li+嵌入化合物为正、负极的二次电池。正极采用锂化合物LiCoO2,LiNiO2或LiMn2O4,负极采用锂—碳层间化合物LixC6,典型的电池体系为:
  (-) C LiPF6—EC+DEC LiCoO2 (+)
  正极反应:LiCoO2=Li1-xCoO2+xLi++xe- ----------- (2.1)
  负极反应:6C+xLi++xe-=LixC6 ----------- (2.2)
  电池总反应:LiCoO2+6C=Li1-xCoO2+LixC6 ----------- (2.3)
  聚合物锂离子电池的原理与液态锂相同,主要区别是电解液与液态锂不同。电池主要的构造包括有正极、负极与电解质三项要素。所谓的聚合物锂离子电池是说在这三种主要构造中至少有一项或一项以上使用高分子材料做为主要的电池系统。而在目前所开发的聚合物锂离子电池系统中,高分子材料主要是被应用于正极及电解质。正极材料包括导电高分子聚合物或一般锂离子电池所采用的无机化合物,电解质则可以使用固态或胶态高分子电解质,或是有机电解液,一般锂离子技术使用液体或胶体电解液,因此需要坚固的二次包装来容纳可燃的活性成分,这就增加了重量,另外也限制了尺寸的灵活性。而聚合物锂离子工艺中没有多余的电解液,因此它更稳定,也不易因电池的过量充电、碰撞或其他损害、以及过量使用而造成危险情况。
  新一代的聚合物锂离子电池在形状上可做到薄形化(ATL电池最薄可达0.5毫米,相于一张卡片的厚度)、任意面积化和任意形状化,大大提高了电池造型设计的灵活性,从而可以配合产品需求,做成任何形状与容量的电池,为应用设备开发商在电源解决方案上提供了高度的设计灵活性和适应性,以最大化地优化其产品性能。同时,聚合物锂离子电池的单位能量比目前的一般锂离子电池提高了50%,其容量、充放电特性、安全性、工作温度范围、循环寿命(超过500 次)与环保性能等方面都较锂离子电池有大幅度的提高。
  聚合物锂离子的发展趋势展望
  聚合物锂离子电池在全球技术成熟并商业化已经2年多时间了,虽然销量在快速增长,但其市场份额尚低于10%,与液态锂电90%的市场份额无法相比,大大低于人们的预期。由于各种原因,目前市场上聚合物的价格普遍要高于液态锂电,但是,由于移动电器的竞争模式正在悄悄地发生变化,特别是聚合物电池给移动电器带来的设计价值创新(如4mm厚度以下的优越性能、大型规格电池),聚合物电池正被越来越多的手机、移动DVD等设计人员所认识,因而聚合物厂商还是信心十足,坚信聚合物的时代一定会到来。可以从手机的发展看聚合物锂离子电池的发展趋势。目前手机有以下几个发展趋势:
  (1) 手机本身向小型化、超薄化方向发展,以方便消费者的携带;
  (2) 手机设计的个性化,表现在设计理念已经不再是原来方方正正的形状,不规则形状、曲线、弧面设计造型成为手机设计美学化的主流;
  (3) 使用彩屏、手机功能的不断增加。为了使手机小型化,电池减小、减薄是一个最有效的途径。4mm以下厚度电池有成为薄型手机配置的主流趋势,从性价比来讲,这是聚合物的特长。不规则形状、曲线、弧面设计造型的手机给电池留下的有效空间变成了不规则形状。液态的长方型不能有效利用空间,容量较低,而叠片式聚合物可以将这种不规则空间最有效地利用起来,使容量放大。最近TCL金能公司推出的圆弧型电池、梯形电池、背包电池能使手机比使用相应规格的液态电池容量增加50%以上。手机功能越来越多,导致耗电越来越多。要求电池容量相应地增加。在不增加电池厚度的情况下,聚合电池是有明显优势的。与此相似,笔记本电脑、蓝牙耳机、小灵通手机、移动DVD等电器都在向移动、便携化方向发展,都配上了液晶显示,而且功能在不断增多,液晶屏幕在不断增大。这些都给聚合物锂离子电池提供了无限的商机。

锂离子电池-锂电池-锂聚合物电池

锂是一种金属元素,其化学符号为Li(其英文名为lithium),是一种银白色、十分柔软、化学性能活泼的金属,在金属中是最轻的。它除了应用于原子能工业外,可制造特种合金、特种玻璃(电视机上用的荧光屏玻璃)及锂电池。在锂电池中它用作电池的阳极。
锂电池也分成两大类:不可充电的及可充电的两类。不可充电的电池称为一次性电池,它只能将化学能一次性地转化为电能,不能将电能还原回化学能(或者还原性能极差)。而可充电的电池称为二次性电池(也称为蓄电池)。它能将电能转变成化学能储存起来,在使用时,再将化学能转换成电能,它是可逆的,如电能化学能锂电池的主要特点。
灵巧型便携式电子产品要求尺寸孝重量轻,但电池的尺寸及重量与其它电子元器件相比往往是最大的及最重的。例如,想当年的“大哥大”是相当“粗大、笨重”,而今天的手机是如此的轻巧。其中电池的改进是起了重要作用的:过去是镍镉电池,现在是锂离子电池。
锂电池的最大特点是比能量高。什么是比能量呢?比能量指的是单位重量或单位体积的能量。比能量用Wh/kg或Wh/L来表示。Wh是能量的单位,W是瓦、h 是小时;kg是千克(重量单位),L是升(体积单位)。这里举一个例来说明:5号镍镉电池的额定电压为1.2V,其容量为800mAh,则其能量为 0.96Wh(1.2V×0.8Ah)。同样尺寸的5号锂-二氧化锰电池的额定电压为3V,其容量为1200mAh,则其能量为3.6Wh。这两种电池的体积是相同的,则锂-二氧化锰电池的比能量是镍镉电池的375倍!
一节5号镍镉电池约重23g,而一节5号锂-二氧化锰电池约重18g。一节锂-二氧化锰电池为3V,而两节镍镉电池才2.4V。所以采用锂电池时电池数量少(使便携式电子产品体积减孝重量减轻),并且电池的工作寿命长。
另外,锂电池具有放电电压稳定、工作温度范围宽、自放电率低、储存寿命长、无记忆效应及无公害等优点。
锂电池的缺点是价格昂贵,所以目前尚不能普遍应用,主要应用于掌上计算机、PDA、通信设备、照相机、卫星、导弹、鱼雷、仪器等。随着技术的发展、工艺的改进及生产量的增加,锂电池的价格将会不断地下降,应用上也会更普遍。
不可充电的锂电池
不可充电的锂电池有多种,目前常用的有锂-二氧化锰电池、锂—亚硫酰氯电池及锂和其它化合物电池。本文仅介绍前两种最常用的。 1、锂-二氧化锰电池(LiMnO2) 锂-二氧化锰电池是一种以锂为阳极、以二氧化锰为阴极,并采用有机电解液的一次性电池。该电池的主要特点是电池电压高,额定电压为3V(是一般碱性电池的2 倍);终止放电电压为2V;比能量大(见上面举的例子);放电电压稳定可靠;有较好的储存性能(储存时间3年以上)、自放电率低(年自放电率≤2%);工作温度范围-20℃~+60℃。
该电池可以做成不同的外形以满足不同要求,它有长方形、圆柱形及纽扣形(扣式)。圆柱形的也有不同的直径及高度尺寸。这里列举大家较熟悉的1#(尺寸代码D)、2#(尺寸代码C)及5#(尺寸代码AA)电池的主要参数。
CR表示为圆柱形锂-二氧化锰电池;五位数字中,前两位表示电池的直径,后三位表示带一位小数的高度。例如,CR14505,其直径为14mm,高度为505mm(这种型号是通用的)。
这里要指出的是不同工厂生产的同型号的电池其参数可能有些差别。另外,标准放电电流值是较小的,实际放电电流可以大于标准放电电流,并且连续放电及脉冲放电的允许放电电流也不同,由电池厂提供有关数据。例如,力兴电源公司生产的CR14505给出最大连续放电电流为1000mA,最大脉冲放电电流可达 2500mA。
照相机中用的锂电池多半是锂-二氧化锰电池。这里将照相机中常用的锂-二氧化锰电池列入表2,供参考。
纽扣式(扣式)电池尺寸较小,其直径为12.5~24.5mm,高度为1.6~5.0mm。几种较常用的扣式电池如表3所示。
CR为圆柱形锂-二氧化锰电池,后四位数字中前两位为电池的直径尺寸,后两位为带小数点的高度尺寸。例如,CR1220的直径为12.5mm(不包括小数点后的数),其高度为2.0mm。这种型号表示方法是国际通用的。
这种扣式电池常用于时钟、计算器、电子记事本、照相机、助听器、电子游戏机、IC卡、备用电源等。
2、锂-亚硫酰氯电池(LiSOCl2)
锂-亚硫酰氯电池是比能量最高的一种,目前可达到500Wh/kg或1000Wh/L的水平。它的额定电压是3.6V,以中等电流放电时具有极其平坦的 3.4V放电特性(可在90%容量范围内平坦地放电,保持不大的变化)。电池可以在-40℃~+85℃范围内工作,但在-40℃时的容量约为常温容量的 50%。自放电率低(年自放电率≤1%)、储存寿命长达10年以上。
以1#(尺寸代码D)镍镉电池与1#锂-亚硫酰氯电池的比能量作一个比较:1#镍镉电池的额定电压为1.2V,容量为5000mAh;1#锂-亚硫酰氯的额定电压为3.6V,容量为10000mAh,则后者的比能量比前者大6倍!
应用注意事项
上述两种锂电池是一次性电池,不可充电(充电时有危险!);电池正负极之间不可短路;不可以过大电流放电(超过最大放电电流放电);电池使用至终止放电电压时,应从电子产品中及时取出;用完的电池不可挤压、焚烧及拆卸;不可超过规定温度范围使用。
由于锂电池的电压高于普通电池或镍镉电池,使用时不要搞错以免损坏电路。通过熟悉型号中的CR、ER就可以知道它的种类及额定电压。在购买新电池时,一定要按原来的型号来买,否则会影响电子产品性能。
二次锂电池的优势是什幺? 1. 高的能量密度 2. 高的工作电压 3. 无记忆效应 4. 循环寿命长 5. 无污染 6. 重量轻 7. 自放电小
锂聚合物电池具有哪些优点? 1. 无电池漏液问题,其电池内部不含液态电解液,使用胶态的固体。 2. 可制成薄型电池:以3.6V400mAh的容量,其厚度可薄至0.5mm。 3. 电池可设计成多种形状 4. 电池可弯曲变形:高分子电池最大可弯曲900左右 5. 可制成单颗高电压:液态电解质的电池仅能以数颗电池串联得到高电压,高分子电池由于本身无液体,可在单颗内做成多层组合来达到高电压。 7. 容量将比同样大小的锂离子电池高出一倍
什么是二次电池的自放电不同类型电池的自放电率是多少? 自放电又称荷电保持能力,它是指在开路状态下,电池储存的电量在一定环境条件下的保持能力。一般而言,自放电主要受制造工艺,材料,储存条件的影响自放电是衡量电池性能的主要参数之一。一般而言,电池储存温度越低,自放电率也越低,但也应注意温度过低或过高均有可能造成电池损坏无法使用,BYD常规电池要求储存温度范围为-20~45。电池充满电开路搁置一段时间后,一定程度的自放电属于正常现象。IEC标准规定镍镉及镍氢电池充满电后,在温度为20度湿度为65%条件下,开路搁置28天,0.2C放电时间分别大于3小时和3小时15分即为达标。 与其它充电电池系统相比,含液体电解液太阳能电池的自放电率明显要低,在25下大约为10%/月。
什么是电池的内阻怎样测量? 电池的内阻是指电池在工作时,电流流过电池内部所受到的阻力,一般分为交流内阻和直流内阻,由于充电电池内阻很小,测直流内阻时由于电极容量极化,产生极化内阻,故无法测出其真实值,而测其交流内阻可免除极化内阻的影响,得出真实的内值. 交流内阻测试方法为:利用电池等效于一个有源电阻的特点,给电池一个1000HZ,50mA的恒定电流,对其电压采样整流滤波等一系列处理从而精确地测量其阻值.
什么是电池的内压电池正常内压一般为多少? 电池的内压是由于充放电过程中产生的气体所形成的压力.主要受电池材料制造工艺,结构等使用过程因素影响.一般电池内压均维持在正常水平,在过充或过放情况下,电池内压有可能会升高: 如果复合反应的速度低于分解反应的速度,产生的气体来不及被消耗掉,就会造成电池内压升高.
什么是内压测试? 锂电池内压测试为:(UL标准) 模拟电池在海拔高度为15240m的高空(低气压11.6kPa)下,检验电池是否漏液或发鼓. 具体步骤:将电池1C充电恒流恒压充电到4.2V,截止电流10mA ,然后将其放在气压为11.6Kpa,温度为(20+_3)的低压箱中储存6小时,电池不会爆炸,起火,裂口,漏液.
环境温度对电池性能有何影响? 在所有的环境因素中,温度对电池的充放电性能影响最大,在电极/电解液界面上的电化学反应与环境温度有关,电极/电解液界面被视为电池的心脏。如果温度下降,电极的反应率也下降,假设电池电压保持恒定,放电电流降低,电池的功率输出也会下降。如果温度上升则相反,即电池输出功率会上升,温度也影响电解液的传送速度温度上升则加快,传送温度下降,传送减慢,电池充放电性能也会受到影响。但温度太高,超过45,会破坏电池内的化学平衡,导致副反应
过充电的控制方法有哪些? 为了防止电池过充,需要对充电终点进行控制,当电池充满时,会有一些特别的信息可利用来判断充电是否达到终点。一般有以下六种方法来防止电池被过充: 1. 峰值电压控制:通过检测电池的峰值电压来判断充电的终点; 2. dT/dt控制:通过检测电池峰值温度变化率来判断充电的终点; 3. T控制:电池充满电时温度与环境温度之差会达到最大; 4. -V控制:当电池充满电达到一峰值电压后,电压会下降一定的值 5. 计时控制:通过设置一定的充电时间来控制充电终点,一般设定要充进130%标称容量所需的时间来控制; 6. TCO控制:考虑电池的安全和特性应当避免高温(高温电池除外)充电,因此当电池温度升高60时应当停止充电。
什么是过充电对电池性能有何影响? 过充电是指电池经一定充电过程充满电后,再继续充电的行为。 由于在设计时,负极容量比正极容量要高,因此,正极产生的气体透过隔膜纸与负极产生的镉复合。故一般情况下,电池的内压不会有明显升高,但如果充电电流过大,或充电时间过长,产生的氧气来不及被消耗,就可能造成内压升高,电池变形,漏液,等不良现象。同时,其电性能也会显着降低。
什么是过放电对电池性能有何影响? 电池放完内部储存的电量,电压达到一定值后,继续放电就会造成过放电,通常根据放电电流来确定放电截止电压。0.2C-2C放电一般设定1.0V/支,3C 以上如5C或10C放电设定为0.8V/支,电池过放可能会给电池带来灾难性的后果,特别是大电流过放,或反复过放对电池影响更大。一般而言,过放电会使电池内压升高,正负极活性物质可逆性受到破坏,即使充电也只能部分恢复,容量也会有明显衰减。
不同容量的电池组合在一起使用会出现什幺问题? 如果将不同容量或新旧电池混在一起使用,有可能出现漏液,零电压等现象。这是由于充电过程中,容量差异导致充电时有些电池被过充,有些电池未充满电,放电时有容量高的电池未放完电,而容量低的则被过放。如此恶性循环,电池受到损害而漏液或低(零)电压。
什么是电池的爆炸怎样预防电池爆炸? 电池内的任何部分的固态物质瞬间排出,被推至离电池25cm以上的距离,称为爆炸。判别电池爆炸与否,采用下述条件实验。将一网罩住实验电池,电池居于正中,距网罩任何一边为25cm。网的密度为6-7根/cm,网线采用直径为0.25mm的软铝线,如果实验无固体部分通过网罩,证明该电池未发生爆炸。 锂电池串联问题
由于电池在生产过程中,从涂膜开始到成为成品要经过很多道工序。即使经过严格的检测程序,使每组电源的电压、电阻、容量一致,但使用一段时间,也会产生这样或那样的差异。如同一位母亲生的双胞胎,刚生下时可能长得一模一样,做为母亲都很难分辨。然而,在两个孩子不断成长时,就会产生这样或那样的差异锂动力电池也是这样。使用一段时间产生差异后,采用整体电压控制的方式是难以适用于锂动力电池的,如一个36V的电池堆,必须用10只电池串联。整体的充电控制电压是42V,而放电控制电压是26V。用整体电压控制方式,初始使用阶段由于电池一致性特别好,也许不会出现什么问题。在使用一段时间以后电池内阻和电压产生波动,形成不一致的状态,(不一致是绝对的,一致性是相对的)这种时候仍然使用整体电压控制是不能达到其目的的。例如10只电池放电时其中两只电池的电压在2.8V,四只电池的电压是3.2V,四只是3.4V,现在的整体电压是32V,我们让它继续放电一直工作到26V。这样,那两只2.8V的电池就低于2.6V 处于了过放状态。锂电池几次过放就等于报废。反之,用整体电压控制充电的方式进行充电,也会出现过充的状况。比如用上述10只电池当时的电压状态进行充电。整体电压达到42V时,那两只2.8V的电池处于\"饥饿\"的状态,而迅速吸收电量,就会超过4.2V,而过充的超过4.2V的电池,不仅由于电压过高产生报废,甚至还会发生危险,这就是锂动力电池的特性。
锂离子电池的额定电压为3.6V(有的产品为3.7V)。充满电时的终止充电电压与电池阳极材料有关:阳极材料为石墨的4.2V;阳极材料为焦炭的4.1V。不同阳极材料的内阻也不同,焦炭阳极的内阻略大,其放电曲线也略有差别,如图1所示。一般称为4.1V锂离子电池及4.2V锂离子电池。现在使用的大部分是4.2V的,锂离子电池的终止放电电压为 2.5V~2.75V(电池厂给出工作电压范围或给出终止放电电压,各参数略有不同)。低于终止放电电压继续放电称为过放,过放对电池会有损害。
便携式电子产品以电池作为电源。随着便携式产品的迅猛发展,各种电池的用量大增,并且开发出许多新型电池。除大家较熟悉的高性能碱性电池、可充电的镍镉电池、镍氢电池外,还有近年来开发的锂电池。本文主要介绍有关锂电池的基本知识。这包括它的特性、主要参数、型号的意义、应用范围及使用注意事项等。

2009年4月22日星期三

使用Excel分析MySQL数据

即使当今时代我们拥有了类似微软水晶报表之类的强大报表工具和其他一些灵活的客户管理应用工具,众多企业在分析诸如销售统计和收入信息的时候,微软的Excel依然是最常用的工具。这当然不是没有理由的:Excel以其强大丰富的各种功能,已经成为办公环境中不可或缺的工具。  然而,现在公司正在逐渐地将数据开始存储在远程数据库中,这样可以供企业员工从不同的地方来阅读和修改数据。但是,以前固有的工作流程习惯是很难打破的。当你的老板需要从远端使用Excel以饼图的形势来看一下最近的销售数据的时候,你该怎么办?  或许你没有想到,你可以将Excel连接到一个数据库,而且不仅仅限于微软的SQL Server。实际上Excel可以连接到所有的主流数据库,诸如MySQL、PostgreSQL和Oracle等等,只要该数据库提供ODBC驱动就可以。在本文中,我们将以MySQL为例,来了解如何将Excel连接到MySQL。  安装MyODBC  ODBC提供了一种执行几乎所有常规任务的标准方式,诸如数据恢复、删除和选择,这意味着针对不同的数据库,要编写不同的驱动程序来将用户的命令解释成标准的ODBC标准。MySQL早就有一个特定的ODBC驱动可用,也就是我们所熟知的MyODBC。在每一台你想使用Excel连接到MySQL的计算机上,你都需要安装MyODBC驱动。  那么,现在首先来下载MyODBC安装程序(http://dev.mysql.com/downloads/connector/odbc)。该安装包只有2.3M,如果你是宽带连接的话,下载应该很快就完成。  一旦你完成下载MyODBC后,点击图标开始安装。如果你没有特殊的安装要求,选择典型安装即可。点击安装按钮开始安装,安装完成后点击完成按钮推出安装程序。 配置MyODBC   如果你的操作系统是Windows XP的话,你可以按照如下方式打开ODBC终端:开始菜单-设置-控制面板-管理工具-数据源(ODBC)。QL/200805/10020.htmcn/data/MySQL/200805/10020.htm 图1、ODBC数据源管理器


  点击“Add(增加)”按钮来增加一个新的数据源,并滚动滑动条直到你发现MySQL ODBC驱动项为止。双击该项,开始配置过程。配置窗口如下图所示

图2、增加MySQL数据源

填上各个选项后,点击“Test(测试)”按钮,确认该驱动是否能够与MySQL进行连接。如果你的数据库服务器与Excel在同一台机器的话,使用“localhost”或“127.0.0.1”作为服务器地址的话,有可能不会生效。那么,你可以使用一个点作为服务器地址,这样该驱动使用命名通道而不是TCP/IP来连接数据库。如果你要连接到远端的数据库,那么别忘了确保防火墙是否阻挡了你与MySQL连接的端口(通常是3306)。最后,不要忘了使用一个现有的合法登录帐号。如果你需要做的不仅仅是读取数据,还需要插入和更新数据,那么要注意登录的帐号要具有相应的权限。  一旦测试连接成功后,点击“OK(确认)”按钮,就将在已存在的数据源列表中多一条。接下来,我们将连接Excel到MySQL。  连接Excel到MySQL  为了做这个练习,我们将连接Excel到一个名为contacts的MySQL表,其中包含全国范围内的不同合作伙伴和相关个人的联系信息。该MySQL表结构如下:
create table contacts (rowid smallint unsigned not null auto_increment,
firstname varchar(20) not null,
lastname varchar(30) not null,
email varchar(55) not null,
title varchar(20) not null,
company varchar(30) not null,phone char(10) not null,
revenue decimal(5,2) not null,
primary key(rowid));   
我已经在这些表中填充了一些示例数据,你将不久在Excel中看到它们。为了从Excel中管理这些数据,按如下操作:  
1、打开Excel,转到菜单上的“数据”,然后选择导入外部数据,导入数据。  
2、从出现的窗口中,选择“连接到新数据源.odc”。  
3、一个标题为“欢迎使用数据连接向导”的窗口出现,从这个窗口中选择“ODBC DSN”。  4、从标题为“连接到ODBC数据源”的窗口中,选择你刚才创建的MySQL ODBC数据源。  5、从标题为“选择数据库和表”的窗口中,选择相应的你要连接的数据库和表,如图3所示,选择好表后,点击下一步。  
6、在标题为“保存数据连接文件并结束”的最后一个窗口中,选择结束按钮。  
7、你将被询问在什么地方存储这个数据,你可以选择一个已有的工作表或者指定创建一个新的工作表中。选择后点击确认(OK)按钮。


图3、连接到一个指定的数据库和表如果一切顺利的话,你所需要的信息将会显示在Excel中,如图4所示。




图4、在Excel中查看contacts数据库这样,用户就可以开始自由的创建各种图表了。例如,创建一个饼图是小菜一碟的事情,如图5所示。


图5、每一个联系人的收入饼图如果你需要的数据跨表的话,你可以尝试在数据库建立一个视图,然后使用Excel连接该视图。MySQL的MyODBC驱动为客户将数据库连接到不同的客户端应用程序敞开了一扇大门。我希望这篇短文能让你举一反三,实现类似的操作。

2009年4月20日星期一

锌锰电池型号命名与标识-结构与特点



1号碱性电池
结构与特点
1.圆柱型锌锰电池 圆柱型锌锰电池就隔离物的不同可分为糊式电池和纸板电池。糊式电池即普通型锌锰电池,纸板电池因其配方组成的差异引起电性能的不同,又分为C型(或称铵型)纸板电池(又称高容量电池)和P型(或称锌型)纸板电池(又称高功率电池)。 糊式电池即传统的锌锰干电池,其正极材料采用活性较低的天然二氧化锰,隔离物是淀粉和面粉的浆糊隔离层,电解液是以H4CL为主的氯化铵、氯化锌水溶液,负极是锌筒,其放电性能一般较差,容量较低,电池使用末期易漏液,但价格便宜,多适用于小电流和间歇放电的场合,如用于收音机、手电筒等。 C型纸板电池是在糊式电池的基础上用浆层纸代替了浆糊纸,不但正极填充量提高30%左右,而且用30-70%的高活性锰代替了天然锰,所以容量得以提高,使用范围得以扩大,多用于小电流放电场合,如用于钟表、遥控器、收音机、手电筒等场合。 P型纸板电池采用氯化锌为主的电解液,正极材料全部采用高活性的锰粉,如电解锰、活性锰等,其防漏性能远高于糊式和C型电池,多用于大电流连续放电场合,如用于照相机、闪光订、收录机、剃须刀、电动玩具等。
2.圆柱型碱性锌锰干电池 圆柱型碱性锌锰电池,又称碱锰电池,俗称碱性电池,是锌锰电池系列中性能最优的品种。其外壳一般由08F镀镍钢带经冷轧冲压制成,同时兼作正极集流体,电解二氧化锰正极材料压成圆环紧贴在柱体内壁,以保证良好的接触,其负极采用粉状锌粒并制成膏剂,处于电池的中间,其间插入负极集流体(负极一般为铜钉),集流体与负极底部相连,在电池内部,正极间用隔膜(隔离层)隔开,其外部用尼龙或聚丙烯密封圈隔开,同时实现电池的密封,电池外部与一般电池几乎相同。 虽然圆柱型碱性锌锰电池的公称电压与普通电池的相同,均为1.5伏,但由于碱性电池在结构上采用于普通电池相反的电极结构,增大了正负极间的相对面积,而且用高导电性的氢氧化钾溶液替代了氯化铵、氯化锌溶液,负极锌也由片状改变成粒状,增大了负极的反应面积,加之采用了高性能的电解锰粉,所以电性能得以很大提高,一般的,同等型号的碱锰电池是普通电池的容量和放电时间的3-7倍,低温性能两者差距更大,碱锰电池更适用于大电流连续放电和要求高的工作电压的用电场合,特别适用于照相机、闪光订、剃须刀、导电玩具、CD机、大功率遥控器等。