为了减少碳排放,fzaninotto/Faker 的作者选择 deprecated

原文: marmelab.com/blog/2020/10/21/sunse...

我(指原始作者: François Zaninotto, 下同)正在淡化 fzaninotto/Faker, 一个流行的PHP语言模拟数据生成库,下面请让我解释下“为什么”和“接下来PHP程序员会做什么”:

Faker 蛮有趣的

我开始开发 Faker 始于 2011 年 10 月,这是因为我非常需要为我的项目生成模拟数据。随后令我吃惊的是不少人使用它并很振奋人心的在不少PHP社区获得名气,并收获了不少感谢。

利用 Flaubert (译者注:福拜楼)Lewis Carroll(译者注:路易斯.卡罗) 的杰作来填充网页十分让人满意。借此 Faker 也能产生大量的模拟长文数据,以达到更加逼真效果,正因为此也改版了包括我在内的开发者构建项目的方式。

<?php
// use the factory to create a Faker\Generator instance
$faker = Faker\Factory::create();

// generate data by accessing properties
echo $faker->name;
  // 'Lucy Cechtelar';
echo $faker->address;
  // "426 Jordy Lodge
  // Cartwrightshire, SC 88120-6700"
echo $faker->text;
  // Dolores sit sint laboriosam dolorem culpa et autem. Beatae nam sunt fugit
  // et sit et mollitia sed.
  // Fuga deserunt tempora facere magni omnis. Omnis quia temporibus laudantium
  // sit minima sint.

项目截至目前已有 450多个贡献者(感谢他们的付出),并为 713k 个项目所依赖;这既让我感到自豪,也充满感激。

Faker 存在设计瑕疵

因为Faker收集了包括整本小说在内的超过 70 种语言的数据,所以 Faker是一个体积庞大的库——超过 3MB。

开发人员喜欢使用 Faker 进行自动化测试,因此只要有人打开 PR,他们的 CI 服务器就会下载它。结果,Faker 被大量使用。

Faker 下载量统计

按照 Packagist 统计数据,Faker已被下载了 1.21 亿次。1.21 亿 x 3.3 MB =天量字节(译者注:不能这么算,因为 Faker 包并非一开始就超过 3M)。

我非常担心我们开发人员对气候变化的责任。多年来,Faker可能超过 11 吨的二氧化碳排放。作为气候变化的重要贡献者会反噬我。

其实大多数人只使用1个语言,因此他们本来只需要库大小的一小部分。但是,由于其(Faker)被设计为多语言库,所以别无选择:即使只需10KB,他们也必须下载3MB。

Faker 本应该是一个没有本地化内容的小型核心库。这样,来自世界各地的开发人员就可以向Packagist提供本地化的软件包,而无需我监督合并。用户只需下载所需的核心和语言环境即可。

另一个核心设计问题是 seed (译者注:数据库模拟数据填充命令)。为了允许可复用的构建,Faker 生成器接受 seeder。使用相同的 seeder,Faker将始终生成相同的模拟数据。除非……这只是在要选择模拟数据语料库不变的情况下才行。这导致无法对现有提供程序进行任何重大更改,例如删除过时的数据或重复的内容。为了填入新的模拟数据,Faker必须避免修改其数据。

但不幸的是,现在为时已晚——Faker 需要完全重新设计以克服这些问题。

Faker 是个诅咒

我在 Faker 上收到的大多数 PR 都创建或改进了本地化内容。大量假名,地址,电话号码等。这些 PR 中的大多数使用受版权法律保护的内容,这些内容是从公共网站复制的。Faker 基于 MIT 协议,不能包含任何受版权保护的内容。而且这些 PR 都是我不懂的语种,因此我无法知道数据的优劣,出于版权等这些风险考虑,我最终关闭了许多 PR,并盲目地合并了部分其他 PR。

检查这个随便抽取的 PR,以了解我作为维护者生活的痛苦。

几年前,一位计算机科学家就他正在进行的一项研究与我联系。他分析了数千个开源存储库,发现 Faker 在所有项目中的总线系数最低。这意味着 Faker 拥有来自世界各地的大量贡献者,维护者(就是我啦)一年仅做出了一些更改——当然,除了合并提交。对他来说,这便是我非常擅长委派维护任务。对我来说,这意味着在项目上投入自己的脑力付出非常之少了。

另外,我不再在工作中使用PHP。事实上我已经有 5 年多没有写过PHP了。对于这个库而言,用我不擅长的语言维护这并不是一件好事。

最后,我还有其他耗时的工作。我经营 Marmelab,这是我 8 年前创立的 15 个开发者的公司。我是一个流行的JavaScript库(称为 react-admin )的首席开发人员。

一年前,我意识到我需要一个人来移(接)交(受) Faker 的维(诅)护(咒)。

为什么没有找人接盘维护?

过去,我曾经做过这个事情了。我是 Propel 的首席开发人员,Propel 是PHP的开源ORM。当我意识到我没有时间去维护它时,我把它交给了一个我认识的开发人员,他在大约一年中的维护工作做得非常不错。

然后他将其移交给另一位开发人员。第二个开发人员认为代码库太糟糕了,需要完全重写。我坚持认为一个好的库是一个经常发布的库,但是我不再是维护者。他那时候都已经是六年前,但现在重写仍在进行中,而 2.0 版从未发布过。

对我来说,这次移交是完全失败的。看到自己所做的工作如此辛苦地被别人糟蹋那一刻,我是心碎的。

至于 Faker,去年我邀请了 2 位新的维护人员,他们开始对代码库进行现代化。但是正如我在上面解释的那样,维护 Faker 并不有趣。而且,对于 Faker 的重要问题,我们有不同的看法,但这无济于事。结果,他们在过去一年中贡献不大。

换句话说,我很乐意移交开源项目。

最后,上周,该项目因为不怎么更新,引发了在 GitHub 上的讨论,以至于有人提议将 Faker 转移到拥有新维护者的(另一个组织)。

我将其视为恶意收购——失去 25,000 星声誉,并将该项目移交给过去从未做出重大贡献的开发商的提议。我拒接接受!

Faker 很完善

但是毕竟,为什么 Faker 需要发展?如果下载了 1.21 亿次,则可能是因为它足够完善。我意思是,成千上万的 Faker 用户使用中没碰到大问题,对吗?

不过也许有一种方法我们会离开日新月异的软件社区,以一种旁观者清的姿态来欣赏 Faker 日后之路。

我开个玩笑啦,PHP 8 的出现必将淘汰 Faker, PHP 新版引入的新类型将使得当前的 Faker 无法在日后被依赖。

Faker 死了

因此,我唯一可以做出的决定就是退休 fzaninotto/Faker。

这意味着我将不会接受新的 PR,不会合并现有的 PR,不会发布新的版本,也不会接受新的维护者。我将完全禁用来自 Fake r存储库的通知,并删除充满了我的收件箱的所有与 Faker 相关的消息的存档——这是有利于地球生态保护的又一利好举动。

我知道这对于所有将时间和工作捐赠给 Faker 的贡献者来说都是很沮丧的,对此我深感抱歉。但是我认为退出本身,这一点很符合 PHP 社区的利益。

我不想破坏网络,所以当然,Faker 在 Packagist 上仍然可用,只要您不升级PHP版本就可以继续用下去。

Faker 永生

Faker 满足了重要的需求,因此我相信其他人很快就会发布一个新的库来生成模拟数据。我什至惊讶以前没有人做过。

它会比 Faker 更好,并且发展更快。如果您有兴趣,可以先分叉 Faker。您不需要我的授权 —— 这就是开源的魅力!请注意,几年后您可能会懊悔的 :)

Faker 本身是 Perl 的 Data :: Fakerruby Faker 的混合体。如今,Faker 比这些项目更加受青睐,并帮助使用 PythonJS 和其他语言构建了其他模拟库。

那么,您想对 PHP 开发的未来产生重大影响吗?

https://marmelab.com/static/ee74ad20ab1e726a6244f42ae62ed592/0c8fb/colors.webp

讨论数量: 2
Shuyi

github.com/fakerphp/Faker

Laravel 团队把这个烫手山芋接过来了

3年前 评论

还能这样?(黑人问号脸

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!