Oslo
修订日期: 2021年6月16日,由 Bnemec 修改
官方标题: OpenStack 常用库
PTL: Ben Nemec <openstack@nemebean.com>
旨在创建一个包含 OpenStack 项目共享代码的 Python 库集合。这些库提供的 API 应该具有高质量、稳定、一致、文档完善且普遍适用性。
目录
- 1 Oslo 团队
- 2 向后兼容性
- 3 工作
- 4 库
- 4.1 automaton
- 4.2 castellan
- 4.3 cookiecutter
- 4.4 debtcollector
- 4.5 futurist
- 4.6 mox3
- 4.7 oslo-cookiecutter
- 4.8 oslo.cache
- 4.9 oslo.concurrency
- 4.10 oslo.config
- 4.11 oslo.context
- 4.12 oslo.db
- 4.13 oslo.i18n
- 4.14 oslo.log
- 4.15 oslo.messaging
- 4.16 oslo.middleware
- 4.17 oslo.policy
- 4.18 oslo.privsep
- 4.19 oslo.reports
- 4.20 oslo.rootwrap
- 4.21 oslo.serialization
- 4.22 oslo.service
- 4.23 oslo.tools
- 4.24 oslo.utils
- 4.25 oslo.versionedobjects
- 4.26 oslo.version
- 4.27 oslo.vmware
- 4.28 oslosphinx
- 4.29 oslotest
- 4.30 osprofiler
- 4.31 pbr
- 4.32 pylockfile
- 4.33 stevedore
- 4.34 taskflow
- 4.35 tooz
- 5 原则
- 6 孵化
- 7 常见问题解答
- 8 资源
- 9 峰会
Oslo 团队
Oslo 项目将通用代码审查员和专业 API 维护者聚集在一起。他们共同致力于解决 OpenStack 项目中重复代码带来的技术债务。
项目领导联络人
截至 Wallaby 周期,Oslo 项目已采用分布式领导模式。以下人员可以联系到与他们联络领域相关的问题。
项目领导联络人
| 联络人类型 | IRC 昵称 | 姓名 | 电子邮件 | 时区 |
|---|---|---|---|---|
| 安全 | bnemec | Ben Nemec | openstack@nemebean.com | UTC-5 |
| 会议主席 | hberaud | Hervé Beraud | hberaud@redhat.com | UTC+1 |
| 发布 | hberaud | Hervé Beraud | hberaud@redhat.com | UTC+1 |
| 发布 | damani | |||
| TaCT SIG | moguimar | Moisés Guimarães | moguimar@redhat.com | UTC+2 |
| TaCT SIG | sboyron | Sébastien Boyron | sboyron@redhat.com | UTC+2 |
通用代码审查员
Oslo 的核心审查员 在项目中承担通用角色。他们是具有良好 Python 代码品味的专家,在审查中提供建设性意见,并花时间审查提交到项目的任何补丁,无论补丁针对的领域如何。
通用核心团队联系方式
| IRC 昵称 | 姓名 | 电子邮件 | 时区 |
|---|---|---|---|
| bnemec | Ben Nemec | openstack@nemebean.com | UTC-5 |
| stephenfin | |||
| hberaud | Hervé Beraud | hberaud@redhat.com | UTC+2 |
| smcginnis | Sean McGinnis | sean.mcginnis@gmail.com | UTC-5 |
| moguimar | Moisés Guimarães | moguimar@redhat.com | UTC+2 |
| kgiusti | Ken Giusti | kgiusti@gmail.com | UTC-5 |
专业 API 维护者
每个 API 通常有一到多个专业维护者,他们负责演进所涉及的 API。他们致力于确保 API 满足所有 OpenStack 项目的需求,并且一旦 API 稳定且有用。每个库都有自己的核心团队,其中可能包括在该库领域具有专业知识但不是通用 Oslo 核心成员的专家。由于 Oslo 项目的范围已经变得非常大,这些特定于库的核心团队对于项目的长期健康至关重要,并且鼓励任何对库感兴趣的人参与其中。
专业核心团队联系方式
| IRC 昵称 | 姓名 | 电子邮件 | 时区 | 项目 |
|---|---|---|---|---|
| johnsom | Michael Johnson | johnsomor@gmail.com | UTC-7 | taskflow |
| zzzeek | oslo.db | |||
| ttx | oslo.rootwrap |
招募中
多年来,Oslo 项目的贡献者来来去去。在某些情况下,这给我们留下了一些重要项目上的专业知识差距。非常欢迎对以下项目的新贡献者
- oslo.privsep
- oslo.service
- taskflow
项目会议
请参阅 Meetings/Oslo。
联系方式
我们使用 openstack-discuss@lists.openstack.org 邮件列表进行讨论,并且我们都在 OFTC 的 #openstack-oslo 和 #openstack-dev 中闲逛。将与 Oslo 相关的任何内容发送到邮件列表时,建议在主题中包含 [oslo] 标签,以便引起相关人员的注意。
每个项目还指定了一个联络人来处理集成问题。请参阅 Oslo/ProjectLiaisons。
向后兼容性
在 Newton 峰会上,经过 10 名 Oslo 核心成员的投票,结果为 7 赞成、0 反对、3 弃权,Oslo 项目保持一个发布周期向后兼容性:最长 12 个月(从一个发布周期开始到下一个周期结束)。我们这样做是为了让 master 中的重要改进,即使不适合回移植到稳定分支,也能被部署者使用。例如,我们以这种方式修复了 oslo.messaging 中的 heartbeat,并且即将推出一个需要升级我们使用的不兼容版本的 kafka 支持更改:我们的用户不会受到影响,但直接使用 python-kafka 的人会受到影响,使其不适合稳定的回移植。
为了测试这一点,我们将实施 master oslo 更改的稳定作业(在 master oslo 上运行稳定的 devstack)以及稳定服务器更改的不稳定作业(使用最新版本的 oslo 运行服务器)。
我们不专门旨在支持单个 Python 环境中的部分混合升级(例如 Nova Mitaka + Neutron Newton):从 Oslo 方面来看,没有明显的障碍,但客户端库 Python API 兼容性不受 Oslo 策略的约束。
工作
这些作业的历史记录: https://etherpad.openstack.org/p/dims-periodic-jobs
周期性
其他周期性作业: http://logs.openstack.org/periodic/
库
以下库当前由 Oslo 项目发布。如果我认为一个库具有在 OpenStack 之外广泛使用的真正潜力,我选择不将其包含在 oslo 命名空间中(即,不以 oslo 为前缀)。
新库需要小心避免引入循环依赖。请参阅 Oslo/Dependencies。
专用库拥有自己的核心审查团队,其中成员可能不是 Oslo 主核心团队的一部分。除非另有说明,否则 Oslo 库由 oslo-core 维护。
automaton
摘要: 用于构建状态机的框架。
提案: 141961
源代码: http://git.openstack.org/cgit/openstack/automaton
错误: 请在 automaton 项目的 launchpad 中提交错误。
核心审查团队: oslo-core
文档: https://docs.openstack.org/developer/automaton/
castellan
摘要: OpenStack 的通用密钥管理接口。
提案: adopt-castellan
源代码: http://git.openstack.org/cgit/openstack/castellan
错误: 请在 castellan 项目的 launchpad 中提交错误。
核心审查团队: castellan-core
文档: https://docs.openstack.org/developer/castellan/
cookiecutter
摘要: 一个从一组模板创建 OpenStack 项目骨架的项目。
提案: 42530
源代码: http://git.openstack.org/cgit/openstack-dev/cookiecutter
错误: 请在 oslo 项目的 launchpad 中提交错误。
核心审查团队: oslo-core
文档: 无
debtcollector
摘要: 一系列 Python 模式,可帮助您以非破坏性方式收集技术债务(遵循弃用模式和策略等)。
提案: 141220
源代码: http://git.openstack.org/cgit/openstack/debtcollector
错误: 请在 debtcollector 项目的 launchpad 中提交错误。
核心审查团队: oslo-core
文档: https://docs.openstack.org/developer/debtcollector/
futurist
摘要: 包含异步功能和来自未来的添加内容的集合。
提案: 179890
源代码: http://git.openstack.org/cgit/openstack/futurist
错误: 请在 futurist 项目的 launchpad 中提交错误。
核心审查团队: oslo-core
文档: https://docs.openstack.org/developer/futurist/
mox3
摘要: mox 框架的非官方 Python 3 移植。
提案: 无
源代码: http://git.openstack.org/cgit/openstack/mox3
错误: 请在 mox3 项目的 launchpad 中提交错误。
核心审查团队: oslo-core
文档: 无
oslo-cookiecutter
摘要: 是一个从一组模板创建 Oslo 库骨架的项目。
提案: 无
源代码: http://git.openstack.org/cgit/openstack-dev/oslo-cookiecutter
错误: 请在 oslo-cookiecutter 项目的 launchpad 中提交错误。
核心审查团队: oslo-core
文档: ??
oslo.cache
摘要: 一个基于 dogpile 的缓存库。
提案: 无
源代码: http://git.openstack.org/cgit/openstack/oslo.cache
错误: 请在 oslo.cache 项目的 launchpad 中提交错误。
核心审查团队: oslo-core
文档: https://docs.openstack.org/developer/oslo.cache/
oslo.concurrency
摘要: 一个包含管理外部进程和任务同步的帮助程序的项目。
提案: 无
源代码: http://git.openstack.org/cgit/openstack/oslo.concurrency
错误: 请在 oslo.concurrency 项目的 launchpad 中提交错误。
核心审查团队: oslo-core
文档: https://docs.openstack.org/developer/oslo.concurrency/
oslo.config
摘要: 一个广泛的库,用于解析配置文件和命令行参数。
提案: 请参阅 此历史蓝图,其中描述了 API 的初始要求。
源代码: http://git.openstack.org/cgit/openstack/oslo.config
错误: 请在 oslo.config 项目的 launchpad 中提交错误。
核心审查团队: oslo-core
文档: https://docs.openstack.org/developer/oslo.config/
oslo.context
摘要: 一个包含维护有关请求上下文(即与请求关联的关联信息/数据)的有用帮助程序的项目。
提案: 请参阅 此历史蓝图,其中描述了 API 的初始要求。
源代码: http://git.openstack.org/cgit/openstack/oslo.context
缺陷:请在 launchpad 的 oslo.context 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/oslo.context/
oslo.db
概要:一个广泛的库,用于辅助数据库交互和/或处理。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.db
缺陷:请在 launchpad 的 oslo.db 项目中提交缺陷。
核心评审团队:oslo-db-core
文档:https://docs.openstack.org/developer/oslo.db/
oslo.i18n
概要:围绕 Python 的 gettext 模块的一个封装库,用于字符串翻译和其他国际化特性。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.i18n
缺陷:请在 launchpad 的 oslo.i18n 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/oslo.i18n/
oslo.log
概要:一个日志配置库。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.logging
缺陷:请在 launchpad 的 oslo.log 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/oslo.log/
oslo.messaging
概要:一个提供消息 API 的库,支持通过多种不同的消息传输方式进行 RPC 和通知。
提案:此 etherpad 记录了该项目的最新状态和背景。
源码:http://git.openstack.org/cgit/openstack/oslo.messaging
Devstack 插件:devstack-plugin-amqp1 devstack-plugin-kafka devstack-plugin-pika devstack-plugin-zmq
缺陷:请在 launchpad 的 oslo.messaging 项目中提交缺陷。
核心评审团队:oslo-messaging-core
文档:https://docs.openstack.org/developer/oslo.messaging/
oslo.middleware
概要:提供用于 Web 服务开发的 WSGI 中间件集合。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.middleware
缺陷:请在 launchpad 的 oslo.middleware 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/oslo.middleware/
oslo.policy
概要:提供用于强制执行策略的规则引擎。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.policy
缺陷:请在 launchpad 的 oslo.policy 项目中提交缺陷。
核心评审团队:oslo-policy-core
文档:https://docs.openstack.org/developer/oslo.policy/
oslo.privsep
概要:提供一种以提升权限的方式运行选定 Python 代码的机制。
提案:204073
源码:http://git.openstack.org/cgit/openstack/oslo.privsep
缺陷:请在 launchpad 的 oslo.privsep 项目中提交缺陷。
核心评审团队:oslo-privsep-core
文档:https://docs.openstack.org/developer/oslo.privsep/
oslo.reports
概要:允许项目生成 Guru Meditation 报告,用于调试 OpenStack 进程的当前状态。它还可以用于生成可序列化为纯文本、JSON 或 XML 的通用即时报告。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.reports
缺陷:请在 launchpad 的 oslo.reports 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/oslo.reports/
oslo.rootwrap
已弃用(推荐使用 oslo.privsep)
概要:rootwrap 允许对从 OpenStack 服务运行的 shell 命令进行精细过滤。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.rootwrap
缺陷:请在 launchpad 的 oslo.rootwrap 项目中提交缺陷。
核心评审团队:oslo-rootwrap-core
文档:https://docs.openstack.org/developer/oslo.rootwrap/
oslo.serialization
概要:是一个提供序列化功能的库,对 OpenStack 中常用的一些类型进行特殊处理。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.serialization
缺陷:请在 launchpad 的 oslo.serialization 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/oslo.serialization/
oslo.service
概要:是一个辅助库,提供运行 OpenStack 服务的功能。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.service
缺陷:请在 launchpad 的 oslo.service 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/oslo.service/
oslo.tools
概要:用于在 OpenStack oslo 社区中工作的工具。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.tools
缺陷:无
核心审查团队: oslo-core
文档: 无
oslo.utils
概要:是一个辅助库,提供各种低级实用程序模块/代码(没有其他地方可以放置)。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.utils
缺陷:请在 launchpad 的 oslo.utils 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/oslo.utils/
oslo.versionedobjects
概要:是一个帮助处理数据库模式与代码期望版本不同的库,允许服务在升级期间安全运行(等等)。
提案:127532
源码:http://git.openstack.org/cgit/openstack/oslo.versionedobjects
缺陷:请在 launchpad 的 oslo.versionedobjects 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/oslo.versionedobjects/
oslo.version
!!已停用!!
概要:是一个辅助库,提供从 Python 元数据中获取已安装软件版本的功能。
提案:40498
源码:http://git.openstack.org/cgit/openstack/oslo.version
错误: 请在 oslo 项目的 launchpad 中提交错误。
核心审查团队: oslo-core
文档: ??
oslo.vmware
概要:为 VMware 驱动程序在多个项目中通用的代码提供共享位置。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslo.vmware
缺陷:请在 launchpad 的 oslo.vmware 项目中提交缺陷。
核心评审团队:oslo-vmware-core
文档:https://docs.openstack.org/developer/oslo.vmware/
oslosphinx
概要:是一个 Sphinx 插件库,为 OpenStack 项目的 Sphinx 文档提供主题和扩展支持。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslosphinx
缺陷:请在 launchpad 的 oslosphinx 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/oslosphinx/
oslotest
概要:是一个辅助库,提供用于创建单元和功能测试的基础类和固定装置。
提案: 无
源码:http://git.openstack.org/cgit/openstack/oslotest
缺陷:请在 launchpad 的 oslotest 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/oslotest/
osprofiler
概要:一个 OpenStack 跨项目分析库。
提案:103825
源码:http://git.openstack.org/cgit/openstack/osprofiler
缺陷:请在 launchpad 的 osprofiler 项目中提交缺陷。
核心评审团队:osprofiler-core
文档:https://docs.openstack.org/developer/osprofiler
pbr
概要:pbr(或 Python Build Reasonableness)是一个插件库,有助于提供(和强制执行)一组合理的 setuptools 行为。
提案: 无
源码:http://git.openstack.org/cgit/openstack-dev/pbr
缺陷:请在 launchpad 的 pbr 项目中提交缺陷。
核心评审团队:pbr-core
文档:https://docs.openstack.org/developer/pbr/
pylockfile
已弃用
概要:遗留的(且已采用的)进程间锁管理库。
提案:102202
源码:http://git.openstack.org/cgit/openstack/pylockfile
缺陷:请在 launchpad 的 pylockfile 项目中提交缺陷。
核心审查团队: oslo-core
文档:https://docs.openstack.org/developer/pylockfile/
stevedore
概要:一个用于管理 Python 应用程序插件的库。
提案: 无
源码:http://git.openstack.org/cgit/openstack/stevedore
缺陷:请在 launchpad 的 python-stevedore 项目中提交缺陷。
核心评审团队:stevedore-core
文档:https://docs.openstack.org/developer/stevedore/
taskflow
概要:一个帮助创建能够处理状态/故障... 以合理方式的应用程序的库。
提案: 无
源码:http://git.openstack.org/cgit/openstack/taskflow
缺陷:请在 launchpad 的 taskflow 项目中提交缺陷。
核心评审团队:taskflow-core
文档:https://docs.openstack.org/developer/taskflow/
tooz
概要:一个旨在集中处理分布式常见原语(如组 membership 协议、锁服务和领导者选举)的库,通过提供协调 API 帮助开发人员构建分布式应用程序。
提案:122439
源码:http://git.openstack.org/cgit/openstack/tooz
缺陷:请在 launchpad 的 python-tooz 项目中提交缺陷。
核心评审团队:tooz-core
文档:https://docs.openstack.org/developer/tooz/
原则
包含在 Oslo 中的 API 应反映项目对该用例的要求和设计的粗略共识。新的 OpenStack 项目可以使用 Oslo API,确信通过这样做,该项目正在成为一个良好的 OpenStack 公民,并建立在既定的最佳实践之上。
为此,我们在设计和演进 Oslo API 时会牢记一些原则
- API 应该具有通用性,并且“适合”——例如,它不应编码源自其原始项目的任何特定假设,它应遵循与其他 Oslo API 一致的风格,并且应适合于错误处理、配置选项、时间和日期、通知、WSGI 等主题。
- API 应该已经被多个 OpenStack 项目使用
- 应该承诺在所有其他 OpenStack 项目(在适当的情况下)中采用该 API,并且不应存在任何已知的阻止该采用的主要障碍
- API 应代表 OpenStack 项目的“粗略共识”
- 不应有其他 API 在 OpenStack 中与此“粗略共识”竞争
- 应该能够在保持与旧版本的向后兼容性的合理时间内演进 API——例如,在发布 N 中已弃用的 API 的兼容性可能仅在发布 N+2 中删除
孵化
Oslo Incubator 已经停止维护。请参考 公告 和 清除仓库的变更。
常见问题解答
为什么 oslo.config 的 alpha 版本没有发布到 PyPI?
请参阅 选择版本号,了解与版本控制和发布相关的当前策略。
为什么 oslo.config 有一个 CONF 对象?全局对象太糟糕了!
确实如此。好吧,这是一个漫长的故事,并且在邮件列表存档中有充分的记录,如果有人想挖掘链接的话。
在 Folsom 设计峰会期间,曾尝试移除对像这样全局对象的依赖。经过激烈的辩论,最终达成共识,坚持使用这种方法。
Nova 通过使用 gflags 库,从 提交零 开始就使用了这种方法。一些 OpenStack 项目最初没有使用这种方法,但现在大多数都使用了。 想法是,所有项目使用相同的方法比对该方法的反对意见更重要。项目之间共享代码很好,但通过同时让项目使用相同的惯用语来处理这些事情,可以更容易地让人们在多个项目上工作。
这场辩论可能永远不会完全结束。请参阅 2014 年 8 月的最新讨论。
为什么 Oslo 遵守功能冻结?
功能冻结是稳定开发周期中添加的所有新功能的时间,但由于 Oslo 项目不一定与 OpenStack 的其他项目(或者对于 oslo-incubator 而言,根本不)以相同的六个月时间表发布,因此 Oslo 遵守功能冻结可能看起来很奇怪。
对于已毕业的库,这与任何其他项目一样,其目的是专注于错误修复和稳定性。
对于 oslo-incubator,主要动机是使其他项目更容易同步最后一刻的修复。 如果 oslo-incubator 中着陆了一个新功能,而使用项目之一发现了相关的错误,那么将该错误修复同步到该项目将成为一个问题。 当需要最后一刻的错误修复时,最好使同步尽可能简单和最小。 为了避免问题,oslo-incubator 尊重功能冻结期,就像任何其他项目一样。
Oslo 如何管理版本?
资源
评审策略
这些覆盖了 OpenStack 整体的常规评审规则。
- 自动化变更 - 通过 CI 检查的 'openstack proposal bot' 和 'transifex' 的补丁可以由单个核心评审员 +2+A
审查链接
(请参阅 http://git.openstack.org/cgit/openstack/oslo.tools/tree/dashboards 获取创建这些链接的源文件)
安全团队
除了 OpenStack 的漏洞管理团队之外,Oslo 团队的一些成员表示愿意帮助解决 Oslo 代码中的安全相关问题。 请参阅 Oslo/Security 获取当前列表。
设计提案
我们使用 oslo-specs 仓库 来跟踪所有 Oslo 项目的设计提案。
请参阅 规范审批策略 以获取详细信息。
在 launchpad 上的 蓝图 详细说明了当前正在实施这些规范的变更。
已批准的 规范 分别发布。
发布说明
峰会
Pike
Ocata
Newton
Mitaka
Liberty
Kilo
Juno
Juno Etherpads
Icehouse Etherpads
来自 Icehouse 设计峰会会议的 etherpads。
- 使用 Pecan/WSME 创建 REST 服务
- OpenStack 客户端更新
- 对 hacking 的更新,我们的代码风格强制工具
- 消息的 I18n 策略
- oslo.messaging - API 设计,Icehouse 的计划
- oslo.config 增强功能,包括移除消费者导入副作用
- Rootwrap:Icehouse 计划
- 数据库模式迁移的现状
- 朝着更结构化和限定的通知
- 合并日志和通知
- 编写服务同步库
- Oslo 孵化库状态
- 积极拆分 oslo-incubator
Havana 中的消息相关工作
在 Havana 周期中,正在进行 重新设计我们的消息 API 和 为我们的消息添加签名和加密 的工作。
请参阅 此 etherpad 以获取更多详细信息。
Havana Etherpads
来自 Havana 设计峰会会议的 etherpads。
- Oslo 状态和计划
- Pecan/WSME 状态
- 无停机 DB 迁移
- Havana 周期 Rootwrap 改进
- 通用的打包支持和代码分析工具
- RPC API 审查
- Ceilometer 和 Quantum 的 ZeroMQ RPC
- 消息队列访问控制
- RPC 消息签名和加密
- OpenStack 中的 Zipkin 追踪
- OpenStack 服务的 i18n 策略
- 通用的 XenAPI 库
Grizzly Etherpads
来自 Grizzly 设计峰会会议的 etherpads。
- Oslo 状态和计划
- 统一 CLI,第 2 次尝试
- 为 RPC 添加可选安全
- 用于命令和控制的服务框架
- 使用消息总线进行消息传递
- 为 API 服务选择 WSGI 框架
- XML 请求/响应处理
- 基于入口点的插件
- 统一 rootwrap 和密码管理
- 一个通用的数据库
- 仪器监控
Folsom Etherpads
来自 Folsom 设计峰会会议的 etherpads。