Btrfs 详解：压缩

Summary: 这篇文章将探索 Btrfs 中的透明文件系统压缩，以及它如何帮助节省存储空间。

这篇文章将探索 Btrfs 中的透明文件系统压缩，以及它如何帮助节省存储空间。

![](/data/attachment/album/202310/19/153401dyst48ybibpy3oyd.jpg)

这篇文章将探索 Btrfs 中的透明文件系统压缩，以及它如何帮助节省存储空间。这篇文章是《Btrfs 详解》系列文章中的一篇。从 Fedora Linux 33 开始，Btrfs 就是 Fedora Workstation 和 Fedora Silverblue 的默认文件系统。

如果你错过了，这里是本系列的上一篇文章：[Btrfs 详解：快照](/article-16287-1.html)。

### 简介

很多人都经历过存储空间用完的情况。也许你想从互联网下载一个大文件，或者你需要快速从你的手机中复制些照片，然后操作突然失败。虽然存储空间成本正在稳步降低，但越来越多的设备要么制造时就是固定数量的存储容量，要么最终用户难以扩展其存储容量。

但当你的存储空间不足时你可以做什么呢？也许你会求助于云存储，或者你可以随身携带一些外部存储设备。

在这篇文章里我会研究该问题的另一种解决方案：透明的文件系统压缩，这是 Btrfs 的一个特性。理想情况下，这将解决你的存储问题，同时几乎不需要对你的系统进行修改！让我们来看看是如何做到的。

### 透明压缩的解释

首先，让我们来探寻 *透明* 压缩是什么意思。你可以通过像 gzip、xz 或者 bzip2 这些压缩算法去压缩文件。这通常是显式操作：你利用一个压缩工具并且让它操作你的文件。虽然根据文件的内容，节约了空间，这有一个主要的缺点：当你想读取文件或者修改的时候，你得先解压缩。

这不仅是一个乏味的过程，而且也暂时打破了你之前节省的空间。再者，你最终解压了你不想访问的那部分文件内容。明显有比这更好的方法！

相反，透明压缩发生在文件系统级别。在这里，压缩的文件对用户看起来像常规的未压缩文件一样。但是，它们是被压缩后存储在硬盘上的。这之所以可行，是因为操作系统仅仅选择性地访问那部分文件，并且确保在向磁盘写入更新时再次压缩它们。

这里的压缩是透明的在于它不被用户感知，除了在文件访问时可能的 CPU 负载小量增加。因此，你可以应用在已有的系统而不是进行硬件修改或者求助于云存储。

### 压缩算法对比

Btrfs 提供了多个压缩算法的选择。出于技术原因它不能选用任意的压缩算法。它现在支持：

* zstd
* lzo
* zlib

好消息是，由于透明压缩的工作原理，你不需要安装这些程序供 Btrfs 使用。在下面的文章里，你会看到如何去运行一个简单的性能测试来对比压缩算法。但是，为了运行性能测试，你必须安装必要的可执行文件。事后不需要留着它们，所以你将使用 Podman 容器来确保不会在系统中留下任何痕迹。

**注意** ：因为 Btrfs 使用的压缩依赖于内核对这些压缩算法的（重新）实现，用户空间版本的算法得出的结果应该认为是粗略估计。

因为一次次敲重复的命令是枯燥的工作，我已经在 Gitlab 上准备了一个可以运行的 Bash 脚本 （<https://gitlab.com/hartang/btrfs-compression-test>）。这会用上面提到的每个算法在不同的压缩级别运行一次简单的压缩和解压缩。

首先，下载脚本：

```
$ curl -LO https://gitlab.com/hartang/btrfs-compression-test/-/raw/main/btrfs_compression_test.sh

```

下一步，启动一个 Fedora Linux 容器去挂载你当前的工作目录，以便你可以和主机交换文件同时在那里运行脚本：

```
$ podman run --rm -it --security-opt label=disable -v "$PWD:$PWD" \
    -w "$PWD" registry.fedoraproject.org/fedora:37

```

最后运行脚本：

```
$ chmod +x ./btrfs_compression_test.sh
$ ./btrfs_compression_test.sh

```

在我机器上的输出是这样：

```
[INFO] Using file 'glibc-2.36.tar' as compression target
[INFO] Target file 'glibc-2.36.tar' not found, downloading now...
################################################################### 100.0%
[ OK ] Download successful!
[INFO] Copying 'glibc-2.36.tar' to '/tmp/tmp.vNBWYg1Vol/' for benchmark...
[INFO] Installing required utilities
[INFO] Testing compression for 'zlib'

    Level | Time (compress) | Compression Ratio | Time (decompress)
-------+-----------------+-------------------+-------------------
        1 |         0.322 s |          18.324 % |           0.659 s
        2 |         0.342 s |          17.738 % |           0.635 s
        3 |         0.473 s |          17.181 % |           0.647 s
        4 |         0.505 s |          16.101 % |           0.607 s
        5 |         0.640 s |          15.270 % |           0.590 s
        6 |         0.958 s |          14.858 % |           0.577 s
        7 |         1.198 s |          14.716 % |           0.561 s
        8 |         2.577 s |          14.619 % |           0.571 s
        9 |         3.114 s |          14.605 % |           0.570 s

[INFO] Testing compression for 'zstd'

    Level | Time (compress) | Compression Ratio | Time (decompress)
-------+-----------------+-------------------+-------------------
        1 |         0.492 s |          14.831 % |           0.313 s
        2 |         0.607 s |          14.008 % |           0.341 s
        3 |         0.709 s |          13.195 % |           0.318 s
        4 |         0.683 s |          13.108 % |           0.306 s
        5 |         1.300 s |          11.825 % |           0.292 s
        6 |         1.824 s |          11.298 % |           0.286 s
        7 |         2.215 s |          11.052 % |           0.284 s
        8 |         2.834 s |          10.619 % |           0.294 s
        9 |         3.079 s |          10.408 % |           0.272 s
       10 |         4.355 s |          10.254 % |           0.282 s
       11 |         6.161 s |          10.167 % |           0.283 s
       12 |         6.670 s |          10.165 % |           0.304 s
       13 |        12.471 s |          10.183 % |           0.279 s
       14 |        15.619 s |          10.075 % |           0.267 s
       15 |        21.387 s |           9.989 % |           0.270 s

[INFO] Testing compression for 'lzo'

    Level | Time (compress) | Compression Ratio | Time (decompress)
-------+-----------------+-------------------+-------------------
        1 |         0.447 s |          25.677 % |           0.438 s
        2 |         0.448 s |          25.582 % |           0.438 s
        3 |         0.444 s |          25.582 % |           0.441 s
        4 |         0.444 s |          25.582 % |           0.444 s
        5 |         0.445 s |          25.582 % |           0.453 s
        6 |         0.438 s |          25.582 % |           0.444 s
        7 |         8.990 s |          18.666 % |           0.410 s
        8 |        34.233 s |          18.463 % |           0.405 s
        9 |        41.328 s |          18.450 % |           0.426 s

[INFO] Cleaning up...
[ OK ] Benchmark complete!

```

重要的是在根据脚本得出的数据做决定之前注意这些事情：

* 不是所有的文件压缩效果都一样好。像图片或电影这种已经压缩过的现代多媒体格式不会压缩得更小。
* 脚本中压缩和解压缩各进行一次。重复运行会产生稍微不同的输出。因此，时间应该被理解为是估计，而不是准确的测量。

鉴于输出的数据，我决定在我的系统上使用压缩级别 3 的 zstd 压缩算法。依据你的需求，你可能想使用更高的压缩级别（比如，如果你存储设备相当的慢）。要估算可达到的读/写速度，可以将源存档大小（约 260MB）除以（解）压缩时间。

压缩测试默认是对 GNU libc 2.36 源码进行的。如果你想看看对指定文件的效果，你可以通过第一个参数传递文件路径给脚本。记住文件一定要可以在容器内访问才行。

如果你想要测试其他东西或者执行更加详细的测试，可以阅读脚本的源码，根据需要修改它。

### 配置 Btrfs 压缩

Btrfs 里的透明文件系统压缩可以通过几种方式配置：

* 作为挂载文件系统的挂载选项（可用于相同 Btrfs 文件系统的所有子卷）
* 通过 Btrfs 文件属性
* 在 `btrfs filesystem defrag` 时（不是永久的，不在这里介绍）
* 通过 `chattr` 文件属性接口（不在这里介绍）

我只会介绍其中前两个。

#### 在挂载时开启压缩

有一个 Btrfs 挂载选项可以开启文件压缩：

```
$ sudo mount -o compress=<ALGORITHM>:<LEVEL> ...

```

例如，去挂载一个文件系统，并使用等级 3 的 `ztsd` 算法去压缩，你可以写成：

```
$ sudo mount -o compress=zstd:3 ...

```

设置压缩等级是可选的。重要的是注意到 `compress` 挂载选项应用到整个 Btrfs 文件系统和它所有的子卷。此外，这是目前唯一支持的指定压缩等级的方式。

为了对文件系统的根应用压缩，必须在 `/etc/fstab` 上指定。例如，Fedora Linux 安装器，默认启用级别 1 的 `zstd` 压缩，在 `/etc/fstab` 里是这样：

```
$ cat /etc/fstab
[ ... ]
UUID=47b03671-39f1-43a7-b0a7-db733bfb47ff  /  btrfs   subvol=root,compress=zstd:1,[ ... ] 0 0

```

#### 启用单个文件压缩

另外一种方式指定压缩的方法是通过 Btrfs 文件系统属性。使用下面的命令去查看文件、目录或子卷的压缩设置：

```
$ btrfs property get <PATH> compression

```

类似的，你可以像这样配置压缩：

```
$ sudo btrfs property set <PATH> compression <VALUE>

```

例如，对在 `/etc` 下所有文件启用 `zlib` 压缩：

```
$ sudo btrfs property set /etc compression zlib

```

你可以通过 `man btrfs-property` 得到支持值的列表。记住这个接口不允许指定压缩级别。除此之外，如果设置了一个压缩属性，它会覆盖挂载时的其他压缩配置。

### 压缩已有文件

在这时，如果你对现有文件系统采用压缩，然后通过 `df` 或类似命令检查空间利用率，你会发现什么都没变。这是因为 Btrfs 自身不会 “重新压缩” 所有已有的文件。压缩只会发生在往磁盘写新数据的时候。有一些方式去执行显式的重压缩：

1. 等待，什么都不做：只要文件被修改并被写回磁盘，Btrfs 根据配置压缩新写入的文件内容。如果我们等待足够长，越来越多的文件被重写，在某个时间点就会被压缩。
2. 移动文件到另一个文件系统然后移动回来：取决于你想压缩哪些文件，这可能是相当乏味的选项。
3. 执行一次 Btrfs 碎片整理。

最后一个选项可能是最方便的，但是它会对已经包含快照的 Btrfs 文件系统提出警告：它会破坏快照间的共享范围。换句话来说，两个快照间所有的共享内容，或者一个快照和它的父子卷，在碎片整理操作后将保存多份。

因此，如果你在你的文件系统里已经有很多快照，你不应该对整个文件系统运行碎片整理。这也没有必要，因为如果你想的话，Btrfs 可以对特定的目录或者单个文件进行碎片整理。

你可以使用以下命令去执行一次碎片整理：

```
$ sudo btrfs filesystem defragment -r /path/to/defragment

```

例如，你想像这样去整理你主目录的碎片：

```
$ sudo btrfs filesystem defragment -r "$HOME"

```

如果有疑问，最好从碎片整理单个大文件开始，并在监视文件系统上的可用空间的同时继续处理越来越大的目录。

### 测量文件系统压缩

有时，你可能会想，文件系统压缩为你节省了多少空间。但如何判断呢？首先，要知道一个 Btrfs 文件系统是否在挂载时启用了压缩，你可以使用以下命令：

```
$ findmnt -vno OPTIONS /path/to/mountpoint | grep compress

```

如果你得到了结果，那么给定挂载点的文件系统就使用了压缩！下一步，`compsize` 命令会告诉你你的文件需要多少空间：

```
$ sudo compsize -x /path/to/examine

```

在我的主目录，结果是这样：

```
$ sudo compsize -x "$HOME"
Processed 942853 files, 550658 regular extents (799985 refs), 462779 inline.
Type       Perc     Disk Usage   Uncompressed Referenced
TOTAL       81%       74G          91G         111G
none       100%       67G          67G          77G
zstd        28%      6.6G          23G          33G

```

每一行告诉你应用到文件的压缩 “类型” 。\* `TOTAL` 是下面所有行的总计。

另一方面，这些列告诉你我们的文件需要多少空间：

* `Disk Usage` 是实际分配在硬盘上的空间，
* `Uncompressed` 是如果没有压缩，文件所需要的空间，
* `Referenced` 是所有未压缩文件加起来的总大小。

`Referenced` 可以与数据 `Uncompressed` 不同，比如一个文件之前被重复了，或者有快照共享内容。在上面的例子，你可以看到在我的硬盘上总计 91 GB 的未压缩文件仅占据了 74 GB 的存储。取决于在目录里存储的文件类型和应用的压缩等级，这些数字可以有很大差异。

### 文件压缩的其它注意事项

Btrfs 使用启发式算法去探测压缩文件。这是因为压缩文件通常效果不好，所以没有必要浪费 CPU 周期去尝试进一步的压缩。为了这个目的，Btrfs 在写入压缩数据到磁盘之前测量压缩率。如果文件的第一部分压缩效果不好，文件被标记为不可压缩并且不会有后续的压缩。

如果出于某些原因，你想 Btrfs 压缩所有写入的数据，你可以通过 `compress-force` 选项挂载一个 Btrfs 文件系统，像这样：

```
$ sudo mount -o compress-force=zstd:3 ...

```

当像这样配置，Btrfs 会用等级 3 的 `zstd` 算法压缩所有写入磁盘的数据。

一个重要的注意事项是挂载一个有很多数据并开启压缩的 Btrfs 文件系统会比没开启压缩耗时更长。这是有技术上的原因的，而且这是一个不会影响文件系统操作的正常行为。

### 总结

本文详细介绍了 Btrfs 中的透明文件系统压缩。这是一种内置的、相对廉价的方法，可以在不需要修改的情况下从现有硬件中获得一些额外的存储空间。

本系列文章的下一篇将讨论：

* Qgroups - 限制文件系统大小
* RAID - 替换 mdadm 配置

（LCTT 译注：后继文章尚未发布，一旦发布我们会尽快翻译。）

如果你想了解与 Btrfs 相关的其他主题，请查看 Btrfs 维基    [1]  和文档    [2] 。如果你还没有阅读本系列的前三篇文章，请不要忘记去看看！如果你觉得本文缺少某些内容，请在下面的评论中让我知道。我们下篇文章见！

### 参考资料

1. <https://btrfs.wiki.kernel.org/index.php/Main_Page> [↩](#fnref1)
2. <https://btrfs.readthedocs.io/en/latest/Introduction.html> [↩](#fnref2)

*（题图：MJ/1a45064c-8da5-4b60-87f2-9886d6a3299e）*

---

via: <https://fedoramagazine.org/working-with-btrfs-compression/>

作者：[Andreas Hartmann](https://fedoramagazine.org/author/hartan/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[A2ureStone](https://github.com/A2ureStone) 校对：[wxy](https://github.com/wxy)

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


Ubuntu MATE 23.10 发布： 一个适度的升级

Summary: Ubuntu MATE 23.10 发布了！

![](/data/attachment/album/202310/19/160226cp45xfznfzw2xjj0.jpg)

>
> Ubuntu MATE 23.10 发布了！
>
>
>

在所有的 Ubuntu 版本中，Ubuntu MATE 的升级总是非常有趣的。

不过，最近发布的 Ubuntu MATE 决定坚持小幅改动，并进行预期的软件包升级和修复。你可能知道为什么！

**对于不了解的读者**：这是为了开发我们去年报道过的 [计划中的 Debian MATE 定制版](/article-15119-1.html)。

说到这里，让我重点介绍一下这些变化。

>
> ? Ubuntu MATE 23.10 将支持**九个月，直至 2024 年 7 月**。
>
>
>

### Ubuntu MATE 23.10：有什么新功能？

![](/data/attachment/album/202310/19/160302pia1le1berkyy0nq.jpg)

Ubuntu MATE 23.10 受益于 [Ubuntu 23.10](https://news.itsfoss.com/ubuntu-23-10/) 推出的所有好东西。

此外，这里还有一些改进：

* MATE 桌面更新至 v1.26.2。
* 添加更多人工智能生成的壁纸。
* 应用更新。

#### MATE 桌面升级

在最新的 MATE 桌面 1.26.2 中，你将获得大量错误修复和一些小的改进。

升级包括以下内容：

* 更新 MATE 用户指南 v1.26.2-1
* 改进门户支持
* 改进系统监视器，以便从 `/usr/libexec` 获取 `libexec` 文件
* 修正 MATE 会话管理器，使其更好地与系统监视器配合使用
* mate-utils 1.26.1-1 修复了内存泄漏问题

#### 额外的人工智能生成的壁纸

![](/data/attachment/album/202310/19/160303h4p4vs2qv4jv4mq4.jpg)

虽然你已经可以从 [Ubuntu 23.10 更新合集](https://ubuntu.com/blog/into-the-labyrinth) 中下载一些有趣的壁纸，但在这里你还能获得额外的壁纸（如上面的截图所示）。

Simon Butcher 是使用前沿的 Diffusion 模型制作这款壁纸的人，他提到：

>
> 由于牛头人是一种想象中的生物，因此对其的解释往往千差万别。我想制作一个具有漫画小说风格的强大生物图像，尽管不像许多描述那样令人毛骨悚然。
>
>
> 最新开源的 Stable Diffusion XL 基本模型在更高分辨率下进行了训练，质量上的差异非常明显，尤其是在整体一致性和细节方面，同时减少了图像中的解剖不规则性。图像是使用 Linux 和英伟达 A100 80GB GPU 在本地制作的，从最初的文本提示开始，使用 img2img、修复和放大功能进行完善。
>
>
>

#### Linux 内核 6.5

当然，[Linux 内核 6.5](https://news.itsfoss.com/linux-kernel-6-5-release/) 还能为硬件带来更好的兼容性、新代组件和其他改进。

![](/data/attachment/album/202310/19/160303ghkhlln62h9ng7g3.jpg)

#### 其他改进

主要的应用程序升级包括 [Firefox 118](https://news.itsfoss.com/firefox-118-release/)、Celluloid 0.25、Evolution 3.50 和 LibreOffice 7.6.1。

所有这些都将改善用户体验。

### ? 获取 Ubuntu MATE 23.10

你可以从 [官方网站](https://ubuntu-mate.org/download/) 或 [Ubuntu 仓库](https://cdimage.ubuntu.com/ubuntu-mate/releases/23.10/) 下载 Ubuntu MATE 23.10 ISO。

>
> **[Ubuntu MATE 23.10](https://cdimage.ubuntu.com/ubuntu-mate/releases/23.10/release/)**
>
>
>

如果你是现有用户并希望升级，请按照 [发布说明](https://ubuntu-mate.org/blog/ubuntu-mate-lunar-lobster-release-notes/) 中的官方说明进行操作。

*（题图：[Ubuntu Mate](https://ubuntu-mate.org/blog/ubuntu-mate-mantic-minotaur-release-notes/)）*

---

via: <https://news.itsfoss.com/ubuntu-mate-23-10/>

作者：[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/) 荣誉推出


硬核观察 #1159 IT 管理员最爱用 admin 作为密码

Summary:
? IT 管理员最爱用 admin 作为密码
? Windows 11 设备数量超过 4 亿台
? 安卓将在侧载安装应用程序时扫描恶意软件
»
»

国内绝大多数安卓手机没有Google Play，刷第三方Android ROM的高级用户也不一定会安装Google服务和商店。这些设备不会获得Google Play的保护。

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

![](/data/attachment/album/202310/19/192812cooj32j24ukzssdz.jpg)

![](/data/attachment/album/202310/19/192820h5cscxzj1hbuc1a6.jpg)

### IT 管理员最爱用 admin 作为密码

网络安全研究人员分析了恶意程序窃取的身份凭证，将其中的管理员账号挑选出来。他们共分析了 180 万个管理员凭证，发现其中使用 admin 的账号有 4 万个。其它流行的密码包括：123456、12345678、1234、Password、123、12345、admin123、demo、root 和 admin1 等等。

>
> **[消息来源：Bleeping Computer](https://www.bleepingcomputer.com/news/security/over-40-000-admin-portal-accounts-use-admin-as-a-password/)**
>
>
>

>
> 老王点评：就安全意识而言，很多系统管理员和普通用户也差不多。
>
>
>

![](/data/attachment/album/202310/19/192830m263nzxy3yvu6ryh.jpg)

### Windows 11 设备数量超过 4 亿台

微软内部数据显示，Windows 11 的活跃设备使用量最近刚刚突破 4 亿台，并在稳步攀升，预计到 2024 年初将达到 5 亿台。这意味着微软用了大约两年的时间才使 Windows 11 的月活跃设备达到 4 亿台。这一速度明显慢于 Windows 10，后者仅用了一年多的时间，并最终在 2020 年初达到了 10 亿用户。当然，这和微软对待它们的升级策略不同有很大关系。

>
> **[消息来源：Windows Central](https://www.windowscentral.com/software-apps/windows-11/exclusive-windows-11-is-active-on-almost-half-a-billion-devices-ahead-of-microsofts-expectations)**
>
>
>

>
> 老王点评：不得不说，微软 Windows 还是最受欢迎的桌面操作系统。
>
>
>

![](/data/attachment/album/202310/19/192841tt106phtkuh8k4ft.jpg)

### 安卓将在侧载安装应用程序时扫描恶意软件

谷歌的安卓上的恶意软件系统 “Google Play Protect” 一直以来都能检查侧载应用程序中的恶意软件，但它使用的是定义文件等更快的技术，而且是在后台悄悄进行的。这项新技术将通过全屏 “扫描” 界面延迟应用程序的安装，同时谷歌将对应用程序代码进行深度扫描。谷歌在博文中称，这是 “在代码层面进行实时扫描，以打击新型恶意应用程序” ，而且它可以 “在安装从未扫描过的应用程序时推荐进行实时应用程序扫描，以帮助检测新出现的威胁”。

>
> **[消息来源：Ars Technica](https://arstechnica.com/gadgets/2023/10/android-will-now-scan-sideloaded-apps-for-malware-at-install-time/)**
>
>
>

>
> 老王点评：每一个流行的操作系统都需要一种“杀毒软件”，而不太流行的系统，比如 macOS 和 Linux 就不太需要。
>
>
>


硬核观察 #1160 内存 RowHammer 保护措施被新的方法击破

Summary:
? 内存 RowHammer 保护措施被新的方法击破
? 一种新的路灯技术可以避免光污染对天文望远镜的影响
? Debian 继续支持 /usr 合并
»
»

星链是反射的太阳光，闪烁频率人工无法控制。而文中的技术相当于让全世界的路灯一瞬间熄灭，天文望远镜利用这个间隙拍摄照片。

![](/data/attachment/album/202310/20/202536xrqsmfff5zft8olb.jpg)

![](/data/attachment/album/202310/20/202537xjxmsfw5a0wfxt3s.jpg)

### 内存 RowHammer 保护措施被新的方法击破

2015 年，研究人员发现了一种被称之为 RowHammer 的攻击方式，当一个用户级应用程序反复访问 DDR 内存芯片的特定区域，可以导致比特翻转。<ruby> 比特翻转 <rt>  Bitflips </rt></ruby> 是指储存在电子设备上的个别比特发生翻转的事件，比如从 0 变为 1 或反之。各个内存厂商在后续产品中纷纷加入了抵御 RowHammer 攻击的保护措施，主要方法是限制程序在给定时间内打开和关闭目标芯片区域的次数。现在，研究人员发明了被称之为 RowPress 的新方法，能在部署了最新的 RowHammer 保护措施的 DRAM 中诱发比特翻转。RowPress 不是反复“锤击”选定区域，而是让其保持更长的打开时间。将这一方法和 RowHammer 结合可进一步提高这种攻击的威力。研究人员表示，“这本身并不是一种攻击。它只是表明比特翻转是可能的，而且很多，这很容易成为攻击的基础”。

>
> **[消息来源：Ars Technica](https://arstechnica.com/security/2023/10/theres-a-new-way-to-flip-bits-in-dram-and-it-works-against-the-latest-defenses/)**
>
>
>

>
> 老王点评：如果类似的方法层出不穷，那或许是该考虑新的内存技术了。
>
>
>

![](/data/attachment/album/202310/20/202551b9hg1ngm7cn779w5.jpg)

### 一种新的路灯技术可以避免光污染对天文望远镜的影响

光污染对天文学的威胁与日俱增，现代望远镜高度敏感，能感受到距离 50 甚至 200 公里的城市室外照明的影响。一项研究发现，星星正在以平均每年 10% 的速度从天空中“消失”。一项名为 “DarkSkyProtector” 的技术可以“让望远镜看到几乎是一片黑暗的天空”。该方案依赖于三个组件：一个能让 LED 灯以人眼无法察觉的极高频率闪烁的简单装置、一个全球定位系统接收器，以及望远镜摄像头上一个能与 LED 灯同步闪烁的特殊设计的快门。全球定位系统技术引导望远镜的快门只在 LED 灯熄灭的瞬间打开。该技术可以将天文图像中不必要的天空辉光减少 94%。

>
> **[消息来源：Space](https://www.space.com/astronomy-light-pollution-streetlight-hack)**
>
>
>

>
> 老王点评：技术的进步可以解决技术带来的副作用。另外，是不是可以顺便把马斯克的星链轨迹也一起消除了。
>
>
>

![](/data/attachment/album/202310/20/202613u9gll4dzgkcg2exl.jpg)

### Debian 继续支持 /usr 合并

Debian 12 的目标是采用与其他 Linux 发行版类似的合并 `/usr` 文件系统布局，即 `/{bin,sbin,lib}/` 目录成为 `/usr/{bin,sbin,lib}/` 的符号链接。但 Debian 技术委员会在今年早些时候决定暂停合并 `/usr` 文件。不过，随着 Debian 12 正式发布几个月后，这一暂停决定被废止了。Debian 的合并 `/usr` 动作有望在两年后的 Debian 13 发布时全部完成。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Debian-Repeats-Merged-Usr-Block)**
>
>
>

>
> 老王点评：这就是历史遗留问题，依我看，其实大可不必这么小心翼翼。
>
>
>


Tor 浏览器 13.0 发布

Summary: 通过新的 Tor 浏览器更新提升你的私人网络体验！

在印度用TOR相当于告诉叔叔我想干坏事。。。目前在印度也没法用。。。

哈哈哈

Tor的流量特征明显，在少数国家会被封杀或引起注意，请加上梯子等前置代理。

通过新的 Tor 浏览器更新提升你的私人网络体验！

![](/data/attachment/album/202310/21/055646urkd0upcknv0znv5.jpg)

>
> 通过新的 Tor 浏览器更新提升你的私人网络体验！
>
>
>

Tor 浏览器是访问 [Tor 网络](https://en.wikipedia.org/wiki/Tor_(network)) 的流行方式之一，它一直是许多想要规避对其施加的限制的人的首选，甚至是那些注重隐私的人的首选。

当然，使用 Tor 浏览器是最简单的 [提高隐私的方法](https://itsfoss.com/improve-privacy/)。

虽然 Tor 浏览器基于 Mozilla Firefox，但它也进行了一些调整。

在最新的主要更新中，让我们看看发生了什么变化。

### ? Tor 浏览器 13.0：有什么新变化？

![](/data/attachment/album/202310/21/055722r003l3k2y1l45yvj.png)

据开发人员介绍，Tor 浏览器 13.0 基于 [Firefox ESR 115](https://www.mozilla.org/en-US/firefox/115.0esr/releasenotes/)，并带来了一年的推送到上游的修改。

过渡到较新的 Firefox 版本还**允许他们利用 [Firefox 113](https://www.mozilla.org/en-US/firefox/113.0/releasenotes/) 中引入的改进的辅助功能引擎**。

因此，使用屏幕阅读器等**辅助技术**的用户现在可以在使用 Tor 浏览器时获得**比以往更好的性能**。

此版本的亮点包括：

* 改进的 “<ruby> 信封打印 <rt>  Letterboxing </rt></ruby>” 功能
* 更新主页
* 更新徽标

#### 改进的 “<ruby> 信封打印 <rt>  Letterboxing </rt></ruby>” 功能

![](/data/attachment/album/202310/21/055723gfk98ubdrwxajrx0.png)

Tor 浏览器 13.0 版本中的 “<ruby> 信封打印 <rt>  Letterboxing </rt></ruby>” 功能得到了重要更新。

（LCTT 译注：“<ruby> 信封打印 <rt>  Letterboxing </rt></ruby>” 是一种网络浏览隐私保护技术，它通过为浏览器窗口添加白色填充（看起来像一个信封的周围），来防止网站跟踪你的浏览行为。当你改变浏览器窗口的大小时，“信封打印” 功能会在周边提供白色填充，确保窗口大小始终为特定的大众标准尺寸。这意味着即使你改变窗口大小，那些尝试通过窗口尺寸来跟踪你的网站也无法获取独特的信息。）

开发人员发现 **1000×1000 像素的默认 “信封打印” 尺寸**存在问题，许多现代网站无法正常运行，导致这些网站切换到适用于平板电脑和智能手机的布局。

有些网站甚至会显示桌面网站，但只有横向滚动条。为了解决这个问题，他们调整了**窗口的大小**，最大为 1400×900 像素。

对于最终用户来说，这意味着你无需手动调整窗口大小即可获得合适的尺寸。

他们还补充说：

>
> 桌面版 Tor 浏览器不应再在大屏幕上触发响应断点，并且我们的绝大多数桌面用户将看到熟悉的横向纵横比，更符合现代浏览器的要求。
>
>
> 通过计算，我们选择了这一特定尺寸，以便为新窗口提供更大的空间，同时又不会增加过多的桶数量。
>
>
>

#### 更新了主页

![](/data/attachment/album/202310/21/055724e9vr29h996jx44x9.png)

Tor 浏览器主页的更新已经等了很长时间了。在此版本中，它展示了更新的徽标（更多内容见下文）以及一个新功能 —— **“洋葱化的” DuckDuckGo**，用于访问其 “.onion 站点”。

这也**与我之前提到的改进的辅助功能引擎**齐头并进，从而为屏幕阅读器和其他辅助技术的用户提供更好的支持。

他们还修复了可怕的“**红屏死亡**”错误，该错误在打开新的主页选项卡时偶尔会弹出。

#### 更新徽标

![](/data/attachment/album/202310/21/055724l55jiz52ku7iuci0.png)

从文章的开头你就可能已经注意到 Tor 浏览器的徽标有些不同。

实际上，**Tor 浏览器所有版本的徽标都已更新**，外观更加干净和现代。

这个熟悉的“洋葱标志”已经存在了一段时间，它是由当时的社区民意调查选出的。很高兴看到他们仍在努力改进它。

这些只是该版本的主要亮点，你可以通过 [官方发行说明](https://blog.torproject.org/new-release-tor-browser-130/) 了解所有技术修复和其他改进。

### ? 下载 Tor 浏览器 13.0

此版本的 Tor 浏览器适用于 **Linux**、**Windows**、**Android、** 和 **macOS**。你可以前往[官方网站](https://www.torproject.org/download/)获取你选择的套餐。

>
> **[Tor 浏览器 13.0](https://www.torproject.org/download/)**
>
>
>

---

via: <https://news.itsfoss.com/tor-browser-13-0-release/>

作者：[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/) 荣誉推出


终端基础：Linux 终端中的目录切换

![](/data/attachment/album/202310/21/062234mz9zymqc6om5924m.jpg)

>
> 本篇文章作为终端基础教程系列的一部分，介绍如何在 Linux 命令行中，利用绝对路径和相对路径实现目录切换。
>
>
>

Linux 的 `cd` 命令让你可以轻松切换文件夹（即目录）。只需提供你要切换到的文件夹路径即可。

```
cd path_to_directory

```

然而对于 Linux 新人来说，可能会在路径的指定上有所困扰。

首先，让我们解决这个问题。

### 理解 Linux 中的路径

在 Linux 文件系统中，路径是用来追踪文件位置的信息。所有的路径都从根目录开始，然后向下延伸。

你可以通过下面的方式查看当前所在的位置：

```
pwd

```

结果可能是类似于 `/home/username` 的输出。注意，这里的 `username` 将会是你自己的用户名。

你可以注意到，路径是由 `/` 符号和目录名组成的。比如路径 `/home/abhishek/scripts`， 表示 `scripts` 是在文件夹 `abhishek` 之内，而文件夹 `abhishek` 在 `home` 文件夹之内。要注意，第一个 '/' 是指根目录（即文件系统的开始处），后面的 '/' 则作为目录的分隔符。

![Path in Linux](/data/attachment/album/202310/21/062343zsnpchp9xhvss1f1.jpg)

>
> ? 在终端中键入 `ls /`，然后按回车。你将会看到根目录下的所有内容，试试看！
>
>
>

接下来，让我们学习两种常见的路径指定方式：绝对路径和相对路径。

**绝对路径**：这种路径从根开始，然后一直扩展到你需要的位置。如果一个路径是以 `/` 开头，那就说明它是一个绝对路径。

**相对路径**：这是相对于你文件系统中当前位置的路径。如果我当前位置在 `/home/abhishek`，并且我需要去 `/home/abhishek/Documents`， 我只需要简单地切换到 `Documents`，而不需要指定整个绝对路径 `/home/abhishek/Documents`。

在我演示这两种路径的区别之前，有必要先熟悉两个特殊的目录标识：

* `.` （单点）表示当前目录。
* `..` （双点）表示上一级目录，也就是当前目录的母目录。

这里有一张图形化的表示。

![Absolute path vs relative path](/data/attachment/album/202310/21/062310gindi5il5nai31wn.png)

### 利用 cd 命令变更目录

在你已对路径概念有所了解之后，我们来了解如何切换目录。

>
> ? 如果你**仅键入 `cd` 并按回车键**，无论当前位置在哪，系统都会将你带回主目录。试一试吧。
>
>
>

敲入以下命令，你就能看到主目录里的所有文件夹：

```
ls

```

这是我看到的情况：

```
abhishek@ituxedo:~$ ls
Desktop    Downloads  Pictures  Templates  VirtualBoxVMs
Documents  Music      Public    Videos

```

你的情况可能与此类似，但未必完全一样。

假如你希望跳转到 `Documents` 文件夹。由于它就在当前目录下，这里使用相对路径会比较方便：

```
cd Documents

```

>
> ? 注意，大部分 Linux 发行版预设的终端模拟器会在提示符本身显示出当前所在的位置。因此你不必频繁使用 `pwd` 指令来确认自己的位置。
>
>
>

![Most Linux terminal prompts show the current location](/data/attachment/album/202310/21/062310mvnh4h8j4a0ke4t0.png)

假如你希望切换到位于主目录里的 `Templates` 文件夹。

你可以使用相对路径 `../Templates`（`..` 会让你返回到上层目录，即 `/home/username`，然后你就可以进入 `Templates` 文件夹了）。

但这次我们尝试使用绝对路径。请把下面的 `abhishek` 替换成你的用户名。

```
cd /home/abhishek/Templates

```

此刻你已经在 `Templates` 文件夹里了。如何前往 `Downloads` 文件夹呢？这次我们再使用相对路径：

```
cd ../Downloads

```

下面的图片会回顾一下你刚才学到的所有或有关目录切换的范例。

![cd command example](/data/attachment/album/202310/21/062310xubbv2xbjtuj2ndj.svg)

>
> ? 别忘了你还可以使用终端的 `tab` 键自动补全功能。只需要键入命令或者文件夹名称的前几个字母，然后敲击 `tab` 键，系统就会尝试自动地补全命令或文件夹名称，或者给你显示出所有可能的选项。
>
>
>

### 故障解决

在 Linux 终端操作切换目录的过程中，你可能会遇到一些常见的错误。

#### 文件或目录不存在

如果在你尝试切换目录时，出现类似下面的错误信息：

>
> bash: cd: directory\_name: No such file or directory
>
>
>

那么你可能在路径或目录名称上犯了误解。这里有几点你需要注意的：

* 请确定你输入的目录名中没有拼写错误。
* Linux 系统对大小写敏感，因此，`Downloads` 和 `downloads` 会被识别为不同的目录。
* 你可能未正确指定路径。可能你所在的位置与你预期的不同？或者你遗漏了绝对路径中的开头的 `/` 字符？

![Common examples of "no such file or directory" error](/data/attachment/album/202310/21/062311y022v9za82q2avdj.png)

#### 非目录错误

如果你看到像下面这样的错误提示：

>
> bash: cd: filename: Not a directory
>
>
>

这表示你尝试使用 `cd` 命令对一个文件进行操作，而不是一个目录（文件夹）。很明显，你不能像进入文件夹那样“进入”一个文件，因此会出现这样的错误。

![Not a directory error with the cd command](/data/attachment/album/202310/21/062312ebxyo6he7de0eydx.png)

#### 参数过多

这是 Linux 新手常犯的另一个错误：

>
> bash: cd: too many arguments
>
>
>

`cd` 命令只接受一个参数。也就是说，你只能对命令指定一个目录。

如果你指定了超过一个的参数，或者在路径中误加了空格，你就会看到这个错误。

![Too many arguments error in Linux terminal](/data/attachment/album/202310/21/062312dl6g6xgxusl40ago.png)

>
> ?? 如果你输入 `cd -`，它将会把你带到前一个目录。当你在两个相隔较远的地方切换时非常方便，可以避免再次输入长路径。
>
>
>

### 特殊目录符号

在结束这个教程之前，我想快速告诉你关于特殊符号 `~`。在 Linux 中，`~` 是用户主目录的捷径。

如果用户 `abhi` 运行它，`~` 就会代表 `/home/abhi`，如果用户 `prakash` 运行，`~` 就意味着 `/home/prakash`。

总结一下你在这个基础教程系列中学到的所有特殊目录标识：

| 符号 | 描述 |
| --- | --- |
| `.` | 当前目录 |
| `..` | 上级目录 |
| `~` | 主目录 |
| `-` | 前一个目录 |

### 测试你的知识

下面是一些简单的练习，用来测试你刚刚学到的关于路径和 `cd` 命令的知识。

移动到你的主目录，并使用这个命令创建一个嵌套的目录结构：

```
mkdir -p sample/dir1/dir2/dir3

```

然后，一步步来试试这个：

* 使用绝对路径或相对路径进入 `dir3`
* 使用相对路径移动到 `dir1`
* 使用你能想象到的最短路径进入 `dir2`
* 使用绝对路径切换到 `sample` 目录
* 返回你的主目录

>
> ? 想知道你是否全都做对了吗？欢迎分享你的答案。
>
>
>

现在你知道如何切换目录，是不是应该学习一下如何创建它们呢？

我强烈推荐你阅读这篇文章，了解一些关于终端和命令的小技巧。

如果你想了解 Linux 命令行的基础知识，记得关注我们的 Linux 终端基础系列教程的更多章节。

---

via: <https://itsfoss.com/change-directories/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[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/) 荣誉推出


硬核观察 #1161 IBM 研发出了一种突破冯·诺依曼瓶颈的计算机芯片

Summary:
? IBM 研发出了一种突破冯·诺依曼瓶颈的计算机芯片
? 英伟达发布可训练机器人的人工智能代理
? Telegram 仍在向联系人泄露用户 IP 地址
»
»

谁还记得QQ珊瑚虫？

显示ip的那个嘛：

![](/data/attachment/album/202310/21/070836qu47yhrgm4eemurc.jpg)

![](/data/attachment/album/202310/21/070839o4r223o8j88l5tut.jpg)

### IBM 研发出了一种突破冯·诺依曼瓶颈的计算机芯片

传统的计算芯片每次计算时仍然需要使用称为 RAM 的外部存储器。这种在芯片间穿梭数据的方式会减慢速度，这种现象被称为“冯·诺依曼瓶颈”。IBM 研发处一种名为 “NorthPole” 处理器芯片无需访问外部存储器，因此执行图像识别等任务的速度比现有架构更快，同时“它的能效简直令人难以置信”。NorthPole 由 256 个计算单元组成，每个单元都有自己的内存，“在单元中缓解了冯·诺依曼瓶颈”。这些单元通过网络连接在一起，其灵感来自于人类大脑皮层各部分之间的白质连接。这种设计思路大部分以前就存在，但从未在一个芯片中结合过。研究人员说，这表明计算和内存可以大规模集成，“将撼动计算机体系结构的惯常思维”。

>
> **[消息来源：《自然》](https://www.nature.com/articles/d41586-023-03267-0)**
>
>
>

>
> 老王点评：带来现代计算的冯·诺依曼架构并不是唯一的计算架构，或许这种新架构是让 AI 腾飞的技术基础设施突破。
>
>
>

![](/data/attachment/album/202310/21/070849wwkzkwhtds1zzvne.jpg)

### 英伟达发布可训练机器人的人工智能代理

英伟达研究院宣布，它已开发出一种名为 “<ruby> 尤里卡 <rt>  Eureka </rt></ruby> 的新型人工智能代理，该代理由 OpenAI 的 GPT-4 驱动，可自主教授机器人复杂的技能。尤里卡可以自主编写奖励算法，它首次训练出了一只机器人手，使其能够像人类一样完成快速转笔技巧。尤里卡还教会机器人打开抽屉和橱柜、抛接球、操作剪刀等近 30 项任务。

>
> **[消息来源：Venture Beat](https://venturebeat.com/ai/new-nvidia-ai-agent-powered-by-gpt-4-can-train-robots/)**
>
>
>

>
> 老王点评：也就是说，机器人可以学会掌控自己的肢体了？
>
>
>

![](/data/attachment/album/202310/21/070937tx13n0kzubtb1tux.jpg)

### Telegram 仍在向联系人泄露用户 IP 地址

Telegram 在全球拥有 7 亿用户，并一直以 “安全” 和 “私密” 的信息应用程序自居，尽管专家一再警告 Telegram 的安全性不如端到端加密应用程序 Signal 等。如果你在联系人中添加黑客并接受他们的电话，那么流行的消息应用 Telegram 就会泄露你的 IP 地址。尽管这一事实多年前就已为人所知，但技术含量较低的新用户可能还不知道。

>
> **[消息来源：Tech Crunch](https://techcrunch.com/2023/10/19/telegram-is-still-leaking-user-ip-addresses-to-contacts/)**
>
>
>

>
> 老王点评：其实安全更多依赖的不是工具，而是安全素养。
>
>
>


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

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

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

![](/data/attachment/album/202310/22/075735dk7c6b4raibhkutq.jpg)

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

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

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

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

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

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

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

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

你需要提些问题给自己：

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

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

#### Proton Pass

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

![](/data/attachment/album/202310/22/075804r7b9ovxs77w7zv6x.jpg)

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

![](/data/attachment/album/202310/22/075804t79l9s944i8viv41.jpg)

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

#### Bitwarden

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

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

![](/data/attachment/album/202310/22/075804a24fikbc9kfx32cf.jpg)

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

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

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

### 用户体验

#### Bitwarden

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

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

![](/data/attachment/album/202310/22/075804k5oqbt0zzm5tfzas.jpg)

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

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

![](/data/attachment/album/202310/22/075804q80o7xkrgkx2klom.jpg)

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

![](/data/attachment/album/202310/22/075804cldc6mcipzlzd4di.jpg)

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

#### Proton Pass

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

![](/data/attachment/album/202310/22/075804it3mt4x3xo3y6i4w.jpg)

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

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

### 价格

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

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

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

![](/data/attachment/album/202310/22/075804vjwha5ywmphfj332.jpg)

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

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

![](/data/attachment/album/202310/22/075805z44uyyn6eene50ef.jpg)

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

### 功能

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

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

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

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

#### Bitwarden

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

![](/data/attachment/album/202310/22/075805jgdqgagta0uu4s5r.jpg)

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

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

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

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

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

![](/data/attachment/album/202310/22/075805q887777w8fz7fvc7.jpg)

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

![](/data/attachment/album/202310/22/075805gqlgmtuksu4aazqg.jpg)

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

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

![](/data/attachment/album/202310/22/075805npk67hktzzqpptqn.jpg)

其他功能差异包括：

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

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

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

#### Proton Pass

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

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

![](/data/attachment/album/202310/22/075805jd7g583dvgrg751y.jpg)

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

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

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

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

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

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

![](/data/attachment/album/202310/22/075805ttw2tcauoca7vn0a.jpg)

因此，对于 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 发行版上。具体方法如下。

![](/data/attachment/album/202310/22/082116ket5ed87padptmbw.jpg)

>
> 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` 键并按回车键：

![](/data/attachment/album/202310/22/082143da0fndc0ego334d7.png)

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

#### 本地安装

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

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

```

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

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

### 搜索并安装包

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

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

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

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

![](/data/attachment/album/202310/22/082144vouku3as3qdgyy5o.png)

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

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

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

```
nix-env -iA nixpkgs.firefox

```

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

```
nix-env -q

```

![](/data/attachment/album/202310/22/082144tcomo9e5bqa4rn6o.png)

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

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

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

很酷，对吧？

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

```
nix-shell -p <package_name>

```

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

```
nix-shell -p neofetch

```

![](/data/attachment/album/202310/22/082144ivyevv9unexcuxc1.png)

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

```
exit

```

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

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

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

```
nix-channel --update

```

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

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

```

![](/data/attachment/album/202310/22/082146xg5gllqoigbgtuqx.png)

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

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

```
nix-env -u <Package_name>

```

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

```
nix-env -u

```

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

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

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

```

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

```
nix-env --uninstall firefox

```

![](/data/attachment/album/202310/22/082146e5n7nkp1l5tnl55p.png)

### 通过 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 被攻击者用国际化域名编码钓鱼
»
»

![](/data/attachment/album/202310/22/180351ovr4uw6erwgwxu1b.jpg)

![](/data/attachment/album/202310/22/180400bxwjnwxnwjhhnjsb.jpg)

### 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/)**
>
>
>

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

![](/data/attachment/album/202310/22/180413lt3x483agn1dn8wg.jpg)

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

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

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

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

![](/data/attachment/album/202310/22/180427n5226lsh5hpqmpaj.jpg)

### 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 的决策是一个 “悲剧”。

![](/data/attachment/album/202310/23/100619d754xnee4kksw7sr.jpg)

>
> 他还称，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录制屏幕？

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

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

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

![](/data/attachment/album/202310/23/153033pej4f9egegjbtbbs.jpg)

>
> 用途广泛的 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>”）

![Select Convert/ Save option](/data/attachment/album/202310/23/153200xuq9kygdkdudd18q.png)

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

![Capture Mode: Desktop](/data/attachment/album/202310/23/153201y0sovgu20mm0mugc.png)

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

![Set Frame Rate](/data/attachment/album/202310/23/153201ruezjjnj5jgto57t.png)

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

![Set Output Profile](/data/attachment/album/202310/23/153202etqitx6t5xvi5zvn.png)

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

![Edit the Output Profile](/data/attachment/album/202310/23/153203lf43m6zyww3h5f6y.png)

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

![Output file location and Name](/data/attachment/album/202310/23/153203m76q57u503xh7jg5.png)

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

![Start Recording](/data/attachment/album/202310/23/153204yun45x18ufzxcfuc.png)

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

![Stop Recording](/data/attachment/album/202310/23/153204wxwp9lcwtt5107p4.png)

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

![Stop Button in VLC](/data/attachment/album/202310/23/153204uooau3wvtt1aaaa3.png)

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

![Output File](/data/attachment/album/202310/23/153205scvykanka8phcnak.png)

### 总结

如你所见，虽然可以使用 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/) 荣誉推出


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

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 ,我要我的音乐 ：-））

![](/data/attachment/album/202310/23/193637svvymsvtqdiexmce.jpg)

![](/data/attachment/album/202310/23/193645kwzf8qtynvf8of7k.jpg)

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

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

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

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

![](/data/attachment/album/202310/23/193657dapwsuzq64u6awjs.jpg)

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

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

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

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

![](/data/attachment/album/202310/23/193710ebvi2zxglrqvhvk6.jpg)

### 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的文章

![](/data/attachment/album/202310/24/155014kli69j43i021iwwl.jpg)

大家好！前段时间我写了一篇关于“[如何用 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·蓉城热辣相聚

![](/data/attachment/album/202310/24/174427zitzthovutszclut.jpg)

成都，别称“蓉城”，是我国西南的一颗璀璨的明珠，热辣的四川火锅，憨态可掬的大熊猫，都是人们对于成都的理解和认识。而我们的 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 历程》

![](/data/attachment/album/202310/24/173923b7aa7k46a5x7xezv.jpg)

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

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

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

![老王（wxy），Linux 中国技术社区创始人](/data/attachment/album/202309/18/145415gaezeh3hoaezjsee.jpg "老王（wxy），Linux 中国技术社区创始人")

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

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

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

![](/data/attachment/album/202310/24/173949dapkw6mx8ewr7qok.jpg)

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

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

#### ⚡闪电演讲

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

上海场闪电演讲照片：

![胡张治分享自己从 GNU/Linux 小白到 ArchLinuxCN 贡献者的旅程](/data/attachment/album/202307/31/143352a1xz1nmwywpwn0ma.jpg "胡张治分享自己从 GNU/Linux 小白到 ArchLinuxCN 贡献者的旅程")

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

![李伟光现场介绍 neovim 的使用](/data/attachment/album/202307/31/143411w0xj33s5fosxo4sf.jpg "李伟光现场介绍 neovim 的使用")

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

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

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

![](/data/attachment/album/202310/24/174022qvsawollab0va4l2.png)

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

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

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

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

![](/data/attachment/album/202310/17/164149tn6kwvmkz16uokkn.png)

> 本次活动免费参与，如果你希望参加同期举行的**中国开源年会 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真正问世。

![](/data/attachment/album/202310/24/183405wv8lx80qxxoii8oo.jpg)

![](/data/attachment/album/202310/24/183412lx83cfg3zzxf1x88.jpg)

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

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

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

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

![](/data/attachment/album/202310/24/183421woegzsy70e8s8cj7.jpg)

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

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

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

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

![](/data/attachment/album/202310/24/183610mqz88ou7sopoursb.jpg)

### 英伟达和 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: 通过这个全新的应用可以实现所有蓝牙功能！

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

![](/data/attachment/album/202310/25/092956c1jb1bqxx8qryrju.jpg)

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

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

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

请允许我带你看一下。

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

![](/data/attachment/album/202310/25/093023teitihoe55etdeoh.png)

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

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

一些主要功能包括：

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

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

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

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

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

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

![](/data/attachment/album/202310/25/093024uwbnb47lenhxbw22.png)

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

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

![](/data/attachment/album/202310/25/093026t9mtggzrjstxgti4.png)

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

![](/data/attachment/album/202310/25/093027qvooddnjdxjnbo46.png)

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

一位 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 知识

![](/data/attachment/album/202310/25/122259mfu0uowyppuyfdyo.jpg)

我一直在慢慢地撰写关于 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 准备支持实时内核
»
»

![](/data/attachment/album/202310/25/151913ftxt1s3qooq03qo3.jpg)

![](/data/attachment/album/202310/25/151920ou92gx9bxxxz5mx8.jpg)

### 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 了吧，就这样悄悄落幕了。要是微软能开源出来就好了。
>
>
>

![](/data/attachment/album/202310/25/151932t3xhizuni9e753b3.jpg)

### 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 发行商。
>
>
>

![](/data/attachment/album/202310/25/151945lde2fz2bpfey58st.jpg)

### 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: 一款可提供源代码的应用，让视频流应用不再烦恼。你怎么看？

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

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

![](/data/attachment/album/202310/26/115233ydzdt8kedtkkt7ti.jpg)

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

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

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

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

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

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

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

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

### Grayjay：专注于创作者

![](/data/attachment/album/202310/26/115328hkl7xn7vy9nzyvgl.jpg)

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年进行的一场著名魔术。

![](/data/attachment/album/202310/26/152738tj0xaxjofnhttz8a.jpg)

>
> 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%。就算没有放弃，确定真能竞争过苹果和谷歌？迟早会成为另一个黑莓。

![](/data/attachment/album/202310/26/164750brfa6raurb7u0j6v.jpg)

![](/data/attachment/album/202310/26/164759pfznghfanzfn7pfn.jpg)

### 微软 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)**
>
>
>

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

![](/data/attachment/album/202310/26/164808nbnq2zaej3newvav.jpg)

### 微软会问你为什么要下载 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 似乎有更多改进，为什么用户非要骑驴找马呢？
>
>
>

![](/data/attachment/album/202310/26/164821gbm145v8ubz504rv.jpg)

### 原子计算公司率先宣布推出 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 可以让你更轻松。

![](/data/attachment/album/202310/26/224157oonzwjd1vp0d2p85.jpg)

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

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

这一次你很幸运！

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

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

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

### Warehouse：概述 ⭐

![](/data/attachment/album/202310/26/224159hcigjec9jjjyyg1c.png)

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

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

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

### 初步印象 ??

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

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

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

![](/data/attachment/album/202310/26/224200u2cwyz0cwyc02xx9.png)

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

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

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

![](/data/attachment/album/202310/26/224200c5nrv3nfnrovtfo3.png)

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

![](/data/attachment/album/202310/26/224201kyyynqvr9p38vrm8.png)

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

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

![](/data/attachment/album/202310/26/224201cxg6p6frgdxdmrpl.png)

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

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

![](/data/attachment/album/202310/26/224202m7a8v7v45b4zba48.png)

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

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

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

![](/data/attachment/album/202310/26/224203dqtn6h6ef777od25.png)

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

![](/data/attachment/album/202310/26/224203qe23qse5vffr3333.png)

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

![](/data/attachment/album/202310/26/224204ulcvltmp3exvnml5.png)

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

![](/data/attachment/album/202310/26/224204sirhvyo27ia2t4bi.png)

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

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

![](/data/attachment/album/202310/26/224205qxq7llhm89lshl97.png)

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

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

![](/data/attachment/album/202310/26/224205qm3i3esenh3mxsxx.png)

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

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

![](/data/attachment/album/202310/26/224206yeaei8su8aphphfa.png)

### ? 下载 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阻止不了，就像当年苹果自己做地图一样。

![](/data/attachment/album/202310/27/000628bzdvdf5bqrlw7vtl.jpg)

![](/data/attachment/album/202310/27/000640amwdr2nhmtazdq6n.jpg)

### 连谷歌 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/)**
>
>
>

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

![](/data/attachment/album/202310/27/000651vcfolyyiptohgjtk.jpg)

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

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

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

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

![](/data/attachment/album/202310/27/000703ezbntdbitnx5dttw.jpg)

### 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的便利，岂不美哉。

![](/data/attachment/album/202310/27/231035gjnehjvraytiwtbw.jpg)

>
> 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 的播客设备。

![](/data/attachment/album/202310/27/231116h2tpl42tv7vtvrz7.jpg)

筹款活动取得成功的同时，**也得到了 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/) 荣誉推出


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

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

![](/data/attachment/album/202310/28/091736m1nhn6yyrr1oo014.jpg)

![](/data/attachment/album/202310/28/091745m75re4o2b274e947.jpg)

### 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)**
>
>
>

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

![](/data/attachment/album/202310/28/091754ip9nxn2den2duend.jpg)

### 英特尔 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/)**
>
>
>

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

![](/data/attachment/album/202310/28/091809lnn3ts869ko88gu6.jpg)

### 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: 思考一下，如何在你的开源项目中真正定义安全性吧。

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

![](/data/attachment/album/202310/28/095718zso6aaitoyyv4ain.jpg)

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

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

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

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

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

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

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

**你可以这么说：**“本网站承诺有 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 用户

小白表示这个教程很棒！

![](/data/attachment/album/202310/29/155650e3vap2on6vwrrmpx.jpg)

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

如今，计算机科学领域的学生和从业者绝对有必要了解<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<sup> 18</sup> 字节的数据。但是，这些数据中的大多数与我们完全无关，包括大量没有价值的 YouTube 视频，不经思考就发送的电子邮件，琐碎的新闻报道等等。然而，这片浩瀚的数据海洋中同样蕴含着无价的宝贵知识。传统软件无法完成处理这些数据的艰巨任务。人工智能是少数能够应对这种信息过载的技术之一。

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

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

### 什么是人工智能？

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

![图 1：人工智能体系结构和数据科学](/data/attachment/album/202310/29/155723qhw71hzewlh1l3kv.jpg)

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

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

图 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 列。如果你熟悉编程，在许多流行的编程语言中这个矩阵可以表示为一个二维数组。只有一行的矩阵称为行向量，只有一列的矩阵称为列向量。 ![](/data/attachment/album/202310/29/145931wm9voyym8t9h1tqo.svg) 就是一个行向量。

![图 2：一个: A 2 × 3 的矩阵](/data/attachment/album/202310/29/155723eqy1zb6mqxllg66x.jpg)

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

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

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

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

![图 3：两个向量求和的 Python 代码](/data/attachment/album/202310/29/155723ol14fa11o0paf035.jpg)

首先，让我们试着逐行理解这些代码。由于本教程假定的编程经验很少，所以我将代码行标记为【基本】或【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` 作为变量名是一种糟糕的编程实践，但数学家倾向于将向量命名为 ![](/data/attachment/album/202310/29/155226dmhqqoqh6vmwvtie.svg)、 ![](/data/attachment/album/202310/29/155233hgadvvi33dho3d3n.svg)、 ![](/data/attachment/album/202310/29/155239palkfhfz9f30x0uu.svg) 等。如果你完全没有 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 带来了新的文件类型和其他改进。

![](/data/attachment/album/202310/29/171811kqqcqggcg2h517go.jpg)

>
> 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：有什么新变化？

![](/data/attachment/album/202310/29/171857a9i64l282i9yq32g.png)

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** 的文件类型配置，以解决一些长期存在的问题。

#### 界面改进

![](/data/attachment/album/202310/29/171858eruuw7w5ao1au5br.png)

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

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

![](/data/attachment/album/202310/29/171858l8lox1owuz1w8p8w.png)

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

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

#### ? 其他变化

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

* 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还活着呢

![](/data/attachment/album/202310/29/185701hle2lvjv9paakt23.jpg)

![](/data/attachment/album/202310/29/185710f7221ddcvbbkja21.jpg)

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

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

![](/data/attachment/album/202310/29/185727ye53beuuuun4ssmn.jpg)

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

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

![](/data/attachment/album/202310/29/185744izyjrxyy1u4dx7yj.jpg)

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

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

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

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

![](/data/attachment/album/202310/29/185759gt4uoklnin43pela.jpg)

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

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

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

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