交互式、协作式
和可复制科学计算和教育的开源框架

Fernando Perez     Brian E Granger
加州大学伯克利分校 加州理工州立大学圣路易斯奥比斯波分校
我们提议构建开源工具来支持科学研究和教育中常见的各种计算工作阶段。我们的工具将涵盖研究创意的整个生命周期,从最初的探索到发表和教学。它们将使可复制研究成为自然结果,并将代码、已发表结果和教育材料之间的差距缩小。该项目基于我们团队在过去十年中开发的现有、经过验证的开源技术,这些技术已在学术界和工业界得到广泛采用。

计算研究生命周期的工具

科学研究已普遍采用计算。除了实验和理论之外,模拟和数据密集型发现的概念已成为科学的第三和第四支柱[5]。如今,即使是理论和实验也是计算的,因为几乎所有实验工作都需要计算(无论是在数据收集、预处理还是分析中),并且大多数理论工作都需要符号和数字支持来开发和完善模型。翻阅任何主要科学期刊,你很难找到一篇不依赖于计算来发现的出版物。
然而,尽管计算如此重要,但在科学家的培训和日常研究中,它通常被视为事后才想到的事情。大多数在职科学家都目睹了计算如何被视为一项次要任务,学生和博士后在“进行中”学习,几乎没有接受任何培训来确保结果是可信的、可以理解的,最终为可复制的结果奠定坚实的基础。软件和数据存储组织混乱、缺乏文档和测试。使用各种软件工具,却很少关注捕获出现的复杂工作流,而且代码的演变通常不会随着时间的推移而被跟踪,这使得难以理解如何获得结果。最后,科学家在研究中使用的许多软件包都是专有的和闭源的,这使得社区无法完全理解最终的科学结果。这种傲慢做法的后果是严重的。仅举两个广为人知的情况,考虑一下公众对“气候门”丑闻[4]失去信心,或者杜克大学癌症试验丑闻,其中草率的计算实践可能导致几名患者出现严重的健康后果[3]
这是一个庞大而复杂的问题,需要改变新科学家的教育过程、晋升和奖励的激励模式、出版系统等等。我们无意在这里解决所有这些问题,但我们相信,这个问题的一个核心要素是科学计算工作中可用软件工具的性质和质量。基于我们在过去十年作为执业研究人员、教育工作者和软件开发人员的经验,我们提出了一种综合的计算方法,其中考虑了科学研究的整个生命周期,从最初探索思想和数据到最终结果的展示。简而言之,此生命周期可细分为以下阶段
在此项目中,我们解决了以下问题。没有能够跨越整个计算研究生命周期的软件工具。结果是,研究人员被迫在这些阶段中的每一个阶段使用大量不相干的软件工具,采用一种笨拙的工作流,阻碍协作并降低效率、质量、稳健性和可复制性。
这些可以用一个例子来说明:研究人员可能会使用 Matlab 进行原型设计,在 C 中开发高性能代码,通过在图形用户界面 (GUI) 中调整控件来运行后处理,将数据导入回 Matlab 以生成绘图,在 Adobe Illustrator 中手动润色生成的绘图,最后将绘图粘贴到出版手稿或 PowerPoint 演示文稿中。但是,如果几个月后研究人员意识到结果有问题,会怎样?他们能够知道自己单击了哪些按钮,以复制可以生成更新的绘图、手稿和演示文稿的工作流的机会有多大?其他研究人员或学生能够复制这些步骤以学习新方法或了解如何获得结果的机会有多大?审阅者如何验证程序和整体工作流没有错误?即使研究人员成功地记录了每个程序和整个工作流,他们也必须承担巨大的认知负担才能跟踪所有内容。
我们建议开源 IPython 项目 [9] 为这些问题提供了解决方案;一种能够跨越整个计算研究生命周期的单一软件工具。在高级开源编程语言中,Python 如今是通用源科学计算的领先工具(与用于统计的 R 一起),在研究学科、教育和工业中得到广泛采用,并且是 CERN 和哈勃太空望远镜科学研究所 [10] 等机构的核心基础设施工具,215]。PI 创建 IPython 作为交互式和并行计算的系统,这是科学 Python 的事实环境。在去年,我们开发了 IPython Notebook,这是一个基于 Web 的交互式计算笔记本,将代码、文本、数学、绘图和富媒体组合成一个单一的文档格式(参见图 1.1)。IPython Notebook 的设计目的是让研究人员能够在研究生命周期的所有阶段之间流畅地移动,并且已经得到迅速采用。它为所有计算提供了一个集成环境,而不会将科学家锁定在特定的工具或格式中:笔记本始终可以导出到常规脚本中,并且 IPython 支持执行其他语言(如 R、Octave、bash 等)中的代码。在此项目中,我们将扩展其在研究周期以下阶段中的能力和相关性:交互式探索、协作、发布和教育。

先前工作

在本节中,我们将描述研究人员在计算工作中使用的现有软件工具概况。我们重点介绍本项目将解决的核心问题,即研究人员在经历不同的研究阶段时被迫使用大量不相关的软件工具。然后,我们详细介绍我们在开发 IPython 中完成的先前工作,为我们提出的未来工作奠定基础。

2.1 现有软件工具的拼凑

对于个人探索性工作,研究人员使用各种交互式计算环境:Microsoft Excel、Matlab、Mathematica、Sage [12],以及用于统计学的更专业的系统,如 R、SPSS 和 STATA。这些环境将交互式高级编程语言与丰富的数值和可视化库结合在一起。这些环境的影响不可低估;研究人员几乎普遍使用它们进行快速原型制作、交互式探索以及数据分析和可视化。但是,这些环境有一些限制:(a) 其中一些是专有的和/或昂贵的(Excel、Matlab、Mathematica),(b) 大多数(Sage 除外)专注于使用一种相对较慢的编程语言进行编码,并且 (c) 大多数(Sage 和 Mathematica 除外)没有丰富的文档格式,即除了源代码之外,还可以包括文本、方程式、图像和视频。虽然使用专有工具本身不是问题,并且可能是业界的良好解决方案,但它阻碍了科学合作和共同科学遗产的构建。除非所有同事都能购买相同的软件包,否则科学家无法共享工作,学生被迫使用他们无法合法检查的黑匣子(极大地违背了科学探究的本质),而且多年后,我们可能无法重现依赖于专有软件包的结果。此外,由于它们在性能和处理大型复杂代码库方面存在限制,因此这些工具主要用于原型制作:研究人员最终必须切换工具来构建生产系统。
对于协作,研究人员目前使用电子邮件、版本控制系统和共享网络文件夹(Dropbox 等)的组合。版本控制系统(Git、SVN、CVS 等)对于使研究具有协作性和可复现性至关重要。它们允许小组协作处理文档并跟踪这些文档如何随时间演变。理想情况下,计算研究的所有方面都将托管在诸如 GitHub 或 Google Code 等公开可用的版本控制存储库中。不幸的是,最常见的方法仍然是研究人员通过电子邮件相互发送文档。这种协作形式使得跟踪大型项目的开发并建立可复现且可测试的工作流几乎不可能。当它有效时,它肯定无法扩展到一个非常小的群体之外,正如任何参与过电子邮件附件狂潮疯狂的人所痛苦地经历的那样。
对于生产规模执行,研究人员被迫放弃方便的交互式计算环境,转而使用编译代码(C/C++/Fortran)和并行计算库(MPI、Hadoop),因为大多数交互式系统无法提供大规模工作所需的性能,并且具有原始的并行支持。这些工具难以学习和使用,需要大量时间投入。我们强调,在生产规模计算开始之前,研究人员已经在一个交互式计算环境中开发了一个基本功能完备的原型。对于生产而言,转向 C/C++/Fortran 意味着从头开始,并至少维护两个版本的代码。此外,编译版本生成的数据必须导入回交互式环境中以进行可视化和分析。由此产生的来回往复的复杂工作流几乎不可能捕获并放入版本控制系统中,这再次使得计算研究难以重现。
对于出版物演示文稿,研究人员使用 LaTeX、Google Docs 或 Microsoft Word/PowerPoint 等工具。在此上下文中,这些工具最重要的属性是它们与版本控制系统(LaTeX 除外)以及其他计算工具的集成度不高。数字工件(代码、数据和可视化)必须手动粘贴到这些文档中,以便在许多不同的地方重复相同的内容。当工件发生更改时,文档会很快不同步。

2.2 IPython Notebook

开源 IPython 项目是本项目提议活动的主要重点。PI Perez 于 2001 年创建了 IPython,并于 2004 年加入了 PI Granger;两人至今仍领导着该项目。他们共同将该项目发展成为一个充满活力的开源社区,拥有一个活跃的开发团队,其中有来自学术界和工业界的 150 多名贡献者,他们通过 GitHub 网站进行协作 并大约每 6 个月发布一个新版本的项目。
IPython 对广泛学科的科学计算产生了重大影响,这一事实体现在广泛的用户群中 其中包括来自几乎所有学科的个人和小组、大型科学合作(哈勃太空望远镜、钱德拉 X 射线望远镜、平方公里阵列、欧洲核子研究中心等)、公司(Microsoft Azure、Visual Numerics PyIMSL、Enthought 等)以及教育计划,例如斯隆基金会资助的软件木工项目。
IPython 提供了用于 Python 中交互式计算的开源工具。从历史上看,IPython 提供了一个增强的交互式外壳,它现在是 Python 中科学和技术计算的事实上的工作环境。最近,IPython 开发团队扩大了其工作范围,以开发 IPython Notebook,这是一个基于 Web 的 Python、R、shell 脚本和其他语言环境。从本质上讲,IPython Notebook 是一个系统,用于在 Web 浏览器中编写和运行代码,并支持方便的代码开发(例如语法着色)。然而,Notebook 不仅限于代码,它使用户能够构建将实时可运行代码与可视化、文本、方程式、图像和视频相结合的文档。Notebook 提供了用户触手可及的交互式探索所需的一切。
笔记本文档格式经过精心设计,以支持协作。最重要的是,通过对版本控制友好,用户可以使用笔记本保存计算、其结果以及随附材料(包括嵌入式图像和可视化效果)的完整历史记录。在 GitHub 等公共版本控制存储库中发布笔记本,可以使大量人员协作处理文档。
由于笔记本将代码与文本、方程式和多媒体集成在一起,因此它也是出版演示的理想平台。用于交互式探索和生产规模计算的文档也可以用于生成出版物、文档和演示文稿。初步工作已经开始,以便将笔记本文档导出到各种格式。还正在进行工作,以便只需单击一个按钮,即可将笔记本转换为 PowerPoint 样式的演示文稿,而这些演示文稿支持实时计算,这使得笔记本成为理想的教学工具:多门课程和研讨会现在都将笔记本用作执行环境和共享和发布的文件格式;例如,伯克利 Python 启动训练营,这是密歇根州立大学 BEACON 中心教授的计算基因组学新课程,密歇根州立大学的 NIH 资助夏季研讨会,同样针对下一代测序数据的分析 以及软件木工项目 .
即使在今天,笔记本也在改变计算研究的工作流程。由于笔记本支持多种编程语言(Python、R、Octave、Bash、Perl 等),并将代码与文本、方程式和富媒体集成在一起,因此研究人员可以在研究的不同阶段使用单一工具。这使得协作和可重复性成为自然的研究成果。由于笔记本捕获了整个计算工作流程,即使它包含多种语言和系统 shell 命令,也很容易与他人共享,他们可以轻松地重新运行整个计算。通过将笔记本与部署在云资源上的虚拟机映像相结合,可以获得完全的可重复性,正如 IPython 团队、麻省理工学院的计算机科学家和科罗拉多大学的微生物生态学家最近合作所展示的那样,他们创建了一篇“可执行论文”,任何人都可以运行它来复制结果 [11].

3 团队背景

3.1 IPython 团队

PI Perez 和 Granger 都是物理学家,他们的研究兴趣涵盖广泛的问题,从神经科学和数值算法到原子物理学和量子计算。他们研究生涯的一个恒定主题是专注于构建高质量的计算工具。F. Perez 和 B. Granger 在科罗拉多大学博尔德分校的研究生院相遇,自 2004 年以来一直密切合作。Perez 于 2001 年启动了 IPython 项目,2004 年 Granger 加入该项目,领导 IPython 中并行计算功能的开发,当时他还是圣克拉拉大学的教授。在他的指导下,B. Ragan-Kelley 完成了计算物理学高级论文项目,内容是关于 IPython 并行架构的设计和实现。B. Ragan-Kelley 继续与 PI 密切合作,一旦他于 2012 年 12 月在加州大学伯克利分校完成博士学位,他将成为该项目的首席开发工程师。我们三人(Perez、Granger 和 Ragan-Kelley)继续积极领导 IPython 项目的开发。
虽然我们都接受过物理学培训,没有接受过任何软件工程教育,但在与开源开发人员世界的互动中,我们已经学习并采用了严格的软件工程实践,我们遵循这些实践来确保 IPython 即使在不断发展的情况下,仍然是一个健壮且高质量的项目。对 IPython 的所有提议的贡献(即使是核心团队的贡献)都将通过 GitHub 网站上的请求提取机制进行严格的同行评审流程,并且在通过近 1600 个测试的自动化电池之前,不能将任何代码提交给项目。该项目有大量的文档,并且继续吸引着狂热的使用者和不断壮大的开发人员社区;对于版本 0.13,我们工作了 6 个月,并在 2012 年 7 月 1 日发布:
估计 IPython 需要 18 个工年和 2,400,000 美元才能开发. 这些结果是在最少资金支持和将我们的团队推向不可持续的极限的情况下获得的;IPython 在 2011-2012 年仅收到一笔正式赠款,以及多年来的一些小型咨询合同。但这并不是一个明智的长期策略,我们确信,如果核心团队获得稳健的资金支持,我们可以在所有学科的科学计算中产生更大的影响。
除了上述三位个人之外,我们的预算还明确指明了一名博士后学者和来自加州大学伯克利分校脑成像中心 (BIC) 的两位科学家,PI Perez 在那里工作。Paul Ivanov 目前是伯克利视觉科学专业的博士生,也是 IPython 的核心开发者;他的博士论文的一部分涉及使用 IPython 开发可重复的研究工具来建模视觉系统。我们预计他毕业后(计划于 2012 年 12 月)将被聘为该项目的博士后。P. Ivanov 在非常有效地吸引我们的用户社区方面有着悠久的记录,我们预见他在该项目中的角色不仅是进行核心开发,而且继续发挥社区参与和传播福音的这一至关重要的作用。我们预计他将特别致力于该项目的面向用户的领域,例如教程、文档和网站,以及比其他成员更多地参加会议和研讨会。
在该项目中指名的两位 BIC 科学家 Jean-Baptiste Poline 和 Matthew Brett 在神经影像数据统计分析和开源开发方面有着悠久的记录 [1, 8, 14]. 他们创立了开源 Python 神经影像项目 M. Brett 继续领导该项目,并自 2005 年以来与 F. Perez 合作了多个涉及科学计算的开源 Python 工具的项目。他们将与斯坦福大学统计系教授 Jonathan Taylor 合作开发应用统计的可执行讲义;Taylor 教授是 IPython 中 R 语言支持的作者,并已同意作为顾问参与该项目。
我们已为一名博士后学者腾出预算空间来开展该项目,并且有潜在候选人可以担任此职位,他们来自过去几年为 IPython 做出高质量贡献的许多后期博士生。
总之,我们拥有一个经验丰富的团队,在解决本项目中我们旨在解决的问题类别方面产生了经过验证的结果,并且具有高功能协作的既定记录,这导致了 IPython 项目的当前成功。但我们必须强调,尽管我们在有限的资源下将 IPython 构建为一个健壮的项目方面取得了成功,但团队经常感到没有稳定支持的压力。我们无法资助我们任何一位才华横溢的开发人员在项目上投入专门的时间,无法出差参加会议或与我们会面进行开发工作,因此必须严格依靠他们愿意将自己的业余时间和资源投入到 IPython 上。我们非常担心失去几位关键开发人员,一旦他们完成博士学业,可能会发现投入到该项目的时间大大减少。但其中一些人表示热衷于继续开发 IPython,如果我们能为他们提供至少几年的博士后/工程职位。同样,PIs Perez 和 Granger 必须在其他主题上的常规研究和教学职责与在 IPython 上的工作之间进行权衡,这导致我们经常对我们的开发人员社区反应迟钝。这对该项目产生了严重的负面影响,因为找不到核心团队反馈的贡献者可能会简单地脱离并寻找其他具有更具响应性的团队的项目。最后,尽管我们迄今为止取得了成功,但显然真正具有高影响力的问题尚未得到解决,对于这些问题,我们需要能够投入大量时间进行专门的工作。形成此提案的目标具有很大的价值,但它们超出了我们仅仅在其他承诺之间挤出业余时间和假期期间的零星活动来解决的能力。

3.2 合作者生态系统

我们的团队还与学术界和工业界的合作伙伴建立了许多重要的合作关系,这些关系将成为这项工作中的重要资产。举几个例子:
此(不完整)列表显示了我们的团队如何除了在加州大学伯克利分校和加州理工学院圣路易斯奥比斯波分校担任科学家进行日常活动外,还与开源科学计算领域的主要参与者建立了非常牢固的联系。这些持续的合作伙伴关系将像过去一样加强我们在 IPython 中的工作。

研究方法

我们将开发 IPython 的新功能,以便科学家可以在计算工作的各个阶段之间流畅地转换,而不会受到当今软件工具强加的人为障碍。我们的具体目标是:
  1. 将 IPython Notebook Server 开发成一个具有共享、协作和发布功能的多用户应用程序。
  2. 为嵌入在 IPython Notebook 文档中的交互式小部件提供支持,使用户能够直观地处理计算结果。
  3. 开发 IPython Notebook 文件格式和支持工具,以促进计算工作的共享、重用和传播。
  4. 制作一系列可执行讲义,以 IPython Notebook 的形式编写,作为斯坦福大学应用统计学导论课程的配套材料。
  5. 继续维护和管理 IPython 项目,作为开源开发的一个充满活力且活跃的示例。
我们现在描述我们对这些目标的方法,并重点说明它们如何解决 §1 中描述的科学计算中的核心问题。

4.1 一个协作式多用户 IPython Notebook 服务器

我们将增强 Notebook 服务器,为科学家之间的协作计算提供一个平台,该平台还促进了 §1 中描述的计算工作的发布教育阶段。
IPython Notebook Server 是一款单用户应用程序,它运行一个 Web 服务器,用户浏览器连接到该服务器。Web 浏览器是用户界面,用于执行代码并编辑笔记本文档。虽然当前版本允许多个用户同时连接,但它不会以任何有意义的方式区分这些用户:用户无法创建自己的私有笔记本和项目,几乎没有安全性来隔离/沙盒用户活动,并且共享和协作选项非常原始。
在这个项目中,我们将重新设计 Notebook Server,使其成为真正的多用户应用程序。这并不会阻止单用户模式工作,例如当用户只想在自己的笔记本电脑上处理本地项目时。但是,一个合适的多用户服务器将允许用户在诸如研究组或课堂等设置中安全地部署 Notebook。此服务器将允许用户使用其身份验证凭据登录并创建新项目,其中项目对应于服务器文件系统上的版本控制目录。然后,Notebook 的用户界面将包括一个仪表盘页面,其中显示用户的所有项目,以及一个项目概览页面,其中显示任何给定项目的 Notebook,以及其他脚本和数据文件。
通过为每个用户提供私有项目和笔记本,可以公开更复杂的共享选项。用户将能够与其他用户共享其帐户中的任何项目或 Notebook,并对授予的可见性和访问权限级别进行细粒度控制。此外,用户将能够以 HTML 页面、幻灯片或呈现的 PDF 的形式发布任何笔记本的静态版本。
通过这些开发,IPython Notebook 将成为科学计算中协作工作的推动者,无论是研究组成员、世界各地的同事还是希望在课堂环境中部署该系统的教育工作者。

4.2 IPython Notebook 中的交互式计算元素

由于 IPython Notebook 是作为在 Web 浏览器中呈现的应用程序实现的,因此我们可以使用现代浏览器提供的所有丰富媒体和交互式功能。Notebook 文档格式和架构从一开始就设计为利用这一事实。作为此项目的一部分,我们将为笔记本添加支持,以包含交互式图形用户界面 (GUI) 元素,例如滑块、按钮、选择列表等,这些元素可以控制计算。我们将提供一个库,使非专家用户能够为其任何分析代码添加交互式图形支持,即使在临时探索性工作中也能使用。
为了说明此功能,考虑想要查看参数 A k b 的值如何影响形式为 y(x)=Asin( kx+b ). 的简单正弦波的绘图。有了这项新功能,用户将能够编写一个小的绘图例程,指示为 A k b 提供的值的范围,而 IPython 将自动显示所有三个滑块,并带有这些范围,使用户能够使用鼠标操作这些值并立即看到更新的绘图。我们已经对该功能进行了原型设计,如图所示。4.1,但当前实现需要编写精细且难以调试的低级代码,使其成为一般用途的糟糕解决方案。
这对于计算周期的个人探索教育阶段都有直接的应用,因为它使得编写和部署控制特定代码片段的自定义 GUI 变得非常容易。此外,这将为探索和教育提供 GUI 的交互式优势,同时仍嵌入到适合验证、版本控制和共享的文件格式中。带有这些控件的 Notebook 文件可以像任何其他文件一样共享,并且接收者将能够立即执行相同的交互式探索,而无需安装任何其他工具。

4.3 用于共享计算结果的开放文件格式

IPython Notebook 文件使用一种人类可读且易于自动解析的格式,以 JSON 数据结构的形式存储在磁盘上。它在一个文件中包含所有文本、代码、方程式和图像的表示形式。为了使此文件格式更适用于出版教育,我们建议开发可以将 Notebook 导出到其他格式的工具:用于书面出版物的 LaTeX/PDF、用于在互联网和博客上发布的 HTML、幻灯片演示文稿等。除了这些导出功能外,我们还将创建可以以各种方式转换 Notebook 文档的模块化筛选器。例如,人们可能希望从 Notebook 中删除所有源代码,只保留说明性文本,这在课堂环境中很有用,可以提供没有解决方案代码的练习。我们已经开发了此导出和筛选器架构的原型,但此草案需要变成健壮、经过测试的生产代码,作为 IPython 本身的一部分,而不是一个单独的小项目。这项工作将把 Notebook 文档格式转变为跨学科甚至跨编程语言出版和展示计算结果的通用格式。
重要的是要强调,虽然我们最初将 Notebook 开发为一个 Python 项目,但我们非常注意确保 Notebook 可以用于存储和共享其他编程语言中的计算工作。最近,用于科学计算的新 Julia 语言的开发人员 已决定采用 IPython Notebook 作为 Julia 中交互式计算的默认基于 Web 的系统。作为此项目的一部分,我们将与 Julia 团队合作,以确保 Notebook 系统的文件格式和支持架构真正满足其他语言的需求。在 2012 年的 SciPy 会议上,PI Perez 已经与 Julia 核心作者进行了详细的交谈,并且我们仍通过各自项目的邮件列表保持定期联系。
这是我们使命的核心部分:虽然科学计算世界可能使用 Python 之外的许多工具,但重要的是,我们必须找到通过开放、免费提供的格式共享计算工作的方法,而这些格式不依赖于专有或专利技术。此目标将确保 IPython Notebook 格式能够胜任此任务。

4.4 应用统计学可执行讲义的开放集合。

我们将通过开发一系列可执行讲义来验证 IPython Notebook 支持教育的创新出版模型的能力,该系列讲义将伴随斯坦福大学的应用统计学导论课程. 这些讲义的开发将为我们使用笔记本作为学术出版格式和教育平台的工具提供直接反馈,因为我们将与斯坦福大学统计系乔纳森·泰勒教授直接合作。泰勒教授已经使用 IPython Notebook 构建了这些讲义的初步版本,但由于我们工具的当前限制,它们仅以静态 HTML 页面和 PDF 幻灯片的形式部署给学生。我们与他的合作将:(a) 改进 IPython 中的工具链,以便交付可用于讲课和学生作为工作材料的可执行笔记本;(b) 向讲义中添加新材料,用 Python 中最近开发的库来说明课程中的统计概念,这些库将补充现有的基于 R 的示例;(c) 提供一套免费的、自包含的可执行教育材料,用于应用统计;(d) 作为模板,供其他有兴趣在其自己领域构建类似材料的人使用。
我们纳入这一目标源于教育是研究周期中至关重要的一部分这一事实。如果笔记本要作为研究工具获得广泛关注,它还需要对开发教育材料的教师和使用这些材料作为自己研究起点的学生有用。但让人们承诺使用新格式是一项艰巨的任务,因为人们可以理解地担心将有限的时间花在一种未经证实格式的写作上。这就是此目标对我们整个愿景的成功至关重要的原因:通过在重要学术机构中使用我们工具的经过实战检验的真实示例,我们将能够表明这确实是一种为提供具有计算组件的现代讲义材料而解决问题的稳健方法。泰勒教授已经使用 IPython 工具对其讲义进行了原型设计这一事实为我们提供了经过验证的初稿,可作为我们努力的基础。这与 IPython 团队始终采取的方法一致:一个迭代周期,其中新功能会迅速交到用户手中,然后收集反馈以指导未来开发。在此目标中,我们将泰勒教授的个人脚本集合转变为稳健、可投入生产的解决方案,该解决方案正式成为 IPython 本身的一部分,并经过记录和测试以确保可靠性。
我们选择统计学教学作为我们的驱动应用程序,因为它与计算有着密切的关系,并且在许多学科中无处不在:在大数据时代,每个科学和工业领域都需要统计分析。此外,泰勒教授已经在为他的讲义使用 IPython 笔记本和相关工具,为我们提供了一个经过测试的原型作为起点。他将与团队成员波琳和布雷特合作,自他贡献了导致 NiPy 项目创建的原始代码以来,他一直与他们互动。

4.5 继续管理开源 IPython 项目

除了上面列出的四个具体的新开发目标之外,重要的是将持续领导 IPython 项目作为一项独立的目标来考虑。IPython 是一个非常活跃的项目,在邮件列表和 IRC 频道上不断进行讨论,每天都有来自全球志愿开发者的新贡献,并且有大量用户需要支持。这表明 IPython 是一个健康且不断发展的开源项目,但它也对领导团队提出了很高的要求。每 6 个月发布一次软件也需要大量的工作(测试、文档、构建)。此外,核心开发人员会广泛旅行,在会议和研讨会上推广和教授用户有关该软件的知识。为了使项目保持健康,重要的是核心开发人员要为这些追求分配时间;我们的项目预算反映了这些优先事项。
为了帮助 IPython 开发团队实现本赠款提案的宏伟目标,我们将在每个发布周期开始时每六个月举办一次为期一周的编码“冲刺”。这将汇集核心 IPython 开发人员(本赠款中的所有人员以及我们社区中的其他开发人员),进行为期一周的密集设计讨论和编码。这种“编码冲刺”(也称为“黑客马拉松”)模式已被证明是一种非常有效且经济高效的方式,可以为整个团队提供高度集中的努力,为通过面对面的讨论和专门的实施时间来解决复杂问题提供足够的精力。
该项目长期增长的另一个方面是增加其用户群。自 2011 年夏季发布以来,Notebook 已在 Python 科学计算社区中变得非常流行。然而,在这个直接社区之外,显然有更多尚未接触到它的潜在用户群体。Notebook 的功能(多种语言、通用的开放文件格式)和本项目的具体目标是专门针对这一更大的用户群体设计的,例如,他们可能使用 R 或 Octave。为了接触到这一群体,项目人员将前往新的会议和研讨会来“宣传”该项目。具体来说,我们将使用 P. Ivanov 来帮助开展这项社区建设工作。

项目交付成果和评估

5.1 多用户 Notebook 服务器

IPython Notebook Server 的架构将被重新构建,以支持具有身份验证的多位同时用户,以及用户控制在服务器上托管的项目共享和发布的能力。

5.2 交互式小部件

我们将在 IPython Notebook 中开发一个交互式 HTML/JavaScript 用户界面 (UI) 控件库(滑块、复选框等),该库绑定到 IPython Kernel 中的 Python 对象。使用此库,当用户操作 UI 控件时,输出、绘图和数据将自动更新,从而实现交互式数据探索,特别是对于非技术用户。我们将提供一组用于常见任务的基本小部件,并将开始研究更复杂的小部件,例如用于处理表格数据的电子表格样式控件。

5.3 文件格式规范和转换工具

我们将提供一份 IPython 笔记本文件格式的完整文档规范,以便第三方实施兼容工具。此规范将支持用 Python 以外的其他编程语言编写的笔记本。我们将与 Julia 开发团队合作,并与 R 用户建立合作关系,这要归功于我们在斯坦福大学和加州大学伯克利分校统计系现有的联系。
我们将构建到 IPython 代码库中的工具,以实现:(a) 无缝转换为其他重要格式:LaTeX、PDF、Markdown、reStructuredText、HTML;(b) 集成的幻灯片放映模式,将笔记本变成用于传播和教育目的的演示文稿;(c) 基于附加到笔记本部分的元数据转换笔记本。

5.4 特定领域的用例:可执行讲义,以配合应用统计课程

我们将开发和发布一系列开放源代码笔记本,以配合斯坦福大学的应用统计学导论课程(统计 191)。这些笔记本将以本机 IPython 格式以及网站和电子书格式提供,以便阅读。我们还将提供这些笔记的骨架作为模板:这将作为教育工作者在其他学科中制作具有类似功能的材料的起点。这些材料将根据可重复研究标准 [13] 的慷慨许可条款发布(即文本的 CC-BY 许可证、代码的 BSD 许可证和数据的公共领域条款)。

5.5 项目管理

此目标的具体可交付成果将是维护 IPython 的定期发布计划,每个新版本大约每 6 个月向公众发布一次。我们还将在加州大学伯克利分校举办两次年度开发冲刺,并在年度 Python 科学计算会议、PyCon、Strata 和其他相关会议(如年度超级计算活动)上展示项目成果。

5.6 成功指标和评估

虽然预测新工具的采用情况很困难,但我们认为以下内容是我们拟议工作的合理影响指标:
我们将定期在线进行用户调查,以评估这些指标的进展情况。我们注意到,由于是免费软件,用户可以在不征求我们的许可或任何形式的验证的情况下下载和设置 IPython。因此,我们提供的任何指标始终都是低估的。

预算说明

我们要求预算来资助一个团队,该团队在领导 IPython 项目方面有着悠久的成功历史。大部分预算用于支持这些既定成员,使他们能够将全部精力投入到前面概述的复杂问题中。我们为一名尚未命名的博士后研究员做出了规定,允许新血液进入该项目,但我们预算中列出的其他人都是已知的贡献者。我们的差旅预算将使我们不仅能够参加科学 Python 会议,而且能够在特定学科的活动中与科学家接触,以接触到更多的受众。我们的研讨会预算为期四周、重点突出的开发者会议(通常称为“编码冲刺”)提供了资金,这是我们成功的关键:从过去的经验来看,我们知道这种会议是一种非常有效的方式,可以通过“锁定”整个团队而不受干扰来解决困难问题。

参考文献