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月刊,因为忙于筹备老师的项目书和准备去额尔古纳的行程,写作疏漏之处请读者原谅。)

开源CMS的选择

抽空试用了不少开源的CMS内容管理系统,PHP+MySQL的世界令人眼花缭乱,先把值得一提的开源CMS仅就直观感受做个总结,其实严格上讲内容管理系统CMS并不属于Web框架的范畴,但是CMS的质量与繁荣程度代表着一种语言在Web开发上的适应性,下面选的几个CMS基本代表了PHP架构下基于CMS建站的主流方向。

先说PHPNuke,这可是老牌的CMS系统,功能比较完备,给后来者提供了不少借鉴之处。但是毕竟岁月不饶人,在设计理念和性能表现方面,PHPNuke逐渐开始落后于其他后起之秀。

再说快速建站的不错选择Mambo,曼波模板的美观程度和功能模块的数量都值得肯定,也拥有不少的坚定支持者,但由于不具备页面静态化机制和拓展上的复杂性,构建商业站点会带来比较大的性能问题。

然后是自己目前最喜欢的Xoops,这是一个非常简洁优雅的CMS建站系统,中文支持也很好,并且开发社区非常活跃,保证了大量的插件支持。在实现页面静态化方面,可以手动嵌入Smarty模板,来适应访问量较大的站点开发。尽管值得推荐,但稍许还有不足之处,Xoops目前的风格样式不算丰富,同时定制自己的风格模板需要做不少复杂的工作。

重量级的Typo3当然最后出场,在功能上说,这应该是CMS的终结者了。Typo3的后台管理相当复杂,具体配置方法自己折腾了半天也没有完全弄清楚,但是可以肯定,许多企业级站点所需的功能可以直接在配置管理中实现。目前国内Typo3的用户非常少,但国外为数不少的大型站点都是架构在Typo3之上的。相信随着Typo3的普及,会有一批站点以此为基础构建。

一个优秀的站点,最核心的是绝佳的创意和吸引用户的人性化服务。仅就建站应用上来说,或许功能模块的二次开发会费些功夫,但基于优秀的CMS实现并没有太大的技术难度。至于自己的选择,以后会考虑基于Python或Ruby的Web框架实现一个小巧的站点,因为还是比较喜欢简单带来的快乐。

开通纪念

最近受了朋友种玉米的启发,忍不住也申请了一个国际域名,呵呵。原计划是做一个技术为主题的站点,但是感觉有很多有意思的东西要往上面放,所以干脆申请了以自己名字命名的站点(http://www.gaoang.com)打算是以关心的开发技术、科学项目、读书笔记和摄影影集为主,内容不会和已有的MSN Space冲突,因为喜欢Space的邮件日志发布方式,所以个人日志仍放在Space空间上。

第78届Oscar今晚在米国揭晓,因为有李安导演的《断背山》,很是让华人们期待。以前看直播时发现嘉宾的获奖感言一口气要感谢好多人,有的还要呼唤世界和平,满有意思。为了不要免俗,先抑止一下激动的心情,也写一下站点开通感言吧。

Bingo,首先感谢实验室的生活补助,让我有能力负担购买域名至2011年的所需费用;然后感谢国家天文台Lamost科学项目和崔辰州博士提供存储空间和MySQL数据库支持;还要感谢WordPress项目提供优秀的Web2.0站点平台;当然还要感谢无私的WordPress插件和主题提供者让我可以个性化自己的页面。最后要感谢朋友们一如既往的支持、感谢所里老师同学在专业上的指点、感谢常常打击我和不小心被我打击的人,感谢老爸老妈每周打来嘘寒问暖的电话,感谢所有可以带来快乐的人和事。

一下子将自己推入泥潭,在不多的空闲时间里又加了站点内容更新的重任,不过到还是满开心,毕竟每发一篇内容都可以积累一小点成就感。愿这片玉米地可以茁壮成长,不期待枝繁叶茂,但希望能有新奇的收获。Oh yeah!