Oracle 10g落户麒麟OS

银河麒麟是由国防科大组织开发的高性能、高安全操作系统,通过信息安全测评中心军用B+级安全认证,应该是国内目前安全等级最高的操作系统。由于从麒麟到其原型FreeBSD都没有通过Oracle的安装认证,所以在Kylin 2.1 Advanced Server系统上安装Oracle 10g时需要修改很多配置参数,相比在Windows下面点鼠标就可以完成的安装过程,实在是一件比较有挑战性的事情。

按照通常的步骤,首先需要创建新的系统帐户oracle和用户组oinstall,然后将Oracle所需的环境变量ORACLE_HOME等写入到.bash_profile文件中,一切准备好之后,在解压的Oracle目录中运行./runInstalller开始安装。在安装过程中,编译link时出现有两处出错提示,其中一个agent代理出错可以忽略,还有一个错误是clnt的so动态库无法拷贝,这个错误不可以忽略,需要进入到相应目录手动拷贝所需的动态库。之后根据提示在root身份下执行$ORACLE_HOME/root.sh脚本,继续安装过程。

在安装过程中,还由于Swap交换空间不足的问题,而无法分配足够内存。于是新建1G的文件块,使用mdconfig命令增加交换空间,但利用参数swapon却无法加载新分配的交换空间,只好再次重装Kylin操作系统并在初始安装的时候调整Swap交换分区数值。

需要注意的是,安装Oracle数据库时需要针对FreeBSD修改系统内核参数,但有几个参数按照说明无论如何无法写入conf配置文件中,最后发现麒麟系统将标准的FreeBSD内核配置文件改为Kylin.conf文件,然后手动修改这个文件后运行#/sbin/sysctl命令得到修改后的正确内核配置结果。

最后在sqlplus中启动Oracle终于成功,但是提示说无法mount数据库。于是使用dbca命令启动Oracle自带的数据库建立向导,创建数据库时出现Out of Memory错误。之后再去查找Oracle在FreeBSD上的安装帮助,根据情况修改Oracle数据库启动配置文件initorcl.ora中的参数,更改SGA、PGA设置以及Process数量。

总而言之,Kylin 2.0系统提供了对Oracle 9i支持的补丁,但在Kylin 2.1系统没有支持补丁的情况下安装Oracle 10g的确是个艰苦的过程,如果想锻炼一下坚韧的品质,是个不错的尝试。

实验室里的开放源码

开放源码在科学计算方面的应用十分广泛,科研工作者往往更喜欢使用具有免费许可以及良好可编程特性的开放源码项目,而不是具有严格知识产权保护措施的商业软件。当然,轻松便捷的集成性以及友善的社区支持等各方面优势,也是促使科学计算向开源领域靠拢的重要因素。

Python语言的科学计算库,最完善的要算SciPy,SciPy旨在实现MATLAB可以完成的所有功能,并且简化与其它应用的集成,同时保持免费自由的许可协议提供给用户调用。用于二维绘图方面的Python函数库还有Matplotlib,它利用Python的数值计算模块Numeric及Numarray帮助用户编程实现高质量的二维图形。同时Matplotlib可以很好的支持TeX 排版命令,用以显示图形中嵌入的数学公式,这一点带给使用Tex进行文章写作的用户很大便利。Python语言生来具有优良的开源传统,其应用也日趋广泛,在浏览Google帮助中心和Job Opportunities页面时,或许会注意到,列出分类信息的业务逻辑会交由static.py和topic.py进行处理,也就是说部分代码是用Python语言完成的。据说Google爬虫程序最初也使用Python编写,如果想一探究竟,可以通过爬虫网站抓取记录进一步分析。

如果习惯使用C++语言,标准库STL(Standard Template Library)和应用广泛的Boost库同样也附带有数学计算的函数。但更多第三方科学计算库赋予了C++卓越的科学计算功能。Ricepig同学推荐的Blitz++库是一个高效的数值计算函数库,其目的是利用C++的模板技术实现同时具有C++的便捷语法和Fortran语言高效执行的数值计算环境。类似的开源项目还有不少,用于处理并行环境下的高性能计算的C++库FreePOOMA、提供各种矩阵运算和线性代数计算的高性能泛型组件库MTL(Matrix Template Library)、源自GNU包含1000多个函数的强大C/C++数值计算库GSL(GNU Scientific Library)、以及应用于计算几何方面的C++库CGAL(Computational Geometry Algorithms Library)和CGAL的Python版本函数库CGAL-PYTHON,无疑都带给有计算需求的用户一笔巨大财富。

有了这些科学计算函数库的帮助,编写与数学计算相关的程序将不再是那么令人头疼的事情,大量现成的优秀算法都可以在函数库中得以参照借鉴。我们所要做的,只是摆脱商业软件条条框框的束缚,善于使用这些天赐利器,得心应手的去打造自己的应用。

Linux下的编译开发

在Linux环境下的编程实践不是很多,使用C语言开发跨平台的应用对自己来说是件有些挑战的事情,需要慢慢积累很多相关的知识和经验。

首先,程序使用跨平台的图形库,Troll Technologies公司的Qt图形库是很不错的选择。包括QGIS、Tora、Terraview等平时会用到的开源GIS项目都是使用基于Qt的图形库实现,还有大名鼎鼎的KDE桌面和Google Earth也是基于Qt构建。Linux下常用的跨平台图形库还有wxWidgets,在Gtk+或X11界面上都可以运行,Linux上流行的Gnome桌面就是基于Gtk+开发,还有日常会使用到的GIMP 和Gaim也是使用Gtk+的图形库。

Qt提供Designer设计器,可以图形化设计UI界面文件,然后导入到开发环境Visual Studio或KDevelop里面编译为本地界面代码,Qt提供的跨平台C++类库图形库,可以编译运行在Unix、Linux、Win32等多种操作系统平台之上。

在Linux环境下由于使用GCC(GNU Compiler C)编译,配置依赖函数库的Makefile文件十分重要,使用make命令编译生成动态库so文件,还需要通过Mingw进行交叉编译生成Win32平台上运行的DLL动态链接库。如果使用VC调用,还要再增加一个步骤,首先把Mingw环境下生成的DLL动态库通过编译工具Dumpbin生成DEF定义文件,再用Lib命令生成VC可以调用的LIB库文件。

MinGW即Minimalist GNU For Windows,是C++头文件和端口库的集合,在MinGW环境下可以不依赖第三方动态链接库情况下使用GCC产生Windows32 平台程序。并且MinGW允许GCC程序使用微软标准C运行时库(MSVCRT.DLL),同时还提供W32api函数库来使用Windows32 API包含的文件和端口库。与msvcrt.dll相结合,就可以充分使用CRT(C Runtime)以及Windows32 API提供的函数功能。

至于Linux下C++的集成开发环境,还没有找到很中意的选择,Eclipse+CDT的功能组合局限性较大,而Linux下主流的开发调试环境KDevelopAnjuta的使用又还不太熟悉,项目代码还是使用传统的DDD(Data Display Debugger)进行错误跟踪。总的说来,Linux下的开发过程有着独有的优势和特点,尽管有时会感觉不像Win32平台下那样便捷,但最重要的是整个开发环境都是自由软件构成,而自由软件必定也是每一位开发者被赋予灵感与动力的源泉。

Linux世界的精彩

前段时间为CSDN的开源大本营一书撰写操作系统的介绍文章,收集了不少Linux方面的资料。看到一位网友在增刊预告的评论中写道为什么没有列出热门的Ubuntu Linux,其实在这篇文章的时候把Ubuntu归类到Deiban当中,没有作为一个单独的主题,但是个人还是非常喜欢Ubuntu这款非常人性化的Linux系统。

目前项目开发环境使用的是国产的麒麟FreeBSD和红旗Linux,但是对Ubuntu一直情有独中, Ubuntu 6.10刚刚发布,还参加了自动化所自由软件协会举办Ubuntu 创始人Mark的讲座,整个报告厅里座无虚席,Ubuntu对Linux爱好者的号召力可见一斑。Ubuntu最令人称道的还是apt-get软件包安装方式,只要网络速度足够快,安装任何应用都是非常方便,我使用的是上海交大的Repository源,感觉比北京的要快很多。尽管Ubuntu已经为程序安装提供了极大的便捷,但对简化操作的需求是没有止境的,为此还在网上下载了Ubuntu的自动安装设置脚本,全新安装后只需执行一下即可完成源设置、中文化以及常用工具的安装,还可以根据个人的需求对Shell脚本自行定制,加载喜欢的应用。

最近要选择一款便携式的Linux操作系统放在优盘上随身使用,选择的目标定位在可以在Live CD上直接运行的Linux上,来自德国的Knoppix Linux很不错,应该说是目前最好用的Live CD操作系统,也是源自Debian Linux,但需要有1G的优盘才可以装的下。尝试了一些可以放在优盘上的便携式Linux,最后选择了只有200M左右的Slax,通过MySLAXCreator程序的帮助,将Linux写入256M的优盘中,使用FanX的中文模块,效果感觉非常不错。

由于恼人的系统漏洞问题,已经把自己用的Win2000系统升级为Win2003 Enterprise,但发现使用Linux时的感觉也越来越好,于是把王垠的站点镜像放在OSGeo中国站点上,同时希望有一天也可以完全用Linux工作。顺便说一下,OSGeo中国的站点就是运行在实验室的Ubuntu Linux上,一切都很好。

Teamwork进行团队管理

Teamwork即团队合作,随着敏捷开发、统一过程方法等概念的引入,团队合作已经逐渐被接受,并且应用到实际的软件项目开发管理当中。”工欲善其事,必先利其器”,为保证团队合作的顺利进行,良好的团队协同管理工具是必不可少的。其实项目管理工具并不鲜见,为数不少的商业产品一直占据市场主流,随手捏来的比如微软公司的Project和Primavera公司的P3等等,但是像Teamwork这样给人留下深刻印象的开源产品却为数极少。

Teamwork是源自软件仓库SourceForge的开放源代码项目,针对团队合作的整个管理周期而设计。Teamwork集成了项目进度、团队成员、工作日志以及问题追踪等多项管理模块,并且将项目管理和文档管理很好的结合在了一起,大大方便了项目团队的分工与协同,提高了整个团队的工作效率。由于Teamwork在团队管理实践中的出色表现,已经逐步转变为商业模式运作,但Teamwork开发团队仍旧在SourceForge提供了源代码下载,供爱好者研究与学习。

那么先让我们从实现技术上认识一下Teamwork吧。Teamwork基于J2EE体系实现并且按照MVC的分层结构进行组织,技术架构上来看,Teamwork可谓是集众多的优秀开源项目于一身。Teamwork的持久层设计使用了著名的Java为对象关系映射框架Hibernate,对JDBC进行轻量级的对象封装,用对象管理的方式来读写数据。从3.0版本开始,Teamwork用Open Lab的Java Web开发框架JBlooming来进行表示层设计,JBlooming使用标准Java API和面向对象的Jsp模板技术实现,简化表示层组件调用以及Ajax实现的代码量,提高开发效率。Teamwork的内容索引则使用了Apache Jakarta的Lucene项目实现。并且Teamwork内部集成了一个简单的工作流引擎,可以和Open Lab的FlowWork项目很好的协同来进行工作流管理。

如果深入Teamwork的源代码,可以学习Teamwork的各种类功能实现以及teamwork.hbm.xml、common.hbm.xml等Hibernate持久层映射配置文件来了解程序结构和后台数据库的组织方式。本文的主要目的是把Teamwork这个优秀工具介绍给大家,暂时不把太多笔墨放在Teamwork代码的研究中,有兴趣的读者可以在SourceForge下载Teamwork代码来深入学习和研究。(本文全文参见《程序员》06年8月刊,因为忙于筹备老师的项目书和准备去额尔古纳的行程,写作疏漏之处请读者原谅。)