Drupal 7:幕后功臣 Webchick
Angela Byron 是开源社区最受尊敬的贡献者之一。她的努力得到了 Google 的认可,并获得了 2008 年 Google-O'Reilly 最佳贡献者开源奖。她对 Drupal 项目充满热情,并孜孜不倦地工作,以确保这个流行的 Web 平台和 CMS 的最新版本是迄今为止最好的版本。我们与 Angie 谈论了她作为 Drupal 7 共同维护者的角色,以及管理如此重要的大型开源项目需要做些什么。
KD: 在新发布的 Drupal 第 7 版中,您作为核心维护者领导工作,度过了非常忙碌的三年。请详细介绍一下作为 Drupal 7 核心维护者意味着什么。这需要做些什么?
AB: Dries Buytaert 是 Drupal 项目的创始人和项目负责人,也被称为我们的终身仁慈独裁者。他掌握着 Drupal 核心的钥匙(即提交权限)。在 Drupal 的每个新版本发布时,Dries 还会任命另一位人士,称为共同维护者,他也被授予提交权限,并负责与他一起帮助设定版本的愿景和方向。
Neil Drumm 是 Drupal 5 的核心共同维护者,他优先考虑可用性改进,包括图形安装程序。Gábor Hojtsy 是 Drupal 6 的核心共同维护者,他优先考虑了许多国际化改进。在 Drupal 7 中,我被选中了。我优先考虑的事情包括可用性、质量保证、“开发者体验”(API 一致性和其他使 Drupal 更易于使用的方面),以及使 Drupal 更易于设计师、主题制作者和残疾人士访问。
“从纸面上看”,核心共同维护者的责任是审查和提交核心开发人员提交的补丁。但在实践中,我发现我大约 80% 的时间不是在做这件事,而是花在更多“人性化”的工作上:识别在类似领域工作的人并鼓励他们一起工作,帮助集思广益某些补丁的架构方向,调解激烈的争论,帮助新的贡献者参与进来,推广重大举措等等。所以在某些方面,这是一个社区管理角色,但附带了提交权限。
KD: 这三年中哪个阶段最紧张?我猜是过去的几个月,但我想知道在这个版本的工作过程中模式是怎样的。开始、中期和结束时的情况如何?
AB: Drupal 的发布周期分为三个阶段
“代码解冻”阶段,我们实现最疯狂的梦想,添加新功能,破坏 API,并普遍追求统治世界。
“代码融雪”阶段,我们专注于打磨代码解冻阶段的粗糙边缘、API 一致性、UI 清理和性能。
“代码冻结”阶段,API 受到严格锁定,错误修复/稳定是主要任务。
强度各不相同,通常每当我们有重大截止日期(例如,Drupalcon 即将到来或即将宣布代码冻结日期)时,情况都会变得非常紧张。我们的大部分主要功能都是在这些重大截止日期前一周左右推出的。
最具挑战性的事情之一是在代码解冻(也就是“有趣”的部分)完成后保持势头。人们不能再添加他们喜欢的功能了;相反,注意力转向了错误修复和增量改进的“苦差事”。核心贡献者的数量大幅减少,因为他们将注意力重新集中在他们贡献的模块或其他项目上,而剩下的人不得不承担将我们从大约 150 个关键问题减少到零以供发布的相当大的负担。
KD: Drupal 拥有很多核心贡献者。现在大约有 1,000 人,不是吗?显然,其中一小部分人贡献了大部分代码,但仍然是一个庞大的人群需要协调。您能谈谈这种体验吗?
AB: 是的,提交日志中的计数略少于 1,000,但这不包括报告错误、测试补丁等等的人。这个数字包括大约 50-75 名硬核人士,他们每天都在 Drupal 核心队列中度过,然后是数量庞大的其他人,他们只贡献少数补丁。而且,请记住,这些补丁中的每一个都必须经过审查,然后由 Dries 或我提交。
在这种环境中工作既令人兴奋又具有挑战性。我最喜欢的部分是制定作战计划,并就如何使 Drupal 7 成为最令人惊叹的版本集思广益,帮助新的贡献者提交他们的第一个补丁,看到社区对可用性、设计和可访问性等方面的意识逐渐发展并接受它们的重要性。核心贡献者是令人惊叹、聪明、敬业和充满激情的人,他们将自己的身心都投入到 Drupal 中,我很荣幸每天在 IRC 和问题队列中与他们一起工作。
然而,这种密切的程度也意味着事情有时会变得有点私人化。当事情变得私人化时,真的,真的很伤人,因为这些人都是我的朋友,我们已经密切合作多年。确实有些时候我需要离开电脑几个小时,换个角度看问题,甚至不止一次考虑完全放弃。
总的来说,这次经历绝对令人惊叹。我为团队以及我们使用 Drupal 7 所取得的成就感到无比自豪。
KD: 您能告诉我们开发和维护此类项目所涉及的决策过程吗?你们如何集体决定行动方案或解决问题的最佳方法?程序员可能会坚持自己的意识形态。您如何处理这种情况?
AB: Drupal 是一个非常基于共识的社区。问题被识别出来,解决方案被提出,代码被编写出来,然后在至少两个人,甚至可能是几十人或数百人之间进行讨论。任何更改,无论大小,除非被标记为“社区审查和测试”,否则都不会进入上游代码,这意味着至少另一个人已经看过它并表示赞同。这是一个很棒的“社区工程”策略,因为它确保了更高质量的代码,并鼓励开发人员彼此文明相待,以便他们可以为他们的补丁找到审查者。
通常,对于直接的错误修复几乎没有争议。然而,在一些更深奥或面向架构的问题上,很多人开始对方法发表意见,有时甚至是激烈的意见。
在我作为核心维护者的角色中,在这些情况下我通常能做的最好的事情就是仔细监控讨论,但保持基本沉默,除非事情升级到人身攻击。在几乎所有情况下,如果开发人员被允许自由地自行解决问题,他们都能够在没有任何干预的情况下达成共同的解决方案。重要的是这种情况在大多数时候发生,以便在开发团队中建立友谊和尊重。
然而,偶尔也会出现僵局,需要核心维护者进行干预。在这种情况下,我通常会尝试将人们带到 IRC 中,看看我们是否可以一起解决他们的分歧。通常,当双方在调解人的帮助下聚集在一起时,问题队列中持续数天的激烈讨论可以在几分钟内解决。我尝试总结对立的观点,并解释每种观点的优点,以消除会议中可能出现的一些防御心理。任何人的想法都不是“错误”的;它们都有优点,但我们需要做出正确的决定,这可能是两者的某种混合。
在无法达成解决方案的情况下,我会发布我尽力提出的双方都同意的解决方案。这实际上很少是我们最终采用的实际解决方案,但它有一种“重置”对话的方式,使其围绕一个新的建议而不是旧的建议,这通常有助于每个人再次友好相处——通常是这样。总的来说,我只是试图提醒人们,我们都在这里让 Drupal 变得更好,即使是那个固执的家伙,他现在还看不到你的观点。
KD: Drupal 7 最让您兴奋的是什么?您认为 Drupal 7 的改进会增加 Drupal 的采用率吗?
AB: 从功能上来说,很难选择——我们在 Drupal 7 中添加了非常多的东西——但我认为总的来说,可以归结为以下几点
图像处理现在已开箱即用,无需下载六七个额外的模块。这对于采用来说是巨大的,至少对于那些希望他们的网站上除了文本之外还有其他内容的人来说是这样,这些人显然是存在的。它还为我们的原生文件 API 带来了一系列改进,这对于扩展 Drupal 以用作文档管理系统具有有趣的意义。
新的数据库抽象层让很多人非常兴奋。既因为它支持事务等新功能,又因为它支持更多的数据库后端,而且还因为它新的面向对象语法。基本上,Drupal 7 中修复了我们数据库抽象层中所有糟糕的地方。
新的实体和字段范式是 Drupal 项目中的一个重要转变。过去,Drupal 非常“以内容为中心”,并且开发了许多功能来扩展系统中的“节点”或内容片段。这导致很多人试图将实际上不是节点的东西(例如用户、评论等)硬塞到节点中,以便他们可以从这些功能中受益。将来,这些相同的功能将作为字段开发,然后可以在系统中的任何实体中使用——用户、评论、内容、分类术语等等。
自动化测试框架和我们添加到 Drupal 7 中的 30,000 多个测试对我们的社区开发过程产生了深远的影响。我们可以立即知道问题队列中的任何补丁是否有效或破坏了现有测试。我们可以自由地重构子系统,因为我们知道我们没有破坏任何现有功能,“测试驱动开发”的思维方式正在作为最佳实践慢慢进入我们开发社区的意识中。
总的来说,与上一个版本相比,我现在对核心开发团队的多样性感到非常兴奋。我们有一个可访问性团队、一个可用性团队、一个标记和设计团队以及一个文档团队,致力于以超越代码的方式改进核心。我希望这些领域的早期先驱所表现出的领导力将为 Drupal 8 过程中的新贡献者打开闸门,并且 Drupal 8 在所有这些领域以及更多方面都比 Drupal 7 有所改进。
KD: 我已经玩过 Drupal 7 一段时间了,但我不能说我真的充分利用了它,而且我一直听到它比以前更好用。您认为这将在多大程度上影响 Drupal 的学习曲线?
AB: 可用性是在 Drupal 7 发布周期中受到极大关注的事情,我们看到了 Drupal 开发社区的文化以及对进入门槛的重视程度发生了根本性的转变。
就在 Drupal 6 于 2008 年 2 月发布后,Dries、我和其他几位主要贡献者前往明尼苏达大学(是的,二月份的明尼阿波利斯——这就是我们对 Drupal 的热爱程度)进行我们项目的首次正式可用性研究。我们被安排在一个带有单向玻璃的房间里,配备了眼动追踪软件等工具来了解人们在屏幕上的注视位置,并且该大学找到了几位参与者,他们之前有使用 WordPress、Movable Type 和 Dreamweaver 等工具进行 Web 开发的经验,但没有 Drupal 经验。换句话说,我们项目直接目标受众中的人。
结果绝对令人震惊,并彻底改变了我看待 Drupal 的方式。我们发现参与者完全不知道他们是在网站的前端还是后端。他们无法找到主要的管理部分来执行基本任务。他们对 Drupal 的术语感到困惑,等等。
成立了一个可用性团队,他们着手修复测试中发现的许多问题,并且他们修复了现有 UI 中的许多重要且明显的问题。此外,Acquia 资助了设计和可用性专家 Mark Boulton 和 Leisa Reichelt,以社区驱动的协作可用性实验 D7UX 为平台,全面审视 Drupal 管理体验并进行更广泛的变革。这两项举措协同工作,为 Drupal 7 提供了新的管理主题;一组常见的管理模式,例如工具栏和上下文链接;以及基于任务的管理信息架构。我们尚未能够正式测试我们在 Drupal 7 中所做的可用性工作在多大程度上改善了 Drupal 6 的结果,但来自更广泛社区的初步反馈非常棒。
这项可用性工作并没有完全解决可怕的“Drupal 学习悬崖”本身。要成为一名成功的 Drupal 网站构建者,您仍然需要了解很多东西,例如您应该为哪些用途使用哪些模块,以及“分类”和“节点”等奇怪的词语究竟是什么意思。但是,Drupal 7 有望减少网站构建者的大量自定义工作,以便将其展示给他们的客户,并让他们更好地回答这个问题:“太好了。我已经安装了一个 Drupal 网站……现在怎么办?”
KD: 据说它的可扩展性也更高。您能告诉我们是如何做到的吗?
AB: Drupal 7 中的许多新功能有助于应对您的网站需要容纳大量额外流量的情况,从而确保所有访问者都能获得快速的体验
数据库抽象层中的主/从复制支持——数据库写入速度慢于数据库读取速度,并且读取发生的频率更高。主/从设置允许您将读取与写入分开,这样存储所有信息的主数据库就不会因读取请求而额外负担过重,读取请求可以路由到只读从数据库。
反向代理支持——Varnish 或 Pound 等反向代理可以通过缓存页面副本然后拦截请求来提供服务,从而大大加快网站访问速度,从而使 Web 服务器不必直接处理页面请求。Drupal 的 settings.php 配置文件现在包含启用反向代理支持的指令。
对内容分发网络 (CDN) 的支持——存在一些服务,用于跨多个地理分布的计算机缓存静态文件,例如图像、CSS 和 JS,然后可以比往返 Drupal 存储的 Web 服务器更快地将这些文件提供给访问者。通过调用 hook_file_url_alter(),模块可以将来自 Drupal 文件目录的请求重新路由到 Akamai 或 Amazon CloudFront 等服务。
有一个名为 Pressflow (pressflow.org) 的 Drupal 6 核心的高性能发行版,其中许多可扩展性改进都源于此。
KD: 对于那些更熟悉 WordPress、Joomla 甚至 Ruby on Rails 和 Django 等平台的读者,他们需要了解 Drupal,特别是 Drupal 7 的哪些方面,才能获得最佳的入门体验?
AB: 对于来自其他 CMS(例如 WordPress 或 Joomla)的人来说,开始使用 Drupal 的最大障碍通常是 Drupal 采用的“乐高积木”方法,即使用模块构建网站。在其他 CMS 中,如果您想在您的网站上添加一个照片库,您只需搜索照片库扩展程序并从预构建的一体化选项列表中进行选择。
然而,在 Drupal 中,模块的趋势更多地是倾向于小型、通用、可重用的组件,这些组件可以以多种不同的方式组合和混合搭配。Drupal 中没有太多现成的照片库模块。在 Drupal 中构建照片库通常涉及创建内容类型以提供图像的数据输入表单,添加图像字段以便将照片上传到内容类型,创建照片图像的视图等等。虽然一开始需要付出更多的努力,但优势在于您最终得到的照片库可以完全按照您想要的方式运行。而且,为照片库提供图像字段的同一模块也可以重复使用以提供专辑封面和用户头像,而提供照片库视图的同一模块可以用于创建活动日历、RSS 源和其他类型的列表页面。这种级别的自定义和可重用性是吸引人们使用 Drupal 的原因,但这绝对需要一种修补匠的心态。
对于来自 Django 或 Ruby on Rails 等框架的人来说,关于 Drupal 主要需要认识到的是,它更像是一个“框架应用程序”而不是一个纯粹的框架。Drupal 提供了丰富的 API 来处理文件处理、会话管理、国际化等等,并且它还提供了一个“钩子”系统,可以从中扩展 Drupal 的基本行为。但是,它也做出了一些基本假设,即您正在构建的是一个基于 Web 的应用程序,用于跟踪用户和内容等内容。这样做的好处是,您不必每次在 Drupal 上构建网站时都重新编写新的登录系统;这种类型的低级功能以可扩展的方式为您提供。但是,这确实意味着,如果您不同意 Drupal 做出的一些基本假设,您将需要花费一些精力开发一个模块来更改您想要更改的行为。我可能可以给来自更传统的 Web 框架的人们的最佳建议是花时间探索 Drupal 在不编写一行代码的情况下可以做什么,这是相当可观的。然后,学习 Drupal 提供的扩展机制——钩子、主题系统、本地化层等等——以可移植的方式进行自定义。
KD: 您曾参与过一些主要的、大型的 Drupal 项目,而且 Drupal 也被选为 Whitehouse.gov 的平台。Drupal 的哪些特性使其适合这些类型的网站?
AB: 我认为 Drupal 找到了一个最佳点,因为它是一个免费、开源且功能极其强大的框架,并且还在不断发展。它可以高度自定义以适应特定用例,并且它有一个不断壮大的社区,拥有大量专业知识。我们合作的许多企业级客户都从功能较弱的专有 CMS 迁移到 Drupal,这些 CMS 每年的许可费用高达数千甚至数十万美元,并且存在他们自己无法修复的错误,因为他们受制于供应商的计划。因此,迁移到他们可以在内部接受培训或聘请外部专家快速实施的东西的想法非常有吸引力。
我们无法将整个采访内容都放在杂志中,要了解更多信息,请访问 www.linuxjournal.com/content/interview-angie-byron-drupal。
Katherine Druckman 白天是一位精通 HTML 和 PHP 的 Linux Journal 女站长,晚上是一位对历史建筑和精美中国陶瓷有着敏锐鉴赏力的鉴赏家。人们通常可以在她周围发现德克萨斯州先驱时代的古老建筑的魅力,或者欣赏宋代和清代的陶瓷。嗯,要么是这样,要么是坐在舒适的椅子上使用笔记本电脑。是的,可能是笔记本电脑的事情。Katherine 现在是她领导 LinuxJournal.com 所有事务的第四年,她在为开源受众进行 Web 发布方面的经验加强了她作为一名热情的 Drupal 粉丝的立场。