硬核观察 #1171 马斯克希望 X 接管用户全部财务活动，超越微信
马斯克希望 X 接管用户全部财务活动，超越微信在埃隆·马斯克入主 X 公司一年后，这个前身名为 Twitter 的平台的财务状况仍不稳定，但持续的资金问题并没有阻止马斯克继续推进将 X 转变为银行的计划。在财报电话会议上，马斯克告诉 X 的员工，他预测 X 的支付系统将于 2024 年底推出，这将包括用户的“整个财务活动”，用户将“不再需要银行账户”。作为 PayPal 的联合创始人之一，马斯克重申，他对 X 的计划是全面实现他最初在 2000 年为 PayPal 写的路线图。马斯克说，他努力将 Twitter 打造成一个无所不能的应用程序，有朝一日将超过中国的微信。消息来源：Ars Technica老王点评：即便有珠玉在前，也未必能实现。近 80% 的开发人员在考虑换工作根据 Stack Overflow 的一份调查，与过去两年相比，现在有更多的开发人员正在寻找或愿意接受新工作。超过 1000 名开发人员参加了该调查，79% 的人即使没有积极寻找，也至少在考虑新的机会。更好的薪水是他们寻找新工作的首要原因。其次是对其他公司的好奇心，如新技术和发展机会。此外，8% 的开发人员已退出技术行业，越来越多地在制造和供应链公司任职。消息来源：Stack Overflow老王点评：IT 行业的“活力”也体现在频繁换工作方面。印度 Infosys 联合创始人呼吁年轻人每周工作 70 小时Infosys 联合创始人、前 CEO 纳拉亚纳·穆尔西 Narayana Murthy 在接受采访时表示，他认为印度拥有巨大的经济潜力，但其生产率仍然很低。他要求年轻人必须说“这是我的国家，我想每周工作 70 小时”，他要求印度所有优秀青年“在未来 20 年、50 年（无论长短）每天工作 12 小时，使印度成为国内生产总值排名第一或第二的国家。”具有讽刺意味的是，Infosys 最近报告称，其员工利用率目前为 81.8%，还不到 70 小时的一半。消息来源：The Register老王点评：天下老板的想法都是一样（黑）的。
KDE Plasma 6 进行了一些修改，需要小部件作者进行调整。开发人员，移植时间到了！KDE Plasma 6 是备受期待的桌面环境版本升级版本。最近，其发布时间表公布，第一个 Alpha 版本将于 2023 年 11 月 8 日上线，最终 Beta 版本于 2023 年 1 月 31 日上线，稳定版计划于 2024 年 2 月 28 日上线。考虑到 KDE Plasma 5.x 系列包含多项改进和功能添加，许多用户对 KDE Plasma 6 带来的功能感到期待。如果你好奇，我们已经介绍了 KDE Plasma 6 的主要变化。因此，它会发生重大变化也就不足为奇了。然而，在进行重大修改后，可能会出现一些破坏体验的改动，例如无法在 Plasma 6 上运行任何旧版小部件。给小部件开发者的移植通知在 KDE 的 Nate Graham 最近发表的一篇 博客文章 中，向 Plasma 5 小部件作者发出了正式的警告。其重点指出的信息是：你需要将你的小部件移植到更新的 API，以使它们与 Plasma 6 兼容！Plasma 小部件 API 已随着即将发布的版本进行了修改。而且，为了适应这种变化并保持运行，小部件开发人员必须将他们的创作移植到更新的 API。如果开发人员不移植小部件以使用更新的 API，它将无法在 KDE Plasma 6 中运行。当然，流行的小部件开发人员很可能会进行移植。但是，如果你使用的小部件虽然还能使用，但没有积极维护，那么你将不得不在 KDE Plasma 6 中放弃它。他们已提供了一份 移植指南 供开发人员遵循。你可以在 “Plasma 6 扩展” 下找到与 Plasma 6 兼容的小部件。在撰写本文时，只能看到列出了两个第三方小部件。因此，当你喜欢的小部件被移植到 KDE Plasma 6 并由相关开发者上传后，你就会发现它们的踪迹。? 你期待移植哪些 KDE 小部件？ 你认为你会错过某些不再维护的小部件吗？在下面的评论中分享你的想法。via: https://news.itsfoss.com/kde-plasma-6-widgets/作者：Ankush Das 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
最近，我首次尝试了 Mac。直至现在，我注意到的最大缺点是其软件包管理比 Linux 差很多。一段时间以来，我对于 homebrew 感到相当不满，因为每次我安装新的软件包时，它大部分时间都花在了升级上。于是，我萌生了试试 nix 包管理器的想法！公认的，nix 的使用存在一定困惑性（甚至它有自己单独的编程语言！），因此，我一直在努力以最简洁的方式掌握使用 nix，避开复杂的配置文件管理和新编程语言学习。以下是我至今为止学习到的内容, 敬请期待如何进行：使用 nix 安装软件包为一个名为 paperjam 的 C++ 程序构建一个自定义的 nix 包用 nix 安装五年前的 hugo 版本如同以往，由于我对 nix 的了解还停留在入门阶段，本篇文章可能存在一些表述不准确的地方。甚至我自己也对于我是否真的喜欢上 nix 感到模棱两可 —— 它的使用真的让人相当困惑！但是，它帮我成功编译了一些以前总是难以编译的软件，并且通常来说，它比 homebrew 的安装速度要快。nix 为何引人关注？通常，人们把 nix 定义为一种“声明式的包管理”。尽管我对此并不太感兴趣，但以下是我对 nix 的两个主要欣赏之处：它提供了二进制包（托管在 https://cache.nixos.org/ 上），你可以迅速下载并安装对于那些没有二进制包的软件，nix 使编译它们变得更容易我认为 nix 之所以擅长于编译软件，主要有以下两个原因：在你的系统中，可以安装同一库或程序的多个版本（例如，你可能有两个不同版本的 libc）。举个例子，我当前的计算机上就存在两个版本的 node，一个位于 /nix/store/4ykq0lpvmskdlhrvz1j3kwslgc6c7pnv-nodejs-16.17.1，另一个位于 /nix/store/5y4bd2r99zhdbir95w5pf51bwfg37bwa-nodejs-18.9.1。除此之外，nix 在构建包时是在隔离的环境下进行的，只使用你明确声明的依赖项的特定版本。因此，你无需担心这个包可能依赖于你的系统里的其它你并不了解的包，再也不用与 LD_LIBRARY_PATH 战斗了！许多人投入了大量工作，来列出所有包的依赖项。在本文后面，我将给出两个例子，展示 nix 如何使我在编译软件时遇到了更小的困难。我是如何开始使用 nix 的下面是我开始使用 nix 的步骤：安装 nix。我忘记了我当时是如何做到这一点，但看起来有一个官方安装程序 和一个来自 zero-to-nix.com 的 非官方安装程序。在 MacOS 上使用标准的多用户安装卸载 nix 的 教程 有点复杂，所以选择一个卸载教程更为简单的安装方法可能值得。把 ~/.nix-profile/bin 添加到我的 PATH用 nix-env -iA nixpkgs.NAME 命令安装包就是这样。基本上，是把 nix-env -iA 当作 brew install 或者 apt-get install。例如，如果我想安装 fish，我可以这样做：nix-env -iA nixpkgs.fish 这看起来就像是从 https://cache.nixos.org 下载一些二进制文件 - 非常简单。有些人使用 nix 来安装他们的 Node 和 Python 和 Ruby 包，但我并没有那样做 —— 我仍然像我以前一样使用 npm install 和 pip install。一些我没有使用的 nix 功能有一些 nix 功能/工具我并没有使用，但我要提及一下。我最初认为你必须使用这些功能才能使用 nix，因为我读过的大部分 nix 教程都讨论了它们。但事实证明，你并不一定要使用它们。NixOS（一个 Linux 发行版）nix-shellnix flakeshome-managerdevenv.sh我不去深入讨论它们，因为我并没真正使用过它们，而且网上已经有很多详解。安装软件包nix 包在哪里定义的？我认为 nix 包主仓库中的包是定义在 https://github.com/NixOS/nixpkgs/。你可以在 https://search.nixos.org/packages 查找包。似乎有两种官方推荐的查找包的方式：nix-env -qaP NAME，但这非常缓慢，并且我并没有得到期望的结果nix --extra-experimental-features 'nix-command flakes' search nixpkgs NAME，这倒是管用，但显得有点儿冗长。并且，无论何种原因，它输出的所有包都以 legacyPackages 开头我找到了一种我更喜欢的从命令行搜索 nix 包的方式：运行 nix-env -qa '*' > nix-packages.txt 获取 Nix 仓库中所有包的列表编写一个简洁的 nix-search 脚本，仅在 packages.txt 中进行 grep 操作（cat ~/bin/nix-packages.txt | awk '{print $1}' | rg "$1"）所有的东西都是通过符号链接来安装的nix 的一个主要设计是，没有一个单一的 bin 文件夹来存放所有的包，而是使用了符号链接。有许多层的符号链接。比如，以下就是一些符号链接的例子：我机器上的 ~/.nix-profile 最终是一个到 /nix/var/nix/profiles/per-user/bork/profile-111-link/ 的链接~/.nix-profile/bin/fish 是到 /nix/store/afkwn6k8p8g97jiqgx9nd26503s35mgi-fish-3.5.1/bin/fish 的链接当我安装某样东西的时候，它会创建一个新的 profile-112-link 目录并建立新的链接，并且更新我的 ~/.nix-profile 使其指向那个目录。我认为，这意味着如果我安装了新版本的 fish 但我并不满意，我可以很容易地退回先前的版本，只需运行 nix-env --rollback，这样就可以让我回到之前的配置文件目录了。卸载包并不意味着删除它们如果我像这样卸载 nix 包，实际上并不会释放任何硬盘空间，而仅仅是移除了符号链接：$ nix-env --uninstall oil 我尚不清楚如何彻底删除包 - 我试着运行了如下的垃圾收集命令，这似乎删除了一些项目：$ nix-collect-garbage ... 85 store paths deleted, 74.90 MiB freed 然而，我系统上仍然存在 oil 包，在 /nix/store/8pjnk6jr54z77jiq5g2dbx8887dnxbda-oil-0.14.0。nix-collect-garbage 有一个更具攻击性的版本，它也会删除你配置文件的旧版本（这样你就不能回滚了）。$ nix-collect-garbage -d --delete-old 尽管如此，上述命令仍无法删除 /nix/store/8pjnk6jr54z77jiq5g2dbx8887dnxbda-oil-0.14.0，我不明白原因。升级过程你可以通过以下的方式升级 nix 包：nix-channel --update nix-env --upgrade （这与 apt-get update && apt-get upgrade 类似。）我还没真正尝试升级任何东西。我推测，如果升级过程中出现任何问题，我可以通过以下方式轻松地回滚（因为在 nix 中，所有事物都是不可变的！）：nix-env --rollback 有人向我推荐了 Ian Henry 的 这篇文章，该文章讨论了 nix-env --upgrade 的一些令人困惑的问题 - 也许它并不总是如我们所料？因此，我会对升级保持警惕。下一个目标：创建名为 paperjam 的自定义包经过几个月使用现有的 nix 包后，我开始考虑制作自定义包，对象是一个名为 paperjam 的程序，它还没有被打包封装。实际上，因为我系统上的 libiconv 版本不正确，我甚至在没有 nix 的情况下也遇到了编译 paperjam 的困难。我认为，尽管我还不懂如何制作 nix 包，但使用 nix 来编译它可能会更为简单。结果证明我的想法是对的！然而，理清如何实现这个目标的过程相当复杂，因此我在这里写下了一些我实现它的方式和步骤。构建示例包的步骤在我着手制作 paperjam 自定义包之前，我想先试手构建一个已存在的示例包，以便确保我已经理解了构建包的整个流程。这个任务曾令我头痛不已，但在我在 Discord 提问之后，有人向我阐述了如何从 https://github.com/NixOS/nixpkgs/ 获取一个可执行的包并进行构建。以下是操作步骤：步骤 1： 从 GitHub 的 nixpkgs 下载任意一个包，以 dash 包为例：wget https://raw.githubusercontent.com/NixOS/nixpkgs/47993510dcb7713a29591517cb6ce682cc40f0ca/pkgs/shells/dash/default.nix -O dash.nix 步骤 2： 用 with import <nixpkgs> {}; 替换开头的声明（{ lib , stdenv , buildPackages , autoreconfHook , pkg-config , fetchurl , fetchpatch , libedit , runCommand , dash }:）。我不清楚为何需要这样做，但事实证明这么做是有效的。步骤 3： 运行 nix-build dash.nix这将开始编译该包。步骤 4： 运行 nix-env -i -f dash.nix这会将该包安装到我的 ~/.nix-profile 目录下。就这么简单！一旦我完成了这些步骤，我便感觉自己能够逐步修改 dash 包，进一步创建属于我自己的包了。制作自定义包的过程因为 paperjam 依赖于 libpaper，而 libpaper 还没有打包，所以我首先需要构建 libpaper 包。以下是 libpaper.nix，我基本上是从 nixpkgs 仓库中其他包的源码中复制粘贴得到的。我猜测这里的原理是，nix 对如何编译 C 包有一些默认规则，例如 “运行 make install”，所以 make install 实际上是默认执行的，并且我并不需要明确地去配置它。with import <nixpkgs> {}; stdenv.mkDerivation rec { pname = "libpaper"; version = "0.1"; src = fetchFromGitHub { owner = "naota"; repo = "libpaper"; rev = "51ca11ec543f2828672d15e4e77b92619b497ccd"; hash = "sha256-S1pzVQ/ceNsx0vGmzdDWw2TjPVLiRgzR4edFblWsekY="; }; buildInputs = [ ]; meta = with lib; { homepage = "https://github.com/naota/libpaper"; description = "libpaper"; platforms = platforms.unix; license = with licenses; [ bsd3 gpl2 ]; }; } 这个脚本基本上告诉 nix 如何从 GitHub 下载源代码。我通过运行 nix-build libpaper.nix 来构建它。接下来，我需要编译 paperjam。我制作的 nix 包 的链接在这里。除了告诉它从哪里下载源码外，我需要做的主要事情有：添加一些额外的构建依赖项（像 asciidoc）在安装过程中设置一些环境变量（installFlags = [ "PREFIX=$(out)" ];），这样它就会被安装在正确的目录，而不是 /usr/local/bin。我首先从散列值为空开始，然后运行 nix-build 以获取一个关于散列值不匹配的错误信息。然后我从错误信息中复制出正确的散列值。我只是在 nixpkgs 仓库中运行 rg PREFIX 来找出如何设置 installFlags 的 —— 我认为设置 PREFIX 应该是很常见的操作，可能之前已经有人做过了，事实证明我的想法是对的。所以我只是从其他包中复制粘贴了那部分代码。然后我执行了：nix-build paperjam.nix nix-env -i -f paperjam.nix 然后所有的东西都开始工作了，我成功地安装了 paperjam！耶！下一个目标：安装一个五年前的 Hugo 版本当前，我使用的是 2018 年的 Hugo 0.40 版本来构建我的博客。由于我并不需要任何的新功能，因此我并没有感到有升级的必要。对于在 Linux 上操作，这个过程非常简单：Hugo 的发行版本是静态二进制文件，这意味着我可以直接从 发布页面 下载五年前的二进制文件并运行。真的很方便！但在我的 Mac 电脑上，我遇到了一些复杂的情况。过去五年中，Mac 的硬件已经发生了一些变化，因此我下载的 Mac 版 Hugo 二进制文件并不能运行。同时，我尝试使用 go build 从源代码编译，但由于在过去的五年内 Go 的构建规则也有所改变，因此没有成功。我曾试图通过在 Linux docker 容器中运行 Hugo 来解决这个问题，但我并不太喜欢这个方法：尽管可以工作，但它运行得有些慢，而且我个人感觉这样做有些多余。毕竟，编译一个 Go 程序不应该那么麻烦！幸好，Nix 来救援！接下来，我将介绍我是如何使用 nix 来安装旧版本的 Hugo。使用 nix 安装 Hugo 0.40 版本我的目标是安装 Hugo 0.40，并将其添加到我的 PATH 中，以 hugo-0.40 作为命名。以下是我实现此目标的步骤。尽管我采取了一种相对特殊的方式进行操作，但是效果不错（可以参考 搜索和安装旧版本的 Nix 包 来找到可能更常规的方法）。步骤 1： 在 nixpkgs 仓库中搜索找到 Hugo 0.40。我在此链接中找到了相应的 .nix 文件 https://github.com/NixOS/nixpkgs/blob/17b2ef2/pkgs/applications/misc/hugo/default.nix。步骤 2： 下载该文件并进行构建。我下载了带有 .nix 扩展名的文件（以及同一目录下的另一个名为 deps.nix 的文件），将文件的首行替换为 with import <nixpkgs> {};，然后使用 nix-build hugo.nix 进行构建。虽然这个过程几乎无需进行修改就能成功运行，但我仍然做了两处小调整：把 with stdenv.lib 替换为 with lib。为避免与我已安装的其他版本的 hugo 冲突，我把包名改为了 hugo040。步骤 3： 将 hugo 重命名为 hugo-0.40。我编写了一个简短的后安装脚本，用以重命名 Hugo 二进制文件。postInstall = '' mv $out/bin/hugo $out/bin/hugo-0.40 ''; 我是通过在 nixpkgs 仓库中运行 rg 'mv ' 命令，然后复制和修改一条看似相关的代码片段来找到如何实施此步骤。步骤 4： 安装。我通过运行 nix-env -i -f hugo.nix 命令，将 Hugo 安装到了 ~/.nix-profile/bin 目录中。所有的步骤都顺利运行了！我把最终的 .nix 文件存放到了我自己的 nixpkgs 仓库 中，这样我以后如果需要，就能再次使用它了。可重复的构建过程并非神秘，其实它们极其复杂我觉得值得一提的是，这个 hugo.nix 文件并不是什么魔法——我之所以能在今天轻易地编译 Hugo 0.40，完全归功于许多人长期以来的付出，他们让 Hugo 的这个版本得以以可重复的方式打包。总结安装 paperjam 和这个五年前的 Hugo 版本过程惊人地顺利，实际上比没有 nix 来编译它们更简单。这是因为 nix 极大地方便了我使用正确的 libiconv 版本来编译 paperjam 包，而且五年前就已经有人辛苦地列出了 Hugo 的确切依赖关系。我并无计划详细深入地使用 nix（真的，我很可能对它感到困扰，然后最后选择回归使用 homebrew！），但我们将拭目以待！我发现，简单入手然后按需逐步掌握更多功能，远比一开始就全面接触一堆复杂功能更容易掌握。我可能不会在 Linux 上使用 nix —— 我一直都对 Debian 基础发行版的 apt 和 Arch 基础发行版的 pacman 感到满意，它们策略明晰且少有混淆。而在 Mac 上，使用 nix 似乎会有所得。不过，谁知道呢！也许三个月后，我可能会对 nix 感到不满然后再次选择回归使用 homebrew。（题图：MJ/f68aaf37-4a34-4643-b3a1-8728d49cf887）via: https://jvns.ca/blog/2023/02/28/some-notes-on-using-nix/作者：Julia Evans 选题：lkxed 译者：ChatGPT 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
开源与 “半开源” 之间的战争和软件的历史一样久远
HashiCorp 放弃开源原则这件事并无新意。在加利福尼亚蒙特利召开的 Linux 基金会成员峰会 Linux Foundation Members Summit 上，最受关注的议题是人工智能和开源。而第二重要的话题涉及到 HashiCorp 放弃 Terraform 的 Mozilla 公共许可证 Mozilla Public License （MPL），转而采用 商业源代码许可证 Business Source License （BSL）1.1，以及由此引发的 OpenTofu 项目复刻。因 Linux 基金会对 OpenTofu 项目的支持，HashiCorp 的 CEO David McJannet 表现出极度的不满。关于许可证切换、源代码复刻以及由此产生的争议，火热的讨论并未减少。但在我看来，有一点被人们忽视：人们一直误认为这是新鲜事物，实则不然。之前已经有过不止一次，甚至不止十次，公司将开源代码转变为专有程序，或者隐藏在一个专有的包装中。首先，人们经常拿走开源代码，但却抹去其许可证信息，然后就此继续下去。虽然这并不一定构成窃取行为，实际上，有些许可证，比如 MIT 许可证和两句版 BSD 许可证，完全允许公司和开发者在他们的专有程序中使用这些代码。例如，我们都熟知以下基于 MIT 许可证的程序，比如 Angular、.NET、Node.js、Ruby on Rails 和 React。其次，有一些程序最初以开源的形式开始，但随着时间的推移，原始所有者和许可证规则发生了变化，以至于许多人甚至都不知道它们曾经是开源的。举例来说，苹果公司的 macOS 就是其中的一个典型。你是否知道 macOS 曾经是开源的？确实，它曾经是。macOS 的核心基于 Darwin，这是一种 Unix 操作系统。 史蒂夫·乔布斯 Steve Jobs 回归苹果公司时，引入了他的基于 Unix 的 NeXTStep 操作系统。到了 2000 年，苹果公司逐步放弃了他们的经典 Mac 操作系统，转而支持 macOS Darwin。除了来自 NeXTStep 的部分，Darwin 还大量借鉴了开源的 FreeBSD 和 Mach 操作系统的设计。如今，如果你深入研究，仍然可以在 macOS 中找到 Darwin，它在 苹果公共源代码许可证 Apple Public Source License 2.0 下开源。虽然还有一项名为 PureDarwin 的工作正在努力制作一个独立的 Darwin 操作系统，但进展甚微。在这个过程中，苹果公司巧妙地减弱了一个重要的开源操作系统的影响力。更为常见的方式是开源软件以 “ 开放核心 open core ” 的方式融入商业程序中。简而言之，开放核心，与开源不同的是，这是一种商业模式。在这种模式中，公司基于一个免费的、开源的核心程序，然后通过加入商业版本或者专有的附加组件来发展。此术语由 Andrew Lampitt 在 2008 年提出，虽然代表的并不是一个新的概念。他提出这个术语是为了替代混乱的术语 “ 双重许可 dual licensing ”。这个命名更改是为了 “消除误解，推广一个对于开源社区、付费客户和供应商都有利的商业模式”。同时，其目标也是为了消解我们现在在 HashiCorp 看到的 “ 诱捕并切换 bait and switch ” 类似的争议。尽管我们可以辩论这是否是一个 “出色的商业模式”，但无可争议的是它已经成为一个非常流行的模式。然而，近年来，我们看到的趋势是，许多企业从开放核心模式退回到 源码可得 source-available 模式。在源码可得模式下，你可以查看所有的代码，但在某些情况下你不能修改或使用它。例如，MongoDB 创建 了一种非开源许可证，即 服务端公共许可证 Server Side Public License （SSPL），以应对那些通过提供自托管版本和服务从其代码中获利的超级云计算公司。并非只有 MongoDB 做出了这样的决定。Elastic 在开源核心模型运作的很好，但当亚马逊 AWS 等公司通过提供 ElasticSearch 服务赚取巨额利润时，Elastic 在 2021 年做出了 策略调整。它放弃了开源的 Apache 2.0 许可，转而采用非开源的 SSPL 和 Elastic 许可证。Elastic 和其他几家公司（如 Redis 等）的此类做法，主要目的是阻止云服务公司将他们的开源程序作为一种服务而提供。然而，这个做法反过来对 Elastic 产生了负面影响，因为 AWS 对这个项目进行了 复刻。这一切是否让你想起了 HashiCorp？是吧。尽管这些向非开源许可的转变惹怒了一些用户和很多开发者，但这些公司的业绩仍表现相对稳定。你可能对此感到不满，但事实是，对于这些公司来说，这种转变在一定程度上取得了成功。接着，我们来看红帽公司的情况。红帽公司对其红帽企业 Linux（RHEL）代码的使用 施加了限制，只允许其客户使用。几十年来，红帽公司一直在权衡作为开源领导者与处理 RHEL 克隆产品（例如 CentOS，以及最新的 AlmaLinux 和 Rocky Linux）的关系。随着时间的推移，红帽公司对与他人共享其代码表现出越来越大的犹豫。现在，你可以（且很多人确实正在这么做）辩论红帽公司不再是一个真正的开源公司。批评者认为，红帽公司虽然仍然严格遵守 GNU 通用公共许可证（GPL）的条款，但已经失去了开源精神。虽然 RHEL 和与其相关的一系列程序仍在产生可观的利润，但红帽公司希望能够从中获取更多的收益，因此，它也开始逐步偏离开源原则。实际上，所有这些案例的共同之处在于：对更大财富的欲望。如圣经所言，“贪财是万恶之根”。我不确定这一句话的真假，但我确实知道，对金钱的热爱和开源原则很难两全。对于从开源软件中赚钱并没有错误之处。 理查德·斯托曼 Richard M Stallman （RMS）曾言：“工作寻求报酬，或者寻求尽可能增加收入，这并没有错，只要不采用破坏性的方式即可。” 然而，在 RMS 看来，“通过限制它们的使用来从程序的用户中挤取金钱，是一种破坏行为。”尽管在现今开源软件与商业实践交汇的情况下，RMS 的观点可能并不如过去那样深受欢迎，但他仍然拥有众多的支持者。（题图：MJ/b06e9a62-5c0d-49c5-a7b3-fd5af60ac0b1）via: https://www.theregister.com/2023/10/27/open_source_vs_sort_of_open_source/作者：Steven J. Vaughan-Nichols 译者：ChatGPT 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
硬核观察 #1170 微软的人工智能投资稳定了其云业务
微软的人工智能投资稳定了其云业务据报道，微软在生成式人工智能方面的投资开始促进销售，最明显的是扭转了公司重要的云计算产品增长放缓的趋势。微软向推出了 ChatGPT 的 OpenAI 建立了合作伙伴关系，并向其投资了 130 亿美元，因此微软被许多公司视为领先的人工智能供应商。财报显示，微软的旗舰云计算产品 Azure 增长了 29%，高于上一季度的 26%。微软 CEO 称，超过 1.8 万家企业正在使用微软的 Azure OpenAI 服务，这其中包括以前没有使用过 Azure 的客户。但是，虽然微软在必应搜索引擎中集成了人工智能驱动的聊天机器人，但 “没有证据” 表明必应的搜索市场份额有实际增长。消息来源：《纽约时报》老王点评：操作系统业务不好时，投资云计算；云业务缺少增长点时，投资人工智能。苹果推出了三年的私人 Wi-Fi 一直未能隐藏地址如果设备在所有网络中始终使用相同的 Wi-Fi MAC 地址，该地址就很容易与设备的网络活动和位置联系起来。私人 Wi-Fi 地址旨在通过为每个不同的 Wi-Fi 网络生成不同的 MAC 地址来避免这种跟踪。但苹果从 2020 年 9 月推出该功能以来，一直未能真正隐藏 MAC 地址，原因是与苹果 Bonjour 网络协议相关的 mDNSResponder 进程存在漏洞。安全专家发现，当 iPhone 加入一个网络时，它会发送组播请求以发现网络中的 AirPlay 设备。在这些请求中，iOS 会发送设备的真实 Wi-Fi MAC 地址。消息来源：The Register老王点评：百密一疏，隐藏了三年的 MAC 地址，其实一直在偷偷泄露。Linux Mint 将获得 Wayland 试验性支持Linux Mint 是最后一个仅支持 X11 的重要 Linux 桌面之一，它正开始发生变化。计划于 2023 年圣诞节发布的 Linux Mint 21.3 将是第一个提供 Wayland 会话的 Linux Mint 发行版，但还处于试验状态，其默认会话仍将是 X11 会话。开发者认为 Linux Mint 在 2026 年 23.x 发布之前，不需要 Wayland 支持。“Wayland 会话不会像默认会话那样稳定。它将缺少一些功能，也有自己的局限性”，也就是说还需要几年的时间来完善。消息来源：9to5linux老王点评：从反馈来看，全面迁移 Wayland 确实在很多方面都没做好准备。
Moosync 音乐播放器是一个适用于本地收藏与流媒体音乐的魅力十足的跨平台应用。想听好音乐吗？?首次亮相的跨平台开源音乐播放器 Moosync ，希望成为“欢迎全社区参与”的音乐播放器。过去我们曾介绍过像 Harmonoid 和 MusicPod 这样的应用，但是它们主要是专注于离线使用。与之不同的是，Moosync 的独特之处。让我告诉你为什么。Moosync：概况 ⭐Moosync 是一个主要基于 Vue 和 TypeScript 编程语言开发的音乐播放器。Moosync 高度可定制且支持 YouTube、Spotify 以及 LastFM 等多种服务。其关键特性包含：支持显示歌词无广告播放支持本地音乐文件初次体验 ?‍?在我在我的 Ubuntu 系统上安装它之后，我开始了快速设置向导。首先设定我的音乐库的位置，它将会从此处获取本地音乐文件，过程包含了许多步骤。然后，显示了可以连接的服务选项。我试图连接我的 Spotify 账户，然而尽管我向 Moosync 提供了需要的信息，操作无法成功。不过幸运的是，这一步并非必要，所以我选择跳过。随后，它显示了空白的 “ 所有歌曲 All Songs ” 标签页，由于目前我未连接任何服务或者本地文件，所以这里是空的。考虑我没有本地音乐或 Spotify 音乐，我点击了 YouTube 过滤器并搜寻我喜欢的曲目以填充 Moosync。搜索功能还包括歌曲、艺术家、播放列表和专辑的过滤器。我可以以右键点击单曲，并添加至播放队列或者立即播放。除此之外还有其他选项，会有所不同。我在 Spotify 数据库进行搜索时，尝试做相同操作，但不幸的是，我必须要登录 Spotify 才能在 Moosync 使用它 这一计划之前被搁置。? 如果你在寻找更好的 Spotify 支持，我建议你尝试一下 BlackHole 这个音乐应用。而我选择继续，去了解这个音乐播放器。进入 “ 队列 Queue ” 标签页或者点击应用程序右下角向上指向的箭头都可以访问它。整齐的布局使人感到熟悉和舒适。在 “ 所有歌曲 All Songs ” 标签页，我添加进 Moosync 的所有歌曲都在这，我可以选择从列表开头播放，或者添加到当前队列，甚至可以在其中随机播放 100 首歌曲。在 “ 播放列表 Playlists ” 标签页，我保存的所有来自 YouTube 的播放清单都在这。它还提供了本地文件和 YouTube 间的排序选项。在 “ 专辑 Albums ” 标签页，我保存的所有专辑都以一个整齐的网格布局排列。类似的，“ 艺术家 Artists ” 标签页展示了我添加到 Moosync 库的艺术家。出于某种原因，它没有加载缩略图。“ 类别 Genres ” 标签页我也跳过了，因为它似乎不能正常工作。最后是 “ 探索 Explore ” 标签页，这里显示了我听过多少分钟的音乐。此外，你可以在 Moosync 中找到许多有用的自定义设置来优化你的使用体验。首先在 “ 主题 Theme ”设置中，你可以在三个主题和两种布局视图中选择，还有选项上传或设计自定义主题。应用还有许多扩展，一种是在 Discord 上开启丰富的存在支持，另一种是与 Soundcloud 集成，此外还有很多。显然，Moosync 支持键盘快捷方式，你可以根据个人的喜好进行设置。在我写这篇文章的时候，Moosync 这里和那里都有一些小瑕疵，但我认为它作为 最适合 Linux 的音乐播放器之一 的竞争者非常有竞争力。? 下载 MoosyncMoosync 适用于 Linux，Windows 以及 macOS。你可以在其官方网站下载你需要的安装包。Moosync对于 Linux 用户，你也可以在 Flathub 商店，Snap 商店 和 AUR 下载 Moosync。你还可以浏览他们的 GitHub 仓库，获取源代码以及更多信息。? 对这款应用有何看法？欢迎在评论区告诉我。via: https://news.itsfoss.com/moosync/作者：Sourav Rudra 选题：lujun9972 译者：ChatGPT 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
KDE 桌面立方体效果回归KDE 开发者发布了最新的进展，值得注意是的，KDE 桌面立方体效果已经回归，这一定会勾起 Linux 老用户对 Compiz/Beryl 的回忆。除此以外，KDE Plasma Wayland 现在支持每屏色彩管理，可以为每个屏幕分配 ICC 颜色配置文件。消息来源：Phoronix老王点评：当年的 Compiz 桌面效果多炫啊，不知道为什么突然就消失了，我还是很怀念的。恶意软件伪装成挖矿软件感染了 100 多万台机器卡巴斯基报告说，自 2016 年以来，这个名为 StripedFly 的功能强大的恶意软件 ，将自己伪装成一个普通的加密货币挖矿软件，已经感染了全球 100 多万台 Windows 和 Linux 计算机。这个恶意软件采用了一种新颖的方法，即添加一个加密货币挖掘模块，以防止防病毒系统发现该恶意软件的全部功能。消息来源：PCMag老王点评：正因为杀毒软件将很多挖矿软件视为非法，才让非法软件利用了挖矿软件。被惠普解雇的 40 岁以上员工们赢得 1800 万美元赔偿经过七年多的法律诉讼，一群声称惠普在裁员时歧视年长员工的前惠普员工赢得了总计 1800 万美元的赔偿。惠普已同意拿出上一季度一天多的利润总和，以解决这起由 40 岁以上员工提起的集体诉讼案。原告每人将获得 5 万多美元的赔偿，不过扣除各种律师费等开支后将缩水至最低 1.5 万美元。消息来源：The Register老王点评：虽然不多，但是我们的 35 岁以上的老员工也争取不到。
Geany 2.0 发布使其成为更通用的文本编辑器和 IDE
Geany 2.0 带来了新的文件类型和其他改进。Geany 被认为是 Linux 上最好的 Python IDE 之一，它是一个基于 GTK3 工具包的开源、轻量级 IDE。考虑到 Geany 的功能集对各种用户的吸引力，它也可以算作 Linux 上 Notepad++ 的替代品之一。现在，新版本已以 “Geany 2.0” 的形式推出，提供了许多改进。让我们看看有什么。? Geany 2.0：有什么新变化？Geany 版本的亮点可以分为两个不同的部分，主要涵盖界面和对文件类型的更好支持。文件类型升级通过更新 基本类型，改进了 Kotlin 的文件类型配置。同样，对于 Python ，针对 Python 3 重写了标准库标签创建脚本，并改进了对 ctags 文件格式的支持。最后，Geany 添加了对 AutoIt 和 GDScript 等新文件类型的**支持，并更新了 Nim 和 PHP 的文件类型配置，以解决一些长期存在的问题。界面改进Geany 2.0 在文档列表的侧边栏中提供了新的树视图。它是默认启用的，因此你无需执行任何操作。当你有大量单独的文件需要检查时，它非常实用。你还可以折叠特定文件夹以最大程度地减少混乱。编译器消息现在使用深色主题友好的颜色，以便你可以轻松阅读消息。这在深夜编码时应该很有帮助。此外，一个新的确认对话框添加到整个会话的“搜索和替换”功能中，并且添加了一个选项以在符号树中显示符号，而无需类别组。?️ 其他变化除了上述内容之外，还有一些值得注意的变化：Geany 现在需要 GTK 3.24。你现在可以滚动文档选项卡。更新了多种语言的翻译。修复了文件类型更改时的关键词着色问题。现在默认启用“更改历史记录”功能。有关此版本的更多详细信息，你可以浏览官方发行说明。? 下载 Geany 2.0由于它是 跨平台 IDE，Geany 2.0 可用于 Linux、Windows 和 macOS。你可以前往 Flathub 商店或其 官方网站下载你选择的包。Geany如果你对源代码感兴趣，你还可以访问其 GitHub 仓库。via: https://news.itsfoss.com/geany-2-0/作者：Sourav Rudra 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
如果你是关注计算机领域最新趋势的学生或从业者，你应该听说过人工智能、数据科学、机器学习、深度学习等术语。作为人工智能系列文章的第一篇，本文将解释这些术语，并搭建一个帮助初学者入门的简易教学平台。如今，计算机科学领域的学生和从业者绝对有必要了解 人工智能 artificial intelligence 、 数据科学 data science 、 机器学习 machine learning 、 深度学习 deep learning 方面的基本知识。但是应该从哪里开始呢？为了找到答案，我浏览了大量人工智能的教材和教程。它们有的从大量数学理论开始，有的用编程语言无关的方式（不要求你了解某一门特定的编程语言）讲解，有的假设你是线性代数、概率论和统计学专家。在很大程度上，它们都很有用。但它们都没有回答最重要的问题：真正的初学者应该从哪里开始学习人工智能？开始学习人工智能的方式多种多样，但是我对它们各有担忧。涉及太多的数学会让人分心，但如果数学介绍得太少就好像驾驶员不知道汽车引擎在哪里一样。对于未来的人工智能工程师和数据科学家来说，从进阶概念开始讲解是最有效率的方式，因为他们精通线性代数、概率论和统计学。如果从基础知识开始，然后在中间某个地方结束也可以，只要学员想要在这里结束学习。考虑到所有这些事实，我认为初学者的人工智能教程应该从基础知识开始，并以一个实际的人工智能项目结束。这个项目可能很小，但是在相同任务上它将会超越任何传统项目。本系列将从最基础的知识讲到中等水平内容。除了讨论人工智能，我还希望对相关的话题进行一些澄清，因为人们对人工智能、机器学习、数据科学等术语有很多困惑。人工智能程序是必要的，因为我们每天会产生海量的数据。根据互联网上查询到的结果，我们每天大约会产生 2.5x10 18 字节的数据。但是，这些数据中的大多数与我们完全无关，包括大量没有价值的 YouTube 视频，不经思考就发送的电子邮件，琐碎的新闻报道等等。然而，这片浩瀚的数据海洋中同样蕴含着无价的宝贵知识。传统软件无法完成处理这些数据的艰巨任务。人工智能是少数能够应对这种信息过载的技术之一。当谈到到人工智能时，我们还需要区分事实和假象。我记得几年前听一位人工智能专家的演讲。他讲述了一个人工智能图像识别系统，它能近乎绝对准确地分辨西伯利亚雪橇犬和西伯利亚雪狼的图像。在互联网上搜索一下，你会看到这两种动物有多么相似。如果这个系统确实那么准确，它将是人工智能的奇迹。可惜的是，事实并非如此。该图像识别系统只是对图像的背景进行了分类。西伯利亚雪橇犬是家养动物，它的图像背景中几乎总会有一些矩形或圆形的物体。而西伯利亚雪狼是野生动物，它所在的背景中有雪。这些例子导致近年来人们对人工智能提出了准确性担保要求。确实，最近几年人工智能展现了一些真正的力量。举个简单例子就是 YouTube、Amazon 等网站的推荐系统。很多时候我惊讶于它们的推荐结果，就好像它们会读心术一样。然而不论这些推荐的质量如何，“人工智能到底是好是坏？”都是一个很热门话题。我认为，一个像《终结者》中机器有意识地攻击人类的未来还遥遥无期。然而，前面那句话中的“有意识地”一词非常重要。目前的人工智能系统可能发生故障，并且意外地伤害到人类。但是，许多号称具有人工智能能力的系统实际上只是包含大量分支和循环的常规软件。因此目前可以安全地说，我们还没有在日常生活中看到人工智能的真正威力。不论是好的影响（如治愈癌症），还是坏的影响（合成的世界领导人视频导致的暴动和战争），我们都只能拭目以待了。就个人而言，我相信人工智能是一种福祉，并将大大提高未来几代人的生活质量。什么是人工智能？在我们进一步探讨之前，让我们试着理解人工智能（AI）、机器学习（ML）、深度学习（DL）、数据科学（DS）等之间的联系和区别。这些术语经常被误用为同义词。图 1 表示了人工智能、机器学习、深度学习和数据科学之间的关系。当然这不是唯一的划分方式，你可能会看到其它的划分图。但在我看来，图 1 是最贴切的，它能够最大程度地概括这些领域之间关系。在本系列的第一篇文章中，我不会对每个术语定义进行精确的定义。我认为在现阶段，精确地定义它们是适得其反的，是浪费时间。但在后续的文章中，我们将重新讨论这些术语并正式定义它们。目前我们可以暂时把人工智能看作是可以在某种程度上模仿人类智能的程序。那人类智能又是指什么呢?想象一下你的人工智能程序是一个一岁大的婴儿。这个宝宝会通过听周围人说话来学习母语。他/她将很快学会识别形状，颜色，物体等，没有任何困难。此外，他/她将能够对周围人的情绪做出反应。例如，任何一个三岁的婴儿都知道如何用甜言蜜语让父母给他/她巧克力和棒棒糖。同样，人工智能程序也将能够感知并适应环境，就像婴儿一样。然而，这种真正的人工智能只能在遥远的未来实现。图 1 显示机器学习是人工智能的真子集，它也是实现人工智能系统的技术之一。机器学习是使用大量数据来训练程序的技术，以便有效地执行必要的任务。它的准确性随着训练集的增大而增加。请注意，还有其它技术用于开发人工智能系统，如基于布尔逻辑的系统，基于模糊逻辑的系统，基于遗传编程的系统等。然而，如今机器学习是实现人工智能系统的最主流的技术。图 1 还显示深度学习是机器学习的真子集，它只是众多机器学习技术中的一种。但目前实际上大多数严肃的机器学习技术都用到了深度学习。在这一点上，我甚至避免尝试定义深度学习。请记住，深度学习涉及到使用大型人工神经网络。那数据科学（图 1 中的红圈）是做什么的呢？数据科学是计算机科学/数学领域中的一门处理和解读大规模数据的学科。我说的“大”，有多大呢？早在 2010 年，Facebook 等一些企业巨头就声称它们的服务器可以处理几 Pb 的数据。当我们说大数据时，通常指的是 Tb 或 Pb 级的数据规模，而不是 Gb 级的。许多数据科学应用涉及人工智能、机器学习和深度学习技术的使用。因此，当我们讨论人工智能时，很难不提到数据科学。数据科学也使用很多传统的编程和数据库管理技术，比如使用 Apache Hadoop 进行大数据分析。本系列的讨论将主要集中在人工智能和机器学习上，并涉及数据科学。教学环境搭建在表明了本系列文章的主题后，现在说说本教程的前置条件。你需要一台 Linux 电脑（当然 Windows 或 macOS 机器也可以，只是在一些安装步骤上可能需要额外的协助），并了解基本的数学和计算机编程知识。我希望在细心地阅读本系列文章后，你会感受到人工智能的强大。用编程语言无关的方式来学习人工智能是可能的，但本系列将基于一门编程语言并涉及大量的编程。在决定使用哪一门编程语言之前，我们先来回顾一下人工智能、机器学习、深度学习和数据科学领域流行的编程语言。Lisp 是一种函数式编程语言，它是最早用于开发人工智能程序的语言之一。Prolog 是一种逻辑编程语言，在 20 世纪 70 年代也被用于同样的目的。我们将在接下来的介绍人工智能历史的文章中更详细地介绍 Lisp 和 Prolog。如今，Java、C、C++、Scala、Haskell、MATLAB、R、Julia 等编程语言也被用于开发人工智能程序。Python 在人工智能程序开发中被广泛使用，这使我们选择它作为本教程的编程语言。但我必须声明，从这里开始做的选择（更确切地说，是我替你做的选择），主要考虑的因素是易用性、受欢迎程度、（在少数情况下）我自己对该软件/技术的适应和熟悉程度、对本教程效率的提升。但同时，我也鼓励你尝试其它的编程语言、软件和工具。也许从长远来看，它们对你来说可能是更好的选择。现在我们需要立即做出另一个选择：使用 Python 2 还是 Python 3？考虑到本系列有许多年轻的读者，他们还有漫长的职业生涯，我将选择使用 Python 3。在 Ubuntu 系统终端中执行命令 sudo apt install python3 安装最新版本的 Python 3（你的系统中可能已经安装了 Python 3）。在其它 Linux 发行版、Windows 和 macOS 机器上安装 Python 3 也非常容易。执行下面的命令查看安装的 Python 3 的版本:python3 --version Python 3.8.10 在后续的教程中，我们需要安装许多 Python 包，所以需要一个包管理器。目前主流的包管理器有 pip、Conda 和 Mamba 等。我选择 pip 作为包在本教程的管理器。它相对简单，也是推荐的 Python 安装工具。我认为 Conda 和 Mamba 是比 pip 更强大的工具，你可以尝试一下它们。运行命令 sudo apt install python3-pip 将在 Ubuntu 系统中安装 pip。pip、Conda 和 Mamba 是跨平台软件，它们可以安装在 Linux、Windows 和 macOS 系统上。运行命令 pip3 --version 查看系统中安装的 pip 版本，如下所示:pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8) 现在我们需要一个 Python 集成开发环境（IDE）。IDE 能帮助程序员更容易地编写、编译、调试和执行代码。PyCharm、IDLE、Spyder 等都是流行的 Python IDE。然而，由于我们的主要目的是开发人工智能和数据科学程序，这里考虑另外两个强有力的竞争者 —— JupyterLab 和谷歌 Colab。严格地说，它们不仅仅是 IDE；它们是非常强大的基于网络的交互式开发环境。两者都可以在网络浏览器上工作，并提供强大的功能。JupyterLab 是由非营利组织 Project Jupyter 支持的免费开源软件。谷歌 Colab 遵循 免费增值 freemium 模式，即基本功能免费，附加功能收费。我认为谷歌 Colab 比 JupyterLab 功能更强大。但是由于谷歌 Colab 的免费增值模式，以及我相对缺乏谷歌 Colab 的使用经验，在本教程中我选择 JupyterLab。但我仍然强烈建议你去了解一下谷歌 Colab。可以使用命令 pip3 install JupyterLab 在本地安装 JupyterLab。执行命令 jupyter-lab 将在系统的默认网络浏览器中运行 JupyterLab。Project Jupyter 还提供一个更老的类似系统，称为Jupyter Notebook。可以通过 pip3 install Notebook 命令在本地安装 Jupyter Notebook，用Jupyter Notebook 运行它。但 Jupyter Notebook 的功能不如 JupyterLab 强大，且官方宣布它最终会被 JupyterLab 取代。在本教程中，我们将在合适的阶段使用 JupyterLab。但在开始阶段，我们将使用 Linux 终端来运行 Python 程序，因此急需的是包管理器 pip。Anaconda 是一个非常流行的 Python 和 R 编程语言发行版，它主要用于机器学习和数据科学领域。作为未来的人工智能工程师和数据科学家，熟悉使用 Anaconda 也是一个不错的选择。现在我们需要确定最重要的一点 —— 本教程的风格。有大量人工智能开发相关的 Python 库，比如 NumPy、SciPy、Pandas、Matplotlib、Seaborn、TensorFlow、Keras、Scikit-learn 和 PyTorch。许多关于人工智能、机器学习和数据科学的教材和教程都是基于对其中一个或多个库的完整讲解。尽管对特定包的功能进行这样的覆盖讲解是一种高效的方式，但我的教程是更面向数学的。我们将首先讨论开发人工智能程序所需的数学概念，然后再介绍需要的 Python 基础知识和 Python 库。我们会为了探索实现这些数学概念所需的特性而不断回顾这些 Python 库。有时我也会要求你自己学习一些 Python 和数学的基本概念。在完成这些准备工作之后，如果我们就在这里结束，任何代码或数学概念都不讲，那将是一种罪过。因此，我们将继续学习人工智能和机器学习中最重要的数学概念：向量和矩阵。向量和矩阵矩阵是按行和列排列的数字、符号或数学表达式构成的矩形阵列。图 2 显示了一个 2 × 3 矩阵，它有 2 行和 3 列。如果你熟悉编程，在许多流行的编程语言中这个矩阵可以表示为一个二维数组。只有一行的矩阵称为行向量，只有一列的矩阵称为列向量。 就是一个行向量。为什么矩阵和向量在人工智能和机器学习中如此重要呢？人工智能和机器学习中广泛使用线性代数，而矩阵和向量是线性代数的核心。几个世纪以来，数学家们一直在研究矩阵和向量的性质和应用。高斯、欧拉、莱布尼茨、凯利、克莱姆和汉密尔顿等数学家在线性代数和矩阵论领域都有以他们的名字命名的定理。多年来，线性代数中发展出了许多分析矩阵和向量性质的技术。复杂的数据通常可以很容易用向量或矩阵来表示。举一个简单的例子，从一个人的医疗记录中，可以得到详细的年龄、身高（厘米）、体重（公斤）、收缩压、舒张压和空腹血糖（毫克/分升）。这些信息可以很容易用行向量来表示， 。人工智能和机器学习的第一个挑战来了：如果医疗记录有十亿条怎么办？即使动用成千上万的专业人员从中手动提取数据，这项任务也是无法完成的。因此，人工智能和机器学习利用程序来提取数据。人工智能和机器学习的第二个挑战是数据解读。这是一个广阔的领域，有许多技术值得探索。我将在后续文章中介绍相关内容。人工智能和机器学习应用除了面临数学/计算方面的挑战外，还面临硬件方面的挑战。随着处理的数据量的增加，数据存储、处理器速度、功耗等也成为人工智能应用面临的重要挑战。但现在让我们先抛开这些挑战，动手编写第一行人工智能代码。我们将编写一个简单的 Python 脚本，用来将两个向量相加。我们将用到名为 NumPy 的 Python 库，它支持多维矩阵（数组）的数学运算。用命令 pip3 install numpy 为 Python 3 安装 NumPy 包。如果你使用的是 JupyterLab、谷歌 Colab 或 Anaconda，那么 NumPy 应该已经被预安装了。但是为了演示，在本系列的前几篇文章中，我们都将在 Linux 终端上操作。在 Linux 终端上执行命令 python3 进入 Python 控制台。在这个控制台中可以逐行执行 Python 代码。图 3 展示了在控制台中逐行运行 Python 代码，将两个向量相加，并输出结果。首先，让我们试着逐行理解这些代码。由于本教程假定的编程经验很少，所以我将代码行标记为【基本】或【AI】。标记为【基本】的行是经典 Python 代码，标记为【AI】的行是用于开发人工智能程序的代码。通过区分基本和进阶的 Python 代码，我希望具有基本知识和中级编程技能的程序员都能够高效地使用本教程。import numpy as np #【基本】 a = np.array([11, 22, 33]) #【AI】 b = np.array([44, 55, 66]) #【AI】 c = np.add(a, b) #【AI】 print(c) #【基本】 import numpy as np 导入 numpy 库并将其命名为 np。Python 中的 import 语句类似于在 C/C++ 用 #include 来包含头文件，或者在 Java 中用import 来使用包。a = np.array([11, 22, 33]) 和 b = np.array([44, 55, 66]) 分别创建了名为 a 和 b 的一维数组（为了便于理解，目前假设向量等价于一维数组）。c = np.add(a, b) 将向量 a 和b 相加，并将结果存储在名为 c 的向量中。当然，用 a，b，c 作为变量名是一种糟糕的编程实践，但数学家倾向于将向量命名为 、 、 等。如果你完全没有 Python 编程经验，请自行了解 Python 变量的相关知识。print(c) 在终端上打印对象的值，即向量 [55 77 99]。你可以暂时这样理解向量相加, c = [55=11+44 77=22+55 99=33+66]。如果你想正式地了解向量和矩阵是如何相加的，但手头又没有相关的教材，我建议阅读维基百科上关于矩阵加法的文章。在网上搜索一下就会发现，用经典的 C/C++ 或 Java 程序来实现向量相加需要更多的代码。这说明 Python 很适合处理向量和矩阵。当我们执行越来越复杂的向量运算时，Python 的强大将进一步显现。在我们结束本文之前，我要做两个声明。第一，上面讨论的示例只处理了两个行向量（确切地说是 1 x 3 的矩阵）的相加，但真正的机器学习应用可能要处理 1000000 X 1000000 的矩阵。但不用担心，通过练习和耐心，我们将能够处理这些问题。第二，本文中给出许多定义包含了粗略的简化和不充分的描述。但如前面所说，在本系列结束之前，我将给这些模糊的术语下一个正式的定义。现在我们该结束这篇文章了。我希望所有人都安装文中提到的必要软件，并运行本文中的代码。在下一篇文章中，我们将首先讨论人工智能的历史、范畴和未来，然后深入探讨线性代数的支柱——矩阵论。（题图：MJ/25071901-abc4-4144-bf27-4d98bb1d9301/）via: https://www.opensourceforu.com/2022/08/artificial-intelligence-explaining-the-basics/作者：Deepu Benson 选题：lkxed 译者：toknow-gh 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
“安全”这个热词：应避免使用还是该更直接了当？
思考一下，如何在你的开源项目中真正定义安全性吧。科技行业以创造“热词”而小有名气，当然，其他行业也是如此。譬如，“故事驱动”和“轻规则”是当下流行的桌游概念，“解构”的汉堡和墨西哥卷饼在高级餐厅颇受欢迎。然而，技术热词的问题在于，它们可能直接影响你的生活。当某人标榜应用程序“安全”，以此来吸引你使用他们的产品，产品实际上是在暗示一种承诺：“安全”的含义就是它是安全的，它值得你的使用与信任。但问题是，“安全”这个词可能指的是许多事情，技术行业常将它用作一个过于泛化的术语，以至于它逐渐失去了实际含义。由于“安全”一词可能含义丰富，也可能一无是处，使用它就需要慎之又慎。事实上，最好是尽量避免使用这个词，取而代之的是，诉诸你真正要表达的东西。当 “安全” 意味着加密有时候，“安全” 会被作为 加密 的非常不明确的简短表述。在这种情况下，“安全” 指的是，对于外部观察者想要窃听你的数据，要经过一定的困难。避免这样表述：“本网站稳如磐石且安全无忧。”听起来很棒？你可能会想象一个拥有多重二次验证、零知识证明数据存储以及坚决的匿名策略的网站。你可以这么说：“本网站承诺有 99% 的在线时间，并且其流量都通过 SSL 进行加密和验证。”这样一来，承诺的含义变得清晰了，同时也明确了实现 “安全” 的方法（即使用 SSL）以及 “安全“ 的作用范围是什么。注意，这里并未对隐私或匿名做出任何明确的承诺。当 “安全” 意味着访问限制有时，“安全” 这个词是指应用程序或设备的访问权限。如果没有明确的解释，“安全” 可能涵盖从无效的“隐蔽即安全”模式，到简单的 htaccess 密码，直到生物识别扫描器等各种概念。避免这样表述：“我们已经为你防护好了系统。”你可以这么说：“我们的系统采用了二步验证法。”当 “安全” 意味着数据存储“安全” 这个词也可以指你的数据在服务器或设备上的储存方法。避免这样表述：“这个设备在数据存储上考虑了安全因素。”你可以这么说：“这个设备利用全盘加密技术来保护你的数据。”当提到远程存储时，“安全” 可能更多指的是谁可以访问存储数据。避免这样表述：“你的数据是安全的。”你可以这么说：“你的数据经过 PGP 加密，仅你持有私钥。”当 “安全” 意味着隐私今天，“隐私” 一词几乎和 “安全” 一样宽泛且模糊。一方面，“安全” 似乎必然就涉及 “隐私”，然而，这仅在 '安全' 有明确定义时才成立。是因为设有密码阻止外人进入所以称之为私有吗？还是因为数据已加密且仅你拥有密钥所以归为私有？又或者，由于存储你数据的厂商除了 IP 地址外对你一无所知，这才算是私有？光是口头声明 “隐私”，就像未经说明就声明 “安全” 一样，是不够的。避免这样表述：“你的数据在我们这里是安全的。”你可以这么说：“你的数据经 PGP 加密，且只有你拥有私钥。我们不需要你的任何个人信息，唯一能识别你的只有你的 IP 地址。”一些网站会声明 IP 地址在日志中保留期限，及非经法律授权绝不向执法部门交出用户数据等诸多承诺。虽然这些并不属于技术 “安全” 的范畴，但它们全都涉及的是信任度，你不能将这些看作是技术规格。明确所说科技是个复杂的话题，极易引发混淆。沟通是至关重要的，虽然有时候简拼和专有名词在某些场合可能管用，但通常来说，讲明白总是比较好的。当你对你的项目的 “安全” 感到自豪，不要只用模糊的词语进行简述。向其他人明确你具体做了什么来保护你的用户，同时也要明确你认为哪些事物已超出你的考量范围，并要经常进行这样的沟通。“安全” 是个好特点，但它的涵盖面过广，所以请勿畏于夸赞自己在某个具体方向上的特别之处。（题图：MJ/b8cc54ee-5556-4106-b9fa-b08539452aa7）via: https://opensource.com/article/22/9/security-buzzword-alternatives作者：Seth Kenlon 选题：lkxed 译者：ChatGPT 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出