EndNote论文撰写

EndNote由美国科学情报出版公司ISI开发,是功能强大的文献书目信息管理软件,可以帮助我们管理需要引用的各种参考文献,建立个人的文献知识库。由于论文写作需要,也开始使用EndNote来搜索和组织自己感兴趣领域内的各种参考文献。

顺便提一下,传说中的SCI也是由ISI公司组织出版。科学引文索引SCI(Science Citation Index)是压在大家头上的一座大山,茶余饭后常常言毕即称SCI,看来要达到SCI的标准并非易事,现在开始熟悉ISI的EndNote也许是个不错的预热过程。

在EndNote中,用户可以导入和编辑书目信息,并且利用这些书目信息在论文中插入引用并创建参考文献,还可设定各种期刊的论文版式及相应的参考文献格式,按照不同版式的Word模板来进行投稿论文的撰写。另外,使用者不必关心文献引用顺序的调整和变化,因为EndNote可以根据排序先后自动调整Word中文献引用的次序。并且在EndNote中还可以记录读书笔记和个人知识管理。

清华于歆杰老师的EndNote视频教程很有帮助,但是有些内容还是稍稍落后于当前的版本更新。对于CNKI文献数据的支持,常用的Word或UE宏替换的方式都比较繁琐,而NoteExpress的NEImportPreprocess转换工具对于CNKI 5.0的支持不是很好。最后在CvtCNKI开源项目的帮助之下找到了完美的解决方案,CvtCNKI实现了CNKI文献数据库的EndNote导入,同时项目还支持包括维普、China-pub、Dearbook等文献资源查找结果的导入,很是方便。

其实也很喜欢LaTexDocBook的排版方式,遗憾的是在国内的使用并不普及,Latex生成的PDF文件曾被对方询问是否有Word版本。所以还是随大流最方便,不去冒充特殊份子,毕竟Word如果用的好了也可以实现赏心悦目的排版布局。但是对于并不安分守己的朋友,可以看看这篇关于自由软件的 文章,大部分的常见商业软件,都可以在这找到很好的替代方案。

实验室里的开放源码

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

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,无疑都带给有计算需求的用户一笔巨大财富。

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

Java实现MSN机器人

尽管对IM软件并没有什么特殊的喜好,但为了方便日常交流,MSN每天都要用到。其实MSN的通讯协议公开已久,基于协议的拓展开发有不少,在Linux下广泛使用的Gaim就支持MSN的通讯协议。如果考虑根据开放的协议,开发一个自己的MSN机器人,相信会是一件很有意思的事情。

只是有了接口规范还不能直接用于开发,热心的开源爱好者基于规范提供了各种编程语言的MSN开发库,极大方便了基于MSN库的拓展开发。前不久OpenFans.net的朋友提供了一套基于Java-JML库的代码,仔细研究一番,真正体验到了代码实现MSN机器人的乐趣。

代码本身并不复杂,功能主要是调用JML的库函数来实现对于MSN机器人的控制,包括MSN的登陆、得到在线好友列表、添加好友、得到好友的消息、查询后台数据库内容、返回给好友数据库查询结果等等,还可以实现好友上线自动问候等功能。

Java MSN Library使用了国人开发的开放源代码项目Cindy来处理基于Internet的通讯。在Eclipse环境下导入工程,配置好MSN机器人专用的帐号和登陆密码,运行程序就可以自动连接到MSN服务器登陆。

目前这套MSN机器人的代码正在不断完善中,感兴趣的朋友可以加上我根据代码修改的机器人:lreiscn@hotmail.com试一试,不过因为时间限制,这个程序很少运行调试。等功能成熟后,MSN机器人原作者Frank或许会把代码放在OpenFans.net的代码库当中,供爱好者使用研究。

进入Django的世界

对动态语言的Web开发很有好感,众多的动态语言比较之后,发现Python的社区是最成熟的,同时Python社区拥有一大批优秀的程序员,而且大多都具有开源的思想和精神。在基于Python的Web框架中经过一番取舍比较之后,选择了Django作为今后的开发框架,主要原因是看中Django巨大的发展潜力。

积极推进开源项目的IBM也在Developworks中提供了Django的教程,并且还有Limodou撰写的Django Step by Step可以快速入门,同时啄木鸟社区也提供了大量的官方文档翻译,简化了学习成本。Django开发先驱JeffCroft也在其站点上提供了按照标准Web2.0模式发布的Lost Theory站点源码。还有Holovaty在Blog上招募开发者来扩大ChicagoCrime站点的影响,使其与传统的新闻传媒相结合。可见Django已经开始受到越来越多的关注。

如果对Python还比较陌生,Django的上手或许并不轻松,并且很有可能被配置文件的编写和复杂的Django自带类库搞得手忙脚乱。但如果静下心一步步的学习,会渐渐体会到Django赋予开发者的敏捷与自由。在使用Django完成第一个站点Demo之后,把感受到的一些Django优点列举如下:首先,Django自动生成的admin管理界面,可以根据在Models里定义的显示方式,根据字段类型生成后台管理代码。其次,使用syncdb命令同步数据库之后,Django会根据模型的定义自动完成ORM的数据库映射工作,屏蔽了底层数据库细节和SQL查询的编写,感觉真的是非常神奇。还有,Django的模板里面嵌入变量和简单的控制语句非常方便,并且模板可以支持多层嵌套,每一层都可以使用DIV+CSS方式完成布局。

当然,关于蟒蛇与红宝石的争论一直没有停止,甚至在Django的官方站点上有专门的栏目来比较Django与ROR两种敏捷开发框架的优劣。不过争论毕竟是为了促使相互的学习与共同发展,在此感谢一下Yang.King、魏忠、Limodou提供的Django指导和文档,让我的第一个应用有了参考的基础。感兴趣的朋友,可以下载我帮实验室写的周志应用录像,体会一下Django带来的新鲜体验。

适于敏捷开发的Web框架

以前常关注Java开源Web框架的应用研究,还专门写过一篇论文讲基于Hibernate的实体关系映射。最近一直在做Java富客户端应用,有些生疏Web框架的发展。偶尔了解一下Web框架的发展动向,发现又是一番新的景象。

这几年MVC设计思想的繁荣应归功于Java框架的带动,Struts的普及使得MVC设计达到鼎盛,一时间MVC似乎成了判断是非好坏的标准。不少Java实现的站点采用Freemarker框架生成静态html以加快页面响应速度。如果结合其他框架,可以有类似Freemarker+Webwork+Spring+Hibernate这样的选择。但是由于开发效率一直比较低同时后期维护具有局限性,面向J2EE的Web开发开始走向一个低谷,激进分子甚至宣称“J2EE的时代已经终结”。虽然此观点有失偏颇,但还是欣喜的看到,基于Ruby、Python等动态解释型语言在Web上的迅速发展的确令人振奋。

这里主要说一下Ruby on Rails,ROR是由来自37Signals的一批非常Cool的年轻人开发,在37Signals官方站上有ROR实现的独具特色的站点。有些人预言37Signals将成为下一个Google,也许吧,毕竟网络时代已经可以把创造神话的时间缩短到让我们来不及反应。

与Python实现的Web框架Django相似,ROR也是应用在web应用开发上的Framework。ROR由Ruby语言编写,其目的是让web开发变的快速而简单,ROR极大程度上简化了传统的Web开发难度,让开发者专注于富有创造力的工作,非常适于敏捷开发的要求。ROR的便捷之处在于,只要有了系统的完整E-R 图设计,就可以在 ROR中自动生成所有的 Models,Views 和 Controllers,可以在此基础上不断细化完善成为自己的应用。而且 Rails 还提供内置方法以及AJAX模块来加速开发。毕竟Ajax目前被炒的火热,在必要时可以加入,可以使用户有一些很Cool的体验感觉。希望Python的世界也会出现一个类似ROR这样可以一统目前纷乱局面的Web框架,但就目前的现状看,还没发现有哪个Python项目有能达到ROR这样优秀的潜力,看来还需要等上不短的时间。

抽空打算用ROR实现一个原型站点试试,不过发现似乎快成闲人了,因为只有闲人才会这也学那也学,是好奇心较重还是比较闲也说不准,反正平日的时间大多都塞满,还有许多事情要赶着做出来,慢慢来吧,不过ROR带来的诱惑还是很大的。