在mysql中避免保留字的影响

如果在mysql中的sql语句中使用了mysql的保留字,就会报错,例如下面:


mysql> CREATE TABLE group (

    -> groupID tinyint(2) unsigned NOT NULL auto_increment,

    -> groupName varchar(60) default NULL,

    -> groupPriority tinyint(1) unsigned default '0',

    -> PRIMARY KEY  (groupID)

    -> ) TYPE=InnoDB;

ERROR 1064: You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'group (

groupID tinyint(2) unsigned NOT NULL auto_increment,

gr

mysql>

上面就因为使用了保留字“group”出现错误。

只要把字段和表名用"`"引起来,就可以避免保留字的影响。这也是写规范的mysql语句的要求之一;

但是,为了避免不必要的麻烦,还是尽量不要在其中使用mysql的保留字。

我的mysql4.1.21的/etc/my.cnf设置

老是忘记怎样设置默认字符集和默认数据目录,干脆把我的/etc/my.cnf帖在这里备忘。没办法,忘性太好了。


# Example MySQL config file for small systems.

#

# This is for a system with little memory (<= 64M) where MySQL is only used

# from time to time and it's important that the mysqld daemon

# doesn't use much resources.

#

# You can copy this file to

# /etc/my.cnf to set global options,

# mysql-data-dir/my.cnf to set server-specific options (in this

# installation this directory is /var/lib/mysql) or

# ~/.my.cnf to set user-specific options.

#

# In this file, you can use all long options that a program supports.

# If you want to know which options a program supports, run the program

# with the "--help" option.

# The following options will be passed to all MySQL clients

[client]

default_character_set=utf8

#password = your_password

port = 3306

socket = /var/lib/mysql/mysql.sock

# Here follows entries for some specific programs

# The MySQL server

[mysqld]

datadir=/var/lib/mysql/

default_character_set=utf8

port = 3306

socket = /var/lib/mysql/mysql.sock

skip-locking

key_buffer = 16K

max_allowed_packet = 1M

table_cache = 4

sort_buffer_size = 64K

read_buffer_size = 256K

read_rnd_buffer_size = 256K

net_buffer_length = 2K

thread_stack = 64K

# Don't listen on a TCP/IP port at all. This can be a security enhancement,

# if all processes that need to connect to mysqld run on the same host.

# All interaction with mysqld must be made via Unix sockets or named pipes.

# Note that using this option without enabling named pipes on Windows

# (using the "enable-named-pipe" option) will render mysqld useless!

#

#skip-networking

server-id = 1

# Uncomment the following if you want to log updates

#log-bin

# Uncomment the following if you are NOT using BDB tables

#skip-bdb

# Uncomment the following if you are using InnoDB tables

#innodb_data_home_dir = /var/lib/mysql/

#innodb_data_file_path = ibdata1:10M:autoextend

#innodb_log_group_home_dir = /var/lib/mysql/

#innodb_log_arch_dir = /var/lib/mysql/

# You can set .._buffer_pool_size up to 50 - 80 %

# of RAM but beware of setting memory usage too high

#innodb_buffer_pool_size = 16M

#innodb_additional_mem_pool_size = 2M

# Set .._log_file_size to 25 % of buffer pool size

#innodb_log_file_size = 5M

#innodb_log_buffer_size = 8M

#innodb_flush_log_at_trx_commit = 1

#innodb_lock_wait_timeout = 50

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

# Remove the next comment character if you are not familiar with SQL

#safe-updates

[isamchk]

key_buffer = 8M

sort_buffer_size = 8M

[myisamchk]

key_buffer = 8M

sort_buffer_size = 8M

[mysqlhotcopy]

interactive-timeout

学习日记的目标分组功能和Top10日记分类功能设计

根据思路: 明确网站定位,增加学习日记目标分组功能 ,现对学习日记的目标分组功能和Top10日记分类功能进行设计描述。

1、目标分组的建立应该由网站的管理员进行,应该包括下列功能:

1)、创建分组;2)删除分组;3)修改分组;4)分组有优先级别,也可以修改优先级别;

分组的数据表结构:

分组ID(groupID), 分组名称(groupName),分组描述(groupDetail),分组优先级(groupPriority),分组目标数(groupGoalsNum),分组创建日期(createDate),分组修改日期(modifyDate)。以后,还可以添加分组组长的分类组织者;

为了简化实现,初步可以只有创建功能,只要3个必要字段:groupID, groupName, groupPriority。分组的排列以groupPrior为准。

然后,在目标帖子的表中添加一个字段(groupID),因为目标帖子有一个parentID是没有意义的,看是否可以把这个字段来作为groupID;

这样,需要管理员对目标帖子有编辑权限,可以把原来的目标帖子归入分组,没有归入的加入未分类分组。

2、TOP10日记功能:

1)、最新10篇日记,最热门的10篇日记,随机的10篇日记,这些可以通过数据库查询实现。

其中,前两个可以通过那个只返回ID和名称的好像叫getCPageList()的方法来实现;后面的那个可能需要新加一个方法,来返回随机10篇帖子的ID和名称。

3、实现以上功能需要严格测试是否会暴露私人帖子。人的隐私权(人权)优先嘛。

4、由于以上改动,目标内容页面也需要精心设计,把目标相关的内容都要一目了然的呈现给用户,这个页面的广告位设计也要好好考虑一下。

能够想到的都写上了。没有想到的希望看见这篇帖子的朋友提一下。

原来的列表式目标可以作为另一个老的视图保留。

明确网站定位,增加学习日记目标分组功能

一个网站,应该有自己的侧重点,学习日记定位于java学习交流。启用新的域名:java.learndiary.com

我们侧重于java的应用技术学习,尤其是开源的java解决方案。

准备精心设计学习日记的首页。把我们的特色和内容尽可能全面的展示在首页上。方法是把所有的目标分组,例如:java基础,开源软件,系统分析设计,开源小组,linux,生活,等等。可以参考相关的java站的分类。

除了目标分组,首页左侧可以挂上学习日记推荐java应用平台,看情况也可以做成左侧广告位。

右侧可以挂上最新10篇,最热10篇,随机10篇日记。

分类的目标可以按日记数的多少排序;

这样,进了我们网站的朋友可以一眼看到我们是做什么的,他可以在这里做什么。

当然,这只是一个临时的方案。只是相当于把我们这个简单的房子稍稍改一下,以使它能够围绕java学习交流这一目的聚集一些相似兴趣的朋友。

另外,在学习日记上提交日记,尤其是有价值的原创心得的日记的朋友,应该得到学习日记的鼓励。所以,应该向学习日记的用户承诺:学习日记的未来是大家一起创建的,如果学习日记以后能够真正发展起来,所有的用户都就应可以分享自己的成绩。用户对学习日记贡献可以以提交的帖子数作为一个基数,然后网站管理人员可以根据帖子的质量进行加分。以后完善了,还可以加入网友评分。这样,如果以后学习日记有了真正的收入来源,除了维持网站运营和给管理者一定的报酬,利益应该回馈用户。

这样,我们提出的口号是:共建我们的平台,分享我们的未来。写日记,赢积分。

中国的程序员很多还是在为生活而累,所以开源的事业在中国一直发展不起来。我想,如果中国的开源从事者能够从开源中补贴一部分家用,那么在发达国家以兴趣为主推动的开源在我们这里加上经济的驱动,也许可以尝试一下“有中国特色”的开源之路?

也就是说,为学习日记这个开源项目贡献心血的朋友应该有根据自己的劳动获得一定收入的希望。

不然,一天到晚,工作都累得不行了,谁来做开源?

另一个不容忽视的从事开源的人群就是非程序员,他们有自己的工作,写程序多是有兴趣。如果他们的兴趣能够转化成一些人民币,又何尝不是好事呢。

另外,就是“关于本站”的介绍应该好好重写,从中,应该让大家看到未来。

linux下tomcat5.0.12不能在eclipse3.1中用sysdeo的插件启�动

Redhat linux9.0下tomcat5.0.12不能在eclipse3.1中用sysdeo的tomcatPluginV31插件启动。

我现在是上述的环境,也许不限于linux, eclipse3.1和tomcat5.0.12和tomcatPluginV31,记在这里意思是说,当你在tomcat不能在eclipse中用上sysdeo的插件启动时,不妨换一个tomcat的版本。

同样是上述环境,把tomcat5.0.12换成tomcat5.0.28后就可以正常启动了。

这两天找出这个原因费了点时间,jdk, eclipse, tomcatPlugin的版本都换过了,就是没有先换tomcat的版本:),以为都是5.0.*的版本,应该没有多大区别吧。可是,问题就恰恰出在这里了。

解决Redhat linux9.0下jdk1.4.2_01-b06的中文问题

这几天准备对学习日记作点小的改动(房子虽然太简单,也需要修整修整呀),把停了一个来月的学习日记开发环境在linux下搭起来了。当我运行java软件ArgoUML建模,发现不能在软件中输入汉字,保存对话框的“是”与“否”的中文字体为方框。我知道碰到了传说中的linux下java的中文乱码问题。

于是,请出google老师,他帮我找到了一篇帖子,于是,受文中的启发,在下面目录对文件font.properties.zh_CN.Redhat8.0作了一个符号链接font.properties.zh.Redhat,中文乱码问题就没有了。如下:


ln -s /usr/jdk1.4/jre/lib/font.properties.zh_CN.Redhat8.0 /usr/jdk1.4/jre/lib/font.properties.zh.Redhat

很简单吧,但是我不知道具体原因是什么。也许font.properties.zh.Redhat是Redhat系统在java中的默认字体设置文件?哪为什么在这个目录下又有这么多的字体设置文件,如下:


[root@localhost lib]# dir font.*

font.properties                 font.properties.ja.Sun           font.properties.zh_CN.Sun

font.properties.ja              font.properties.ja.Turbo         font.properties.zh_CN_UTF8.Sun

font.properties.ja_JP_UTF8.Sun  font.properties.ja.Turbo6.0      font.properties.zh.Redhat

font.properties.ja.Redhat6.1    font.properties.ko.Redhat8.0     font.properties.zh.Turbo

font.properties.ja.Redhat6.2    font.properties.Redhat6.1        font.properties.zh_TW.Redhat8.0

font.properties.ja.Redhat7.2    font.properties.Redhat8.0        font.properties.zh_TW.Sun

font.properties.ja.Redhat7.3    font.properties.SuSE8.0          font.properties.zh_TW_UTF8.Sun

font.properties.ja.Redhat8.0    font.properties.zh_CN.Redhat8.0

[root@localhost lib]#

***********************************************************************************

附上那篇介绍有Redhat linux9.0下java中文设置的文章,实际上是一篇讲Redhat linux9.0下oracle安装的文章,也许以后用得着,收藏在这里参考:

转自:http://www.xxlinux.com/linux/article/development/database/20060905/3956.html

RedHat9.0操作的oracle9i安装

[ 作者:Linux联盟收集  加入时间:2006-09-05 21:52:36  来自:Linux联盟收集 ]

作者:pxe2

先安装修改java

标准 jre/jdk 中只带了 redhat 6 的 font.properties, 需要建一个 font.properties.zh.Redhat 放在 redhat 的 jre/lib 目录下。打开 /usr/lib/X11/fonts/ttf-zh 或者 /usr/share/fonts/zh_CN/TrueType 下面的 font.dir, 将其中的一个中文字体名复制下来,比如 -misc-ZYSong18030-medium-r-normal--0-0-0-0-c-0-iso10646-1,按照 java 的字体规则改为 -misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1,将 font.properties.zh 中的内容复制到 font.properties.zh.Redhat 中。

我选用字体 -misc-ZYSong18030-medium-r-normal--0-0-0-0-c-0-iso10646-1 是因为在 redhat 7.3 和 redhat 8.0 上都能用。

因为 jre/jdk 找不到 Redhat 的 true type 字体,在文件 font.properties.zh.Redhat 最后加入

appendedfontpath=/usr/lib/X11/fonts/ttf-zh

appendedfontpath=/usr/share/fonts/zh_CN/TrueType

将字体名全部替换成 -misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1,替换后的 font.properties.zh.Redhat 如下:

# @(#)font.properties.zh.Redhat.linux 1.4 02/06/10

#

# Copyright 2002 Sun Microsystems, Inc. All rights reserved.

#

# Component Font Mappings

#

serif.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

serif.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

serif.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

serif.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

sansserif.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

sansserif.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

sansserif.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

sansserif.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

monospaced.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

monospaced.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

monospaced.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

monospaced.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialog.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialog.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialog.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialog.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialoginput.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialoginput.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialoginput.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialoginput.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

# Missing Glyph Character

#

default.char=274f

# Component Font Character Encodings

#

fontcharset.serif.0=sun.io.CharToByteISO8859_1

fontcharset.serif.1=sun.awt.motif.CharToByteX11GBK

fontcharset.sansserif.0=sun.io.CharToByteISO8859_1

fontcharset.sansserif.1=sun.awt.motif.CharToByteX11GBK

fontcharset.monospaced.0=sun.io.CharToByteISO8859_1

fontcharset.monospaced.1=sun.awt.motif.CharToByteX11GBK

fontcharset.dialog.0=sun.io.CharToByteISO8859_1

fontcharset.dialog.1=sun.awt.motif.CharToByteX11GBK

fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1

fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11GBK

# Exclusion Ranges

#

# XFontSet Information

#

fontset.serif.plain=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.serif.italic=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.serif.bold=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.serif.bolditalic=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.plain=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.italic=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.bold=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.bolditalic=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.plain=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.italic=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.bold=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.bolditalic=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.italic=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.bold=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.bolditalic=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.plain=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.italic=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.bold=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.bolditalic=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.plain=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

#fontset.default=

#-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso10646-1,

#-tlc-song-medium-r-normal--*-%d-*-*-c-*-gbk-0

fontset.default=

-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

appendedfontpath=/usr/lib/X11/fonts/ttf-zh

appendedfontpath=/usr/share/fonts/zh_CN/TrueType

使用 Installanywhere 我们编译安装程序选择 "其它 java 平台" 编译成一个 java 的 setup.jar 文件,

在 Redhat 上面写一个批处理/脚本文件, set classpath , 包含 setup.jar,

批处理/脚本文件中使用 java install 启动安装程序。

繁体中文依法炮制即可,建立 font.properties.zh_TW.Redhat 文件,将其中的字体名改为一个繁体中文字体名,

在文件末尾加上合适的 appendedfontpath

___________________________________________________________

1安装好RedHat9.0操作系统,确保安装了以下的RPM开发包

gcc

cpp

glibc-devel

compat-libstdc++

glibc-kernheaders

binutils

可以使用命令来查看是否已安装了这些包

rpm -q gcc cpp compat-libstdc++ glibc-devel glibc-kernheaders binutils

2从Oracle官方网站下载Oracle9i安装文件并使用如下命令解包

zcat lnx_920_disk1.cpio.gz | cpio -idmv

zcat lnx_920_disk2.cpio.gz | cpio -idmv

zcat lnx_920_disk3.cpio.gz | cpio -idmv

(注意磁盘空间)

然后会有Disk1 Disk2 Disk3三个子目录。

3设置内核参数

echo 4294967295 > /proc/sys/kernel/shmmax,建议放到/etc/rc.local文件里。



编辑/etc/sysctl.conf

kernel.shmmax=4294967295

我有512MB内存,所以设置这个数值。可根据实际情况设置。

4创建Oracle用户帐号和安装目录

在shell下,作为root

groupadd dba

groupadd oinstall

useradd -g oinstall -G dba oracle

passwd oracle

mkdir /opt/oracle

mkdir /opt/oracle/product

mkdir /opt/oracle/product/9.2.0

chown -R oracle.oinstall /opt/oracle

mkdir /var/oracle

chown oracle.dba /var/opt/oracle

chmod 755 /var/opt/oracle

5设置环境变量

编辑/home/oracle/.bash_profile文件,添加下列行

export LD_ASSUME_KERNEL=2.4.1

export ORACLE_BASE=/opt/oracle

export ORACLE_HOME=/opt/oracle/product/9.2.0

export ORACLE_SID=ora9i

export ORACLE_TERM=xterm

$ORACLE_HOME/network/admin

export NLS_LANG=AMERICAN_AMERICAN.ZHS16GBK

export ORA_NLS33=$ORACLE_HOME/ocommon/nls/asmin/data

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

export LD_LIBRARY_PATH

export PATH=$PATH:$ORACLE_HOME/bin

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib

export CLASSPATH

6安装

进入Disk1目录

./runInstaller

当link进行到61%时出现一个关于ins_oemagent错误,选择ignore,安装完后修复

当link进行到84%时出现一个关于ins_ctx错误,编辑$ORACLE_HOME/ctx/lib/env_ctx.mk文件,把$(LDLIBFLAG)dl加到以下位置

INSO_LINK=-L$(CTXLIB)$ (LDLIBFLAG)m $(LDLIBFLAG)dl处。

安装完成

修复第一个错误

在shell下,oracle用户

cd $ORACLE_HOME/network/lib

make -f ins_client.mk install

编辑$ORACLE_HOME/ctx/lib/ins_ctx文件

13-14行处

$(LINK) $(CTXHXOBJ) $(INSO_LINK)



$(LINK) -ldl $(CTXHXOBJ) $(INSO_LINK)

7启动数据库、监听程序、web server。

启动数据库

Sqlplus " / as sysdba"

SQL>startup

启动监听程序

lsnrctl

启动web server

cd $ORACLE_HOME/Apache/Apache/bin

./startJServ.sh'

来源:linuxfans

还有问题请来论坛寻求帮助:http://www.xxlinux.com/bbs/

being is the most important thing, use all the ads locations

  It will dispear if without the ecommical support in this world, LearnDiary is too.

  In order to resolve the money problem for running this website, I add some google ads into almost every page. Until today, we have no any incoming to support the running problem, don't say earning a little from this website further more.

  The most important thing is: it is almost no any friend post their any word on this website. The goal of founding this website hasn't achived a little.

  Thinking about it, doing something about it.

  I think, it will be a useful tool for many friends to share their learning experience, because, I feel it is useful for myself.

  The reason of lacking friends' word, it is, a question, that will be answered by me, WHO can get WHAT from this website? It's your personal diary in the life?

  This is a most important question, like this: to be or not to be?

  Maybe, I can find the anwer soon. And, the time will prove it's right or wrong.

  Friend, visit our website in these days, maybe, you will find a useful tool for you is forming.

我把孩子送到幼儿园大门后孩子不让我跟到教室

这两天新出现一个情况,当我把孩子送到幼儿园大门口后,孩子不许我继续把她送到教室门口。

当然,我是不会放心的,因为他们的教室在3楼,幼儿园大门到教学楼也有一段距离。于是,我悄悄的跟在她后面。可是,只要她一发现我跟在她后面,就会哭着、闹着朝我嚷:你回去,不许跟到我,我自己晓得进教室...。

我想是孩子的幼小的自我独立心态在萌芽吧。

winrar多卷压缩方法

我是在windows xp sp2上使用WINRAR 3.50 beta 5进行分卷压缩的。

但是,在一个文件夹上单击右键添加到rar文件是不行的。

采用以下步骤完成分卷压缩:

1、打开winrar软件:

2、点击左上角的“添加”按纽:

3、在“压缩分卷大小”中选择或输入每卷要压缩的大小,点击“确定”即可:

Linux 风雨 15年(转帖)

转自:http://www.matrix.org.cn/resource/news/Linux_36a4cad2-4804-11db-9e0c-47a43a6df648.html

Linux 风雨 15年

matrix 发表于 2006-09-20 01:28:07 作者:matrix     来源:ccw

评论数:4     点击数:458

摘要:

15年前,芬兰的电脑天才Linus Torvalds在一台公共服务器上发布了一份操作系统源代码,从而引发了一 场革命。

工具箱

本站收藏

美味书签

发表评论

复制链接

15年前,芬兰的电脑天才Linus Torvalds在一台公共服务器上发布了一份操作系统源代码,从而引发了一

场革命。

这个以他的名字命名的操作系统(Linux),以及由它所引发的开源运动的革命性冲击,使得整个业界发生了巨变。

Linux 成功的奥秘并不在于源代码本身,因为Linux不过是一种类Unix系统而已,而是在于其开发方式,即允许所有程序员参与开发的开放源码哲学。遵循这种哲学思想,参与进来的程序员同样愿意与他人共享自己的开发成果,于是这个开源社区就会不断地扩大,创新的浪潮也就一浪高过一浪。显然,没有一家商业企业可以和由成千上万志愿者综合而成的这种非凡的天才力量相比拟。一个最明显的例子就是,比尔·盖茨所领导的一大批软件精英开发出来的微软操作系统几乎没有一个不是“千疮百孔”的;而Linux虽然也有瑕疵,但比起微软的产品来则明显要健壮得多。

15年来,Linux从一份大学生的作业已经演变成了Windows最强劲的竞争对手,在网络、企业、政府和消费电子市场中逐步占据了重要的地位,在有些领域甚至成了最主要的角色。它还获得了政府、大企业和很多公共组织的热烈欢迎和拥戴,其发展前景正不可限量。

开源数据库的狂想

芬兰似乎是催生开源天才们的理想国度。Linus Torvalds的同乡Marten Mickos虽然从一开始并不是开源的忠实信徒,1995年,当他的两位大学同学Michael Widenius和David Axmark创办了开源数据库公司MySQL时,他还曾嘲笑过他们的“疯狂举动”。然而两年后,Mickos加入了MySQL,并担任CEO一职。

同他的两位技术天才朋友相比,Mickos显然更具有商业头脑。他改变了原先只在互联网上有一搭没一搭向技术人员销售软件的做法,组建了专业化的销售队伍,并将公司搬到了美国加州。

今天,MySQL的年收入已达4000多万美元,超过了其竞争对手Ingres和PostgreSQL。根据Forrester的研究,全球开源数据库市场大约为3.5亿美元,包括许可证销售、服务和技术支持;而MySQL已经占到了60%(约2.1亿美元)的市场,这包括2006年MySQL本身收入的 4500万美元,以及很多咨询和服务公司推荐安装MySQL产品而产生的1.65亿美元利润。

而且MySQL目前已获得了像惠普、Unisys、Novell和IBM等大企业的支持。据估计,MySQL的安装基础已经超过1000万家企业,其中包括很多业界巨头,比如Yahoo、阿尔卡特、铃木和美国航空航天局等。

尽管与商业数据库软件市场(约250亿美元)相比,开源数据库市场还非常渺小,但是Mickos和其他一些人相信,商业市场正受到开源数据库的威胁。

自由欧洲的梦想

2004年,Linux在慕尼黑打胜了一场与微软的战争。慕尼黑市政府不顾微软CEO鲍尔默的亲自游说,仍然坚持更换了14000台桌面电脑的操作系统。

2004年,欧盟委员会花钱搞了一项调查,该调查覆盖了欧盟所属的13个国家。结果发现,约有80%的市政当局正在使用某些开源软件。负责调查的官员说:“我们的调查表明,开源软件正在被广泛使用,而且哪个机构使用开源产品越多,那个机构就会引进更多的开源软件。”

开源产品在欧洲的主要推动力是政府而不是企业,而推动政府采纳开源软件的主要动力则是成本、安全,以及不愿意和一家美国软件商发生紧密关系的微妙情绪。这些举措迫使微软不得不采取大幅折扣的方式来拉拢各地方政府,比如微软给巴黎市政府的折扣差不多就打到了五折。

欧洲的一些开源企业也借此良机大行其道。巴黎的一家开源企业Nuxeo 就向法国的六大部门(包括内务部和电信部)销售内容管理软件。

西班牙是欧洲使用开源软件最普遍的国家,约有98%的地方政府机构在使用开源软件。再比如西班牙Extremadura地区的学校中有超过80000台PC和400台服务器以及在地区政府中有70000台PC都在使用Linux和其他自由软件。

欧盟委员会目前已成立了一个开源观察小组,旨在推动各国政府在共享开源产品方面采取协调行动。该组织目前正在实施的一个重要项目就是IDabc(向公共行政、商业及市民提供可互操作的欧洲电子政府服务)。负责该项目的Barbara Held说:“两年前,我们在与各地方政府交谈时,它们都说不想和开源社区直接打交道。而现在,它们都已开始有了这种意愿。”

移动Linux起步

开源运动目前又找到了一块新大陆,那就是移动通信市场。和它先前在PC市场的艰难起步不同,Linux在移动市场一开始就受到了强有力的支持

。比如摩托罗拉在亚洲地区就已销售出了400万部Linux手机。摩托罗拉还联合了NTT DoCoMo、松下、三星和Vodafone等共同推广开源在移动领域的应用,这样一个强而有力的联盟不仅威胁到了使用Symbian操作系统的诺基亚,而且直接威胁到了Symbian和微软。

摩托罗拉移动设备部首席平台架构师Mark VandenBrink介绍说,研发移动Linux的联合行动计划将分两个阶段进行。在第一阶段,即前平台阶段,主要开发移动操作系统本身,这个阶段不对外开放。而在第二个阶段,即后平台阶段,将涉及所有运行在此操作系统之上的应用开发,这个过程将会向所有人开放。

VandenBrink解释说,开放性将有助于开发出符合全球不同市场、不同网络、不同时段和不同需求的服务与体验。他说:“我们的销售机会可能会来自不同时段的不同市场,比如在美国,销售高峰是在新学期开学和圣诞节期间,而在中国则是在春节前后。”

有了这样一个由全球前三位中的两家手机制造商(摩托罗拉、三星)和两家最大的运营商(Vodafone和NTT DoCoMo)组成的强大联盟,我们有理由期待移动Linux的美好未来。

亚洲Linux崛起

很多研究都发现,亚洲是非常适合开放源码软件成长的理想土壤。一是因为成本意识,二是没有太多遗留系统的包袱,亚洲的企业、机构和公共领域的客户有可能形成一个巨大的市场。Gartner估计,到2010年,开源软件“将会占有全球软件市场20%的份额,从传统软件厂商手中夺走约1000亿美元的收入,而来自印度和中国的需求将是实现这一远景的主要推动力。”

与西方推动开源增长的草根力量不同,在中国推动Linux的是自上而下的政府力量。因为担心微软操作系统的垄断以及由此可能带来的安全威胁,中国政府已经发布了《政府采购条例》,要求各级政府须优先考虑开源操作系统和软件。中国政府还大力支持中、日、韩三国联合研发的“亚洲Linux”(Asianux),不过这套系统与红帽的企业级服务器系统几乎完全一样。

印度的 Linux市场主要由国际厂商占据支配地位,比如Novell SuSE和红帽。而中国市场则主要由中国本土的红旗Linux占领,根据计世资讯的报告,红旗在2005年所占的份额为32.1%;Novell以 29.5%紧随其后;第三是红帽,19.7%;第四是Turbolinux,9.8%。

除了开源软件之外,开源硬件在亚洲的增长也非常令人瞩目。根据IDC的统计,亚太地区(日本除外)的Linux服务器市场2005年达到2230万美元,比2004年的1420万美元增长了57.1%;而客户端Linux市场增长得更快,从2004年的1040万美元增长到2005年的1740万美元。IDC预计今后五年中Linux服务器市场的年均增长率将超过20%,从2005年的2230万美元增至2010年的5530万美元;桌面Linux的年均增长将达到26.6%,到2010年将实现 5040万美元收入。这其中还未计入各种嵌入式Linux系统,如MP3、手机等设备的销售。

IDC估计,中国Linux市场的总体规模在2005年为1180万美元,2010年将达到5100万美元,年均增长率为34%。中国的Linux服务器市场在2005年产生了900万美元的收入,到2010年将实现1990万美元收入,将占到总体规模的40%。

蓝巨人饕餮大餐

1999 年,IBM在印度开设了一家Linux研发中心,这在当时的确是一个大胆的举动,也是IBM支持开源软件的一次令人吃惊的背书。IBM的举动也招来了各方的质疑,而来自开源社区的质疑更多。它们不认为IBM会把自己的开发成果拿到社区里来共享,要知道,IBM本身就是“大铁块”——运行专有系统和软件的大型机和小型机的代名词。

但是打那以后,IBM已成为了开源社区中最重要的角色之一,它给新办的开源企业投资、销售自己独立研发的开源产品或者与开源社区共享其产品。这种转变肯定和利他主义无关。

根据Gartner的报告,2005年Linux的市场份额增长了35%,销售收入达70亿美元,而IBM则攫取了其中很大的份额。IBM表示,其开源业务在2005年的收入高达数十亿美元,范围涉及其150亿美元的软件、474亿美元的服务以及243亿美元的服务器销售。

IBM自己也承认,开放源码对于其硬件和其他产品的销售大有帮助,而且因此笼络了一大批天才程序员为其开发和改善软件产品,其效率是IBM以前所从未曾有过的。

IBM和Sun半推半就的做法有明显的不同,IBM是彻底地转向了Linux。在印度开设了Linux研发中心之后,又投资4000万美元推出了Eclipse开源社区,帮助用户、厂商以及开发人员共同参与软件开发项目。

最近几年,IBM将其开源努力的方向主要放在了所谓BIRC国家,即巴西(Brazil)、俄罗斯(Russia)、印度(India)和中国(China),这也显然是出于巨大经济利益的考虑。根据IDC的研究,BRIC国家的IT市场预计将从2005年的638亿美元增加至2009年的 1079亿美元。

当然,IBM并非唯一一家利用开放源码而大赚其钱的大型企业。在去年的Linux World上,惠普的Linux总经理Martin Fink就展示过惠普的一系列开源项目。今年,惠普在BRIC国家利用开源项目共赢得了17份服务器合同,这对其Integrity服务器产品线的迅猛增长贡献巨大。

本页页面地址:

用户评论列表

#0000 author: 000 submitTime: 2006-00-00 12:59

#1 评论作者: jobs002 发表时间: 2006-09-20 08:38 上午

呵呵,看看现在的IBM,确实已经再次成为了蓝色巨人,选择开源的同时,也就选择了发展,祝愿开源的路越走越好.

#2 评论作者: jiangshachina 发表时间: 2006-09-20 08:58 上午

希望中国的开源也能如欧洲那样发展好。

其实一直欧洲比较人文,不像老美过于商业。

不过,国内对开源的态度可能还不够好,没有广泛的接受,特别是在商业方面。

#3 评论作者: johnzhang68 发表时间: 2006-09-20 09:12 上午

什么是开源硬件?

#4 评论作者: youway 发表时间: 2006-09-20 11:31 上午

呵呵,因为在国内使用商业软件和开源软件的成本都差不多

如果知识产权保护的力度加强,就可以促进开源软件的推广和应用