7th September 2010
达尔文信息分类体系架构DITA是面向主题的文档交付解决方案,DITA基于XML表示并继承XML的文档描述元素,覆盖内容信息组织、编写、生成和交付的整个出版过程,并可以面向不同领域的技术出版物进行扩展和定制。
DITA侧重于交付主题粒度的知识单元,再将知识单元进行重组和映射,生成最终交付的出版文档。DITA的设计理念,与传统着眼于书籍或文档交付的排版技术在思路上有很大区别。同时在应对局部知识点更新方面,DITA有着先天的优势。
在DITA的主题(Topic)粒度划分方面,我认为主题作为片段信息的载体,首先应具备自包含的特性,即主题具有信息描述的完备性,能够准确完整的表达内容含义,所以划分的粒度不易过细。同时,作为建立后续关联映射的基础单元,主题的粒度也不易过粗,应该便于通过DITA映射进行知识的共享和重用。
在近期参与的国家数字复合出版工程预研工作,对DITA技术体系进行了分析和梳理,并对DITA与主流的数字出版技术进行了对比。DITA涵盖的内容非常丰富,仅最新1.2版本的技术说明和语言规范就有1200余页文档,包含创作和组织面向主题文档的各种信息,以及DITA使用过程中的组织、拓展和约束内容。
目前我对DITA的了解仅是庞大体系中的一小部分,在与合作单位的讨论交流中,就掌握的内容整理了一份DITA技术分析汇报,欢迎感兴趣数字出版的朋友共同交流DITA技术。
DITA技术分析汇报(PDF:1M):http://www.gaoang.com/files/dita-spec-gaoang.pdf
Posted in 思维记录 | No Comments »
6th September 2010
诞生于2007年的Clojure是JVM平台上的Lisp实现,Lisp 以强大的功能和表达性而著称,但应用范围存在着固定的局限,于是发起人Rich Hickey设计Clojure的初衷便是希望得到一门能够服务于高并发应用场景,较Lisp更为先进的函数式编程语言。
Clojure 保持了函数式语言的主要特点,同时避免了不稳定状态、递归和高阶函数。Clojure在语法上非常简单,其设计优势在于,让开发者绝大部分工作专注在真正解决问题上,而非耗费在如何模块化设计和如何进行解耦层面上。与Lisp语言相似,Clojure也是基于S-表达式设计。S-表达式给出了表达半结构化数据的约定,以其在Lisp 语言中的广泛应用而为人熟知。S-表达式在Lisp 中既用作代码,也用作数据,其最通用的特性是使用S- 表达式作为括号化的前缀表示。
与JRuby 、Jython 、Scala等依托于JVM 运行的语言相同,Clojure 是运行在Java虚拟机平台上的Lisp 方言,能够直接调用Java 类库,借助JVM 平台广泛的适用性,为Clojure语言的应用拓展了空间。此外,Clojure 可以说是社区智慧的结晶,在Rich Hickey等核心开发者之外,Clojure 语言的补丁、文档、测试和不少新功能的开发思路都是来自于开源社区参与者的贡献。
Clojure 之所以受到广泛关注,最主要的原因来自于其并发特点,如支持软件事务存储(Software Transactional Memory,STM )等特性。在实际应用方面,站点FlightCaster为用户提供了航班延误的预告信息,同时也为iPhone和Blackberry提供了终端应用。FlightCaster的Web前台用Rails 实现并部署在Heroku上,后台数据分析和处理程序则由Clojure实现,同时在后台使用了Hadoop、Cascading、Cloudera等工具。在FlightCaster 站点中,数据预处理并转换成适当视图用以分析的操作,以及所有统计推断和机器学习代码都使用Clojure 实现。FlightCaster站点将Clojure数据结构用作通信和存储的中间表示,Clojure 代码分析得到的航班预告模型,以Json中间格式来表示,然后推送到Rails 前端,以Json格式读取数据并展示给用户。
对于Clojure 开发者来说,开发工具首选是使用NetBeans IDE的Enclojure插件,Enclojure 提供了支撑Clojure 开发的一组类库,包含独立的REPL(Read/Evaluate/Print/Loop)支持,同时支持REPL 和远程JVM 建立连接。Enclojure 提供的编辑器支持具备语法高亮显示、函数声明定位,S-表达式导航,Lisp 风格缩排,代码结构化导航,内置项目模板,断点设置和单步调试,并能够对代码错误给出超链接提示。此外Eclipse 也提供了专门的Clojure 语言开发插件CounterClockwise,在源代码编辑,代码调试,REPL 支持方面也有独到之处,适合于习惯于Eclipse 的开发者使用。
Posted in JAVA魅力 | No Comments »
8th August 2010
Go语言是Google公司的实验性语言,以BSD协议开放源代码。Go语言在Inferno操作系统相关的研究工作基础上开发,最初由Rob Pike等Google工程师在2007年9月启动设计工作,在2009年11月正式对外发布。
Go将动态语言易于编写的特性和静态语言的高效性相结合,具备良好的易用性和极佳的执行效率。Go语言最初定位于网络服务器、存储系统和数据库的程序设计,同时在语言中包含并发构造体,以方便的帮助开发者创建并行任务。Go语言具有效率极高的编译器,目前Go编译器能在Linux、FreeBSD以及Mac OS X平台下运行,但暂时没有对Windows环境提供编译支持。Go开发团队曾在博客中表示,编译完成的Go程序运行速度接近C语言实现的程序。
在今年五月份举办的Google I/O大会上,Go语言背后的工程师Rob Pike和Russ Cox两人一同为开发者带来了Go语言编程讲座,解释Go语言的灵活设计和独到之处。Go语言的主要设计者Rob Pike是Google公司的资深工程师,在分布式系统、程序语言设计以及软件开发工具方面有着多年的经验。此前在贝尔实验室工作期间,Rob曾是网络操作系统Plan 9的设计者,同时也是Inferno 操作系统的设计者,Rob还曾与AWK 和AMPL编程语言的设计者Brian Kernighan一起合著有两本Unix环境下编程语言的书籍。同时,Rob Pike还给出一份可供参考的Go语言教程。
针对Google I/O大会上收集到开发者的提问,在Go开发团队博客上给出了常见问题的FAQ。在Android平台支持方面,Go编译器支持面向ARM处理器的代码生成,所以在Android平台上运行Go程序是可行的,Go语言开发团队也将积极推进Android平台上的开发工作。由于Go具备简洁的语法和语言本身的一致性,已有大学执教的老师表示将会在自己教授的编程语言课程中为学生开设Go语言选修项目。
目前在Google内部已有部分应用使用Go语言来实现,同时开发团队表示,Go已相对成熟,完全能够用于最终系统的开发和交付,甚至可以使用Go来开发Web应用。在后续工作中,Go开发团队将不断对语言进行改进提升,并随时欢迎开发者在社区中反馈Go语言开发时遇到的问题。目前在国内使用Go语言进行实际开发的公司还为数很少,尝试使用Go语言的开发者大多源自个人兴趣或技术预研,随着Go语言类库和成功案例的增多,将会有越来越多国内开发者在实际开发中尝试Go语言带来的效率和便捷。
Posted in 诸子百家 | 3 Comments »
30th June 2010
DITA和DocBook是数字出版领域的两种标准,通过定义规范化的文档描述规则,来解决文档交付过程中遇到的问题。面向不同类型的交付出版物,DITA和DocBook各有见长,但在实际应用中也有自身的限制因素。结合近期我参与的项目实践,对两个标准的对比分析总结如下。
DITA解决了出版物的结构化描述和内容重组问题,且支持多语言版本制作,适用于对格式有严格限定的技术手册类出版物。但DITA不能实现很完美的样式渲染,且对于内容与格式一体化的复杂出版物,DITA很难进行主题和界定与划分。所以使用DITA进行书籍出版的成本和难度较高。
相比较来说,DocBook适用于通用出版物,文档易于组织和排版。但DocBook内容以Section段落组织,不具备DITA的内容映射机制,无法做到类似Topic这样粒度的内容划分与重组。且对于内容需要频繁修改的文档排版,Docbook略显力不从心。
DITA和DocBook专注于交付技术信息,但DITA侧重于交付主题,而DocBook侧重于交付书籍。DITA提供基于主题级粒度的信息分类,允许作者组织并描述特定信息领域。在生成多种文档格式的信息重用过程中,能够保持内容的高度一致性。在最终交付物的输出格式方面,DITA能够生成PDF、CHM、HTML等大部分的出版交付类型。DocBook常用的交付格式为PDF和HTML,其他输出格式需要借助相关的功能插件。
LaTeX也是出版常用的格式,但我感觉LaTeX与DITA或DocBook侧重解决的技术层面有较大的不同。LaTeX是富格式文本集,尽管对科技论文撰写很合适,LaTeX适用于作者个人创作,但LaTeX文档内容和标签的耦合度非常紧密,并不适合于出版社的排版工作,以及文档内容的抽取重用,还有多种交付文档的组合生成。
在学习应用方面,DITA包含众多语法和标签定义,在应用过程中的学习曲线较陡,在文档生成过程中一般需要使用Ant命令进行编译。而DocBook相对容易理解和使用,一般使用者从了解到上手使用DocBook制作文档仅用一天时间即可。希望了解更多DITA与DocBook的对比分析的朋友,可以进一步阅读DCL数据转换实验室包含更为详尽内容的文章。
Posted in 思维记录 | 3 Comments »
12th June 2010
在今年QCon北京大会上,来自支付宝的架构师蔡学镛为参会者分享了REBOL编程语言相关的主题讲座。对大多数开发者来说,在实际开发项目中选用REBOL语言目前并不算多,但REBOL语言却有着与生俱来的优势,能够帮助程序员得心应手的完成特定应用场景的开发工作。
REBOL是Lisp语言的替代品,由业界知名的操作系统和编程语言架构师Carl Sassenrath设计,是为分布式计算和通信量身打造的轻量级开发语言。REBOL完全能够胜任Lisp语言的应用场景,同时REBOL又打破了Lisp的局限。REBOL更类似于一般编程语言的表达方法,允许使用中缀运算符,且不需使用Lisp语言那样一对对嵌套的小括号来表示递归。REBOL语言具有统一的库函数,如REBOL/Core、REBOL/View、REBOL/Command、REBOL/SDK、REBOL/IOS等库函数,在图形界面、编程辅助、网络处理等方面提供丰富的支持。
REBOL的图形界面设计能力十分强大,通过简单的图形界面编程语句就可以完成图形界面的创建,并且图形界面的展示美观漂亮。同时REBOL内置了View Draw Dialect方言,帮助开发者以最简便的方式完成图形界面中元素的定制,同时可以根据开发者的需求进行方言的拓展,定义开发者需要的子语言。作为网络编程语言,REBOL在网络处理方面具备很强的能力,对于文件下载、网页抓取、邮件接收等操作,在REBOL中仅需几条语句即可完成操作。
对比REBOL语言,在动态语言中应用非常广泛的Python语言,具有完整的面向对像特性,语言简便易用,编写的程序非常优雅。从加快开发速度的角度考虑,能够代替C和Java语言完成工作任务,同时与C语言的沟通能力非常好,任何为C编写的接口能够很容易转化为Python接口。而REBOL是基于相关表达式的对象语言,REBOL被称作最接近人类语言的编程语言,有着自身的独特之处,能够方便的表示数据和元数据。REBOL的设计理念之一就是始终保持小巧,即便REBOL已内置了几十种数据类型和数百条函数,以及多种Internet协议、错误处理等内容,REBOL解释器仅有几百K大小,REBOL程序编写方便,在代码编写时程序不需要对库和包含做声明即可使用,帮助开发者以最精炼的语句实现应用。同时REBOL代码可以跨越几十种系统平台,在不同平台之间移植代码不需做任何改动。
需要强调的是,REBOL是商业公司产品,可以提供给开发者免费使用,但源代码并不开放,使用部分REBOL函数库如数据库连接库,需要支付额外的费用。但从另一个角度看,由公司维护的语言能够在最大程度上保证类库的统一,减少开发者额外的负担。
目前REBOL语言的解释器最新版本为R3 Alpha,在REBOL语言中文参考文档方面,蔡学镛和蔡民奎先生已经在网络整理了REBOL语言的中文参考文档,其中包含REBOL 3.0指南,REBOL内建函数,REBOL数据类型等不同的内容,感兴趣的开发者甚至可以加入其中,一同更新维护REBOL语言的中文资料。
Posted in 诸子百家 | No Comments »
4th June 2010
DITA(
达尔文信息分类体系结构,Darwin Information Typing Architecture)是一种面向主题的文档类型定义(Document Type Definitions,DTD)系统,用于定义编写和交付内容信息的规则。DITA通过XML架构来描述、管理和发布内容信息,并用于内容信息的编写、生成和交付。
DITA最初由IBM开发,目前交由结构化信息标准组织OASIS维护,DITA通过将文档组织为可重用的模块(Topics主题)并将模块进行组织来表示信息的内容,DITA提供了主题的元数据注释,用户可以便捷的搜索、过滤和处理内容。同时DITA的结构化编写方式,支持内容的重用。
DITA开放工具箱是OASIS的DITA标准的DTD和Schema的Java实现,能够将DITA文档的Maps和Topics转换为最终的交付文档(HTML、PDF、RTF)。DITA开放工具箱包含Ant构建模板、DITA词汇表DTD定义,DITA词汇表的XML Schema定义以及Java文档处理类库等内容。对于DITA文档,源文件和映射文件中的标记项由DTD和Schema定义,借助XSLT和CSS文档,经处理渲染后得到最终交互文档。
在商业产品方面,提供软件产品生命周期管理的PTC公司开发的XML文档处理器Arbortext,支持DITA的编辑与转换工作。Syntext公司开发的开源的XML编辑器Serna Free支持DITA、Docbook、XHTML等XML文件类型,能够实现可视化的编辑工作。
之前在IBM DW撰写Django文章使用的投稿模板,应该就是基于DITA的思想进行的排版实现。对于初次接触DITA文档格式的使用者,DITA开放工具箱提供的Ant编译方式不太直观,可以先从所见即所得的编辑器开始入手使用DITA,建立一个感性的认识。
Posted in 诸子百家 | No Comments »
25th May 2010
Hadoop使用Java语言实现,编写具体的应用业务除了借助Hadoop的Java API外,还可以使用开发者所熟悉的Python或C++等其他语言编码。在Hadoop安装路径的/src/examples/目录中,给出了Python实现的分布式应用示例。除了将Python代码通过Jython运行时转换为jar包部署,还可借助Hadoop Streaming工具,利用可执行程序或脚本代码实现Map-Reduce中的Mapper或Reducer过程,借助标准输入输出交互数据而不需编写Java实现类。
如何以Pythonic的方式完成Hadoop经典的WordCount词频统计工作,来自德国的开发者Michael G.Noll在博客中撰文讲解了实现方法:在Python编码中,通过STDIN标准输入和STDOUT标准输在Map和Reduce代码之间传输数据。Python的sys.stdin方法读取输入数据,并通过sys.stdout打印输出数据,而数据的交互处理过程交由Hadoop Streaming来处理。以同样的方式,可借助Perl、Ruby或其他动态语言完成Map-Reduce处理过程。
在Hadoop API的Python封装方面,著名音乐站点Last.fm发布了基于Python的Dumbo(小飞象)项目,Dumbo能够帮助Python开发者更方便的编写Hadoop应用,并且Dumbo为MapReduce应用提供了灵活易用的Python API。Last.fm的开发者,同时也是Dumbo项目发起人Klaas Bosteels 认为,对于定制Hadoop应用,使用Python语言代替Java会让工作变得更有效率。
在基于Dumbo框架的应用实现中,不需模仿Michael G.Noll给出的代码将mapper和reducer存放于不同的文件中,而只需在程序中定义mapper和reducer函数,并通过语句dumbo.run(mapper,reducer)来启动执行过程。在作者给出的Dumbo示例中,能够将Hadoop原先60行Java源代码实现的WordCount示例,简化为Python实现的7行源代码来完成。此外,Dumbo还提供了一些易用的功能,包括向dumbo.run()执行操作传递第三方参数。并在Dumbo项目文档中,给出了从Apache访问日志文件中进行IP统计的完整示例,以及四个简短的应用示例。
另外一个相似的项目Happy,则为Jython开发者使用Hadoop框架提供了便利,Happy框架封装了Hadoop的复杂调用过程,让Map-Reduce开发变得更为容易。Happy中的Map-Reduce作业过程在子类happy.HappyJob中定义,当用户创建类实例后,设置作业任务的输入输出参数,然后调用run()方法即可启动分治规约处理,此时,Happy框架将序列化用户的作业实例,并将任务及相应依赖库拷贝到Hadoop集群执行。目前,Happy框架已被数据集成站点freebase.com采纳,用于进行站点的数据挖掘与分析工作。
Posted in JAVA魅力 | No Comments »
4th May 2010
第二届中国云计算大会将于5月21、22日在北京召开,大会日程安排已经确定。会议演讲者以高管和领导为主,涉及云计算技术细节的内容不会特别多,但有些演讲人很吸引我,到时我也会过去大会现场听一些感兴趣的报告。
在本次大会的众多演讲专家名单中,来自南加州大学(USC)的黄铠教授(主页)是我最期待见到的一位。黄老师是南加州计算机系终身教授,同时也是IEEE Computer Society的理事,黄老师一直从事计算机体系结构和并行处理的研究与教学工作,研究生时读的那本厚厚的E文计算机体系结构便由黄老师撰写。目前黄铠老师致力于可扩展多处理机系统、并行程序设计工具和超级计算应用等方面的研究。在本次大会黄老师除参与圆桌论坛外,还将做一场题为”受信任云计算的安全、隐私、和数据保护”的讲座。
09年夏天到武汉,在海鸥的引领下参观了华中科技大学计算机学院的几个实验室,当时的第一感觉就是人多力量大,项目也都是国家级的,”十二五”期间计算机系统虚拟化973项目(主页)也是由计算机学院牵头,在虚拟化技术方面有较深的积累。本次大会上,华科计算机学院金海院长的讲座也值得一听,内容应该包含华科在服务计算、虚拟化技术方面的研究进展。
人民大学孟小峰教授在数据库技术、云数据管理等研究方向有独到之处,他的演讲主题”云数据管理技术”值得一听。此外,微软张亚勤博士”云计算发展方向与技术趋势”的主题讲座以及解放军理工大学刘鹏教授主持的Track我也比较关注,到时会准时去听。
在国家”十二五”规划中,中国云将作为一个大的研究项目投入开发建设,期待承担项目的各个高校或研究单位能够多从实用角度出发,集中力量做好真正能转化为产业化生产力的技术。希望本次云计算大会,能为IT业界和学界研究提供更多有益的引导和借鉴。
Posted in 诸子百家 | 3 Comments »