开源GIS实验田

OpenSource GIS Space

  • 内容导航

    Creative Commons
    本站文章全部原创
    转载请遵循创作共用协议
  • 最新评论

    • zhaiduo: 期待GO的web应用...
    • zdnet: 您好!去年8月您参加过我们ZDNET的优秀...
    • oschina: hi,此文已转贴到开源中国社区,网...
    • YUCHENG HU: MarkLogic 已经开始为各大出版机构进行...
    • Gao Ang: DITA的学习成本的确偏高,仅下载翻阅...
  • 热门主题

  • 随机阅读

    • September 2010
      M T W T F S S
      « Aug    
       12345
      6789101112
      13141516171819
      20212223242526
      27282930  
    • Gao Ang

      GaoMiao's Portrait
      有了理想
      就不要寻找放弃的理由

      站点搜索

      • 3 Users Online
    • 只言片语

      “The optimist proclaims that we live in the best of all possible worlds, and the pessimist fears this is true.”-James Branch Cabell
    • 青年是宝藏,青年是黄金;宝藏要挖掘,黄金需熔炼。 ——藏克家

    Go语言近况

    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 »

    DITA与DocBook对比分析

    30th June 2010

    DITADocBook是数字出版领域的两种标准,通过定义规范化的文档描述规则,来解决文档交付过程中遇到的问题。面向不同类型的交付出版物,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 »

    了解REBOL语言

    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 »

    DITA开放工具箱

    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 »

    Hadoop的Python语言封装

    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 »

    QCon Beijing 2010参会随记

    3rd May 2010

    第二次参加QCon企业开发大会,听了不多的几场技术报告,见到不少InfoQ中文站的编辑朋友,遇上很多出没在会场各角落的技术牛人。相比较去年在清华科技园举办的QCon大会,今年会议的组织和内容有了很多新的亮点,当然也有一些需要继续改进之处。

    这次的QCon大会,我主要选择参加了一些国内开发者的讲座,一是希望更多的了解国内的开发社区发展情况,二是在国内开发者讲座中发现值得借鉴之处,易于深入沟通,有机会能够进一步求教与合作。在大会讲座间隙,向邓草原和洪强宁两位演讲者请教了些感兴趣的技术问题。

    邓草原是NetBeans的Scala插件开发者,同时对Scala有着较深入的研究,并且与核心开发团队之间也一直保持沟通。Scala语言我没有在实际应用过,但对语言的并发处理能力和适用场景很感兴趣。邓草原曾是NetBeans Dream Team成员,我也一直关注NetBeans的Platform开发,在采访室旁听了邓草原谈Scala和Erlang的内容,便与他聊起NetBeans插件开发的话题,同时也交换了一些对NetBeans中文社区发展的想法。

    在去年QCon大会上,洪强宁带来的豆瓣架构变迁的讲座很吸引人,今年Python语言的演讲主题同样包含丰富的内容。由于要帮InfoQ做洪强宁的新闻(详见InfoQ)和视频采访,所以我提前根据Keynote幻灯片内容准备了些Python与Web 2.0开发的问题。但我对豆瓣的BeansDB开源项目很感兴趣,采访之后便向@hongqn请教了不少BeansDB在豆瓣内部应用的情况。由于BeansDB类似P2P的去中心化设计,且适用于图像和BLOB内容存储,存储对象比较适合GIS数据特点,感觉BeansDB可能会在地理信息数据组织方面有用武之地,以后使用过程中有问题还需向BeansDB开发者 Davies Liu多请教。

    在国外演讲者中,一个感兴趣的内容是Twitter系统工程师Nick Kallen带来的Twitter可伸缩性数据架构讲座,虽然以后很少能遇到Twitter这样的高并发应用场景,但对于维护这样一个有庞大用户群和海量数据的应用,其复杂程度绝不仅仅是凭想象就能完全了解的。

    记得去年QCon第一天晚宴时,泰稳用小车推出来一个InfoQ庆生蛋糕,在今年QCon的大会晚餐前,还与几个InfoQ编辑猜是否生日蛋糕每年都会有,一年时间过得很快,看见蜡烛荧荧的火苗,耳边响起生日歌时的场景令人怀念。希望QCon能够再接再厉,在演讲者选择、会议服务、互动环节等方面继续改进,体贴开发者们的口味。

    明年QCon见!

    Posted in 诸子百家 | No Comments »

    OGSA-DAI 4.0新增特性

    14th April 2010

    OGSA-DAI分布式数据源访问与集成中间件包含的工作流引擎能够完成数据资源的访问、更新、传输、联合与交付工作,其最新的4.0版本已经释出。在这个里程碑中,OGSA-DAI新增特性如下:

    • 增加OGSA-DAI SQL Views组件,能够与数据库视图交互进行读取操作。SQL Views在实现上多处使用了与DQP相同的SQL解析器;
    • 集成高级数据挖掘与集成项目ADMIRE为DAI提供的通用行为。对于返回的一系列结果元组,允许使用脚本语言完成元组的连接或转换操作;
    • 支持使用Apache Commons DBCP同基于JDBC的关系型数据资源建立连接,通过Commons-Pool创建与数据服务之间的连接对象,并访问数据资源;
    • 数据接收器和数据源操作支持顺序数,在网络中断的情况下允许客户端重新同步;
    • DAI数据接收器和数据源支持非阻塞读写操作;
    • 增加OGSA-DAI工作流的执行情况跟踪页面;
    • 提供服务器文件缓存行为,能够将缓存数据写入服务端文件保存,并提供RESTful形式的访问接口;
    • 给出将OGSA-DAI结果元组转换为KML格式文档的Activities行为;
    • 改进的配置和部署方式,使得完成复杂配置和在服务器之间拷贝配置文件更为简便;
    • OGSA-DAI升级到Java 1.6环境下编译运行。

    在更新的特性中,个人认为比较有用的是通过Apache Commons DBCP连接池与DAI服务进行交互,工作流引擎执行情况跟踪,以及KML格式的元组转换功能。在资源部署方面,先前部署资源和行为的ANT脚本由简单的配置命令代替,并且不需用ANT脚本进行GAR打包,而是仅将包含配置文件的目录拷贝到WebApp下的WSRF文件夹中。OGSA-DAI 4.0的文档也进行了同步更新,感兴趣的朋友可以访问OGSA-DAI文档获取更细节的内容。

    Posted in 网格科学 | No Comments »