2024年1月

1 得益于人工智能驱动的狂热,标普 500 指数创历史新高

据《华盛顿邮报》报道,周五该指数创下历史收盘新高,“反映了在经济出奇稳定的背景下,一些大型科技公司的惊人涨幅”。该指数收于 4839.81 点,超过了 2022 年 1 月创下的收盘纪录。在过去的 12 个月里,该指数上涨了 21.83%。分析人士指出,华尔街的人工智能热潮可与上世纪 90 年代末的互联网热潮相媲美。科技公司,包括一些与人工智能工作密切相关的公司,领涨标普 500 指数。苹果、微软、Alphabet、亚马逊、英伟达、特斯拉和 Meta 这七家被称为 “七巨头” 的大型科技股在 2023 年平均上涨了 75%,占 2023 年底该指数总市值的 30%。

(插图:DA/843e9030-3972-41fd-963b-b86df6138af5)

消息来源:MSN
老王点评:终究还是要看高科技啊。

2 龙架构为 Linux 6.8 提供初步 Rust 内核支持

在周五进行的 Linux 6.8 合并窗口中,龙芯提交的补丁提供了初步的 Rust 内核支持。该拉取请求已被合并到主线中。随着 Rust 编程语言开始适用于内核编程,看到更多的 Linux 内核架构支持 Rust 是个好消息。Linux 6.8 还拥有首个 Rust 编写的网络 PHY 驱动程序,以替代现有的 C 语言驱动程序。

(插图:DA/4f2de7bb-e8c2-4f71-beca-52cea4744c35)

消息来源:Phoronix
老王点评:这一次龙芯和龙架构走在了前列。

3 NPM 用户每周下载 21 亿个过时软件包

开源软件可能会因为各种原因停止接受更新,废弃、归档和 “孤儿” 的 NPM 软件包可能包含未修补和/或未报告的漏洞。根据对 NPM 注册表中下载次数最多的前五万个软件包的统计分析,估计每周下载废弃软件包达 21 亿次。这五万个软件包中,约有 4100 个(8.2%)属于 “正式” 废弃的软件包。然而,如果将 “归档” 的软件包也算作 “废弃” 的话,受影响的软件包数量增至 6400 个(12.8%)。再加上无法访问链接的软件包,数量将达到 10,600 个(21.2%)。

(插图:DA/24c7d7a7-9bec-408c-a4dd-129c465bdd0a)

消息来源:SC 杂志
老王点评:开发者/维护者有责任向用户传达这种维护状态。

现在,它的功能分散在无数供应商之间。

技术的进步似乎是线性的,新的技术总是会取代旧的。从这个角度来看,新技术总是更好,因为我们假定新技术是基于旧技术,并对其进行了改进。

但当你年纪渐长,你就会开始意识到这并非总是如此。进步并不总是直线前进的。只要看看个人电脑是如何基本上取代之前笨重的大型机和微型机,然后再慢慢积累那些老系统的先进功能,如多用户支持、冗余和安全性等。

还有一些技术似乎走在了时代的前列,或者说成为业界老鸟们怀念的对象,因为它们提供了当今高科技世界所缺少的东西。

其中之一就是 Lotus Notes,提到它可能会让读者嗤之以鼻,因为它确实有不少缺点;例如,它的资源贪婪让一些用户将这个程序称为 “Notice Loads”。

不过,你几乎可以用 Lotus Notes(加上其 Domino 服务器后端)管理整个公司,许多公司也确实是这样做的。这个程序是电子邮件、数据库和工作流的奇特组合,允许公司在 Notes 里面设置定制的应用,并将它们部署给相关的工作人员群体。

笔者曾在一家广泛使用 Notes 的出版公司工作,我发现它在当时非常有用。它不仅提供了电子邮件,还提供了内部电话簿、联系人数据库、请假系统、公司手册等,所有这些都可以通过单个应用程序和单套凭证进行访问,而这远在单点登录成为风潮之前。

如今,即使不是全部,也是大部分,这些功能都通过独立的基于网络的应用程序提供,每个程序都需要不同的登录方式,因此你需要记住几十个不同的凭证,而且每个凭证都有不同的用户界面。因此,我想你当可以把网络浏览器看作是一个应用程序运行时,它是 Notes 的最终继承者。

如果你想了解 Notes 有多有用,可以参考笔者作为评论编辑,使用过的一个应用。我们的杂志(还记得纸质杂志吗?多么古老啊!)过去每个月的月刊都会刊登大约 30 页的产品评论,我们在 Notes 上建立了一个数据库来帮助跟踪所有内容。

过去,待评论的计算机套件运抵到出版商的办公室后,会给一个序列号,并由工作人员记录到仓库。作为评论编辑,我会在 Notes 上收到产品已到的通知,这样评论编辑就可以知道产品正在等待他们的指指点点,我也可以把它添加到目前正在制作的那期杂志的产品列表中。

出版商的内部摄影师(当时是九十年代,出版商比较有钱)可以看到同一张表格,因此他们知道该为该期杂志拍摄哪些产品。这个工作流程是在 Lotus Notes 上内部构建的。公司里的其他人也有许多类似的应用程序可以使用。

也许我对 Notes 的记忆有些美化,但我记得由于邮件信息链的会话视图,管理邮件变得非常容易,而后来我在一家使用 Outlook 的公司工作时,感觉真是大步后退。

然而,在新千年的时候,Notes 已经开始显得有点笨拙和过时,它的庞大用户群体也开始减少,因为企业开始转向微软 Exchange Server 和 Outlook 的组合,而后者在工作流程方面也许更容易与微软 Office 应用程序和 VBA 集成。

最终,IBM 在 1995 年收购了 Lotus,而在 2012 年,IBM 宣布将完全停用 Lotus 品牌,并于 2018 年将 Notes 出售给印度的软件公司 HCL Technologies。

该平台依然存在,HCL 去年发布了 Domino 14.0,正如 The Register 当时评论的那样,这说明了在该平台上构建的定制工作流程的 “粘性”。

有一家公司出版了 Lotus Notes 从诞生到现在的 详细历史,感兴趣的人可以去看看。

但 Notes 并不是所有还在使用的软件中最古老的。据说,为美国国防部(DoD)管理合同的美国国防合同管理机构(DCMA)有一个名为合同管理服务机械化(MOCAS)的程序,该程序于 1958 年推出,因此它的历史几乎是 Notes 的两倍。

(题图:DA/51b205bf-c1eb-4c58-8663-ff76a64162e2)


via: https://www.theregister.com/2024/01/19/remembering_lotus_notes/

作者:Dan Robinson 译者:ChatGPT 校对:wxy

Kate(KDE Advanced Text Editor)是一款自由开源的文本编辑器,适用于 Linux、Windows 和 macOS。

对于文档编写者来说,Kate 集成的 Git 功能可以帮助简化编写过程。你无需记住 Git 命令,也无需在每次更改文件或切换分支时在终端中输入它们。

本文重点为从事各种 Fedora 文档仓库的贡献者介绍 Kate 的主要功能。这些功能可以扩展到其他文档仓库。

将 Kate 与你的仓库一起使用的准备工作

  1. 将 SSH 密钥添加到 Pagure、GitLab 或 GitHub 上的帐户设置中。

    • 在 Pagure 上,转到 我的设置 My Settings SSH 密钥 SSH Keys 添加 SSH 密钥 Add SSH Key
    • 在 GitLab 上, 首选项 Preferences 用户设置 User Settings 添加 SSH 密钥 Add an SSH Key
    • 在 GitHub 上, 设置 Settings SSH 和 GPG 密钥 SSH and GPG keys 新的 SSH 密钥 New SSH key
  2. 复刻项目:转到上游仓库并选择 “ 复刻 Fork ” 按钮
  3. 克隆仓库

    • 在你的分叉仓库中,选择 “ 使用 SSH 克隆 Clone with SSH ”。
    • 接下来,将该链接复制到剪贴板并将其粘贴到终端中的 GIT URL 中。
    • 克隆仓库时,你可以指定新目录名称作为附加参数。$ git clone <GIT URL> 新目录
  4. 安装 Kate。如果你是 Linux 用户,请转到发行版的包管理器来安装 Kate。如果你使用 Fedora Linux,我们推荐 Fedora Linux RPM 版本或 Flatpak。

会话

Kate 文本编辑器中的会话功能可以将单独的项目分组在一起,并帮助你在单个视图中处理多个文档仓库。

要将仓库保存在会话中:

转到 “ 文件 File ” 下拉菜单 – 选择 “ 打开文件夹 Open folder ” – 选择克隆的目录。

从 “ 会话 Sessions ” 下拉菜单中 – 选择 “ 保存会话 Save session ” – 输入会话名称 – 按 “ 确定 OK ”。

在左侧窗格中,单击 “ 项目列表 project list ” 保存到新会话“Magazine”。下次打开 Kate 时,保存到会话中的克隆仓库将重新出现。

Sessions Menu

使用状态栏签出分支

使用 Kate 编辑器,你可以在状态栏和弹出屏幕上切换分支或创建新分支。

当前分支显示在状态栏的右下角。

要创建新分支,请选择 “Main” 分支。从弹出菜单中选择 “ 创建新分支 Create New Branch ” 并输入新分支名称。

Popup menu showing Create New branch

对 AsciiDoc 高亮显示的内置支持

具有 AsciiDoc 扩展名的文件将使用 asciidoc.xml 中的规则自动高亮显示。你不需要安装外部插件。

即时拼写检查

如果你希望在输入时自动进行拼写检查,请按 Ctrl + Shift + O。此组合键将打开和关闭拼写检查。

Git 工具视图

左侧窗格中的工具视图显示每个打开文件的 Git 状态。

Show diff

已暂存 Staged ” 表示文件已添加(与 Git 添加相同),并且如果你选择顶部的 “ 提交 Commit ” 按钮,文件将被提交。

已修改 Modified ” 显示尚未暂存的更改。

单击左侧面板顶部的 “ 提交 Commit ” 按钮以显示该提交的差异。这将在提交工具视图中打开选定的提交。如果你想查看提交中的所有更改,请右键单击并选择 “ 显示完整提交 Show Full Commit ”,添加一个提交消息。

Git “ 推送 Push ” 按钮在 “ 提交 Commit ” 按钮的右边。Git “ 拉取 Pull ” 按钮在 “ 推送 Push ” 按钮的右边。

选择 “ 刷新 Refresh ” 图标(圆圈箭头)以查看暂存文件和提交的情况。

集成终端

F4 或选择 “ 终端 Terminal ” 按钮可打开和关闭集成终端。

你可以通过集成终端使用构建脚本和 Vale linter,将你的写作提升到一个新的水平,确保文档质量。

步骤 1. 运行构建脚本

要在本地检查文档质量,你可以在集成终端中运行构建和预览脚本。构建和预览脚本可让你准确查看更改如何通过 Antora 静态站点生成器在文档页面中发布。

注意:检查 Fedora 文档仓库的 README 页面,为构建脚本和说明使用正确的文件名。下面是一个例子:

要构建和预览站点,请运行:

$ ./docsbuilder.sh -p

结果可访问 http://localhost:8080

要停止预览:

$ ./docsbuilder.sh -k

步骤 2. 对你的文本运行 Vale

Vale 是一个命令行工具,用于检查文本是否符合定义的样式指南。参考该 指南 在本地运行 Vale。

鸣谢

非常感谢 KDE 开发人员 Nicco,他的视频教程频道 “Nicco loves Linux” 给了我很多灵感。

本文使用的 Kate 版本为 23.08.3

上游文档

以下是本文使用的 Fedora 文档 Git 仓库:

(题图:DA/519568d2-a224-4075-a751-a1a8bc702079)


via: https://fedoramagazine.org/writing-docs-with-kate-and-git/

作者:Hank Lee 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

1 海尔要求开发者下架开源的家庭助理插件

海尔向一名德国开发人员发出了一份移除通知,要求他立即从 GitHub 平台上删除他为该公司家电产品开发的 家庭助理 Home Assistant 集成插件。“家庭助理”是一个开源的家庭自动化平台,用户可以通过一个集中的界面控制智能家居设备并使其自动化。除了便利性和成本外,该平台还提供了同类商业应用程序所不具备的卓越安全和隐私选项。在通知中,海尔声称“这些插件正在以未经授权的方式”使用其服务,对该公司“造成了重大经济损失”,侵犯了海尔的知识产权,要求开发者“立即停止和终止与开发和分发这些插件有关的所有非法活动”,以避免进一步的法律诉讼。

(插图:DA/8f1893ad-26f3-4a81-ba82-082d55411b91)

消息来源:Bleeping Computer
老王点评:愿开源开发者们不要为这种公司开发任何相关软件,以免惹火上身。大家知道那些家电厂商是支持开源软件的吗?

2 ReiserFS 作者在狱中回应被内核移除

ReiserFS 文件系统作者 Hans Reiser 因谋杀妻子被判处监禁。去年底,他在狱中回复了一封长长的纸质信函,回应了内核的相关讨论,在信中对自己的罪行表示了道歉,称自己已经是不同的人了。他随后讨论了对 ReiserFS 的贬低以及他对 Reiser4 的希望,对曾使用 ReiserFS 的发行版 SUSE 没能在市场上取得成功而遗憾。在 Linux 6.6 中,ReiserFS 已被正式标记为“过时”,将在未来几年来从主线内核中移除。

(插图:DA/2746e103-ffc0-4bd8-a44e-71c5f68ebc0e)

消息来源:Phoronix
老王点评:可惜了。

3 谷歌推出画圈即搜索的“画圈搜索”功能

谷歌最近推出的“ 画圈搜索 Circle To Search ”功能,可以让你在手机屏幕上圈出某样东西,然后点击一个按钮,即可通过谷歌搜索你圈出的东西。该功能将首先在谷歌和三星的五款手机上推出。它可以设备上的任何地方搜索,而无需打开谷歌应用。它也可以结合谷歌的“多重搜索”功能,你可以用圈出的图片和文字组合搜索。谷歌称,当你想知道 “为什么” 而不仅仅是 “是什么” 时,多重搜索就是你需要的工具。

(插图:DA/16af5a4f-cb25-4e9a-8c6a-c0b4dbb66a9c)

消息来源:The Verge
老王点评:看起来是有趣的功能,尤其是和 AI 结合起来的话会更有用。

大家好!我一直在慢慢摸索如何解释 Git 中的各个核心理念(提交、分支、远程、暂存区),而提交这个概念却出奇地棘手。

要明白 Git 提交是如何实现的对我来说相当简单(这些都是确定的!我可以直接查看!),但是要弄清楚别人是怎么看待提交的却相当困难。所以,就像我最近一直在做的那样,我在 Mastodon 上问了一些问题。

大家是怎么看待 Git 提交的?

我进行了一个 非常不科学的调查,询问大家是怎么看待 Git 提交的:是快照、差异,还是所有之前提交的列表?(当然,把它看作这三者都是合理的,但我很好奇人们的 主要 观点)。这是调查结果:

结果是:

  • 51% 差异
  • 42% 快照
  • 4% 所有之前的提交的历史记录
  • 3% “其他”

我很惊讶差异和快照两个选项的比例如此接近。人们还提出了一些有趣但相互矛盾的观点,比如 “在我看来,提交是一个差异,但我认为它实际上是以快照的形式实现的” 和 “在我看来,提交是一个快照,但我认为它实际上是以差异的形式实现的”。关于提交的实际实现方式,我们稍后再详谈。

在我们进一步讨论之前:我们的说 “一个差异” 或 “一个快照” 都是什么意思?

什么是差异?

我说的“差异”可能相当明显:差异就是你在运行 git show COMMIT_ID 时得到的东西。例如,这是一个 rbspy 项目中的拼写错误修复:

diff --git a/src/ui/summary.rs b/src/ui/summary.rs
index 5c4ff9c..3ce9b3b 100644
--- a/src/ui/summary.rs
+++ b/src/ui/summary.rs
@@ -160,7 +160,7 @@ mod tests {
  ";

          let mut buf: Vec<u8> = Vec::new();
-        stats.write(&mut buf).expect("Callgrind write failed");
+        stats.write(&mut buf).expect("summary write failed");
          let actual = String::from_utf8(buf).expect("summary output not utf8");
          assert_eq!(actual, expected, "Unexpected summary output");
      }

你可以在 GitHub 上看到它: https://github.com/rbspy/rbspy/commit/24ad81d2439f9e63dd91cc1126ca1bb5d3a4da5b

什么是快照?

我说的 “快照” 是指 “当你运行 git checkout COMMIT_ID 时得到的所有文件”。

Git 通常将提交的文件列表称为 “树”(如“目录树”),你可以在 GitHub 上看到上述提交的所有文件:

https://github.com/rbspy/rbspy/tree/24ad81d2439f9e63dd91cc1126ca1bb5d3a4da5b(它是 /tree/ 而不是 /commit/

“Git 是如何实现的”真的是正确的解释方式吗?

我最常听到的关于学习 Git 的建议大概是 “只要学会 Git 在内部是如何表示事物的,一切都会变得清晰明了”。我显然非常喜欢这种观点(如果你花了一些时间阅读这个博客,你就会知道我 喜欢 思考事物在内部是如何实现的)。

但是作为一个学习 Git 的方法,它并没有我希望的那么成功!通常我会兴奋地开始解释 “好的,所以 Git 提交是一个快照,它有一个指向它的父提交的指针,然后一个分支是一个指向提交的指针,然后……”,但是我试图帮助的人会告诉我,他们并没有真正发现这个解释有多有用,他们仍然不明白。所以我一直在考虑其他方案。

但是让我们还是先谈谈内部实现吧。

Git 是如何在内部表示提交的 —— 快照

在内部,Git 将提交表示为快照(它存储每个文件当前版本的 “树”)。我在 在一个 Git 仓库中,你的文件在哪里? 中写过这个,但下面是一个非常快速的内部格式概述。

这是一个提交的表示方式:

$ git cat-file -p 24ad81d2439f9e63dd91cc1126ca1bb5d3a4da5b
tree e197a79bef523842c91ee06fa19a51446975ec35
parent 26707359cdf0c2db66eb1216bf7ff00eac782f65
author Adam Jensen <[email protected]> 1672104452 -0500
committer Adam Jensen <[email protected]> 1672104890 -0500

Fix typo in expectation message

以及,当我们查看这个树对象时,我们会看到这个提交中仓库根目录下每个文件/子目录的列表:

$ git cat-file -p e197a79bef523842c91ee06fa19a51446975ec35
040000 tree 2fcc102acd27df8f24ddc3867b6756ac554b33ef    .cargo
040000 tree 7714769e97c483edb052ea14e7500735c04713eb    .github
100644 blob ebb410eb8266a8d6fbde8a9ffaf5db54a5fc979a    .gitignore
100644 blob fa1edfb73ce93054fe32d4eb35a5c4bee68c5bf5    ARCHITECTURE.md
100644 blob 9c1883ee31f4fa8b6546a7226754cfc84ada5726    CODE_OF_CONDUCT.md
100644 blob 9fac1017cb65883554f821914fac3fb713008a34    CONTRIBUTORS.md
100644 blob b009175dbcbc186fb8066344c0e899c3104f43e5    Cargo.lock
100644 blob 94b87cd2940697288e4f18530c5933f3110b405b    Cargo.toml

这意味着检出一个 Git 提交总是很快的:对 Git 来说,检出昨天的提交和检出 100 万个提交之前的提交一样容易。Git 永远不需要重新应用 10000 个差异来确定当前状态,因为提交根本就不是以差异的形式存储的。

快照使用 packfile 进行压缩

我刚刚提到了 Git 提交是一个快照,但是,当有人说 “在我看来,提交是一个快照,但我认为它在实现上是一个差异” 时,这其实也是对的!Git 提交并不是以你可能习惯的差异的形式表示的(它们不是以与上一个提交的差异的形式存储在磁盘上的),但基本的直觉是,如果你要对一个 10,000 行的文件编辑 500 次,那么存储 500 份文件的效率会很低。

Git 有一个将文件以差异的形式存储的方法。这被称为 “packfile”,Git 会定期进行垃圾回收,将你的数据压缩成 packfile 以节省磁盘空间。当你 git clone 一个仓库时,Git 也会压缩数据。

这里,我没有足够的篇幅来完整地解释 packfile 是如何工作的(Aditya Mukerjee 的 《解压 Git packfile》是我最喜欢的解释它们是如何工作的文章)。不过,我可以在这里简单总结一下我对 deltas 工作原理的理解,以及它们与 diff 的区别:

  • 对象存储为 “原始文件” 和一个 “ 变化量 delta ” 的引用
  • 变化量是一系列例如 “读取第 0 到 100 字节,然后插入字节 ‘hello there’,然后读取第 120 到 200 字节” 的指令。它从原始文件中拼凑出新的文本。所以没有 “删除” 的概念,只有复制和添加。
  • 我认为变化量的层次较少:我不知道如何检查 Git 究竟要经过多少层变化量才能得到一个给定的对象,但我的印象是通常不会很多。可能少于 10 层?不过,我很想知道如何才能真正查出来。
  • 原始文件不一定来自上一个提交,它可以是任何东西。也许它甚至可以来自一个更晚的提交?我不确定。
  • 没有一个 “正确的” 算法来计算变化量,Git 只是有一些近似的启发式算法

当你查看差异时,实际上发生了一些奇怪的事情

当我们运行 git show SOME_COMMIT 来查看某个提交的差异时,实际上发生的事情有点反直觉。我的理解是:

  1. Git 会在 packfile 中查找并应用变化量来重建该提交和其父提交的树。
  2. Git 会对两个目录树(当前提交的目录树和父提交的目录树)进行差异比较。通常这很快,因为几乎所有的文件都是完全一样的,所以 git 只需比较相同文件的哈希值就可以了,几乎所有时候都不用做什么。
  3. 最后 Git 会展示差异

所以,Git 会将变化量转换为快照,然后计算差异。它感觉有点奇怪,因为它从一个类似差异的东西开始,最终得到另一个类似差异的东西,但是变化量和差异实际上是完全不同的,所以这是说得通的。

也就是说,我认为 Git 将提交存储为快照,而 packfile 只是一个实现细节,目的是节省磁盘空间并加快克隆速度。我其实从来没必要知道 packfile 是如何工作的,但它确实能帮助我理解 Git 是如何在不占用太多磁盘空间的情况下将提交快照化的。

一个 “错误的” Git 理解:提交是差异

我认为一个相当常见的,对 Git 的 “错误” 的理解是:

  • 提交是以基于上一个提交的差异的形式存储的(加上指向父提交的指针和作者和消息)。
  • 要获取提交的当前状态,Git 需要从头开始重新应用所有之前的提交。

这个理解当然是错误的(在现实中,提交是以快照的形式存储的,差异是从这些快照计算出来的),但是对我来说它似乎非常有用而且有意义!在考虑合并提交时会有一点奇怪,但是或许我们可以说这只是基于合并提交的第一个父提交的差异。

我认为这个错误的理解有的时候非常有用,而且对于日常 Git 使用来说它似乎并没有什么问题。我真的很喜欢它将我们最常使用的东西(差异)作为最基本的元素——它对我来说非常直观。

我也一直在思考一些其他有用但 “错误” 的 Git 理解,比如:

  • 提交信息可以被编辑(实际上不能,你只是复制了一个相同的提交然后给了它一个新的信息,旧的提交仍然存在)
  • 提交可以被移动到一个不同的基础上(类似地,它们是被复制了)

我认为有一系列非常有意义的、 “错误” 的对 Git 的理解,它们在很大程度上都受到 Git 用户界面的支持,并且在大多数情况下都不会产生什么问题。但是当你想要撤销一个更改或者出现问题时,它可能会变得混乱。

将提交视为差异的一些优势

就算我知道在 Git 中提交是快照,我可能大部分时间也都将它们视为差异,因为:

  • 大多时候我都在关注我正在做的 更改 —— 如果我只是改变了一行代码,显然我主要是在考虑那一行代码而不是整个代码库的当前状态
  • 点击 GitHub 上的 Git 提交或者使用 git show 时,你会看到差异,所以这只是我习惯看到的东西
  • 我经常使用变基,它就是关于重新应用差异的

将提交视为快照的一些优势

但是我有时也会将提交视为快照,因为:

  • Git 经常对文件的移动感到困惑:有时我移动了一个文件并编辑了它,Git 无法识别它是否被移动过,而是显示为 “删除了 old.py,添加了 new.py”。这是因为 Git 只存储快照,所以当它显示 “移动 old.py -> new.py” 时,只是猜测,因为 old.py 和 new.py 的内容相似。
  • 这种方式更容易理解 git checkout COMMIT_ID 在做什么(重新应用 10000 个提交的想法让我感到很有压力)
  • 合并提交在我看来更像是快照,因为合并的提交实际上可以是任何东西(它只是一个新的快照!)。它帮助我理解为什么在解决合并冲突时可以进行任意更改,以及为什么在解决冲突时要小心。

其他一些关于提交的理解

Mastodon 的一些回复中还提到了:

  • 有关提交的 “额外的” 带外信息,比如电子邮件、GitHub 拉取请求或者你和同事的对话
  • 将“差异”视为一个“之前的状态 + 之后的状态”
  • 以及,当然,很多人根据情况的不同以不同的方式看待提交

人们在谈论提交时使用的其他一些词可能不那么含糊:

  • “修订”(似乎更像是快照)
  • “补丁”(看起来更像是差异)

就到这里吧!

我很难了解人们对 Git 有哪些不同的理解。尤其棘手的是,尽管 “错误” 的理解往往非常有用,但人们却非常热衷于警惕 “错误” 的心智模式,所以人们不愿意分享他们 “错误” 的想法,生怕有什么 Git 解释者会站出来向他们解释为什么他们是错的。(这些 Git 解释者通常是出于善意的,但是无论如何它都会产生一种负面影响)

但是我学到了很多!我仍然不完全清楚该如何谈论提交,但是我们最终会弄清楚的。

感谢 Marco Rogers、Marie Flanagan 以及 Mastodon 上的所有人和我讨论 Git 提交。

(题图:DA/cc0cada9-4945-4248-8635-3f89dcebd6ef)


via: https://jvns.ca/blog/2024/01/05/do-we-think-of-git-commits-as-diffs--snapshots--or-histories/

作者:Julia Evans 选题:lujun9972 译者:Cubik65536 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

1 扎克伯格的新目标是创造人工通用智能

Meta 首席执行官 马克·扎克伯格 Mark Zuckerberg 又一次有了新的目标,就是创造一个人工通用智能(AGI)。虽然他还没有一个实现 AGI 的时间表,甚至没有一个确切的定义(当然,其他人也没有),但他希望能够实现这一目标。他合并了 Meta 内部的两个人工智能部门以改变局面。外部研究预测,Meta 的 H100 储备在 2023 年将达到 15 万个,这与微软的储备持平,至少是其他公司的三倍。扎克伯格表示,如果算上英伟达 A100 和其他人工智能芯片,到 2024 年底,Meta 将拥有近 60 万个 GPU 储备。

(插图:DA/85619bd5-7a44-4222-bb8b-53a77402a7c0)

消息来源:The Verge
老王点评:这次不准备公司改名了?我觉得他真是一个追赶热点的好手。

2 搜索引擎在与 SEO 的战争中败北

低质量 SEO 网站与搜索引擎在搜索排名上展开了激烈的竞争,他们通过操纵 SEO 进入搜索前列,然后搜索引擎调整算法降低其排名。SEO 工程师会调整参数再次挫败搜索引擎的努力。研究人员分析了一年内谷歌、必应和 DuckDuckGo 上 7392 个商品评论术语的搜索结果,他们发现低质量的 SEO 网站占领了搜索结果前列,大多数情况下搜索引擎调整算法对抗 SEO 效果只能持续较短时间。

(插图:DA/da3987e6-9a49-4a00-88bd-81fd1b997870)

消息来源:404media
老王点评:到底是道高一尺,还是魔高一丈?

3 红帽工程师开发利用 AI 识别构建错误的工具

每次构建 RPM 包都会产生数千行输出,这些输出被分割到多个日志文件中,而相关的错误信息可能出现在任何地方,这就像大海捞针。红帽工程师开发人员目前正在开发一个名为 “Log Detective” 的工具,训练一个人工智能模型来理解 RPM 的构建日志,用简单的语言解释故障,并给出修复建议。你根本不需要打开日志,就可以更容易找出构建失败的原因。

(插图:DA/96d08c7a-58aa-4dcb-9fa0-f52f49f7ee86)

消息来源:Phoronix
老王点评:这样的工具要是真有用的话,希望以后的系统日志都可以这样说人话。