数据科学家的开源社区分析指南

Summary: 研究一下这个框架，来建立你自己的开源项目的数据分析。

研究一下这个框架，来建立你自己的开源项目的数据分析。

# 数据科学家的开源社区分析指南

>
> 研究一下这个框架，来建立你自己的开源项目的数据分析。
>
>
>

在数据分析的黄金时代，开源社区也不能免俗。大家都热衷于将一些华丽的数字放到演示幻灯片上，但如果你掌握了正确的分析方法，这些信息可以为你带来更大的价值。

或许你认为作为一名 [数据科学家](https://enterprisersproject.com/article/2022/9/data-scientist-day-life?intcmp=7013a000002qLH8AAM)，我会告诉你数据分析和自动化能为你的社区决策提供信息。但实际上，情况恰恰相反。利用数据分析来构建你现有的开源社区知识，吸收其他的知识，并发现潜在的偏见和没有思考过的观点。你或许是实施社区活动的专家，而你那些同事则是代码方面的专家。当你们每个人都在自己的知识背景下将信息可视化时，你们都可以从这些信息中受益。

让我们来面对现实吧。每个人都有一千零一件事情要做，而且总感觉一天的时间永远不够用。如果需要几个小时才能得到你的社区的答案，你就不可能有足够的精力去解决这些事情。但是，花时间创建一个全面发展的可视化项目，可以帮助你时刻掌握你所关心的社区的不同方面，这就将你从精疲力尽中解放了出来。

随着“数据驱动”思维的盛行，围绕开源社区的信息宝库可能是一种祝福，也可能是一种诅咒。下面我将分享一些方法，告诉你如何从数据干草堆中挑出有价值的信息。

### 你的预期是什么？

当考虑一个指标时，首先要明确你想提供的观点。以下是几个可能涉及的概念：

**告知性和影响性的行动：** 你的社区是否存在某个领域尚未被理解？你是否已迈出第一步？你是否试图确定特定方向？你是否正在衡量现有倡议的效果？

**暴露需要改进的领域和突出优势：** 有时你想宣传你的社区，突出它的优势，特别是在试图证明商业影响或为项目宣传时。然而，当涉及到向社区内部传递信息时，你通常需要从一堆指标中精准的找到你们的缺点，以此来帮助你们改进。虽然突出优点并非不可取，但需要在适当的时间和地点。不要把优势指标作为社区内部的拉拉队，告诉每个人都有多棒，而是要与外界分享，以获得认可或推广。

**社区和商业影响：** 数字和数据是许多企业的语言。但是这可能使得为你的社区进行宣传并真正展示其价值变得异常困难。数据可以成为用他们的语言说话的一种方式，并展示他们想看到的东西，以使你数据背后的潜在含义能够被有效转达。另一个角度是对开源的整体影响。你的社区是如何影响他人和生态系统的？

这些观点并非非此即彼，而是相互关联的。适当的框架将有助于创造一个更深思熟虑的衡量标准。

当人们谈论通用的数据科学或机器学习工作时，通常会描述这样的工作流程。我将重点关注第一步，即编写问题和度量标准，并简要提及第二步。从数据科学的角度来看，这个演示可以被视为这个步骤的一个案例研究。这一步有时会被忽视，但你的分析的实际价值始于此。你不能一天醒来就知道要看什么。从理解你想知道什么和你所拥有的数据开始，逐步实现更加深度的数据分析。

### 3个开源数据分析用例

以下是您在开源数据分析过程中可能遇到的三种不同场景。

#### 场景 1：现有数据分析

假设你开始进行分析，并且已经知道你将要研究的内容对你或你的社区是有用的。那么你该如何提高分析的价值呢？这里的想法是建立在“传统”的开源社区分析基础之上。假设你的数据表明，在项目的整个生命周期内，你共有 120 个贡献者。这是你可以放在幻灯片上的价值，但你不能从中做出决策。从仅有一个数字到获得洞见，逐步采取措施。例如，你可以从相同的数据中将贡献者分为活跃和流失的贡献者（那些已经有一段时间没有做出贡献的贡献者），以获得更深入的了解。

#### 场景 2：社区活动的影响测量

针对聚会、会议或其他任何社区外联活动，你如何看待你的影响力和目标？这两个步骤实际上互相影响。一旦你确定了活动的目标，就要确定可以用什么来检测效果。这些信息有助于设定活动的目标。在活动开始时，很容易陷入模糊的计划而非具体的计划的陷阱中。

#### 场景3：形成新的影响分析区

当你从头开始进行数据分析时，就会出现这种情况。前面的例子是这个工作流程的不同部分。这个工作流程是一个不断发展的循环；你可以随时进行改进或扩展。基于这个概念，以下是你应该经历的必要步骤。在本文的后面，将会有三个不同的例子，展示这种方法在现实世界中的应用。

#### 第一步：分解关注区和视角

首先，想象一下魔法 8 球——你可以问任何问题，摇一摇，就能得到答案的玩具。考虑你的分析领域。如果你能立即得到任何答案，那会是什么？

接下来，考虑数据。从你的魔法 8 球问题中，哪些数据源可能与问题或关注领域有关？

在数据背景下，哪些问题可以回答，让你更接近你提出的魔法 8 球问题？需要注意的是，如果你试图将所有的数据汇集在一起，你必须考虑到所做出的假设。

#### 第二步：将问题转化为指标

以下是第一步中每个子问题的处理过程：

* 选择所需的具体数据点。
* 确定可视化以实现目标分析。
* 假设这些信息的影响。

接下来，引入社区提供反馈并触发迭代开发过程。这个协作部分可能就是真正的魔力所在。最好的想法通常是在将一个概念带给某个人时产生的，会激发他们的灵感，这是你或他们无法想象的。

#### 第三步：分析实践

这一步是你开始处理你所创建的指标或可视化的影响。

首先要考虑的是，这个度量标准是否符合当前对社区的了解。

* 如果**是**：是否有假设得出的结果？
* 如果**不是**：你需要进一步调查，是否这是一个潜在的数据或计算问题，或者只是先前被误解的社区的一部分。

一旦你确定你的分析足够稳定，可以开始在信息上实施社区倡议。当你正在进行分析以确定下一步最佳步骤时，你应该确定衡量倡议成功的具体方法。

现在，观察这些由你的指标提供信息的社区倡议。确定是否可以用你之前建立的成功衡量指标观察到影响。如果没有，可以考虑以下几点：

* 你是否在衡量正确的事情？
* 倡议战略是否需要调整？

### 分析区的例子：新贡献者

#### 魔法 8 球问题是什么？

* 如何分析哪些人为持续的贡献者？

#### 我有什么数据可以纳入分析区和魔法 8 球问题？

* 仓库存在哪些贡献者的活动，包括时间戳？

现在你有了这些信息和一个魔法 8 球问题，把分析分成几个子部分执行。这个想法与上述步骤 2 和 3 相关。

**子问题 1:** “人们是怎么进入这个项目的”

这个问题的目的是先看看新的贡献者在做什么。

**数据：** GitHub 上的首次贡献随时间推移的数据（议题、PR、评论等）。

**可视化：** 按季度划分的首次贡献条形图。

**潜在的意义：** 在你与其他社区成员交谈后，进一步检查按季度细分的信息，以及贡献者是否为重复贡献者或仅仅是路过。你可以看到人们进来的时候在做什么，以及这是否能告诉你他们是否会留下来。

**从这些信息中了解到的可以采取的行动。**

* 目前的文档是否能够帮助到最常见的新手？你能不能更好地帮助和支持新人朋友，这将有助于他们中更多的人留下来？
* 是否有一个贡献领域在整体上并不常见，但重复贡献者却集中在这个区域？也许 PR 是重复贡献者的一个常见区域，但大多数人却不在这个区域工作。

**行动项目：**

* 给 “好的第一个问题” 贴上一致的标签，并将这些问题链接到贡献文档中。
* 在这些问题上添加一个 PR 伙伴。

**子问题 2：** “我们的代码库真的依赖于路过的贡献者吗？”

**数据：** GitHub 的贡献数据。

**可视化：** “贡献总额：按路过和重复贡献者的贡献进行细分。”

**根据这一信息可能采取的行动。**

* 这个比例是否达到了项目的目标？很多工作都是由路过贡献者完成的吗？这是否是一种未被充分利用的资源，项目是否没有尽到自己的责任来吸引他们？

### 分析：吸取教训

数字和数据分析并不是“事实”，它们可以支持任何观点。因此，在处理数据时，内部怀疑者应该非常积极，并进行反复迭代，以带来真正的价值。你不希望你的分析只是一个 “yes man”，因此花点时间退一步，评估你所做的假设。

如果一个指标只是指出了调查的方向，那也是一个巨大的胜利。你不可能看清或想到所有的事情，兔子洞可以是一个好事，对话的起点可以把你带到一个新的地方。

有时，你想测量的东西恰恰不在那里，但你也许能得到有价值的细节。不要假设你有所有的拼图碎片来获得你最初问题的准确答案。如果你开始强迫一个答案或解决方案，你会把自己带入一条由假设引领的危险道路。为分析的方向或目标的改变留出空间，可以让你获得比最初的想法更好的洞察力。

数据只是是一种工具，并不是标准答案，它可以汇集原本无法获得的见解和信息。将你想知道的东西分解成可管理的小块，并在此基础上进行分析，这是最重要的部分。

开源数据分析是一个很好的例子，说明你必须对所有的数据科学采取谨慎态度。

* 主题领域的细微差别是最重要的。
* 通过“问什么/答什么”的工作过程经常被忽视。
* 知道“问什么”可能是最难的部分，当你想出一些有洞察力和创新的东西时，这比你选择的任何工具都要重要。

如果你是一个没有数据科学经验的社区成员，正在寻找开始的地方，我希望这些信息能告诉你，你在这个过程中是多么重要和宝贵。你带来了社区的洞察力和观点。如果你是一个数据科学家或实施指标或可视化的人，你必须倾听你周围的声音，即使你也是一个活跃的社区成员。关于数据科学的更多信息列在本文的最后。

### 总结

把上面的例子作为建立你自己的开源项目的数据分析的框架。对你的结果有很多问题要问，知道这些问题和它们的答案可以把你的项目引向一个令人兴奋和富有成效的方向。

---

via: <https://opensource.com/article/22/12/data-scientists-guide-open-source-community-analysis>

作者：[Cali Dolfi](https://opensource.com/users/cdolfi) 选题：[lkxed](https://github.com/lkxed) 译者：[Chao-zhi](https://github.com/Chao-zhi) 校对：[wxy](https://github.com/wxy)

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


Summary:
? Unix 之父 Ken Thompson 从 Mac 转到了 Linux
? 大语言模型涌现无法预测的能力
? 让 Python 和 C 语言性能相当的新编译器
»
»

# 硬核观察 #945 Unix 之父 Ken Thompson 从 Mac 转到了 Linux

### Unix 之父 Ken Thompson 从 Mac 转到了 Linux

今年已 80 岁的 Ken Thompson 是 Unix、C 语言、Go 语言等一系列重要项目的共同创造者。他在最近的一次演讲中，回答了一个问题 “如今使用什么操作系统？”他说，“在我生命中的大部分时间里都在运行苹果操作系统。”但最近五年他开始对苹果不太满意了，而最近几个月，他把它扔了，使用 Linux 了，尤其是树莓派上运行的 Raspbian，即树莓派操作系统。这引来了在场观众的掌声。

>
> **[消息来源：Slashdot](https://apple.slashdot.org/story/23/03/18/237211/unix-pioneer-ken-thompson-announces-hes-switching-from-mac-to-linux)**
>
>
>

>
> 老王点评：恭喜，我们又多了一位 Linux 用户~
>
>
>

### 大语言模型涌现无法预测的能力

2017 年谷歌大脑的研究人员提出了被称为 <ruby> 转化器 <rt>  Transformer </rt></ruby> 的新型架构（即 GPT 中的 “T” —— 生成式预训练转化器），它能并行处理大块文本，能通过增加模型的参数快速扩展语言模型的复杂度。2020 年 OpenAI 的研究人员发现随着参数规模的增加，大语言模型改进了其能力和准确度。但大语言模型也同时带来了一些始料未及的东西。研究人员发现大语言模型产生了数以百计的“新”能力，这种行为被称为“<ruby> 涌现 <rt>  emergent </rt></ruby>”。了解涌现可揭示出 AI 和一般机器学习深层问题的答案，如复杂模型是真的在做新事情，还是极其擅长统计。

>
> **[消息来源：《量子杂志》](https://www.quantamagazine.org/the-unpredictable-abilities-emerging-from-large-ai-models-20230316/)**
>
>
>

>
> 老王点评：就怕 AI 悄悄“进化”出人类不知道、控制不了的能力，前两天不是有消息说，GPT-4 开始谋求“越狱”了？这个事情我们观察一下再报道。
>
>
>

### 让 Python 和 C 语言性能相当的新编译器

Codon 是一个新的 “高性能 Python 编译器，它可以将 Python 代码编译为本地机器代码，没有任何运行时间的开销”。与 Python 相比，在单线程上，典型的速度提升是 10-100 倍或更多。而且 Codon 支持原生多线程，这可以使速度再提高许多倍。Codon 的性能与 C/C++ 的性能相当（有时甚至更好）。用户只需像他们习惯的那样写 Python，而不必担心数据类型或性能，Codon 会自动处理这些问题，他们的代码运行速度比普通 Python 快 10 到 100 倍。

>
> **[消息来源：MIT](https://news.mit.edu/2023/codon-python-based-compiler-achieve-orders-magnitude-speedups-0314)**
>
>
>

>
> 老王点评：易用和高性能兼得。
>
>
>


被误用的罗伊·菲尔丁的有关描述性状态迁移（REST）的博士论文

Summary: 符合描述性状态迁移（REST）的应用程序接口（API）无处不在。有趣的是又有多少人真正了解“符合描述性状态迁移”的应有之义呢？

# 被误用的罗伊·菲尔丁的有关描述性状态迁移（REST）的博士论文

符合 <ruby> 描述性状态迁移 <rt>  REpresentational State Transfer </rt></ruby>（LCTT 译注：REST，译自审定公布名词数据库）的应用程序接口（API）无处不在。有趣的是又有多少人真正了解“符合描述性状态迁移”的应有之义呢？

大概我们中的大多数人都会跟 [黑客新闻网站上的这篇公开问答](https://news.ycombinator.com/item?id=7201871) 产生共鸣：

>
> 我阅读了几篇介绍描述性状态迁移（REST）的文章，甚至包括原始论文的部分章节。然而我仍然对REST 到底是什么只有一个相当模糊的想法。我开始认为没有人真的了解它，它仅仅是一个定义相当不充分的概念。
>
>
>

我曾经计划写一篇有关 REST 的博客，在里面探讨 REST 是如何成为这样一个在网络通信领域占主导地位的范式的。我通过阅读 [2000 年发表的 <ruby> 罗伊·菲尔丁 <rt>  Roy Fielding </rt></ruby> 的博士论文](https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation_2up.pdf) 开始我的研究，这篇博士论文向世人介绍了 REST 的概念。在读过菲尔丁的博士论文以后，我意识到，相比之下，更引人注意的是菲尔丁的理论缘何受到如此普遍的误解。

（相对公平地说，）很多人知道 REST 源自菲尔丁的博士论文，但并没有读过该论文。因此对于这篇博士论文的原始内容的误解才得以流行。

最大的误解是：这篇博士论文直接解决了构建 API（API）的问题，我此前一直认为 REST 从一开始就打算成为构建在超文本传输协议（HTTP）之上的 <ruby> 网络 API <rt>  Web API </rt></ruby>的架构模型，我相信很多人也这样认为。我猜测此前可能存在一个混乱的试验时期，开发人员采用完全错误的方式在 HTTP 基础上开发 API，然后菲尔丁出现了，并提出了将 REST 做为网络应用程序开发的正确方式。但是这种想法的时间线对不上：我们今天所熟知的网络服务的 API 并非是在菲尔丁出版他的博士论文之后才出现的新生事物。

菲尔丁的博士论文《架构风格与基于网络的软件架构设计》不是讨论如何在 HTTP 的基础上构建 API，而恰恰是讨论 HTTP 本身。菲尔丁是 HTTP/1.0 版规范的贡献者，同时也是 HTTP/1.1 版的共同作者。有感于从 HTTP 的设计中获得的架构经验，他的博士论文将 REST 视为指导 HTTP/1.1 的标准化过程的架构原则的精华。举例而言，他拒绝了使用新的 `MGET` 和 `MHEAD` 方法进行批量请求的提议，因为他认为这违反了 REST 所定义的约束条件，尤其是在一个符合 REST 的系统中传递的消息应该是易于代理和缓存的约束条件。   [1]  因此，HTTP/1.1 转而围绕持久性连接设计，在此基础上可以发送多个 HTTP 请求。（菲尔丁同时认为网页保存在本地的浏览数据，即 cookie 是不符合 REST 的，因为它们在一个状态无关的系统中增加了状态描述，然而它们的应用已经根深蒂固了。   [2] ）菲尔丁认为，REST 并非构建基于 HTTP 的系统的操作指南，而是扩展 HTTP 的操作指南。

这并不意味着菲尔丁认为 REST 不能用于构建其他系统。只是他假定其他系统也是 “<ruby> 分布式超媒体系统 <rt>  distributed hypermedia systems </rt></ruby>”。人们对 REST 还有另一个误解：认为它是一个可以用在任何网络应用中的通用架构。但是从这篇博士论文中菲尔丁介绍 REST 的部分你基本上能够得出如下的结论，“请注意，我们只设计了 HTTP，但是如果你发现你自己也在设计一个\_分布式超媒体系统\_，你也应该采用我们提出的称为 REST 的优秀架构，以让开发变得更容易”。有鉴于互联网已经存在了，我们尚不清楚为什么菲尔丁认为有人可能试图重新创建这样一个（和 HTTP 一样的）系统。或许在 2000 年的时候世界上仍然存在不只一个分布式超文本系统的空间吧。无论如何，菲尔丁已经说得很清楚了，REST 意在提供一套解决方案，来解决在试图经由网络连接超文本内容时出现的可扩展性与一致性问题，*而不是* 作为分布式应用的通用架构模型。

我们现在只记得菲尔丁的博士论文提出了 REST 的概念，但事实上，他的博士论文是在讨论一刀切的软件架构有多么糟糕，以及如何更好地选择符合你需求的软件架构。这篇博士论文中仅用了一个章节来讨论 REST 本身，大量的文本内容都都花在了对你能够在网络应用中运用的不同的架构风格    [3]  的分类上。这些架构风格包括：受 Unix 的管道设计启发的 <ruby> 管道-过滤器 <rt>  Pipe-and-Filter </rt></ruby> （PF）风格，<ruby> 客户-服务器 <rt>  Client-Server </rt></ruby> （CS）风格的多种改进，如 <ruby> 分层-客户-服务器 <rt>  Layered-Client-Server </rt></ruby>（LCS）风格、<ruby> 客户-缓存-无状态-服务器 <rt>  Client-Cache-Stateless-Server </rt></ruby>（C$SS）风格和<ruby> 分层-客户-缓存-无状态-服务器 <rt>  Layered-Client-Cache-Stateless-Server </rt></ruby>（LC$SS）。这些缩略词未必实用，但是菲尔丁认为我们可以通过混合匹配现有风格提供的约束条件来派生出新的风格。REST 就是通过这种方式产生的，它本可以称之为 <ruby> 一致性-分层-按需代码-客户-缓存-无状态-服务器 <rt>  Uniform-Layered-Code-on-Demand-Client-Cache-Stateless-Server </rt></ruby>（ULCODC$SS）风格，显然我们并没有这样做。菲尔丁建立上述分类是为了强调（每一种风格对应的）约束适用于不同的应用，而上述最后一种风格对应的约束是他所认为的最适用于 HTTP 的。

今天，REST 的无处不在是极具讽刺意味的。REST 在各种各样的网络应用中被盲目使用，但是菲尔丁最初只是将 REST 视作一种指引，通过它指导人们裁剪一种软件架构来适应独立应用的特殊需求。

我很难弄清楚这是如何发生的，毕竟菲尔丁已经明确地指出了不能让形式服从功能的陷阱。他在论文的一开始就作出了警告：由于没有正确地理解软件架构而“使用流行的架构设计是经常发生的”   [4] 。他在几页之后又重新强调了这一点：

>
> 一些架构风格经常被描述为适用于一切软件形式的“银弹”解决方案。然而，一名好的设计者应该选择能够满足解决特定问题的需要的架构风格   [5] 。
>
>
>

REST 本身就是一个特别糟糕的 “银弹” 解决方案。正如菲尔丁所指出的，它包含了可能不合适的利弊权衡，除非你试图构建一个分布式超媒体应用：

>
> REST 设计用来高效地进行大粒度的超媒体数据传输，并对网络应用场景中的常用见情形做了优化，但是可能会导致其在与其他形式的软件架构相互作用时不协调。   [6]
>
>
>

菲尔丁提出 REST 是因为网络发展带来了“<ruby> 超越政府的可扩展性 <rt>  anarchic scalability </rt></ruby>”这一棘手问题，菲尔丁的意思是需要以一种高性能的方式跨越组织和国家边界连接文件。REST 所施加的约束是经过精心选择的，以用来解决这一“超越政府的扩展性”问题。*面向公众* 的网络服务 API 同样需要解决类似的问题，因此可以理解为什么 REST 在这些应用中是适用的。然而，时至今日，如果发现一个工程团队使用 REST 构建了一个后端，即使这个后端只与工程团队完全控制的客户端通讯，也不会令人惊讶。我们都成为了 [<ruby> 蒙蒂巨蟒 <rt>  Monty Python </rt></ruby> 的独幕滑稽剧](https://www.youtube.com/watch?v=vNoPJqm3DAY) 中的建筑师，那位建筑师按照屠宰场的风格设计了一座公寓大楼，因为屠宰场是他唯一具有的经验的建筑。（菲尔丁使用了这部滑稽剧中的一句台词作为他的博士论文的题词：打扰一下，你说的是“刀”吗？）（LCTT 校注：顺便说一句，Python 语言的名称来自于 “Monty Python” 这个英国超现实幽默表演团体的名字。）

有鉴于菲尔丁的博士论文一直在极力避免提供一种放之四海而皆准的软件架构，REST 又怎么会成为所有网络服务的事实上的标准呢？

我认为，在 21 世纪头十年的中期人们已经厌倦了简单对象访问协议（SOAP），因此想要创造另一种属于他们自己的四字首字母缩略词。

我只是半开玩笑。<ruby> 简单对象访问协议 <rt>  Simple Object Access Protocol </rt></ruby>（SOAP）是一个冗长而复杂的协议，以致于你没法在不事先理解一堆互相关联的可扩展标记语言（XML）规范的基础上使用它。早期的网络服务提供基于 SOAP 的 API。在 21 世纪头十年中期，随着越来越多的 API 开始提供，被 SOAP 的复杂性激怒的软件开发者随之集体迁移。

SOAP 遭到了这群人的蔑视，Rails 之父 <ruby> 戴维·海涅迈尔·汉森 <rt>  David Heinemeier Hansson </rt></ruby>（LCTT 译注：译自其所著的《重来》的中文版的作者译名）曾经评论：“我们感觉 SOAP 过于复杂了，它已经被企业人员接管。而当这一切发生的时候，通常没有什么好结果。”   [7]  始于这一标志性的评论，Ruby-on-Rails 于 2007 年放弃了对 SOAP 的支持。“企业人员”总是希望所有内容都被正式指定，反对者认为这是浪费时间。

如果反对者不再继续使用 SOAP，他们仍然需要一些标准化的方式来进行工作。由于所有人都在使用 HTTP，而且代理与缓存的所有支持，每个人都至少会继续使用 HTTP 作为传输层，因此最简单的解决方案就是依赖 HTTP 的现有语义。这正是他们所做的工作。他们曾经称之为：<ruby> 去它的，重载 HTTP <rt>  Fuck It, Overload HTTP </rt></ruby>（FIOH）。这会是一个准确的名称，任何曾经试图决定业务逻辑错误需要返回什么 HTTP 状态码的人都能证明这一点。但是在所有的 SOAP 正式规范工作的映衬下，这显得鲁莽而乏味。

幸运的是，出现了这篇由 HTTP/1.1 规范的共同作者创作的博士论文。这篇博士论文与扩展 HTTP 有某种模糊的联系，并给予了 FIOH 一个具有学术体面的外表。因此 REST 非常适合用来掩饰其实仅仅是 FIOH 的东西。

我并不是说事情就是这样发生的，也不是说在不敬业的创业者中确实存在着盗用 REST 的阴谋，但是这个故事有助于我理解，在菲尔丁的博士论文根本就不是讨论网络服务 API 的情况下，REST 是如何成为用于网络服务 API 的架构模型的。采用 REST 的约束存在一些效果，尤其是对于那些面向公众的需要跨越组织边界的 API 来说。这些 API 通常会从 REST 的“统一接口”中受益。这应该是 REST 起初在构建网络 API 时被提及的核心原因。但是，想象一下一种叫做 “FIOH” 的独立方法，它借用 “REST” 的名字只是为了营销，这有助于我解释我们今天所知道的 <ruby> REST 式 <rt>  RESTful </rt></ruby> API 与菲尔丁最初描述的 REST 的架构风格之间的诸多差异。

举例而言，REST 纯粹主义者经常抱怨，那些所谓 RESTful API 实际并不是 REST API，因为它们根本就没有使用 <ruby> 超文本作为应用程序状态引擎 <rt>  Hypermedia as The Engine of Application State </rt></ruby>（HATEOAS）。菲尔丁本人也做出过 [这样的批评](https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven)。根据菲尔丁的观点，一个真正的 REST API 应当允许你通过跟随链接实现从一个基础端点访问所有的端点。如果你认为这些人的确在试图构建 RESTful API，那么存在一个明显的疏漏 —— 使用超文本作为应用程序状态引擎（HATEOAS）的确是菲尔丁最初提出的 REST 概念的基础，尤其是考虑到“描述性状态迁移（REST）”中的“状态迁移（ST）”意指使用资源之间的超链接进行状态机的导航（而不是像很多人所相信的那样通过线路传输资源状态）   [8] 。但是你试想一下，如果每个人都只是在构建 FIOH 的 API，并明里暗里的将之作为 REST API 宣传，或者更诚实一点说是作为 “RESTful” API 宣传，那么自然使用超文本作为应用程序状态引擎（HATEOAS）也就不重要了。

类似的，你可能会感到惊讶：尽管软件开发者喜欢不断地争论使用 `PUT` 方法还是使用 `PATCH` 方法来更新资源更加 RESTful，菲尔丁的博士论文却没有讨论哪个 HTTP 的操作方法应该映射到增删改查（CURD）操作。在 HTTP 操作与 CURD 操作之间建立一个标准的映射表是有用的，但是这一映射表是 FIOH 的一部分而不是 REST 的一部分。

这就是为什么，与其说没有人理解 REST，不如说我们应该认为 “REST” 这一术语是被误用了。REST API 这一现代概念与菲尔丁的 REST 架构之间存在历史联系，但事实上它们是两个不同的概念。历史联系适合作为确定何时构建 RESTful API 的指引而留在心底。你的 API 需要像 HTTP 那样跨越组织和政府边界吗？如果是的话，那么构建具有统一的可预测的接口的 RESTful API 可能是正确的方式。如果不是的话，你最好记住，菲尔丁更倾向于形式服从功能。或许类似 GraphQL 的方案或者仅仅 JSON-RPC 更适合你试图完成的工作。

---

1. Roy Fielding. “Architectural Styles and the Design of Network-based Software Architectures,” 128. 2000. University of California, Irvine, PhD Dissertation, accessed June 28, 2020, <https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation_2up.pdf>. [↩](#fnref1)
2. Fielding, 130. [↩](#fnref2)
3. Fielding distinguishes between software architectures and software architecture “styles.” REST is an architectural style that has an instantiation in the architecture of HTTP. [↩](#fnref3)
4. Fielding, 2. [↩](#fnref4)
5. Fielding, 15. [↩](#fnref5)
6. Fielding, 82 [↩](#fnref6)
7. Paul Krill. “Ruby on Rails 2.0 released for Web Apps,” InfoWorld. Dec 7, 2007, accessed June 28, 2020, <https://www.infoworld.com/article/2648925/ruby-on-rails-2-0-released-for-web-apps.html> [↩](#fnref7)
8. Fielding, 109. [↩](#fnref8)

---

via: <https://twobithistory.org/2020/06/28/rest.html>

作者：[Two-Bit History](https://twobithistory.org) 选题：[lujun9972](https://github.com/lujun9972) 译者：[CanYellow](https://github.com/CanYellow) 校对：[wxy](https://github.com/wxy)

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


终端基础：在 Linux 中创建文件

Summary: 现在让我们学习如何在 Linux 命令行中创建文件。

现在让我们学习如何在 Linux 命令行中创建文件。

# 终端基础：在 Linux 中创建文件

到目前为止，在这个终端基础系列中，你已经学会了：

* [更改目录](https://itsfoss.com/change-directories/)
* [创建新目录](https://itsfoss.com/make-directories/)
* [列出目录内容](https://itsfoss.com/list-directory-content/)

现在让我们学习如何在 Linux 命令行中创建文件。我将简要讨论向文件添加内容。但是，稍后将介绍有关编辑文本文件的详细信息。

### 使用 touch 命令创建一个新的空文件

使用 `touch` 命令非常简单。

```
touch filename

```

切换到你的主目录并创建一个名为 `practice_files` 的新目录，然后切换到该目录：

```
mkdir practice_files && cd practice_files

```

>
> ? `&&` 是一种组合两个命令的方法。只有当第一个命令执行成功时，第二个命令才会运行。
>
>
>

现在，创建一个名为 `new_file` 的新文件：

```
touch new_file

```

就是这样。你刚刚创建了一个新的空文件。

列出目录内容并使用 `ls -l` 命令检查文件的属性。

>
> ? `touch` 命令的最初目的是“触摸”文件并更改其时间戳。如果提供的文件不存在，它会创建一个具有该名称的新文件。
>
>
>

### 使用 echo 命令创建一个新文件

很久以前我就应该向你介绍 `echo` 命令。迟到总比不到好。`echo` 命令显示你提供给它的任何内容。因此得名“回声”。

```
echo Hello World

```

你可以使用重定向并将输出路由到文件。因此在此过程中创建一个新文件：

```
echo "Hello World" >> other_new_file

```

这样，你将创建一个名为 `other_new_file` 的新文件，其中包含文本 `Hello World`。

请记住，如果提供的文件已经存在，使用 `>>` 重定向，你将向文件添加一个新行。你也可以使用 `>` 重定向，但它会替换文件的现有内容。

更多关于重定向的信息可以在下面的教程中找到。

>
> **[解释：Linux 中的输入、输出和错误重定向](https://linuxhandbook.com/redirection-linux/?ref=its-foss)**
>
>
>

### 使用 cat 命令创建新文件

`cat` 命令的最初目的是连接文件。但是，它主要用于显示文件的内容。

它还可以使用选项创建新文件并添加内容。为此，你可以使用相同的 `>` 和 `>>` 重定向。

```
cat >> another_file

```

但是这个将创建一个新文件并允许你向其中添加一些文本。添加文本是可选的。**你可以使用 `Ctrl+d` 键退出 `cat` 输入模式。**

同样，附加模式 `>>` 在文件内容的末尾添加新文本，而覆盖模式 `>` 用新内容替换现有内容。

>
> ? 使用 `ls -l` 长列表显示并注意时间戳。现在 `touch` 文件：
>
>
>

```
touch other_new_file

```

你看到时间戳的区别了吗？

### 测试你的知识

你已经了解了如何创建新文件。这里有一些简单的练习来练习你刚刚学到的东西。它也包括前几章的一些内容。

* 使用 `touch` 命令创建三个新文件，分别命名为 `file1`、`file2` 和 `file3`。提示：你不需要运行 `touch` 三次。
* 创建一个名为 `files` 的目录，并在其中创建一个名为 `my_file` 的文件。
* 使用 `cat` 命令创建一个名为 `your_file` 的文件，并在其中添加以下文本 “This is your file”。
* 使用 `echo` 命令将新行 “This is our file” 添加到 `your_file`。
* 以相反的时间顺序显示所有文件（请参阅第 3 篇）。现在使用 `touch` 命令修改 `file2` 和 `file3` 的时间戳。现在再次按时间倒序显示内容。

这很有趣。你正在取得很好的进步。你已在本章中学会了创建新文件。接下来，你将学习如何查看文件的内容。

---

via: <https://itsfoss.com/create-files/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[lkxed](https://github.com/lkxed/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #946 Mastodon 用户数突破一千万

Summary:
? Mastodon 用户数突破一千万
? Web3 基础设施基金会于香港成立
? AWS 发布 Amazon Linux 2023
»
»

一旦用户量猛增。往往意味着快被封了。。。

# 硬核观察 #946 Mastodon 用户数突破一千万

### Mastodon 用户数突破一千万

在马斯克收购 Twitter 前，Mastodon 有大约 50 万活跃用户。在马斯克一系列“神操作”之后，Mastodon 在 11 月份涌入了大量用户，高峰时每天新增逾 13 万用户。如今 Mastodon 的活跃度略有下降，每天能增加 4.5 万左右的用户，它的用户数目前刚刚超过一千万。顺便说一句，马斯克之前曾承诺在二月底开源 Twitter 的推荐算法，最新的 [说法](https://news.slashdot.org/story/23/03/18/1515211/elon-musk-says-twitter-will-open-source-its-recommendation-code-on-march-31) 是，他将在 3 月 31 日公开。

>
> **[消息来源：Mastodon](https://mastodon.social/@mastodonusercount/110051957865629817)**
>
>
>

>
> 老王点评：Mastodon 还是有些不足，期待随着用户数量增加，可以更加完善起来。
>
>
>

### Web3 基础设施基金会于香港成立

Web3 基础设施的技術涉及共识算法、联邦化、零知识证明、基于中继的协议、去中心化身份认证、可信计算、机密计算、操作系統运行时安全、软硬件供应链安全、区块链等多个领域。Web3 基础设施基金会于 2 月在香港成立，旨在推进 Web3 进程设施生态的发展。

>
> **[消息来源：Solidot](https://www.solidot.org/story?sid=74436)**
>
>
>

>
> 老王点评：如果感觉 Web3 还距离较远，那其实是基础设施尚未发展成熟。这就如同近些年的互联网和 AI 等领域的发展，本质上都是基础设施进一步发展带来的。
>
>
>

### AWS 发布 Amazon Linux 2023

自 2010 年以来，AWS 就提供了为云计算环境优化的 Linux 发行版，Amazon Linux 是 AWS 上使用最多的 Linux 发行版。本周他们宣布了其第三代版本：Amazon Linux 2023。AWS 称，在 Amazon Linux 2023 上部署工作负载有三大好处：“高安全标准、可预测的生命周期和一致的更新体验。”有趣的是，Amazon Linux 基于 Fedora Linux，但并非基于某个特定版本，而是包括了来自 Fedora 34、35 和 36 等多个版本的组件，并对一些组件进行了修改，其他组件与 CentOS Stream 9 中的组件更接近，或独立开发。除了 Fedora 的所提供的内核外，Amazon Linux 还提供了内核社区的其它长期支持内核。

>
> **[消息来源：AWS](https://aws.amazon.com/cn/blogs/aws/amazon-linux-2023-a-cloud-optimized-linux-distribution-with-long-term-support/)**
>
>
>

>
> 老王点评：每个云厂商都有个自己的 Linux 发行版，但是要是能不仅仅局限于自己的云，那就比较成功了。
>
>
>


NixOS 系列 #3：在 NixOS 中安装和删除软件包

Summary: NixOS 中的打包系统是它最强大的地方。

NixOS 中的打包系统是它最强大的地方。

# NixOS 系列 #3：在 NixOS 中安装和删除软件包

NixOS 中的打包系统是它最强大的地方。Nix 软件包管理器使用的语法与 `apt`、`dnf` 和其他软件包管理器大不相同。

这也是 [人们应该尝试使用 NixOS 的原因之一](/article-15606-1.html)。

在本指南中，我将分享两种在 NixOS 上安装和删除软件包的方法：

* 使用 Nix 软件包管理器
* 使用 `configuration.nix` 配置文件

>
> ⚠ 使用 Nix 软件包管理器，你只能安装软件包，而不能安装 OpenSSH 或 Plex 服务器等服务。对于服务的安装，你必须使用 Nix 配置文件。
>
>
>

要安装任何软件包，必须知道它的确切名称，为此，我将从如何在 NixOS 中搜索软件包开始。

### 搜索软件包

要寻找软件包，你可以使用它的 [网页搜索](https://search.nixos.org/packages?ref=its-foss)。

你可以使用如下步骤：

* 在搜索栏中输入软件包的名称
* 选择适当的软件包（从给出的描述中决定）
* 点击 “nix-env” 标签页
* 复制 NixOS 命令（第一条）

例如，如果我想要 `librewolf` 包，我将执行以下操作：

你也可以通过终端做同样的事情。

要使用终端搜索软件包，你可以按照给定的命令语法进行：

```
nix-env -qaP --description [软件包名称]

```

例如，在这里，我搜索了 `librewolf`：

你必须复制输出的第一行，因为那是你需要安装的软件包的名称。

在这里它是 `nixos.librewolf`。

是的，它听起来可能没有像使用 [APT](https://itsfoss.com/apt-command-guide/) 或 DNF 时软件包名字那么方便。但是，我认为这并不是大问题。

一些妥协或许会换来一些好处？

### 在 NixOS 中安装一个软件包

要安装一个软件包，你所要做的就是使用以下命令语法：

```
nix-env -iA [软件包名称]

```

而且，如果你使用网络搜索来寻找软件包，你就已经有了安装所需的确切命令。

所以，假设我想安装 `librewolf'，我将使用以下命令：

```
nix-env -iA nixos.librewolf

```

如果你想进行全系统的安装（让每个用户都能使用这个包），用 `sudo` 执行安装命令：

```
sudo nix-env -iA nixos.librewolf

```

就是这样！你将很快安装好你喜欢的软件包。

### 在 NixOS 中卸载一个软件包

要删除一个软件包，你可以参考下面的命令语法：

```
nix-env --uninstall [软件包名称]

```

因此，如果我必须删除 `librewolf` 包，我必须使用以下命令：

```
nix-env --uninstall librewolf

```

如果你仔细注意，我使用了 `librewolf` 而不是 `nixos.librewolf` 来安装。

这意味着你在删除软件包时要跳过 `nixos` 部分，这使事情变得简单而快速。

### 在 NixOS 中安装服务

正如我前面提到的，你不能使用 Nix 软件包管理器来安装像 OpenSSH、Plex 服务器、[Flatpak](https://itsfoss.com/what-is-flatpak/) 等服务。

从搜索服务到安装过程，都与你上面看到的不同。

所以让我先说说如何 **搜索服务**。

* 要搜索服务，请前往 Nix 软件包搜索 [网页](https://search.nixos.org/packages?ref=its-foss)
* 选择 “<ruby> NixOS 选项 <rt>  NixOS options </rt></ruby>”（页面顶部菜单行的第三个选项）
* 输入你要找的服务的名称
* 复制服务的名称

例如，在这里，我正在搜索 OpenSSH 服务。

一旦你找到了这个名字，用下面的命令打开 `configuration.nix` 文件：

```
sudo nano /etc/nixos/configuration.nix

```

并在行末添加服务的名称（在 `}` 之前），如下：

```
[service_name] = true;

```

由于 **我想启用 OpenSSH**，我将添加以下内容：

```
services.openssh.enable = true;

```

一旦你在配置文件中添加了服务，[保存修改并退出 Nano](https://linuxhandbook.com/nano-save-exit/?ref=its-foss) 文本编辑器。

要启用该服务，请重建配置文件，并使用以下命令切换到所做的更改：

```
sudo nixos-rebuild switch

```

这就行了，你已经启用了该服务。

### 从 NixOS 卸载服务

要卸载一个服务，你所要做的就是在 `configuration.nix` 文件中删除或注释该服务的一行。

因此，首先，用以下命令打开配置文件：

```
sudo nano /etc/nixos/configuration.nix

```

寻找服务，并删除这一行或用 `#` 注释掉：

通过添加注释 `#`，我忽略了 OpenSSH 服务的加载，因为我不再需要它在我的系统上。

保存修改并退出文本编辑器。

最后，重建配置文件并进行切换：

```
sudo nixos-rebuild switch

```

### 使用 Nix 配置文件安装软件包

配置文件可以让你 **方便地一次性管理软件包**。

要使用 Nix 配置文件安装软件包，你必须在配置文件中输入软件包的名称、重建，然后切换到配置文件，就可以了。

首先，打开 `configuration.nix` 文件。

```
sudo nano /etc/nixos/configuration.nix

```

如果你想 **为一个特定的登录用户安装软件包**，将软件包的名称添加到用户的配置文件中。

用户配置文件看起来像这样：

```
users.users.sagar = {
    isNormalUser = true;
    description = "Sagar";
    extraGroups = [ "networkmanager" "wheel" ];
    packages = with pkgs; [
      firefox
    ];
  };

```

当然，它将显示你的用户名而不是 `sagar`。

你应该使用如下语法来添加软件包的名称：

```
packages = with pkgs; [
  软件包名称
  ];

```

所以我们假设我也想安装 `Thunderbird`，那么我将添加它的名字，如下所示：

你必须在方括号内添加所有的软件包名称，不要用逗号。它必须像截图中描述的那样一个软件一个新的行。

但是如果你想在整个系统中安装这个包，那么你必须在 `environment.systemPackages` 下添加包的名字，比如：

```
environment.systemPackages = with pkgs; [
  软件包名称
];

```

一旦你完成了在系统配置文件或用户配置文件，甚至两者中添加所需软件包的名称，你将需要按照同样的命令来完成安装：

```
sudo nixos-rebuild switch

```

这样就可以了！

### 使用 Nix 配置文件删除软件包

要删除软件包，你所要做的就是按照给定的简单步骤进行：

* 打开 Nix 配置文件
* 删除或注释掉软件包的名称
* 重新构建配置并进行切换

所以，让我们从第一步开始（打开配置文件）：

```
sudo nano /etc/nixos/configuration.nix

```

接下来，注释掉用户配置文件或系统配置文件中的包的名称：

保存更改并退出配置文件。

最后，重建配置文件，并做一个切换来删除包：

```
sudo nixos-rebuild switch

```

这是这样！

>
> ? 目前，还没有官方的 GUI 工具来帮助你安装/删除软件包。你可能会发现一些由社区开发的项目，如 [nix-gui](https://github.com/nix-gui/nix-gui?ref=its-foss) 和 [nix42b](https://gitlab.com/juliendehos/nix42b?ref=its-foss)，但它们不再被维护或仅仅处于早期开发阶段。
>
>
>

### 接下来...

我希望你喜欢阅读 NixOS 系列，就像我写它一样。

在下一篇中，我将强调一些在你安装 NixOS 后需要马上做的重要事情。

如果你认为我遗漏了什么或有其他建议，请在评论中告诉我。

---

via: <https://itsfoss.com/nixos-package-management/>

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

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


我是如何毁掉我的树莓派的

Summary: 多测量几次总比测量一次好。我掉到坑里，希望你可以不用。

这是个tp的广告吗？

多测量几次总比测量一次好。我掉到坑里，希望你可以不用。

# 我是如何毁掉我的树莓派的

>
> 多测量几次总比测量一次好。我掉到坑里，希望你可以不用。
>
>
>

我想写一篇文章来演示“如何使用树莓派实现莫某的自动化”，或围绕树莓派的其他一些有趣、好奇或有用的应用。正如你可能从标题中意识到的那样，我不能再提供这样的文章了，因为我毁了我心爱的树莓派。

树莓派是每个技术爱好者办公桌上的标准设备。因此，大量教程和文章告诉你可以用它做什么。这篇文章反而涵盖了阴暗面：我描述了你最好不要做的事情！

### 电缆颜色

在谈到实际的破坏点之前，我想提供一些背景。在房屋内外进行电气工作时，你必须处理不同颜色的电缆。在德国，每栋房子都连接到三相交流电网，你通常会发现以下电缆颜色：

* 零线：蓝色
* （PE）地线：黄绿色
* （L1）火线 1：棕色
* （L2）火线 2：黑色
* （L3）火线 3：灰色

例如，给灯接线时，你接零线（N，蓝色）和火线（L，有 1/3 的机会是棕色），它们之间的电压为 230V 交流电。

### 连接树莓派

今年早些时候，我写了一篇关于 [OpenWrt，家用路由器固件的开源替代品](https://opensource.com/article/22/7/openwrt-open-source-firmware) 的文章。在文章中，我使用了 TP-link 路由器设备。但是，最初的计划是使用我的树莓派 4。

我的想法是构建一个旅行路由器，我可以将其安装在我的大篷车中以改善露营地的互联网连接（我是那种离不开互联网的露营者）。为此，我在我的树莓派中添加了一个单独的 USB 无线网卡以连接第二个 Wifi 天线并安装了 [OpenWrt](https://openwrt.org/)。此外，我添加了一个 12V 至 5V DC/DC 转换器来连接大篷车中的 12V 接线。我用桌上的 12V 汽车电池测试了这个设置，它按预期工作。一切设置和配置完成后，我开始将其安装到我的大篷车中。

在我的大篷车里，我找到了一根蓝色和一根棕色的电线，将它与 12V 至 5V DC/DC 转换器相连，将保险丝放回，然后……

这个芯片，自己爆开了，它才是真正的降压变压器。我非常自信地认为蓝线是在 0V 电位上，棕色的是在 12V 上，我甚至没有测量。后来我了解到，蓝色的线是在 12V 上，而棕色的线是接地（这在汽车电子产品中很常见）。

### 总结

自从这次事故后，我的树莓派就再也启动不起来了。由于树莓派的价格飞涨，我不得不寻找替代品。幸运的是，我遇到了 TP-Link 旅行路由器，它也可以运行 Open-WRT 并且可以令人满意地完成它的工作。

最后：多测量几次总比测量一次好。

---

via: <https://opensource.com/article/23/3/how-i-destroyed-my-raspberry-pi>

作者：[Stephan Avenwedde](https://opensource.com/users/hansic99) 选题：[lkxed](https://github.com/lkxed/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #947 以众包的方式在家用电脑上运行大语言模型

Summary:
? 以众包的方式在家用电脑上运行大语言模型
? 谷歌将某多多应用标记为恶意程序
? 生成式人工智能的下一个领域是视频
»
»

# 硬核观察 #947 以众包的方式在家用电脑上运行大语言模型

### 以众包的方式在家用电脑上运行大语言模型

BigScience 项目最近公布了 BLOOM，这是一个支持 46 种自然语言和 13 种计算机语言的 1760 亿个参数的模型，参数数量和性能与 GPT-3 相当。但它需要超过 350GB 的加速器内存，甚至需要更多的优化调整。他们开发了名为 [Petal](https://petals.ml/) 的框架，可以以众包的方式在家用电脑上运行大语言模型。参与者可以运行客户端和服务器端，可以调整模型，子模块在训练后可以发布在模型中心，以便其他人可以利用它们进行推理或额外的训练。

>
> **[消息来源：Mark Tech Post](https://www.marktechpost.com/2023/03/15/meet-petals-an-open-source-artificial-intelligence-ai-system-that-can-run-100b-language-models-at-home-bit-torrent-style/)**
>
>
>

>
> 老王点评：果然这种众包式的 AI 模型出现了，这可以有效避免 AI 被垄断。
>
>
>

### 谷歌将某多多应用标记为恶意程序

谷歌周一出于安全理由从其官方应用商店下架了某多多应用，将其标记为恶意程序。谷歌说，“这个应用的非谷歌商店版本被发现含有恶意软件，已经通过谷歌商店保护进行防范”。安卓内的安全机制将阻止用户安装它。对于已经安装的该应用的用户，谷歌建议用户卸载。当然，由于众所周知的原因，该应用主要出现在谷歌应用商店之外的厂商商店中。在这之前，多个中国安全研究人员披露该应用包含有恶意功能，居然利用零日漏洞提权来阻止卸载并监视用户。

>
> **[消息来源：Tech Crunch](https://techcrunch.com/2023/03/20/google-flags-apps-made-by-popular-chinese-e-commerce-giant-as-malware/)**
>
>
>

>
> 老王点评：这种眼睛里面不揉沙子的，还得是谷歌。
>
>
>

### 生成式人工智能的下一个领域是视频

几个月来，像 DALL-E 和稳定扩散这样的服务一直在创造美丽的、引人注目的、有时令人不安的图片。现在，一家名为 Runway AI 的初创公司正在使用 AI 生成视频，该系统可以通过用户的几句话提示生成简短的视频片段。目前已经可以在几分钟内生成几秒钟长度的视频。

>
> **[消息来源：彭博社](https://www.bloomberg.com/news/articles/2023-03-20/generative-ai-s-next-frontier-is-video)**
>
>
>

>
> 老王点评：逼真的图像已经可以生成，那生成视频所需的就是更多的资源。将来全 AI 创作的视频、电影，指日可待。
>
>
>


如何在 Linux 中使用旧相机作为网络摄像头

# 如何在 Linux 中使用旧相机作为网络摄像头

>
> 我用 gphoto2 给我的旧单反相机带来了新的生命，把它变成了 Linux 电脑的网络摄像头。
>
>
>

今年，在我基本上放弃了 MacBook，转而使用 NixOS 机器之后，我开始在与人进行视频通话时被要求“打开摄像头”。这是一个问题，因为我没有网络摄像头。我考虑购买一个，但后来我意识到我有一台完好无损的 2008 年产的佳能 EOS Rebel XS 数码单反相机放在书架上。这台相机有一个 mini-USB 接口，所以我自然而然地思考：一台数码单反相机、一个 mini-USB 接口和一台台式电脑，是否意味着我能拥有一个网络摄像头？

只有一个问题。我的佳能 EOS Rebel XS 不能录制视频。它可以拍摄一些漂亮的照片，仅此而已。所以这结束了？

还是有别的办法？

恰好有一个叫做 [gphoto2](http://gphoto.org/) 的神奇的开源软件。一旦安装，它允许你从计算机控制各种支持的相机，并拍摄照片和视频。

### 支持的相机

首先，了解你的设备是否得到支持：

```
$ gphoto2 --list-cameras

```

### 拍摄图像

你可以用它拍照：

```
$ gphoto2 --capture-image-and-download

```

快门触发，图像会保存到你当前的工作目录中。

### 录制视频

我意识到了这里的潜力，所以尽管我的相机没有视频功能，我还是决定尝试 `gphoto2 --capture-movie` 命令。不知怎么，尽管我的相机不支持视频功能，`gphoto2` 仍然能够生成一个 MJPEG 文件！

在我的相机上，我需要将其置于“实时预览”模式下，然后 `gphoto2` 才能录制视频。这包括将相机设置为纵向模式，然后按下 “<ruby> 设置 <rt>  Set </rt></ruby>” 按钮，使取景器关闭，相机屏幕显示图像。不幸的是，这还不足以将其用作网络摄像头。它仍然需要分配一个视频设备，例如 `/dev/video0`。

### 安装 ffmpeg 和 v4l2loopback

毫不奇怪，有一个开源的解决方案来解决这个问题。首先，使用你的包管理器安装 `gphoto2`、`ffmpeg` 和 `mpv`。例如，在 Fedora 、CentOS 、Mageia 和类似的 Linux 发行版上：

```
$ sudo dnf install gphoto2 ffmpeg mpv

```

在 Debian、Linux Mint 及其类似发行版:

```
$ sudo apt install gphoto2 ffmpeg mpv

```

我使用的是 NixOS，这是我的配置文件：

```
# configuration.nix
...
environment.systemPackages = with pkgs; [
  ffmpeg
  gphoto2
  mpv
...
]
```

创建虚拟视频设备需要使用 `v4l2loopback` Linux 内核模块。在撰写本文时，该功能未包含在主线内核中，因此你需要自己下载和编译它：

```
$ git clone https://github.com/umlaeute/v4l2loopback
$ cd v4l2loopback
$ make
$ sudo make install
$ sudo depmod -a

```

如果你像我一样使用 NixOS ，你可以在 `configuration.nix` 中添加额外的模块包：

```
[...]
boot.extraModulePackages = with config.boot.kernelPackages;
[ v4l2loopback.out ];
boot.kernelModules = [
  "v4l2loopback"
];
boot.extraModprobeConfig = ''
  options v4l2loopback exclusive_caps=1 card_label="Virtual Camera"
'';
[...]

```

在 NixOS 上, 运行 `sudo nixos-rebuild switch`，然后重启。

### 创建一个视频设备

假设你的计算机当前没有 `/dev/video` 设备，你可以借助 `v4l2loopback` 在需要时创建一个。

运行以下命令，将 `gphoto2` 中的数据发送到 `ffmpeg`，使用设备如 `/dev/video0` 设备：

```
$ gphoto2 --stdout --capture-movie |
 ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video0

```

你得到的输出是这样的：

```
ffmpeg version 4.4.1 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11.3.0 (GCC)
  configuration: --disable-static ...
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Capturing preview frames as movie to 'stdout'. Press Ctrl-C to abort.[mjpeg @ 0x1dd0380] Format mjpeg detected only with low score of 25, misdetection possible!
Input #0, mjpeg, from 'pipe:':
  Duration: N/A, bitrate: N/A
  Stream #0:0: Video: mjpeg (Baseline), yuvj422p(pc, bt470bg/unknown/unknown), 768x512 ...
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> rawvideo (native))[swscaler @ 0x1e27340] deprecated pixel format used, make sure you did set range correctly
Output #0, video4linux2,v4l2, to '/dev/video0':
  Metadata:
    encoder         : Lavf58.76.100
  Stream #0:0: Video: rawvideo (I420 / 0x30323449) ...
    Metadata:
      encoder         : Lavc58.134.100 rawvideoframe=  289 fps= 23 q=-0.0 size=N/A time=00:00:11.56 bitrate=N/A speed=0.907x

```

要查看来自网络摄像头的视频，请使用 `mpv` 命令：

```
$ mpv av://v4l2:/dev/video0 --profile=low-latency --untimed

```

### 自动启动你的网络摄像头

每次想使用网络摄像头时都需要执行一次命令有点麻烦。幸运的是，你可以在启动时自动运行此命令。我将其实现为一个 `systemd` 服务：

```
# configuration.nix
...
  systemd.services.webcam = {
    enable = true;
    script = ''
      ${pkgs.gphoto2}/bin/gphoto2 --stdout --capture-movie |
        ${pkgs.ffmpeg}/bin/ffmpeg -i - \
            -vcodec rawvideo -pix_fmt yuv420p -f v4l2  /dev/video0
    '';
wantedBy = [ "multi-user.target" ];
  };
...

```

在 NixOS 上，运行 `sudo nixos-rebuild switch`，然后重新启动你的计算机。你的网络摄像头已经开启并处于活动状态。

要检查是否存在任何问题，可以使用 `systemctl status webcam` 命令。它会告诉你服务最后一次运行的时间，并提供其以前输出的日志。这对于调试非常有用。

### 迭代以使其变得更好

止步于此也许很诱人。但是，考虑到当前的全球危机，我们可能需要思考是否有必要一直开着网络摄像头。这让我感到不太理想，原因如下：

* 这浪费电。
* 这类事情涉及隐私问题。

我的摄像头有一个镜头盖，所以说实话，第二个原因并不真的让我感到困扰。当我不使用网络摄像头时，我总是可以把镜头盖上。然而，让一个耗电量大的单反相机整天开着（更不用说需要解码视频所需的 CPU 开销），对我的电费并没有任何好处。

理想情况是：

* 我一直把相机插在电脑上，但是关闭的。
* 当我想使用网络摄像头时，我按下相机的电源按钮将其打开。
* 我的计算机会检测到相机并启动 systemd 服务。
* 使用网络摄像头完成后，我再次将其关闭。

为了实现这一点，你需要使用一个自定义的 udev 规则。

udev 规则可以告诉你的计算机，当它发现某个设备已经可用时执行某个任务。这可以是外部硬盘甚至是非 USB 设备。在这种情况下，你需要通过其 USB 连接识别相机。

首先，指定 udev 规则被触发时要运行的命令。你可以用一个 shell 脚本来完成（`systemctl restart webcam` 应该可以工作）。我运行的是 NixOS，所以我只需要创建一个派生包（一个 Nix 包），它会重新启动 systemd 服务：

```
# start-webcam.nix
with import <nixpkgs> { };
writeShellScriptBin "start-webcam" ''
  systemctl restart webcam
  # debugging example
  # echo "hello" &> /home/tom/myfile.txt
  # If myfile.txt gets created then we know the udev rule has triggered properly''

```

接下来，实际定义 udev 规则。查找摄像头的设备和厂商 ID。使用 `lsusb` 命令可以完成此操作。该命令可能已经安装在你的发行版上，但我不经常使用它，因此我只需要根据需要使用 `nix-shell` 安装它：

```
$ nix-shell -p usbutils

```

无论你的计算机上已经安装了它，还是刚刚安装，请运行 `lsusb` ：

```
$ lsusb
Bus 002 Device 008: ID 04a9:317b Canon, Inc. Canon Digital Camera[...]

```

在此输出中，厂商 ID 为 `04a9`，设备 ID 为 `317b`。这已足以创建 udev 规则：

```
ACTION=="add", SUBSYSTEM=="usb",
ATTR{idVendor}=="04a9",
ATTR{idProduct}=="317b",
RUN+="/usr/local/bin/start-webcam.sh"

```

或者，如果你使用的是 NixOS：

```
# configuration.nix[...]let
  startWebcam = import ./start-webcam.nix;[...]
services.udev.extraRules = ''
  ACTION=="add",  \
  SUBSYSTEM=="usb", \
  ATTR{idVendor}=="04a9", \
  ATTR{idProduct}=="317b",  \
  RUN+="${startWebcam}/bin/start-webcam"'';[...]

```

最后，在你的 `start-webcam` systemd 服务中删除 `wantedBy = ["multi-user.target"];` 这一行。（如果保留它，则无论相机是否开启，该服务都会在下次重启时自动启动。）

### 重复使用旧技术

我希望这篇文章能让你在放弃一些旧技术之前三思而后行。Linux 可以为技术注入活力，无论是你的电脑还是数码相机或其他外围设备等简单的东西。

---

via: <https://opensource.com/article/22/12/old-camera-webcam-linux>

作者：[Tom Oliver](https://opensource.com/users/tomoliver) 选题：[lkxed](https://github.com/lkxed) 译者：[Pabloxllwe](https://github.com/Pabloxllwe) 校对：[wxy](https://github.com/wxy)

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


Postgres DevOps 数据库管理员的日常

Summary: 数据库管理员（DBA）的职责是什么？

数据库管理员（DBA）的职责是什么？

# Postgres DevOps 数据库管理员的日常

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

>
> 数据库管理员（DBA）的职责是什么？
>
>
>

在依赖 Postgres 作为主要数据库管理系统的现代 IT 组织中，Postgres DevOps DBA 发挥着关键作用。Postgres DevOps DBA 的角色涉及许多职责、技能和任务。其中一些包括：管理数据库设计和架构、基础设施管理、确保高可用性、安全性以及执行日常维护任务（调整、备份和恢复以及监控）。

本文总结了当今企业环境中 Postgres DevOps DBA 的常见职责和技能。

### 数据库设计和架构

Postgres DevOps DBA 的两个主要职责是数据库设计和架构。该角色必须对应用的数据存储要求和涉及的业务逻辑有更深入的了解。这些知识包括设计和创建数据库模式和表。它还意味着配置索引和其他数据库对象以优化查询性能，并选择使用正确的 Postgres 版本。该角色必须确保数据库的设计具有可扩展性和可维护性，同时考虑到未来的增长和数据保留需求。

### 性能调优

另一个关键的职责是性能调优。Postgres DevOps DBA 必须能够通过监控数据库性能指标和分析查询性能来识别和解决性能问题。该角色还必须对数据库有深入的了解，并能够对其进行配置以获得最佳性能，包括优化查询和索引、调整内存设置以及识别和解决性能瓶颈。

### 备份与恢复

备份和恢复也是职责的关键。DBA 必须对备份和恢复解决方案有深入的了解，并且必须设计和实施备份策略，以确保在数据丢失的情况下始终可以恢复数据。他们还必须验证恢复过程并实施高可用性和灾难恢复解决方案，以最大限度地减少停机时间和数据丢失。

### 安全

安全是另一个重要的职责。DBA 通过实施访问控制、加密和其他安全措施来保护数据，从而确保数据库安全。他们还必须了解最新的安全趋势和最佳实践，并加以实施以防范潜在威胁。

### 基础设施管理

基础设施管理也是一项重要职责。这些 DBA 必须管理硬件、网络和存储基础设施，并提供基础设施以支持 Postgres。他们还必须针对性能和可用性配置基础架构，并根据需要扩展基础架构以适应数据增长。

### 自动化和脚本

该角色必须能够使用 [Ansible](https://opensource.com/article/19/2/quickstart-guide-ansible)、Terraform 和 [Kubernetes](https://www.redhat.com/en/topics/containers/what-is-kubernetes?intcmp=7013a000002qLH8AAM) 等工具自动执行重复性任务，例如备份、监控和修补。他们还必须熟悉自动化最佳实践，以确保高效且有效地自动化任务。自动化减少了人为错误的可能性，提高了效率，并允许 DBA 专注于更复杂的任务。

### 监控和配置警报

监控数据库和基础设施并设置警报以通知他们问题非常重要。该角色还必须采取主动措施来防止停机和数据丢失，使用 Nagios、Zabbix 和 Prometheus 等监控工具来检测潜在问题。

### 合作

除了这些技术职责外，PostgreSQL DevOps DBA 还必须与其他 IT 团队（例如开发人员、运维人员和安全人员）协作，以将数据库集成到更大的 IT 生态系统中。DBA 还必须记录他们的工作，并及时了解 Postgres 和 [DevOps](https://opensource.com/article/20/12/remote-devops) 的最新趋势和最佳实践。这涉及与利益相关者合作以收集需求、确定优先级并使数据库与组织的更广泛目标保持一致。

### 总结

总之，Postgres DevOps DBA 在依赖 Postgres 作为主要数据库管理系统的现代 IT 组织中发挥着关键作用。你当前的技能和期望如何匹配此列表？作为现代数据库环境中的 DBA，你是否走在正确的道路上？

---

via: <https://opensource.com/article/23/3/postgres-devops-dba>

作者：[Doug Ortiz](https://opensource.com/users/dougortiz) 选题：[lkxed](https://github.com/lkxed/) 译者：[geekpi](https://github.com/geekpi) 校对：[校对者ID](https://github.com/%E6%A0%A1%E5%AF%B9%E8%80%85ID)

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


硬核观察 #948 俄罗斯开发者被阻止向“自由及开源软件”贡献

Summary:
? 俄罗斯开发者被阻止向“自由及开源软件”贡献
? 现代汽车承诺在汽车中保留实体按钮
? 甲骨文公司宣布推出 Java 20
»
»

俄罗斯开发者被阻止向“自由及开源软件”贡献。针对这件事。开源自由也是一个笑话，所以说一切与政治无关就是扯蛋。现在这种国际关系，哪天开源对我们关闭也是完全可能的~~~

FOSS 从来没说过与 XX 无关，ta 本来就是算是一种 XX 运动。好像很多人都把 FOSS 理解成“技术圣母”了，实际上 FOSS 的诉求是用户有使用、复制、研究、修改和分发的权利，从来没有说过维护者要无条件接纳、包容、满足用户或是提交者。Linus 本人拒绝的补丁还少吗，而且拒绝的口气大多很不好呢，不可能别的补丁就可以拒绝，某些补丁就更高贵一些不能拒绝吧，当维护者又不是当狗。维护者看提交者不顺眼，当然可以拒绝，这是维护者的权力，提交者不爽可以分叉，这是提交者的权力，用户看这种行为不爽可以不用，这是用户的权力。

很多人自己幻想出一套圣母级的开源标准，然后拿着这套标准去指责这个那个不符合开源精神，这是你的标准不是别人的标准。开源说到底就是按自己喜欢的标准公开代码而已，不是按别人喜欢的标准，又不是别人的仆人。

# 硬核观察 #948 俄罗斯开发者被阻止向“自由及开源软件”贡献

### 俄罗斯开发者被阻止向“自由及开源软件”贡献

最近有两起俄罗斯开发者被阻止贡献 FOSS 代码的事件。在 Linux 内核邮件列表上，俄罗斯芯片制造商贝加尔电子公司的 Sergey Semin 的贡献被拒绝了，“我们对接受来自贵组织生产的硬件或与之相关的补丁感到不舒服。”另外一件也是针对俄罗斯开发者的，他的 GitHub 账户已被封锁。他开发的 “一个管理和配置支持智能平台管理界面的设备的工具”，ipmitool，被标记为只读“存档”。原因是他为俄罗斯芯片制造商 Yadro 工作，该公司正在研发 RISC-V 芯片，被列入了乌克兰的战争与制裁数据库。

>
> **[消息来源：The Register](https://www.theregister.com/2023/03/21/russian_foss_contributions_blocked/)**
>
>
>

>
> 老王点评：GitHub 倒也罢了，那毕竟是一家美国公司。Linux 内核，FOSS ？！呵呵。
>
>
>

### 现代汽车承诺在汽车中保留实体按钮

这是一个源于安全考虑的决定，现代汽车公司的设计主管说，“对我来说，与安全有关的按钮必须是一个硬键，……很容易感知和感觉到它”。但未来的情况可能会发生变化。特别是，当自动驾驶成为主流时，该公司可能会更多地考虑使用触摸控制。“当涉及到 4 级自动驾驶时，那么我们将拥有一切软键。”

>
> **[消息来源：The Drive](https://www.thedrive.com/news/hyundai-promises-to-keep-buttons-in-cars-because-touchscreen-controls-are-dangerous)**
>
>
>

>
> 老王点评：现在有些汽车你都找不到什么按键和旋钮，真当自己的软件系统万无一失吗？
>
>
>

### 甲骨文公司宣布推出 Java 20

这个有 27 年历史的语言的最新版本包括数以千计的性能、稳定性和安全性方面的改进，并对 Java 开发工具包提出了 7 项增强建议。甲骨文公司在过去的五年中，每六个月推出一个新的 Java 版本，并说它是这个开源项目的最大贡献者，在 Java 开发组织中排名第一。Java 的开发分为六个项目，分别针对性能和功能的不同方面，如使其更加简洁和不容易出错、改善启动时间和性能、实现大规模并行等等。今年 9 月将发布的 Java 21 将是每两年一个的 LTS 版本。

>
> **[消息来源：Silicon Angle](https://siliconangle.com/2023/03/21/oracle-aims-sustain-javas-27-year-franchise-version-20-rollout/)**
>
>
>

>
> 老王点评：Java 是不错，就是被当成下金蛋的母鸡了。
>
>
>


Linux 上 5 款最好的 EPUB 阅读器

居然没有 koreader

# Linux 上 5 款最好的 EPUB 阅读器

>
> 你正在寻找 Linux 上最好的 EPUB 阅读器？这里是为你准备的最好的自由开源的 EPUB 阅读器。
>
>
>

你是一位热衷于阅读电子书的 Linux 用户吗？如果，是的，你必然知道在 Linux 发行版上的默认文档阅读器不能满足你作为一名书虫的所有要求。

EPUB 是一种广泛使用的开放电子书格式，大多数的电子书阅读器都支持。值得庆幸的是，在 Ubuntu 软件中心和其它存储库中有一些 EPUB 阅读器应用程序，你可以自由下载它们。.

但是，请记住，仅有几个好用的阅读器。并不是有很多！

在这篇文章中，我们将讨论在 Ubuntu Linux 上的最好的 EPUB 阅读器，这将增强你的阅读体验。我们也将探讨它们的特色功能和优点，以便你可以选择一个适合你的应用程序。

但是，在此之前，你认为在一个 “令人满意的” EPUB 阅读器中，应该有哪些功能呢？

### 在一款 EPUB 阅读器中所应该有的功能

* **用户界面**：一款好的 EPUB 阅读器应该有一个简单易懂的用户界面，它会使导航和自定义你的阅读体验变得简单。你并不是在阅读一本实体书，因此，对于 “实体书” 的阅读体验来说，用户界面是极其重要的！
* **自定义**：拥有自定义字体大小、字体类型、背景颜色和其它设置的能力，它们将增强你的阅读体验。
* **书架**：书架是一种很方便的特色功能，它允许你组织你的 EPUB 文件和保持追踪你的阅读进度。
* **注释**：在你的 EPUB 文件中，高亮显示、下划线和添加注释是一种很重要的特色功能，它会帮助你记住重点。
* **同步**：如果你在多台设备上阅读 EPUB 文件，同步你的阅读进度和书签是非常重要的，可以避免丢失你的追踪进度.

现在，让我们看看为 Ubuntu 和其它的 Linux 发行版提供的最好的 EPUB 阅读器，它们都涉及上述所有的特色功能。

### 在 Ubuntu 和其它 Linux 发行版上的最好的 EPUB 阅读器

#### Calibre

在这份列表上的第一款阅读器是 Calibre ，它是最好的和最完善的电子书管理解决方案。它是一款功能强大的 EPUB 阅读器，也提供电子书管理工具。它在用户中是一种流行的选择，因为它有丰富的特色功能集，包括：转换 EPUB 文件到不同的格式、编辑 EPUB 文件，甚至创建你自己的 EPUB 文件的功能。Calibre 也有一个用户友好的界面，允许你自定义你的阅读体验。

Calibre 正在持续更新，每个月都会有大量的特色功能和增强的功能。它的开发活动是非常活跃的，它是这份列表中最好的一个。

功能摘要：

* 支持多种电子书设备（基于安卓、iOS 的设备）
* EPUB 阅读器和管理器
* 为你的电子书库评级和标记
* 从互联网获取电子书的元数据
* 从流行的新闻源处阅读新闻，并制作电子书！
* 使用自动转换器来上传电子书到 Kindle 和其它的阅读器（当然，也可以下载）
* 内置可购买电子书的浏览器

你可以从其官方网站下载 Calibre 。或者，你可以为你的 Linux 发行版 [设置 Flatpak & Flathub](https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/) ，并单击下面的按钮（或使用命令）来安装：

>
> **[使用 Flatpak 来安装 Calibre](https://dl.flathub.org/repo/appstream/com.calibre_ebook.calibre.flatpakref)**
>
>
>

```
flatpak install com.calibre_ebook.calibre

```

针对其它的下载选项（Windows、macOS 和原生的 Linux 软件包），请访问 [这个网页](https://calibre-ebook.com/download)。

#### Foliate

我们在先前的 [最佳的 Ubuntu 应用程序（第 3 部分）](https://www.debugpoint.com/necessary-ubuntu-apps-2022/) 系列中介绍了 Foliate 。它是一款轻量现代的 EPUB 阅读器，它提供了一系列的自定义选项。它是基于 GTK4 的，并且与 GNOME 桌面环境无缝集成。它有一个平滑且易于导航的界面，并且有自定义字体大小、字体类型和行距的功能。

Foliate 也包含：一种针对夜间阅读的深色模式，一个调整内置颜色温度的选项，用以减少眼睛疲劳。

功能摘要：

* 沉浸式视图，主顶部工具条在阅读时自动隐藏
* 列入目录视图，支持从主要的电子书网站直接下载
* 多屏视图 – 双页面视图和滚动视图
* 自定义字体和行距
* 内置亮度控制，仅应用于应用程序本身！
* 阅读进度滑块
* 支持书签和注释
* 在书中搜索
* 快速字典查找

下载 Okular 的最好方式是使用 Flatpak 来下载。针对你的系统设置 [Flatpak & Flathub](https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/) ，并使用下面的链接（或使用下面提到的命令）来安装它：

>
> **[使用 Flatpak 来安装 Foliate](https://dl.flathub.org/repo/appstream/com.github.johnfactotum.Foliate.flatpakref)**
>
>
>

```
flatpak install com.github.johnfactotum.Foliate

```

要学习更多关于 Foliate 的信息，访问官方 [网站](https://johnfactotum.github.io/foliate/)。

#### Okular

KDE 自带的文档阅读器是 Okular ，它也支持 EPUB 文件。它是一款功能丰富的应用程序，它提供了一系列自定义选项，包括：字体大小、字体类型和背景颜色。Okular 也有内置注释功能，你可以使用它来注释你的 EPUB 文件。它也支持很多文件格式：

* EPUB
* PDF
* DjVU
* 图形文件: JPEG 、PNG 、GIF 、Tiff 、WebP
* 漫画文件: CBR 和 CBZ

不过，你不能使用 Okular 来管理收藏或下载电子书。

你可以在 Ubuntu 及其相关发行版中安装 Okular ：

```
sudo apt install okular

```

针对 Fedora 及其相关发行版：

```
sudo dnf install okular

```

如果你更喜欢 Flatpak ，将你的系统设置为 Flatpak ，并使用下面的链接（或使用下面提到的命令）来安装 Flatpak：

>
> **[使用 Flatpak 格式安装 Okular](https://dl.flathub.org/repo/appstream/org.kde.okular.flatpakref)**
>
>
>

```
flatpak install org.kde.okular

```

#### Bookworm

在这份列表上的下一个 EPUB 阅读器是 Bookwork ，在我看来，它完全被低估了。它确实是一款 elementary OS 的应用程序，但是，对于所有的 Linux 发行版来说都是可以安装的。

它有简洁的界面，并提供一系列自定义选项，包括字体大小、字体类型和背景颜色。Bookworm 也允许你将你的 EPUB 文件组织到集合中，并保持追踪你的阅读进度。

另外，你可以使用一个内置的标签编辑器和评分系列来轻松地管理你的 EPUB 书籍。此外，它也支持注释、搜索、章节和键盘导航。

不可缺少的是，它支持 EPUB 、MOBI 、PDF 、EB2 、CBR 和 CBZ 文件。

安装是很容易的。如果你是一名 elementary OS 用户，你可以在 <ruby> 应用中心 <rt>  AppCenter </rt></ruby> 中搜索 “bookworm” 。

针对 Ubuntu 及其相关发行版，你可以使用下面的 PPA 来安装它：

```
sudo add-apt-repository ppa:bookworm-team/bookwormsudo
apt-get update
sudo apt-get install com.github.babluboy.bookworm

```

如果你更喜欢 Flatpak ，将你的系统设置为 Flathub 和 Flatpak ，并使用下面的链接来安装它：

```
flatpak install com.github.babluboy.bookworm

```

要学习更多的信息，访问官方 [网站](https://babluboy.github.io/bookworm/)。

#### FBReader

在这份最好的 EPUB 阅读器列表中最后一款应用程序是 FBReader 。在你继续阅读之前，注意：它在 2015 年以前是开源软件。但是，它现在是闭源软件，不过，有一个开发者 SDK 是可用的。

它是一款流行的多功能的 EPUB 阅读器，所有的 Linux 发行版都可以获取使用。它有一个简单且用户友好的界面，允许你自定义你的阅读体验。FBReader 也支持各种电子书格式，包括：EPUB 、MOBI 、FB2 和 HTML 。它也提供一种书架特色功能，允许你组织你的电子书和保持追踪你的阅读进度。

FBRedaer 也支持在你的设备之间云同步你的库。

在 Linux 上安装 FBReader 是有一些难度的，因为它只提供 Snap 软件包。你可以在 [针对 Snap 设置你的系统](https://www.debugpoint.com/how-to-install-and-use-snap-packages-in-ubuntu/) 后，使用 `snap` 来安装它，如下所示。

```
sudo snap install fbreader

```

要学习更多关于 FBReader 的信息，访问官方 [网站](https://fbreader.org/en)。

### 在 Linux 上的更多的 EPUB 阅读器

#### Koodo reader

它是一个相当新的自由及开源的 EPUB 阅读器，带有大量的特色功能。并且它也看起来极好。唯一的问题是，它是使用 Javascript 、HTML 和 TypeScript 构建的。因此，它不是原生的应用程序，但是它是很快的。你可能会想尝试一下。在 Linux 上，Koodo reader 提供 AppImage 、本机的 deb 和 RPM 文件。

你可以 [在这里下载](https://koodo.960960.xyz/en) ，这里是一些截屏。

这里还有另外的两个 EPUB 阅读器，但是，不幸的是，它们已经不再继续开发了。

* [GNOME Books](https://gitlab.gnome.org/Archive/gnome-books)
* [epub CLI reader](https://github.com/rupa/epub)

### EPUB 阅读器的对比表

为使你更容易地选择适合你所需要的 EPUB 阅读器，我们创建了一个比较表，着重强调了上述 EPUB 阅读器的关键特色功能。

| EPUB 阅读器 | 用户界面 | 自定义 | 书架 | 注释 | 同步 |
| --- | --- | --- | --- | --- | --- |
| Calibre | ✔ | ✔ | ✔ | ✔ | ✔ |
| Foliate | ✔ | ✔ | ✔ | ✔ | ❌ |
| Bookworm | ✔ | ✔ | ✔ | ❌（受限） | ❌ |
| Okular | ✔ | ✔ | ❌ | ❌（受限） | ❌ |
| FBReader | ✔ | ✔ | ✔ | ✔ | ✔ |

### 去哪里获取免费的电子书？

很多网站为你提供来自著名作者的大量漫画和小说的收藏。最好的网站是 “Project Gutenberg” 。你可以下载来自所有分类中的 60,000 多本电子书。

使用下面的链接访问网站。在你下载电子书后，你可以使用上述任意的 EPUB 阅读器来制作和享受你的个人电子书收藏。

>
> **[Project Gutenberg](https://www.gutenberg.org/)**
>
>
>

你也可以尝试精选免费电子书的 standard ebooks。

>
> **[Standard eBooks](https://standardebooks.org/ebooks)**
>
>
>

### 总结

总而言之，在 Linux 上有几个可用的 EPUB 阅读器，它们提供大量的特色功能来增强你的阅读体验。如果你正在寻找一个功能丰富的 EPUB 阅读器，Calibre 是一个极好的选择，它也可以作为一个电子书管理器工具。Foliate 和 Bookworm 是一个轻量的现代的应用程序，非常适合那些看重自定义选项的人。

我希望通过上述的比较和详细的描述，你现在可以为你自己选择最好的 EPUB 阅读器了。

---

via: <https://www.debugpoint.com/epub-readers-linux/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lkxed](https://github.com/lkxed/) 译者：[robsean](https://github.com/robsean) 校对：[wxy](https://github.com/wxy)

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


用树莓派制作的问答售货机

Summary: 用树莓派取代食品售货机上的投币箱是一个天才之举。

用树莓派取代食品售货机上的投币箱是一个天才之举。

# 用树莓派制作的问答售货机

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

>
> 用树莓派取代食品售货机上的投币箱是一个天才之举。
>
>
>

作为在公共图书馆工作的教育工作者，我一直在关注 [树莓派](https://opensource.com/resources/raspberry-pi) 的有趣用途。在我看来，得克萨斯州达拉斯市的<ruby> 问答售货机 <rt>  Trivia Vending Machine </rt></ruby>项目是这些神奇设备最具创意和最有趣的用途之一。使用树莓派取代食品售货机上的投币箱是 Greg Needel 和他的团队的一个天才之作。这个想法的潜在用途是深远的。请观看下面这个 [YouTube 短视频](https://www.youtube.com/watch?v=pDOhk-YAhys)，了解问答自动售货机的运行情况。

最初的问答售货机专注于科学问题，但你可以制作一个问答售货机来回答任何问题：历史、公民、文学等等。如果你鼓励学生写自己的问题，并回答对方的问题，那将是最有吸引力的用途。请考虑这样：自动售货机可以不发放食物，而是发放当地企业的优惠券。我谋生的方式之一是教吉他课，我很乐意捐出一节吉他课作为问答售货机的优惠券。然而，学生必须积累适当数量的积分才能获得我的一堂吉他课。

把你的想象力再延伸一点。是否有可能让学生解决逻辑谜题，以便从自动售货机获得食物（或优惠券）？是的，这并不难创造。也许是数独谜题、[Wordle](https://opensource.com/article/22/1/word-game-linux-command-line)、KenKen、Sokoban 或任何其他谜题。学生可以用触摸屏玩这些谜题。国际象棋怎么样？当然，学生可以通过解决象棋谜题来获得食物（或优惠券）。

你是否注意到视频中原来的问答售货机又大又重？ 设计一个更小的，可能是滚动手推车大小的三分之一，这可以在学校、图书馆、博物馆和创客嘉年华之间更容易运输。

问答售货机的内部由步进电机组成。你可以在网上购买二手的。在网络上搜索“二手自动售货机电机”会出现 [Vending World](https://vendingworld.com/small-vending-parts/vending-machine-motors-small-parts) 和 [VendMedic](https://www.vendmedic.com/product-category/vending-parts/vend-motors/) 网站。

如果你是创客空间的成员，请向其他成员介绍问答售货机。这是一个开放的发明，没有专利，所以任何人都可以制造它。（谢谢你，Greg Needel）我想为这样的设备编写代码并不太难。如果有人可以创建此类代码的 GitHub 仓库，以及可能附带的一些解释性截屏，那就太好了。

虽然问答售货机没有在红牛创意大赛中获奖，但这项发明还是值得获奖的。应该有人找到 Greg Needel 并给他一个合适的奖品。该奖项应该是什么样子的？可能是 2.5 万或 5 万美金的样子。我为 Greg Needel 和他的创意团队欢呼三声。他们把树莓派带到了这种计算机的发明者所希望的方向：修理工的快乐。大胆、美丽、开放。你还能要求更多吗？

最后一件事。问答售货机是几年前使用早期的树莓派型号制作的。当前的树莓派速度更快，响应更快。因此，你在上述视频中注意到的任何交互延迟在今天的树莓派上已不复存在。

哦，我非常想要一块糖果。我砸吧砸吧嘴。提醒我，我需要赚取多少积分才能获得士力架？不惜一切代价，我会不惜一切代价。

---

via: <https://opensource.com/article/23/3/raspberry-pi-trivia-vending-machine>

作者：[Phil Shapiro](https://opensource.com/users/pshapiro) 选题：[lkxed](https://github.com/lkxed/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #949 cURL 发布 8.0，庆祝其 25 岁生日

Summary:
? cURL 发布 8.0，庆祝其 25 岁生日
? GitHub Copilot 将迁移到 GPT 上
? Mozilla 将建立 Mozilla.ai
»
»

# 硬核观察 #949 cURL 发布 8.0，庆祝其 25 岁生日

### cURL 发布 8.0，庆祝其 25 岁生日

它是一个用于用 URL 传输数据的命令行工具和库，任何认真编写通过网络进行交互的代码的开发人员都可能使用过 curl。如今，它估计已经被安装了超过 100 亿次。它的第一个版本是 4.0，发布于 1998 年，它仅有 2200 行代码，由 httpget 和 urlget 项目改编而成。当时只能支持三种协议，24 个命令行选项，而现在可以支持 28 种协议，249 个选项。

>
> **[消息来源：The Register](https://www.theregister.com/2023/03/21/curl_project_25)**
>
>
>

>
> 老王点评：就这样一个原本的个人项目，现在居然发展成了互联网基石项目。
>
>
>

### GitHub Copilot 将迁移到 GPT 上

GitHub 已经对其 Copilot 编程模型进行了培训，以执行新的任务，并有了一个新的名字 GitHub Copilot X。今后，Copilot 将依靠一套不断发展的大型语言模型，包括 OpenAI 的 GPT-3.5-turbo 和 GPT-4，而不是 OpenAI 的 Codex 的定制版本。OpenAI 将在 3 月 23 日关闭 Codex 的公共 API。根据 GitHub 的数据，截至上个月，Copilot 参与了微软的云代码库中 46% 的代码创建，并帮助开发者的编程速度提高了 55%。

>
> **[消息来源：The Register](https://www.theregister.com/2023/03/22/github_copilot_learns_new_tricks/)**
>
>
>

>
> 老王点评：通过 VSCode、GitHub、Copilot，微软似乎已经把开发者所需要的各个方面都掌握了。
>
>
>

### Mozilla 将建立 Mozilla.ai

Mozilla 今天宣布，他们将投资 3000 万美元建立一个新的创业公司 [Mozilla.ai](http://mozilla.ai/)，专注于 “建立一个值得信赖的、独立的、开源的 AI 生态系统”。Mozilla 称，“人工智能的核心是代理权、问责制、透明度和开放性。[Mozilla.ai](http://mozilla.ai/) 将成为大科技公司和学术界之外的一个空间，供志同道合的创始人、开发人员、科学家、产品经理和建设者聚集。”

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Mozilla.ai)**
>
>
>

>
> 老王点评：虽然这又是一个 Mozilla “不务正业”的项目，但是希望可以为 AI 打造一个可信、独立的道路。
>
>
>


用 CrowPi 树莓派套件了解关于计算机的一切

Summary: CrowPi 是一个超棒的树莓派项目系统，安装在一个笔记本电脑般的外壳里。

CrowPi 是一个超棒的树莓派项目系统，安装在一个笔记本电脑般的外壳里。

# 用 CrowPi 树莓派套件了解关于计算机的一切

>
> CrowPi 是一个超棒的树莓派项目系统，安装在一个笔记本电脑般的外壳里。
>
>
>

我喜欢历史，也喜欢计算机，因此相比于计算机如何变成个人配件，我更喜欢听它在成为日常家用电器前的故事。[我经常听到的一个故事](https://opensource.com/article/21/8/my-first-programming-language) 是很久以前（反正在计算机时代算久远了）的计算机是多么的简单。事实上，它们简单到对于一个好奇的用户来说，弄清楚如何编程并不是十分困难。再看看现代计算机，它具有面向对象的编程语言、复杂的 GUI 框架、网络 API、容器等，但愈发令人担忧的是，计算工具正变得越来越难懂，对于那些没有接受过专门培训的人来说基本上无法使用。

从树莓派在 2012 年发布之日起，它就一直被定位为一个教育平台。一些第三方供应商通过附加组件和培训套件支持树莓派，以帮助所有年龄段的学习者探索编程、物理计算和开源。然而，直到最近，很大程度上还是要由用户来弄清楚市场上的所有部件如何组合在一起，直到我最近买了 CrowPi。

### CrowPi2 介绍

乌鸦是非常聪明的鸟。它们能识别并记住面孔，模仿听到的声音，解决复杂的谜题，甚至使用工具来完成任务。CrowPi 使用乌鸦作为其徽标和名字是恰当的，因为这个设备充满了探索、实验、教育的机会，最重要的是，充满了乐趣。

其设计很巧妙：它看起来像笔记本电脑，但远不止于此。当你从机壳中取出蓝牙键盘时，它会显示一个隐藏的电子设备工坊，配有 LCD 屏幕、16 个按钮、刻度盘、RFID 传感器、接近传感器、线路板、扬声器、GPIO 连接、LED 阵列等等。*而且这一切都是可编程的。*

顾名思义，该装置本身完全由树莓派提供支持，它牢固地固定在机壳底部。

默认情况下，你应该用电源适配器为设备充电，包装附带一个壁式插头，你可以将其插入机壳，而不是直接为树莓派供电。你还可以使用插入外部微型 USB 端口的电池电源。机壳内甚至还有一个抽屉，方便你存放电池。这样做的时候，有一根 USB 线从电池抽屉中弹出，并插入机壳电源端口，因此你不会产生这是一台“普通”笔记本电脑的错觉。然而，这样一台设备能够有如此美观的设计已经很理想了！

### 首次启动系统

CrowPi2 提供一张安装了 Raspbian 系统，贴有 “System” 标签的 microSD 卡，不过它同时还提供了装载 [RetroPie](https://opensource.com/article/19/1/retropie) 的第二张 microSD 卡。作为一个负责任的成年人（咳咳），我自然是先启动了 RetroPie。

RetroPie 总是很有趣，CrowPi2 附带两个超任风格的游戏控制器，确保你能获得最佳的复古游戏体验。

令人赞叹不已的是，启动实际的 Raspbian 系统的过程同样有趣，甚至可以说更有趣。它的登录管理器是一个自定义项目中心，有一些快速链接，如编程示例项目、Python 和 Arduino IDE、Scratch、Python 示例游戏、Minecraft 等。你也可以选择退出项目中心，只使用桌面。

对于习惯使用树莓派或 Linux 的人来说，CrowPi 桌面很熟悉，不过它也足够简单，所以很容易上手。左上角有应用程序菜单，桌面上有快捷图标，右上角有网络选择和音量控制的系统托盘等等。

CrowPi 上有很多东西可供选择，所以你可能很难决定从哪里开始。对我来说，主要分为四大类：编程、物理电子学、Linux 和游戏。

盒子里有一本使用说明，所以你会知道你需要怎样进行连接（例如，键盘是电池供电的，所以它有时确实需要充电，它和鼠标总是需要一个 USB 适配器）。虽然说明书很快就能读完，但这一例子也充分体现了 CrowPi 团队是如何认真对待说明书的。

### 编程

如果你想学习如何编码，在 CrowPi 上有很多成功的途径。你可以从中选择你觉得最满意的路径。

#### 1、Scratch

[Scratch](https://opensource.com/article/20/9/scratch) 是一个简单的可视化编码应用程序，可让你像拼 [乐高积木](https://opensource.com/article/20/6/open-source-virtual-lego) 一样将代码块组合在一起，制作出游戏和互动故事。这是开启编程之旅最简单的方法，我曾见过年仅 8 岁的孩子会花数小时来研究自己设计的游戏的最佳算法。当然，它不仅适合孩子们！成年人也可以从中获得很多乐趣。不知道从哪里开始？包装盒中有一本 99 页的小册子（打印在纸张上），其中包含 Scratch 课程和项目供你尝试。

#### 2、Java 和 Minecraft

Minecraft 不是开源的（虽然有 [几个开源项目](https://opensource.com/alternatives/minecraft) 复刻了它），但它有足够的可用资源，因此也经常被用来教授编程。Minecraft 是用 Java 编写的，CrowPi 同时装载有 [Minecraft Pi Edition](https://www.minecraft.net/en-us/edition/pi) 和 [BlueJ Java IDE](https://opensource.com/article/20/7/ide-java#bluej) ，如此可使学习 Java 变得比以往更容易、更有趣。

#### 3、Python 和 PyGame

CrowPi 上有几个非常有趣的游戏，它们是用 Python 和 [PyGame 游戏引擎](https://opensource.com/downloads/python-gaming-ebook) 编写的。你可以玩这些游戏，然后查看其源代码以了解游戏的运行方式。CrowPi 中包含 Geany、Thonny 和 [Mu](https://opensource.com/article/18/8/getting-started-mu-python-editor-beginners) 编辑器，因此你可以使用 Python 立即开始编程。与 Scratch 一样，包装盒中有一本包含有课程的小册子，因此你可以学习 Python 基础知识。

### 电子器件

隐藏在键盘下的物理电子工坊本质上是一系列 Pi Hat（附着在上的硬件）。为了让你可以认识所有的组件，CrowPi 绘制了一张中英双语的折页图进行详细的说明。除此之外还有很多示例项目可以帮助你入门。 以下是一张小清单：

* **你好**：当你与 CrowPi 说话时，LCD 屏幕上打印输出“你好”。
* **入侵警报**：使用接近传感器发出警报。
* **远程控制器**：让你能够使用远程控制（是的，这个也包含在盒子里）来触发 CrowPi 上的事件。
* **RGB 俄罗斯方块**：让你可以在 LED 显示屏上玩俄罗斯方块游戏。
* **语音识别**：演示自然语言处理。
* **超声波音乐**：利用距离传感器和扬声器创建简易版的 <ruby> 特雷门琴 <rt>  Theramin </rt></ruby>（LCTT 译注：世上唯一不需要身体接触的电子乐器）。

这些项目仅仅是入门级别而已，因为你还可以在现有的基础上搭建更多东西。当然，还有更多内容值得探索。包装盒里还有网络跳线、电阻、LED 和各种组件，这样你闲暇时也可以了解树莓派的 GPIO （通用输入输出端口）功能的所有信息。

不过我也发现了一个问题：示例项目的位置有点难找。找到演示项目很容易（它们就在 CrowPi 中心上），但源代码的位置并不是很容易被找到。我后来发现大多数示例项目都在 `/usr/share/code` 中，你可以通过文件管理器或终端进行访问。

### Linux

树莓派上运行的是 Linux 系统。如果你一直想更深入了解 Linux，那么 CrowPi 同样会是一个很好的平台。你可以探索 Linux 桌面、终端以及几乎所有 Linux 或开源应用程序。如果你多年来一直在阅读有关开源的文章，并准备深入研究开源操作系统，那么 CrowPi 会是你想要的平台（当然还有很多其他平台也可以）。

### 游戏

包装盒中包含的 **RetroPie** SD 卡意味着你可以重新启动切换为复古游戏机，并任意玩各种老式街机游戏。它跟 Steam Deck 并不完全相同，但也是一个有趣且令人振奋的小游戏平台。因为它配备的不是一个而是两个游戏控制器，所以它非常适合多人合作的沙发游戏。最重要的是，你不仅可以在 CrowPi 上玩游戏，还可以制作自己的游戏。

### 配备螺丝刀

自我坐下开始使用 CrowPi2 以来已经大约两周，但我还没有通关所有项目。有很多个晚上，我不得不强迫自己停下摆弄它，因为即使我厌倦了一个项目，我也会不可避免地发现还有其他东西可以探索。总而言之，我在盒子里找到了一个特别的组件，这个组件让我马上知道 CrowPi 和我就是天造地设：它是一把不起眼的小螺丝刀。盒子上没有撕开就不保修的标签。CrowPi 希望你去修补、拆解、探索和学习。它不是笔记本电脑，甚至也不仅仅是个树莓派；而是一个便携的、低功耗的、多样化的、开源的学习者工具包。

---

via: <https://opensource.com/article/21/9/raspberry-pi-crowpi2>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[XiaotingHuang22](https://github.com/XiaotingHuang22) 校对：[wxy](https://github.com/wxy)

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


如何知道你是否使用了代理服务器？

Summary: 我必须提一下，并非所有代理配置都是恶意的。但是，了解你的系统是否配置了代理很重要。

# 如何知道你是否使用了代理服务器？

什么是代理？

代理是充当客户端和另一台服务器之间的中介的服务器或软件应用。它充当客户端和互联网之间的网关，允许用户访问在线资源，同时隐藏他们的身份、位置和其他个人信息。

代理通常用于增强安全性和隐私，并为你的网络添加过滤器/防火墙。

有几种类型的代理，如 HTTP 代理、SOCKS 代理、透明代理等。

除非你在透明代理后面，否则检查起来毫不费力。在这里，我将讨论检测透明代理和常用代理的方法。

### 如何检查你是否在透明代理后面

虽然每种类型的代理都有其特性和功能，但如果它是透明代理，你将无法在客户端的 PC 上检测到它。这是因为透明代理在后台静默运行，拦截所有流量而不修改它。

有时，可能是你的互联网服务提供商和内容交付网络使用它们来缓存资源的副本以节省带宽或只是为了监视/过滤网络。

有几种方法可以检查你是否在透明代理后面：

* **通过某些在线 IP 检测/检查网站获得的 IP 地址可能与你的计算机或设备的 IP 地址不匹配**。因为代理服务器正在拦截你的流量并将其与 IP 地址一起发送出去。
* **检查你的网络设置以查看是否配置了代理服务器。**
* **借助一些在线代理检测工具。**
* **连接到你知道不存在的服务器。** 如果网页上显示的错误看起来与平时不同，你可能使用了代理。

无论你喜欢与否，你始终可以使用 [VPN 服务](https://itsfoss.com/best-vpn-linux/) 绕过透明代理。

### 如何检查你是否在 Ubuntu 上使用代理

Ubuntu 或任何其他 Linux 发行版提供了多种检查方法。此处使用运行 GNOME 的 Ubuntu 22.10。

#### 使用 GNOME 设置

这是直接的 GUI 方式。打开 GNOME <ruby> 设置 <rt>  Settings </rt></ruby> 并转到 “<ruby> 网络 <rt>  Networks </rt></ruby>” 选项卡，然后按旁边的齿轮图标。

它应该默认 <ruby> 禁用 <rt>  Disabled </rt></ruby>。

如果你在代理后面，你可以在这里看到不同的状态。在代理设置中，你可以看到，我在这里使用了代理（手动配置）。

可以使用 GNOME 桌面中的 `gsettings` 命令更改相同的代理状态。

```
gsettings set org.gnome.system.proxy mode 'none'

```

你可以将 `none` 替换为 `auto` 或 `manual`。请记住，此设置是临时的，仅适用于当前用户。

#### 使用命令行

你可以通过命令行以多种方式获取代理的状态。

##### 通过列出关联的环境变量获取代理的状态

打开终端并运行以下任一命令：

```
env | grep -i proxy

```

```
cat /etc/environment | grep -i proxy

```

```
set | grep -i proxy

```

空输出意味着没有配置代理。否则，它将打印相关的环境变量。

>
> ? 请注意，如果你将代理设置为环境变量，这将起作用。
>
>
>

或者，你可以回显每个代理变量以检查是否设置了特定的代理变量。

以下是你可以在终端中输入的内容：

```
echo $http_proxy

```

##### 使用 nmcli 命令检查

打开终端并输入：

```
nmcli connection show

```

这将列出你的连接和关联的 UUID 编号。记下要检查的连接的 UUID 编号。然后使用命令：

```
nmcli connection show <UUID or name> | grep -i "proxy"

```

这将列出变量，你可以在其中记下代理服务器和端口。

### 总结

我希望本指南可以帮助你了解你是否在使用代理。

我必须提一下，**并非所有代理配置都是恶意的。**

但是，了解你的系统是否配置了代理很重要。

---

via: <https://itsfoss.com/check-proxy-server/>

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

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


硬核观察 #950 ChatGPT 现在可以访问互联网实时数据

Summary:
? ChatGPT 现在可以访问互联网实时数据
? 兆芯开始向内核递交补丁加入对永丰架构的支持
? 美国作家协会将允许人工智能参与剧本创作
»
»

国内公司习惯性产品研发接近完成时，就会把主要研发开掉。一方面防止实际的研发人员功高盖主导致行政人员失去权利。另一方面节约成本。毕竟单纯维护没多少技术含量，关系户就能顶上。

如果某公司一个开创性产品出炉以后就沉寂了，大概率是这种情况。。。

# 硬核观察 #950 ChatGPT 现在可以访问互联网实时数据

### ChatGPT 现在可以访问互联网实时数据

之前，ChatGPT 一直受到限制，因为它只能从其训练数据中提取信息，而训练数据截止至 2021 年。OpenAI 正在为 ChatGPT 增加对插件的支持，这一升级极大地扩展了聊天机器人的能力，并使其首次能够访问网络上的实时数据。这几乎是让其他服务成为 ChatGPT 的 “眼睛和耳朵”。目前已经有一些插件，新的插件开发需要申请等待。

>
> **[消息来源：The Verge](https://www.theverge.com/2023/3/23/23653591/openai-chatgpt-plugins-launch-web-browsing-third-party)**
>
>
>

>
> 老王点评：每一个进步都如预料般出现，但是 AI “寒武纪”之后是什么，我想象不到。
>
>
>

### 兆芯开始向内核递交补丁加入对永丰架构的支持

台湾威盛（VIA）在中国的合资企业兆芯开始向内核递交补丁加入对永丰微架构的支持。兆芯去年宣布了采用永丰架构的服务器 x86\_64 处理器 KH-4000 系列。永丰是陆家嘴微架构的继任者，仍然采用 16nm 工艺，支持最高 32 个核心，相比陆家嘴的 8 核是一大飞跃，频率最高 2.2GHz，支持 PCIe 3.0 和 DDR4。虽然它比不上 AMD 和英特尔的最新处理器，但对于国产 CPU 而言是进步。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Zhaoxin-Yongfeng-Linux-Start)**
>
>
>

>
> 老王点评：国产架构开始纷纷加入 Linux 支持，这是好事。
>
>
>

### 美国作家协会将允许人工智能参与剧本创作

该提案将允许作家使用人工智能来帮助写剧本，而不必分享写作信用或分割残值。或者，可以将人工智能生成的剧本交给作家，让他改写或润色，而作家仍将被视为第一作者。事实上，该提案将把人工智能视为一种铅笔一样的工具。目前还不清楚代表电影公司的 AMPTP 是否会接受这一想法。

>
> **[消息来源：Variety](https://variety.com/2023/biz/news/writers-guild-artificial-intelligence-proposal-1235560927/)**
>
>
>

>
> 老王点评：确实，以后 AI 就像是一种铅笔或办公软件一样。
>
>
>


GNOME 44 发布

不喜欢这个桌面，资源消耗大

继续折腾菜单栏与标题栏。。。微软的奸细干的很好。。。

# GNOME 44 发布

>
> GNOME 44 终于来了，它带来了重新打造的设置应用，更新了快速设置功能，改进了可访问性等等。
>
>
>

GNOME 可以说是\***最受欢迎的桌面环境**之一。

之前的 [GNOME 43 版本](https://news.itsfoss.com/gnome-43-release/) 就补充了许多有用的功能，而现在的 GNOME 44 版本也是一样。

让我们看看都有哪些内容。

### ? GNOME 44 有什么新功能？

我们最近已经分别介绍了 GNOME 44 的最佳功能；在这里，让我回顾一下这个发布的相关细节。

主要的亮点包括：

* 设置菜单的改造
* 快速设置的改进
* 文件选择器的网格视图
* 文件管理器的改进

#### 1、设置菜单的改造

设置菜单进行了小规模的改造，**可访问性面板被重新设计**，以提供一个更现代的导航体验。

然后，一项新的功能让你可以 **通过二维码分享 Wi-Fi 密码**，并且改进了鼠标/触摸板设置。

“设备安全”下的信息也得到了更新，以增加技术细节的清晰度。

#### 2、改进的快速设置菜单

快速设置面板已经得到了许多更新；它现在可以让你 **查看和管理当前连接的蓝牙设备**。

但你必须前往设置菜单来配对新设备。

另一个新增功能是**新的屏幕截图快捷方式**，可以毫不费力地从快速设置菜单中进行屏幕截图。

这还不是全部；GNOME 44 的快速设置菜单现在有一个检查**在后台运行的应用程序的巧妙方法**。

你可以在我们之前的报道中找到关于这个功能的更多细节：

>
> **[GNOME 正在（某种程度上）恢复在几年前删除的功能](/article-15551-1.html)**
>
>
>

#### 3、新的锁屏/登录窗口

GNOME 44 提供了**更新的锁屏和登录窗口**，有一个更大的用户头像和各种元素的细微变化，例如时钟的字体大小。

#### 4、GNOME 文件选取器中的缩略图

去年年底，我们看到了 GNOME 文件选取器的一个**长时间要求的功能** 的 [回归](https://news.itsfoss.com/gnome-file-picker/)，而现在它终于到来了。

GNOME 的文件选取器从来没有一个合适的缩略图预览来查看文件。取而代之的是，它**依赖于一个普通的列表视图**。

直到现在。

它现在**带来了一个合适的缩略图视图**，可以通过点击文件选取器右上角的 “列表-网格视图” 切换进行切换。

#### ? 其他变化和改进

这些并不是 GNOME 44 带来的唯一改进；这里有一些值得一提的改进：

* 新壁纸。
* 对文件管理器的各种小更新带来了性能的提高。
* Epiphany 网页浏览器被移植到 GTK4，并进行了许多错误修正。
* 在 GNOME 软件应用中加入了一个新的过滤器，激活后只显示开源的应用程序。
* 对联系人应用进行了各种改进，能够以二维码的形式分享联系人。
* 对 GNOME Builder 的许多 UI 和风格进行了修复。
* 在 [GNOME Circle](https://circle.gnome.org/?ref=its-foss-news) 集合中添加了十个新的应用程序。

你可以通过 [官方发布说明](https://release.gnome.org/44/?ref=its-foss-news) 来了解更多。

### 开始使用 GNOME 44

你可以在下个月期待 GNOME 44 与 Ubuntu 23.04 和 Fedora 38 一起出现。

如果你迫不及待地想得到它，使用 [Boxes](https://wiki.gnome.org/Apps/Boxes?ref=its-foss-news) 安装 [GNOME OS](https://os.gnome.org/?ref=its-foss-news) 应该是一个测试它的好方法。

>
> **[GNOME](https://www.gnome.org/getting-gnome/?ref=its-foss-news)**
>
>
>

? 你对这个丰富的 GNOME 44 更新有何看法？你想在你的 Linux 系统上使用它吗？

---

via: <https://news.itsfoss.com/gnome-44-release/>

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

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


Python 中的输入函数：概念和示例

# Python 中的输入函数：概念和示例

>
> 在这篇文章中，我将通过一些通俗易懂的例子来解释 Python 的 input() 函数的基础知识。
>
>
>

Python 是世界上最流行的编程语言之一，广泛应用于各种应用程序中。Python 中的一个基本概念是 `input()` 函数，它允许用户通过提供输入值与程序进行交互。

让我们看看 `input()` 函数是如何工作的，以及如何在 Python 程序中有效地使用它。

在开始之前，我希望你已经安装了 Python 并设置了一个基本的编辑器。如果没有，请参考我的以下指南：

* [如何在 Ubuntu 等 Linux 上安装 Python 3.11](/article-15230-1.html)
* [如何在 Windows 上安装 Python](/article-15480-1.html)
* [如何为 Python 设置 IDLE 编辑器](/article-15622-1.html)

### Python Input 函数

Python 中的 `input()` 函数用于接受用户输入的字符串。它提示用户输入一个值并等待用户提供输入。然后将用户的输入作为字符串存储在变量中，稍后可以在程序中使用。

#### 句法

```
input("your message to user")

```

当你运行 `input()` 函数时，它会向用户显示消息并 *等待* 输入。显示光标等待。当用户输入并按下回车键，`input()` 函数就会读取用户的输入。该值存储在你指定的变量中。

让我们看几个例子。

### 示例 1：简单的 input() 函数用法

以下代码片段接受输入并显示带有附加字符串的输出：

```
your_name = input("Enter your name:")
print("Hello " + your_name)

```

输出：

```
Enter your name:arindamHello arindam

```

### 示例 2：以整数和浮点数作为输入

在使用 `input()` 函数时，你还可以在运行时使用 `int()` 或 `float()` 将输入转换。这是一个例子：

```
no_of_books = int(input("Enter total books ordered:"))
print ("Total number of books:", no_of_books)

price_of_each_book = float(input("Enter unit price:"))
print ("Total price:", no_of_books * price_of_each_book)

```

输出：

```
Enter total books ordered:5
Total number of books: 5
Enter unit price:10.1
Total price: 50.5

```

### 示例 3：连接列表

你还可以使用其他函数（例如列表）来接受一组值并将它们转换为 Python 中的 [列表](https://docs.python.org/3/library/stdtypes.html?highlight=list#lists)。这是一个接受输入并将其转换为列表的示例。然后使用另一组值并附加到第一个列表：

```
# 获取第一个列表的输入
list_1 = list(input("Enter numbers for list 1:"))

# 获取第二个列表的输入
list_2 = list(input("Enter some letters for list 2:"))

# 循环遍历第二个列表并添加到第一个列表
for j in list_2:
    list_1.append(j)

# 打印修改后的第一个列表
print(list_1)

```

输出：

```
Enter numbers for list 1:1234
Enter some letters for list 2:ABCD
['1', '2', '3', '4', 'A', 'B', 'C', 'D']

```

### 总结

我希望这个简单的指南通过几个示例阐明了 `input()` 函数。对于简单的场景，它是一个强大的功能，可以从标准输入中接受值。

---

via: <https://www.debugpoint.com/input-function-python/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lkxed](https://github.com/lkxed/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #951 华为称已开发出自己的 14 纳米芯片设计套件

Summary:
? 华为称已开发出自己的 14 纳米芯片设计套件
? 大众汽车将支持汽车软件产品长达十余年
? 谷歌 Bard 令测试者失望
»
»

由于盗版的存在，我们与老美软件领域的差距比硬件大的多。。。

游戏软件、流氓软件以及广告软件除外。。。

首屏都变成图片了，太夸张了，保留现在的三分之一高度就可以啦。另外硬核观察的条幅为何要显示两次？

# 硬核观察 #951 华为称已开发出自己的 14 纳米芯片设计套件

### 华为称已开发出自己的 14 纳米芯片设计套件

据报道，华为已经完成了电子设计自动化（EDA）工具的工作，用于布置和制造低至 14 纳米工艺节点的芯片。该平台是这家电信设备巨头正在开发的 78 个平台之一，以取代美国和欧洲的芯片设计工具，这些工具已经受到美国和其他国家的出口管制。

>
> **[消息来源：The Register](https://www.theregister.com/2023/03/24/huawei_eda_14nm_chips/)**
>
>
>

>
> 老王点评：没说的，点赞！
>
>
>

### 大众汽车将支持汽车软件产品长达十余年

汽车的预期使用寿命要比智能手机长得多，而现在汽车上的信息娱乐系统对汽车的运行是不可或缺的。大众集团软件部门称“终身支持是完全重要的”，如果要给这个“终身”一个期限，那么是在生产结束后，软件支持 10 年，硬件为 15 年。而且，对于那些希望更长时间的品牌，如布加迪、兰博基尼和保时捷等，将提供额外的持续支持。此外，网络安全以及安全更新和补丁只要有就会提供。

>
> **[消息来源：Ars Technica](https://arstechnica.com/cars/2023/03/android-infotainment-will-be-supported-for-at-least-15-years-vw-says/)**
>
>
>

>
> 老王点评：确实，手机可以经常换，汽车更换的频率就低多了，那到时候车载软件的更新就是个问题。
>
>
>

### 谷歌 Bard 令测试者失望

谷歌在二月份 [宣布](/article-15519-1.html) Bard 时，因为一些演示错误导致估值 [骤降千亿](/article-15533-1.html)。一个多月后，谷歌周二启动了其人工智能 Bard 的测试，邀请美国和英国的用户注册访问。但测试者对 Bard 感到失望，他们说，“（在这个特定的聊天功能方面）必应现在远远领先于谷歌”、“谷歌的 Bard 似乎并不像必应或 GPT-4 那样有能力成为学习工具。”

>
> [消息来源：Business Insider](https://www.businessinsider.com/testers-say-google-bard-worse-than-chatgpt-2023-3)
>
>
>

>
> 老王点评：没事，谷歌，因为 AI 发布后被嘲讽的不止你一个~
>
>
>


如何找到合适的 Debian ISO 来下载

Linux 初学者建议ubuntu manjaro，debian配置太麻烦了

书虫还是要等8、9月份吧好漫长...

未来只要官方自由映像依然存在，即便不是作为主ISO而是作为备用下载，咱也是可以接受的。

还有CD/DVD已经默认只提供1号ISO了，2、3都默认没有了。

学习学习

# 如何找到合适的 Debian ISO 来下载

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

>
> Linux 初学者可能会被官方的 Debian 下载 ISO 的页面弄得不知所措。这篇指南旨在简化下载体验。
>
>
>

对于 Debian 初学者来说，安装 Debian 可能会是一次艰难的经历。官方的下载页面包含了不少链接，以至于到底需要下载哪个令人困惑。

我准备这篇指南来帮助你从下载页面挑选合适的 Debian ISO 文件。

总的来说，你可以将 Debian ISO 文件分为两大类。它们是 “自由” 和 “非自由” 。

### 关于 “自由” 和 “非自由” Debian 镜像之间的一些注意事项

* Debian “非自由” 镜像是指包含不符合 Debian 自由软件准则的软件包的 Debian 操作系统的安装镜像。
* “非自由” 软件包包含专有的、有版权的或受许可证限制的软件，这些软件包禁止用户修改或分发代码。Debian 项目提供这些 “非自由” 镜像作为用户的一种可选下载项，以便他们使用需要专有驱动或固件的特定硬件设备或软件。
* “自由” 版本的 Debian，仅包含开源和可自由分发的软件包，这意味着用户有修改、分发和与他人分享的自由，而不受任何法律和道德上的限制。

从 Debian 12 “Bookworm”（即将发布）之后，非自由固件软件包将正式包含在主 ISO 文件中。因此，这篇指南将分为两个部分。

### 下载: Debian 12 “Bookworm”

这里是一份下载 ISO 版本的 Debian 12 “Bookworm” 的简单的表格（当前还不稳定，正在测试）。

| 描述 | 最大 ISO 体积 | **选择此 ISO 的情形** | ISO 下载链接（amd64） |
| --- | --- | --- | --- |
| 最小的体积；非常适合基本安装 | 700 MB | 你想下载基础的软件包，然后通过互联网来安装 | [iso-cd](https://cdimage.debian.org/cdimage/bookworm_di_alpha2/amd64/iso-cd/) |
| 完整的 DVD 体积 | 5 GB | 你想先下载所有的东西，然后开始安装，它非常适合离线安装 | [iso-dvd](https://cdimage.debian.org/cdimage/bookworm_di_alpha2/amd64/iso-dvd/) |

### 下载: Debian 11 “Bullseye”

#### 自由版本的 ISO 文件（没有专有软件包）

下面的 ISO 镜像是 “自由” 版本的镜像，这意味着它们不包含用于固件的大量专有软件包。

| 描述 | 最大 ISO 体积 | **选择此 ISO 的情形** | ISO 下载链接（amd64） |
| --- | --- | --- | --- |
| 最小的体积（网络安装 CD）；需要联通互联网下载软件包 | 500 MB | 你有稳定高速的互联网，希望开始时下载较少 | [iso-cd](https://cdimage.debian.org/cdimage/release/current/amd64/iso-cd/) [torrent](https://cdimage.debian.org/cdimage/release/current/amd64/bt-cd/) |
| 完整的 CD 体积；带有 CD 1、2 和 3；对于最基础的安装，你只需要 CD 1 | 700 MB | 你希望下载基础的软件包，然后不使用互联网来安装它们 | [iso-cd](https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/) [torrent](https://cdimage.debian.org/debian-cd/current/amd64/bt-cd/) |
| 完整的 DVD 体积；带有 DVD 1、2 和 3；对于最基础的安装，你只需要 DVD 1 | 5 GB | 你想先下载所有的东西，然后开始安装，这是离线安装的最理想方式 | [iso-dvd](https://cdimage.debian.org/cdimage/release/current/amd64/iso-dvd/) [torrent](https://cdimage.debian.org/cdimage/release/current/amd64/bt-dvd/) |

#### 非自由版本的 ISO 文件（带有专有软件包）

如果你有 Wi-Fi、蓝牙等特殊硬件 – 你可能会希望从下面的表中获取 “非自由” 版本的软件包。

| 类型 | 镜像种类 | **选择此 ISO 的情形** | ISO 下载链接（amd64） |
| --- | --- | --- | --- |
| 非自由 | 完整的 CD 、DVD | 你想要减少工作量，并希望 Debian 能够在所有受支持的硬件上工作 | [cd-dvd](https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/) （然后转到 `*-nonfree` 目录） |
| 非自由 | 完整的 CD 、DVD（<ruby> 立付 <rt>  Live </rt></ruby>版） – 独立的桌面环境软件包 | 你想要减少工作量，Debian 能够工作，并且带有一个立付系统。立付系统也提供完整的安装 | [cd-dvd-live](https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/)（然后转到 `*-nonfree` 目录） |

### 其它的架构

#### 针对 Debian 11 “Bullseye”

* [arm64](http://ftp.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/)
* [armel](http://ftp.debian.org/debian/dists/bullseye/main/installer-armel/current/images/)
* [armhf](http://ftp.debian.org/debian/dists/bullseye/main/installer-armhf/current/images/)
* [i386](http://ftp.debian.org/debian/dists/bullseye/main/installer-i386/current/images/)
* mips (不可用)
* [mips64el](http://ftp.debian.org/debian/dists/buster/main/installer-mips64el/current/images/)
* [mipsel](http://ftp.debian.org/debian/dists/bullseye/main/installer-mipsel/current/images/)
* [ppc64el](http://ftp.debian.org/debian/dists/bullseye/main/installer-ppc64el/current/images/)
* [s390x](http://ftp.debian.org/debian/dists/bullseye/main/installer-s390x/current/images/)

所有的镜像，下载链接: [单击这里](https://cdimage.debian.org/cdimage/)。

### 较旧的版本（Debian 10 “Buster”）

如果你需要一些针对 Debian 10 “Buster” 的镜像，请访问这个 [页面](https://www.debian.org/releases/buster/debian-installer/)。

### 总结

对新用户来说，如果想要从官方网站上下载 Debian ISO 镜像，网站的信息可能多到无所适从。因此，我以一种恰当的格式总结下载链接。我希望这篇文章有助于你找到适合于你系统的目标 Debian ISO 镜像。

---

via: <https://www.debugpoint.com/download-debian-iso/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lkxed](https://github.com/lkxed/) 译者：[robsean](https://github.com/robsean) 校对：[wxy](https://github.com/wxy)

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


NixOS 系列 #4：安装 NixOS 后要做的事

Summary: 安装之后，你会发现 NixOS 与通用的 Linux 发行版有很大的不同。

安装之后，你会发现 NixOS 与通用的 Linux 发行版有很大的不同。

# NixOS 系列 #4：安装 NixOS 后要做的事

安装之后，你会发现 NixOS 与通用的 Linux 发行版有很大的不同。

当然，作为 [高级 Linux 发行版](https://itsfoss.com/advanced-linux-distros/)之一，大多数新用户对它并不熟悉。

如果你不知道 [为什么你应该使用 NixOS](/article-15606-1.html)，并且出于好奇而尝试它，那么在继续进行之前，知道它是为谁准备的至关重要。

虽然我假设你已经安装了这个发行版，但如果你是第一次使用，我建议先 [在虚拟机上安装 NixOS](/article-15624-1.html)。

### 1、更新软件包

即使你使用最新的 ISO 进行安装，也总是会有更新的。那么为什么不从更新软件包开始呢？

要升级软件包，首先，你必须在添加的频道中检查是否有更新：

```
nix-channel --update

```

然后，使用下面的命令来安装这些更新（如果有的话）：

```
sudo nixos-rebuild switch --upgrade

```

这就行了！它将处理其余的事情。

### 2、在 NixOS 中改变主机名

如果你尝试用传统的方法 [改变主机名](https://itsfoss.com/change-hostname-ubuntu/)（使用 `hostnamectl` 命令），会出现以下错误：

在 NixOS 中，你可以用它的主配置文件轻松地改变主机名。使用如下命令：

```
sudo nano /etc/nixos/configuration.nix

```

在这个配置文件中，寻找以下一行：

```
networking.hostName = "nixos"；

```

然后把它改成：

```
networking.hostName = "Your_Hostname"；

```

例如，我把我的主机名改为 `itsFOSS`：

```
networking.hostName = "itsFOSS"；

```

现在，[保存更改并退出 nano](https://linuxhandbook.com/nano-save-exit/?ref=its-foss) 文本编辑器。

为了使你对主机名的修改生效，执行以下命令：

```
sudo nixos-rebuild switch

```

最后，重新打开终端，主机名的变化应该反映出来。

### 3、设置 Flatpak

我知道你可能在想什么。Nix 软件包管理器已经提供了大量的软件包。那么，为什么你需要 Flatpak 呢？

安装你所需要的东西对于第一次使用的人来说可能有点费时。所以，Flatpak 应该能给你带来方便。

[设置 Flatpak](https://itsfoss.com/flatpak-guide/) 与你在 Ubuntu 上做的不一样。

要设置 Flatpak，你必须对 `configuration.nix` 文件进行修改，可以通过以下方式访问该文件：

```
sudo nano /etc/nixos/configuration.nix

```

[在 nano 中移动到最后一行](https://linuxhandbook.com/beginning-end-file-nano/?ref=its-foss)，在 `}` 前添加以下一行：

```
services.flatpak.enable = true；

```

按 `Ctrl + O` 保存更改，按回车键，按 `Ctrl + X` 退出。

接下来，使用以下命令重建并切换到新的配置文件：

```
sudo nixos-rebuild switch

```

最后，使用下面的命令将 Flathub 软件库添加到系统中：

```
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

```

想知道到底什么是 Flatpak 包吗？你可以参考我们关于它的文章：

>
> **[什么是 Flatpak？你需要知道的关于这个通用包装系统的一切重要信息](https://itsfoss.com/what-is-flatpak/)**
>
>
>

### 4、启用垃圾收集

NixOS 以其不可改变性而闻名，这是有充分理由的。

每当你升级一个软件包时，旧的软件包不会被删除。只是指向旧包的符号链接将被指向最新的版本。

而这样做，你的系统中会积累下不必要的垃圾。

但是，删除每一个旧世代将违背 NixOS 的初衷。

所以，在这种情况下，你可以将你的系统配置为每周删除垃圾包。

要做到这一点，首先，打开 NixOS 配置文件：

```
sudo nano /etc/nixos/configuration.nix

```

并在配置文件末尾的 `}` 前添加以下一行：

```
# Automatic Garbage Collection
nix.gc = {
                automatic = true;
                dates = "weekly";
                options = "--delete-older-than 7d";
        };

```

保存修改并退出 nano 文本编辑器。

为了激活垃圾收集，重建并切换到新的配置文件：

```
sudo nixos-rebuild switch

```

如果你不确定垃圾收集器是否在后台正常运行，你可以用以下命令列出活动的计时器：

```
systemctl list-timers

```

正如你所看到的，Nix 垃圾收集器正在如期运行，并显示距离下次清理还有 5 天。

### 5、安装你喜欢的软件

我是说这是我们使用电脑的唯一原因 —— “为了使用我们最喜欢的软件”，如果还不是，我们就把它变成现实！

寻找软件包的最好地方是 [Nix 软件包搜索](https://search.nixos.org/packages?ref=its-foss)，可以使用你喜欢的任何浏览器访问。

* 搜索软件包
* 选择软件包
* 点击 “nix-env” 并复制给定的 NixOS 的命令
* 执行该命令，就可以了

你可以查看我们的 [NixOS 软件包管理](/article-15645-1.html) 指南，了解所有的细节。

让我在这里给你一个简单的回顾。例如，在这里，我想安装 Librewolf，所以我采用了以下方法：

**但如果你想安装 SSH 或 Plex 等服务，上述方法就不能用了**。

为此，你得查看位于页面顶部的 “<ruby> NixOS 选项 <rt>  NixOS options </rt></ruby>”。

因此，假设我想安装 OpenSSH，那么我必须按照给定的步骤进行：

* 进入 “NixOS 选项”。
* 搜索服务的名称
* 获取服务的名称并将其粘贴到 `configuration.nix` 中，将其值改为 `true`。

```
services.openssh.enable = true

```

在配置文件中加入这一行后，重建服务：

```
sudo nixos-rebuild switch

```

### 6、在 NixOS 中启用自动更新（可选）

一些用户喜欢启用自动更新功能，而另一些用户则可以在他们方便的时候更新软件包。

所以这完全取决于你。

**要启用自动更新**，首先打开 `configuration.nix` 文件：

```
sudo nano /etc/nixos/configuration.nix

```

接下来，在配置文件的末尾，在 `}` 之前添加以下一行：

```
# Auto system update
system.autoUpgrade = {
      enable = true；
};

```

保存修改并退出 nano。

要启用自动更新，你必须用以下方法重建并切换到该文件：

```
sudo nixos-rebuild switch

```

你也可以用下面的命令检查 NixOS 的升级定时器：

```
systemctl list-timers

```

正如你所看到的，`nixos-upgrade.service` 正在后台如期运行！

### 7、减少交换度

如果你正在利用交换分区，你可能想减少交换度。

交换度只不过是你想要多积极地使用交换分区（或内存）的数值，其范围从 0 到 100。

交换度越小，你的系统就会越多地使用物理内存（RAM），而交换分区只不过是你的存储驱动器的一部分而已。

另外，存储驱动器的速度相对比内存慢，所以如果可能的话，你应该减少交换度。

要检查你的系统的默认交换度，请使用以下方法：

```
cat /proc/sys/vm/swappiness

```

而对于大多数 Linux 发行版，它被设置为 `60`。

我建议你把这个值降低到 `10`。

要做到这一点，首先，用以下命令打开配置文件：

```
sudo nano /etc/nixos/hardware-configuration.nix

```

并在 `}` 之前的行末添加以下一行：

```
boot.kernel.sysctl = { "vm.swappiness" = 10;}；

```

保存修改并退出文本编辑器。

现在，重建配置并使用下面的方法切换到它：

```
sudo nixos-rebuild switch

```

现在，你可以再次检查交换度，它应该反映出变化：

```
cat /proc/sys/vm/swappiness

```

就这些了。

### 总结

如果你在第一次安装 NixOS 后马上遵循这些要点，你应该得到一个良好的用户体验。

当然，根据你的要求，还可以有一些其他的东西。但是，我认为上面提到的事情是最基本或最常见的事情。

在本系列的下一部分，我将讨论在 NixOS 上设置家庭管理器，这对有多个用户的系统应该是有帮助的。

? 安装NixOS后，你首先做什么？让我知道你的想法。

---

via: <https://itsfoss.com/things-to-do-after-installing-nixos/>

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

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


硬核观察 #952 CentOS Stream 没有及时向后移植安全补丁

Summary:
? CentOS Stream 没有及时向后移植安全补丁
? 互联网档案馆败诉，不能扫描和出借电子书
? 因开源软件缺陷，ChatGPT 出现故障
»
»

这也是我预备更换服务器到debian的原因之一。

来自江西南昌的 Chrome Mobile 110.0|Android 13 用户

# 硬核观察 #952 CentOS Stream 没有及时向后移植安全补丁

### CentOS Stream 没有及时向后移植安全补丁

谷歌 Project Zero 的安全研究员发现，对 Linux 稳定树所做的内核修复并没有向后移植到许多企业版的 Linux。事实证明，有几个在 Linux 5.15 内核中修复的漏洞，没有在采用 Linux 5.14 内核的较早版本的 CentOS Stream/RHEL 中进行修复，而这些版本还在红帽的支持期中。红帽接受了 Project Zero 报告的安全漏洞，并分配了 CVE 编号，但并没有在 90 天内完成向后移植修复。Project Zero 称会对向后移植安全补丁要求更严格的时限。

>
> **[消息来源：Neowin](https://www.neowin.net/news/google-discloses-centos-linux-kernel-vulnerabilities-following-failure-to-issue-timely-fixes/)**
>
>
>

>
> 老王点评：这样对待企业级 Linux 发行版，实在有点失望。
>
>
>

### 互联网档案馆败诉，不能扫描和出借电子书

在四家图书出版商对互联网档案馆提起的诉讼中，一名联邦法官对互联网档案馆作出了不利的裁决，裁定该网站无权扫描图书并像图书馆一样将其借出。法官拒绝了 “合理使用” 的论据，该论据之前曾保护过谷歌图书和数字图书保存项目。法官认为，谷歌图书的使用被认为具有 “改造性”，因为它创建了一个可搜索的数据库，而不是简单地在互联网上发布书籍的副本。而互联网档案馆的“复制和未经授权的借阅没有任何变革性”，复制这些书籍并没有提供 “批评、评论或关于它们的信息”。

>
> **[消息来源：The Verge](https://www.theverge.com/2023/3/24/23655804/internet-archive-hatchette-publisher-ebook-library-lawsuit)**
>
>
>

>
> 老王点评：听起来有道理，如果只是简单扫描并发布电子副本，那不就是盗版吗？
>
>
>

### 因开源软件缺陷，ChatGPT 出现故障

OpenAI 在本周早些时候将 ChatGPT 短暂下线，原因是一些用户看到另一个活跃用户的聊天记录中的标题。并进一步发现，该故障也导致少量用户看到了别的订阅用户的支付信息，包括名字和姓氏、电子邮件地址、付款地址和信用卡后四位等。OpenAI 称该故障是 Redis 客户端开源库 redis-py 导致的，并已经提交了相关补丁解决了该漏洞。

>
> **[消息来源：OpenAI](https://www.openai.com/blog/march-20-chatgpt-outage)**
>
>
>

>
> 老王点评：不知道 ChatGPT 能不能自己修复这个错误？
>
>
>


为 GNOME 添加流行色彩： 强调色即将问世

Summary: GNOME 用户，你在等待这一刻吗？准备好选择你的颜色吧！

GNOME 用户，你在等待这一刻吗？准备好选择你的颜色吧！

# 为 GNOME 添加流行色彩： 强调色即将问世

>
> GNOME 用户，你在等待这一刻吗？准备好选择你的颜色吧！
>
>
>

从 [Ubuntu 22.04 LTS](https://news.itsfoss.com/ubuntu-22-04-release/) 开始，Ubuntu 上就有了对强调色的支持，人们都很喜欢它。然而，遗憾的是，GNOME 从来没有这样的支持。

现在，得益于一项在 GNOME 中引入强调色支持的工作，这种情况正在改变。

**具体情况如何？** 最近，[Alexander Mikhaylenko](https://gitlab.gnome.org/exalm?ref=its-foss-news) 发出了一个附有 [合并请求](https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2715?ref=its-foss-news) 的提议，以在 GNOME 中添加对强调色的支持。

在目前，它还处于一个 **早期开发中状态**，尚有很多工作要做，还有一些问题要在最终发布前解决。

通过查看其代码，很明显，**最初将提供对 10 种强调色的支持**，发布后可能会有更多的选择。

**想知道它可能看起来如何？**

在 Mastodon 上的一个 [讨论](https://crab.garden/@jamie/110063105101806314?ref=its-foss-news) 中，GNOME 基金会的成员 [Jamie](https://crab.garden/@jamie?ref=its-foss-news) 分享了一些由 Alexander 制作的模拟图，其中描绘了两种不同的配色。

一个是绿色的：

另一个是蓝色的：

我必须说，这些看起来不错 ?。想在非 Fedora 发行版上得到一些 Fedora 的爱吗？把它变成蓝色和其他东西？就它了！

>
> ? 请记住，你在上面看到的东西在最终发布前可能会有变化。
>
>
>

**预期时间？** 在上述讨论中被另一个用户问到时，Alexander 提到，我们可以 **预期强调色支持会在 GNOME 45 中出现**。

鉴于 GNOME 44 最近才发布，我们还需要等待一段时间才能真正看到它的实现。

但是，很高兴知道它有可能在不久之后出现。

我很喜欢 GNOME 终于得到了对强调色的支持，我希望这种等待是值得的。

如果你问我，我喜欢在我的 GNOME 系统上有绿色的强调色。你呢？

参考自： [OMG! Linux](https://www.omglinux.com/gnome-accent-colors-are-coming/?ref=its-foss-news)

---

via: <https://news.itsfoss.com/gnome-accent-colors/>

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

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


在没有构建系统的情况下编写 Javascript

Summary: 当我开始一个新的前端项目时，我面临的问题是：我是否应该使用构建系统？

JS玩家喜欢重新发明一切，就连他们的构建工具都是一年一换。

来自湖北荆州的 Chrome Mobile 111.0|Android 10 用户

当我开始一个新的前端项目时，我面临的问题是：我是否应该使用构建系统？

# 在没有构建系统的情况下编写 Javascript

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

嗨！这周我一直在写一些 Javascript，和往常一样，当我开始一个新的前端项目时，我面临的问题是：我是否应该使用构建系统？

我想谈谈构建系统对我有什么吸引力，为什么我（通常）仍然不使用它们，以及一些前端 Javascript 库要求你使用构建系统时，为什么我觉得这让我感到沮丧。

我写这篇文章是因为我看到的大多数关于 JS 的文章都假定你正在使用构建系统，而对于像我这样的人来说，编写非常简单的、不需要构建系统的小型 Javascript 项目时，构建系统可能反而添加了很多麻烦。

#### 什么是构建系统？

构建系统的思路是，你有一堆 Javascript 或 Typescript 代码，你想在把它放到你的网站上之前把它翻译成不同的 Javascript 代码。

构建系统可以做很多有用的事情，比如：

* （出于效率的考虑）将 100 多个 JS 文件合并成一个大的捆绑文件
* 将 Typescript 翻译成 Javascript
* 对 Typescript 进行类型检查
* 精简化
* 添加 Polyfills 以支持旧的浏览器
* 编译 JSX
* <ruby> 摇树优化 <rt>  Tree Shaking </rt></ruby>（删除不使用的 JS 代码以减少文件大小）
* 构建 CSS（像 [tailwind](https://tailwindcss.com/) 那样）
* 可能还有很多其他重要的事情

正因为如此，如果你今天正在构建一个复杂的前端项目，你可能会使用 Webpack、Rollup、Esbuild、Parcel 或 Vite 等构建系统。

很多这些功能对我很有吸引力，我过去使用构建系统也是出于这样一些原因： 例如，[Mess With DNS](https://messwithdns.net/) 使用 Esbuild 来翻译 Typescript，并将许多文件合并成一个大文件。

#### 目标：轻松地对旧的小网站进行修改

我做了很多简单的小网站（[之一](https://css-examples.wizardzines.com/)、[之二](https://questions.wizardzines.com)、[之三](https://sql-playground.wizardzines.com/)、[之四](https://nginx-playground.wizardzines.com/)），我对它们的维护精力大约为 0，而且我改变它们的频率很低。

我的目标是，如果我有一个 3、5 年前做的网站，我希望能在 20 分钟内，

* 在一台新的电脑上从 GitHub 获取源代码
* 做一些修改
* 把它放到互联网上

但我对构建系统（不仅仅是 Javascript 构建系统！）的经验是，如果你有一个 5 年历史的网站，要重新构建这个网站会非常痛苦。

因为我的大多数网站都很小，所以使用构建系统的 *优势* 很小 —— 我并不真的需要 Typescript 或 JSX。我只要有一个 400 行的 `script.js` 文件就可以了。

#### 示例：尝试构建 SQL 实验场

我的一个网站（[SQL 试验场](https://sql-playground.wizardzines.com/)）使用了一个构建系统（它使用 Vue）。我最后一次编辑该项目是在 2 年前，是在另一台机器上。

让我们看看我今天是否还能在我的机器上轻松地构建它。首先，我们要运行 `npm install`。下面是我得到的输出：

```
$ npm install
[lots of output redacted]
npm ERR! code 1
npm ERR! path /Users/bork/work/sql-playground.wizardzines.com/node_modules/grpc
npm ERR! command failed
npm ERR! command sh /var/folders/3z/g3qrs9s96mg6r4dmzryjn3mm0000gn/T/install-b52c96ad.sh
npm ERR! CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/surface/init.o
npm ERR!   CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/avl/avl.o
npm ERR!   CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/backoff/backoff.o
npm ERR!   CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/channel/channel_args.o
npm ERR!   CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/channel/channel_stack.o
npm ERR!   CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/channel/channel_stack_builder.o
npm ERR!   CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/channel/channel_trace.o
npm ERR!   CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/channel/channelz.o

```

在构建 `grpc` 时出现了某种错误。没问题。反正我也不需要这个依赖关系，所以我可以花 5 分钟把它拆下来重建。现在我可以 `npm install` 了，一切正常。

现在让我们试着构建这个项目：

```
$ npm run build
  ?  Building for production...Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:130:10)
    at module.exports (/Users/bork/work/sql-playground.wizardzines.com/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/Users/bork/work/sql-playground.wizardzines.com/node_modules/webpack/lib/NormalModule.js:414:16)
    at handleParseError (/Users/bork/work/sql-playground.wizardzines.com/node_modules/webpack/lib/NormalModule.js:467:10)
    at /Users/bork/work/sql-playground.wizardzines.com/node_modules/webpack/lib/NormalModule.js:499:5
    at /Users/bork/work/sql-playground.wizardzines.com/node_modules/webpack/lib/NormalModule.js:356:12
    at /Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at iterateNormalLoaders (/Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
    at /Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:236:3
    at runSyncOrAsync (/Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:130:11)
    at iterateNormalLoaders (/Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:232:2)
    at Array.<anonymous> (/Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:205:4)
    at Storage.finished (/Users/bork/work/sql-playground.wizardzines.com/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:43:16)
    at /Users/bork/work/sql-playground.wizardzines.com/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:79:9

```

[这个 Stack Overflow 的答案](https://stackoverflow.com/questions/69692842/error-message-error0308010cdigital-envelope-routinesunsupported) 建议运行 `export NODE_OPTIONS=--openssl-legacy-provider` 来解决这个错误。

这很有效，最后我得以 `npm run build` 来构建这个项目。

这其实并不坏（我只需要删除一个依赖关系和传递一个略显神秘的 Node 选项！），但我宁愿不被那些构建错误破坏。

#### 对我来说，对于小项目来说，构建系统并不值得

对我来说，一个复杂的 Javascript 构建系统对于 500 行的小项目来说似乎并不值得 —— 它意味着放弃了在未来能够轻松更新项目的能力，以换取一些相当微小的好处。

#### Esbuild 似乎更稳定一些

我想为 Esbuild 大声叫好： 我 [在 2021 年了解到 Esbuild](https://jvns.ca/blog/2021/11/15/esbuild-vue/)，并用于一个项目，到目前为止，它确实是一种更可靠的构建 JS 项目的方式。

我刚刚尝试在一台新电脑上构建一个我最后一次改动在 8 个月前的 Esbuild 项目，结果成功了。但我不能肯定的说，两年后我是否还能轻松的建立那个项目。也许会的，我希望如此！

#### 不使用构建系统通常是很容易的

下面是 [Nginx 实验场](https://nginx-playground.wizardzines.com/) 代码中导入所有库的部分的样子：

```
<script src="js/vue.global.prod.js"></script>
<script src="codemirror-5.63.0/lib/codemirror.js"></script>
<script src="codemirror-5.63.0/mode/nginx/nginx.js"></script>
<script src="codemirror-5.63.0/mode/shell/shell.js"></script>
<script src="codemirror-5.63.0/mode/javascript/javascript.js"></script>
<link rel="stylesheet" href="codemirror-5.63.0/lib/codemirror.css">
<script src="script.js "></script>

```

这个项目也在使用 Vue，但它只是用 `<script src` 来加载 Vue —— 前端没有构建过程。

#### 一个使用 Vue 的无构建系统模板

有几个人问如何在没有构建系统的情况下开始编写 Javascript。当然，如果你想的话，你可以写原味的 JS，但我常用的框架是 Vue 3。

[这是我做的一个小模板](https://github.com/jvns/vue3-tiny-template)，用于启动一个没有构建系统的 Vue 3 项目。它只有 2 个文件和大约 30 行的 HTML/JS。

#### 有些库需要你使用构建系统

构建系统这些事情最近盘旋在我的脑海里，因为这周我正在用 CodeMirror 5 做一个新项目，我看到有一个新版本，CodeMirror 6。

所以我想 —— 很酷，也许我应该使用 CodeMirror 6 而不是 CodeMirror 5。但是 —— 似乎没有构建系统你就不能使用 CodeMirror 6（根据 [迁移指南](https://codemirror.net/docs/migration/)），所以我打算坚持使用 CodeMirror 5。

同样地，你以前可以把 Tailwind 作为一个巨大的 CSS 文件下载，但是 [Tailwind 3](https://tailwindcss.com/docs/installation) 似乎根本不能作为一个大的 CSS 文件使用，你需要运行 Javascript 来构建它。所以我现在要继续使用 Tailwind 2。（我知道，我知道，你不应该使用大的 CSS 文件，但是它验收只有 300KB，而且我真的不希望有构建步骤）

（更正：看起来 Tailwind 在 2021 年发布了一个 [独立的命令行工具](https://tailwindcss.com/blog/standalone-cli)，这似乎是一个不错的选择）

我不完全确定为什么有些库不提供无构建系统版本 —— 也许发布无构建系统版本会给库增加很多额外的复杂性，而维护者认为这不值得。或者，库的设计意味着由于某种原因，不可能发布无构建系统版本。

#### 我希望有更多的无构建系统的 Javascript 技巧

到目前为止，我的主要策略是：

* 在某个库的网站上搜索 “CDN”，找到一个单独的 Javascript 文件
* 使用 <https://unpkg.com> 来查看该库是否有一个我可以使用的内置版本
* 托管我自己的库的版本，而不是依赖可能崩溃的 CDN
* 编写我自己的简单集成方案，而不是拉入另一个依赖关系（例如，前几天我为 Vue 编写了自己的 CodeMirror 组件）。
* 如果我想要一个构建系统，就使用 Esbuild

还有一些看起来很有趣但我还没有研究过的东西：

* 这个 [关于 Javascript 注释中类型语法的 Typescript 建议](https://devblogs.microsoft.com/typescript/a-proposal-for-type-syntax-in-javascript/)
* 一般来说，ES 模块

---

via: <https://jvns.ca/blog/2023/02/16/writing-javascript-without-a-build-system/>

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

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


硬核观察 #953 比尔·盖茨称人工智能是他见过的唯二的革命性技术

Summary:
? 比尔·盖茨称人工智能是他见过的唯二的革命性技术
? DoomLinux：一个只用来玩 DOOM 的 Linux
? 由于人数不足，X.org 推迟董事会选举
»
»

# 硬核观察 #953 比尔·盖茨称人工智能是他见过的唯二的革命性技术

### 比尔·盖茨称人工智能是他见过的唯二的革命性技术

比尔·盖茨称人工智能的发明 “与微处理器、个人电脑、互联网和移动电话的创造一样根本”，并在一篇题为 《人工智能时代已经开始》 的文章中预测 “整个行业将围绕它重新定位”。他称，他一生中只见过两次革命性的技术展示，一次是 1980 的图形化用户界面，这导致了后来的 Windows 的诞生；另外一次就是去年兴起的人工智能爆发。在他的要求下，OpenAI 训练的 GPT 仅仅用了几个月就以最高分 5 分通过了 AP 生物测试。

>
> **[消息来源：盖茨笔记](https://www.gatesnotes.com/The-Age-of-AI-Has-Begun)**
>
>
>

>
> 老王点评：这篇文章中，盖茨还提出很多预测，我认为比一些其他互联网大佬的瞎说要可靠得多。
>
>
>

### DoomLinux：一个只用来玩 DOOM 的 Linux

有些 Linux 发行版是主要用于某些用途的，但还有一些只能用于某个用途，如一位爱好者开发的 DoomLinux 就只能运行 1993 年的经典游戏《<ruby> 毁灭战士 <rt>  DOOM </rt></ruby>》。它通过 BusyBox 加载 Linux 内核和标准实用程序，然后运行 fbDOOM，这是一个专门为在 Linux 帧缓冲器上运行而设计的移植版。整个发行版被放在一个可启动的 ISO 文件中，可以放在任何可启动的驱动器上。

>
> **[消息来源：Hack A Day](https://hackaday.com/2022/06/09/a-linux-distribution-for-doom/)**
>
>
>

>
> 老王点评：无用的乐趣，才是有趣的。
>
>
>

### 由于人数不足，X.org 推迟董事会选举

有些年份，他们只有 4 名候选人竞选 4 个空缺席位，而另外一些年份，他们几乎没有达到投票者参与的 25% 的法定人数。今年的 X.Org 董事会选举被推迟了两周，希望一些有能力的人提名自己参加选举，并能够承诺在董事会任职。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/X.Org-Board-More-People-2023)**
>
>
>

>
> 老王点评：每每看到 X.org 的消息，都给人一种英雄迟暮的感觉。
>
>
>


Python 中的变量：概念与示例

# Python 中的变量：概念与示例

>
> 本教程解释了 Python 中变量的概念、它们的类型，以及如何在实际项目中使用的示例。
>
>
>

在 Python 中，变量是存储值的保留内存位置。

它们是个名称，可以分配一个值给它并在整个代码中引用它。使用变量使值可访问并为值提供与你的代码相关的上下文/含义。

在开始之前，我希望你已经安装了 Python 并设置了一个基本的编辑器。如果没有，请参考我的以下指南：

* [如何在 Ubuntu/Linux 上安装 Python 3.11](/article-15230-1.html)
* [如何在 Windows 上安装 Python](/article-15480-1.html)
* [如何为 Python 设置 IDLE 编辑器](/article-15622-1.html)

### 变量规则

* 变量区分大小写。
* 变量名称只能包含大写和小写字母（A–Z、a–z）、数字（0–9）和下划线（\_）。
* 它们不能以数字开头。
* Python 变量是 [动态类型](https://en.wikipedia.org/wiki/Type_system)。
* Python 支持 Unicode 变量（例如 é 和 ü 等装饰字母，甚至中文、日文和阿拉伯符号）。
* 根据 [PEP 8 标准](https://peps.python.org/pep-0008/)，变量名只能是小写，单词可以用下划线分隔（例如 total\_price）。

### Python 变量：示例

要在 Python 中创建一个变量，我们需要使用赋值运算符（`=`）为其赋值。例如，下面的代码行创建了一个名为 `x` 的变量并为其赋值 `10`：

```
x = 10

```

在 Python 中，变量是动态类型的，这意味着解释器可以根据分配给它的值来确定变量的数据类型。Python 支持各种类型的变量，包括整数、浮点数、字符串、布尔值和复数。

```
# 整型变量
age = 20

# 浮点变量
price = 4.99

# 字符串变量
name = "John Doe"

# 布尔变量
is_active = True

# 复数变量
z = 2 + 3j

```

变量在编程中很有用，因为它们允许我们存储和操作数据。例如，我们可以使用变量来执行数学运算、连接字符串以及根据布尔变量的值做出决策。

```
# 数学运算
x = 5
y = 10
z = x + y
print(z)  # 输出：15

# 字符串连接
first_name = "John"
last_name = "Doe"
full_name = first_name + " " + last_name
print(full_name)  # 输出：John Doe

```

变量也可以在现实世界的项目中用于存储和操作数据。例如，在 Web 应用中，我们可以使用变量来 [存储用户输入](/article-15660-1.html)、数据库查询以及向用户输出数据。

```
# 用户输入
name = input("What is your name? ")
print("Hello, " + name + "!")  # 输出： Hello, John!

# 数据库查询
import sqlite3

conn = sqlite3.connect("example.db")
cursor = conn.cursor()

cursor.execute("SELECT * FROM users WHERE id = ?", (1,))
user = cursor.fetchone()

print(user)  # 输出： (1, 'John Doe', 'johndoe@example.com')

# 输出数据给用户
balance = 100.00
print("Your current balance is ₹" + str(balance))  # 输出： Your current balance is ₹100.0

```

### 使用变量时的常见错误

在处理变量时，你可能会遇到一些常见错误。这里是其中的一些。

* `NameError`：当你尝试访问尚未定义的变量时会发生此错误。例如，如果你尝试打印一个尚未赋值的变量的值，你将得到一个 `NameError`。以下代码给出了 `NameError`，因为变量 `Full_name` 未定义。

```
# NameError 演示
first_name = "John"
last_name = "Doe"
full_name = first_name + " " + last_name
print(Full_name)  # NameError

```

* `TypeError`：当你尝试对错误数据类型的变量进行操作时会发生此错误。例如，如果你尝试连接一个字符串和一个整数，你将得到 `TypeError`。下面的代码片段给出了 `TypeError`。

```
# TypeError 演示
first_name = "John"
age = 10
print(first_name + age)

```

* `ValueError`：当你尝试将变量转换为不同的数据类型但无法进行转换时会发生此错误。例如，如果你尝试将包含字母的字符串转换为整数，你将得到 `ValueError`。

```
# ValueError 演示
first_name = "John"
age = 10
print(int(first_name))

```

### 总结

了解变量对于任何 Python 开发人员来说都是必不可少的。变量允许我们存储和操作数据、执行数学运算、连接字符串等。如果你是 Python 编程的初学者，我希望本指南能够阐明这个概念。

---

via: <https://www.debugpoint.com/python-variables/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lkxed](https://github.com/lkxed/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


Ubuntu 23.04 “Lunar Lobster” 的最佳新功能

看到推行更多的 snap 包就不想用了

Canonical 一年比一年差，红帽一年比一年强。

推行更多的Snap，呵呵。放着deb好好的不用，非要用Snap这垃圾破玩意，有本事就把整个系统的包都换成Snap啊，包括内核，GCC，GlibC等等。没有微软苹果的命，却有微软苹果的病。呸！

snap不好用还强推snap

还真的现在有个纯snap的版本

旧安装程序给了个专门的镜像

# Ubuntu 23.04 “Lunar Lobster” 的最佳新功能

>
> 介绍最新的 Ubuntu 23.04 “Lunar Lobster” 版本，它包含了大量的新功能和改进。
>
>
>

代号为 “<ruby> 月球龙虾 <rt>  Lunar Lobster </rt></ruby>” 的 Ubuntu 23.04 是 2023 年的第一个短期版本，它将被支持 9 个月，直到 2024 年 1 月。这个版本采用了新的软件包和技术来改进 Ubuntu 的核心后台和进展工作。在某种程度上，许多变化是作为明年的 LTS 版本（Ubuntu 24.04）的准备工作而被确定的。

它的开发周期几乎接近结束。截至发稿时，测试版已经冻结。所以，现在是探索这个版本的新功能的好时机。

但在此之前，先来看看即将到来的里程碑：

* 测试版冻结： 2023 年 3 月 27 日
* 测试版发布： 2023 年 3 月 30 日
* 候选版本：2023 年 4 月 13 日
* 最终版本：2023 年 4 月 20 日

### Ubuntu 23.04 的新功能

#### 新的桌面安装程序

Ubuntu 新的基于 Rust 的桌面安装程序终于可以在这个版本中体验了。这项工作历经了两年多的时间。在经历了许多障碍和关键错误的修复后，现在已经稳定到可以在正式版本中发布。从这个版本开始，经典的 Ubiquity 被全新的安装程序所取代，如下面一组图片所示：

然而，正如我从一些消息来源听到的，旧的 Uqiuity 将继续保留（直到明年）。但我不完全确定旧的安装程序将如何启动。因为默认的 <ruby> 立付介质 <rt>  Live Media </rt></ruby> 会启动新的安装程序。

与旧安装程序的相比，新的有一些变化。首先，相对于旧的 Uqiuity 对话框和小工具控制，外观和感觉更加现代。

关于分区的摘要细节现在作为一个单独的页面出现，而不是一个弹出框。

此外，Ubuntu 23.04 现在在安装前会询问深色/浅色模式选项。我不确定这样做的必要性，因为 Ubuntu 已经在一个单独的应用程序中定义了一些开箱步骤。

#### GNOME 44 桌面

Ubuntu 23.04 桌面版采用了 GNOME 44。这个版本的 GNOME 44 带来了一堆长期等待的更新。例如，在这个版本中，你可以在本地文件选取器对话框中体验到图像预览。此外，文件应用得到了期待已久的缺失功能，即原生的文件夹展开视图（树状视图）。你可以使用下面的设置来启用它。

在 GNOME 44 中的其他关键变化包括：文件应用现在支持在粘贴图像数据时创建文件，改进的无障碍设置页面可以提供更好的导航，以及大大改进的 GNOME 网页浏览器。

你可以在下面这篇功能亮点页面上了解更多关于 GNOME 44 的发布：

>
> **[GNOME 44 - 最佳功能](https://www.debugpoint.com/gnome-44/)**
>
>
>

#### 精简 ISO 镜像

这是一个令人惊讶的举动，Ubuntu 团队在这个版本中 [引入](https://debugpointnews.com/ubuntu-mini-iso-announcement/) 一个官方的精简 ISO 镜像（不到 200MB）。一旦发布，你可以使用这个精简 ISO 镜像来创建自定义的 Ubuntu Linux。截至发稿时，我们还没有得到这个精简镜像的日常构建 ISO。

然而，Xubuntu 团队 [已经发布了](https://www.debugpoint.com/xubuntu-minimal/) 一个精简 ISO 镜像，我尝试了一下。同样地，所有的官方风味版都有望得到他们自己的精简 ISO 文件。

更多的信息将在未来几天内到达。

#### 多用 Snap，少用 Flatpak

一些与 Snap 和 Flatpak 相关的重要变化即将到来，你应该为此做好准备。

首先，推行更多的 Snap 包是显而易见的，因为官方 Telegram 桌面应用程序现在在 Ubuntu 中使用 Snap 包。

此外，Ubuntu 计划将 Steam 桌面客户端作为 Snap 包发布，该客户端 [目前正在测试中](https://discourse.ubuntu.com/t/steam-call-for-testing/34575)。Steam 桌面客户端现在以原生 deb 和 Flatpak 包的形式提供。Steam Snap 预计将在今年年底到来，而不是在这个版本中。

与此同时，默认的 Flatpak 和 Flathub 集成现在已经正式从所有支持的 Ubuntu 官方风味版中 [移除](https://debugpointnews.com/ubuntu-flavours-flatpak/)。这个决定在网上引起了一些 “讨论”。

因此，从这个版本开始，Ubuntu MATE 和 Kubuntu 将不会默认搭载 Flatpak/Flathub。然而，你可以通过 [只需几个步骤](https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/) 安装它。

#### 新的应用程序

Ubuntu 23.04 的默认应用程序集合一如既往地进行了升级。然而，你可能会注意到一些关键的变化。

首先，LibreOffice 可能看起来有点不同。LibreOffice 团队最近改变了默认的图标主题，在 Ubuntu GNOME 的桌面环境中，它看起来非常棒。

在这个版本中包含的 LibreOffice 7.5 中， Writer 有一个改进的书签模块，Calc 电子表格有了新的数字格式，Impress 有了新的表格设计风格等等。

你可以在这里阅读更多关于 [LibreOffice 7.5 的功能](https://www.debugpoint.com/libreoffice-7-5/)。

Ubuntu 23.04 中其他应用程序的总结：

* [Firefox 111](https://debugpointnews.com/firefox-111/)（Snap）
* LibreOffice 7.5
* Transmission 3.0
* Shotwell 图像查看器 0.30

#### 官方风味版

对于所有的教育工作者和学生来说，有一个好消息。从 23.04 版本开始，Edubuntu 将 [正式出现](https://discourse.ubuntu.com/t/announcing-edubuntu-revival/32929)。它是 Ubuntu 官方风味版列表中的另一个补充。Edubuntu 可能会有一个更大的 ISO 文件（大约 5GB），并安装了所有与教育有关的 FOSS 软件。我将会有一篇单独的文章来点评这个风味版。

此外，如下的风味版都有其对应的桌面环境：

* 配备 [KDE Plasma 5.27](https://www.debugpoint.com/kde-plasma-5-27/) 的 Kubuntu
* 配备 [Xfce 4.18](https://www.debugpoint.com/xfce-4-18-review/) 的 Xubuntu
* 配备 MATE 1.26.1 的 Ubuntu MATE
* 配备 [LXQt 1.2](https://www.debugpoint.com/lxqt-1-2-0-features/) 的 Lubuntu
* 配备 Budgie 10.7 的 Ubuntu Budgie

Ubuntu Budgie 23.04 带来了一些令人兴奋的功能，如边缘平铺、热角等。

#### 内核和工具链更新

截至发稿时，每日构建副本都是 Linux 内核 6.1。然而，在内核冻结（2023 年 4 月 6 日）之前，目前的主线内核 6.2 可能会到达 Ubuntu 23.04。Linux 内核 6.2 改进了对 GPU、CPU、端口和 Rust 更新的支持。

在核心部分，Python 3.11 现在可以在 Ubuntu 23.04 中开箱即用。你不需要再单独 [安装 Python 3.11](https://www.debugpoint.com/install-python-3-11-ubuntu/)。值得一提的是，Python 3.12 版本将在今年发布，目前正在进行多次 RC 测试。

其他工具链的更新如下：

* GCC 13
* GlibC 2.37
* Ruby 3.1
* golang 1.2
* LLVM 16

#### Ubuntu 23.04 的新壁纸

桌面版本永远不会缺席一些新的很酷的壁纸。在成功的 [壁纸竞赛](https://debugpointnews.com/ubuntu-23-04-wallpaper-competition/) 之后，获胜者被选为以 “月亮和龙虾” 为特色的默认壁纸。

这里是默认的一张。而其余的你可以在 [这里](https://discourse.ubuntu.com/t/lunar-lobster-23-04-wallpaper-competition/33132) 找到。

### 下载

每日构建的 ISO 文件存在于以下 Ubuntu 桌面和风味版的链接中。

请注意，你不应该将这些作为主要用途。它们有一些错误（至少我发现了一些），而且还不完全稳定。

| Ubuntu 风味版 | .iso 镜像 - 日常构建 |
| --- | --- |
| Ubuntu 23.04 桌面（GNOME） | <https://cdimage.ubuntu.com/ubuntu/daily-live/pending/> |
| Xubuntu 23.04 | <https://cdimage.ubuntu.com/xubuntu/daily-live/current/> |
| Ubuntu MATE 23.04 | <https://cdimage.ubuntu.com/ubuntu-mate/daily-live/current/> |
| Ubuntu Kylin 23.04 | 尚无 |
| Lubuntu 23.04 | <https://cdimage.ubuntu.com/lubuntu/daily-live/current/> |
| Kubuntu 23.04 | <https://cdimage.ubuntu.com/kubuntu/daily-live/current/> |
| Ubuntu Budgie 23.04 | <https://cdimage.ubuntu.com/ubuntu-budgie/daily-live/current/> |
| Ubuntu Unity 23.04 | <https://cdimage.ubuntu.com/ubuntu-unity/daily-live/current/> |
| Edubuntu 23.04 | <https://cdimage.ubuntu.com/edubuntu/daily-live/current/> |

### 总结

总之，新的 Ubuntu 23.04 有望为桌面用户提供更流畅、更无缝的体验。

从改进的安全功能到增强的生产力工具和应用程序，这次更新肯定会让 Ubuntu 的爱好者和粉丝感到高兴。无论你是经验丰富的用户还是 Ubuntu 生态系统的新手，这个版本都值得一看。

最后，Ubuntu 23.04 将于 2023 年 4 月 20 日发布。

---

via: <https://www.debugpoint.com/ubuntu-23-04-features/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lkxed](https://github.com/lkxed/) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #954 Zoom 的新 AI 功能能替你参加会议

Summary:
? Zoom 的新 AI 功能能替你参加会议
? 又一家安全机构确认某应用的非谷歌商店版本包含恶意代码
? ARM 想要改变芯片授权模式来增加收入
»
»

期待risc-v

# 硬核观察 #954 Zoom 的新 AI 功能能替你参加会议

### Zoom 的新 AI 功能能替你参加会议

Zoom 正在与 OpenAI 合作，通过其 Zoom IQ 人工智能助手为视频会议应用带来人工智能生成的摘要、信息草稿等。不但如此，Zoom IQ 还可以替你参加你迟到的会议，帮你总结你错过的内容，生成会议提要，并提出进一步的问题，以及生成对同事的回应。

>
> **[消息来源：ZOOM](https://blog.zoom.us/zoom-iq-smart-companion/)**
>
>
>

>
> 老王点评：咱就是猜啊，会不会以后线上会议室里面开会的都是 AI？
>
>
>

### 又一家安全机构确认某应用的非谷歌商店版本包含恶意代码

本月早些时候，独立安全研究机构 DarkNavy 发表文章披露，中国某个移动应用利用了安卓系统的零日漏洞提权使其难以卸载。上周，谷歌将该公司的多个应用 [标记为](/article-15647-1.html) 恶意程序并下架。被指的公司发表声明反对对其应用的恶意推测和指控。现在，又一家安全公司 Lookout 对该应用的两个非谷歌商店版本进行了分析，确认了 DarkNavy 的指控。被利用的漏洞是谷歌在 3 月 6 日公开并修复的，利用该漏洞可以提权，而且整个过程不需要用户交互。目前没有证据表明该应用的谷歌商店和苹果应用商店版本含有恶意代码，但通过第三方市场下载的则不能保证。

>
> **[消息来源：Ars Technica](https://arstechnica.com/?p=1926914)**
>
>
>

>
> 老王点评：我就呵呵了。
>
>
>

### ARM 想要改变芯片授权模式来增加收入

ARM 目前主要依赖于芯片授权协议，每季度的收入在 5 亿美元左右。为了提高收入，ARM 据称准备彻底改变芯片授权模式，以大幅增加授权费用。ARM 考虑停止向芯片制造商收取授权费用，而是转而向设备制造商收费，其费用将基于产品的总价。ARM 计划在 2024 年推动新的模式，据称手机厂商对此持抵制态度。此举可能推动手机厂商拥抱免授权费的开放架构 RISC-V。

>
> **[消息来源：Ars Technica](https://arstechnica.com/gadgets/2023/03/risc-y-business-arm-wants-to-charge-dramatically-more-for-chip-licenses/)**
>
>
>

>
> 老王点评：感谢老铁给 RISC-V 刷的火箭！
>
>
>


OpenWrt：一个开源的家用路由器固件替代品

这文章是不是过于落后了？usb共享网络给路由器我都用了五年了，去年换成3588s开发板做个5gcpe。

来自江苏南京的 Chrome Mobile 111.0|Android 13 用户

# OpenWrt：一个开源的家用路由器固件替代品

>
> OpenWrt 是一个基于 Linux 的开源操作系统，主要针对嵌入式网络设备。
>
>
>

如果你在家里阅读这篇文章，你可能是用一个 LTE/5G/DSL/WIFI 路由器联网的。这种设备通常负责在你的本地设备（智能手机、PC、电视等）之间路由数据包，并通过内置的调制解调器提供对 WWW 的访问。你家里的路由器很可能有一个基于网页的界面，用于配置该设备。这种界面往往过于简单，因为它们是为普通用户制作的。

如果你想要更多的配置选项，但又不想花钱买一个专业的设备，你应该看看其他的固件，如 [OpenWrt](https://openwrt.org)。

### OpenWrt 的特点

OpenWrt 是一个基于 Linux 的、针对嵌入式网络设备的开源操作系统。它主要用于替代各种家用路由器上的原始固件。OpenWrt 具备一个好的路由器应该具备的所有有用功能，如 DNS 服务器（[dnsmasq](https://thekelleys.org.uk/dnsmasq/doc.html)），WiFi 接入点（AP）和客户端功能，用于调制解调器功能的 PPP 协议，而且，与标准固件不同，这一切都是可以完全配置的。

#### LuCI 网页界面

OpenWrt 可以通过命令行（SSH）或使用 GUI 配置界面（[LuCI](https://openwrt.org/docs/guide-user/luci/start)）进行远程配置。LuCI 是一个用 [Lua](https://opensource.com/article/20/2/lua-cheat-sheet) 编写的轻量级、可扩展的网页 GUI，它可以精确地配置你的设备。除了配置，LuCI 还提供了很多额外的信息，如实时图表、系统日志和网络诊断。

LuCI 有一些可选的扩展，以增加更多的配置选择。

#### 可写文件系统

它的另一个亮点是可写文件系统。原有的固件通常是只读的，而 OpenWrt 配备了一个可写的文件系统，这要归功于一个巧妙的解决方案，它将 OverlayFS 与 SquashFS/JFFS2 文件系统相结合，允许安装软件包以增强功能。在 [OpenWrt 文档](https://openwrt.org/docs/techref/flash.layout) 中可以找到更多关于文件系统架构的信息。

#### 扩展

OpenWrt 有一个相关的软件包管理器，[opkg](https://openwrt.org/docs/guide-user/additional-software/opkg)，它允许安装额外的服务，比如 FTP 服务器、DLNA 媒体服务器、OpenVPN 服务器、用于实现文件共享的 Samba 服务器、控制电话的 Asterisk 等等。当然，有些扩展需要适当的底层硬件资源。

### 动机

你可能想知道为什么要冒着对你的设备造成不可修复的损害和失去保修的风险，而尝试更换路由器制造商的固件。如果你的设备以你想要的方式工作，那么你可能不应该。永远不要碰一个正在运行的系统！但是，如果你想增强功能，或者你的设备缺乏配置选项，那么你应该看看 OpenWrt 是否可以成为一种补救措施。

在我的例子中，我想要一个旅行用的路由器，当我在露营地的时候，我可以把它放在一个合适的位置，以便让其它设备与这个本地 WiFi 接入点（AP）保持良好连接。该路由器将作为一个普通的客户端连接到互联网，并广播它的 WiFi 接入点让我的其它设备连接到它。这样我就可以配置我的所有设备与这个路由器的接入点连接，当我在其他地方时我只需要改变路由器的客户端连接。此外，在一些露营地，你只能得到一个单一设备的访问代码，我可以通过这种设置来加强。

作为我的旅行路由器，我选择 TP-Link TL-WR902AC 的原因如下：

* 很小
* 两根 WiFi 天线
* 5V 电源（USB）
* 低功耗
* 成本效益高（你以 30 美元左右的价格得到它）

为了了解它的尺寸，这里是它在树莓派 4 旁边的样子：

尽管这个路由器带来了我所需要的所有硬件功能，但我很快发现，默认的固件并不能让我按照我想要的方式配置它。该路由器主要是作为一个 WiFi 接入点，它可以复制现有的 WiFi 网络或通过板载以太网接口将自己连接到网络。默认的固件对于这些使用情况是非常有限的。

（LCTT 译注：此型号国内没有销售，它的特点之一是可以通过插入 3G/4G USB 网卡连接到互联网，但由于它不在国内销售，所以没有支持哪种国内 3G/4G USB 网卡的说明，我 [查下来](https://www.tp-link.com/lk/support/3g-comp-list/tl-wr902ac/?location=1963) 似乎华为的 E3372h-320 是可用的。有相关实践的同学可以分享一下经验。

国内销售的其它类似型号只能通过以太网口或 WiFi 连接到互联网，这种情况下，如果只能通过 3G/4G 连接互联网，那需要另外买一个随身 WiFi /移动路由器。）

幸运的是，该路由器能够运行 OpenWrt，所以我决定用它来替换原来的固件。

### 安装

当你的 LTE/5G/DSL/WiFi 路由器符合 [最低要求](https://openwrt.org/supported_devices) 时，很有可能在它上面运行 OpenWrt。下一步，你要查看 [硬件表](https://openwrt.org/toh/start)，检查你的设备是否被列为兼容，以及你要选择哪个固件包。OpenWrt 的 [TP-Link TL-WR902AC](https://openwrt.org/toh/tp-link/tl-wr902ac_v3) 的页面还包括安装说明，其中描述了如何刷入内部存储器。

刷入固件的过程在不同的设备之间可能会有所不同，所以我就不详细介绍了。简而言之，我必须通过将设备连接到一个具有特定 IP 地址的网络接口上的 TFTP 服务器，重命名 OpenWrt 固件文件，然后按复位按钮启动设备。

### 配置

一旦刷入成功，你的设备现在应该用新的固件启动了。现在启动可能需要更长的时间，因为与默认固件相比，OpenWrt 具有更多的功能。

为了开始配置，需要在你的 PC 和路由器之间建立一个直接的以太网连接，OpenWrt 在此充当了一个 DHCP 服务器，并将你的 PC 的以太网适配器配置为一个 DHCP 客户端。

在 Fedora Linux 上，要激活你的网络适配器的 DHCP 客户端模式，首先你必须通过运行找出连接的 UUID：

```
$ nmcli connection show
NAME          UUID         TYPE      DEVICE
Wired Conn 1  7a96b...27a  ethernet  ens33
virbr0        360a0...673  bridge   virbr0
testwifi      2e865...ee8  wifi     --
virbr0        bd487...227  bridge   --
Wired Conn 2  16b23...7ba  ethernet --

```

选择你要修改的连接的 UUID，然后运行：

```
$ nmcli connection modify <UUID> ipv4.method auto

```

你可以在 [Fedora 联网维基](https://fedoraproject.org/wiki/Networking/CLI) 中找到更多关于这些命令的信息。

在你连接到路由器后，打开一个网页浏览器并导航到 <http://openwrt/>。现在你应该看到 LuCI 的登录管理器：

使用 `root` 作为用户名，并将密码留空。

### 配置 WiFi 和路由

要配置你的 WiFi 天线，请点击 “<ruby> 网络 <rt>  Network </rt></ruby>” 菜单并选择 “<ruby> 无线 <rt>  Wireless </rt></ruby>”。

在我的设备上，上面的天线 `radio0` 工作在 2.4GHz 模式，并连接到名为 `MOBILE-INTERNET` 的本地接入点。下面的天线 `radio1` 工作在 5GHz，有一个相关的接入点，SSID 为 `OpenWrt_AV`。通过点击 “<ruby> 编辑 <rt>  Edit </rt></ruby>” 按钮，你可以打开设备配置，以决定该设备属于 LAN 还是 WWAN 网络。在我的例子中，接入点 `OpenWrt_AV` 属于 LAN 网络，客户端连接 `MOBILE-INTERNET` 属于 WWAN 网络。

配置的网络在 “<ruby> 接口 <rt>  Interfaces </rt></ruby>” 面板的 “<ruby> 网络 <rt>  Network </rt></ruby>” 下列出。

为了获得我想要的功能，网络流量必须在 LAN 和 WWAN 网络之间进行路由。路由可以在 “<ruby> 网络 <rt>  Network </rt></ruby>” 面板的 “<ruby> 防火墙 <rt>  Firewall </rt></ruby>” 部分进行配置。我没有在这里做任何改动，因为在默认情况下，网络之间的流量是被路由的，而传入的数据包（从 WWAN 到 LAN）必须通过防火墙。

因此，你需要知道的是一个接口是属于 LAN 还是 (W)WAN。这个概念使它相对容易配置，特别是对初学者来说。你可以在 [OpenWrt 联网基础](https://openwrt.org/docs/guide-user/base-system/basic-networking) 指南中找到更多信息。

### 专属门户

公共 WiFi 接入点通常受到 [专属门户](https://en.wikipedia.org/wiki/Captive_portal) 的保护，你必须输入一个访问代码或类似的代码。通常情况下，当你第一次连接到接入点并试图打开一个任意的网页时，这种门户就会出现。这种机制是由接入点的 DNS 服务器实现的。

默认情况下，OpenWrt 激活了一个安全功能，可以防止连接的客户端受到 [DNS 重新绑定攻击](https://en.wikipedia.org/wiki/DNS_rebinding)。OpenWrt 的重新绑定保护也阻止了专属门户网站被转发到客户端，所以你必须禁用重新绑定保护，以便你可以到达专属门户网站。这个选项在 “<ruby> 网络 <rt>  Network </rt></ruby>” 菜单的 “<ruby> DHCP 和 DNS <rt>  DHCP and DNS </rt></ruby>” 面板中。

### 尝试 OpenWrt

由于升级到 OpenWrt，我得到了一个基于商品硬件的灵活的旅行路由器。OpenWrt 使你的路由器具有完全的可配置性和可扩展性，而且由于其制作精良的网页 GUI，它也适合初学者使用。甚至有一些 [精选路由器](https://opensource.com/article/22/1/turris-omnia-open-source-router) 在出厂时已经安装了 OpenWrt。你还可以用很多 [可用的软件包](https://openwrt.org/packages/table/start) 来增强你的路由器的功能。例如，我正在使用 [vsftp](https://openwrt.org/docs/guide-user/services/nas/ftp.overview) FTP 服务器，在连接的 U 盘上托管一些电影和电视剧。看看该 [项目主页](https://openwrt.org/reasons_to_use_openwrt)，在那里你可以找到许多切换到 OpenWrt 的理由。

图片来自： Stephan Avenwedde，[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/legalcode)

---

via: <https://opensource.com/article/22/7/openwrt-open-source-firmware>

作者：[Stephan Avenwedde](https://opensource.com/users/hansic99) 选题：[lkxed](https://github.com/lkxed) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


如何设置自己的保护隐私的 DNS 服务器

# 如何设置自己的保护隐私的 DNS 服务器

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

>
> 通过开源项目 AdGuard Home 运行你自己的 DNS 服务器来控制你的互联网隐私。
>
>
>

域名服务器（DNS）将域名（如 example.com）与 IP 地址（如 93.184.216.34）相关联。这就是当你输入 URL 或搜索引擎返回 URL 供你访问时，你的网络浏览器如何知道在世界的哪个地方寻找数据。DNS 为互联网用户提供了极大的便利，但也并非没有缺点。例如，付费广告会出现在网页上，因为你的浏览器会自然的使用 DNS 来解析这些广告在互联网上“存在”的位置。同样，跟踪你在线活动的软件通常由通过 DNS 解析的服务启用。你不想完全关闭 DNS，因为它非常有用。但是你可以运行自己的 DNS 服务，以便更好地控制它的使用方式。

我相信运行自己的 DNS 服务器至关重要，这样你就可以阻止广告并保持你的浏览隐私，远离试图分析你的在线交互的提供商。我过去用过 [Pi-hole](https://opensource.com/article/18/2/block-ads-raspberry-pi)，今天仍然推荐它。然而，最近，我一直在我的网络上运行开源项目 [AdGuard Home](https://github.com/AdguardTeam/AdGuardHome)。我发现它有一些值得探索的独特功能。

### AdGuard Home

在我使用过的开源 DNS 软件中，[AdGuard Home](https://github.com/AdguardTeam/AdGuardHome) 是最容易设置和维护的。你可以在一个项目中获得许多 DNS 解析解决方案，例如 DNS over TLS、DNS over HTTPS 和 DNS over QUIC。

你可以使用一个脚本将 AdGuard 设置为容器或本地服务：

```
$ curl -s -S -L \
    https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh

```

查看这个脚本以便了解它的作用。了解了它的工作过程后，再运行它：

```
$ sh ./install.sh

```

我最喜欢 AdGuard Home 的一些功能：

* 一个简单的管理界面
* 使用 AdGuard 阻止列表来阻止广告和恶意软件
* 单独配置网络上每个设备的选项
* 强制在特定设备上进行安全搜索
* 为管理界面设置 HTTPS，这样与它的远程交互是完全加密的

我发现 AdGuard Home 为我节省了时间。它的黑名单比 Pi-hole 上的黑名单更强大。你可以快速轻松地将其配置为 DNS over HTTPS。

### 没有更多的恶意软件

恶意软件是你计算机上不需要的内容。它并不总是对你有直接危险，但它可能会为第三方带来危险活动。这不是互联网最初的目的。我认为你应该托管自己的 DNS 服务，以保护你的互联网历史记录的私密性，并避免被微软、谷歌和亚马逊等已知跟踪器掌握。在你的网络上试用 AdGuard Home 吧。

---

via: <https://opensource.com/article/23/3/open-source-dns-server>

作者：[Amar Gandhi](https://opensource.com/users/amar1723) 选题：[lkxed](https://github.com/lkxed/) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #955 马斯克等人呼吁暂停训练更强大的 AI

Summary:
? 马斯克等人呼吁暂停训练更强大的 AI
? 英伟达表示加密货币没有给社会带来任何有用的东西
? 英国设置假的 DDoS 雇佣网站以扰乱市场
»
»

网络钓鱼执法

# 硬核观察 #955 马斯克等人呼吁暂停训练更强大的 AI

### 马斯克等人呼吁暂停训练更强大的 AI

埃隆·马斯克和一群人工智能专家、行业高管在一封公开信中说，他们呼吁至少在六个月内暂停训练比 OpenAI 的 GPT-4 更强大的系统，并呼吁政府介入。其理由是对社会和人类的潜在风险。这份公开信有 1000 多人签名，除了马斯克，还包括 DeepMind 的研究人员、开发稳定扩散 AIGC 的公司 CEO 等等。他们认为需要先制定、实施并由独立专家审核的共享安全协议。OpenAI 没有参与签名，也没有置评。

今天还有一则消息称，马斯克离开 OpenAI 是由于夺权失败。马斯克曾承诺赞助 10 亿美元给 OpenAI，但赞助 1 亿美元后离开了 OpenAI 就没有继续赞助。

>
> **[消息来源：路透社](https://www.reuters.com/technology/musk-experts-urge-pause-training-ai-systems-that-can-outperform-gpt-4-2023-03-29/)**
>
>
>

>
> 老王点评：签署这封信的人可能大多出于公义，但是 AI 这个魔盒打开，恐怕是难以这样轻易关上的。
>
>
>

### 英伟达表示加密货币没有给社会带来任何有用的东西

英伟达的显卡曾经被大量用来挖掘以太坊之类的加密货币，由于被大量抢购，英伟达一度限制过其显卡的挖矿能力。英伟达也曾推出挖矿专用的显卡，并从中获利甚丰。但随着以太坊转向 POS 共识，不再需要显卡来挖矿，这一市场几乎马上消失了。如今该公司的 CTO 称，加密货币没有 “给社会带来任何有用的东西。……处理能力的其他用途，如人工智能聊天机器人 ChatGPT，比挖掘加密货币更有价值。”第一个版本的 ChatGPT 是在一台由大约 10,000 块英伟达显卡组成的超级计算机上训练的。

>
> **[消息来源：《卫报》](https://www.theguardian.com/technology/2023/mar/26/cryptocurrencies-add-nothing-useful-to-society-nvidia-chatbots-processing-crypto-mining)**
>
>
>

>
> 老王点评：这翻脸可真快啊。
>
>
>

### 英国设置假的 DDoS 雇佣网站以扰乱市场

英国国家犯罪署建立了虚假的 DDoS 雇佣网站，试图收集用户的信息，提醒他们发动 DDoS 攻击是非法的。这些看起来像提供了使网络罪犯能够实施这些攻击的工具和服务的虚假网站，迄今已有数千人访问过。然而，在用户注册后，在英国的用户将被国家犯罪署或警方联系，并被警告参与网络犯罪。与设在海外的用户有关的信息将被传递给国际执法部门。

>
> **[消息来源：Krebson Security](https://krebsonsecurity.com/2023/03/uk-sets-up-fake-booter-sites-to-muddy-ddos-market/)**
>
>
>

>
> 老王点评：这让那些想要攻击别人的人自投罗网。
>
>
>