2010年7月22日星期四

unicode(转)

Unicode

ISO10646/Unicode规定了一套字符集,包含了世界上的大多数字符,规定了这些字符的编码,每个编码可以理解为一个数字。例如:汜,它对应的编码如果用十进制表示,就是27740。

unicode只规定了字符集,只规定了1对应的是什么字符,2对应的是什么字符。至于传输和存储,各个系统必须自己实现。在计算机领域里,一般使用UTF-8,UTF-16,UTF-32三种传输和存储格式。我们也可以说:unicode是定义,而utf-8等是具体实现。

目录

[隐藏]

范围

  • Plane 0 (0000–FFFF),这个范围被称为Basic Multilingual Plane (BMP),包含了65536个字符,目前全世界的人类文字和字符都被定义在这个范围里。其中大部分是中日韩字符。
  • Plane 1 (10000–1FFFF): Supplementary Multilingual Plane (SMP).
  • Plane 2 (20000–2FFFF): Supplementary Ideographic Plane (SIP)
  • Planes 3 to 13 (30000–DFFFF) are unassigned
  • Plane 14 (E0000–EFFFF): Supplementary Special-purpose Plane (SSP)
  • Plane 15 (F0000–FFFFF) reserved for the Private Use Area (PUA)
  • Plane 16 (100000–10FFFF), reserved for the Private Use Area (PUA)

BOM

UTF-8之BOM含义,UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行

UTF-8

UTF-8是一种兼容ascii的unicode传输存储格式。根据字符编码的范围不同而使用不一样的存储方式和长度。 下面这个表里,字段1表示Unicode编码范围(十六进制),字段2表示编码所使用的存储方式(二进制),或许称为模板更为形象。字段2其实也表示了一个字符在计算机里存储所用的bits。

0000-007F | 0xxxxxxx 0080-07FF | 110xxxxx 10xxxxxx 0800-FFFF | 1110xxxx 10xxxxxx 10xxxxxx 10000-10FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 

例如字符“汜”,在unicode里的编码为十六进制的6C5C,范围在0800-FFFF之间,所以取模板1110xxxx 10xxxxxx 10xxxxxx(也就是说,“汜”为三字节的宽字符),“汜”的编码换算成二进制(0110110001011100)后代入模板,得1110[0110] 10[110001] 10[011100]。中括号里的数字,连接起来就是该字符的unicode编码的二进制表示。

再例如字符“@”,在uinicode里的编码是十进制的64,范围在0000-007F之间,所以取模板0xxxxxxx。“@”的编码换算成二进制(1000000)后代入模板,得0[1000000]。它在计算机里的存储方式和ascii的“@”是一样的。这就是为什么utf-8是兼容ascii的原因。

UTF-16

UTF-16是一个不兼容ascii的unicode传输存储格式,一个utf-16字符在BMP里总是两字节的,也就是16个bits的。例如字符“@”,它的unicode编码的二进制表示是1000000,在高位补满16个0,得0000000001000000,这就是“@”unicode编码的UTF-16的二进制表示了。因为UTF-16不兼容ascii,而在计算机的世界里存在着大量以ascii方式存储的数据,所以,现在UTF-16并没有在文本处理领域里得到广泛使用。因为UTF-16在BMP总是两个字节,所以比起UTF-8,在存储中日韩字符的时候,相同的文本,需要的存储空间比较少。但是存储英文资料的时候,则比UTF-8需要更多的存储空间。

2010年7月14日星期三

linux基础之教你如何查看linux版本(转)

转:http://dev.firnow.com/course/6_system/linux/Linuxjs/20090315/161658.html
如何得知自己正在使用的linux是什么版本呢,下面的几种方法将给你带来答案!

  1. 查看内核版本命令:

  1) [root@q1test01 ~]# cat /proc/version

   Linux version 2.6.9-22.ELsmp (bhcompile@crowe.devel.redhat.com) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Mon Sep 19 18:00:54 EDT 2005

  2) [root@q1test01 ~]# uname -a
  Linux q1test01 2.6.9-22.ELsmp #1 SMP Mon Sep 19 18:00:54 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux

  3) [root@q1test01 ~]# uname -r

  2.6.9-22.ELsmp

  2. 查看linux版本:

  1) 登录到服务器执行 lsb_release -a ,即可列出所有版本信息,例如:

  [root@3.5.5Biz-46 ~]# [root@q1test01 ~]# lsb_release -a

  LSB Version: :core-3.0-amd64:core-3.0-ia32:core-3.0-noarch:graphics-3.0-amd64:graphics-3.0-

  ia32:graphics-3.0-noarch

  Distributor ID: RedHatEnterpriseAS

  Description: Red Hat Enterprise Linux AS release 4 (Nahant Update 2)

  Release: 4

  Codename: NahantUpdate2

  注:这个命令适用于所有的linux,包括Redhat、SuSE、Debian等发行版。

  2) 登录到linux执行cat /etc/issue,例如如下:

  [root@q1test01 ~]# cat /etc/issue

  Red Hat Enterprise Linux AS release 4 (Nahant Update 2)

  Kernel \r on an \m

  3) 登录到linux执行cat /etc/redhat-release ,例如如下:

  [root@q1test01 ~]# cat /etc/redhat-release

  Red Hat Enterprise Linux AS release 4 (Nahant Update 2)

  注:这种方式下可以直接看到具体的版本号,比如 AS4 Update 1

  4)登录到linux执行rpm -q redhat-release ,例如如下:

  [root@q1test01 ~]# rpm -q redhat-release

  redhat-release-4AS-3

  注:这种方式下可看到一个所谓的release号,比如上边的例子是3

  这个release号和实际的版本之间存在一定的对应关系,如下:

  redhat-release-3AS-1 -> Redhat Enterprise Linux AS 3

  redhat-release-3AS-7.4 -> Redhat Enterprise Linux AS 3 Update 4

  redhat-release-4AS-2 -> Redhat Enterprise Linux AS 4

  redhat-release-4AS-2.4 -> Redhat Enterprise Linux AS 4 Update 1

  redhat-release-4AS-3 -> Redhat Enterprise Linux AS 4 Update 2

  redhat-release-4AS-4.1 -> Redhat Enterprise Linux AS 4 Update 3

  redhat-release-4AS-5.5 -> Redhat Enterprise Linux AS 4 Update 4

  另:第3)、4)两种方法只对Redhat Linux有效。diyblPic

openvpn client 安装

(1)32位的包

#wget ftp://ftp.pbone.net/mirror/centos.karan.org/el5/extras/testing/i386/RPMS/lzo-2.02-3.el5.kb.i386.rpm
#rpm -ivh lzo-2.02-3.el5.kb.i386.rpm
#wget ftp://ftp.pbone.net/mirror/centos.karan.org/el5/extras/testing/i386/RPMS/openvpn-2.1-0.19.rc4.el5.kb.i386.rpm
#rpm -ivh openvpn-2.1-0.19.rc4.el5.kb.i386.rpm


(2)64位的包

#wget ftp://ftp.pbone.net/mirror/centos.karan.org/el5/extras/testing/x86_64/RPMS/lzo-2.02-3.el5.kb.x86_64.rpm
#rpm -ivh lzo-2.02-3.el5.kb.x86_64.rpm
#wget ftp://ftp.pbone.net/mirror/centos.karan.org/el5/extras/testing/x86_64/RPMS/openvpn-2.1-0.19.rc4.el5.kb.x86_64.rpm
#rpm -ivh openvpn-2.1-0.19.rc4.el5.kb.x86_64.rpm


2、配置文件

四个证书放在/etc/openvpn/ca/目录下

#vim /etc/openvpn/dev.ovpn

client
dev tun
proto tcp
remote [网关IP] 1194
float
persist-key
persist-tun
ca /etc/openvpn/ca/ca.crt
cert /etc/openvpn/ca/server.crt
key /etc/openvpn/ca/server.key
tls-auth /etc/openvpn/ca/ta.key 1
ns-cert-type server
keepalive 10 30
comp-lzo
verb 3


#启动服务
# /etc/init.d/openvpn start
# openvpn --config /etc/openvpn/dev.ovpn 2>&1 >/dev/null &

2010年7月12日星期一

ftp 自动脚本 写法之一

1. -n 禁止 .netrc, 不自动登陆

2. ftp 是命令行工具, 因此下边的方式是有效的



#!/bin/bash

# Script to retrieve a file via FTP

FTP_SERVER=ftp.nl.debian.org

FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom

REMOTE_FILE=debian-cd_info.tar.gz

ftp -n <<>

open $FTP_SERVER

user anonymous me@linuxbox

cd $FTP_PATH

hash

get $REMOTE_FILE

bye

_EOF_

ls -l $REMOTE_FILE



vim 基本参数设置

:syntax on

:set syntax=sh

:set hlsearch

搜索高亮

:set tabstop=4

:set autoindent

2010年7月11日星期日

OSI界定的常用开源协议:GPL、LGPL、BSD、MPL、Apache Licence、MIT(转)

转:http://www.ubuntuchina.com/viewthread.php?tid=4762

OSI界定的常用开源协议:GPL、LGPL、BSD、MPL、Apache Licence、MIT

现今存在的开源协议很多,而经过Open Source Initiative(OSI)组织[url=ttp://www.opensource.org/licenses/alphabetical]通过批准的开源协议[/url]不下七十种。这里我们选取OSI界定的最流行的几种协议对协议本身及适用范围作简单说明,供那些准备开源或者使用开源产品的开发人员/厂家参考。也让开源爱好者有一个基本的认识。
Mozilla Public LicenseMozilla Public License version 1.1
MPLLicense,允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。这种授权维护了商业软件的利益,,它要求基于这种软件得修改无偿贡献版权给该软件。这样,围绕该软件得所有代码得版权都集中在发起开发人得手中。但MPL是允许修改,无偿使用得。MPL软件对链接没有要求。
BSD开源协议(original BSD licenseFreeBSD licenseOriginal BSD license New and Simplified BSD licenses
BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。
但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:
  • 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
  • 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
  • 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。
Apache Licence 2.0(Apache License, Version 2.0Apache License, Version 1.1Apache License, Version 1.0
Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:
  • 需要给代码的用户一份Apache Licence
  • 如果你修改了代码,需要再被修改的文件中说明。
  • 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
  • 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。
Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
GPL(GNU General Public License
我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, ApacheLicence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。
GPL协议的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。
由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。
其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。关于GPL最新的版本第三版请查看:[下载]GNU通用公共授权第三版中文简体(GNU General Public License 3即GNU GPL3)

LGPL(GNU Lesser General Public License
LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品
MIT(MIT
MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的.
本文作者:http://www.awflasher.com

2010年7月9日星期五

将man转换成pdf

zcat /usr/share/man/man1/ls.1.gz | groff -mandoc >~/Desktop/foo.ps
ps2pdf ~/Desktop/foo.ps ~/Desktop/ls.pdf

补充知识:
1. zcat 相当于 gzip -cd
2. groff 文档格式化工具
3. ps 扩展名为 postscript 文件, 一个曾经很nb的格式