OSCON 今年的重点之一是开放的政府,包括在开放源码开发人员和更透明的政府之间可能实现的协作。我也参加了关于改进基于计算机的投票的可靠性的会议。
OSCON 的开场演讲常常会定下大会的基调。Tim O'Reilly(他当然必须遵守大会计划)对于以后几天讨论的问题范围给出一些说明,然后谈到了他当前感兴趣的领域。与开放源码运动中的许多人一样,O'Reilly 最近把相当一部分精力放在政府项目上,与开放源码开发人员一起努力让政府信息资源发挥更大的作用。
在介绍他在 “Gov 2.0” 方面所做的工作之前,O'Reilly 先提到了另外几个有意思的主题,包括数据服务的 “联合” 和社交网络。O'Reilly 非常兴奋地讨论了向更小型的设备(主要是智能电话)发展的趋势,这些设备应用大量传感器(触摸屏、摄像头、麦克风、动作感应器、GPS),可以利用云数据服务实现多种功能,比如语音识别、搜索、定位、面部识别和与社交网络集成。云计算的主要优点是,数据服务之间的协作越多,每个服务的价值就越大;缺点是它有导致垄断的倾向。
说回政府方面。目前,在政府的运作中,各种信息的发布越来越开放,已经向 “开放的政府平台” 迈出了一大步;在开放的政府平台中,数据服务向公民(和开放源码开发人员)提供 SDK 和开放的 API。O'Reilly 高度赞扬了新的国家首席技术官 Aneesh Chopra 在这方面做出的贡献。
O'Reilly 指出,实体 Gov 2.0 具有几个特点。它强调社交网络的透明性,允许公民贡献和协作。它把政府当作一个平台,一种集体行动的方法,但是它更接近 Benjamin Franklin 的公民行动的概念,而不是 Donald Kent 所说的 “自动售货机式政府”。开放源码开发人员的态度是 “给我们工具,我们可以自己做”,这正反映了忙碌的公众的要求。
但是,仍然有一些因素妨碍 Gov 2.0 的发展,主要问题是目前仍然存在错综复杂的获取过程。O'Reilly 以 Brewster Kahle 和 archive.org 作为例子,这个项目希望以最低的成本反映白宫网站的历史状态,希望只花费几万美元构建一个敏捷的项目,而不是花费数百万(甚至上亿)资金开发不灵活和过度设计(且源码不开放的)项目,但是现有的获取过程导致这很难实现。因此,白宫工作人员现在仍然使用不方便又耗时很长的站点快照,与正确的方法相比,这么做效率很低而且成本高得多。
我听了两场介绍开放源码在选举方面的应用的演讲。老读者可能看过我以前讨论开放源码在选举方面的应用的文章,了解我在 Open Voting Consortium (OVC) 做的工作。实际上,我在以前的 OSCON 上介绍过 OVC 的演示/原型系统的技术成果。
今年的一个演讲的演讲者是 Neal McBurnett,他为 Colorado 的 Boulder 市开发了一个使用 Django for Election Verification 的系统。除了他讨论的技术问题之外,引人注目的一点是他促使市政府在 2008 年采用 了这些系统,由此提高了选举的可靠性和透明度。
McBurnett 的演讲没有很深入地讨论代码,而是主要讨论选举审计的设计原则和选举系统的一般原则。他提出的重要原则之一是 Rivest 和 Wack 的 “软件独立性” 概念。简单地说,这种思想要求对软件的依赖并不是必需的,每个组件都是可替代的并通过定义良好的界面操作。纸制选票和开放格式是软件独立性的主要元素。
McBurnett 的演讲主要讨论选票和记票的统计学检验的最佳原则。他介绍了取样的细节以及固定百分比和风险限制审计之间的差异。他的幻灯片很好地说明了这些问题(见 参考资料 中的链接)。
第二场演讲与这个主题密切相关,演讲者是 James Tillman 和 Richard Benham,他们在 Florida 开发了一个选举系统,与卓越的选举活动家 Ion Sancho 一起工作。他们介绍了一个良好的选举系统,这个系统还没有在目前的公共选举中使用(而且还没有发布源代码,但是他们承诺不久就会发布)。
Tillman 和 Benham 通过许多独立项目得出的结论与 OVC 在 2003 年做出的结论相同:最好的投票系统应该使用计算机设备(可能是触摸屏界面)生成投票者可以检查的纸制选票。使用计算机的优点包括:
- 让有身体机能障碍的投票者也可以投票
- 提供多语种功能
- 减少由于填写不当造成的废票
总之,计算机应该只是一个神奇的打印机。与 OVC 的设计一样,Tillman 和 Benham 决定在打印的选票上使用 2D 条形码。OVC 的代码使用 Python、PyGame 和 Postscript 实现这种效果;Tillman 和 Benham 使用 Java™ 代码,大多数工作用 EML、XSLT 和 XSL-FO 等 XML 技术直接完成。在这两个解决方案中,重要的设计元素之一都是使用开放源码工具集,由此确保投票者可以检查系统。
有一个名为 “Hacking the Open Government” 的会议也很有价值,尽管它的重点不是选举。参加这次会议的有 Adina Levin、Silona Bonewald、Kevin Marks、Ilan Rabinovitch 和 California 的州务卿 Debra Bowen。州务卿 Bowen 的出席是吸引我参加的原因;我很高兴看到民选的高官也对开放源码感兴趣。在会议后的提问阶段,我很高兴有机会与州务卿 Bowen 简短对话。
对于这次大会,我特别感兴趣的另一个领域是并发。目前 Moore 定律差不多已经失效了,处理器速度不可能像以前那样快速增长了,所以处理器性能的以后改进方向主要是提供更多的核,而不是提高时钟频率。因此,在核和芯片(以及节点和网络)之间分布工作越来越重要了,这已经成为良好的理论性应用程序设计的重点。另外,良好的分布需要有良好的工具来实现和维护它。
REvolution Computing 的 ParallelR
应公司新闻代表的邀请,我非常愉快地会见了 REvolution Computing 的 CEO,Richard Schultz。这家公司采用许多开放源码公司的模型,为基本的 REvolution R 产品开发增强的企业版,提供各种附加特性,按照一套定价机制让企业版实现商业应用。我对于 REvolution Computing 的市场营销并不太感兴趣,而是对他们开发的产品有兴趣。
在两个版本中,REvolution Computing 都大大提高了 R 编程语言的性能,还增加了用于计算和绘图的与领域相关的库。性能改进源于两个方面。一方面,改进了算法,优化了线性计算的速度。据 Schultz 所说,他们实现了 2-5 倍的改进。这很惊人,但是我更感兴趣的是他们如何在不同类型的资源(从核直到节点集群)之间分布工作。
ParallelR 基于一种为 Linda Coordination Language 开发的并发方法,它从集中管理的元组空间分配工作片段。R 本身很适合这种并行,主要功能都基于 R。ParallelR 增加了 foreach 和 iterator 包,它们为并行计算提供高层构造,从程序员的角度来看工作分配的处理是透明的。对于通常使用 R 执行的大规模计算,这种高层并发是很大的优点。
在讨论异类并发时肯定会提到的一点是,它最适合那些属于 “畸形并行(embarrassingly parallel)” 的问题。幸运的是,大型数据集上的元素相关操作正是这一类问题,这也是 R 用户通常面对的问题类型。
Ted Leung 一直是一位有趣的演讲者 — 他为动态编程语言社区做了许多工作,尤其是在 Python 方面。他的演讲详细讨论了多种并发方法;其中一些是大多数读者熟悉的,但是一些方法对于主流计算机科学课程和实践程序员来说相当深奥。Leung 列举了六七种并发模型 或范型。
大多数程序员最熟悉的并发模型是线程化。大家同样熟悉线程化的问题:锁冲突和死锁。在一般情况下,用锁实现的并行总是需要开发人员做大量显式的计划工作。其他方法虽然都有缺陷,但是大都支持更高层的抽象,避免显式地锁住资源。
一种并发方法是软件事务性内存,这在 Haskell 中已经比较普遍了。 这种方法按照与事务性数据库系统相似的方式对待内存,也就是操作保持原子性,在发生请求冲突时执行回滚和重试。 事务性内存可能导致重复计算,但是在操作冲突不多的情况下,开销仍然比锁机制低。
另一个模型是 Actor 模型,这在 Erlang 中尤其知名(但是 Leung 谨慎地指出 Actor 模型和 Erlang 的发展是相互独立的)。Actor 模型基本上是 “不共享任何东西” 体系结构,在向其他 Actor 发出请求时 Actor 总是传递自含的消息。在去年的 OSCON 上,我写过一份关于 Actor 的讲稿。
Leung 提到了 Linda 和 ParallelR 底层的元组空间模型,但是由于时间的限制,并未详细讨论。在这种模型中,任务按空间和时间分隔开,读和写也是分开的。
Leung 还提到了 Bill Ackerman 的 “数据流” 概念,这个概念支持声明式并发。这种方法的问题是,尽管它对问题进行划分,但是无法处理非确定性因素(也就是说,它只适合纯功能性语言);如果需要处理真实的非确定性因素(比如输入和输出),就需要 Actor。
Leung 讨论的最后一种模型是持久化数据结构。这是一个不完整的模型;它不能解决所有并发问题。但是,它是一种良好的措施。这种模型很早就出现了,但是在最近一两年,由于在 Clojure 语言中的应用开始流行了。基本思想是所有数据结构都被保存(即不可变),通过建立副本表示各种修改。实现不可变性之后,与锁相关的所有问题就不存在了。并非每个数据结构都是稳定的,但是大多数广泛使用的数据结构都有变体,它们会保持对应的可变版本的 big-O 效率(关于 big-O 表示法的更多信息请参见 参考资料 中的链接)。
Howard Lewis Ship 在他的演讲中介绍了 Clojure 语言。我听到过关于这种用于 JVM 的新语言的各种议论。当然,您可能知道 Clojure 实际上是一种非常老的语言 Lisp(但是在内置的数据类型方面有一些改进,还增加了一些语法)。
我很高兴地看到 Clojure 有可能实现一些具体的发展,但是目前还不确定。Ship 介绍了 Clojure 的许多特性。由于 Clojure 是在 JVM 之上构建的,它的地位与其他 JVM 语言相当,尤其是能够访问 Java 语言附带的所有标准库(或者说,现有的任何 类)。
从并发的角度来看,Clojure 取得了许多进展,至少是在可能正确的方向上有所进步。它大量采用持久化数据结构来避免冲突问题。在可能产生操作冲突的一些领域,Clojure 使用软件事务性内存来管理并发性。另外,还在 Clojure 之上构建了一个代理框架。根据我的理解,基本功能只允许在同一 JVM 中的线程之间实现代理,但是我肯定有人已经或将会构建更大范围的多节点代理系统(或者干脆使用现有的 Java 代理系统之一)。
学习
-
了解关于 O'Reilly Open Source Convention 的更多信息。
-
Open Source for America 项目致力于推动通过开放源码改进政府的工作。
-
Open Voting Consortium 致力于保证准确、透明的公共选举。
-
Election Markup Language (EML) 提供一种可靠的 XML 规范,那些提供选举系统和服务的硬件商、软件商和服务商可以用它交换数据。EML 是由 OASIS Election and Voter Services Technical Committee 制订的。
-
观看 Neal McBurnett 演讲的 PowerPoint 幻灯片 “ElectionAudits: a Django App for Advanced Election Auditing”。
-
“Hacking the Open Government” 会议讨论如何使用 Internet 上的大量数据。
-
REvolution Computing 的 ParallelR 2.0 为分类和分步统计方法提供并行的例程,还可以轻松地对定制的 R 程序进行并行化。
- Wikipedia 提供关于 Linda 的并发构造 的背景知识。
- David 的 “Statistical programming with R” 系列提供关于 R 编程的一些参考资料:
- “使用 R 编写统计程序:第 1 部分. 初涉大量统计工具”(developerWorks,2004 年 9 月)帮助您整理原始数据。
- “使用 R 编写统计程序: 第 2 部分. 功能编程和数据采集”(2004 年 10 月)讲解如何发现和分析异常情况。
- “使用 R 编写统计程序,第 3 部分:可重用和面向对象编程”(2006 年 1 月)介绍 R 的底层特性。
-
阅读来自 Ted Leung's survey presentation 和 Howard Lewis Ship's presentation on Clojure 的 PDF。
-
使用 Clojure 对 Java 虚拟机进行更动态的编程。
- Wikipedia 提供对 big-O 表示法 的解释。
-
并发也是 OSCON 2008 的主题之一,David 的另一篇文章 讨论了这次大会。
- 在 developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。
- 在 developerWorks 上查阅所有 Linux 技巧 和 Linux 教程。
- 随时关注 developerWorks 技术活动和网络广播。
获得产品和技术
-
使用可直接从 developerWorks 下载的 IBM 产品评估试用版软件 构建您的下一个 Linux 开发项目。
讨论
-
加入
My developerWorks 社区;您可以通过个人信息和定制主页获得自己感兴趣的 developerWorks 文章,并与其他 developerWorks 用户进行交流。

David Mertz 从 2000 年开始撰写 developerWorks 专栏可爱的 Python 和 XML 问题。请阅读他的书 Text Processing in Python。关于 David 的更多信息,请查阅他的 个人网页。