Bitwarden 与 Proton Pass：顶级开源密码管理器的比较

Summary: 你最钟爱哪一个开源密码管理器？

你最钟爱哪一个开源密码管理器？

# Bitwarden 与 Proton Pass：顶级开源密码管理器的比较

>
> 你最钟爱哪一个开源密码管理器？
>
>
>

Bitwarden 和 Proton Pass 是两个杰出的开源密码管理器。

Bitwarden 已经成为一个可靠的选择，运行稳定已经超过六年了，而 Proton Pass 则是较新的参与者。

你应该选哪一个呢？是**选择已被大众信任的密码管理器还是选择由以隐私为导向的 Proton 新开发的产品**?

我一直使用 Bitwarden 和带高级特性的 Proton Pass。主要使用的是 Bitwarden，但自 Proton Pass 推出后我也在试用它。

在这里，我会分享我对两者的使用体验，以及在选择密码管理器时需要了解的一些注意事项。

### 应用场景和应用程序的可用性

选用密码管理器时，应用程序的可用情况和你的使用场景起着重要角色。

你需要提些问题给自己：

* 我在哪些地方（如桌面、移动设备或网页浏览器）需要密码管理器？
* 它有提供哪些额外功能？
* 是否坚持使用一个服务满足多种功能需求？

我会在文章的后半部分详细阐述这些功能特性。但首先，你需要确定你想在哪里使用密码管理器，以及是否希望单独保持密码管理器服务。

#### Proton Pass

在编写本文时，Proton Pass 仅以 **浏览器扩展** 形式存在，同时提供给 **移动平台** 使用。

你可以为 **Mozilla Firefox、Google Chrome、Brave、Edge** 及其它基于 Chrome 的浏览器获取扩展。你也可以选择在你的 **安卓或 iOS** 设备上安装它。

✅ *如果你不需要桌面应用的密码管理器，同时希望继续使用 Proton 提供的全部服务，那么 Proton Pass 是一个适合的选择。*

#### Bitwarden

反之，Bitwarden 可以作为 **桌面应用**，支持在 **Windows、 macOS、Linux** 上运行。

此外，你可以为 **Google Chrome、Firefox、Vivaldi, Opera、Edge、Tor 和 DuckDuckGo for Mac** 获取相应的扩展。

对于移动平台来说，Bitwarden 支持 iPhone、Apple Watch 和安卓手机。你也可以从 F-Droid 安装到安卓设备上。

还不仅限于这些，你可以将 Bitwarden 作为一款 **网页应用**，或通过 **命令行接口** 来使用。

✅ *如果你需要一个能够在多个平台上无缝使用的密码管理器，那么 Bitwarden 就是你完美的选择。*

### 用户体验

#### Bitwarden

Bitwarden 的用户体验简洁且低调。

以下是浏览器插件的界面样式：

虽然用户界面随着年份的推移有所改进建，但始终忠于其核心理念，也就是 **注重简洁而不是华丽的 UI**。

它不会打扰你的操作，始终提供熟悉的用户体验。

你可以在预设的 “dark”、“light”、“solarized dark” 和 “nord” 主题间自由切换。

无论你正在使用桌面应用、移动应用还是浏览器扩展，它都能给你带来同样的便利。

#### Proton Pass

Proton Pass 在其布局方面 **颇具特色** ，每次你访问该扩展时，它都会给出一个详细的凭证概览。

有些用户可能更倾向于 **现代化的 UI 处理方式**，这完全看你的个人喜好。

我个人更倾向于 Bitwarden 的传统设计方式。

### 价格

你可以免费开始使用这两种服务。

Bitwarden 和 Proton Pass 在其免费计划中都不限制存储的登录凭证数量和可使用设备的数量。

如果你需要包括紧急访问、家庭共享、安全存储、二次验证、电子邮箱别名隐藏等特性，你需要升级为高级版。

[Bitwarden](https://bitwarden.com/pricing/) 的年费仅为 **10 美元**，而其家庭计划（*包含六个账户*）的年费为 **40 美元**。这个价格对大多数人来说是**极其实惠**的。

相比之下，[Proton Pass](https://account.proton.me/pass/signup) 的价格较高，其 Plus 计划的年费为 **47.88 欧元**。

不过，如果你使用了所有其他 Proton 的服务，并选择了 Proton 的无限制订阅，你就可以获得包括 **Proton Pass、Mail、VPN、Drive 和 Calendar** 在内的高级特性。

### 功能

这两个密码管理器功能都十分完善，因此每一种都能提供人们所需要的核心特性。

它们共同拥有的特性包括：

* 密码生成器
* 安全笔记
* 自动填充
* 卡片信息和登录凭证
* 便于随时获取凭证的手机应用

接下来，让我来突出一下根据我个人的使用经验，每一种服务各自独特的优点：

#### Bitwarden

Bitwarden 的一项关键功能是其 “<ruby> 发送 <rt>  Send </rt></ruby>” 功能，它允许你发送一个文件（最大 500 MB）或一段文本/便笺给任何人，这都是通过一个安全连接实现的，并且在整个过程中都实现了端到端的加密。这项功能可以在 **桌面应用、扩展插件和网页保险库** 中使用。

你可以通过添加一段只有接收者知道的密码短语来保护这个链接。还有更多的自定义选项，例如设定链接的过期时间，或在文件被下载后销毁链接。

我不认为这是一种安全发送文件的方法，更多的是适合发送私人文件（如电子邮件附件）和文本文件。

接下来，Bitwarden 提供了一个 **家庭计划**，允许你与 **其他五个账户** 共享一个订阅。Proton Pass 并没有此类服务。

我想着重强调的另一个功能是：**紧急访问**。

因为密码管理器储存了你所有的登录信息，它就是一个包含 **所有你的访问密钥** 的地方。你可以设置紧急访问功能，以方便你信任的朋友或者家庭成员在你不幸出现紧急状况后访问你的密码。

当然，在授权用户访问你的账户之前，你可以设定一个期限以确认或拒绝这个访问请求。如果你没有采取任何行动，那么这个访问权限将会授予你的信任用户。

>
> ? 紧急联系人选项只能在 [网络保险库](https://vault.bitwarden.com/) 中访问。
>
>
>

**值得注意的是：** 这两种服务的密码生成器都包含历史记录，但 Bitwarden **保留历史时间更长**，而 Proton Pass 只保留一天的历史记录。

其他功能差异包括：

* 导出为 .CSV 文件
* 调整自动填充行为
* 访问网络保险库
* 桌面应用
* 记录身份信息

对于所有列出的功能，在我使用 Bitwarden 的过程中，我都没有遇到任何重大的问题。

**我唯一注意到的问题**：有时在我的安卓手机上，自动填充功能并没有在键盘应用中作为建议显示。当然，这取决于各个智能手机制造商提供的定制安卓体验，因此不一定是 Bitwarden 特有的问题。

#### Proton Pass

如果我们从“功能数量”上进行比较，Bitwarden 会占据优势。

但是，作为一个以隐私为重点的工具，Proton Pass 实现了密码管理器所有你需要的重要功能，甚至超越了这些。

得益于对 [SimpleLogin](https://simplelogin.io/) 的专业研究，Proton Pass 支持生成电子邮件别名。

如果你不太了解：SimpleLogin 是最受欢迎的 [工具之一，用于保护你的电子邮件地址](https://itsfoss.com/protect-email-address/)。

所以，当 Proton Pass 集成了这个功能后，用户可以 **便捷地创建电子邮件别名**，并同时保存登录信息。你在 Proton Pass 上注册的电子邮件将会是实际的电子邮件地址。

我希望他们提供一个设定新的目标电子邮件地址的选项，这将使 Proton Pass 的额外费用更具价值。

此外，如果你是一位使用了部分或所有 Proton 服务的用户，使用 Proton Pass 将会是一种良好的用户体验。因为你无需为其他平台切换或注册。

使用 Proton Pass 还可以获得基本的 **导入/导出，控制某些安全措施，修改密码管理器行为** 的功能。

因此，对于 Proton 用户而言，Proton Pass 可以是一种一站式的解决方案。

是的，我暂时没有注意到任何关于其移动应用的问题，Proton Pass 到目前为止很好。

### 你应该选择哪个？

考虑到它们的共性，这主要取决于你个人的使用体验、预算（如果选择付费），以及功能集。

对于我个人的使用，我暂时没有看到 Proton Pass 替换 Bitwarden 的需要。

然而，如果我决定购买 Proton 的无限制订阅，或是更加投入到 Proton 的各项服务中去，我可能会放弃 Bitwarden。

? 你怎么认为呢？你认为 Proton Pass 值得额外付费吗，或者对于 Proton 的捆绑订阅你有什么看法？Bitwarden 是你的最爱吗？欢迎在下方评论分享你的想法。

*（题图：MJ/a2f5d428-b853-4312-837c-9d66371dd5dc）*

---

via: <https://itsfoss.com/bitwarden-vs-proton-pass/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


在 Ubuntu 等非 Nix 操作系统上安装和使用 Nix 包管理器

Summary: Nix 软件包管理器可以安装在任何 Linux 发行版上。具体方法如下。

Nix 软件包管理器可以安装在任何 Linux 发行版上。具体方法如下。

# 在 Ubuntu 等非 Nix 操作系统上安装和使用 Nix 包管理器

>
> Nix 软件包管理器可以安装在任何 Linux 发行版上。具体方法如下。
>
>
>

[人们喜欢使用不可变的 NixOS](/article-15606-1.html) 的原因之一是它的 Nix 包管理器。

它有超过 80,000 个软件包，这可能与 Debian 软件包的数量相差比较大，但仍然令人印象深刻。

好处是你不必仅仅为了包管理器而 [安装 NixOS](/article-15624-1.html)。与 [Homebrew](/article-14065-1.html) 和 Rust 的 [Cargo 包管理器](/article-13938-1.html) 一样，你可以在当前发行版中使用 Nix 包管理器。

为什么要这么做？因为有时，你可能会发现仅以 Nix 打包格式提供的新应用。这种情况很少见，但有可能。

在本教程中，我将引导你完成以下内容：

* 安装 Nix 包管理器
* 搜索并安装包
* 尝试/测试软件包而不安装它们
* 更新包
* 删除包

### 在其他 Linux 发行版上安装 Nix 包管理器

Nix 包管理器有两种安装方式：全局安装和本地安装。

>
> ? 全局安装意味着系统上的每个可用用户都可以访问 nix 包管理器，而本地安装仅适用于当前用户。[Nix 官方文档](https://nixos.org/learn) 建议你使用全局安装。
>
>
>

#### 全局安装

如果你想全局安装 Nix 包管理器，那么，你需要执行以下命令：

```
sh <(curl -L https://nixos.org/nix/install) --daemon

```

执行上述命令后，需要输入 `y` 键并按回车键：

完成后，关闭当前终端，因为它不会在当前终端会话上运行。

#### 本地安装

如果你更喜欢本地安装并且不想每次都使用 `sudo`，则执行以下命令：

```
sh <(curl -L https://nixos.org/nix/install) --no-daemon

```

输入 `y` 并在要求确认时按回车键。

完成后，关闭当前终端会话并启动一个新终端会话以使用 Nix 包管理器。

### 搜索并安装包

安装 Nix 包管理器后，下一步是搜索包。

首先，[访问 Nix 搜索的官方页面](https://search.nixos.org/packages) 并输入你要安装的软件包的名称。

从给定的描述中，你可以找到所需的软件包，然后选择 `nix-env` 进行永久安装。

在这里，你可以添加一些额外的关键字以获得更好的搜索结果。例如，在这里，我搜索 “Firefox browser”：

我上面提到的最后一步（“复制命令”）什么也不做，只是为你提供了一个用于安装的命令。

现在，你所要做的就是在终端中执行该命令。

就我而言，它给了我以下命令来安装 Firefox：

```
nix-env -iA nixpkgs.firefox

```

完成后，你可以使用以下命令列出已安装的软件包：

```
nix-env -q

```

### 使用包而不安装它们

到目前为止，这是 Nix 包管理器的最佳功能，因为你可以使用/测试包甚至不用安装它！

为此，你可以使用 Nix Shell，它允许你将交互式 Shell 与指定的包一起使用，关闭后，你将无法再访问该包。

很酷，对吧？

要使用 nix-shell 访问你喜欢的软件包，请使用以下命令语法：

```
nix-shell -p <package_name>

```

例如，我想使用一次 `neofetch`，所以我使用了以下命令：

```
nix-shell -p neofetch

```

要退出 Shell，你所要做的就是执行 `exit` 命令：

```
exit

```

### 使用 Nix 包管理器更新包

使用 Nix 包管理器更新包非常简单。

要更新软件包，首先，你需要使用以下命令更新频道：

```
nix-channel --update

```

接下来，你可以通过试运行更新命令来列出过时的软件包：

```
nix-env --upgrade --dry-run

```

就我而言，Firefox 浏览器已经过时，需要更新！

要更新单个包，请使用以下命令：

```
nix-env -u <Package_name>

```

如果你想一次更新所有软件包，请使用以下命令：

```
nix-env -u

```

### 使用 Nix 包管理器删除包

要删除软件包，你只需按以下方式执行 `nix-env` 命令即可：

```
nix-env --uninstall [package_name]

```

例如，如果我想删除 Firefox 浏览器，那么，我将使用以下命令：

```
nix-env --uninstall firefox

```

### 通过 NixOS 释放其全部潜力

如果你喜欢 Nix 包管理器背后的想法，请相信我，你一定会喜欢 [NixOS](https://nixos.org/)。

仅使用一个配置文件来复制整个系统就足以说服我切换到 NixOS，但还有更多原因：

我喜欢 NixOS。以至于我写了整个系列，这样你就不必阅读文档（基础知识）：

>
> **[NixOS 系列](/article-15606-1.html)**
>
>
>

我希望你能像我一样喜欢使用它。

*（题图：MJ/da586165-eadb-4ed7-9a0b-9c92903344d5）*

---

via: <https://itsfoss.com/ubuntu-install-nix-package-manager/>

作者：[Sagar Sharma](https://itsfoss.com/author/sagar/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #1162 HashiCorp CEO 称硅谷将不会再有开源公司

Summary:
? HashiCorp CEO 称硅谷将不会再有开源公司
? 攻击者在 Binance 区块链上托管恶意软件
? KeePass 被攻击者用国际化域名编码钓鱼
»
»

# 硬核观察 #1162 HashiCorp CEO 称硅谷将不会再有开源公司

### HashiCorp CEO 称硅谷将不会再有开源公司

之前，我们报道过，[HashiCorp](/article-16137-1.html) 将其 Terraform 等产品从开源的 MPL 许可证改为 MariaDB 的 BSL 许可证，新的许可仅限于 “非生产使用”。尽管开源的拥护者抨击了 HashiCorp 的许可证转换，并成立了 OpenTF 基金会，但 HashiCorp CEO <ruby> 戴夫·麦克简内特 <rt>  Dave McJannet </rt></ruby> 却用 “太好了” 来形容其最大客户的反应，他声称很多反馈都是“我们希望你们早点这么做”。他还补充说，他们宣布之前已经与主要云计算厂商进行了讨论，“在过去的三四年里，每一个达到一定规模的厂商都得出了同样的结论。”他认为，历史上的开源基金会模式已经被打破，因为它们被传统供应商所主导。“它们是大公司保护自己不受创新影响的一种方式，”一旦某个项目流行起来，“克隆厂商就会开始抢占这些东西”。他批评了 Linux 基金会接纳 OpenTF 基金会的做法，“这对开源创新来说是个悲剧。……那样硅谷就不会再有开源公司了。”

>
> **[消息来源：The Stack](https://www.thestack.technology/hashicorp-ceo-predicts-oss-free-silicon-valley-unless-the-open-source-model-evolves/)**
>
>
>

>
> 老王点评：我想说，这就是得了开源的利，而砸开源的锅。一开始开源得到了社区贡献和支持，壮大后就嫌弃黄脸婆了。但是，公平的说，为什么会有大量的项目会在壮大后抛弃开源？是开源模式无法持续，还是新的形势下，开源模式也需要新的进化呢？
>
>
>

### 攻击者在 Binance 区块链上托管恶意软件

通常，被攻击者入侵的网站会向访问者分发恶意软件，而这些恶意软件在被发现后会被清除。但安全专家发现，攻击者开始通过将恶意文件托管在去中心化的、匿名的区块链上，使这些恶意软件不被安全专家或执法部门清除。攻击者在 Binance 智能链（BSC）上创建一个新的智能合约，包括一个由攻击者控制的区块链地址，以及一组定义合约功能和结构的指令。当被攻击的网站查询该合约时，它会返回一个被混淆的恶意有效载荷。由于区块链的可公开访问性和不可更改性，这些恶意代码无法被清除，攻击者从而获得一种免费的、无跟踪、稳健的方式来下载恶意有效载荷，而且不会留下痕迹。

>
> **[消息来源：Krebs on Security](https://krebsonsecurity.com/2023/10/the-fake-browser-update-scam-gets-a-makeover/)**
>
>
>

>
> 老王点评：我是真没想到区块链被用在这个用途上，还好 BSC 不够去中心化，尚有一定手段可以缓解，但是这反而有点让人哭笑不得。
>
>
>

### KeePass 被攻击者用国际化域名编码钓鱼

安全公司警告，攻击者正通过谷歌广告引诱用户访问开源密码管理器 KeePass 的钓鱼网站。攻击者使用国际化域名编码（Punycode）注册了 KeePass 的钓鱼网站 ķeepass[.]info，它和 KeePass 官方域名在视觉上的差异非常小，无疑会让很多人上当。

>
> **[消息来源：Malware Bytes](https://www.malwarebytes.com/blog/threat-intelligence/2023/10/clever-malvertising-attack-uses-punycode-to-look-like-legitimate-website)**
>
>
>

>
> 老王点评：国际化域名用的很少，但带来的麻烦却很多。不过，这种钓鱼手段应该可以被浏览器很好的防御。
>
>
>


HashiCorp CEO 预测，除非开源模型发展，否则硅谷将没有开源公司

Summary: 他还称，Linux 基金会接受 OpenTofu 的决策是一个 “悲剧”。

不论未来如何，我都将为我的信仰，开源，坚持到底！

开源的前提是衣食无忧，安居乐业。。。

他还称，Linux 基金会接受 OpenTofu 的决策是一个 “悲剧”。

# HashiCorp CEO 预测，除非开源模型发展，否则硅谷将没有开源公司

<img src="content_image/album_202310_23_100619d754xnee4kksw7sr.jpg" alt="" title="">

>
> 他还称，Linux 基金会接受 OpenTofu 的决策是一个 “悲剧”。
>
>
>

（本文节略自 The Stack 的[文章](https://www.thestack.technology/hashicorp-ceo-predicts-oss-free-silicon-valley-unless-the-open-source-model-evolves/)）

HashiCorp 的 CEO 在该公司本月的用户会议上为其改变许可证的做法辩护。他预测，除非社区重新思考如何保护创新，否则硅谷将 “不再有开源公司”。

作为 IaaC 的先驱者，他在 HashiConf 用户会议上介绍了一系列产品了更新和新特性，这是在该公司将其所有产品的版权协议从 <ruby> Mozilla 公共许可证 <rt>  Mozilla Public License </rt></ruby>（MPL）更改为 <ruby> 商业源代码许可证 <rt>  Business Source License </rt></ruby>（BSL）后不到两个月时间所做的举措。

HashiCorp 当时表明，“除了在与 HashiCorp 商业产品竞争的产品中托管或嵌入软件外，所有生产用途都不受限制，无论是自我管理的还是托管的。”

然而，此举引起了开源社区的强烈反响。在 Linux 基金会的支持下，一个名为 OpenTofu 的 Terraform 分支很快地被发布出来。

HashiCorp 的 CEO Dave McJannet 本周表示，改变许可证的决策是必要的，因为 HashiCorp 的技术对现代云服务起到了关键的作用，随着全球最大的公司将其业务从本地技术转移到云服务，这种关键性只会越来越强。

尽管开源社区猛烈批评了 HashiCorp 改变许可证的决定，但 McJannet 说其最大的客户对此的反应却是，“太好了，因为你是我们的关键伙伴，我们需要你发展成一个大公司。”实际上，他表示，在很多反馈中客户表示，“我们希望你早点这么做”，并补充说，这个决定在公告之前就已经与主要的云供应商进行了讨论。

McJannet 说，“过去三四年间，每个达到一定规模的供应商都已经得出了同样的结论。……这只是意识到，鉴于市场现在的激励机制，开源模型必须演进。”

他声称，过去成立开源基金会的模式现在已经不合时宜了，这些基金会都被传统供应商所主导。以 Hadoop 为例，他说，“基金会就是大公司免遭创新影响的一种机制，如果 Hadoop 流行起来，IBM 这样的公司可以把它拿来，因为他们是基金会的一部分，他们可以以更低的价钱卖出去。”

将开源产品放到 GitHub 上 “的确非常好”，但是，一旦某个项目变得流行，“克隆供应商就开始竞相复制”。

他声称，“我们发出公告后不久，我就开始接到来自硅谷每一个开源创业公司的电话，他们都告诉我，‘我认为这才是正确的模型’。”

“确实是悲剧……”，他感叹道，Linux 基金会接受 OpenTofu 的行动，为我们揭示了一个严重的问题。“如果基金会只是简单地接收并给它找个归宿，那对开源的未来将带来怎样的影响呢？这对开源创新而言，无疑是一场悲剧。我可以坦诚告诉你，如果这样的事情真的发生，硅谷将再也看不到开源公司的身影。”

他更具体地指出，许可证的改变是他们为赢取企业信任而设计的策略的一部分。

“让其他供应商误解我们的产品是一个巨大的风险，对吗？这对我们的长期发展是不利的，对我们的客户而言也同样危险。”

他进一步解释说，赢得这些大型组织的信任是促使 HashiCorp 当时选择上市的一个驱动力。“我们并不全然需要钱，我们之所以这么做，是想要向公众表明，我们有充足的资金，可以成为他们长期信任的合作伙伴。”

他补充说，他们提议继续和受许可证更改影响的四个主要的公司合作，“只需要你们承担一部分研发成本。然而他们却拒绝，声称要另起炉灶，这对我们来说也没问题。”

*（题图：MJ/5cdb5ba0-a7fa-4a29-b3dd-ef0d07bad575）*

---

via: <https://www.thestack.technology/hashicorp-ceo-predicts-oss-free-silicon-valley-unless-the-open-source-model-evolves/>

作者：[JOE FAY](https://www.thestack.technology/author/joe/) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](/article-16307-1.html) 荣誉推出


如何使用 VLC 录制屏幕

Summary: 用途广泛的 VLC 可以做很多事情。屏幕录制就是其中之一。

既然不能录音（包括内录），连Mac自带的QuickTime都不如，为什么不介绍用ffmpeg录制屏幕？

来自广东广州的 Chrome Mobile 118.0|Android 10 用户

vlc与gnome并不完美，多次点击会出现2个界面，与gnome音频管理中心也不好

来自江苏南京的 Chrome Mobile 99.0|Android 12 用户

用途广泛的 VLC 可以做很多事情。屏幕录制就是其中之一。

# 如何使用 VLC 录制屏幕

>
> 用途广泛的 VLC 可以做很多事情。屏幕录制就是其中之一。
>
>
>

VLC 不仅仅是一个视频播放器。它还是一款多功能视频工具，具有普通用户永远无法了解的众多功能。

你可以 [使用 VLC 下载 YouTube 视频](https://itsfoss.com/download-youtube-videos-vlc/)，甚至可以用它修剪视频。

VLC 的另一个不寻常用途是屏幕录制。

**我仍然建议使用合适的屏幕录像机来完成此任务，欢迎你探索这个 VLC 功能以获取乐趣。**

### 使用 VLC 进行屏幕录制

>
> ? 虽然我可以使用 VLC 录制桌面屏幕，但无法录制任何声音和鼠标光标。在我看来，它并不能替代合适的屏幕录制工具。
>
>
>

要使用 [VLC](https://www.videolan.org/vlc/) 录制屏幕，请打开它并单击 “<ruby> 媒体 <rt>  Media </rt></ruby>”，然后选择 “<ruby> 转换/保存… <rt>  Convert/Save... </rt></ruby>”。（或者直接点击 “<ruby> 媒体 <rt>  Media </rt></ruby>”→“<ruby> 打开采集设备… <rt>  Open Capture Device... </rt></ruby>”）

转到 “<ruby> 捕获设备 <rt>  Capture Device </rt></ruby>” 选项卡，然后从 “<ruby> 捕获模式 <rt>  Capture Mode </rt></ruby>” 下拉列表中选择桌面。

现在，这里为你的录制提供了一些帧率。10、24 fps 等都不错，如果你需要更高的质量，请选择更高的。请注意，这会增加文件大小和系统要求。然后，按 “<ruby> 转换/保存 <rt>  Convert/Save </rt></ruby>” 按钮。

在下一页上，从下拉列表中选择一个配置文件，然后单击相邻的按钮来编辑该配置文件。

设置你需要的视频格式，然后按 “<ruby> 保存 <rt>  Save </rt></ruby>”。

现在，你需要给出目标文件名。单击 “<ruby> 浏览 <rt>  Browse </rt></ruby>”按钮，选择位置，然后输入输出文件的名称。单击 “<ruby> 保存 <rt>  Save </rt></ruby>”。

按 “<ruby> 开始 <rt>  Start </rt></ruby>” 按钮，开始录制屏幕。

这将开始录制。完成录制后，使用面板按钮停止。

或者单击 VLC 上的停止按钮。

就是这样。你可以在保存屏幕录像的位置查看屏幕录像。

### 总结

如你所见，虽然可以使用 VLC 录制桌面屏幕，但它并不能替代 [专用屏幕录制工具](https://itsfoss.com/best-linux-screen-recorders/)。缺乏录音是一个重大的遗憾。

仅当你没有任何其他选项时才使用 VLC 进行屏幕录制。你怎么认为？

*（题图：MJ/f48c22e9-a2d1-4567-a265-6c3aaf147aff）*

---

via: <https://itsfoss.com/vlc-record-screen/>

作者：[Sreenath](https://itsfoss.com/author/sreenath/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Summary:
? 美国 NASA 向 1977 年发射的两个旅行者探测器发送补丁
? 大多数人在车内还是只听收音机
? Mozilla 首次发布年度数字隐私“惊悚指数”：今年“非常可怕”
»
»

第1条：会不会用到COBOL、Fortran、Pascal、Lisp等古董语言？

第2条：可以玩玩WebSDR

第3条：@斯诺登 快出来说点什么吧！

我开车时什么都不能听，听必撞车！

用的很古老的汇编，那种打印出来得几尺厚的代码。

AM/FM广播操作方便啊，车机设置好，发动汽车就能听。完全不用纠结选什么节目，跟着广播听就是了。

至于流媒体播客，你有喜欢听的播放列表还差不多，不然选啥内容够你纠结的。而且，有些安卓车机，操作车载流媒体APP也很不方便，得在它们的界面折腾一番。

要是爱听流媒体，还是CarPlay省事。

来自39.144.67.19的 Chrome Mobile 117.0|Android 10 用户

开车的时候，要不是听旁边的人CHUI 牛，就是听司机 CHUI 牛

NASA可以啊，要是在大印度，程序员35岁都裁了，这会更新补丁有谁还看得懂？

music radio ,我要我的音乐 ：-））

# 硬核观察 #1163 美国 NASA 向 1977 年发射的两个旅行者探测器发送补丁

### 美国 NASA 向 1977 年发射的两个旅行者探测器发送补丁

自 1977 年发射以来，美国国家航空航天局（NASA）的旅行者 1 号和 2 号探测器已经飞行了超过 120 亿英里，并且仍在从太阳系外发回数据。然而由于一些问题，NASA 需要跨越整个太阳系向它们发送补丁。其中一项工作是解决飞船上一些推进器的窄管内似乎积聚了燃料残渣的问题。推进器用于使每个航天器的天线对准地球。这次任务已经开始让两个航天器在每个方向上稍微旋转远一点，差不多 1 度。预计这个预防措施，可也让飞船推进器推进剂入口管至少五年内不会完全堵塞。另外一个补丁是为了解决一个姿态衔接和控制系统的错误。

>
> **[消息来源：NASA](https://www.jpl.nasa.gov/news/nasas-voyager-team-focuses-on-software-patch-thrusters)**
>
>
>

>
> 老王点评：就说为了维护一个几十年前的计算机设备得有多困难，而且可能没有试错的机会。
>
>
>

### 大多数人在车内还是只听收音机

现在是 2023 年，你可能会认为 AM/FM 收音机即将被淘汰，但新的数据显示，对很多人来说并非如此。市场调研发现，没有车载娱乐系统的人有 67% 的时间在收听 AM/FM 广播，其余时间在收听流媒体服务或播客等。但是，在有车载娱乐系统的人中，46% 的人仍在收听 AM/FM 广播。

>
> **[消息来源：9to5mac](https://9to5mac.com/2023/10/20/carplay-am-fm-radio-data/)**
>
>
>

>
> 老王点评：这是国外的调查数据，国内如何，大家在开车时听什么？
>
>
>

### Mozilla 首次发布年度数字隐私“惊悚指数”：今年“非常可怕”

Mozilla 首次发布 “<ruby> 年度消费者惊悚指数 <rt>  Annual Consumer Creep-o-Meter </rt></ruby>，该指数试图为数字隐私设定基准并识别趋势。2023 年，我们的数字隐私状况是：非常可怕。 2017 年以来，2023 年，产品和公司正在收集比以往更多的个人数据，用于有针对性的广告和人工智能训练。越来越多的产品无法离线使用，在很多情况下，这已不再是一种选择。

>
> **[消息来源：Mozilla](https://foundation.mozilla.org/en/privacynotincluded/articles/annual-creep-o-meter/)**
>
>
>

>
> 老王点评：迎接新的时代吧，无隐私时代 —— 我已经对保持数字隐私放弃了期望。
>
>
>


从零开始，运用 Ruby 语言创建一个 DNS 查询

竟然还能看到Ruby的文章

# 从零开始，运用 Ruby 语言创建一个 DNS 查询

<img src="content_image/album_202310_24_155014kli69j43i021iwwl.jpg" alt="" title="">

大家好！前段时间我写了一篇关于“[如何用 Go 语言建立一个简易的 DNS 解析器](https://jvns.ca/blog/2022/02/01/a-dns-resolver-in-80-lines-of-go/)”的帖子。

那篇帖子里我没写有关“如何生成以及解析 DNS 查询请求”的内容，因为我觉得这很无聊，不过一些伙计指出他们不知道如何解析和生成 DNS 查询请求，并且对此很感兴趣。

我开始好奇了——解析 DNS *能* 花多大功夫？事实证明，编写一段 120 行精巧的 Ruby 语言代码组成的程序就可以做到，这并不是很困难。

所以，在这里有一个如何生成 DNS 查询请求，以及如何解析 DNS 响应报文的速成教学！我们会用 Ruby 语言完成这项任务，主要是因为不久以后我将在一场 Ruby 语言大会上发表观点，而这篇博客帖的部分内容是为了那场演讲做准备的。?

（我尽量让不懂 Ruby 的人也能读懂，我只使用了非常基础的 Ruby 语言代码。）

最后，我们就能制作一个非常简易的 Ruby 版本的 `dig` 工具，能够查找域名，就像这样：

```
$ ruby dig.rb example.com
example.com    20314    A    93.184.216.34

```

整个程序大概 120 行左右，所以 *并不* 算多。（如果你想略过讲解，单纯想去读代码的话，最终程序在这里：[dig.rb](https://gist.github.com/jvns/1e5838a53520e45969687e2f90199770)。）

我们不会去实现之前帖中所说的“一个 DNS 解析器是如何运作的？”，因为我们已经做过了。

那么我们开始吧！

如果你想从头开始弄明白 DNS 查询是如何格式化的，我将尝试解释如何自己弄明白其中的一些东西。大多数情况下的答案是“用 Wireshark 去解包”和“阅读 RFC 1035，即 DNS 的规范”。

生成 DNS 查询请求
-----------

### 步骤一：打开一个 UDP 套接字

我们需要实际发送我们的 DNS 查询，因此我们就需要打开一个 UDP 套接字。我们会将我们的 DNS 查询发送至 `8.8.8.8`，即谷歌的服务器。

下面是用于建立与 `8.8.8.8` 的 UDP 连接，端口为 53（DNS 端口）的代码。

```
require 'socket'
sock = UDPSocket.new

sock.bind('0.0.0.0', 12345)
sock.connect('8.8.8.8', 53)

```

#### 关于 UDP 的说明

关于 UDP，我不想说太多，但是我要说的是，计算机网络的基础单位是“<ruby> 数据包 <rt>  packet </rt></ruby>”（即一串字节），而在这个程序中，我们要做的是计算机网络中最简单的事情：发送 1 个数据包，并接收 1 个数据包作为响应。

所以 UDP 是一个传递数据包的最简单的方法。

它是发送 DNS 查询最常用的方法，不过你还可以用 TCP 或者 DNS-over-HTTPS。

### 步骤二：从 Wireshark 复制一个 DNS 查询

下一步：假设我们都不知道 DNS 是如何运作的，但我们还是想尽快发送一个能运行的 DNS 查询。获取 DNS 查询并确保 UDP 连接正常工作的最简单方法就是复制一个已经正常工作的 DNS 查询！

所以这就是我们接下来要做的，使用 Wireshark （一个绝赞的数据包分析工具）。

我的操作大致如下：

1. 打开 Wireshark，点击 “<ruby> 捕获 <rt>  capture </rt></ruby>” 按钮。
2. 在搜索栏输入 `udp.port == 53` 作为筛选条件，然后按下回车。
3. 在我的终端运行 `ping example.com`（用来生成一个 DNS 查询）。
4. 点击 DNS 查询（显示 “Standard query A [example.com](http://example.com)”）。 （“A”：查询类型；“[example.com](http://example.com)”：域名；“Standard query”：查询类型描述）
5. 右键点击位于左下角面板上的 “<ruby> 域名系统（查询） <rt>  Domain Name System (query) </rt></ruby>”。
6. 点击 “<ruby> 复制 <rt>  Copy </rt></ruby>” ——> “<ruby> 作为十六进制流 <rt>  as a hex stream </rt></ruby>”。
7. 现在 `b96201000001000000000000076578616d706c6503636f6d0000010001` 就放到了我的剪贴板上，之后会用在我的 Ruby 程序里。好欸！

### 步骤三：解析 16 进制数据流并发送 DNS 查询

现在我们能够发送我们的 DNS 查询到 `8.8.8.8` 了！就像这样，我们只需要再加 5 行代码：

```
hex_string = "b96201000001000000000000076578616d706c6503636f6d0000010001"
bytes = [hex_string].pack('H*')
sock.send(bytes, 0)

# get the reply
reply, _ = sock.recvfrom(1024)
puts reply.unpack('H*')

```

`[hex_string].pack('H*')` 意思就是将我们的 16 位字符串转译成一个字节串。此时我们不知道这组数据到底是什么意思，但是很快我们就会知道了。

我们还可以借此机会运用 `tcpdump` ，确认程序是否正常进行以及发送有效数据。我是这么做的：

1. 在一个终端选项卡下执行 `sudo tcpdump -ni any port 53 and host 8.8.8.8` 命令
2. 在另一个不同的终端指标卡下，运行 [这个程序](https://gist.github.com/jvns/aa202b1edd97ae261715c806b2ba7d39)（`ruby dns-1.rb`）

以下是输出结果：

```
$ sudo tcpdump -ni any port 53 and host 8.8.8.8
08:50:28.287440 IP 192.168.1.174.12345 > 8.8.8.8.53: 47458+ A? example.com. (29)
08:50:28.312043 IP 8.8.8.8.53 > 192.168.1.174.12345: 47458 1/0/0 A 93.184.216.34 (45)

```

非常棒 —— 我们可以看到 DNS 请求（”这个 `example.com` 的 IP 地址在哪里？“）以及响应（“在93.184.216.34”）。所以一切运行正常。现在只需要（你懂的）—— 搞清我们是如何生成并解析这组数据的。

### 步骤四：学一点点 DNS 查询的格式

现在我们有一个关于 `example.com` 的 DNS 查询，让我们了解它的含义。

下方是我们的查询（16 位进制格式）：

```
b96201000001000000000000076578616d706c6503636f6d0000010001

```

如果你在 Wireshark 上搜索，你就能看见这个查询它由两部分组成：

* **请求头**：`b96201000001000000000000`
* **语句本身**：`076578616d706c6503636f6d0000010001`

### 步骤五：制作请求头

我们这一步的目标就是制作字节串 `b96201000001000000000000`（借助一个 Ruby 函数，而不是把它硬编码出来）。

（LCTT 译注：<ruby> 硬编码 <rt>  hardcode </rt></ruby> 指在软件实现上，将输出或输入的相关参数（例如：路径、输出的形式或格式）直接以**常量**的方式撰写在源代码中，而非在运行期间由外界指定的设置、资源、数据或格式做出适当回应。）

那么：请求头是 12 个字节。那些个 12 字节到底意味着什么呢？如果你在 Wireshark 里看看（亦或者阅读 [RFC-1035](https://datatracker.ietf.org/doc/html/rfc1035#section-4.1.1)），你就能理解：它是由 6 个 2 字节大小的数字串联在一起组成的。

这六个数字分别对应查询 ID、标志，以及数据包内的问题计数、回答资源记录数、权威名称服务器记录数、附加资源记录数。

我们还不需要在意这些都是些什么东西 —— 我们只需要把这六个数字输进去就行。

但所幸我们知道该输哪六位数，因为我们就是为了直观地生成字符串 `b96201000001000000000000`。

所以这里有一个制作请求头的函数（注意：这里没有 `return`，因为在 Ruby 语言里，如果处在函数最后一行是不需要写 `return` 语句的）：

```
def make_question_header(query_id)
  # id, flags, num questions, num answers, num auth, num additional
  [query_id, 0x0100, 0x0001, 0x0000, 0x0000, 0x0000].pack('nnnnnn')
end

```

上面内容非常的短，主要因为除了查询 ID ，其余所有内容都由我们硬编码写了出来。

#### 什么是 `nnnnnn`?

可能能想知道 `.pack('nnnnnn')` 中的 `nnnnnn` 是个什么意思。那是一个向 `.pack()` 函数解释如何将那个 6 个数字组成的数据转换成一个字节串的一个格式字符串。

`.pack` 的文档在 [这里](https://ruby-doc.org/core-3.0.0/Array.html#method-i-pack)，其中描述了 `n` 的含义其实是“将其表示为” 16 位无符号、网络（大端序）字节序’”。

（LCTT 译注：<ruby> 大端序 <rt>  Big-endian </rt></ruby>：指将高位字节存储在低地址,低位字节存储在高地址的方式。）

16 个位等同于 2 字节，同时我们需要用网络字节序，因为这属于计算机网络范畴。我不会再去解释什么是字节序了（尽管我确实有 [一幅自制漫画尝试去描述它](https://wizardzines.com/comics/little-endian/)）。

测试请求头代码
-------

让我们快速检测一下我们的 `make_question_header` 函数运行情况。

```
puts make_question_header(0xb962) == ["b96201000001000000000000"].pack("H*")

```

这里运行后输出 `true` 的话，我们就成功了。

好了我们接着继续。

### 步骤六：为域名进行编码

下一步我们需要生成 **问题本身**（“`example.com` 的 IP 是什么？”）。这里有三个部分：

* **域名**（比如说 `example.com`）
* **查询类型**（比如说 `A` 代表 “IPv4 **A**ddress”）
* **查询类**（总是一样的，`1` 代表 **IN**ternet）

最麻烦的就是域名，让我们写个函数对付这个。

`example.com` 以 16 进制被编码进一个 DNS 查询中，如 `076578616d706c6503636f6d00`。这有什么含义吗？

如果我们把这些字节以 ASCII 值翻译出来，结果会是这样：

```
076578616d706c6503636f6d00
 7 e x a m p l e 3 c o m 0

```

因此，每个段（如 `example`）的前面都会显示它的长度（`7`）。

下面是有关将 `example.com` 翻译成 `7 e x a m p l e 3 c o m 0` 的 Ruby 代码：

```
def encode_domain_name(domain)
  domain
    .split(".")
    .map { |x| x.length.chr + x }
    .join + "\0"
end

```

除此之外，，要完成问题部分的生成，我们只需要在域名结尾追加上（查询）的类型和类。

### 步骤七：编写 make\_dns\_query

下面是制作一个 DNS 查询的最终函数：

```
def make_dns_query(domain, type)
  query_id = rand(65535)
  header = make_question_header(query_id)
  question =  encode_domain_name(domain) + [type, 1].pack('nn')
  header + question
end

```

这是目前我们写的所有代码 [dns-2.rb](https://gist.github.com/jvns/3587ea0b4a2a6c20dcfd8bf653fc11d9) —— 目前仅 29 行。

接下来是解析的阶段
---------

现在我尝试去解析一个 DNS 查询，我们到了硬核的部分：解析。同样的，我们会将其分成不同部分：

* 解析一个 DNS 的请求头
* 解析一个 DNS 的名称
* 解析一个 DNS 的记录

这几个部分中最难的（可能跟你想的不一样）就是：“解析一个 DNS 的名称”。

### 步骤八：解析 DNS 的请求头

让我们先从最简单的部分开始：DNS 的请求头。我们之前已经讲过关于它那六个数字是如何串联在一起的了。

那么我们现在要做的就是：

* 读其首部 12 个字节
* 将其转换成一个由 6 个数字组成的数组
* 为方便起见，将这些数字放入一个类中

以下是具体进行工作的 Ruby 代码：

```
class DNSHeader
  attr_reader :id, :flags, :num_questions, :num_answers, :num_auth, :num_additional
  def initialize(buf)
    hdr = buf.read(12)
    @id, @flags, @num_questions, @num_answers, @num_auth, @num_additional = hdr.unpack('nnnnnn')
  end
end

```

注： `attr_reader` 是 Ruby 的一种说法，意思是“使这些实例变量可以作为方法使用”。所以我们可以调用 `header.flags` 来查看`@flags`变量。

我们也可以借助 `DNSheader(buf)` 调用这个，也不差。

让我们往最难的那一步挪挪：解析一个域名。

### 步骤九：解析一个域名

首先，让我们写其中的一部分：

```
def read_domain_name_wrong(buf)
  domain = []
  loop do
    len = buf.read(1).unpack('C')[0]
    break if len == 0
    domain << buf.read(len)
  end
  domain.join('.')
end

```

这里会反复读取一个字节的数据，然后将该长度读入字符串，直到读取的长度为 0。

这里运行正常的话，我们在我们的 DNS 响应头第一次看见了域名（`example.com`）。

关于域名方面的麻烦：压缩！
-------------

但当 `example.com` 第二次出现的时候，我们遇到了麻烦 —— 在 Wireshark 中，它报告上显示输出的域的值为含糊不清的 2 个字节的 `c00c`。

这种情况就是所谓的 **DNS 域名压缩**，如果我们想解析任何 DNS 响应我们就要先把这个实现完。

幸运的是，这没**那么**难。这里 `c00c` 的含义就是：

* 前两个比特（`0b11.....`）意思是“前面有 DNS 域名压缩！”
* 而余下的 14 比特是一个整数。这种情况下这个整数是 `12`（`0x0c`），意思是“返回至数据包中的第 12 个字节处，使用在那里找的域名”

如果你想阅读更多有关 DNS 域名压缩之类的内容。我找到了相关更容易让你理解这方面内容的文章： [关于 DNS RFC 的释义](https://datatracker.ietf.org/doc/html/rfc1035#section-4.1.4)。

### 步骤十：实现 DNS 域名压缩

因此，我们需要一个更复杂的 `read_domain_name` 函数。

如下所示：

```
domain = []
loop do
  len = buf.read(1).unpack('C')[0]
  break if len == 0
  if len & 0b11000000 == 0b11000000
    # weird case: DNS compression!
    second_byte = buf.read(1).unpack('C')[0]
    offset = ((len & 0x3f) << 8) + second_byte
    old_pos = buf.pos
    buf.pos = offset
    domain << read_domain_name(buf)
    buf.pos = old_pos
    break
  else
    # normal case
    domain << buf.read(len)
  end
end
domain.join('.')

```

这里具体是：

* 如果前两个位为 `0b11`，那么我们就需要做 DNS 域名压缩。那么：
	+ 读取第二个字节并用一点儿运算将其转化为偏移量。
	+ 在缓冲区保存当前位置。
	+ 在我们计算偏移量的位置上读取域名
	+ 在缓冲区存储我们的位置。

可能看起来很乱，但是这是解析 DNS 响应的部分中最难的一处了，我们快搞定了！

#### 一个关于 DNS 压缩的漏洞

有些人可能会说，有恶意行为者可以借助这个代码，通过一个带 DNS 压缩条目的 DNS 响应指向这个响应本身，这样 `read_domain_name` 就会陷入无限循环。我才不会改进它（这个代码已经够复杂了好吗！）但一个真正的 DNS 解析器确实会更巧妙地处理它。比如，这里有个 [能够避免在 miekg/dns 中陷入无限循环的代码](https://link.zhihu.com/?target=https%3A//github.com/miekg/dns/blob/b3dfea07155dbe4baafd90792c67b85a3bf5be23/msg.go%23L430-L435)。

如果这是一个真正的 DNS 解析器，可能还有其他一些边缘情况会造成问题。

### 步骤十一：解析一个 DNS 查询

你可能在想：“为什么我们需要解析一个 DNS 查询？这是一个响应啊！”

但每一个 DNS 响应包含它自己的原始查询，所以我们有必要去解析它。

这是解析 DNS 查询的代码：

```
class DNSQuery
  attr_reader :domain, :type, :cls
  def initialize(buf)
    @domain = read_domain_name(buf)
    @type, @cls = buf.read(4).unpack('nn')
  end
end

```

内容不是太多：类型和类各占 2 个字节。

### 步骤十二：解析一个 DNS 记录

最让人兴奋的部分 —— DNS 记录是我们的查询数据存放的地方！即这个 “rdata 区域”（“记录数据字段”）就是我们会在 DNS 查询对应的响应中获得的 IP 地址所驻留的地方。

代码如下：

```
class DNSRecord
  attr_reader :name, :type, :class, :ttl, :rdlength, :rdata
  def initialize(buf)
    @name = read_domain_name(buf)
    @type, @class, @ttl, @rdlength = buf.read(10).unpack('nnNn')
    @rdata = buf.read(@rdlength)
  end

```

我们还需要让这个 `rdata` 区域更加可读。记录数据字段的实际用途取决于记录类型 —— 比如一个“A” 记录就是一个四个字节的 IP 地址，而一个 “CNAME” 记录则是一个域名。

所以下面的代码可以让请求数据更可读：

```
def read_rdata(buf, length)
  @type_name = TYPES[@type] || @type
  if @type_name == "CNAME" or @type_name == "NS"
    read_domain_name(buf)
  elsif @type_name == "A"
    buf.read(length).unpack('C*').join('.')
  else
    buf.read(length)
  end
end

```

这个函数使用了 `TYPES` 这个哈希表将一个记录类型映射为一个更可读的名称：

```
TYPES = {
  1 => "A",
  2 => "NS",
  5 => "CNAME",
  # there are a lot more but we don't need them for this example
}

```

`read.rdata` 中最有趣的一部分可能就是这一行 `buf.read(length).unpack('C*').join('.')` —— 像是在说：“嘿！一个 IP 地址有 4 个字节，就将它转换成一组四个数字组成的数组，然后数字互相之间用 ‘.’ 联个谊吧。”

### 步骤十三：解析 DNS 响应的收尾工作

现在我们正式准备好解析 DNS 响应了！

工作代码如下所示：

```
class DNSResponse
  attr_reader :header, :queries, :answers, :authorities, :additionals
  def initialize(bytes)
    buf = StringIO.new(bytes)
    @header = DNSHeader.new(buf)
    @queries = (1..@header.num_questions).map { DNSQuery.new(buf) }
    @answers = (1..@header.num_answers).map { DNSRecord.new(buf) }
    @authorities = (1..@header.num_auth).map { DNSRecord.new(buf) }
    @additionals = (1..@header.num_additional).map { DNSRecord.new(buf) }
  end
end

```

这里大部分内容就是在调用之前我们写过的其他函数来协助解析 DNS 响应。

如果 `@header.num_answers` 的值为 2，代码会使用了 `(1..@header.num_answers).map` 这个巧妙的结构创建一个包含两个 DNS 记录的数组。（这可能有点像 Ruby 魔法，但我就是觉得有趣，但愿不会影响可读性。）

我们可以把这段代码整合进我们的主函数中，就像这样：

```
sock.send(make_dns_query("example.com", 1), 0) # 1 is "A", for IP address
reply, _ = sock.recvfrom(1024)
response = DNSResponse.new(reply) # parse the response!!!
puts response.answers[0]

```

尽管输出结果看起来有点辣眼睛（类似于 `#<DNSRecord:0x00000001368e3118>`），所以我们需要编写一些好看的输出代码，提升它的可读性。

### 步骤十四：对于我们输出的 DNS 记录进行美化

我们需要向 DNS 记录增加一个 `.to_s` 字段，从而让它有一个更良好的字符串展示方式。而者只是做为一行方法的代码在 `DNSRecord` 中存在。

```
def to_s
  "#{@name}\t\t#{@ttl}\t#{@type_name}\t#{@parsed_rdata}"
end

```

你可能也注意到了我忽略了 DNS 记录中的 `class` 区域。那是因为它总是相同的（IN 表示 “internet”），所以我觉得它是个多余的。虽然很多 DNS 工具（像真正的 `dig`）会输出 `class`。

大功告成！
-----

这是我们最终的主函数：

```
def main
  # connect to google dns
  sock = UDPSocket.new
  sock.bind('0.0.0.0', 12345)
  sock.connect('8.8.8.8', 53)

  # send query
  domain = ARGV[0]
  sock.send(make_dns_query(domain, 1), 0)

  # receive & parse response
  reply, _ = sock.recvfrom(1024)
  response = DNSResponse.new(reply)
  response.answers.each do |record|
    puts record
  end

```

我不觉得我们还能再补充什么 —— 我们建立连接、发送一个查询、输出每一个回答，然后退出。完事儿！

```
$ ruby dig.rb example.com
example.com   18608   A   93.184.216.34

```

你可以在这里查看最终程序：[dig.rb](https://gist.github.com/jvns/1e5838a53520e45969687e2f90199770)。可以根据你的喜好给它增加更多特性，就比如说：

* 为其他查询类型添加美化输出。
* 输出 DNS 响应时增加“授权”和“可追加”的选项
* 重试查询
* 确保我们看到的 DNS 响应匹配我们的查询（ID 信息必须是对的上的！）

另外如果我在这篇文章中出现了什么错误，就 [在推特和我聊聊吧](https://twitter.com/b0rk)。（我写的比较赶所以可能还是会有些错误）

*（题图：MJ/449d049d-6bdd-448b-a61d-17138f8551bc）*

---

via: <https://jvns.ca/blog/2022/11/06/making-a-dns-query-in-ruby-from-scratch/>

作者：[Julia Evans](https://jvns.ca/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Drwhooooo](https://github.com/Drwhooooo) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Linux 爱好者线下沙龙：LLUG 2023·蓉城热辣相聚

# Linux 爱好者线下沙龙：LLUG 2023·蓉城热辣相聚

成都，别称“蓉城”，是我国西南的一颗璀璨的明珠，热辣的四川火锅，憨态可掬的大熊猫，都是人们对于成都的理解和认识。而我们的 Linux 爱好者线下沙龙，也在这个冬天，来到了美丽蓉城，与蓉城的开发者们线下相见。

**2023 年 10 月 29 日下午，我们将在成都市菁蓉汇举行 LLUG 2023 · 成都场，欢迎广大的 Linux 爱好者来到现场，与我们一同交流技术，分享自己工作过程中的所思所想。同期还在举行中国开源年会 COSCON，欢迎来参与活动的同时，参加 COSCON，了解中国开源项目，助力中国开源产业**

本次活动依然由 Linux 中国和 龙蜥社区（OpenAnolis）联合主办，异步图书、COSCON 中国开源年会提供了支持。

> 龙蜥社区（OpenAnolis）是国内的顶尖 Linux 发行版社区，我们希望在普及 Linux 知识的同时，也能让中国的 Linux 发行版，为更多人知晓，推动国产发行版的发展和进步。

> [异步社区(www.epubit.com)](https://www.epubit.com) 是由人民邮电出版社创办的IT专业图书社区。异步社区于2015年8月上线运营，依托于人民邮电出版社20余年的IT专业优质出版资源和编辑策划团队，致力于优质学习内容的出版和分享，为读者提供优质学习内容，为作译者提供优质出版服务，实现作者与读者在线交流互动，实现传统出版与数字出版的融合发展。

> [中国开源年会（COSCON）](https://kaiyuanshe.cn/activity/coscon-2023)是由开源社主办的，中国大陆开源界最高规格的年度盛会。大家可以访问 <https://kaiyuanshe.cn/activity/coscon-2023> 了解活动详情。

### 活动议程

| 时间 | 议题 | 分享简介 | 分享者 |
| --- | --- | --- | --- |
| 14:00~14:20 | 签到 |   |
| 14:20~14:30 | LLUG 活动介绍 | 白宦成 |
| 14:30~15:00 | 技术之旅：从结识Linux到创业——我的Linux历程 | 作为一个创业公司的 CEO，我是如何从 2010 年开始了解 Linux，又一步步从 嵌入式开发，走上创业的道路 | 孙康，
成都不周山文化发展有限公司 CEO。 |
| 15:00~15:30 | 如何高效参与开源 | 作为新人，如何学习上手使用开源，参与开源贡献 | wxy
Linux 中国创始人 |
| 15:30~16:00 | 大模型开发经验分享
  | 作为一个大模型开发者，分享一些自己在使用 LLMs 开发应用的经验，帮助大家上手使用 LLMs。开发者也要使用 LLMs 优化工作流！ | 白宦成
Linux 中国技术组组长 |
| 16:30~17:00 | 神秘议题 |
| 17:00~17:30 | 闪电演讲（短分享） |

#### 《技术之旅：从结识 Linux 到创业——我的 Linux 历程》

*孙康，成都不周山文化发展有限公司 CEO*

作为一个 Linuxer， 我是如何与 Linux 结缘，又是如何一步步从嵌入式开发，深入 Linux 生态，并最终走到创业路的故事。

#### 《如何高效参与开源》

*老王（wxy），Linux 中国技术社区创始人*

老王的经典分享，聊聊作为一个社区新人，应该如何参与到开源社区当中，并逐步成长为社区的中坚力量的。

#### 《大模型开发经验分享》

*白宦成，Linux 中国技术组组长*

作为一个大模型开发者，分享一些自己在使用 LLMs 开发应用的经验，帮助大家上手使用 LLMs。开发者也要使用 LLMs 优化工作流！

#### ⚡闪电演讲

本次线下活动依旧保留闪电演讲环节，作为最受欢迎的线下活动，本次活动依旧继续举办闪电演讲。每位演讲者有 5 分钟时间参与现场活动，可以提前报名，也可即兴上台演讲。时间一满，马上结束～强制大家控制自己的分享时间，用最短的时间，向大家发出你的声音～

上海场闪电演讲照片：

*胡张治分享自己从 GNU/Linux 小白到 ArchLinuxCN 贡献者的旅程*

*李伟光现场介绍 neovim 的使用*

### 活动地点及到达信息

四川省成都市武侯区天府五街200号 **菁蓉汇 7 栋 5 号会议室**

如果你因为有事，没办法来到线下，那也没问题，我们的活动也会在 **Linux 中国视频号、Linux 中国 B 站、龙蜥 B 站、龙蜥钉钉群**等开启同步直播。

当然，我们更希望你能亲自来到线下，和我们一起聊聊开源，聊聊技术～

>
> **[点此报名](https://jinshuju.net/f/oYUkwF)**
>
>
>

**并在活动前收到我们的提醒**～此外，也可以在问卷中反馈你想听的内容，我们将竭尽所能，邀请行业专家，针对大家感兴趣的话题进行分享。

> 本次活动免费参与，如果你希望参加同期举行的**中国开源年会 COSCON 2023**，欢迎大家入群后联系小助手，分享活动推文，即可领取赠票。

>
>  **[中国开源年会 COSCON 2023](https://mp.weixin.qq.com/s/o6n4eT7uHbZc4LYMKSJyPg)**
>
>
>

*（题图：MJ/ff7ab7b7-35ac-452b-901f-d8369f89b067）*


硬核观察 #1164 艺术家使用图像投毒工具反击生成式人工智能

Summary:
? 艺术家使用图像投毒工具反击生成式人工智能
? 科学家们可以放心使用 Excel 了
? 英伟达和 AMD 计划推出基于 Arm 的 PC 芯片
»
»

关于Nightshade这款“工具”，本来满怀信心想试试，结果该项目还在研发阶段；搜遍全网，只有新闻报道和开发团队的论文，没有实际可用的源码与发布版本。

期待Nightshade真正问世。

# 硬核观察 #1164 艺术家使用图像投毒工具反击生成式人工智能

### 艺术家使用图像投毒工具反击生成式人工智能

一种名为 “Nightshade” 的新工具可以让艺术家们在将作品上传到网络之前，对作品中的像素点进行不可见的修改，这样一来，如果作品被抓取到人工智能训练集中，就会导致生成的模型以混乱和不可预测的方式崩溃，使它们的一些输出结果变得毫无用处，比如狗变成猫，汽车变成牛等等。开发此工具的团队还开发了一个名为 “Glaze” 的工具，允许艺术家 “屏蔽” 自己的个人风格，过微妙的方式改变图像的像素，这种改变人眼看不见，但却能操纵机器学习模型，将图像解释为与实际显示不同的东西。

>
> **[消息来源：Technology Review](https://www.technologyreview.com/2023/10/23/1082189/data-poisoning-artists-fight-generative-ai/)**
>
>
>

>
> 老王点评：我欣赏这样的举动，但是我认为这样的工具并不能根除问题，就像那些用来判断是否是 AI 生成的文字的工具一样，终究会被 AI 打败。
>
>
>

### 科学家们可以放心使用 Excel 了

2020 年，科学家们决定重新设计他们用来表示基因的字母数字符号，以避免在输入到 Excel 中时自动转换。Excel 的自动转换功能旨在让某些类型的常用输入数据（例如数字和日期）的输入变得更简单、更快捷。但对于使用快速速记来使事物清晰易读的科学家来说，这可能会毁掉已发表的、经过同行评审的数据，比如将基因名称解释为日期，并（毫无）帮助地自动重新排版。上周，Excel 团队发布消息称，他们修复了这一问题，添加了一个启用默认自动转换功能的复选框。

>
> **[消息来源：The Verge](https://www.theverge.com/2023/10/21/23926585/microsoft-excel-misreading-dates-human-genes-conversion-fixed)**
>
>
>

>
> 老王点评：不知道有没有做科研的同学被微软 Excel 的自动转换坑过。
>
>
>

### 英伟达和 AMD 计划推出基于 Arm 的 PC 芯片

PC 行业正面临来自苹果公司愈来愈大的竞争压力。自苹果 Mac 电脑采用基于 Arm 的芯片以来，它的市场份额三年内几乎翻了一番。苹果的成功吸引了微软的注意，微软希望 Windows 平台也有类似的高性能芯片。分析家称，“微软从上世纪 90 年代学到，不能再依赖单一供应商。如果 Arm 真的在 PC 领域起飞，他们绝不会让高通成为唯一的供应商。”高通早在 2016 年就开始为笔记本电脑提供 Arm 芯片。英伟达和 AMD 预计最早将在 2025 年销售运行 Windows 的 Arm 芯片。

>
> **[消息来源：路透社](https://www.reuters.com/technology/nvidia-make-arm-based-pc-chips-major-new-challenge-intel-2023-10-23/)**
>
>
>

>
> 老王点评：看来 Arm 能在 PC 市场获得一席之地。不过我还是更看好 RISC-V 的未来。
>
>
>


Overskride：刚刚出现的一款有趣的 Linux 蓝牙应用！

Summary: 通过这个全新的应用可以实现所有蓝牙功能！

通过这个全新的应用可以实现所有蓝牙功能！

# Overskride：刚刚出现的一款有趣的 Linux 蓝牙应用！

>
> 通过这个全新的应用可以实现所有蓝牙功能！
>
>
>

一款适用于 Linux 的新应用已经出现，它可能是满足你所有蓝牙需求的一站式应用。

这款名为 “**Overskride**” 的开源应用首次发布。尽管它还处于开发阶段，但已经提供了一些不错的功能。

请允许我带你看一下。

### Overskride：可以期待什么？

Overskride 将会吸引 Rust 爱好者，因为它**主要是用 Rust 语言**编写的，带有 **GTK4/libadwaita 风格**。

根据开发人员的说法，它是一个**简单的蓝牙和 Obex 客户端** *（未来计划）*，无论使用什么桌面环境或窗口管理器都可以工作。

一些主要功能包括：

* 信任/阻止设备。
* 能够发送/接收文件。
* 设置连接超时时间。
* 支持配置适配器。

查看上面的截图，你可以看到自定义蓝牙设备和连接的所有基本选项，包括适配器名称。

当然，考虑到这是该应用的第一次发布，人们不应该抱有太高的期望。因此，还有改进的空间。

以下是 **Overskride 的一些预览**，以查看它提供的功能。

我在 Ubuntu 22.04 LTS 和 GNOME 42.9 上使用提供的 Flatpak 包进行安装。在此安装上运行似乎没有任何问题。

Overskride 能够检测到我的智能手机，并提供多种配置选项。

你可以将设备添加到受信任列表或阻止列表、重命名并发送文件。

我尝试了**文件传输功能**，但在此之前，我必须使用 [Flatseal](https://itsfoss.com/flatseal/) 允许访问用户文件，以便它可以读取我系统上的文件。

我在手机上接受文件传输后，传输开始。速度还可以，文件确实完整地到达那里，没有任何问题。

我必须说，在其首次发布时，开发人员为我们提供了一个有用的实用程序。我很高兴看到其未来版本将提供什么样的改进。

一位 Reddit 用户 [询问](https://www.reddit.com/r/gnome/comments/17a5m99/full_release_of_my_bluetooth_app_d/k5b3ybg/) 是否有任何计划**支持显示无线耳机的电池百分比**。对此，开发人员提到这样做很棘手，因为 每个设备都遵循不同的规范，这使得这一目标更难实现。

### ? 获得 Overskride

目前，Overskride 只能通过 [GitHub 仓库](https://github.com/kaii-lb/overskride) 以 Flatpak 软件包的形式提供。或者，你也可以从源代码开始编译。

>
> **[Overskride (GitHub)](https://github.com/kaii-lb/overskride/releases/)**
>
>
>

我希望开发者在发布稳定版本后将其发布在 [Flathub](https://flathub.org/en) 上，以便用户可以使用。

---

via: <https://news.itsfoss.com/bluetooth-app-linux-overskride/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


一些被忽略的 Git 知识

# 一些被忽略的 Git 知识

<img src="content_image/album_202310_25_122259mfu0uowyppuyfdyo.jpg" alt="" title="">

我一直在慢慢地撰写关于 Git 工作原理的文章。尽管我曾认为自己对 Git 非常了解，但像往常一样，当我尝试解释某事的时候，我又学到一些新东西。

现在回想起来，这些事情都不算太令人吃惊，但我以前并没有清楚地思考过它们。

事实是:

* “索引”、“暂存区” 和 `-cached` 是一回事
* 隐匿文件就是一堆提交
* 并非所有引用都是分支或标签
* 合并提交不是空的

下面我们来详细了解这些内容。

### “索引”、“暂存区” 和 `-cached` 是一回事

当你运行 `git add file.txt`，然后运行 `git status`，你会看到类似以下的输出：

```
$ git add content/post/2023-10-20-some-miscellaneous-git-facts.markdown
$ git status
Changes to be committed:
    (use "git restore --staged <file>..." to unstage)
    new file:   content/post/2023-10-20-some-miscellaneous-git-facts.markdown

```

人们通常称这个过程为“暂存文件”或“将文件添加到暂存区”。

当你使用 `git add` 命令来暂存文件时，Git 在后台将文件添加到其对象数据库（在 `.git/objects` 目录下），并更新一个名为 `.git/index` 的文件以引用新添加的文件。

Git 中的这个“暂存区”事实上有 3 种不同的名称，但它们都指的是同一个东西（即 `.git/index` 文件）：

* `git diff --cached`
* `git diff --staged`
* `.git/index` 文件

我觉得我早该早点认识到这一点，但我之前并没有，所以在这里提醒一下。

### 隐匿文件就是一堆提交

当我运行 `git stash` 命令来保存更改时，我一直对这些更改究竟去了哪里感到有些困惑。事实上，当你运行 `git stash` 命令时，Git 会根据你的更改创建一些提交，并用一个名为 `stash` 的引用来标记它们（在 `.git/refs/stash` 目录下）。

让我们将此博客文章隐匿起来，然后查看 `stash` 引用的日志：

```
$ git log stash --oneline
6cb983fe (refs/stash) WIP on main: c6ee55ed wip
2ff2c273 index on main: c6ee55ed wip
... some more stuff

```

现在我们可以查看提交 `2ff2c273` 以查看其包含的内容：

```
$ git show 2ff2c273  --stat
commit 2ff2c273357c94a0087104f776a8dd28ee467769
Author: Julia Evans <julia@jvns.ca>
Date:   Fri Oct 20 14:49:20 2023 -0400

    index on main: c6ee55ed wip

    content/post/2023-10-20-some-miscellaneous-git-facts.markdown | 40 ++++++++++++++++++++++++++++++++++++++++

```

毫不意外，它包含了这篇博客文章。这很合理！

实际上，`git stash` 会创建两个独立的提交：一个是索引提交，另一个是你尚未暂存的改动提交。这让我感到很振奋，因为我一直在开发一款工具，用于快照和恢复 Git 仓库的状态（也许永远不会发布），而我提出的设计与 Git 的隐匿实现非常相似，所以我对自己的选择感到满意。

显然 `stash` 中的旧提交存储在 reflog 中。

### 并非所有引用都是分支或标签

Git 文档中经常泛泛地提到 “引用”，这使得我有时觉得很困惑。就个人而言，我在 Git 中处理 “引用” 的 99% 时间是指分支或 HEAD，而剩下的 1% 时间是指标签。事实上，我以前完全不知道任何不是分支、标签或 `HEAD` 的引用示例。

但现在我知道了一个例子—— `stash` 是一种引用，而它既不是分支也不是标签！所以这太酷啦！

以下是我博客的 Git 仓库中的所有引用（除了 `HEAD`）：

```
$ find .git/refs -type f
.git/refs/heads/main
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/main
.git/refs/stash

```

人们在本帖回复中提到的其他一些参考资料：

* `refs/notes/*`，来自 [`git notes`](https://tylercipriani.com/blog/2022/11/19/git-notes-gits-coolest-most-unloved-feature/)
* `refs/pull/123/head` 和 `refs/pull/123/head`` 用于 GitHub 拉取请求（可通过` git fetch origin refs/pull/123/merge` 获取）
* `refs/bisect/*`，来自 `git bisect`

### 合并提交不是空的

这是一个示例 Git 仓库，其中我创建了两个分支 `x` 和 `y`，每个分支都有一个文件（`x.txt` 和 `y.txt`），然后将它们合并。让我们看看合并提交。

```
$ git log --oneline
96a8afb (HEAD -> y) Merge branch 'x' into y
0931e45 y
1d8bd2d (x) x

```

如果我运行 `git show 96a8afb`，合并提交看起来是“空的”：没有差异！

```
git show 96a8afb
commit 96a8afbf776c2cebccf8ec0dba7c6c765ea5d987 (HEAD -> y)
Merge: 0931e45 1d8bd2d
Author: Julia Evans <julia@jvns.ca>
Date:   Fri Oct 20 14:07:00 2023 -0400

    Merge branch 'x' into y

```

但是，如果我单独比较合并提交与其两个父提交之间的差异，你会发现当然**有**差异：

```
$ git diff 0931e45 96a8afb   --stat
    x.txt | 1 +
    1 file changed, 1 insertion(+)
$ git diff 1d8bd2d 96a8afb   --stat
    y.txt | 1 +
    1 file changed, 1 insertion(+)

```

现在回想起来，合并提交并不是实际上“空的”（它们是仓库当前状态的快照，就像任何其他提交一样），这一点似乎很明显，只是我以前从未思考为什么它们看起来为空。

显然，这些合并差异为空的原因是合并差异只显示**冲突** —— 如果我创建一个带有合并冲突的仓库（一个分支在同一文件中添加了 `x`，而另一个分支添加了 `y`），然后查看我解决冲突的合并提交，它看起来会像这样：

```
$ git show HEAD
commit 3bfe8311afa4da867426c0bf6343420217486594
Merge: 782b3d5 ac7046d
Author: Julia Evans <julia@jvns.ca>
Date:   Fri Oct 20 15:29:06 2023 -0400

    Merge branch 'x' into y

diff --cc file.txt
index 975fbec,587be6b..b680253
--- a/file.txt
+++ b/file.txt
@@@ -1,1 -1,1 +1,1 @@@
- y
    -x
++z

```

这似乎是在告诉我，一个分支添加了 `x`，另一个分支添加了 `y`，合并提交通过将 `z` 替代冲突解决了它。但在前面的示例中，没有冲突，所以 Git 并未显示任何差异。

（感谢 Jordi 告诉我合并差异的工作原理）

### 先这样吧

些写到这里吧，也许我将在学到更多 Git 知识时撰写另一篇关于 Git 的知识的博客文章。

*（题图：MJ/03bfecc3-944e-47a0-a4fd-575293d2ba92）*

---

via: <https://jvns.ca/blog/2023/10/20/some-miscellaneous-git-facts/>

作者：[Julia Evans](https://jvns.ca/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[KaguyaQiang](https://github.com/KaguyaQiang) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #1165 Windows CE 彻底落幕

Summary:
? Windows CE 彻底落幕
? Canonical 将坚持 10 年的 Ubuntu LTS 支持周期
? Linux RISC-V 准备支持实时内核
»
»

# 硬核观察 #1165 Windows CE 彻底落幕

### Windows CE 彻底落幕

诞生于 1996 年的 Windows 嵌入式操作系统 Windows CE 最初是 Windows 的精简版本，之后逐渐发展成为全新的操作系统，有着自己的 CE 内核，而不是传统 Windows 操作系统使用的 NT 内核，它的最后一个版本是发布于 2013 年的 Windows CE 8.0。该版本于 2018 年 10 月结束主流支持，并在本月结束延长支持，成为不受支持的退役产品。然而，很少有人注意到这两件事的发生。就像之前的 Windows CE 7.0 一样。在 CE 8 平台上发布的设备寥寥无几，大多数人甚至从未见过 CE 8 的实体设备。CE 8 唯一值得注意的特点是首次加入了 IPv6 支持。但更重要的是删除了默认示例用户界面，它规定任何 OEM 都必须发布带有完全自定义编码界面的设备，事实上真正结束了廉价 Windows CE 上网本设备的时代。

>
> **[消息来源：H/PC Factor](https://www.hpcfactor.com/news/871/end-of-an-era-windows-ces-final-day)**
>
>
>

>
> 老王点评：很多人都不记得 Windows CE 了吧，就这样悄悄落幕了。要是微软能开源出来就好了。
>
>
>

### Canonical 将坚持 10 年的 Ubuntu LTS 支持周期

之前，我们报道过，Linux 内核社区正在考虑将其 LTS 内核的支持周期从 6 年缩短为 2 年。在此情况下，Canonical 重申他们对 Ubuntu LTS 版本的支持周期为 10 年，不会因为上游内核 LTS 政策的转变而缩短支持窗口，就像红帽的 RHEL 等企业版 Linux 一样。Ubuntu LTS 内核并不总是与 Linux LTS 内核保持一致，而且 Ubuntu LTS 的点版本通常会反向移植较新的内核版本，作为其硬件使能（HWE）堆栈的一部分。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Ubuntu-LTS-Sticks-With-10-Years)**
>
>
>

>
> 老王点评：企业版 Linux 理所应当得到十年或更久的支持，从这一点上看，Linux 基金会相当于将球踢给了各个企业 Linux 发行商。
>
>
>

### Linux RISC-V 准备支持实时内核

随着 2023 年临近结束，令人遗憾的是，实时内核 “PREEMPT\_RT” 支持仍未实现主流化。主要的障碍仍然是正在进行的非阻塞控制台/线程控制台处理工作，以便合并剩余的几十个树外实时内核补丁。好消息是当 PREEMPT\_RT 支持在主线上准备就绪时，RISC-V 架构似乎也将支持实时内核。目前，Linux RT 补丁集允许 ARM64、ARM、PowerPC 和 x86/x86\_64 架构启用实时内核支持，而最近正在开发的一组补丁也将支持 RISC-V。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/RISC-V-Linux-RT-Support-Patches)**
>
>
>

>
> 老王点评：虽然实时内核还一直没就绪，但是如果 RISC-V 能第一时间支持实时内核，这对 RISC-V 来说是个很好的消息。
>
>
>


Grayjay：可能是终极的视频流应用程序

Summary: 一款可提供源代码的应用，让视频流应用不再烦恼。你怎么看？

突然想起了那些能让用户自己写规则的视频软件。

一款可提供源代码的应用，让视频流应用不再烦恼。你怎么看？

# Grayjay：可能是终极的视频流应用程序

>
> 一款可提供源代码的应用，让视频流应用不再烦恼。你怎么看？
>
>
>

视频流媒体服务大多包含 DRM，并限制下载离线媒体拷贝，即使你拥有这些媒体。

每个平台都有自己的一套规则，这些规则对创作者来说可能公平也可能不公平。那么，对于消费者来说呢？要关注多个网络，而且平台可用的订阅选项也很混乱。

如果我们有一个**单一应用让我们访问所有这些网络的视频怎么样？**

**不仅如此：如果我们可以拥有离线下载**的福利以及更多功能，例如能够在同一应用中**将视频投射到电视**，而无需使用多个应用，那会怎么样？

而且，这些功能都以**应用的形式存在，其源码可以检查和修改**。听起来令人印象深刻，对吧？

嗯，这就是一个组织 [FUTO](https://futo.org/)（[**Louis Rossmann**](https://www.youtube.com/@rossmanngroup) 是其成员之一）提出的。

来认识一下 “**Grayjay**”，你可以在该应用中**跨多个网络关注内容创作者，没有 DRM 和任何不必要的限制**。

### Grayjay：专注于创作者

Grayjay 是一款媒体应用，旨在让创作者控制他们拥有的视频以及任何获利机会。

该应用处于初始阶段，因此其主要目标尚未反映在该应用中。

目前，该应用是一个**提供源码**的产品，你可以在其中观看来自你喜爱的网络的视频，同时摆脱跟踪器、广告和平台的其他烦恼。

**Louis Rossmann** 是这个项目的中心，我相信这让我们值得去看一下：

>
> ? Louis 是一位颇受欢迎的 YouTuber，他发布的视频涉及可维修性、反竞争行为等。他总是说出自己的想法，这使我们大多数人都喜欢他。
>
>
>

具体大家可以观看视频，我给大家总结一下，节省大家的时间：

* Grayjay 的目标是成为 [Newpipe](https://newpipe.net/) 和 [YouTube ReVanced](https://revanced.app/) 等应用的**更好替代品**。
* 该应用**提供源码**，它允许你查看源代码，根据你的要求制作你自己的版本（但不能用于商业用途）。
* 该应用**不是免费的**，其商业模式将用户视为客户，而不是产品。然而，如果没有任何 DRM，该应用最终将为你提供无限的免费试用期。
* 虽然 Louis 将其称为“开源”以让大多数人理解，但它并不具有你通常期望的标准许可证。他们选择使用非标准许可证，以便能够阻止该应用的恶意重新分发。

你可以在其 [GitLab 页面](https://gitlab.futo.org/videostreaming/grayjay) 及其 [官方网站](https://grayjay.app/) 上仔细查看它。

>
> **[Grayjay](https://grayjay.app/)**
>
>
>

目前仅适用于安卓。考虑到它仍在开发中，你可以决定安装 APK 来尝试一下。

? 该应用提供了源代码，Louis 提到它可以针对个人使用场景重新分发。你对 Grayjay 有何看法？ 分享你的意见。

---

via: <https://news.itsfoss.com/video-streaming-app/>

作者：[Ankush Das](https://news.itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Word 迎接它的 40 周年生日

Word不支持Linux，又不是FOSS软件（尽管早期版本发布了源代码，但不是真正的开源软件），只应该出现在“硬核观察”里，为什么要单独发一篇关于它的文章？

算是对计算机历史方面的一个记录吧。

“1983 年，大卫·科波菲尔令人惊讶的使自由女神像消失”，这句话指的是魔术大师大卫·科波菲尔于1983年进行的一场著名魔术。

# Word 迎接它的 40 周年生日

<img src="content_image/album_202310_26_152738tj0xaxjofnhttz8a.jpg" alt="" title="">

>
> 1983 年，大卫·科波菲尔令人惊讶的使自由女神像消失的同时，Word for DOS 诞生了。
>
>
>

今天，Word 已经有 40 年历史了。撇开庆祝不谈，值得一提的是，时至 2023 年，这款生产力应用，并不一直是如今在许多工作站上看到的那个臃肿的样子。

首个版本的 Word （最初称为 “Multi-Tool Word”）于 1983 年 10 月 25 日在 Xenix 和 MS-DOS 平台上发布。这款产品支持 16 位图形和文本模式，同时也兼容当时刚出现的 “点击设备”——鼠标。

编写这个版本的团队包括 <ruby> 查尔斯·西蒙尼 <rt>  Charles Simonyi </rt></ruby> 等人，他们过去曾在 <ruby> 施乐帕克 <rt>  Xerox PARC </rt></ruby> 工作，后来在微软的应用部门获得了成功。可以公正的说，Word 的成功非一日之功。

当时，它面对 WordStar 等老牌产品的激烈竞争，当 Word 发布时，WordStar 已占据了约四分之一的文字处理市场。而在 DOS 上首度亮相的 WordPerfect，也是潜在的威胁。

Word 的首个版本并非完全的所见即所得应用，但微软坚持不懈，在接下来的数年里逐步增加其特性，直至 1993 年的最后一个 DOS 版本 —— Word 6.0 for DOS。然而，与此同时，一个新的竞争者即将全面掌控这个市场，那就是 Word for Windows。

Word for Windows 从默默无闻，到不到 10 年就占据了文字处理市场 90% 的份额。

第一版 Windows 版本的 Word 在 1989 年发布，但直到 1990 年 Windows 3.0 的发布，这款软件才奠定了它今天的巨大商业成功。Word for Windows 2.0 在 1991 年面世，对于笔者来讲，这是 Word for Windows 开始膨胀前的黄金时期，直到 Word 6.0 for Windows 的推出，软件的臃肿问题才开始一发不可收拾。

现阶段，它的名称变为 Office 365 的 Word，毫无疑问，微软的精英团队正竭尽全力想办法如何在其中融入 “AI” 这个词汇。

然而，我们回顾 1983 年，Word 在竞争对手主导的文字处理器市场中不过是众多选择之一。正如 Word 曾试图挑战竞争对手的主导地位，近年来，它的市场份额也在慢慢被如谷歌文档等竞争者侵蚀。

1984 年首次发布的 Word 1.1a 的源代码可以在 [计算机历史博物馆](https://computerhistory.org/blog/microsoft-word-for-windows-1-1a-source-code/) 找到。这个 ZIP 文件仅有不到 7MB，你可以想象一下。

*（题图：MJ/30bb1962-25de-4751-b828-566c4657d8c3）*

---

via: <https://www.theregister.com/2023/10/25/microsoft_word_40/>

作者：[Richard Speed](https://www.theregister.com/Author/Richard-Speed "Read more by this author") 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](/article-16309-1.html) 荣誉推出


硬核观察 #1166 微软 CEO 称过早放弃了 Windows Phone

Summary:
? 微软 CEO 称过早放弃了 Windows Phone
? 微软会问你为什么要下载 Chrome
? 原子计算公司率先宣布推出 1180 比特的量子计算机
»
»

"微软 CEO 称过早放弃了 Windows Phone"

——内部斗争导致的这个结果，公司利益算个鸟，把对手搞下来才是正途。

——如果三分天下，也就没鸿蒙什么事了。。。

微软收购了诺基亚？？？拔掉插头？这都是什么文章。。。<br />
微软当年对移动开发者不友好，Windows Phone的市场份额不断下降，后来变成了1%。就算没有放弃，确定真能竞争过苹果和谷歌？迟早会成为另一个黑莓。

# 硬核观察 #1166 微软 CEO 称过早放弃了 Windows Phone

### 微软 CEO 称过早放弃了 Windows Phone

Windows Phone 推出于 2010 年，尽管微软斥资数十亿美元收购了诺基亚，但还是在 2014 年被干掉了，并在 2019 年彻底拔掉插头，最后一批设备的安全更新也被停止。微软 CEO 萨蒂亚·纳德拉在采访中表示，对 Windows Phone 项目的突然终止表示遗憾，称这是他“担任 CEO 时做出的最困难的决定之一”，他承认事情本可以有不同的发展。而微软的两位前任 CEO，比尔·盖茨和史蒂夫·鲍尔默也都对微软在 Windows Phone 上的灾难性尝试感到后悔。

>
> **[消息来源：The Register](https://www.theregister.com/2023/10/25/nadella_windows_phone_regrets)**
>
>
>

>
> 老王点评：如果不放弃，或许今天就是三分天下。
>
>
>

### 微软会问你为什么要下载 Chrome

有用户报告，如果尝试通过 Edge 浏览器下载 Chrome 浏览器，Edge 会打开侧边栏提出一系列问题，询问你为什么不用 Edge 的原因，“我们想让你留下来，您能花一点时间告诉我们为什么要尝试其它浏览器？是因为不能更便捷的访问谷歌，不能访问谷歌文档，没有收藏夹或密码，太多广告和弹出窗口，不喜欢新闻源，太慢了，我的网站无法在 Edge 上运行，还是其它原因。”

>
> **[消息来源：Neo Win](https://www.neowin.net/news/microsoft-now-wants-you-to-take-a-poll-before-installing-google-chrome/)**
>
>
>

>
> 老王点评：微软一定是非常纳闷，为什么 Edge 和 Chrome 内核一样，而且 Edge 似乎有更多改进，为什么用户非要骑驴找马呢？
>
>
>

### 原子计算公司率先宣布推出 1180 比特的量子计算机

一家名为 <ruby> 原子计算 <rt>  Atom Computing </rt></ruby> 的初创公司宣布，它正在对一台多达 1180 量子比特的量子计算机进行内部测试，并将于明年向客户提供，使其成为目前公开承认的量子比特数最大的机器。这些量子比特构成了 35x35 的原子网格，每个边只有大约 100 微米。它们被放置在一个 12x5 英尺的盒子里，里面包括激光器、光学器件、真空系统等组件，不过，这还不算周围的控制系统及其运行的计算机硬件。

>
> **[消息来源：Ars Technica](https://arstechnica.com/science/2023/10/atom-computing-is-the-first-to-announce-a-1000-qubit-quantum-computer/)**
>
>
>

>
> 老王点评：就怕某一天突然量子计算机投入实用。
>
>
>


Warehouse：管理 Flatpak 应用的强大工具

Summary: 你是否使用 Flatpak 应用？Warehouse 可以让你更轻松。

容器应用如何做到提供输入法? 随着 wayland 应用普及, 宿主系统如果只支持 Xorg 的话, 也会成问题.

你是否使用 Flatpak 应用？Warehouse 可以让你更轻松。

# Warehouse：管理 Flatpak 应用的强大工具

>
> 你是否使用 Flatpak 应用？Warehouse 可以让你更轻松。
>
>
>

有一个应用，可以为你提供有关 Flatpak 应用的所有重要信息，以及管理它的工具，这不是很好吗？

这一次你很幸运！

在这次的首次尝试中，我们有一个有趣的应用程序，名为 “**Warehouse**”，**它可以帮助你管理 Flatpak 应用**。

我们以前介绍过一个类似的应用，名为 “[Flatseal](https://itsfoss.com/flatseal/)”，但它更侧重于管理 Flatpak 的权限。

让我们看看 Warehouse 提供了哪些功能。

### Warehouse：概述 ⭐

开发人员将其称为“**多功能工具箱**”，Warehouse 可用于**管理 Flatpak 用户数据**、**查看 Flatpak 的信息**，甚至**批量管理系统上安装的 Flatpaks**。

它主要使用 **Python 语言**编写，具有以下主要特点：

* 轻松管理用户数据
* 批量操作功能
* 清除残余数据

### 初步印象 ??

我一开始是在我的 Ubuntu 系统上测试 Warehouse。从 **Flathub** 上安装它很简单。

打开后，显示了所有**已安装的 Flatpak 应用**的列表。它们**都以有序的方式排列**。

在我看来，如果它们添加了切换到网格布局的选项，会看起来更好。

>
> ? 你是否对列在 Firefox 之上的应用感到好奇？我们最近介绍过它，它是一个名为 “[Mission Center](https://news.itsfoss.com/mission-center/)” 的系统监控应用。
>
>
>

接下来，我**查看了 Flatpak 应用的属性**，我点击应用旁边的“信息”标志，打开了应用属性窗口。

它提供了有关应用程序的各种信息，从**名称**、**描述**、**应用 ID**，一直到**活动提交**和**安装大小**。

类似地，我可以点击“垃圾桶”图标，要么**完全卸载 Flatpak 应用**，要么为将来重新安装**保留用户数据**，并恢复设置/内容。

Warehouse 还具有**搜索功能**，允许你搜索特定的应用。当你安装了很多 Flatpak 应用时，这可能会很有用。

只需点击应用程序左上角的**放大镜**图标即可开始搜索。

你还可以**设置过滤器**，以**应用甚至运行时（系统完成各种任务所需的）进行排序**。

点击应用程序左上角的“漏斗”图标以开始筛选。

然后，我查看了**批量操作功能**。我首先点击了应用右上方的“勾号”标志。

然后，我就可以选择多个应用，执行**复制信息**、**删除应用数据**和**卸载它们**等操作。

应用程序右下角的三个小按钮可以方便地执行上述操作。

之后，我进入菜单，其中有一些重要选项。

第一个选项“<ruby> 从文件安装 <rt>  Install from file </rt></ruby>”允许我使用 `.flatpakref` 文件安装 Flatpak 应用。

在安装过程中，它问我是要为特定用户安装，还是要为使用系统的所有人安装。我选择了后者。

随后，我查看了“<ruby> 管理残余数据 <rt>  Manage Leftover Data </rt></ruby>”选项。它向我显示了一个旧的 Flatpak 应用留下了多少数据。

我可以选择通过“<ruby> 安装 <rt>  Install </rt></ruby>”选项重新安装应用并恢复数据，也可以使用“<ruby> 垃圾桶 <rt>  Trash </rt></ruby>”选项彻底清除系统中的任何痕迹。有时，残留数据会占用大量空间。

如果你经常安装/删除应用，那么你的系统中可能会有很多剩余数据。

如果你想管理 Flatpak 仓库，可以前往“<ruby> 管理远程仓库 <rt>  Manage Remotes </rt></ruby>”选项，该选项允许你添加或删除它们。

虽然你可以在 Fedora 和其他一些发行版的软件中心完成这项工作，但在一个应用中就能获得所有基本功能，这将是一种无缝体验。

最后，你还可以使用大量的“**键盘快捷键**”，通过键盘快速浏览应用的所有功能。

### ? 下载 Warehouse

你可以前往 [Flathub 商店](https://flathub.org/apps/io.github.flattool.Warehouse)下载最新版本。

>
> **[Warehouse（Flathub）](https://flathub.org/apps/io.github.flattool.Warehouse)**
>
>
>

你还可以访问其 [GitHub 仓库](https://github.com/flattool/warehouse) 查看源代码。

你对 Warehouse 应用有何看法？请在下面的评论中分享你的想法。

---

via: <https://news.itsfoss.com/warehouse/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #1167 连谷歌 CEO 都不了解谷歌的隐私控制措施

Summary:
? 连谷歌 CEO 都不了解谷歌的隐私控制措施
? 谷歌悄悄计划阻止苹果发展其搜索产品
? DeepMind 负责人表示人工智能应该像气候和原子能一样监管
»
»

Apple如果下定决心要做自己的搜索服务，哪怕只给自己的设备使用，Google阻止不了，就像当年苹果自己做地图一样。

# 硬核观察 #1167 连谷歌 CEO 都不了解谷歌的隐私控制措施

### 连谷歌 CEO 都不了解谷歌的隐私控制措施

在一件针对谷歌的集体诉讼案中，一位专家证人作证说，就连谷歌 CEO <ruby> 桑达尔·皮查伊 <rt>  Sundar Pichai </rt></ruby> 也错误地向国会描述了“网络与应用活动” 隐私复选框的工作原理。该复选框声称可以阻止谷歌将用户的 “活动” 保存到谷歌的服务器上，但诉讼称事实并非如此。这个开关的真正作用：如果你关闭了它，谷歌将停止应用它捕获的数据来 “个性化” 一些非常特殊的面向用户的界面，如 Chrome 浏览器、搜索和安卓系统。该证人说，这个隐私开关，“当你打开它时，它只是意味着我们不会告诉你我们在监视你”。

>
> **[消息来源：Ars Technica](https://arstechnica.com/gadgets/2023/10/even-google-ceo-sundar-pichai-doesnt-understand-googles-privacy-controls/)**
>
>
>

>
> 老王点评：毕竟，谷歌是依靠对用户信息的掌握来卖广告的。
>
>
>

### 谷歌悄悄计划阻止苹果发展其搜索产品

谷歌与苹果公司的关系错综复杂，既是竞争对手，也是合作伙伴。谷歌除了向苹果支付大量金钱，以保持谷歌搜索引擎在 iPhone 手机上的默认选择权之外，谷歌还悄悄计划遏制苹果的搜索野心。据谷歌内部文件显示，在苹果的 Spotlight 开始向用户显示更丰富的网络搜索结果后，谷歌想方设法通过为 iPhone 提供自己的版本来削弱 Spotlight，并说服更多的 iPhone 用户使用谷歌的 Chrome 浏览器，而不是苹果的 Safari 浏览器。与此同时，谷歌还在研究如何利用旨在帮助小公司与大科技公司竞争的欧洲新法律，撬开苹果对 iPhone 的控制。

>
> **[消息来源：《纽约时报》](https://www.nytimes.com/2023/10/26/technology/google-apple-search-spotlight.html)**
>
>
>

>
> 老王点评：看来苹果不会有机会发展自己的搜索产品了。
>
>
>

### DeepMind 负责人表示人工智能应该像气候和原子能一样监管

谷歌 DeepMind 负责人 <ruby> 德米斯·哈萨比斯 <rt>  Demis Hassabis </rt></ruby> 表示，“必须像对待气候变化等其他重大全球挑战一样，认真对待人工智能的风险。……我们不能再有同样的延误了。”他说，对该行业的监督可以从类似于政府间气候变化专门委员会（IPCC）的机构开始，然后“也许有一天会出现某种与国际原子能机构相当的机构，对这些事情进行实际审核。”虽然他认为世界距离开发出 “神一样” 的人工智能还有很长的路要走，目前的人工智能系统 “没有风险，但下几代可能会有风险”， “所以我们现在就应该讨论它”。

>
> **[消息来源：《卫报》](https://www.theguardian.com/technology/2023/oct/24/ai-risk-climate-crisis-google-deepmind-chief-demis-hassabis-regulation)**
>
>
>

>
> 老王点评：只是，这种国际间的协调机构怎么才能不会成为领先者保持优势的工具？
>
>
>


Focusrite 帮助 Linux 开发人员提供驱动程序支持

Summary: Focusrite 正在大力支持 Linux 。

对于技术达人来说，在Linux上，用Pipewire搭配Pipewire-JACK，已经可以发挥Focusrite声卡的表现。<br />
但相较于JACK，有官方支持自然更棒，音乐人用起来更舒心。对刚刚接触Linux、目前还不擅长配置Pipewire的音乐人，尤其受用。长远来看，更多的制作人可以享受到Linux的便利，岂不美哉。

# Focusrite 帮助 Linux 开发人员提供驱动程序支持

>
> Focusrite 正在大力支持 Linux 。
>
>
>

尽管 Linux 作为桌面平台正在快速发展，但与 Windows 和 macOS 相比，它仍然是少数音乐制作人的选择。一个主要原因是缺乏一些 DAW 和硬件制造商的官方支持。

幸运的是，随着大牌企业涉足 Linux，这一切都在改变。好奇么？ 嗯，最近，[PreSonus 宣布其 Studio One DAW 支持 Linux](/article-16254-1.html)。

现在，[PreSonus](https://www.presonus.com/) 的直接竞争对手之一 [Focusrite](https://focusrite.com/) 也加入了进来?，他们也生产音频接口和其他专业音频设备。

如果你是音乐制作人或音乐爱好者，你应该知道这些名字往往是彼此的代名词。虽然我目前使用 PreSonus 而不是 Focusrite，但这两家公司及其产品对于大众市场来说都很重要。

### Focusrite 对 Linux 支持的承诺

**Geoffrey Bennett** 是 [LinuxMusicians](https://linuxmusicians.com/) 论坛的用户，他因致力于为流行的 Focusrite 音频接口（Scarlett 第二代和第三代）提供 Linux 支持而闻名。

当然，这是一项艰巨的非官方任务。

为了更进一步，他最近发起了一项筹款活动，以获得 Focusrite 的最新音频接口，即 [Scarlett 第四代](https://focusrite.com/scarlett/4th-generation)。

除此之外，他的目标是购买 Focusrite 的播客设备。

筹款活动取得成功的同时，**也得到了 Focusrite 的关注**，**他们提供了大量资金**来帮助他购买最新的音频接口。

**Focusrite 还表示愿意在产品发布前，向他寄送他没有的设备以及未来的产品。**

最重要的是，他们提到了他们的**工程团队如何帮助他改进开发工作**。

>
> 虽然我之前一直很难与 Focusrite 的工程师或管理层取得联系，但这次筹款活动获得热烈反响的消息传到了 Focusrite 的高层。考虑到 Linux 音频的小众性质，我一直控制着自己的期望值，但这超出了我的想象。
>
>
> 我刚刚与他们通了电话，除了提供硬件之外，他们还询问支持开发的其他方式。
>
>
> Focusrite 不仅主动提出给我寄来我收藏中没有的设备，而且还提议，对于未来的产品发布，他们将尽最大努力提前向我发送设备。这意味着 Linux 支持可以从产品发布之日起就做好准备！
>
>
> 此外，他们正在讨论他们的工程团队如何更好地帮助我简化开发流程，并消除大部分猜测。
>
>
> —— Geoffrey 来自 [LinuxMusicians](https://linuxmusicians.com/viewtopic.php?t=26173&start=15)
>
>
>

因此，Focusrite 希望确保 Linux 社区能够以更好的体验使用他们的产品。也就是说，间接为 Linux 平台提供官方支持。

这是个大新闻！

这两家大型音频制造商**也应该会说服其他软件和硬件公司**。无论是对驱动程序的官方支持，还是对客户的故障排除支持，任何方式都是可行的。

对 Linux 平台的任何关注都将有助于改善 Linux 音频生态系统。

如果更多的音频公司添加了 Linux 支持，音频专业人士就不必被锁定在专有平台上，也不必支付许可证费用来获得操作系统。

?我对未来充满希望！你怎么看呢？

---

via: <https://news.itsfoss.com/focusrite-linux/>

作者：[Ankush Das](https://news.itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Summary:
? Linux Mint 开始用“罗密欧”为新功能和下一个版本作准备
? 英特尔 CEO 说 Arm PC 的挑战 “无足轻重”
? 263 亿美元！谷歌在 2021 年为默认搜索引擎付出了这么多
»
»

# 硬核观察 #1168 Linux Mint 开始用“罗密欧”为新功能和下一个版本作准备

### Linux Mint 开始用“罗密欧”为新功能和下一个版本作准备

Debian 发行版以电影《玩具总动员》中的玩具命名。在这部电影中，有一个叫 Sid 的孩子会弄坏玩具。Debian 以他的名字命名了自己的不稳定版本。Sid 弄坏了玩具，Sid 弄坏了 Debian。Mint 基于 Debian 发行版，而 Mint 发行版被赋予了一个女孩的名字。每个版本都有可能让她心碎的 “罗密欧（`Romeo`）”，它是不稳定软件的归宿。要推送不稳定软件并供 alpha 测试人员使用，Linux Mint 使用的不是发行版，而是软件源组件。过去，开发团队使用 `Romeo` 快速测试软件包。今后，Linux Mint 将使用 `Romeo` 来推送新功能和正在为下一个版本做准备的变更。

>
> **[消息来源：Linux Mint](https://blog.linuxmint.com/?p=4591)**
>
>
>

>
> 老王点评：这个命名真是颇有趣味，想寻找新鲜感就准备让你心碎?。
>
>
>

### 英特尔 CEO 说 Arm PC 的挑战 “无足轻重”

之前我们 [报道](/article-16314-1.html) 过，英伟达和 AMD 计划推出基于 Arm 的 PC 芯片，以支持运行在 Arm 上的 Windows。微软上周援引分析师的研究预测，到 2027 年，Arm 的 PC 市场份额将从目前的 14% 增长到 25%。出于对此关切的回应，英特尔 CEO “<ruby> 帕特·格尔辛格 <rt>  Pat Gelsinger </rt></ruby>” 在财报电话会议上对分析师说：“Arm 和 Windows 客户端替代产品，通常在 PC 业务中只能扮演无足轻重的角色。” 他认为从历史上看，这些产品在整体上没有多大的潜在意义。

>
> **[消息来源：The Register](https://www.theregister.com/2023/10/27/intel_q3_2023/)**
>
>
>

>
> 老王点评：我想他心里一定不如他说的这么镇定。
>
>
>

### 263 亿美元！谷歌在 2021 年为默认搜索引擎付出了这么多

美国对谷歌的反垄断审判的庭审证词显示，谷歌在 2021 年总共花费了 263 亿美元，以成为多种浏览器、手机和平台的默认搜索引擎。这个数字是美国司法部在盘问谷歌搜索主管时透露的，是谷歌所有搜索分销交易的总和。法官坚持推动公开了这一数字。大致来说，谷歌用了约 16% 的搜索收入和约 29% 的利润用于分销交易。

>
> **[消息来源：The Verge](https://www.theverge.com/2023/10/27/23934961/google-antitrust-trial-defaults-search-deal-26-3-billion)**
>
>
>

>
> 老王点评：这就是默认的力量，但这买卖看起来真值。
>
>
>


“安全”这个热词：应避免使用还是该更直接了当？

Summary: 思考一下，如何在你的开源项目中真正定义安全性吧。

思考一下，如何在你的开源项目中真正定义安全性吧。

# “安全”这个热词：应避免使用还是该更直接了当？

<img src="content_image/album_202310_28_095718zso6aaitoyyv4ain.jpg" alt="" title="">

>
> 思考一下，如何在你的开源项目中真正定义安全性吧。
>
>
>

科技行业以创造“热词”而小有名气，当然，其他行业也是如此。譬如，“故事驱动”和“轻规则”是当下流行的桌游概念，“解构”的汉堡和墨西哥卷饼在高级餐厅颇受欢迎。然而，技术热词的问题在于，它们可能直接影响你的生活。当某人标榜应用程序“安全”，以此来吸引你使用他们的产品，产品实际上是在暗示一种承诺：“安全”的含义就是它是安全的，它值得你的使用与信任。但问题是，“安全”这个词可能指的是许多事情，技术行业常将它用作一个过于泛化的术语，以至于它逐渐失去了实际含义。

由于“安全”一词可能含义丰富，也可能一无是处，使用它就需要慎之又慎。事实上，最好是尽量避免使用这个词，取而代之的是，诉诸你真正要表达的东西。

### 当 “安全” 意味着加密

有时候，“安全” 会被作为 *加密* 的非常不明确的简短表述。在这种情况下，“安全” 指的是，对于外部观察者想要窃听你的数据，要经过一定的困难。

**避免这样表述：**“本网站稳如磐石且安全无忧。”

听起来很棒？你可能会想象一个拥有多重二次验证、零知识证明数据存储以及坚决的匿名策略的网站。

**你可以这么说：**“本网站承诺有 99% 的在线时间，并且其流量都通过 SSL 进行加密和验证。”

这样一来，承诺的含义变得清晰了，同时也明确了实现 “安全” 的方法（即使用 SSL）以及 “安全“ 的作用范围是什么。

注意，这里并未对隐私或匿名做出任何明确的承诺。

### 当 “安全” 意味着访问限制

有时，“安全” 这个词是指应用程序或设备的访问权限。如果没有明确的解释，“安全” 可能涵盖从无效的“隐蔽即安全”模式，到简单的 htaccess 密码，直到生物识别扫描器等各种概念。

**避免这样表述：**“我们已经为你防护好了系统。”

**你可以这么说：**“我们的系统采用了二步验证法。”

### 当 “安全” 意味着数据存储

“安全” 这个词也可以指你的数据在服务器或设备上的储存方法。

**避免这样表述：**“这个设备在数据存储上考虑了安全因素。”

**你可以这么说：**“这个设备利用全盘加密技术来保护你的数据。”

当提到远程存储时，“安全” 可能更多指的是谁可以访问存储数据。

**避免这样表述：**“你的数据是安全的。”

**你可以这么说：**“你的数据经过 PGP 加密，仅你持有私钥。”

### 当 “安全” 意味着隐私

今天，“隐私” 一词几乎和 “安全” 一样宽泛且模糊。一方面，“安全” 似乎必然就涉及 “隐私”，然而，这仅在 '安全' 有明确定义时才成立。是因为设有密码阻止外人进入所以称之为私有吗？还是因为数据已加密且仅你拥有密钥所以归为私有？又或者，由于存储你数据的厂商除了 IP 地址外对你一无所知，这才算是私有？光是口头声明 “隐私”，就像未经说明就声明 “安全” 一样，是不够的。

**避免这样表述：**“你的数据在我们这里是安全的。”

**你可以这么说：**“你的数据经 PGP 加密，且只有你拥有私钥。我们不需要你的任何个人信息，唯一能识别你的只有你的 IP 地址。”

一些网站会声明 IP 地址在日志中保留期限，及非经法律授权绝不向执法部门交出用户数据等诸多承诺。虽然这些并不属于技术 “安全” 的范畴，但它们全都涉及的是信任度，你不能将这些看作是技术规格。

### 明确所说

科技是个复杂的话题，极易引发混淆。沟通是至关重要的，虽然有时候简拼和专有名词在某些场合可能管用，但通常来说，讲明白总是比较好的。当你对你的项目的 “安全” 感到自豪，不要只用模糊的词语进行简述。向其他人明确你具体做了什么来保护你的用户，同时也要明确你认为哪些事物已超出你的考量范围，并要经常进行这样的沟通。“安全” 是个好特点，但它的涵盖面过广，所以请勿畏于夸赞自己在某个具体方向上的特别之处。

*（题图：MJ/b8cc54ee-5556-4106-b9fa-b08539452aa7）*

---

via: <https://opensource.com/article/22/9/security-buzzword-alternatives>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lkxed](https://github.com/lkxed) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


人工智能教程（一）：基础知识

唯一看懂的是医疗记录。此人的BMI=体重（公斤）÷身高（米）^2=90÷1.6^2≈35.16，明显属于肥胖。TA的血压（舒张压）偏高，空腹血糖较高（把毫克/分升转换成通用的mmol/L，葡萄糖的摩尔质量是180，大约是1600÷180≈8.89mmol/L），说明患有糖尿病。

哈哈，可能很多人反而看不懂这个医疗数据，或者说不会一眼看懂。楼主或许是医疗行业的专业人士。

不是专业人士，不过曾经是医学生，后来搞IT了。

确实确实，看来咱们社区组成还是蛮有多样性的。要是翻译的时候能看懂，把这个加到译注了，还能增加一点文章趣味性。

来自223.104.38.138的 MIUI Browser 17.7|Android 10 用户

小白表示这个教程很棒！

# 人工智能教程（一）：基础知识

>
> 如果你是关注计算机领域最新趋势的学生或从业者，你应该听说过人工智能、数据科学、机器学习、深度学习等术语。作为人工智能系列文章的第一篇，本文将解释这些术语，并搭建一个帮助初学者入门的简易教学平台。
>
>
>

如今，计算机科学领域的学生和从业者绝对有必要了解<ruby> 人工智能 <rt>  artificial intelligence </rt></ruby>、<ruby> 数据科学 <rt>  data science </rt></ruby>、<ruby> 机器学习 <rt>  machine learning </rt></ruby>、<ruby> 深度学习 <rt>  deep learning </rt></ruby>方面的基本知识。但是应该从哪里开始呢？

为了找到答案，我浏览了大量人工智能的教材和教程。它们有的从大量数学理论开始，有的用编程语言无关的方式（不要求你了解某一门特定的编程语言）讲解，有的假设你是线性代数、概率论和统计学专家。在很大程度上，它们都很有用。但它们都没有回答最重要的问题：真正的初学者应该从哪里开始学习人工智能？

开始学习人工智能的方式多种多样，但是我对它们各有担忧。涉及太多的数学会让人分心，但如果数学介绍得太少就好像驾驶员不知道汽车引擎在哪里一样。对于未来的人工智能工程师和数据科学家来说，从进阶概念开始讲解是最有效率的方式，因为他们精通线性代数、概率论和统计学。如果从基础知识开始，然后在中间某个地方结束也可以，只要学员想要在这里结束学习。考虑到所有这些事实，我认为初学者的人工智能教程应该从基础知识开始，并以一个实际的人工智能项目结束。这个项目可能很小，但是在相同任务上它将会超越任何传统项目。

本系列将从最基础的知识讲到中等水平内容。除了讨论人工智能，我还希望对相关的话题进行一些澄清，因为人们对人工智能、机器学习、数据科学等术语有很多困惑。人工智能程序是必要的，因为我们每天会产生海量的数据。根据互联网上查询到的结果，我们每天大约会产生 2.5x10 18 字节的数据。但是，这些数据中的大多数与我们完全无关，包括大量没有价值的 YouTube 视频，不经思考就发送的电子邮件，琐碎的新闻报道等等。然而，这片浩瀚的数据海洋中同样蕴含着无价的宝贵知识。传统软件无法完成处理这些数据的艰巨任务。人工智能是少数能够应对这种信息过载的技术之一。

当谈到到人工智能时，我们还需要区分事实和假象。我记得几年前听一位人工智能专家的演讲。他讲述了一个人工智能图像识别系统，它能近乎绝对准确地分辨西伯利亚雪橇犬和西伯利亚雪狼的图像。在互联网上搜索一下，你会看到这两种动物有多么相似。如果这个系统确实那么准确，它将是人工智能的奇迹。可惜的是，事实并非如此。该图像识别系统只是对图像的背景进行了分类。西伯利亚雪橇犬是家养动物，它的图像背景中几乎总会有一些矩形或圆形的物体。而西伯利亚雪狼是野生动物，它所在的背景中有雪。这些例子导致近年来人们对人工智能提出了准确性担保要求。

确实，最近几年人工智能展现了一些真正的力量。举个简单例子就是 YouTube、Amazon 等网站的推荐系统。很多时候我惊讶于它们的推荐结果，就好像它们会读心术一样。然而不论这些推荐的质量如何，“人工智能到底是好是坏？”都是一个很热门话题。我认为，一个像《终结者》中机器有意识地攻击人类的未来还遥遥无期。然而，前面那句话中的“有意识地”一词非常重要。目前的人工智能系统可能发生故障，并且意外地伤害到人类。但是，许多号称具有人工智能能力的系统实际上只是包含大量分支和循环的常规软件。因此目前可以安全地说，我们还没有在日常生活中看到人工智能的真正威力。不论是好的影响（如治愈癌症），还是坏的影响（合成的世界领导人视频导致的暴动和战争），我们都只能拭目以待了。就个人而言，我相信人工智能是一种福祉，并将大大提高未来几代人的生活质量。

### 什么是人工智能？

在我们进一步探讨之前，让我们试着理解人工智能（AI）、机器学习（ML）、深度学习（DL）、数据科学（DS）等之间的联系和区别。这些术语经常被误用为同义词。图 1 表示了人工智能、机器学习、深度学习和数据科学之间的关系。当然这不是唯一的划分方式，你可能会看到其它的划分图。但在我看来，图 1 是最贴切的，它能够最大程度地概括这些领域之间关系。

在本系列的第一篇文章中，我不会对每个术语定义进行精确的定义。我认为在现阶段，精确地定义它们是适得其反的，是浪费时间。但在后续的文章中，我们将重新讨论这些术语并正式定义它们。目前我们可以暂时把人工智能看作是可以在某种程度上模仿人类智能的程序。那人类智能又是指什么呢?

想象一下你的人工智能程序是一个一岁大的婴儿。这个宝宝会通过听周围人说话来学习母语。他/她将很快学会识别形状，颜色，物体等，没有任何困难。此外，他/她将能够对周围人的情绪做出反应。例如，任何一个三岁的婴儿都知道如何用甜言蜜语让父母给他/她巧克力和棒棒糖。同样，人工智能程序也将能够感知并适应环境，就像婴儿一样。然而，这种真正的人工智能只能在遥远的未来实现。

图 1 显示机器学习是人工智能的真子集，它也是实现人工智能系统的技术之一。机器学习是使用大量数据来训练程序的技术，以便有效地执行必要的任务。它的准确性随着训练集的增大而增加。请注意，还有其它技术用于开发人工智能系统，如基于布尔逻辑的系统，基于模糊逻辑的系统，基于遗传编程的系统等。然而，如今机器学习是实现人工智能系统的最主流的技术。图 1 还显示深度学习是机器学习的真子集，它只是众多机器学习技术中的一种。但目前实际上大多数严肃的机器学习技术都用到了深度学习。在这一点上，我甚至避免尝试定义深度学习。请记住，深度学习涉及到使用大型人工神经网络。

那数据科学（图 1 中的红圈）是做什么的呢？数据科学是计算机科学/数学领域中的一门处理和解读大规模数据的学科。我说的“大”，有多大呢？早在 2010 年，Facebook 等一些企业巨头就声称它们的服务器可以处理几 Pb 的数据。当我们说大数据时，通常指的是 Tb 或 Pb 级的数据规模，而不是 Gb 级的。许多数据科学应用涉及人工智能、机器学习和深度学习技术的使用。因此，当我们讨论人工智能时，很难不提到数据科学。数据科学也使用很多传统的编程和数据库管理技术，比如使用 Apache Hadoop 进行大数据分析。

本系列的讨论将主要集中在人工智能和机器学习上，并涉及数据科学。

### 教学环境搭建

在表明了本系列文章的主题后，现在说说本教程的前置条件。你需要一台 Linux 电脑（当然 Windows 或 macOS 机器也可以，只是在一些安装步骤上可能需要额外的协助），并了解基本的数学和计算机编程知识。我希望在细心地阅读本系列文章后，你会感受到人工智能的强大。

用编程语言无关的方式来学习人工智能是可能的，但本系列将基于一门编程语言并涉及大量的编程。在决定使用哪一门编程语言之前，我们先来回顾一下人工智能、机器学习、深度学习和数据科学领域流行的编程语言。Lisp 是一种函数式编程语言，它是最早用于开发人工智能程序的语言之一。Prolog 是一种逻辑编程语言，在 20 世纪 70 年代也被用于同样的目的。我们将在接下来的介绍人工智能历史的文章中更详细地介绍 Lisp 和 Prolog。

如今，Java、C、C++、Scala、Haskell、MATLAB、R、Julia 等编程语言也被用于开发人工智能程序。Python 在人工智能程序开发中被广泛使用，这使我们选择它作为本教程的编程语言。但我必须声明，从这里开始做的选择（更确切地说，是我替你做的选择），主要考虑的因素是易用性、受欢迎程度、（在少数情况下）我自己对该软件/技术的适应和熟悉程度、对本教程效率的提升。但同时，我也鼓励你尝试其它的编程语言、软件和工具。也许从长远来看，它们对你来说可能是更好的选择。

现在我们需要立即做出另一个选择：使用 Python 2 还是 Python 3？考虑到本系列有许多年轻的读者，他们还有漫长的职业生涯，我将选择使用 Python 3。在 Ubuntu 系统终端中执行命令 `sudo apt install python3` 安装最新版本的 Python 3（你的系统中可能已经安装了 Python 3）。在其它 Linux 发行版、Windows 和 macOS 机器上安装 Python 3 也非常容易。执行下面的命令查看安装的 Python 3 的版本:

```
python3 --version
Python 3.8.10

```

在后续的教程中，我们需要安装许多 Python 包，所以需要一个包管理器。目前主流的包管理器有 pip、Conda 和 Mamba 等。我选择 pip 作为包在本教程的管理器。它相对简单，也是推荐的 Python 安装工具。我认为 Conda 和 Mamba 是比 pip 更强大的工具，你可以尝试一下它们。运行命令 `sudo apt install python3-pip` 将在 Ubuntu 系统中安装 pip。pip、Conda 和 Mamba 是跨平台软件，它们可以安装在 Linux、Windows 和 macOS 系统上。运行命令 `pip3 --version` 查看系统中安装的 pip 版本，如下所示:

```
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)

```

现在我们需要一个 Python 集成开发环境（IDE）。IDE 能帮助程序员更容易地编写、编译、调试和执行代码。PyCharm、IDLE、Spyder 等都是流行的 Python IDE。然而，由于我们的主要目的是开发人工智能和数据科学程序，这里考虑另外两个强有力的竞争者 —— JupyterLab 和谷歌 Colab。严格地说，它们不仅仅是 IDE；它们是非常强大的基于网络的交互式开发环境。两者都可以在网络浏览器上工作，并提供强大的功能。JupyterLab 是由非营利组织 Project Jupyter 支持的免费开源软件。谷歌 Colab 遵循 <ruby> 免费增值 <rt>  freemium </rt></ruby> 模式，即基本功能免费，附加功能收费。我认为谷歌 Colab 比 JupyterLab 功能更强大。但是由于谷歌 Colab 的免费增值模式，以及我相对缺乏谷歌 Colab 的使用经验，在本教程中我选择 JupyterLab。但我仍然强烈建议你去了解一下谷歌 Colab。

可以使用命令 `pip3 install JupyterLab` 在本地安装 JupyterLab。执行命令 `jupyter-lab` 将在系统的默认网络浏览器中运行 JupyterLab。Project Jupyter 还提供一个更老的类似系统，称为Jupyter Notebook。可以通过 `pip3 install Notebook` 命令在本地安装 Jupyter Notebook，用`Jupyter Notebook` 运行它。但 Jupyter Notebook 的功能不如 JupyterLab 强大，且官方宣布它最终会被 JupyterLab 取代。在本教程中，我们将在合适的阶段使用 JupyterLab。但在开始阶段，我们将使用 Linux 终端来运行 Python 程序，因此急需的是包管理器 pip。

Anaconda 是一个非常流行的 Python 和 R 编程语言发行版，它主要用于机器学习和数据科学领域。作为未来的人工智能工程师和数据科学家，熟悉使用 Anaconda 也是一个不错的选择。

现在我们需要确定最重要的一点 —— 本教程的风格。有大量人工智能开发相关的 Python 库，比如 NumPy、SciPy、Pandas、Matplotlib、Seaborn、TensorFlow、Keras、Scikit-learn 和 PyTorch。许多关于人工智能、机器学习和数据科学的教材和教程都是基于对其中一个或多个库的完整讲解。尽管对特定包的功能进行这样的覆盖讲解是一种高效的方式，但我的教程是更面向数学的。我们将首先讨论开发人工智能程序所需的数学概念，然后再介绍需要的 Python 基础知识和 Python 库。我们会为了探索实现这些数学概念所需的特性而不断回顾这些 Python 库。有时我也会要求你自己学习一些 Python 和数学的基本概念。

在完成这些准备工作之后，如果我们就在这里结束，任何代码或数学概念都不讲，那将是一种罪过。因此，我们将继续学习人工智能和机器学习中最重要的数学概念：向量和矩阵。

#### 向量和矩阵

矩阵是按行和列排列的数字、符号或数学表达式构成的矩形阵列。图 2 显示了一个 2 × 3 矩阵，它有 2 行和 3 列。如果你熟悉编程，在许多流行的编程语言中这个矩阵可以表示为一个二维数组。只有一行的矩阵称为行向量，只有一列的矩阵称为列向量。  就是一个行向量。

为什么矩阵和向量在人工智能和机器学习中如此重要呢？人工智能和机器学习中广泛使用线性代数，而矩阵和向量是线性代数的核心。几个世纪以来，数学家们一直在研究矩阵和向量的性质和应用。高斯、欧拉、莱布尼茨、凯利、克莱姆和汉密尔顿等数学家在线性代数和矩阵论领域都有以他们的名字命名的定理。多年来，线性代数中发展出了许多分析矩阵和向量性质的技术。

复杂的数据通常可以很容易用向量或矩阵来表示。举一个简单的例子，从一个人的医疗记录中，可以得到详细的年龄、身高（厘米）、体重（公斤）、收缩压、舒张压和空腹血糖（毫克/分升）。这些信息可以很容易用行向量来表示，  。人工智能和机器学习的第一个挑战来了：如果医疗记录有十亿条怎么办？即使动用成千上万的专业人员从中手动提取数据，这项任务也是无法完成的。因此，人工智能和机器学习利用程序来提取数据。

人工智能和机器学习的第二个挑战是数据解读。这是一个广阔的领域，有许多技术值得探索。我将在后续文章中介绍相关内容。人工智能和机器学习应用除了面临数学/计算方面的挑战外，还面临硬件方面的挑战。随着处理的数据量的增加，数据存储、处理器速度、功耗等也成为人工智能应用面临的重要挑战。但现在让我们先抛开这些挑战，动手编写第一行人工智能代码。

我们将编写一个简单的 Python 脚本，用来将两个向量相加。我们将用到名为 NumPy 的 Python 库，它支持多维矩阵（数组）的数学运算。用命令 `pip3 install numpy` 为 Python 3 安装 NumPy 包。如果你使用的是 JupyterLab、谷歌 Colab 或 Anaconda，那么 NumPy 应该已经被预安装了。但是为了演示，在本系列的前几篇文章中，我们都将在 Linux 终端上操作。在 Linux 终端上执行命令  `python3` 进入 Python 控制台。在这个控制台中可以逐行执行 Python 代码。图 3 展示了在控制台中逐行运行 Python 代码，将两个向量相加，并输出结果。

首先，让我们试着逐行理解这些代码。由于本教程假定的编程经验很少，所以我将代码行标记为【基本】或【AI】。标记为【基本】的行是经典 Python 代码，标记为【AI】的行是用于开发人工智能程序的代码。通过区分基本和进阶的 Python 代码，我希望具有基本知识和中级编程技能的程序员都能够高效地使用本教程。

```
import numpy as np         #【基本】
a = np.array([11, 22, 33]) #【AI】
b = np.array([44, 55, 66]) #【AI】
c = np.add(a, b)           #【AI】
print(c)                   #【基本】

```

`import numpy as np` 导入 numpy 库并将其命名为 `np`。Python 中的 `import` 语句类似于在 C/C++ 用 `#include` 来包含头文件，或者在 Java 中用`import` 来使用包。

`a = np.array([11, 22, 33])` 和 `b = np.array([44, 55, 66])`  分别创建了名为 `a` 和 `b` 的一维数组（为了便于理解，目前假设向量等价于一维数组）。

`c = np.add(a, b)` 将向量 `a` 和`b` 相加，并将结果存储在名为 `c` 的向量中。当然，用 `a`，`b`，`c` 作为变量名是一种糟糕的编程实践，但数学家倾向于将向量命名为 、 、  等。如果你完全没有 Python 编程经验，请自行了解 Python 变量的相关知识。

`print(c)` 在终端上打印对象的值，即向量 `[55 77 99]`。你可以暂时这样理解向量相加, `c = [55=11+44 77=22+55 99=33+66]`。如果你想正式地了解向量和矩阵是如何相加的，但手头又没有相关的教材，我建议阅读维基百科上关于矩阵加法的文章。在网上搜索一下就会发现，用经典的 C/C++ 或 Java 程序来实现向量相加需要更多的代码。这说明 Python 很适合处理向量和矩阵。当我们执行越来越复杂的向量运算时，Python 的强大将进一步显现。

在我们结束本文之前，我要做两个声明。第一，上面讨论的示例只处理了两个行向量（确切地说是 1 x 3 的矩阵）的相加，但真正的机器学习应用可能要处理 1000000 X 1000000 的矩阵。但不用担心，通过练习和耐心，我们将能够处理这些问题。第二，本文中给出许多定义包含了粗略的简化和不充分的描述。但如前面所说，在本系列结束之前，我将给这些模糊的术语下一个正式的定义。

现在我们该结束这篇文章了。我希望所有人都安装文中提到的必要软件，并运行本文中的代码。在下一篇文章中，我们将首先讨论人工智能的历史、范畴和未来，然后深入探讨线性代数的支柱——矩阵论。

*（题图：MJ/25071901-abc4-4144-bf27-4d98bb1d9301/）*

---

via: <https://www.opensourceforu.com/2022/08/artificial-intelligence-explaining-the-basics/>

作者：[Deepu Benson](https://www.opensourceforu.com/author/deepu-benson/) 选题：[lkxed](https://github.com/lkxed) 译者：[toknow-gh](https://github.com/toknow-gh) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Geany 2.0 发布使其成为更通用的文本编辑器和 IDE

Summary: Geany 2.0 带来了新的文件类型和其他改进。

一直以linux上用的编辑器都是geany,简单直觉不占资源.

Geany 2.0 带来了新的文件类型和其他改进。

# Geany 2.0 发布使其成为更通用的文本编辑器和 IDE

>
> Geany 2.0 带来了新的文件类型和其他改进。
>
>
>

[Geany](https://www.geany.org/) 被认为是 [Linux 上最好的 Python IDE](https://itsfoss.com/best-python-ides-linux/) 之一，它是**一个基于 GTK3 工具包的开源、轻量级 IDE**。

考虑到 Geany 的功能集对各种用户的吸引力，它也可以算作 [Linux 上 Notepad++ 的替代品](https://itsfoss.com/notepad-alternatives-for-linux/)之一。

现在，新版本已以 “**Geany 2.0**” 的形式推出，提供了许多改进。

让我们看看有什么。

### ? Geany 2.0：有什么新变化？

Geany 版本的亮点可以分为两个不同的部分，主要涵盖界面和对文件类型的更好支持。

#### 文件类型升级

通过更新 [基本类型](https://kotlinlang.org/docs/basic-types.html)，改进了 **Kotlin** 的文件类型配置。同样，对于 **Python** ，针对 Python 3 重写了标准库标签创建脚本，并改进了对 **ctags** 文件格式的支持。

最后，Geany 添加了对 [AutoIt](https://en.wikipedia.org/wiki/AutoIt) 和 [GDScript](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/index.html) 等新文件类型的\*\*支持，并更新了 **Nim** 和 **PHP** 的文件类型配置，以解决一些长期存在的问题。

#### 界面改进

Geany 2.0 在文档列表的侧边栏中提供了**新的树视图**。它是默认启用的，因此你无需执行任何操作。

当你有大量单独的文件需要检查时，它非常实用。你还可以折叠特定文件夹以最大程度地减少混乱。

**编译器消息现在使用深色主题友好的颜色**，以便你可以轻松阅读消息。这在深夜编码时应该很有帮助。

此外，**一个新的确认对话框**添加到整个会话的“搜索和替换”功能中，并且**添加了一个选项以在符号树中显示符号**，而无需类别组。

#### ? 其他变化

除了上述内容之外，还有一些值得注意的变化：

* Geany 现在需要 GTK 3.24。
* 你现在可以滚动文档选项卡。
* 更新了多种语言的翻译。
* 修复了文件类型更改时的关键词着色问题。
* 现在默认启用“更改历史记录”功能。

有关此版本的更多详细信息，你可以浏览[官方发行说明](https://www.geany.org/documentation/releasenotes/)。

### ? 下载 Geany 2.0

由于它是 **跨平台 IDE**，Geany 2.0 可用于 **Linux**、**Windows** 和 **macOS**。你可以前往 [Flathub 商店](https://flathub.org/apps/org.geany.Geany)或其 [官方网站](https://www.geany.org/download/releases/)下载你选择的包。

>
> **[Geany](https://www.geany.org/download/releases/)**
>
>
>

如果你对源代码感兴趣，你还可以访问其 [GitHub 仓库](https://github.com/geany/geany)。

---

via: <https://news.itsfoss.com/geany-2-0/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #1169 KDE 桌面立方体效果回归

Summary:
? KDE 桌面立方体效果回归
? 恶意软件伪装成挖矿软件感染了 100 多万台机器
? 被惠普解雇的 40 岁以上员工们赢得 1800 万美元赔偿
»
»

还是很喜欢Compiz，第一次对linux有感觉的时候，还是看到Compiz的旋转效果，比当时的windows好看多了！

“正因为杀毒软件将很多挖矿软件视为<非法>”  <合法>？

来自117.136.89.144的 Chrome Mobile 117.0|Android 13 用户

compiz还活着呢

# 硬核观察 #1169 KDE 桌面立方体效果回归

### KDE 桌面立方体效果回归

KDE 开发者发布了最新的进展，值得注意是的，KDE 桌面立方体效果已经回归，这一定会勾起 Linux 老用户对 Compiz/Beryl 的回忆。除此以外，KDE Plasma Wayland 现在支持每屏色彩管理，可以为每个屏幕分配 ICC 颜色配置文件。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/KDE-Wayland-Color-Mgmt)**
>
>
>

>
> 老王点评：当年的 Compiz 桌面效果多炫啊，不知道为什么突然就消失了，我还是很怀念的。
>
>
>

### 恶意软件伪装成挖矿软件感染了 100 多万台机器

卡巴斯基报告说，自 2016 年以来，这个名为 StripedFly 的功能强大的恶意软件 ，将自己伪装成一个普通的加密货币挖矿软件，已经感染了全球 100 多万台 Windows 和 Linux 计算机。这个恶意软件采用了一种新颖的方法，即添加一个加密货币挖掘模块，以防止防病毒系统发现该恶意软件的全部功能。

>
> **[消息来源：PCMag](https://www.pcmag.com/news/powerful-malware-disguised-as-crypto-miner-infects-1m-plus-windows-linux)**
>
>
>

>
> 老王点评：正因为杀毒软件将很多挖矿软件视为非法，才让非法软件利用了挖矿软件。
>
>
>

### 被惠普解雇的 40 岁以上员工们赢得 1800 万美元赔偿

经过七年多的法律诉讼，一群声称惠普在裁员时歧视年长员工的前惠普员工赢得了总计 1800 万美元的赔偿。惠普已同意拿出上一季度一天多的利润总和，以解决这起由 40 岁以上员工提起的集体诉讼案。原告每人将获得 5 万多美元的赔偿，不过扣除各种律师费等开支后将缩水至最低 1.5 万美元。

>
> **[消息来源：The Register](https://www.theregister.com/2023/10/27/hp_age_discrimination/)**
>
>
>

>
> 老王点评：虽然不多，但是我们的 35 岁以上的老员工也争取不到。
>
>
>


Moosync：一款充满特色的开源音乐播放器

# Moosync：一款充满特色的开源音乐播放器

>
> Moosync 音乐播放器是一个适用于本地收藏与流媒体音乐的魅力十足的跨平台应用。
>
>
>

想听好音乐吗？?

首次亮相的**跨平台开源音乐播放器 Moosync** ，希望成为“欢迎全社区参与”的音乐播放器。

过去我们曾介绍过像 [Harmonoid](https://itsfoss.com/harmonoid/) 和 [MusicPod](https://news.itsfoss.com/musicpod/) 这样的应用，但是它们**主要是专注于离线使用**。

与之不同的是，Moosync 的独特之处。让我告诉你为什么。

### Moosync：概况 ⭐

Moosync 是一个主要基于 **Vue** 和 **TypeScript** 编程语言开发的音乐播放器。

Moosync **高度可定制**且支持 [YouTube](https://www.youtube.com/)、[Spotify](https://open.spotify.com/) 以及 [LastFM](https://www.last.fm/) 等多种服务。其关键特性包含：

* 支持显示歌词
* 无广告播放
* 支持本地音乐文件

#### 初次体验 ??

在我在我的 Ubuntu 系统上安装它之后，我开始了**快速设置向导**。

首先设定我的音乐库的位置，它将会从此处获取本地音乐文件，过程包含了许多步骤。

然后，显示了**可以连接的服务选项**。

我**试图连接我的 Spotify 账户**，然而尽管我向 Moosync 提供了需要的信息，**操作无法成功**。不过幸运的是，**这一步并非必要**，所以我选择跳过。

随后，它显示了空白的 “<ruby> 所有歌曲 <rt>  All Songs </rt></ruby>” 标签页，由于目前我未连接任何服务或者本地文件，所以这里是空的。

考虑我没有本地音乐或 Spotify 音乐，我点击了 YouTube 过滤器并**搜寻我喜欢的曲目**以填充 Moosync。

搜索功能还包括歌曲、艺术家、播放列表和专辑的过滤器。

我可以以右键点击单曲，并添加至播放队列或者立即播放。除此之外还有其他选项，会有所不同。

我在 Spotify 数据库进行搜索时，尝试做相同操作，但不幸的是，我**必须要登录 Spotify 才能在 Moosync 使用它** 这一计划之前被搁置。

>
> ? 如果你在寻找更好的 Spotify 支持，我建议你尝试一下 [BlackHole](https://news.itsfoss.com/blackhole-music-app/) 这个音乐应用。
>
>
>

而我选择继续，去**了解这个音乐播放器**。进入 “<ruby> 队列 <rt>  Queue </rt></ruby>” 标签页或者点击应用程序右下角向上指向的箭头都可以访问它。

整齐的布局使人感到熟悉和舒适。

在 “<ruby> 所有歌曲 <rt>  All Songs </rt></ruby>” 标签页，我添加进 Moosync 的所有歌曲都在这，我可以**选择从列表开头播放**，或者**添加到当前队列**，甚至可以在其中**随机播放 100 首歌曲**。

在 “<ruby> 播放列表 <rt>  Playlists </rt></ruby>” 标签页，我保存的所有来自 YouTube 的播放清单都在这。它还提供了本地文件和 YouTube 间的排序选项。

在 “<ruby> 专辑 <rt>  Albums </rt></ruby>” 标签页，我保存的所有专辑都以一个整齐的网格布局排列。

类似的，“<ruby> 艺术家 <rt>  Artists </rt></ruby>” 标签页展示了我添加到 Moosync 库的艺术家。出于某种原因，它没有加载缩略图。

“<ruby> 类别 <rt>  Genres </rt></ruby>” 标签页我也跳过了，因为它**似乎不能正常工作**。

最后是 “<ruby> 探索 <rt>  Explore </rt></ruby>” 标签页，这里显示了我**听过多少分钟的音乐**。

此外，**你可以在 Moosync 中找到许多有用的自定义设置**来优化你的使用体验。

首先在 “<ruby> 主题 <rt>  Theme </rt></ruby>”设置中，你可以在**三个主题**和**两种布局视图**中选择，还有选项**上传或设计自定义主题**。

应用还有**许多扩展**，一种是**在 Discord 上开启丰富的存在支持**，另一种是**与 Soundcloud 集成**，此外还有很多。

显然，**Moosync 支持键盘快捷方式**，你可以根据个人的喜好进行设置。

在我写这篇文章的时候，Moosync 这里和那里都有一些小瑕疵，但我认为它作为 [最适合 Linux 的音乐播放器之一](https://itsfoss.com/best-music-players-linux/) 的竞争者非常有竞争力。

### ? 下载 Moosync

Moosync 适用于 **Linux**，**Windows** 以及 **macOS**。你可以在其[官方网站](https://moosync.app/)下载你需要的安装包。

>
> **[Moosync](https://moosync.app/)**
>
>
>

**对于 Linux 用户**，你也可以在 [**Flathub 商店**](https://flathub.org/apps/app.moosync.moosync)，[**Snap 商店**](https://snapcraft.io/moosync) 和 [**AUR**](https://aur.archlinux.org/packages/moosync) 下载 Moosync。

你还可以浏览他们的 [GitHub 仓库](https://github.com/Moosync/Moosync)，获取源代码以及更多信息。

? 对这款应用有何看法？欢迎在评论区告诉我。

---

via: <https://news.itsfoss.com/moosync/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #1170 微软的人工智能投资稳定了其云业务

Summary:
? 微软的人工智能投资稳定了其云业务
? 苹果推出了三年的私人 Wi-Fi 一直未能隐藏地址
? Linux Mint 将获得 Wayland 试验性支持
»
»

# 硬核观察 #1170 微软的人工智能投资稳定了其云业务

### 微软的人工智能投资稳定了其云业务

据报道，微软在生成式人工智能方面的投资开始促进销售，最明显的是扭转了公司重要的云计算产品增长放缓的趋势。微软向推出了 ChatGPT 的 OpenAI 建立了合作伙伴关系，并向其投资了 130 亿美元，因此微软被许多公司视为领先的人工智能供应商。财报显示，微软的旗舰云计算产品 Azure 增长了 29%，高于上一季度的 26%。微软 CEO 称，超过 1.8 万家企业正在使用微软的 Azure OpenAI 服务，这其中包括以前没有使用过 Azure 的客户。但是，虽然微软在必应搜索引擎中集成了人工智能驱动的聊天机器人，但 “没有证据” 表明必应的搜索市场份额有实际增长。

>
> **[消息来源：《纽约时报》](https://www.nytimes.com/2023/10/24/technology/microsoft-quarterly-results.html)**
>
>
>

>
> 老王点评：操作系统业务不好时，投资云计算；云业务缺少增长点时，投资人工智能。
>
>
>

### 苹果推出了三年的私人 Wi-Fi 一直未能隐藏地址

如果设备在所有网络中始终使用相同的 Wi-Fi MAC 地址，该地址就很容易与设备的网络活动和位置联系起来。私人 Wi-Fi 地址旨在通过为每个不同的 Wi-Fi 网络生成不同的 MAC 地址来避免这种跟踪。但苹果从 2020 年 9 月推出该功能以来，一直未能真正隐藏 MAC 地址，原因是与苹果 Bonjour 网络协议相关的 mDNSResponder 进程存在漏洞。安全专家发现，当 iPhone 加入一个网络时，它会发送组播请求以发现网络中的 AirPlay 设备。在这些请求中，iOS 会发送设备的真实 Wi-Fi MAC 地址。

>
> **[消息来源：The Register](https://www.theregister.com/2023/10/27/apple_private_wifi_fixed)**
>
>
>

>
> 老王点评：百密一疏，隐藏了三年的 MAC 地址，其实一直在偷偷泄露。
>
>
>

### Linux Mint 将获得 Wayland 试验性支持

Linux Mint 是最后一个仅支持 X11 的重要 Linux 桌面之一，它正开始发生变化。计划于 2023 年圣诞节发布的 Linux Mint 21.3 将是第一个提供 Wayland 会话的 Linux Mint 发行版，但还处于试验状态，其默认会话仍将是 X11 会话。开发者认为 Linux Mint 在 2026 年 23.x 发布之前，不需要 Wayland 支持。“Wayland 会话不会像默认会话那样稳定。它将缺少一些功能，也有自己的局限性”，也就是说还需要几年的时间来完善。

>
> **[消息来源：9to5linux](https://9to5linux.com/linux-mint-21-3-to-ship-with-cinnamon-6-0-and-experimental-wayland-support)**
>
>
>

>
> 老王点评：从反馈来看，全面迁移 Wayland 确实在很多方面都没做好准备。
>
>
>


开源与 “半开源” 之间的战争和软件的历史一样久远

Summary: HashiCorp 放弃开源原则这件事并无新意。

macOS的底层（Darwin）是部分开源的，现在也是，GUI则是专有的。虽然只有部分开源，总比完全闭源的Windows好，当然它们都很封闭。

PC上还在争开源与半开源，嵌入式表示都是弟弟，你不拿到我的源代码怎么知道我违反了开源协议？

特征字节？编译信息？都是笑话。。。。

说到半开源，安卓肯定算半个，现在的 AOSP 已经半残废

不能这样说，它的做法虽然让人不满，但是都符合开源许可证。

HashiCorp 放弃开源原则这件事并无新意。

# 开源与 “半开源” 之间的战争和软件的历史一样久远

<img src="content_image/album_202310_30_102124xk99zn7vaw997564.jpg" alt="" title="">

>
> HashiCorp 放弃开源原则这件事并无新意。
>
>
>

在加利福尼亚蒙特利召开的 <ruby> Linux 基金会成员峰会 <rt>  Linux Foundation Members Summit </rt></ruby> 上，最受关注的议题是人工智能和开源。而第二重要的话题涉及到 HashiCorp 放弃 Terraform 的 <ruby> Mozilla 公共许可证 <rt>  Mozilla Public License </rt></ruby>（MPL），转而采用 <ruby> 商业源代码许可证 <rt>  Business Source License </rt></ruby>（BSL）1.1，以及由此引发的 OpenTofu 项目复刻。因 Linux 基金会对 OpenTofu 项目的支持，HashiCorp 的 CEO David McJannet 表现出极度的不满。

关于许可证切换、源代码复刻以及由此产生的争议，火热的讨论并未减少。但在我看来，有一点被人们忽视：人们一直误认为这是新鲜事物，实则不然。

之前已经有过不止一次，甚至不止十次，公司将开源代码转变为专有程序，或者隐藏在一个专有的包装中。

首先，人们经常拿走开源代码，但却抹去其许可证信息，然后就此继续下去。虽然这并不一定构成窃取行为，实际上，有些许可证，比如 MIT 许可证和两句版 BSD 许可证，完全允许公司和开发者在他们的专有程序中使用这些代码。例如，我们都熟知以下基于 MIT 许可证的程序，比如 Angular、.NET、Node.js、Ruby on Rails 和 React。

其次，有一些程序最初以开源的形式开始，但随着时间的推移，原始所有者和许可证规则发生了变化，以至于许多人甚至都不知道它们曾经是开源的。举例来说，苹果公司的 macOS 就是其中的一个典型。

你是否知道 macOS 曾经是开源的？确实，它曾经是。

macOS 的核心基于 Darwin，这是一种 Unix 操作系统。<ruby> 史蒂夫·乔布斯 <rt>  Steve Jobs </rt></ruby> 回归苹果公司时，引入了他的基于 Unix 的 NeXTStep 操作系统。到了 2000 年，苹果公司逐步放弃了他们的经典 Mac 操作系统，转而支持 macOS Darwin。除了来自 NeXTStep 的部分，Darwin 还大量借鉴了开源的 FreeBSD 和 Mach 操作系统的设计。

如今，如果你深入研究，仍然可以在 macOS 中找到 Darwin，它在 <ruby> 苹果公共源代码许可证 <rt>  Apple Public Source License </rt></ruby> 2.0 下开源。虽然还有一项名为 PureDarwin 的工作正在努力制作一个独立的 Darwin 操作系统，但进展甚微。在这个过程中，苹果公司巧妙地减弱了一个重要的开源操作系统的影响力。更为常见的方式是开源软件以 “<ruby> 开放核心 <rt>  open core </rt></ruby>” 的方式融入商业程序中。简而言之，开放核心，与开源不同的是，这是一种商业模式。在这种模式中，公司基于一个免费的、开源的核心程序，然后通过加入商业版本或者专有的附加组件来发展。

此术语由 Andrew Lampitt 在 2008 年提出，虽然代表的并不是一个新的概念。他提出这个术语是为了替代混乱的术语 “<ruby> 双重许可 <rt>  dual licensing </rt></ruby>”。这个命名更改是为了 “消除误解，推广一个对于开源社区、付费客户和供应商都有利的商业模式”。同时，其目标也是为了消解我们现在在 HashiCorp 看到的 “<ruby> 诱捕并切换 <rt>  bait and switch </rt></ruby>” 类似的争议。

尽管我们可以辩论这是否是一个 “出色的商业模式”，但无可争议的是它已经成为一个非常流行的模式。然而，近年来，我们看到的趋势是，许多企业从开放核心模式退回到 <ruby> 源码可得 <rt>  source-available </rt></ruby> 模式。在源码可得模式下，你可以查看所有的代码，但在某些情况下你不能修改或使用它。

例如，MongoDB [创建](https://www.theregister.com/2018/10/16/mongodb_licensning_change/) 了一种非开源许可证，即 <ruby> 服务端公共许可证 <rt>  Server Side Public License </rt></ruby>（SSPL），以应对那些通过提供自托管版本和服务从其代码中获利的超级云计算公司。

并非只有 MongoDB 做出了这样的决定。Elastic 在开源核心模型运作的很好，但当亚马逊 AWS 等公司通过提供 ElasticSearch 服务赚取巨额利润时，Elastic 在 2021 年做出了 [策略调整](https://www.theregister.com/2021/01/21/aws_not_ok_says_elastic/)。它放弃了开源的 Apache 2.0 许可，转而采用非开源的 SSPL 和 Elastic 许可证。

Elastic 和其他几家公司（如 Redis 等）的此类做法，主要目的是阻止云服务公司将他们的开源程序作为一种服务而提供。然而，这个做法反过来对 Elastic 产生了负面影响，因为 AWS 对这个项目进行了 [复刻](https://www.theregister.com/2021/04/13/aws_renames_elasticsearch_fork_opensearch/)。这一切是否让你想起了 HashiCorp？是吧。

尽管这些向非开源许可的转变惹怒了一些用户和很多开发者，但这些公司的业绩仍表现相对稳定。你可能对此感到不满，但事实是，对于这些公司来说，这种转变在一定程度上取得了成功。

接着，我们来看红帽公司的情况。红帽公司对其红帽企业 Linux（RHEL）代码的使用 [施加了限制](https://www.theregister.com/2023/06/23/red_hat_centos_move/)，只允许其客户使用。几十年来，红帽公司一直在权衡作为开源领导者与处理 RHEL 克隆产品（例如 CentOS，以及最新的 AlmaLinux 和 Rocky Linux）的关系。

随着时间的推移，红帽公司对与他人共享其代码表现出越来越大的犹豫。现在，你可以（且很多人确实正在这么做）辩论红帽公司不再是一个真正的开源公司。批评者认为，红帽公司虽然仍然严格遵守 GNU 通用公共许可证（GPL）的条款，但已经失去了开源精神。

虽然 RHEL 和与其相关的一系列程序仍在产生可观的利润，但红帽公司希望能够从中获取更多的收益，因此，它也开始逐步偏离开源原则。

实际上，所有这些案例的共同之处在于：对更大财富的欲望。如圣经所言，“贪财是万恶之根”。我不确定这一句话的真假，但我确实知道，对金钱的热爱和开源原则很难两全。

对于从开源软件中赚钱并没有错误之处。<ruby> 理查德·斯托曼 <rt>  Richard M Stallman </rt></ruby>（RMS）曾言：“工作寻求报酬，或者寻求尽可能增加收入，这并没有错，只要不采用破坏性的方式即可。” 然而，在 RMS 看来，“通过限制它们的使用来从程序的用户中挤取金钱，是一种破坏行为。”

尽管在现今开源软件与商业实践交汇的情况下，RMS 的观点可能并不如过去那样深受欢迎，但他仍然拥有众多的支持者。

*（题图：MJ/b06e9a62-5c0d-49c5-a7b3-fd5af60ac0b1）*

---

via: <https://www.theregister.com/2023/10/27/open_source_vs_sort_of_open_source/>

作者：[Steven J. Vaughan-Nichols](https://www.theregister.com/Author/Steven-J-Vaughan-Nichols) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](/article-16309-1.html) 荣誉推出


我的一些 nix 学习经验：安装和打包

Summary: 以下是我至今为止学习到的内容, 敬请期待如何进行

「最近，我首次尝试了 Mac。直至现在，我注意到的最大缺点是其软件包管理比 Linux 差很多。一段时间以来，我对于 homebrew 感到相当不满，因为每次我安装新的软件包时，它大部分时间都花在了升级上。」

这只能说作者不会用，至少没看文档。homebrew只是会在安装软件时自动更新源（不是软件），可以通过环境变量禁用。

HOMEBREW_AUTO_UPDATE_SECS

Run brew update once every HOMEBREW_AUTO_UPDATE_SECS seconds before some commands, e.g. brew install, brew upgrade and brew tap. Alternatively, disable auto-update entirely with

Alternatively, disable auto-update entirely with HOMEBREW_NO_AUTO_UPDATE.

也可以通过以下命令自动更新源，加上`--upgrade`参数自动升级软件，加上`--cleanup`参数自动清理。

brew autoupdate start <interval seconds>

以下是我至今为止学习到的内容, 敬请期待如何进行

# 我的一些 nix 学习经验：安装和打包

<img src="content_image/album_202310_30_221702nk4a42dglmcgc7lh.jpg" alt="" title="">

最近，我首次尝试了 Mac。直至现在，我注意到的最大缺点是其软件包管理比 Linux 差很多。一段时间以来，我对于 homebrew 感到相当不满，因为每次我安装新的软件包时，它大部分时间都花在了升级上。于是，我萌生了试试 [nix](https://nixos.org/) 包管理器的想法！

公认的，nix 的使用存在一定困惑性（甚至它有自己单独的编程语言！），因此，我一直在努力以最简洁的方式掌握使用 nix，避开复杂的配置文件管理和新编程语言学习。以下是我至今为止学习到的内容, 敬请期待如何进行：

* 使用 nix 安装软件包
* 为一个名为 [paperjam](https://mj.ucw.cz/sw/paperjam/) 的 C++ 程序构建一个自定义的 nix 包
* 用 nix 安装五年前的 [hugo](https://github.com/gohugoio/hugo/) 版本

如同以往，由于我对 nix 的了解还停留在入门阶段，本篇文章可能存在一些表述不准确的地方。甚至我自己也对于我是否真的喜欢上 nix 感到模棱两可 —— 它的使用真的让人相当困惑！但是，它帮我成功编译了一些以前总是难以编译的软件，并且通常来说，它比 homebrew 的安装速度要快。

### nix 为何引人关注？

通常，人们把 nix 定义为一种“声明式的包管理”。尽管我对此并不太感兴趣，但以下是我对 nix 的两个主要欣赏之处：

* 它提供了二进制包（托管在 <https://cache.nixos.org/> 上），你可以迅速下载并安装
* 对于那些没有二进制包的软件，nix 使编译它们变得更容易

我认为 nix 之所以擅长于编译软件，主要有以下两个原因：

* 在你的系统中，可以安装同一库或程序的多个版本（例如，你可能有两个不同版本的 libc）。举个例子，我当前的计算机上就存在两个版本的 node，一个位于 `/nix/store/4ykq0lpvmskdlhrvz1j3kwslgc6c7pnv-nodejs-16.17.1`，另一个位于 `/nix/store/5y4bd2r99zhdbir95w5pf51bwfg37bwa-nodejs-18.9.1`。
* 除此之外，nix 在构建包时是在隔离的环境下进行的，只使用你明确声明的依赖项的特定版本。因此，你无需担心这个包可能依赖于你的系统里的其它你并不了解的包，再也不用与 `LD_LIBRARY_PATH` 战斗了！许多人投入了大量工作，来列出所有包的依赖项。

在本文后面，我将给出两个例子，展示 nix 如何使我在编译软件时遇到了更小的困难。

#### 我是如何开始使用 nix 的

下面是我开始使用 nix 的步骤：

* 安装 nix。我忘记了我当时是如何做到这一点，但看起来有一个[官方安装程序](https://nixos.org/download) 和一个来自 [zero-to-nix.com](http://zero-to-nix.com) 的 [非官方安装程序](https://zero-to-nix.com/concepts/nix-installer)。在 MacOS 上使用标准的多用户安装卸载 nix 的 [教程](https://nixos.org/manual/nix/stable/installation/installing-binary.html#macos) 有点复杂，所以选择一个卸载教程更为简单的安装方法可能值得。
* 把 `~/.nix-profile/bin` 添加到我的 `PATH`
* 用 `nix-env -iA nixpkgs.NAME` 命令安装包
* 就是这样。

基本上，是把 `nix-env -iA` 当作 `brew install` 或者 `apt-get install`。

例如，如果我想安装 `fish`，我可以这样做：

```
nix-env -iA nixpkgs.fish

```

这看起来就像是从 <https://cache.nixos.org> 下载一些二进制文件 - 非常简单。

有些人使用 nix 来安装他们的 Node 和 Python 和 Ruby 包，但我并没有那样做 —— 我仍然像我以前一样使用 `npm install` 和 `pip install`。

#### 一些我没有使用的 nix 功能

有一些 nix 功能/工具我并没有使用，但我要提及一下。我最初认为你必须使用这些功能才能使用 nix，因为我读过的大部分 nix 教程都讨论了它们。但事实证明，你并不一定要使用它们。

* NixOS（一个 Linux 发行版）
* [nix-shell](https://nixos.org/guides/nix-pills/developing-with-nix-shell.html)
* [nix flakes](https://nixos.wiki/wiki/Flakes)
* [home-manager](https://github.com/nix-community/home-manager)
* [devenv.sh](https://devenv.sh/)

我不去深入讨论它们，因为我并没真正使用过它们，而且网上已经有很多详解。

### 安装软件包

#### nix 包在哪里定义的？

我认为 nix 包主仓库中的包是定义在 <https://github.com/NixOS/nixpkgs/>。

你可以在 <https://search.nixos.org/packages> 查找包。似乎有两种官方推荐的查找包的方式：

* `nix-env -qaP NAME`，但这非常缓慢，并且我并没有得到期望的结果
* `nix --extra-experimental-features 'nix-command flakes' search nixpkgs NAME`，这倒是管用，但显得有点儿冗长。并且，无论何种原因，它输出的所有包都以 `legacyPackages` 开头

我找到了一种我更喜欢的从命令行搜索 nix 包的方式：

* 运行 `nix-env -qa '*' > nix-packages.txt` 获取 Nix 仓库中所有包的列表
* 编写一个简洁的 `nix-search` 脚本，仅在 `packages.txt` 中进行 grep 操作（`cat ~/bin/nix-packages.txt | awk '{print $1}' | rg "$1"`）

#### 所有的东西都是通过符号链接来安装的

nix 的一个主要设计是，没有一个单一的 `bin` 文件夹来存放所有的包，而是使用了符号链接。有许多层的符号链接。比如，以下就是一些符号链接的例子：

* 我机器上的 `~/.nix-profile` 最终是一个到 `/nix/var/nix/profiles/per-user/bork/profile-111-link/` 的链接
* `~/.nix-profile/bin/fish` 是到 `/nix/store/afkwn6k8p8g97jiqgx9nd26503s35mgi-fish-3.5.1/bin/fish` 的链接

当我安装某样东西的时候，它会创建一个新的 `profile-112-link` 目录并建立新的链接，并且更新我的 `~/.nix-profile` 使其指向那个目录。

我认为，这意味着如果我安装了新版本的 `fish` 但我并不满意，我可以很容易地退回先前的版本，只需运行 `nix-env --rollback`，这样就可以让我回到之前的配置文件目录了。

#### 卸载包并不意味着删除它们

如果我像这样卸载 nix 包，实际上并不会释放任何硬盘空间，而仅仅是移除了符号链接：

```
$ nix-env --uninstall oil

```

我尚不清楚如何彻底删除包 - 我试着运行了如下的垃圾收集命令，这似乎删除了一些项目：

```
$ nix-collect-garbage
...
85 store paths deleted, 74.90 MiB freed

```

然而，我系统上仍然存在 `oil` 包，在 `/nix/store/8pjnk6jr54z77jiq5g2dbx8887dnxbda-oil-0.14.0`。

`nix-collect-garbage` 有一个更具攻击性的版本，它也会删除你配置文件的旧版本（这样你就不能回滚了）。

```
$ nix-collect-garbage -d --delete-old

```

尽管如此，上述命令仍无法删除 `/nix/store/8pjnk6jr54z77jiq5g2dbx8887dnxbda-oil-0.14.0`，我不明白原因。

#### 升级过程

你可以通过以下的方式升级 nix 包：

```
nix-channel --update
nix-env --upgrade

```

（这与 `apt-get update && apt-get upgrade` 类似。）

我还没真正尝试升级任何东西。我推测，如果升级过程中出现任何问题，我可以通过以下方式轻松地回滚（因为在 nix 中，所有事物都是不可变的！）：

```
nix-env --rollback

```

有人向我推荐了 Ian Henry 的 [这篇文章](https://ianthehenry.com/posts/how-to-learn-nix/my-first-package-upgrade/)，该文章讨论了 `nix-env --upgrade` 的一些令人困惑的问题 - 也许它并不总是如我们所料？因此，我会对升级保持警惕。

### 下一个目标：创建名为 paperjam 的自定义包

经过几个月使用现有的 nix 包后，我开始考虑制作自定义包，对象是一个名为 [paperjam](https://mj.ucw.cz/sw/paperjam/) 的程序，它还没有被打包封装。

实际上，因为我系统上的 `libiconv` 版本不正确，我甚至在没有 nix 的情况下也遇到了编译 `paperjam` 的困难。我认为，尽管我还不懂如何制作 nix 包，但使用 nix 来编译它可能会更为简单。结果证明我的想法是对的！

然而，理清如何实现这个目标的过程相当复杂，因此我在这里写下了一些我实现它的方式和步骤。

#### 构建示例包的步骤

在我着手制作 `paperjam` 自定义包之前，我想先试手构建一个已存在的示例包，以便确保我已经理解了构建包的整个流程。这个任务曾令我头痛不已，但在我在 Discord 提问之后，有人向我阐述了如何从 <https://github.com/NixOS/nixpkgs/> 获取一个可执行的包并进行构建。以下是操作步骤：

**步骤 1：** 从 GitHub 的 [nixpkgs](https://github.com/NixOS/nixpkgs/) 下载任意一个包，以 `dash` 包为例：

```
wget https://raw.githubusercontent.com/NixOS/nixpkgs/47993510dcb7713a29591517cb6ce682cc40f0ca/pkgs/shells/dash/default.nix -O dash.nix

```

**步骤 2：** 用 `with import <nixpkgs> {};` 替换开头的声明（`{ lib , stdenv , buildPackages , autoreconfHook , pkg-config , fetchurl , fetchpatch , libedit , runCommand , dash }:`）。我不清楚为何需要这样做，但事实证明这么做是有效的。

**步骤 3：** 运行 `nix-build dash.nix`

这将开始编译该包。

**步骤 4：** 运行 `nix-env -i -f dash.nix`

这会将该包安装到我的 `~/.nix-profile` 目录下。

就这么简单！一旦我完成了这些步骤，我便感觉自己能够逐步修改 `dash` 包，进一步创建属于我自己的包了。

#### 制作自定义包的过程

因为 `paperjam` 依赖于 `libpaper`，而 `libpaper` 还没有打包，所以我首先需要构建 `libpaper` 包。

以下是 `libpaper.nix`，我基本上是从 [nixpkgs](https://github.com/NixOS/nixpkgs/) 仓库中其他包的源码中复制粘贴得到的。我猜测这里的原理是，nix 对如何编译 C 包有一些默认规则，例如 “运行 `make install`”，所以 `make install` 实际上是默认执行的，并且我并不需要明确地去配置它。

```
with import <nixpkgs> {};

stdenv.mkDerivation rec {
  pname = "libpaper";
  version = "0.1";

  src = fetchFromGitHub {
    owner = "naota";
    repo = "libpaper";
    rev = "51ca11ec543f2828672d15e4e77b92619b497ccd";
    hash = "sha256-S1pzVQ/ceNsx0vGmzdDWw2TjPVLiRgzR4edFblWsekY=";
  };

  buildInputs = [ ];

  meta = with lib; {
    homepage = "https://github.com/naota/libpaper";
    description = "libpaper";
    platforms = platforms.unix;
    license = with licenses; [ bsd3 gpl2 ];
  };
}

```

这个脚本基本上告诉 nix 如何从 GitHub 下载源代码。

我通过运行 `nix-build libpaper.nix` 来构建它。

接下来，我需要编译 `paperjam`。我制作的 [nix 包](https://github.com/jvns/nixpkgs/blob/22b70a48a797538c76b04261b3043165896d8f69/paperjam.nix) 的链接在这里。除了告诉它从哪里下载源码外，我需要做的主要事情有：

* 添加一些额外的构建依赖项（像 `asciidoc`）
* 在安装过程中设置一些环境变量（`installFlags = [ "PREFIX=$(out)" ];`），这样它就会被安装在正确的目录，而不是 `/usr/local/bin`。

我首先从散列值为空开始，然后运行 `nix-build` 以获取一个关于散列值不匹配的错误信息。然后我从错误信息中复制出正确的散列值。

我只是在 nixpkgs 仓库中运行 `rg PREFIX` 来找出如何设置 `installFlags` 的 —— 我认为设置 `PREFIX` 应该是很常见的操作，可能之前已经有人做过了，事实证明我的想法是对的。所以我只是从其他包中复制粘贴了那部分代码。

然后我执行了：

```
nix-build paperjam.nix
nix-env -i -f paperjam.nix

```

然后所有的东西都开始工作了，我成功地安装了 `paperjam`！耶！

### 下一个目标：安装一个五年前的 Hugo 版本

当前，我使用的是 2018 年的 Hugo 0.40 版本来构建我的博客。由于我并不需要任何的新功能，因此我并没有感到有升级的必要。对于在 Linux 上操作，这个过程非常简单：Hugo 的发行版本是静态二进制文件，这意味着我可以直接从 [发布页面](https://github.com/gohugoio/hugo/releases/tag/v0.40) 下载五年前的二进制文件并运行。真的很方便！

但在我的 Mac 电脑上，我遇到了一些复杂的情况。过去五年中，Mac 的硬件已经发生了一些变化，因此我下载的 Mac 版 Hugo 二进制文件并不能运行。同时，我尝试使用 `go build` 从源代码编译，但由于在过去的五年内 Go 的构建规则也有所改变，因此没有成功。

我曾试图通过在 Linux docker 容器中运行 Hugo 来解决这个问题，但我并不太喜欢这个方法：尽管可以工作，但它运行得有些慢，而且我个人感觉这样做有些多余。毕竟，编译一个 Go 程序不应该那么麻烦！

幸好，Nix 来救援！接下来，我将介绍我是如何使用 nix 来安装旧版本的 Hugo。

#### 使用 nix 安装 Hugo 0.40 版本

我的目标是安装 Hugo 0.40，并将其添加到我的 PATH 中，以 `hugo-0.40` 作为命名。以下是我实现此目标的步骤。尽管我采取了一种相对特殊的方式进行操作，但是效果不错（可以参考 [搜索和安装旧版本的 Nix 包](https://lazamar.github.io/download-specific-package-version-with-nix/) 来找到可能更常规的方法）。

**步骤 1：** 在 nixpkgs 仓库中搜索找到 Hugo 0.40。

我在此链接中找到了相应的 `.nix` 文件 <https://github.com/NixOS/nixpkgs/blob/17b2ef2/pkgs/applications/misc/hugo/default.nix>。

**步骤 2：** 下载该文件并进行构建。

我下载了带有 `.nix` 扩展名的文件（以及同一目录下的另一个名为 `deps.nix` 的文件），将文件的首行替换为 `with import <nixpkgs> {};`，然后使用 `nix-build hugo.nix` 进行构建。

虽然这个过程几乎无需进行修改就能成功运行，但我仍然做了两处小调整：

* 把 `with stdenv.lib` 替换为 `with lib`。
* 为避免与我已安装的其他版本的 `hugo` 冲突，我把包名改为了 `hugo040`。

**步骤 3：** 将 `hugo` 重命名为 `hugo-0.40`。

我编写了一个简短的后安装脚本，用以重命名 Hugo 二进制文件。

```
postInstall = ''
    mv $out/bin/hugo $out/bin/hugo-0.40
  '';

```

我是通过在 nixpkgs 仓库中运行 `rg 'mv '` 命令，然后复制和修改一条看似相关的代码片段来找到如何实施此步骤。

**步骤 4：** 安装。

我通过运行 `nix-env -i -f hugo.nix` 命令，将 Hugo 安装到了 `~/.nix-profile/bin` 目录中。

所有的步骤都顺利运行了！我把最终的 `.nix` 文件存放到了我自己的 [nixpkgs 仓库](https://github.com/jvns/nixpkgs/) 中，这样我以后如果需要，就能再次使用它了。

### 可重复的构建过程并非神秘，其实它们极其复杂

我觉得值得一提的是，这个 `hugo.nix` 文件并不是什么魔法——我之所以能在今天轻易地编译 Hugo 0.40，完全归功于许多人长期以来的付出，他们让 Hugo 的这个版本得以以可重复的方式打包。

### 总结

安装 `paperjam` 和这个五年前的 Hugo 版本过程惊人地顺利，实际上比没有 nix 来编译它们更简单。这是因为 nix 极大地方便了我使用正确的 `libiconv` 版本来编译 `paperjam` 包，而且五年前就已经有人辛苦地列出了 Hugo 的确切依赖关系。

我并无计划详细深入地使用 nix（真的，我很可能对它感到困扰，然后最后选择回归使用 homebrew！），但我们将拭目以待！我发现，简单入手然后按需逐步掌握更多功能，远比一开始就全面接触一堆复杂功能更容易掌握。

我可能不会在 Linux 上使用 nix —— 我一直都对 Debian 基础发行版的 `apt` 和 Arch 基础发行版的 `pacman` 感到满意，它们策略明晰且少有混淆。而在 Mac 上，使用 nix 似乎会有所得。不过，谁知道呢！也许三个月后，我可能会对 nix 感到不满然后再次选择回归使用 homebrew。

*（题图：MJ/f68aaf37-4a34-4643-b3a1-8728d49cf887）*

---

via: <https://jvns.ca/blog/2023/02/28/some-notes-on-using-nix/>

作者：[Julia Evans](https://jvns.ca/) 选题：[lkxed](https://github.com/lkxed/) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


KDE Plasma 6 将不支持较旧的桌面小部件

# KDE Plasma 6 将不支持较旧的桌面小部件

>
> KDE Plasma 6 进行了一些修改，需要小部件作者进行调整。开发人员，移植时间到了！
>
>
>

KDE Plasma 6 是备受期待的桌面环境版本升级版本。

最近，其发布时间表公布，第一个 Alpha 版本将于 **2023 年 11 月 8 日**上线，最终 **Beta 版本于 2023 年 1 月 31 日**上线，稳定版计划于 **2024 年 2 月 28 日**上线。

考虑到 KDE Plasma 5.x 系列包含多项改进和功能添加，许多用户对 KDE Plasma 6 带来的功能感到期待。

如果你好奇，我们已经介绍了 [KDE Plasma 6 的主要变化](/article-15821-1.html)。因此，它会发生重大变化也就不足为奇了。

然而，在进行重大修改后，可能会出现一些破坏体验的改动，例如无法在 Plasma 6 上运行任何旧版小部件。

### 给小部件开发者的移植通知

在 KDE 的 *Nate Graham* 最近发表的一篇 [博客文章](https://pointieststick.com/2023/10/24/its-time-to-port-your-widgets-to-plasma-6/) 中，向 Plasma 5 小部件作者发出了正式的警告。

其重点指出的信息是：

>
> **你需要将你的小部件移植到更新的 API，以使它们与 Plasma 6 兼容！**
>
>
>

Plasma 小部件 API 已随着即将发布的版本进行了修改。而且，为了适应这种变化并保持运行，小部件开发人员必须将他们的创作移植到更新的 API。

如果开发人员不移植小部件以使用更新的 API，它将无法在 KDE Plasma 6 中运行。

当然，流行的小部件开发人员很可能会进行移植。但是，如果你使用的小部件虽然还能使用，但没有积极维护，那么你将不得不在 KDE Plasma 6 中放弃它。

他们已提供了一份 [移植指南](https://develop.kde.org/docs/plasma/widget/porting_kf6/) 供开发人员遵循。

你可以在 “[Plasma 6 扩展](https://store.kde.org/browse?cat=705&ord=latest)” 下找到与 Plasma 6 兼容的小部件。在撰写本文时，只能看到列出了两个第三方小部件。

因此，当你喜欢的小部件被移植到 KDE Plasma 6 并由相关开发者上传后，你就会发现它们的踪迹。

? 你期待移植哪些 KDE 小部件？ 你认为你会错过某些不再维护的小部件吗？在下面的评论中分享你的想法。

---

via: <https://news.itsfoss.com/kde-plasma-6-widgets/>

作者：[Ankush Das](https://news.itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #1171 马斯克希望 X 接管用户全部财务活动，超越微信

Summary:
? 马斯克希望 X 接管用户全部财务活动，超越微信
? 近 80% 的开发人员在考虑换工作
? 印度 Infosys 联合创始人呼吁年轻人每周工作 70 小时
»
»

# 硬核观察 #1171 马斯克希望 X 接管用户全部财务活动，超越微信

### 马斯克希望 X 接管用户全部财务活动，超越微信

在埃隆·马斯克入主 X 公司一年后，这个前身名为 Twitter 的平台的财务状况仍不稳定，但持续的资金问题并没有阻止马斯克继续推进将 X 转变为银行的计划。在财报电话会议上，马斯克告诉 X 的员工，他预测 X 的支付系统将于 2024 年底推出，这将包括用户的“整个财务活动”，用户将“不再需要银行账户”。作为 PayPal 的联合创始人之一，马斯克重申，他对 X 的计划是全面实现他最初在 2000 年为 PayPal 写的路线图。马斯克说，他努力将 Twitter 打造成一个无所不能的应用程序，有朝一日将超过中国的微信。

>
> **[消息来源：Ars Technica](https://arstechnica.com/tech-policy/2023/10/elon-musk-wants-your-entire-financial-life-on-x-by-2024/)**
>
>
>

>
> 老王点评：即便有珠玉在前，也未必能实现。
>
>
>

### 近 80% 的开发人员在考虑换工作

根据 Stack Overflow 的一份调查，与过去两年相比，现在有更多的开发人员正在寻找或愿意接受新工作。超过 1000 名开发人员参加了该调查，79% 的人即使没有积极寻找，也至少在考虑新的机会。更好的薪水是他们寻找新工作的首要原因。其次是对其他公司的好奇心，如新技术和发展机会。此外，8% 的开发人员已退出技术行业，越来越多地在制造和供应链公司任职。

>
> **[消息来源：Stack Overflow](https://stackoverflow.blog/2023/10/26/hopping-instead-of-hustling-survey-tells-us-how-developers-are-taking-care-of-business/)**
>
>
>

>
> 老王点评：IT 行业的“活力”也体现在频繁换工作方面。
>
>
>

### 印度 Infosys 联合创始人呼吁年轻人每周工作 70 小时

Infosys 联合创始人、前 CEO <ruby> 纳拉亚纳·穆尔西 <rt>  Narayana Murthy </rt></ruby> 在接受采访时表示，他认为印度拥有巨大的经济潜力，但其生产率仍然很低。他要求年轻人必须说“这是我的国家，我想每周工作 70 小时”，他要求印度所有优秀青年“在未来 20 年、50 年（无论长短）每天工作 12 小时，使印度成为国内生产总值排名第一或第二的国家。”具有讽刺意味的是，Infosys 最近报告称，其员工利用率目前为 81.8%，还不到 70 小时的一半。

>
> **[消息来源：The Register](https://www.theregister.com/2023/10/27/infosys_founder_70_hour_week/)**
>
>
>

>
> 老王点评：天下老板的想法都是一样（黑）的。
>
>
>


Linux 内核 6.6 版本莅临，带来诸多变化

Summary: 笔记本的支持得到了提升，服务器性能得到了改进，更多内容一一揭晓。

莅临？ R U 确定？

我看了看自己的惠普战66G3，和它的AMD处理器，表示很Nice

笔记本的支持得到了提升，服务器性能得到了改进，更多内容一一揭晓。

# Linux 内核 6.6 版本莅临，带来诸多变化

>
> 笔记本的支持得到了提升，服务器性能得到了改进，更多内容一一揭晓。
>
>
>

又到了迎接 Linux 内核新版本发布的时刻！

Linux 内核 6.6 的发布，是一次大规模更新，针对各类笔记本、网络硬件、处理器等提供了**大量全方位的改良**。

Linus Torvalds [表示](https://lkml.iu.edu/hypermail/linux/kernel/2310.3/06370.html)：

>
> 各种各样的修复散布各处，除了针对 r8152 驱动的一些重要修复外，其它的都相当小型。下面是上周的简短日志，供所有想要一探究竟、了解更多细节的读者。日志篇幅短小，可以快速翻阅。
>
>
>

### ? Linux 内核 6.6：都有哪些新元素？

在我们开始之前，需要提醒大家，这一次发布的是**非长期支持版本**，因此不是每个人都必须进行升级，除非你想要享受最新、最棒的版本。

总的来说，让我们来看看这次发布版本的亮点：

* 针对英特尔芯片的优化
* 对笔记本的更佳支持
* 网络改进
* AMD 芯片性能提升

#### 针对英特尔芯片的优化

Linux 内核 6.6 版本新增了对英特尔的**神经处理单元（NPU）的支持**，这样的技术原先被称作通用处理器。

这项技术预计将于今年晚些时候，随着英特尔的“[Meteor Lake](https://www.intel.com/content/www/us/en/content-details/788851/meteor-lake-architecture-overview.html)”芯片亮相而首次公开登场。这些 **NPU 将被专门用于处理人工智能工作负载**。

英特尔甚至已经开始对即将发布的 “**Arrow Lake**”芯片进行**NPU 支持的初步工作**了！

此外，还新增了对英特尔的 [Shadow Stack](https://en.wikipedia.org/wiki/Shadow_stack) 的支持，因为他们的 [控制流执行技术](https://www.intel.com/content/www/us/en/developer/articles/technical/technical-look-control-flow-enforcement-technology.html)（CET）被引入到了内核中。其主要目的是防止现代英特尔 CPU（从 Tiger Lake 起）上的**返回导向编程（ROP）攻击**。

#### 对笔记本的更佳支持

**对于惠普笔记本，现在你可以直接在 Linux 中对 BIOS 进行管理了**，这要归功于 “**HP-BIOSCFG**” 驱动的实现。

根据报道，**从 2018 年起出产的惠普笔记本应该都可以支持这个驱动程序**。

**对于联想笔记本，驱动程序已经更新，为更多的 IdeaPad 笔记本**添加了键盘背光控制\*\*。

同样，**对于华硕笔记本**，现在 [ROG Flow X16](https://rog.asus.com/laptops/rog-flow/rog-flow-x16-2023-series/spec/)（2023 年款）游戏笔记本，当屏幕翻转时可以**正确地启用平板模式**。

#### 网络改进

在网络方面，Linux 内核 6.6 版本带来了对如 [Atheros QCA8081](https://www.qualcomm.com/products/internet-of-things/networking/wi-fi-networks/qca8081)、**MediaTek MT7988**、**MediaTek MT7981**，[NXP TJA1120 PHY](https://www.nxp.com/products/interfaces/ethernet-/automotive-ethernet-phys/tja1120-automotive-ethernet-phy-1000base-t1-asil-b-and-tc-10:TJA1120) 等新型硬件的**支持**。

同时，各类驱动程序也进行了升级，例如 **高通 Wi-Fi 7 （ath12k）驱动程序**，它现在**支持 Extremely High Throughput（EHT）PHY**。

此外，针对各类 Realtek（rtl8xxxu）Wi-Fi 芯片**启用了 AP 模式**。

关于特定于网络的变动，你可以在这个 [拉取请求](https://lore.kernel.org/lkml/20230829125950.39432-1-pabeni@redhat.com/) 中查阅更多的详细信息。

#### AMD 芯片的性能提升

随着 Linux 内核 6.6 的发布，AMD 的开发人员推出了**两项尚未正式公开的新技术的支持**。

一项技术是对他们即将推出的 “**FreeSync Panel Replay**” 技术的支持，这一技术只用于游戏笔记本抖动屏，可以自动降低刷新率以节省电力和降低 GPU 工作负载。

另一项技术被称为 “**动态提速控制**”，这是一项能够**提高某些 Ryzen SoC 性能的功能**，但关于它的更多细节比较少。

关于它的实施，你可以在这个 [补丁序列](https://lore.kernel.org/lkml/20230420163140.14940-1-mario.limonciello@amd.com/T/#m38ab23d70d213ceb67440168b3f71ad2be3aa564) 中查阅更多的信息。

#### ? 其他的变化与改进

其他方面，还包括一些值得注意的变动：

* 针对 **龙芯** 的大量新特性。
* **Rust 工具链** 升级至 v1.71.1 版本。
* 对 **RISC-V** 和 **Btrfs** 的多项改进。
* 完全移除了 [无线 USB](https://en.wikipedia.org/wiki/Wireless_USB) 和 [**Ultra-Wideband**](https://en.wikipedia.org/wiki/Ultra-wideband) 的代码。
* 对 **英伟达**、**英特尔** 和 **AMD** 的**开源图形驱动程序** 的众多优化。

你可以在 [更新日志](https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6) 中查阅更详细的信息。

### 安装 Linux 内核 6.6 版本

如果你的体验是像 Arch 或 Fedora 那类的滚动发行版，升级过程非常简单。

你只需要稍等片刻，因为这些发行版在发布更新时需要一些时间。

对于其他的用户，你可以等待主要版本更新，或者**根据我们的指南在 Ubuntu 中升级至最新的主线 Linux 内核**：

>
> **[在 Ubuntu 上安装最新的主线 Linux 内核](https://itsfoss.com/upgrade-linux-kernel-ubuntu/)**
>
>
>

你可以在 [官方网站](https://www.kernel.org/) 下载最新的 Linux 内核的 tarball （*发布后可能需要些时间才能得到*）。

? 你对这次内核发布有何想法？

---

via: <https://news.itsfoss.com/linux-kernel-6-6-release/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


编程像说话一样简单！阿里云推出大模型编码助手 —— 灵码

Summary: 在新的历史时刻，我们正在开启一个全新的编程纪元，推动这一进程的核心力量之一便是阿里云的 AI 产品 —— “通义灵码”。

# 编程像说话一样简单！阿里云推出大模型编码助手 —— 灵码

在新的历史时刻，我们正在开启一个全新的编程纪元，推动这一进程的核心力量之一便是阿里云的 AI 产品 —— “**通义灵码**”。

### 阿里云发布 AI 编程助手 “通义灵码”

2023 年 10 月的最后一天，在杭州云栖大会上，阿里云对外展示了一款可自动编写代码的 AI 助手。在现场展示中，当在编码软件的对话窗口输入“*帮我用 Python 写一个飞机游戏*” 后，短短几秒，这款名为 “通义灵码” 的 AI 助手就自动生成了 100 多行代码，点击运行后一个充满儿时回忆的“飞机大战”游戏就成功跑起来了。

云栖大会现场的 “通义灵码” 展区异常火爆，开发者体验后纷纷表示大受震撼：“*不到 1 分钟居然生成了贪吃蛇的小程序*”、“*运营也能写前端页面啦*”……甚至还有意犹未尽的观众们排队只为向 “通义灵码” 提一些棘手的问题 —— 比如 “*帮我用代码解一个韦东奕出的奥数题*”，而 “通义灵码” 也不负众望，不仅快速生成了函数代码还给出了相应的答案。

### 你身边的辅助伙伴

在这个日新月异的信息时代，“通义灵码” 担当着重要的角色，从业余爱好者到经验丰富的专业开发者，无论你在编程旅程的哪个阶段，都会发现 “通义灵码” 宛如**一位随时待命、一路陪伴的编程伙伴**。它能减少信息检索、工具切换、写单元测试等繁杂工作时间，更专注于技术设计。

不仅如此，“通义灵码” 能够**协助你完成各种编程相关的工作**，如编写单元测试、写代码注释、代码解释等。这对于保证代码的质量，挖掘潜在的错误和漏洞具有巨大的价值。它的存在极大地提升了编程工作的效率，减少了沟通与理解上的摩擦，让编程变得更加流畅、高效。

相较于人工编写测试耗时数分到数十分钟，“通义灵码” 能以毫秒级的速度生成测试代码，准确率和覆盖率都令人满意。

总的来说，无论你是在解决一项复杂的编程任务，还是在探索一项新的技术挑战，“通义灵码” 能为你提供一些帮助，使你的编程之旅更加轻松、易上手。

### 开创编程新时代

这个产品犹如一把充满魔力的钥匙，成功地打开了普罗大众曾经无法触及的编程大门，那是一面缔造无穷可能的生动壁垒。

它激活了编程的生命力，使之从被视为困难乏味的科技专业技能转变为一种更具包容性、更富创造性的工具。在这个新时代下，编程能力已经跨越了专业人员的界限，变为了全社会，每一个具有热情和想象力的人都可以触摸到的技术领域。从业余的编程爱好者，到探索未知的新手，再到洞悉市场趋势的企业和机构，“通义灵码” 让他们都有机会利用这场技术革命的智慧红利。

“通义灵码” 开创了编程的新时代，尤其在教育领域的影响尤为显著。比如，在未来的学校，学生将能通过 “通义灵码” 学习编程的基础知识，同时创造属于他们自己的科学项目。想像一下，一个小学生利用它制作一个探测环境污染的系统，启发出他们求知和创新的潜力，这样的景象即将成为现实。

这不仅仅是**编程向非专业人群的开放**，更是一种智慧的礼赠，一种信心的鼓励。无论你是在哪里，无论你是谁，只要你对这个世界充满好奇，对未来抱有期待，那么这个大门就为你敞开。任何人都可以利用 “通义灵码”，接受 AI 赋予的力量，挖掘出更大的可能，让编程成为一场每个人都可以参与的，精彩绝伦的技术盛宴。

### “通义灵码” 的三大优势

在人工智能助手领域，“通义灵码” 以显著的解决问题能力脱颖而出。根据 HumanEval 测试结果，通义灵码的**问题解决率高达 66.4%**，远超过行业平均水平的 50% 左右。这一显著成绩代表了它在问题解决方面卓越的能力，无论面临何种问题，通义灵码都能提供有效的解决方案。

“通义灵码” 也展现出了**对阿里云用户的友好性**，特别体现在支持调用阿里云 SDK 和 API 上，这意味着用户可以针对特定需求进行优化。这一功能深受开发者的欢迎，开发者不再需要分担与多个服务进行交互的额外负担，使得开发工作更为轻松且高效。

开发者遇到编程问题时，还可以通过 “通义灵码” 快速得到解决思路，再也**不需要一边编写代码一边浏览网络资料**，更专注于编程工作，极大提高编程效率。

### 站在千亿规模的 “通义千问 2.0” 肩膀上

在 2023 云栖大会现场，周靖人还公布了阿里自研大模型的最新进展，发布了**千亿参数规模的 “通义千问 2.0”**。它在 10 个权威测评中**全面超越 GPT-3.5 和 Llama2，并在加速追赶 GPT-4**。

“通义灵码” 依托于 “通义千问 2.0”，基于海量优秀开源代码数据集和编程教科书训练，可根据当前代码文件及跨文件的上下文，自动生成行级/函数级代码建议、单元测试、代码注释等，此外还具备代码解释、智能研发问答、异常报错排查等能力，并针对阿里云 SDK/OpenAPI 使用场景调优，为开发者带来高效、流畅的编码体验。

据研发团队透露，基于阿里云强大的大模型能力和智能算力，“通义灵码” 在 5 个月内快速迭代了多个版本，并在上市发布之前进行了充分打磨，**目前已在阿里云内大规模应用**。我们有理由相信，以后我们使用的多种阿里云的服务和软件，都将看到 “通义灵码” 的身影。

目前，**“通义灵码” 已面向所有开发者开放公测**，VS Code、JetBrains 等各大 IDE 插件市场均已上线，广大开发者下载后即可体验。

>
> 有趣的是，**“通义灵码” 还为它自己的开发也提供了帮助**。研发团队透露，在训练 “通义灵码” 的数据集时，开发人员使用了 “通义灵码” 开发了数据清洗脚本。不仅如此，“通义灵码” 的 IDE 插件的开发也使用到了 “通义灵码” 生成的代码。
>
>
>

它展示出的不仅仅是一种技术的优越性，更是对立足未来的坚定信念和努力。这种技术的突破标志着阿里云在 AI 领域的技术实力得到了充分体现，它以行动向世界证明，无论是在理论研究还是在实际应用上，阿里云都能以卓越的表现引领行业发展的潮流，为我们的未来带来无限可能。

### 100,000 卡量级的算力支持

训练大模型是一项庞大的系统性工程，它囊括了算力底座、网络、存储、大数据、AI 框架、AI 模型等复杂技术，只有强大的云计算体系才能训练出高质量的大模型。

为了保证大模型训练的稳定互联和高效并行计算，阿里云全新升级了人工智能平台 PAI。阿里云通义大模型系列就是基于**人工智能平台 PAI 训练**而成。PAI 底层采用 HPN 7.0 新一代 AI 集群网络架构，支持高达 **10 万卡量级的集群**可扩展规模，超大规模分布式训练加速比高达 96%，远超业界水平；在大模型训练任务中，可节省超过 50% 算力资源，性能全球领先。

这种庞大的规模和强大的计算力，使得复杂的 AI 模型训练和应用的各种挑战变得可控、可管理。大模型的训练和应用，尤其是那些需要消耗大量计算资源的工作，不再是一项遥不可及的艰巨任务。

此外，这个平台不仅提供了强大的硬件设施，也有丰富的软件资源和人工智能工程的最佳实践。所有这些都让使用者可以专注于他们的核心任务，即开发和实现人工智能的实用应用，而无需担心硬件和基础设施的问题，使得人工智能的发展和应用能够更高效、更广泛的推进。

### 结语

阿里云坚信，AI 的力量不应仅仅限于少数人，而应成为**每个人都能接触和利用的基础设施**，就如同我们生活中不可或缺的水、电一样普及。这个理念已经具备了实现的条件，因为阿里云正朝着这个方向坚定地推进。我们将看到一种 AI 的力量，不仅是科技人员，在他们的编程和设计任务上提供支持，也为商业、社区，甚至教育和家庭领域带来效率和洞察的普惠。随着编程的大众化，可能会有更多的个人和小公司能颠覆传统市场，创造出全新的产品和服务。

我们致力于让每个人都可以更容易地接触、学习和使用编程。我们希望能把**写代码变得像是写邮件一样简单和自然**。这并不是一个不切实际的梦想，而是我们当前正在为之努力的目标。在不远的未来，我们期待看到一个每个社会角落都能感受到 AI 的价值，每个人都能挖掘出自我创新的可能性的世界。


硬核观察 #1172 德国法庭裁决浏览器的“请勿跟踪”具有法律约束力

Summary:
? 德国法庭裁决浏览器的“请勿跟踪”具有法律约束力
? 谷歌承诺为安卓 14 的 “勒索软件” 漏洞提供救援补丁
? 苹果宣布了 M3 系列芯片及搭载该芯片的新 MacBook Pro
»
»

Apple M3又在挤牙膏，都2023年了还在卖8GB的“电子垃圾”，甚至能卖到上万元，大概是因为内存硬盘是用黄金做的。<br />
恭喜Apple继Intel之后荣获“牙膏厂”称号！为了区别，我们称为“黄金牙膏厂”。

因为去年苹果M1芯片设计总监被因特尔挖了墙角，回去老东家当CTO了。苹果的团队必然会动荡一段时间。。。

很神奇，团队的动荡居然没把把过时的8GB配置给“荡”掉

来自广西玉林的 Chrome Mobile 118.0|Android 10 用户

# 硬核观察 #1172 德国法庭裁决浏览器的“请勿跟踪”具有法律约束力

### 德国法庭裁决浏览器的“请勿跟踪”具有法律约束力

德国一家地区法院裁定，微软旗下的 LinkedIn 不能再无视用户在浏览器中的 “<ruby> 请勿跟踪 <rt>  Do Not Track </rt></ruby>” 设置。“请勿追踪” 是一个允许用户启用的 HTTP 头字段，启用该字段向网站的服务器表明不希望被追踪。但“请勿追踪”被认为并不具有约束力，网站可以选择尊重用户的决定，也可以不理睬。LinkedIn 在网站上明确表示：由于目前没有“请勿追踪”的相关标准，它对该信号不予回应。德国消费者权益组织 vzbv 称，LinkedIn 的声明（即不遵守 “请勿追踪” 偏好）违反了 GDPR。它指出，如果消费者启用了浏览器的请勿追踪功能，那么他们发出了一个明确的信号：不希望其上网行为被跟踪用于广告等目的，网站运营者必须尊重这一信号。法官同意了这一意见。

>
> **[消息来源：Tech HQ](https://techhq.com/2023/10/is-linkedin-privacy-helped-or-hindered-by-do-not-track-or-private-browsing-mode/)**
>
>
>

>
> 老王点评：这是非常明确的声明，这个裁定为各国法院做出了表率。
>
>
>

### 谷歌承诺为安卓 14 的 “勒索软件” 漏洞提供救援补丁

由于安卓 14 中存在的一个缺陷，当安卓设备有多个用户时，会导致设备被锁定，就像被安装了勒索软件一样。该缺陷最初报告给谷歌时，并没有引起重视，但随着该缺陷被媒体多轮报道，该漏洞的级别从 P2 升级到了最高优先级的 P0，并已交由专人处理。谷歌已经发布了相关的 Play 系统的补丁，但问题在于 Play 系统的更新不会主动应用，甚至不会让你知道它们已被下载。所以需要受影响的用户手动检查更新并安装。

>
> **[消息来源：Ars Technica](https://arstechnica.com/gadgets/2023/10/google-promises-a-rescue-patch-for-android-14s-ransomware-bug/)**
>
>
>

>
> 老王点评：连技术漏洞都需要媒体监督才能有人重视。
>
>
>

### 苹果宣布了 M3 系列芯片及搭载该芯片的新 MacBook Pro

苹果称，M3、M3 Pro 与 M3 Max 是全球首批使用 3 纳米工艺的 PC 芯片。与第一代 M1 芯片对比，M3 的高性能核心和高能效核心比 M1 中的相应核心分别快 30% 和 50%，神经网络引擎也比 M1 系列芯片上的快 60%，图形处理器渲染速度比 M1 系列芯片相比最快可达 2.5 倍。M3 系列芯片最大变化就是其图形处理器，在功耗减半的情况下可达到与 M1 相当的性能，在峰值功耗下可实现 65% 的性能提升。

>
> **[消息来源：The Verge](https://www.theverge.com/2023/10/30/23938867/apple-m3-imac-macbook-pro-biggest-announcements-m3)**
>
>
>

>
> 老王点评：苹果的 M 芯片确实很棒，而且事实上揭开了 Arm 芯片在个人计算机上的时代。
>
>
>